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.

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.