vertiginous-ultraviolet 0.10.2 → 0.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,6 @@
1
+ ==0.10.3
2
+ * Added shoes rendering
3
+
1
4
  == 0.10.2
2
5
  * Fixed --no-lines command line option.
3
6
  * Updated PHP syntax, no longer stalling.
@@ -4,6 +4,7 @@ lib/uv/utility.rb
4
4
  lib/uv.rb
5
5
  bin/theme2xhtmlrender
6
6
  bin/theme2latexrender
7
+ bin/theme2shoesrender
7
8
  bin/uv
8
9
  History.txt
9
10
  Rakefile
@@ -51,6 +52,27 @@ render/xhtml/cobalt.render
51
52
  render/xhtml/iplastic.render
52
53
  render/xhtml/all_hallows_eve.render
53
54
  render/xhtml/pastels_on_dark.render
55
+ render/shoes/all_hallows_eve.render
56
+ render/shoes/amy.render
57
+ render/shoes/blackboard.render
58
+ render/shoes/cobalt.render
59
+ render/shoes/dawn.render
60
+ render/shoes/eiffel.render
61
+ render/shoes/espresso_libre.render
62
+ render/shoes/idle.render
63
+ render/shoes/iplastic.render
64
+ render/shoes/lazy.render
65
+ render/shoes/mac_classic.render
66
+ render/shoes/magicwb_amiga.render
67
+ render/shoes/monokai.render
68
+ render/shoes/pastels_on_dark.render
69
+ render/shoes/slush_poppies.render
70
+ render/shoes/spacecadet.render
71
+ render/shoes/sunburst.render
72
+ render/shoes/twilight.render
73
+ render/shoes/vibrant_ink.render
74
+ render/shoes/writeroom.render
75
+ render/shoes/zenburnesque.render
54
76
  render/latex/mac_classic.render
55
77
  render/latex/active4d.render
56
78
  render/latex/cobalt.render
@@ -0,0 +1,102 @@
1
+ #! /usr/bin/env ruby
2
+ begin
3
+ require 'plist'
4
+ rescue LoadError
5
+ require 'rubygems'
6
+ require 'plist'
7
+ end
8
+ require 'uv/utility'
9
+
10
+
11
+ base_dir = File.join( File.dirname(__FILE__), '..', 'render' )
12
+
13
+ def settings
14
+ unless @settings
15
+ @settings = @theme["settings"].find { |s| ! s["name"] }["settings"]
16
+ end
17
+ @settings
18
+ end
19
+
20
+ @theme = Plist::parse_xml( ARGV[0] )
21
+ render = {"name" => @theme["name"]}
22
+ codecolumn = ""
23
+ numbercolumn = ""
24
+ standard_name = File.basename( ARGV[0] ).downcase.gsub(/\s+/, '_').gsub('.tmtheme', '').gsub(/\W/, '').gsub(/_+/, '_')
25
+
26
+ render["tags"] = []
27
+
28
+ @theme["settings"].each do |t|
29
+ if t["scope"]
30
+ class_name = t["name"].downcase.gsub(/\W/, ' ').gsub('.tmtheme', '').split(' ').collect{|s| s.capitalize}.join
31
+ if class_name == ""
32
+ class_name = "x" * t["name"].size
33
+ end
34
+
35
+ tag = {}
36
+ tag["selector"] = t["scope"]
37
+ tag["begin"] = 'span(['
38
+ tag["end"] = ""
39
+ render["tags"] << tag
40
+ begin_string = ""
41
+ end_string = "]"
42
+ if s = t["settings"]
43
+ if s["background"]
44
+ begin_string << ", :fill => rgb(#{Uv.rgb(settings, s["background"])})"
45
+ end
46
+ if s["foreground"]
47
+ begin_string << ''
48
+ end_string << ", :stroke => rgb(#{Uv.rgb(settings, s["foreground"])})"
49
+ end
50
+ case s["fontStyle"]
51
+ when /bold/
52
+ end_string << ", :weight => 'bold'"
53
+ when /italic/
54
+ end_string << ", :emphasis => 'italic'"
55
+ when /underline/
56
+ end_string << ", :underline => 'single'"
57
+ end
58
+ end_string << "),\n"
59
+ tag["end"] = end_string
60
+ end
61
+
62
+
63
+ elsif ! t["name"]
64
+ if s = t["settings"]
65
+ codecolumn = ""
66
+ codecolumn << ", :fill => rgb(#{Uv.rgb(settings, s["background"])})"
67
+ codecolumn << ", :stroke => rgb(#{Uv.rgb(settings, s["foreground"])})"
68
+ @bg = "background(rgb(#{Uv.rgb(settings, s["background"])}) ,:curve => 12)"
69
+ bg = Uv.alpha_blend(s["background"], s["foreground"])
70
+ numbercolumn = '"'
71
+ numbercolumn << ", :fill => rgb(#{Uv.rgb(settings, s["background"])})"
72
+ numbercolumn << ", :stroke => rgb(#{Uv.rgb(settings, bg)})"
73
+
74
+ tag = {}
75
+ tag["begin"] = 'span("'
76
+ tag["end"] = "#{numbercolumn} ),"
77
+ render["line-numbers"] = tag
78
+ end
79
+ end
80
+ end
81
+
82
+ render["filter"] = '@escaped.inspect + ", " '
83
+
84
+ tag = {}
85
+ tag["begin"] = ""
86
+ tag["end"] = '"\n",'
87
+ render["line"] = tag
88
+
89
+ tag = {}
90
+ tag["begin"] =<<END
91
+ #{@bg}
92
+ para( [
93
+ END
94
+ tag["end"] = "] #{codecolumn}, :size => 'xx-small', :font => 'Bitstream Vera Sans Mono')"
95
+ render["listing"] = tag
96
+
97
+ tag = {}
98
+ tag["begin"] = "stack(:margin => 4 ){\n"
99
+ tag["end"] = '}'
100
+ render["document"] = tag
101
+
102
+ File.open( File.join( base_dir, "shoes", "#{standard_name}.render" ), "w" ) {|f| YAML.dump( render, f ) }
data/lib/uv.rb CHANGED
@@ -5,13 +5,12 @@ require 'uv/render_processor.rb'
5
5
 
6
6
  module Uv
7
7
 
8
- def Uv.path
9
- result = []
10
- result << File.join(File.dirname(__FILE__), ".." )
8
+ def Uv.paths
9
+ @paths ||= [File.join(File.dirname(__FILE__), ".." ) ]
11
10
  end
12
11
 
13
12
  def Uv.copy_files output, output_dir
14
- Uv.path.each do |dir|
13
+ Uv.paths.each do |dir|
15
14
  dir_name = File.join( dir, "render", output, "files" )
16
15
  FileUtils.cp_r( Dir.glob(File.join( dir_name, "." )), output_dir ) if File.exists?( dir_name )
17
16
  end
@@ -19,21 +18,35 @@ module Uv
19
18
 
20
19
  def Uv.init_syntaxes
21
20
  @syntaxes = {}
22
- Dir.glob( File.join(File.dirname(__FILE__), '..', 'syntax', '*.syntax') ).each do |f|
23
- @syntaxes[File.basename(f, '.syntax')] = Textpow::SyntaxNode.load( f )
21
+ Uv.paths.each do |dir|
22
+ Dir.glob( File.join(dir, 'syntax', '*.syntax') ).each do |f|
23
+ @syntaxes[File.basename(f, '.syntax')] = Textpow::SyntaxNode.load( f )
24
+ end
24
25
  end
25
26
  end
26
27
 
27
28
  def Uv.syntaxes
28
- Dir.glob( File.join(File.dirname(__FILE__), '..', 'syntax', '*.syntax') ).collect do |f|
29
- File.basename(f, '.syntax')
30
- end
29
+ Uv.paths.collect do |dir|
30
+ Dir.glob( File.join(dir, 'syntax', '*.syntax') ).collect do |f|
31
+ File.basename(f, '.syntax')
32
+ end
33
+ end.flatten
31
34
  end
32
35
 
33
36
  def Uv.themes
34
- Dir.glob( File.join(File.dirname(__FILE__), '..', 'render', 'xhtml', 'files', 'css', '*.css') ).collect do |f|
35
- File.basename(f, '.css')
36
- end
37
+ Uv.paths.collect do |dir|
38
+ Dir.glob( File.join(dir, 'render', 'xhtml', 'files', 'css', '*.css') ).collect do |f|
39
+ File.basename(f, '.css')
40
+ end
41
+ end.flatten
42
+ end
43
+
44
+ def Uv.renderer(output, render_style)
45
+ Uv.paths.each do |dir|
46
+ render_path = File.join(dir, 'render', output , "#{render_style}.render")
47
+ return render_path if File.exist?(render_path)
48
+ end
49
+ raise( ArgumentError, "Style #{render_style} could not be found for #{output}" )
37
50
  end
38
51
 
39
52
  def Uv.syntax_for_file file_name
@@ -63,10 +76,9 @@ module Uv
63
76
  result
64
77
  end
65
78
 
66
- def Uv.parse text, output = "xhtml", syntax_name = nil, line_numbers = false, render_style = "classic", headers = false
79
+ def Uv.parse text, output = "xhtml", syntax_name = nil, line_numbers = false, render_style = "mac_classic", headers = false
67
80
  init_syntaxes unless @syntaxes
68
- renderer = File.join( File.dirname(__FILE__), '..',"render", output,"#{render_style}.render")
69
- raise( ArgumentError, "Output for #{output} is not yet implemented" ) unless File.exists?(renderer)
81
+ renderer = self.renderer(output, render_style)
70
82
  css_class = render_style
71
83
  render_options = YAML.load( File.open( renderer ) )
72
84
  render_processor = RenderProcessor.new( render_options, line_numbers, headers )
@@ -85,5 +97,4 @@ module Uv
85
97
 
86
98
  @syntaxes[syntax_name].parse( text, processor )
87
99
  end
88
-
89
100
  end
@@ -63,5 +63,12 @@ module Uv
63
63
  else
64
64
  color
65
65
  end
66
- end
66
+ end
67
+
68
+ def Uv.rgb settings, color, fg = false
69
+ if color
70
+ r = normalize_color(settings, color, fg)
71
+ r[1..-1].scan(/\w\w/).map{|n| n.to_i(16) }.join(', ')
72
+ end
73
+ end
67
74
  end
@@ -0,0 +1,126 @@
1
+ ---
2
+ name: All Hallow's Eve
3
+ line:
4
+ begin: ""
5
+ end: "\"\\n\","
6
+ tags:
7
+ - begin: span([
8
+ end: |
9
+ ], :stroke => rgb(255, 255, 255)),
10
+
11
+ selector: text
12
+ - begin: span([
13
+ end: |
14
+ ], :stroke => rgb(255, 255, 255)),
15
+
16
+ selector: source
17
+ - begin: span([
18
+ end: |
19
+ ], :stroke => rgb(153, 51, 204)),
20
+
21
+ selector: comment
22
+ - begin: span([
23
+ end: |
24
+ ], :stroke => rgb(51, 135, 204)),
25
+
26
+ selector: constant
27
+ - begin: span([
28
+ end: |
29
+ ], :stroke => rgb(204, 120, 51)),
30
+
31
+ selector: keyword
32
+ - begin: span([
33
+ end: |
34
+ ], :stroke => rgb(208, 208, 255)),
35
+
36
+ selector: meta.preprocessor.c
37
+ - begin: span([
38
+ end: |
39
+ ]),
40
+
41
+ selector: keyword.control.import
42
+ - begin: span([
43
+ end: |
44
+ ]),
45
+
46
+ selector: entity.name.function
47
+ - begin: span([
48
+ end: |
49
+ ], :emphasis => 'italic'),
50
+
51
+ selector: variable.parameter
52
+ - begin: span([
53
+ end: |
54
+ ], :stroke => rgb(255, 255, 255)),
55
+
56
+ selector: source comment.block
57
+ - begin: span([
58
+ end: |
59
+ ], :stroke => rgb(102, 204, 51)),
60
+
61
+ selector: string
62
+ - begin: span([
63
+ end: |
64
+ ], :stroke => rgb(170, 170, 170)),
65
+
66
+ selector: string constant.character.escape
67
+ - begin: span([
68
+ end: |
69
+ ], :stroke => rgb(0, 0, 0)),
70
+
71
+ selector: string.interpolated
72
+ - begin: span([
73
+ end: |
74
+ ], :stroke => rgb(204, 204, 51)),
75
+
76
+ selector: string.regexp
77
+ - begin: span([
78
+ end: |
79
+ ], :stroke => rgb(204, 204, 51)),
80
+
81
+ selector: string.literal
82
+ - begin: span([
83
+ end: |
84
+ ], :stroke => rgb(85, 85, 85)),
85
+
86
+ selector: string.interpolated constant.character.escape
87
+ - begin: span([
88
+ end: |
89
+ ], :underline => 'single'),
90
+
91
+ selector: entity.name.type
92
+ - begin: span([
93
+ end: |
94
+ ], :emphasis => 'italic'),
95
+
96
+ selector: entity.other.inherited-class
97
+ - begin: span([
98
+ end: |
99
+ ], :underline => 'single'),
100
+
101
+ selector: entity.name.tag
102
+ - begin: span([
103
+ end: |
104
+ ]),
105
+
106
+ selector: entity.other.attribute-name
107
+ - begin: span([
108
+ end: |
109
+ ], :stroke => rgb(200, 55, 48)),
110
+
111
+ selector: support.function
112
+ listing:
113
+ begin: |
114
+ background(rgb(0, 0, 0) ,:curve => 12)
115
+ para( [
116
+
117
+ end: "] , :fill => rgb(0, 0, 0), :stroke => rgb(255, 255, 255), :size => 'xx-small', :font => 'Bitstream Vera Sans Mono')"
118
+ document:
119
+ begin: |
120
+ stack(:margin => 4 ){
121
+
122
+ end: "}"
123
+ filter: "@escaped.inspect + \", \" "
124
+ line-numbers:
125
+ begin: span("
126
+ end: "\", :fill => rgb(0, 0, 0), :stroke => rgb(255, 255, 255) ),"
@@ -0,0 +1,251 @@
1
+ ---
2
+ name: Amy
3
+ line:
4
+ begin: ""
5
+ end: "\"\\n\","
6
+ tags:
7
+ - begin: span([
8
+ end: |
9
+ ], :stroke => rgb(64, 64, 128), :emphasis => 'italic'),
10
+
11
+ selector: comment.block
12
+ - begin: span([
13
+ end: |
14
+ ], :stroke => rgb(153, 153, 153)),
15
+
16
+ selector: string
17
+ - begin: span([
18
+ end: |
19
+ ], :stroke => rgb(112, 112, 144)),
20
+
21
+ selector: constant.language
22
+ - begin: span([
23
+ end: |
24
+ ], :stroke => rgb(112, 144, 176)),
25
+
26
+ selector: constant.numeric
27
+ - begin: span([
28
+ end: |
29
+ ], :weight => 'bold'),
30
+
31
+ selector: constant.numeric.integer.int32
32
+ - begin: span([
33
+ end: |
34
+ ], :emphasis => 'italic'),
35
+
36
+ selector: constant.numeric.integer.int64
37
+ - begin: span([
38
+ end: |
39
+ ], :weight => 'bold'),
40
+
41
+ selector: constant.numeric.integer.nativeint
42
+ - begin: span([
43
+ end: |
44
+ ], :underline => 'single'),
45
+
46
+ selector: constant.numeric.floating-point.ocaml
47
+ - begin: span([
48
+ end: |
49
+ ], :stroke => rgb(102, 102, 102)),
50
+
51
+ selector: constant.character
52
+ - begin: span([
53
+ end: |
54
+ ], :stroke => rgb(128, 128, 160)),
55
+
56
+ selector: constant.language.boolean
57
+ - begin: span([
58
+ end: |
59
+ ]),
60
+
61
+ selector: constant.language
62
+ - begin: span([
63
+ end: |
64
+ ]),
65
+
66
+ selector: constant.other
67
+ - begin: span([
68
+ end: |
69
+ ], :stroke => rgb(0, 128, 128)),
70
+
71
+ selector: variable.language, variable.other
72
+ - begin: span([
73
+ end: |
74
+ ], :stroke => rgb(160, 128, 255)),
75
+
76
+ selector: keyword
77
+ - begin: span([
78
+ end: |
79
+ ], :stroke => rgb(160, 160, 255)),
80
+
81
+ selector: keyword.operator
82
+ - begin: span([
83
+ end: |
84
+ ], :stroke => rgb(208, 208, 255)),
85
+
86
+ selector: keyword.other.decorator
87
+ - begin: span([
88
+ end: |
89
+ ], :underline => 'single'),
90
+
91
+ selector: keyword.operator.infix.floating-point.ocaml
92
+ - begin: span([
93
+ end: |
94
+ ], :underline => 'single'),
95
+
96
+ selector: keyword.operator.prefix.floating-point.ocaml
97
+ - begin: span([
98
+ end: |
99
+ ], :stroke => rgb(192, 128, 192)),
100
+
101
+ selector: keyword.other.directive
102
+ - begin: span([
103
+ end: |
104
+ ], :stroke => rgb(192, 128, 192), :underline => 'single'),
105
+
106
+ selector: keyword.other.directive.line-number
107
+ - begin: span([
108
+ end: |
109
+ ], :stroke => rgb(128, 160, 255)),
110
+
111
+ selector: keyword.control
112
+ - begin: span([
113
+ end: |
114
+ ], :stroke => rgb(176, 255, 240)),
115
+
116
+ selector: storage
117
+ - begin: span([
118
+ end: |
119
+ ], :stroke => rgb(96, 176, 255)),
120
+
121
+ selector: entity.name.type.variant
122
+ - begin: span([
123
+ end: |
124
+ ], :stroke => rgb(96, 176, 255), :emphasis => 'italic'),
125
+
126
+ selector: storage.type.variant.polymorphic, entity.name.type.variant.polymorphic
127
+ - begin: span([
128
+ end: |
129
+ ], :stroke => rgb(176, 0, 176)),
130
+
131
+ selector: entity.name.type.module
132
+ - begin: span([
133
+ end: |
134
+ ], :stroke => rgb(176, 0, 176), :underline => 'single'),
135
+
136
+ selector: entity.name.type.module-type.ocaml
137
+ - begin: span([
138
+ end: |
139
+ ], :stroke => rgb(160, 0, 80)),
140
+
141
+ selector: support.other
142
+ - begin: span([
143
+ end: |
144
+ ], :stroke => rgb(112, 224, 128)),
145
+
146
+ selector: entity.name.type.class
147
+ - begin: span([
148
+ end: |
149
+ ], :stroke => rgb(112, 224, 160)),
150
+
151
+ selector: entity.name.type.class-type
152
+ - begin: span([
153
+ end: |
154
+ ]),
155
+
156
+ selector: entity.other.inherited-class
157
+ - begin: span([
158
+ end: |
159
+ ], :stroke => rgb(80, 160, 160)),
160
+
161
+ selector: entity.name.function
162
+ - begin: span([
163
+ end: |
164
+ ], :stroke => rgb(128, 176, 176)),
165
+
166
+ selector: variable.parameter
167
+ - begin: span([
168
+ end: |
169
+ ], :stroke => rgb(48, 128, 160)),
170
+
171
+ selector: entity.name.type.token
172
+ - begin: span([
173
+ end: |
174
+ ], :stroke => rgb(60, 176, 208)),
175
+
176
+ selector: entity.name.type.token.reference
177
+ - begin: span([
178
+ end: |
179
+ ], :stroke => rgb(144, 224, 224)),
180
+
181
+ selector: entity.name.function.non-terminal
182
+ - begin: span([
183
+ end: |
184
+ ], :stroke => rgb(192, 240, 240)),
185
+
186
+ selector: entity.name.function.non-terminal.reference
187
+ - begin: span([
188
+ end: |
189
+ ], :stroke => rgb(0, 144, 144)),
190
+
191
+ selector: entity.name.tag
192
+ - begin: span([
193
+ end: |
194
+ ]),
195
+
196
+ selector: entity.other.attribute-name
197
+ - begin: span([
198
+ end: |
199
+ ]),
200
+
201
+ selector: support.constant
202
+ - begin: span([
203
+ end: |
204
+ ]),
205
+
206
+ selector: support.type, support.class
207
+ - begin: span([
208
+ end: |
209
+ ]),
210
+
211
+ selector: support.other.variable
212
+ - begin: span([
213
+ end: |
214
+ ], :stroke => rgb(64, 0, 128), :weight => 'bold'),
215
+
216
+ selector: invalid.illegal
217
+ - begin: span([
218
+ end: |
219
+ ], :stroke => rgb(32, 0, 32)),
220
+
221
+ selector: invalid.deprecated
222
+ - begin: span([
223
+ end: |
224
+ ]),
225
+
226
+ selector: source.camlp4.embedded
227
+ - begin: span([
228
+ end: |
229
+ ]),
230
+
231
+ selector: source.camlp4.embedded.parser.ocaml
232
+ - begin: span([
233
+ end: |
234
+ ], :stroke => rgb(128, 80, 128)),
235
+
236
+ selector: punctuation
237
+ listing:
238
+ begin: |
239
+ background(rgb(32, 0, 32) ,:curve => 12)
240
+ para( [
241
+
242
+ end: "] , :fill => rgb(32, 0, 32), :stroke => rgb(208, 208, 255), :size => 'xx-small', :font => 'Bitstream Vera Sans Mono')"
243
+ document:
244
+ begin: |
245
+ stack(:margin => 4 ){
246
+
247
+ end: "}"
248
+ filter: "@escaped.inspect + \", \" "
249
+ line-numbers:
250
+ begin: span("
251
+ end: "\", :fill => rgb(32, 0, 32), :stroke => rgb(208, 208, 255) ),"