rmthemegen 0.0.32 → 0.0.33

Sign up to get free protection for your applications and to get access to all the features.
data/bin/geany_fix.rb ADDED
@@ -0,0 +1,274 @@
1
+ #!/usr/bin/env ruby
2
+ #require 'rubygems'
3
+ #require 'xmlsimple'
4
+ #require 'color'
5
+
6
+ #doing it with local files since these are stable gems and I want geany_fix.rb to function without gem dependencies.
7
+
8
+ #***********************************************************************
9
+ # geany_fix.rb - a utility to create a new, random color theme for the
10
+ # geany editor. http://www.geany.org/
11
+ #
12
+ # Released under an MIT-style license, see license.txt for details
13
+ #
14
+ # copyright (c) David Heitzman 2011
15
+ #
16
+ #***********************************************************************
17
+
18
+ # geany_fix.rb uses a local copy of gems color and xml-simple, in order
19
+ # ease use as a stand-alone utility.
20
+
21
+ require File.dirname(__FILE__)+"/token_list"
22
+ require File.dirname(__FILE__)+'/color/color'
23
+ require File.dirname(__FILE__)+'/xmlsimple.rb'
24
+
25
+ module RMThemeGen
26
+ class GeanyFixer < RMThemeParent
27
+
28
+ attr_reader :xmlout #a huge structure of xml that can be given to XmlSimple.xml_out() to create that actual color theme file
29
+
30
+ def initialize
31
+ # @rand = Random.new
32
+ @iterations = 0
33
+ @iterations = ARGV[0].to_s.to_i
34
+
35
+ puts "geany_fix - puts a new (random) color theme into your geany directory"
36
+ puts " copyright (c) David Heitzman 2011 "
37
+ puts " Note: if you want to put back your old Geany colors, go to ~/.config/geany/filedefs/ and"
38
+ puts " copy the corresponding _old_xxx file back onto filetypes.xyz, eg. filetypes.html, etc. "
39
+ puts " Restart geany to see new colors "
40
+
41
+ begin
42
+ @dir = (File.expand_path "~/.config/geany/filedefs/")
43
+ @filelist = Dir.glob(@dir+"/filetypes.*")
44
+ # puts @dir+"filetypes.*"
45
+ # puts @filelist.inspect
46
+ t =Time.now
47
+ @extstring = t.year.to_s+t.month.to_s+t.day.to_s+t.sec.to_s
48
+ # rescue
49
+ # raise "Sorry. There was trouble accessing the files in " + @dir
50
+ end
51
+
52
+
53
+ @italic_candidates = ["STRING", "SYMBOL", "REQUIRE"]
54
+
55
+ @bold_candidates = ["KEYWORD","RUBY_SPECIFIC_CALL", "CONSTANT", "COMMA", "PAREN","RUBY_ATTR_ACCESSOR_CALL", "RUBY_ATTR_READER_CALL" ,"RUBY_ATTR_WRITER_CALL", "IDENTIFIER"]
56
+ # with code inspections we don't color the text, we just put a line or something under it .
57
+ @code_inspections = ["ERROR","WARNING_ATTRIBUTES","DEPRECATED", "TYPO","WARNING_ATTRIBUTES", "BAD_CHARACTER",
58
+ "CUSTOM_INVALID_STRING_ESCAPE_ATTRIBUTES","ERRORS_ATTRIBUTES", "MATCHED_BRACE_ATTRIBUTES"]
59
+ @cross_out = ["DEPRECATED_ATTRIBUTES" ]
60
+
61
+ @unders = %w(-1 0 1 2 5 )
62
+ @underline_candidates = ["STRING"]
63
+ @italic_chance = 0.2
64
+ @bold_chance = 0.4
65
+ @underline_chance = 0.3
66
+ @bright_median = 0.85
67
+ @min_bright = @bright_median * 0.65
68
+ @max_bright = [@bright_median * 1.35,1.0].max
69
+
70
+ @min_bright = 0.0
71
+ @max_bright = 1.0
72
+
73
+ # if we avoid any notion of "brightness", which is an absolute quality, then we
74
+ # can make our background any color we want !
75
+
76
+ #tighter contrast spec
77
+ @cont_median = 0.85
78
+ @min_cont = @cont_median * 0.65
79
+ @max_cont = [@cont_median * 1.35,1.0].max
80
+
81
+ #broad contrast spec
82
+ @min_cont = 0.32
83
+ @max_cont = 1.0
84
+
85
+ @schemeversion = 1
86
+ @background_max_brightness = 0.16
87
+ @background_grey = true #if false, allows background to be any color, as long as it meets brightness parameter
88
+ # @foreground_min_brightness = 0.4
89
+
90
+
91
+ @backgroundcolor= randcolor( :shade_of_grey=>@background_grey, :max_bright=>@background_max_brightness)# "0"
92
+
93
+ end #initialize
94
+
95
+ def randthemename
96
+ out = " "
97
+ while out.include? " " do
98
+ out = @@adjectives[rand * @@adjectives.size]+"_"+@@nouns[rand * @@nouns.size]
99
+
100
+ end
101
+ return out
102
+ end
103
+
104
+ def randfilename(existing = "")
105
+ if existing != "" then
106
+ out=existing
107
+ else
108
+ ar=["a","b","f","h","z","1","5"]
109
+ ar.shuffle!
110
+ out =""
111
+ ar.each { |n|
112
+ out << n
113
+ }
114
+ end
115
+ return "rmt_"+out+".xml"
116
+ end
117
+
118
+
119
+ def randcolor(opts={})
120
+
121
+ df= { :r=>nil, :g=>nil, :b=>nil, #these are the usual 0..255
122
+ :bg_rgb => nil,
123
+ :min_cont => @min_cont, #if a backrgb (background color) is supplied this will be used to create a minimum contrast with it.
124
+ :max_cont => @max_cont,
125
+ :max_bright => @max_bright,
126
+ :min_bright => @min_bright,
127
+ # :bright_median => 0.5,
128
+ :shade_of_grey => false} #forces r == g == b
129
+ df = df.merge opts
130
+ df[:bg_rgb] = Color::RGB.from_html(df[:bg_rgb]) if df[:bg_rgb]
131
+ color = brightok = contok = nil;
132
+ while (!color || !brightok || !contok ) do
133
+ r = (df[:r] || rand*256)%256 #mod for robustness
134
+ g = (df[:g] || rand*256)%256
135
+ b = (df[:b] || rand*256)%256
136
+ g = b = r if df[:shade_of_grey] == true
137
+ color = Color::RGB.new(r,g,b)
138
+ #puts "bg" + @backgroundcolor if df[:bg_rgb]
139
+ #puts "color "+color.html
140
+ #puts "contrast "+color.contrast(df[:bg_rgb]).to_s if df[:bg_rgb]
141
+ contok = df[:bg_rgb] ? (df[:min_cont]..df[:max_cont]).include?( color.contrast(df[:bg_rgb]) ) : true
142
+ #puts "contok "+contok.to_s
143
+ brightok = (df[:min_bright]..df[:max_bright]).include?( color.to_hsl.brightness )
144
+ #puts "brightok "+brightok.to_s
145
+ end
146
+
147
+ cn = color.html
148
+ cn= cn.slice(1,cn.size)
149
+ return cn
150
+ end
151
+
152
+ def go_fix_geany
153
+ #goes into the geany directory and kicks some ass. it replaces every single color definition with
154
+ #something random, of course with a consistent background.
155
+
156
+ @filelist.each do |f|
157
+ begin
158
+ # puts f+" -->"+@dir+"_old_"+@extstring+File.basename(f)
159
+ # IO.copy_stream(f,@dir+"_old_"+@extstring+File.basename(f))
160
+ copystring="cp #{f} #{@dir+"/_old_"+@extstring+File.basename(f)}"
161
+ # puts(copystring)
162
+ `#{copystring}`
163
+ rescue
164
+ backup_problem = true
165
+ raise "sorry there was a problem backing up the following file: "+f
166
+ end
167
+ end
168
+
169
+ ##########################################
170
+ # copy in our new files from token_list.rb
171
+ ##########################################
172
+ @@geany_file_contents.each_key do |key|
173
+ filename=@dir+'/filetypes.'+key.to_s
174
+ # puts filename
175
+ @fout1 = File.open(filename,"w+")
176
+ @@geany_file_contents[key].each do |c|
177
+ @fout1.puts c
178
+ end
179
+ @fout1.close
180
+ end
181
+
182
+ @filelist = Dir.glob(@dir+"/filetypes.*")
183
+ @filelist.each do |f|
184
+ # puts f.inspect
185
+ @fin = File.open(f,"r+")
186
+ @fout = File.open(@dir+"/tmp_out_"+rand.to_s,"w+")
187
+ # puts @fin.inspect
188
+
189
+ while !@fin.eof? do
190
+ curpos = @fin.pos
191
+ line = @fin.readline
192
+ if line[0] != "#" && line.include?("=") && line.include?("0x") then
193
+ # go in and root out the color and give it a new one.
194
+ # puts "here is the line I'm working on -- "
195
+ # puts line
196
+ r1 = randcolor(:bg_rgb=>@backgroundcolor, :min_cont=>@min_cont, :max_cont=>@max_cont).upcase
197
+ r2 = @backgroundcolor.upcase
198
+ token = line.split("=")[0]
199
+ p3 = line.split(";")[2] || "false"
200
+ p4 = line.split(";")[3] || "false"
201
+ case File.basename(f)
202
+ when "filetypes.common"
203
+ if token == "marker_search" then
204
+ r9 = randcolor(:bg_rgb=>@backgroundcolor, :min_cont=>0.35, :max_cont=>@max_cont).upcase
205
+ newl = token +"="+"0x"+r1+";0x"+r9+";true;true"
206
+ elsif token == "caret" then
207
+ r9 = randcolor(:bg_rgb=>@backgroundcolor, :min_cont=>0.35, :max_cont=>@max_cont).upcase
208
+ newl = token +"="+"0xFFFFFF;0x"+r9+";"+p3+";"+p4
209
+ elsif token == "current_line" then
210
+ r9 = randcolor(:bg_rgb=>@backgroundcolor, :min_cont=>@min_cont*0.15, :max_cont=>@min_cont*0.3).upcase
211
+ newl = token +"="+"0x"+r1+";0x"+r9+";"+"true"+";"+"false"
212
+ elsif token == "selection" then
213
+ r9 = randcolor(:bg_rgb=>@backgroundcolor, :min_cont=>@min_cont*0.25, :max_cont=>@min_cont*0.5).upcase
214
+ newl = token +"="+"0x"+r1+";0x"+r9+";"+"false"+";"+"true"
215
+ elsif token == "brace_good" then
216
+ rb = randcolor(:bg_rgb=>@backgroundcolor, :min_cont=>0.25, :max_cont=>@max_cont).upcase
217
+ rf = randcolor(:bg_rgb=>rb, :min_cont=>0.30, :max_cont=>1.0).upcase
218
+ newl = token +"="+"0x"+rf+";0x"+rb+";"+"true"+";"+"false"
219
+ elsif token == "brace_bad" then
220
+ rb = randcolor(:bg_rgb=>@backgroundcolor, :min_cont=>@min_cont, :max_cont=>1.0).upcase
221
+ rf = randcolor(:bg_rgb=>rb, :min_cont=>0.30, :max_cont=>1.0).upcase
222
+ newl = token +"="+"0x"+rf+";0x"+rb+";"+"true"+";"+"false"
223
+ elsif token.include?("type") then
224
+ newl ="type=0xffffff;;true;false"
225
+ elsif token.include?("indent_guide") then
226
+ newl= "indent_guide=0xc0c0c0;;false;false"
227
+ else
228
+ newl = token +"="+"0x"+r1+";0x"+r2+";"+p3+";"+p4
229
+ end
230
+
231
+ when "filetypes.xml"
232
+ newl = token +"="+"0x"+r1+";0x"+r2+";"+p3+";"+p4
233
+
234
+ when "filetypes.ruby"
235
+ if token=="default" then
236
+ r3 = randcolor(:bg_rgb=>@backgroundcolor, :min_cont=>@min_cont, :max_cont=>@max_cont).upcase
237
+ #for whatever reason this needs to go in there in a ruby file : pod=0x388afb;0x131313;false;false
238
+ newl = token +"="+"0x"+r1+";0x"+r2+";"+p3+";"+p4+"\npod=0x#{r3};0x#{@backgroundcolor};false;false"
239
+ elsif token.include?("comment") then
240
+ r1 = randcolor(:bg_rgb=>@backgroundcolor, :min_cont=>@min_cont*0.87, :max_cont=>@min_cont*0.95).upcase
241
+ r2 = @backgroundcolor.upcase
242
+ newl = token +"="+"0x"+r1+";0x"+r2+";"+p3+";"+p4
243
+ else
244
+ newl = token +"="+"0x"+r1+";0x"+r2+";"+p3+";"+p4
245
+ end
246
+ else ############ DEFAULT ############
247
+ if token.include?("comment") then
248
+ r1 = randcolor(:bg_rgb=>@backgroundcolor, :min_cont=>@min_cont*0.77, :max_cont=>@min_cont*0.95).upcase
249
+ r2 = @backgroundcolor.upcase
250
+ newl = token +"="+"0x"+r1+";0x"+r2+";"+p3+";"+p4
251
+ else
252
+ newl = token +"="+"0x"+r1+";0x"+r2+";"+p3+";"+p4
253
+ end
254
+ end
255
+ @fout.puts(newl)
256
+ else
257
+ @fout.puts(line)
258
+ end
259
+ end
260
+ if @fout then
261
+ # puts "wanting to delete "+@fin.path.to_s
262
+ # puts "wanting to copy this file onto it:"+@fout.path.to_s
263
+ File.delete(@fin.path.to_s)
264
+ File.rename(@fout.path.to_s, @fin.path.to_s )
265
+ else puts "there was a problem writing to the new file #{@fout.path.to_s} so I left the old one in place"
266
+ end
267
+ @fout.close
268
+ end
269
+ end
270
+ end #class
271
+ end #module
272
+
273
+ l = RMThemeGen::GeanyFixer.new
274
+ l.go_fix_geany
data/bin/geanyfy.rb ADDED
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #this is to open all of the editable text files in the current and all subdirectories into geany
4
+ if !File.exist?("/usr/bin/geany")
5
+ exit "Doesn't look like you have geany installed, sorry."
6
+ end
7
+
8
+ class Geanyfy
9
+ attr_accessor :filelist, :openables, :subs
10
+
11
+ def initialize
12
+ @openables = ["php","rb","sql","py","h","c","java"]
13
+ @filelist = []
14
+ @subs = []
15
+ end
16
+
17
+ def get_file_list(curdir)
18
+ match_openables(curdir)
19
+ allfiles = Dir.entries(curdir)
20
+ allfiles.each do |f|
21
+ get_file_list(f) if File.directory?(f) && ![".",".."].include?( f)
22
+ end
23
+ end
24
+
25
+ def match_openables(dir_string)
26
+ #returns an array of filenames that are of the type specified by @openables
27
+ @openables.each do |o|
28
+ dir_string += File::SEPARATOR if dir_string[-1,1] != File::SEPARATOR
29
+ @filelist.concat Dir[dir_string+"*."+o]
30
+ end
31
+ end
32
+
33
+ def open_all_files
34
+ @open_string = "geany "
35
+ @filelist.each do |f|
36
+ @open_string += " " + f
37
+ end
38
+ `#{@open_string} &`
39
+ end
40
+ end
41
+
42
+ g=Geanyfy.new
43
+ g.get_file_list(File.dirname(__FILE__))
44
+
45
+ g.open_all_files
@@ -12,7 +12,7 @@
12
12
  #originally it was written and tested for ruby 1.9.2
13
13
 
14
14
 
15
- require File.dirname(__FILE__)+'./lib/rmthemegen/rmthemegen_187'
15
+ require File.expand_path('../../lib/rmthemegen/rmthemegen_187',__FILE__)
16
16
 
17
17
  puts
18
18
  puts " rmthemegen - creates theme files for use with rubymine (3.0.0 and up) "
data/lib/geanyfy.rb ADDED
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #this is to open all of the editable text files in the current and all subdirectories into geany
4
+ if !File.exist?("/usr/bin/geany")
5
+ exit "Doesn't look like you have geany installed, sorry."
6
+ end
7
+
8
+ class Geanyfy
9
+ attr_accessor :filelist, :openables, :subs
10
+
11
+ def initialize
12
+ @openables = ["php","rb","sql","py","h","c","java"]
13
+ @filelist = []
14
+ @subs = []
15
+ end
16
+
17
+ def get_file_list(curdir)
18
+ match_openables(curdir)
19
+ allfiles = Dir.entries(curdir)
20
+ allfiles.each do |f|
21
+ get_file_list(f) if File.directory?(f) && ![".",".."].include?( f)
22
+ end
23
+ end
24
+
25
+ def match_openables(dir_string)
26
+ #returns an array of filenames that are of the type specified by @openables
27
+ @openables.each do |o|
28
+ dir_string += File::SEPARATOR if dir_string[-1,1] != File::SEPARATOR
29
+ @filelist.concat Dir[dir_string+"*."+o]
30
+ end
31
+ end
32
+
33
+ def open_all_files
34
+ @open_string = "geany "
35
+ @filelist.each do |f|
36
+ @open_string += " " + f
37
+ end
38
+ `#{@open_string} &`
39
+ end
40
+ end
41
+
42
+ g=Geanyfy.new
43
+ g.get_file_list(File.dirname(__FILE__))
44
+
45
+ g.open_all_files
@@ -52,7 +52,6 @@ module RMThemeGen
52
52
  # underline not implemented yet. There are several font decorations in rubymine,
53
53
  # probably should be used sparingly.
54
54
  @italic_candidates = ["STRING", "SYMBOL", "REQUIRE"]
55
-
56
55
  @bold_candidates = ["KEYWORD","RUBY_SPECIFIC_CALL", "CONSTANT", "COMMA", "PAREN","RUBY_ATTR_ACCESSOR_CALL", "RUBY_ATTR_READER_CALL" ,"RUBY_ATTR_WRITER_CALL", "IDENTIFIER"]
57
56
  # with code inspections we don't color the text, we just put a line or something under it .
58
57
  @code_inspections = ["ERROR","WARNING_ATTRIBUTES","DEPRECATED", "TYPO","WARNING_ATTRIBUTES", "BAD_CHARACTER",
@@ -70,7 +69,6 @@ module RMThemeGen
70
69
 
71
70
  # if we avoid any notion of "brightness", which is an absolute quality, then we
72
71
  # can make our background any color we want, then adjust contrast to taste
73
-
74
72
  #tighter contrast spec
75
73
  @cont_median = 0.85
76
74
  # @min_cont = @cont_median * 0.65
@@ -89,9 +87,9 @@ module RMThemeGen
89
87
  @bg_color_style = 0 #0 = grey/dark 1 = grey/light (whitish), 2 = any color
90
88
  # @foreground_min_brightness = 0.4
91
89
 
92
-
93
- @backgroundcolor= randcolor( :shade_of_grey=>@background_grey, :max_bright=>@background_max_brightness)# "0"
94
-
90
+ @document_globals = {}
91
+ @backgroundcolor = randcolor( :shade_of_grey=>@background_grey, :max_bright=>@background_max_brightness)# "0"
92
+ @textmate_hash = {}
95
93
  reset_colorsets
96
94
  end #def initialize
97
95
 
@@ -236,16 +234,18 @@ module RMThemeGen
236
234
  if o == "CARET_ROW_COLOR" then
237
235
  @caret_row_color = randcolor(:bg_rgb=>@backgroundcolor,:min_cont=>0.05,:max_cont => 0.08,:shade_of_grey=>false)
238
236
  newopt << {:name=> o, :value => @caret_row_color }
237
+ @document_globals[:CARET_ROW_COLOR] = @caret_row_color
239
238
  elsif o.include?("SELECTION_BACKGROUND") then
240
239
  @selection_background = randcolor(:bg_rgb=>@backgroundcolor,:min_cont=>0.07,:max_cont => 0.09,:shade_of_grey=>false)
241
240
  newopt << {:name=> o, :value => @selection_background }
241
+ @document_globals[:SELECTION_BACKGROUND] = @selection_background
242
242
  elsif o.include?("SELECTION_FOREGROUND") then
243
243
  newopt << {:name=> o }
244
244
  elsif o.include?("GUTTER_BACKGROUND") then
245
245
  newopt << {:name=> o, :value => @backgroundcolor }
246
246
  elsif o.include?("CARET_COLOR") then
247
- newopt << {:name=> o, :value => randcolor(:bg_rgb=>@backgroundcolor, :min_cont=>0.30,:max_cont=>0.7,:shade_of_grey=>true) }
248
-
247
+ newopt << {:name=> o, :value => (@caret_color = randcolor(:bg_rgb=>@backgroundcolor, :min_cont=>0.30,:max_cont=>0.7,:shade_of_grey=>true) )}
248
+ @document_globals[:CARET_COLOR] = @caret_color
249
249
  elsif o.include?("READONLY_BACKGROUND") then
250
250
  newopt << {:name=> o, :value => randcolor(:bg_rgb=>@backgroundcolor, :min_cont=>0.03,:max_cont=>0.09,:shade_of_grey=>@background_grey) }
251
251
  elsif o.include?("READONLY_FRAGMENT_BACKGROUND") then
@@ -300,12 +300,13 @@ module RMThemeGen
300
300
  {:name => "EFFECT_COLOR" },{:name => "FONT_TYPE", :value=>fonttype.to_s },
301
301
  {:name => "ERROR_STRIPE_COLOR", :value =>randcolor(:bg_rgb=>@backgroundcolor) }]}]
302
302
  #default text and background for whole document
303
- when ["TEXT","FOLDED_TEXT_ATTRIBUTES"].include?( o.to_s)
303
+ when ["TEXT","FOLDED_TEXT_ATTRIBUTES"].include?( o.to_s)
304
304
  newcol = randcolor(:bg_rgb=>@backgroundcolor )
305
305
  optblj=[{:option=>[ {:name => "FOREGROUND", :value => newcol},
306
306
  {:name => "BACKGROUND", :value =>@backgroundcolor},
307
307
  {:name => "EFFECT_COLOR" },{:name => "FONT_TYPE", :value=>fonttype.to_s },
308
- {:name => "ERROR_STRIPE_COLOR", :value =>randcolor(:bg_rgb=>@backgroundcolor)}]}]
308
+ {:name => "ERROR_STRIPE_COLOR", :value => (randcolor(:bg_rgb=>@backgroundcolor) ) }]}]
309
+ @document_globals[:TEXT] = newcol
309
310
  when @code_inspections.include?(o.to_s)
310
311
  newcol = randcolor(:bg_rgb=>@backgroundcolor)
311
312
  optblj=[{:option=>[ {:name => "FOREGROUND"},
@@ -328,7 +329,13 @@ module RMThemeGen
328
329
  {:name => "ERROR_STRIPE_COLOR", :value =>randcolor(:bg_rgb=>@backgroundcolor) }]}]
329
330
  end
330
331
  newopt[0][:option] << {:name =>o.to_s , :value=>optblj}
332
+ tmphash = {}
333
+ optblj[0][:option].each do |siing|
334
+ tmphash[ siing[:name].to_sym ] = siing[:value]
335
+ end
336
+ @textmate_hash[o.to_sym] = tmphash
331
337
  end
338
+
332
339
  @xmlout[:scheme][0][:attributes] = newopt
333
340
  end
334
341
 
@@ -377,6 +384,7 @@ module RMThemeGen
377
384
  end
378
385
  @backgroundcolor= randcolor(:shade_of_grey=>@background_grey, :max_bright=>@background_max_brightness,
379
386
  :min_bright => @background_min_brightness )# "0"
387
+ @document_globals[:backgroundcolor] = @backgroundcolor
380
388
  @themename = randthemename
381
389
  @xmlout = {:scheme=>
382
390
  [{
@@ -399,6 +407,8 @@ module RMThemeGen
399
407
  XmlSimple.xml_out(@xmlout,{:keeproot=>true,:xmldeclaration=>true,:outputfile=> @outf, :rootname => "scheme"})
400
408
  @outf.close
401
409
  @theme_successfully_created = true
410
+ puts "textmate_hash: "
411
+ puts @textmate_hash.inspect
402
412
  return File.expand_path(@outf.path)
403
413
  end
404
414
 
@@ -15,6 +15,7 @@
15
15
  require 'rubygems'
16
16
  require 'color'
17
17
  require 'xmlsimple'
18
+ require 'rexml/document'
18
19
  require File.dirname(__FILE__)+"/token_list"
19
20
  require File.dirname(__FILE__)+'/rgb_contrast_methods'
20
21
  require File.dirname(__FILE__)+'/rmthemegen_to_css'
@@ -23,28 +24,7 @@ module RMThemeGen
23
24
 
24
25
  class ThemeGenerator < RMThemeParent
25
26
 
26
- def set_tm_doc_options
27
- #newopt has to be a hash of "key" => ["color"],"string" => ["color"]
28
- #order matters here. ...
29
- #newopt = {}
30
- #newopt={:key => ["background"],:string=>["#00ff00"] }
31
- #newopt.merge!( {:key => ["caret"],:string => ["#000000"]})
32
- #newopt.merge!( {:key => ["foreground"],:string => ["#ffffff"] })
33
- @xml_textmate_out[:dict][0][:array][0][:dict][0][:dict][0]
34
- end
35
-
36
- def set_tm_doc_colors
37
- end
38
-
39
- def set_tm_element_colors
40
- end
41
-
42
- def read_tmfile
43
- @inf = File.open("./iPlastic.tmTheme","r")
44
-
45
- @xml_in=XmlSimple.xml_in(@inf)
46
- puts @xml_in.inspect
47
- end
27
+
48
28
 
49
29
  def to_textmate
50
30
  #it will save the theme file ".tmTheme" in the same directory as other themes
@@ -66,23 +46,110 @@ module RMThemeGen
66
46
  :key =>["settings"],
67
47
  :dict=> [{"string"=>["#000000","#FFFFFF"],
68
48
  "key"=>["background","foreground"]
69
-
70
49
  }]
71
-
72
-
73
50
  }]}]
74
51
  }]
75
52
  }
76
53
  @savefile = "rmt_"+@themename+".tmTheme"
77
54
  @outf = File.new(@opts[:outputdir]+"/"+@savefile, "w+")
78
- set_tm_doc_options
79
- set_tm_doc_colors
80
- set_tm_element_colors
81
- XmlSimple.xml_out(@xml_textmate_out,{:keeproot=>false,:xmldeclaration=>true,:outputfile=> @outf, :rootname => ""})
55
+ #set_tm_doc_options
56
+ #set_tm_doc_colors
57
+ #set_tm_element_colors
58
+ #XmlSimple.xml_out(@xml_textmate_out,{:keeproot=>false,:xmldeclaration=>true,:outputfile=> @outf, :rootname => ""})
59
+ rexmlout = REXML::Document.new
60
+ rexmlout << REXML::DocType.new('plist','PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"')
61
+ rexmlout << REXML::XMLDecl.new("1.0","UTF-8",nil)
62
+ plist = REXML::Element.new "plist"
63
+ plist.add_attributes( "version"=>"1.0")
64
+ dict = REXML::Element.new( "dict", plist) #causes plist to be the parent of dict
65
+ dict.add_text(REXML::Element.new("key").add_text("name") )
66
+ dict.add_text(REXML::Element.new("string").add_text( @themename ) )
67
+ dict.add_text(REXML::Element.new("key").add_text("author") )
68
+ dict.add_text(REXML::Element.new("string").add_text("David Heitzman") )
69
+ dict.add_text(REXML::Element.new("key").add_text("settings") )
70
+ main_array = REXML::Element.new("array",dict)
71
+ doc_dict = REXML::Element.new("dict",main_array)
72
+ doc_dict.add_text(REXML::Element.new("key").add_text("settings") )
73
+ doc_dict.add_element(
74
+ make_dict(
75
+ :background=>"#"+@document_globals[:backgroundcolor].upcase,
76
+ :caret=>"#"+ @document_globals[:CARET_COLOR].upcase ,
77
+ :foreground=>"#"+@document_globals[:TEXT].upcase,
78
+ :invisibles=>"#"+@document_globals[:backgroundcolor].upcase,
79
+ :lineHighlight=>"#"+@document_globals[:CARET_ROW_COLOR].upcase,
80
+ :selection=>"#"+@document_globals[:SELECTION_BACKGROUND].upcase)
81
+ )
82
+
83
+ #puts @@document_opts_to_textmate.to_s
84
+ @@document_opts_to_textmate.each do |k,v|
85
+ main_array.add_element(
86
+ make_name_scope_settings(k,v)
87
+ ) if @textmate_hash[k]
88
+ end
89
+
90
+
91
+ uuid_key = REXML::Element.new("key")
92
+ uuid_key.add_text("uuid")
93
+ uuid_element = REXML::Element.new("string")
94
+ uuid_element.add_text( gen_uuid)
95
+ dict.add_element uuid_key
96
+ dict.add_element uuid_element
97
+
98
+ rexmlout << plist
99
+ # rexmlout.write(@outf)
100
+ formatter = REXML::Formatters::Pretty.new
101
+ formatter.compact=true
102
+ formatter.write(rexmlout, @outf)
82
103
  @outf.close
83
104
  @theme_successfully_created = true
84
105
  return File.expand_path(@outf.path)
85
106
  end
107
+
108
+
109
+ def make_dict(a_hash)
110
+ new_dict = REXML::Element.new("dict")
111
+ a_hash.each do |k,v|
112
+ te1 = REXML::Element.new("key")
113
+ te1.add_text(k.to_s)
114
+ te2 = REXML::Element.new("string")
115
+ te2.add_text(v.to_s)
116
+ new_dict.add_element te1
117
+ new_dict.add_element te2
118
+ end
119
+ return new_dict
120
+ end
121
+
122
+ def make_name_scope_settings(ruby_symbol,an_array)
123
+ fontstyles = ["","bold","italic", "bold italic"]
124
+ #the array looks like ["name","scope",{}] . the third element in the array is a hash for "settings"
125
+ new_dict = REXML::Element.new("dict")
126
+ te1 = REXML::Element.new("key")
127
+ te1.add_text("name")
128
+ te2 = REXML::Element.new("string")
129
+ te2.add_text(an_array[0])
130
+ te3 = REXML::Element.new("key")
131
+ te3.add_text("scope")
132
+ te4 = REXML::Element.new("string")
133
+ te4.add_text(an_array[1])
134
+ te5 = REXML::Element.new("key")
135
+ te5.add_text("settings")
136
+ new_dict.add_element te1
137
+ new_dict.add_element te2
138
+ new_dict.add_element te3
139
+ new_dict.add_element te4
140
+ new_dict.add_element te5
141
+ fontStyle = fontstyles[@textmate_hash[ruby_symbol][:FONT_TYPE].to_i ]
142
+ di1 = make_dict(:foreground => "#"+@textmate_hash[ruby_symbol][:FOREGROUND].upcase, :fontStyle=>fontStyle)
143
+ new_dict.add_element di1
144
+ return new_dict
145
+ end
146
+
147
+ def gen_uuid
148
+ nn = sprintf("%X",rand(99999999999999999999999999999999999999999999999999).abs)
149
+ nn = nn[0,8]+"-"+nn[12,4]+"-4"+nn[17,3]+"-"+["8","9","A","B"].shuffle[0]+nn[21,3]+"-"+nn[24,12]
150
+ end
151
+
86
152
  end #class
87
153
 
154
+
88
155
  end #module