1 ; +-----------------+
   2 ; | PureHTML Styles |
   3 ; +-----------------+
   4 
   5 ;-
   6 ;- Macros
   7 
   8 Macro SetIfInteger(Variable, Keyword)
   9   If (ReadPreferenceString(Keyword, ""))
  10     Variable = Val(ReadPreferenceString(Keyword, ""))
  11   EndIf
  12 EndMacro
  13 Macro SetIfString(Variable, Keyword)
  14   If (ReadPreferenceString(Keyword, ""))
  15     Variable = ReadPreferenceString(Keyword, "")
  16   EndIf
  17 EndMacro
  18 Macro SetIfColor(Variable, Keyword)
  19   If (ReadPreferenceString(Keyword, ""))
  20     Variable = ParseColor(ReadPreferenceString(Keyword, ""))
  21   EndIf
  22 EndMacro
  23 
  24 
  25 ;-
  26 ;- Procedures
  27 
  28 
  29 
  30 
  31 ; Parse a color string
  32 Procedure.i ParseColor(Input.s)
  33   Protected Result.i = -1
  34   
  35   If (FindString(Input, "RGB("))
  36     Input = StringField(Input, 2, "(")
  37     Input = RemoveString(Input, " ")
  38     Input = RTrim(Input, ")")
  39     Result = RGB(Val(StringField(Input, 1, ",")), Val(StringField(Input, 2, ",")), Val(StringField(Input, 3, ",")))
  40   Else
  41     Result = Val(Input)
  42   EndIf
  43   
  44   ProcedureReturn (Result)
  45 EndProcedure
  46 
  47 
  48 
  49 
  50 
  51 
  52 ; Load default preferences
  53 Procedure.i LoadDefaults()
  54   Protected i.i
  55 
  56   ; Formatting defaults
  57   Config\TabLength    =  2
  58   Config\LineNumbers  = #True
  59   Config\HideIDE      = #True
  60   Config\IncludeLinks = #False
  61   
  62   ; Font defaults
  63   Config\BGColor  = $DFFFFF
  64   Config\LNColor  = $D7FFFF
  65   Config\FontName = "Courier New"
  66   Config\FontSize =  11
  67   
  68   ; Read style defaults
  69   For i = 0 To #PHS_Count - 1
  70     Style(i)\Color = DefColor(i)
  71     If (i = #PHS_Keyword)
  72       Style(i)\Bold = #True
  73     Else
  74       Style(i)\Bold = #False
  75     EndIf
  76     Style(i)\Italic    = #False
  77     Style(i)\Underline = #False
  78     Style(i)\Strike    = #False
  79   Next i
  80 EndProcedure
  81 
  82 
  83 ; Import preferences
  84 Procedure.i LoadPrefs(File.s)
  85   Protected Result.i = #False
  86   Protected i.i, KeyBold.i
  87   
  88   ; Attempt to open preferences
  89   If (File And OpenPreferences(File))
  90     Result = #True
  91   EndIf
  92   If (Result)
  93   
  94     ; Read formatting settings
  95     PreferenceGroup("Global")
  96     SetIfInteger(Config\TabLength,   "TabLength")
  97     SetIfInteger(Config\LineNumbers, "EnableLineNumbers")
  98     SetIfInteger(Config\HideIDE, #PH_Title + "_HideIDEOptions")
  99     SetIfInteger(Config\IncludeLinks, #PH_Title + "_IncludeLinks")
 100     SetIfInteger(Style(#PHS_Keyword)\Bold, "EnableKeywordBolding")
 101     
 102     ; Read PureBasic-format settings
 103     PreferenceGroup("Editor")
 104     SetIfColor(Config\BGColor,    "BackgroundColor")
 105     SetIfColor(Config\LNColor,    "LineNumberBackColor")
 106     SetIfString(Config\FontName,  "EditorFontName")
 107     SetIfInteger(Config\FontSize, "EditorFontSize")
 108     For i = 0 To #PHS_Count - 1
 109       SetIfColor(Style(i)\Color, StyleKeyword(i) + "Color")
 110     Next i
 111     
 112     ; Read colors in import/export location
 113     PreferenceGroup("Colors")
 114     For i = 0 To #PHS_Count - 1
 115       SetIfColor(Style(i)\Color, StyleKeyword(i) + "Color")
 116     Next i
 117     
 118     ; Read extra settings, if found
 119     For i = 0 To #PHS_Count - 1
 120       PreferenceGroup(#PH_Title + "_" + StyleKeyword(i))
 121       SetIfColor(Style(i)\Color,       "Color")
 122       SetIfInteger(Style(i)\Bold,      "Bold")
 123       SetIfInteger(Style(i)\Italic,    "Italic")
 124       SetIfInteger(Style(i)\Underline, "Underline")
 125       SetIfInteger(Style(i)\Strike,    "Strikethrough")
 126     Next i
 127     
 128   EndIf
 129   If (Result)
 130     ClosePreferences()
 131   EndIf
 132   
 133   ProcedureReturn (Result)
 134 EndProcedure
 135 
 136 
 137 
 138 ; Write a preference in RGB(r, g, b) format
 139 Procedure WritePreferenceRGB(Keyword.s, Color.i)
 140   Protected Output.s
 141   
 142   Output = "RGB(" + Str(Red(Color)) + ", " + Str(Green(Color))
 143   Output + ", " + Str(Blue(Color)) + ")"
 144   WritePreferenceString(Keyword, Output)
 145 EndProcedure
 146 
 147 
 148 ; Export settings to a PB-importable file
 149 Procedure.i SavePrefs(File.s)
 150   Protected Result.i = #False
 151   Protected i.i
 152   
 153   If (CreatePreferences(File))
 154     Result = #True
 155   
 156     ; Write header
 157     PreferenceComment("PureBasic IDE Exported Preferences")
 158     PreferenceComment("Exported from " + #PH_Title + " version " + VersionString(#PH_Version))
 159     PreferenceComment("")
 160     PreferenceGroup("Sections")
 161     WritePreferenceInteger("IncludeColors", 1)
 162     PreferenceComment("")
 163     PreferenceComment("Color settings")
 164     PreferenceComment("")
 165     
 166     ; Write colors to export location
 167     PreferenceGroup("Colors")
 168     For i = 0 To #PHS_Count - 1
 169       WritePreferenceRGB(StyleKeyword(i) + "Color", Style(i)\Color)
 170       WritePreferenceInteger(StyleKeyword(i) + "Color_Used", 1)
 171     Next i
 172     WritePreferenceRGB("BackgroundColor", Config\BGColor)
 173     WritePreferenceInteger("BackgroundColor_Used", 1)
 174     WritePreferenceRGB("LineNumberBackColor", Config\LNColor)
 175     WritePreferenceInteger("LineNumberBackColor_Used", 1)
 176     WritePreferenceRGB("ProcedureBackColor", Config\BGColor)
 177     WritePreferenceInteger("ProcedureBackColor_Used", 0)
 178     PreferenceComment("")
 179     
 180     ; Write formatting settings
 181     PreferenceGroup("Global")
 182     WritePreferenceInteger("TabLength", Config\TabLength)
 183     WritePreferenceInteger("EnableLineNumbers", Config\LineNumbers)
 184     WritePreferenceInteger(#PH_Title + "_HideIDEOptions", Config\HideIDE)
 185     WritePreferenceInteger(#PH_Title + "_IncludeLinks", Config\IncludeLinks)
 186     WritePreferenceInteger("EnableKeywordBolding", Style(#PHS_Keyword)\Bold)
 187     PreferenceComment("")
 188     
 189     ; Write remaining settings to prefs location
 190     PreferenceGroup("Editor")
 191     WritePreferenceInteger("BackgroundColor", Config\BGColor)
 192     WritePreferenceInteger("LineNumberBackColor", Config\LNColor)
 193     WritePreferenceString("EditorFontName", Config\FontName)
 194     WritePreferenceInteger("EditorFontSize", Config\FontSize)
 195     
 196     ClosePreferences()
 197   EndIf
 198   
 199   ProcedureReturn (Result)
 200 EndProcedure
 201 
 202 
 203 ; Attempt to load PB IDE preferences, if known
 204 Procedure LoadIDEPrefs()
 205   Config\IOPath = GetCurrentDirectory()
 206   
 207   LoadDefaults()
 208   LoadPrefs(GetEnvironmentVariable("PB_TOOL_Preferences"))
 209   LoadPrefs(#PH_PrefFile)
 210   UpdateForm()
 211 EndProcedure
 212 
 213 
 214 
 215 ; Import settings to file
 216 Procedure.i TryImport()
 217   Protected Result.i = #False
 218   Protected File.s
 219   
 220   File = OpenFileRequester("Import", Config\IOPath, "Style Preferences (*.prefs)|*.prefs|All Files (*.*)|*.*", 0)
 221   If (File)
 222     Config\IOPath = GetPathPart(File)
 223     If (LoadPrefs(File))
 224       UpdateForm()
 225       Info("Successfully imported settings.")
 226       Result = #True
 227     Else
 228       Warn("Failed to import settings:" + #LF$ + File)
 229     EndIf
 230   EndIf
 231   
 232   ProcedureReturn (Result)
 233 EndProcedure
 234 
 235 ; Export settings to file
 236 Procedure.i TryExport()
 237   Protected Result.i = #False
 238   Protected File.s
 239   
 240   File = SaveFileRequester("Export", Config\IOPath, "Style Preferences (*.prefs)|*.prefs|All Files (*.*)|*.*", 0)
 241   If (File)
 242     If ((SelectedFilePattern() = 0) And (LCase(GetExtensionPart(File)) <> "prefs"))
 243       File + ".prefs"
 244     EndIf
 245     Config\IOPath = GetPathPart(File)
 246     If (SavePrefs(File))
 247       Info("Successfully exported settings.")
 248       Result = #True
 249     Else
 250       Warn("Failed to export settings:" + #LF$ + File)
 251     EndIf
 252   EndIf
 253   
 254   ProcedureReturn (Result)
 255 EndProcedure
 256 
 257 
 258 ;-
 259 ;  EOF