PBObsidian-Theme (Farbschema für PureBasic)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PBObsidian-Theme (Farbschema für PureBasic)

Beitrag von RSBasic »

Hallo edel,
wenn du es heruntergeladen hast, dann hast du neben der Einrichtungsanwendung eine Preference-Datei mit den einzelnen RGB-Farben. (PB-Exportierungsdatei)
Falls die Datei im Archiv nicht vorhanden ist, dann könnte es am Cache liegen. Einfach nochmal herunterladen und ggf. vorher Cache leeren.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: PBObsidian-Theme (Farbschema für PureBasic)

Beitrag von edel »

Danke
Benutzeravatar
N_Gnom
Beiträge: 149
Registriert: 11.09.2013 19:52

Re: PBObsidian-Theme (Farbschema für PureBasic)

Beitrag von N_Gnom »

Gibt es inzwischen eigentlich noch ein paar andere Farbschemen?
Ich bin nicht so der Typ fürs ewig rumprobieren.
Laptop: Win10@64bit - i3 2x2Ghz - 8GB Ram - 1TB HDD
Desktop: Win10@64bit - AMD Ryzen 5 2400G - MSI B450 Tomahawk - 8GB Ram - 240GB SSD
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PBObsidian-Theme (Farbschema für PureBasic)

Beitrag von RSBasic »

Naja, PB bietet standardmäßig 8 Design-Vorlagen an. (Siehe Einstellungen unter Editor\Farben)
Hier im Forum wurden auch einige Farbschemen veröffentlicht. Da musst du mal die Boardsuche benutzen. Am besten die Google-Suche mit "site:purebasic.fr", um auch im französischen und englischen Forum suchen zu können. Ob die jeweiligen Downloadlinks noch funktionieren, weiß ich nicht.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: PBObsidian-Theme (Farbschema für PureBasic)

Beitrag von edel »

Hier mal ein kleines Programm, welches die Farbeinstellungen von Eclipse umwandelt.
Die Themen gibt es auf eclipsecolorthemes.org. Einfach ein Theme auswaehlen und die ID aus der Url als Parameter uebergeben.
Das Programm laed die XML in den Speicher und erstellt danach eine Datei, die ueber die PB-IDE importiert werden kann.

http://eclipsecolorthemes.org/?view=theme&id=21 <- ID = 21

Code: Alles auswählen

InitNetwork()

#TIMEOUT   = 4000
#CHUNKSIZE = 512

Structure Theme
  Color.s
  Used.l
  Reverse.l
EndStructure

;/////////////////////////////////////////////////////////
;//
;//
;/////////////////////////////////////////////////////////
Procedure.s GetThemeName(xml)
  Protected name.s = ""
  Protected node.i
  
  If xml
    node = MainXMLNode(xml)
    
    If node 
      name = GetXMLAttribute(node, "name")
    EndIf
    
  EndIf
  
  ProcedureReturn name
EndProcedure

;/////////////////////////////////////////////////////////
;//
;//
;/////////////////////////////////////////////////////////
Procedure.s RGBString(color.s, reverse=0)  
  Protected r.a, g.a, b.a
  Protected value.i
  
  color = ReplaceString(color, "#", "$")
  value = Val(color)
  
  r = Red(value)
  g = Green(value)
  b = Blue(value)
  
  If reverse = 1
    r = Abs(255-r)
    g = Abs(255-g)
    b = Abs(255-b)    
  EndIf
    
  ProcedureReturn "RGB("+b+","+g+","+r+")"
EndProcedure

;/////////////////////////////////////////////////////////
;//
;//
;/////////////////////////////////////////////////////////
Procedure.s TransformTheme(xml)
  Protected result.s
  Protected node.i
  Protected color.s
  Protected NewMap Theme.Theme()

  Theme("ModuleColor")\Color = "-1" 
  Theme("ASMKeywordColor")\Color = "-1" 
  Theme("BackgroundColor")\Color = "-1" 
  Theme("BasicKeywordColor")\Color = "-1" 
  Theme("CommentColor")\Color = "-1" 
  Theme("ConstantColor")\Color = "-1" 
  Theme("LabelColor")\Color = "-1" 
  Theme("NormalTextColor")\Color = "-1" 
  Theme("NumberColor")\Color = "-1" 
  Theme("OperatorColor")\Color = "-1" 
  Theme("PointerColor")\Color = "-1" 
  Theme("PureKeywordColor")\Color = "-1" 
  Theme("SeparatorColor")\Color = "-1" 
  Theme("StringColor")\Color = "-1" 
  Theme("StructureColor")\Color = "-1" 
  Theme("LineNumberColor")\Color = "-1" 
  Theme("LineNumberBackColor")\Color = "-1" 
  Theme("MarkerColor")\Color = "-1" 
  Theme("CurrentLineColor")\Color = "-1" 
  Theme("SelectionColor")\Color = "-1" 
  Theme("SelectionFrontColor")\Color = "-1" 
  Theme("CursorColor")\Color = "-1" 
  Theme("Debugger_LineColor")\Color = "-1" 
  Theme("Debugger_LineSymbolColor")\Color = "-1" 
  Theme("Debugger_ErrorColor")\Color = "-1" 
  Theme("Debugger_ErrorSymbolColor")\Color = "-1" 
  Theme("Debugger_BreakPointColor")\Color = "-1" 
  Theme("Debugger_BreakpoinSymbolColor")\Color = "-1" 
  Theme("DisabledBackColor")\Color = "-1" 
  Theme("GoodBraceColor")\Color = "-1" 
  Theme("BadBraceColor")\Color = "-1" 
  Theme("ProcedureBackColor")\Color = "-1" 
  Theme("CustomKeywordColor")\Color = "-1" 
  Theme("Debugger_WarningColor")\Color = "-1" 
  Theme("Debugger_WarningSymbolColor")\Color = "-1" 
  Theme("IndentColor")\Color = "-1" 
  Theme("ToolsPanel_FrontColor")\Color = "0" 
  Theme("ToolsPanel_BackColor")\Color = "0"  
  
  
  node = MainXMLNode(xml)
  node = ChildXMLNode(node)
  
  result = "[Sections]"+ #LF$
  result + "IncludeColors = 1" + #LF$
  result + "[Colors]" + #LF$  
  
  While node
    
    color = GetXMLAttribute(node, "color")
    
    Select GetXMLNodeName(node)
      Case "singleLineComment"
        Theme("CommentColor")\Color = color        
      Case "background"
        Theme("BackgroundColor")\Color = color
        Theme("LineNumberBackColor")\Color = color
        Theme("ProcedureBackColor")\Color = color
        Theme("ToolsPanel_BackColor")\Color = color
      Case "foreground"
        Theme("NormalTextColor")\Color = color
        Theme("SeparatorColor")\Color = color
        Theme("ToolsPanel_FrontColor")\Color = color
        Theme("CursorColor")\Color = color
        Theme("CursorColor")\Color = color        
      Case "constant"
        Theme("ConstantColor")\Color = color
      Case "string"
        Theme("StringColor")\Color = color
      Case "lineNumber"
        Theme("LineNumberColor")\Color = color
      Case "number"
        Theme("NumberColor")\Color = color
      Case "keyword"
        Theme("BasicKeywordColor")\Color = color
        Theme("CustomKeywordColor")\Color = color          
      Case "currentLine"
        Theme("CurrentLineColor")\Color = color  
        Theme("Debugger_BreakPointColor")\Color = color  
      Case "operator"
        Theme("OperatorColor")\Color = color  
      Case "selectionBackground"
        Theme("SelectionColor")\Color = color  
        Theme("SelectionFrontColor")\Color = color       
        Theme("SelectionFrontColor")\reverse = #True       
      Case "class"
        Theme("PureKeywordColor")\Color = color  
    EndSelect    
    
    node = NextXMLNode(node)
  Wend  
  
  ForEach Theme()
        
    If Theme()\Color = "-1"    
      result + MapKey(Theme()) + " = " + RGBString("#000000") + #LF$
      result + MapKey(Theme()) + "_Used = 0" + #LF$      
    Else       
      result + MapKey(Theme()) + " = " + RGBString(Theme()\Color, Theme()\reverse) + #LF$
      result + MapKey(Theme()) + "_Used = 1" + #LF$      
    EndIf
    
  Next

  ProcedureReturn result
EndProcedure

;/////////////////////////////////////////////////////////
;//
;//
;/////////////////////////////////////////////////////////
Procedure.s GetThemeXML(id)
  
  Protected cid.i
  Protected header.s
  Protected headend.l
  Protected timeout.l  
  
  Protected buflen.i
  Protected buffer.s = ""
  Protected result.s = ""
    
  cid = OpenNetworkConnection("eclipsecolorthemes.org", 80)
  
  If cid
    
    header = "GET /?action=download&theme="+id+"&type=xml HTTP/1.1" + #CRLF$
    header + "Host: eclipsecolorthemes.org" + #CRLF$
    header + "Connection: close"            + #CRLF$
    header + #CRLF$
    
    SendNetworkString(cid, header)
    
    timeout = ElapsedMilliseconds()
    
    Repeat
      
      If NetworkClientEvent(cid) = #PB_NetworkEvent_Data 
        
        Repeat
          buffer = Space(#CHUNKSIZE)
          buflen = ReceiveNetworkData(cid, @buffer, #CHUNKSIZE)
          result + PeekS(@buffer, buflen, #PB_UTF8)
        Until buflen = 0
                        
        result = StringField(result, 2, #CRLF$ + #CRLF$)
        
        Break
        
      EndIf
      
    Until ElapsedMilliseconds() - timeout > #TIMEOUT
    
    CloseNetworkConnection(cid)
  EndIf
  
  ProcedureReturn result
EndProcedure

;/////////////////////////////////////////////////////////
;//
;//
;/////////////////////////////////////////////////////////
Procedure Main()
  Protected theme.l = 0
  Protected xml.i
  Protected file.i
  Protected result.s
  
  OpenConsole()
  
  theme  = Val(ProgramParameter())
  result = GetThemeXML(theme) 
  xml    = CatchXML(#PB_Any, @result, Len(result) * SizeOf(Character), 0, #PB_UTF8)
  
  If xml    
    result = TransformTheme(xml)
    
    file = CreateFile(#PB_Any, "" + theme + "_" + GetThemeName(xml)+ ".prefs")
    If file
      WriteString(file, result)    
      CloseFile(file)
    EndIf
    
    FreeXML(xml)    
  EndIf
  
EndProcedure : End Main()

Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PBObsidian-Theme (Farbschema für PureBasic)

Beitrag von RSBasic »

Ich habs noch nicht getestet, aber wenn die Color-Template-Konvertierung mit Hilfe deines Codes super funktioniert, dann ist das echt eine feine Sache. Damit kann man ein Sammelpaket für Farbschemen erstellen und bereitstellen.
Danke für dein Code. :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: PBObsidian-Theme (Farbschema für PureBasic)

Beitrag von c4s »

Danke an edel - scheint ganz gut zu funktionieren. Ich bin jedoch der Meinung, dass bspw. Prozeduren eine andere Farbe bekommen sollten. Hat einer von euch schon probiert die neuen Module-Schlüsselwörter (und ggf. weitere) richtig einzubinden?
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PBObsidian-Theme (Farbschema für PureBasic)

Beitrag von RSBasic »

Das wollte ich schon lange machen, weil mir das öfters auffiel. Es steht aber schon in meiner "irgendwann, wenn ich mal Zeit habe"-ToDo-Liste.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: PBObsidian-Theme (Farbschema für PureBasic)

Beitrag von c4s »

RSBasic hat geschrieben:Es steht aber schon in meiner "irgendwann, wenn ich mal Zeit habe"-ToDo-Liste.
Gut, danke für die Info. Bei mir übrigens auch... ;)
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: PBObsidian-Theme (Farbschema für PureBasic)

Beitrag von c4s »

So, ich habe edels Code mal ein wenig angepasst:

Code: Alles auswählen

InitNetwork()

#TIMEOUT   = 4000
#CHUNKSIZE = 512

Structure Theme
	Color.s
	Used.l
	Reverse.l
EndStructure

;/////////////////////////////////////////////////////////
;//
;//
;/////////////////////////////////////////////////////////
Procedure.s GetThemeName(xml)
	Protected name.s = ""
	Protected node.i
	
	If xml
		node = MainXMLNode(xml)
		
		If node
			name = GetXMLAttribute(node, "name")
		EndIf
		
	EndIf
	
	ProcedureReturn name
EndProcedure

;/////////////////////////////////////////////////////////
;//
;//
;/////////////////////////////////////////////////////////
Procedure.s RGBString(color.s, reverse=0) 
	Protected r.a, g.a, b.a
	Protected value.i
	
	color = ReplaceString(color, "#", "$")
	value = Val(color)
	
	r = Red(value)
	g = Green(value)
	b = Blue(value)
	
	If reverse = 1
		r = Abs(255-r)
		g = Abs(255-g)
		b = Abs(255-b)   
	EndIf
	
	ProcedureReturn "RGB("+b+","+g+","+r+")"
EndProcedure

;/////////////////////////////////////////////////////////
;//
;//
;/////////////////////////////////////////////////////////
Procedure.s TransformTheme(xml)
	Protected result.s
	Protected node.i
	Protected color.s
	Protected NewMap Theme.Theme()
	
	Theme("ASMKeywordColor")\Color = "-1"
	Theme("BackgroundColor")\Color = "-1"
	Theme("BadBraceColor")\Color = "-1"
	Theme("BasicKeywordColor")\Color = "-1"
	Theme("CommentColor")\Color = "-1"
	Theme("ConstantColor")\Color = "-1"
	Theme("CurrentLineColor")\Color = "-1"
	Theme("CursorColor")\Color = "-1"
	Theme("CustomKeywordColor")\Color = "-1"
	Theme("Debugger_BreakPointColor")\Color = "-1"
	Theme("Debugger_BreakpoinSymbolColor")\Color = "-1"
	Theme("Debugger_ErrorColor")\Color = "-1"
	Theme("Debugger_ErrorSymbolColor")\Color = "-1"
	Theme("Debugger_LineColor")\Color = "-1"
	Theme("Debugger_LineSymbolColor")\Color = "-1"
	Theme("Debugger_WarningColor")\Color = "-1"
	Theme("Debugger_WarningSymbolColor")\Color = "-1"
	Theme("DisabledBackColor")\Color = "-1"
	Theme("GoodBraceColor")\Color = "-1"
	Theme("IndentColor")\Color = "-1"
	Theme("LabelColor")\Color = "-1"
	Theme("LineNumberBackColor")\Color = "-1"
	Theme("LineNumberColor")\Color = "-1"
	Theme("MarkerColor")\Color = "-1"
	Theme("ModuleColor")\Color = "-1"  ; PB5.20
	Theme("NormalTextColor")\Color = "-1"
	Theme("NumberColor")\Color = "-1"
	Theme("OperatorColor")\Color = "-1"
	Theme("PlainBackground")\Color = "-1"
	Theme("PointerColor")\Color = "-1"
	Theme("ProcedureBackColor")\Color = "-1"
	Theme("PureKeywordColor")\Color = "-1"
	Theme("SelectionColor")\Color = "-1"
	Theme("SelectionFrontColor")\Color = "-1"
	Theme("SelectionRepeatColor")\Color = "-1"  ; PB5.30
	Theme("SeparatorColor")\Color = "-1"
	Theme("StringColor")\Color = "-1"
	Theme("StructureColor")\Color = "-1"
	Theme("ToolsPanel_BackColor")\Color = "0"
	Theme("ToolsPanel_FrontColor")\Color = "0"
	
	
	node = MainXMLNode(xml)
	node = ChildXMLNode(node)
	
	result = "[Sections]"+ #LF$
	result + "IncludeColors = 1" + #LF$
	result + "[Colors]" + #LF$ 
	
	While node
		
		color = GetXMLAttribute(node, "color")

		Select GetXMLNodeName(node)
			Case "background"
				Theme("BackgroundColor")\Color = color
				;Theme("DisabledBackColor")\Color = color
				;Theme("IndentColor")\Color = color
				Theme("LineNumberBackColor")\Color = color
				Theme("PlainBackground")\Color = color
				Theme("ProcedureBackColor")\Color = color
				Theme("ToolsPanel_BackColor")\Color = color
			Case "bracket"
				;Theme("BadBraceColor")\Color = color
				Theme("GoodBraceColor")\Color = color
				Theme("SeparatorColor")\Color = color
			Case "class" ;"method"
				Theme("ASMKeywordColor")\Color = color
				Theme("ModuleColor")\Color = color
				Theme("PureKeywordColor")\Color = color
			Case "constant"
				Theme("ConstantColor")\Color = color
			Case "currentLine"
				Theme("CurrentLineColor")\Color = color
				Theme("Debugger_BreakPointColor")\Color = color
			Case "enum"  ; TODO
				Theme("LabelColor")\Color = color
				Theme("PointerColor")\Color = color
			Case "field"  ; TODO
				Theme("StructureColor")\Color = color
			Case "foreground"
				Theme("CursorColor")\Color = color
				;Theme("MarkerColor")\Color = color
				Theme("NormalTextColor")\Color = color
				Theme("ToolsPanel_FrontColor")\Color = color
			Case "keyword"
				Theme("BasicKeywordColor")\Color = color
				Theme("CustomKeywordColor")\Color = color
			Case "lineNumber"
				Theme("LineNumberColor")\Color = color
			Case "number"
				Theme("NumberColor")\Color = color
			Case "findScope"
				Theme("SelectionRepeatColor")\Color = color
			Case "operator"
				Theme("OperatorColor")\Color = color
			Case "selectionBackground"
				Theme("SelectionColor")\Color = color
			Case "selectionForeground"
				Theme("SelectionFrontColor")\Color = color
			Case "singleLineComment"
				Theme("CommentColor")\Color = color
			Case "string"
				Theme("StringColor")\Color = color
		EndSelect   
		
		node = NextXMLNode(node)
	Wend 
	
	ForEach Theme()
		
		If Theme()\Color = "-1"   
			result + MapKey(Theme()) + " = " + RGBString("#000000") + #LF$
			result + MapKey(Theme()) + "_Used = 0" + #LF$     
		Else       
			result + MapKey(Theme()) + " = " + RGBString(Theme()\Color, Theme()\reverse) + #LF$
			result + MapKey(Theme()) + "_Used = 1" + #LF$     
		EndIf
		
	Next
	
	ProcedureReturn result
EndProcedure

;/////////////////////////////////////////////////////////
;//
;//
;/////////////////////////////////////////////////////////
Procedure.s GetThemeXML(id)
	
	Protected cid.i
	Protected header.s
	Protected headend.l
	Protected timeout.l 
	
	Protected buflen.i
	Protected buffer.s = ""
	Protected result.s = ""
	
	cid = OpenNetworkConnection("eclipsecolorthemes.org", 80)
	
	If cid
		
		header = "GET /?action=download&theme="+id+"&type=xml HTTP/1.1" + #CRLF$
		header + "Host: eclipsecolorthemes.org" + #CRLF$
		header + "Connection: close"            + #CRLF$
		header + #CRLF$
		
		SendNetworkString(cid, header)
		
		timeout = ElapsedMilliseconds()
		
		Repeat
			
			If NetworkClientEvent(cid) = #PB_NetworkEvent_Data
				
				Repeat
					buffer = Space(#CHUNKSIZE)
					buflen = ReceiveNetworkData(cid, @buffer, #CHUNKSIZE)
					result + PeekS(@buffer, buflen, #PB_UTF8)
				Until buflen = 0
				
				result = StringField(result, 2, #CRLF$ + #CRLF$)
				
				Break
				
			EndIf
			
		Until ElapsedMilliseconds() - timeout > #TIMEOUT
		
		CloseNetworkConnection(cid)
	EndIf
	
	ProcedureReturn result
EndProcedure

;/////////////////////////////////////////////////////////
;//
;//
;/////////////////////////////////////////////////////////
Procedure Main()
	Protected theme.l = 0
	Protected xml.i
	Protected file.i
	Protected result.s
	
	OpenConsole()
	
	theme  = Val(ProgramParameter())  ; Theme ID
	result = GetThemeXML(theme)
	xml    = CatchXML(#PB_Any, @result, Len(result) * SizeOf(Character), 0, #PB_UTF8)
	
	If xml   
		result = TransformTheme(xml)
		
		file = CreateFile(#PB_Any, GetHomeDirectory() + theme + "_" + GetThemeName(xml)+ ".prefs")
		If file
			WriteString(file, result)   
			CloseFile(file)
		EndIf
		
		FreeXML(xml)   
	EndIf
	
EndProcedure : End Main()
Die größte Änderung ist wohl, dass nun Label und Pointer die (inhaltlich nicht richtige) enum- und Strukturen die field-Farbe bekommen. Außerdem habe ich die neue SelectionRepeatColor-Farbe eingebaut.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Antworten