Seite 4 von 4

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

Verfasst: 21.12.2013 00:12
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.

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

Verfasst: 21.12.2013 13:29
von edel
Danke

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

Verfasst: 26.12.2013 21:05
von N_Gnom
Gibt es inzwischen eigentlich noch ein paar andere Farbschemen?
Ich bin nicht so der Typ fürs ewig rumprobieren.

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

Verfasst: 26.12.2013 21:12
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.

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

Verfasst: 05.01.2014 15:43
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()


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

Verfasst: 05.01.2014 15:48
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:

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

Verfasst: 12.06.2014 00:14
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?

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

Verfasst: 12.06.2014 09:02
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.

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

Verfasst: 12.06.2014 09:31
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... ;)

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

Verfasst: 13.06.2014 23:03
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.