ultraviolet1x 0.12.1

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.
Files changed (246) hide show
  1. data/.gitignore +2 -0
  2. data/Gemfile +8 -0
  3. data/Gemfile.lock +16 -0
  4. data/History.txt +25 -0
  5. data/README.rdoc +29 -0
  6. data/README.txt +52 -0
  7. data/Rakefile +11 -0
  8. data/bin/theme2latexrender +122 -0
  9. data/bin/theme2xhtmlrender +156 -0
  10. data/bin/uv +140 -0
  11. data/broken_syntax/markdown.syntax +543 -0
  12. data/broken_syntax/php.syntax +1253 -0
  13. data/lib/uv/render_processor.rb +140 -0
  14. data/lib/uv/utility.rb +67 -0
  15. data/lib/uv/version.rb +3 -0
  16. data/lib/uv.rb +95 -0
  17. data/mm/manual.mm +840 -0
  18. data/render/latex/active4d.render +132 -0
  19. data/render/latex/all_hallows_eve.render +96 -0
  20. data/render/latex/amy.render +171 -0
  21. data/render/latex/blackboard.render +111 -0
  22. data/render/latex/brilliance_black.render +552 -0
  23. data/render/latex/brilliance_dull.render +561 -0
  24. data/render/latex/cobalt.render +162 -0
  25. data/render/latex/dawn.render +126 -0
  26. data/render/latex/eiffel.render +132 -0
  27. data/render/latex/espresso_libre.render +123 -0
  28. data/render/latex/idle.render +93 -0
  29. data/render/latex/iplastic.render +99 -0
  30. data/render/latex/lazy.render +96 -0
  31. data/render/latex/mac_classic.render +135 -0
  32. data/render/latex/magicwb_amiga.render +117 -0
  33. data/render/latex/pastels_on_dark.render +204 -0
  34. data/render/latex/slush_poppies.render +123 -0
  35. data/render/latex/spacecadet.render +81 -0
  36. data/render/latex/sunburst.render +186 -0
  37. data/render/latex/twilight.render +153 -0
  38. data/render/latex/zenburnesque.render +126 -0
  39. data/render/old/txt2tags.render +131 -0
  40. data/render/xhtml/active4d.render +140 -0
  41. data/render/xhtml/all_hallows_eve.render +104 -0
  42. data/render/xhtml/amy.render +179 -0
  43. data/render/xhtml/blackboard.render +119 -0
  44. data/render/xhtml/brilliance_black.render +560 -0
  45. data/render/xhtml/brilliance_dull.render +569 -0
  46. data/render/xhtml/cobalt.render +170 -0
  47. data/render/xhtml/dawn.render +134 -0
  48. data/render/xhtml/eiffel.render +140 -0
  49. data/render/xhtml/espresso_libre.render +131 -0
  50. data/render/xhtml/files/css/active4d.css +114 -0
  51. data/render/xhtml/files/css/all_hallows_eve.css +72 -0
  52. data/render/xhtml/files/css/amy.css +147 -0
  53. data/render/xhtml/files/css/blackboard.css +88 -0
  54. data/render/xhtml/files/css/brilliance_black.css +605 -0
  55. data/render/xhtml/files/css/brilliance_dull.css +599 -0
  56. data/render/xhtml/files/css/cobalt.css +149 -0
  57. data/render/xhtml/files/css/dawn.css +121 -0
  58. data/render/xhtml/files/css/eiffel.css +121 -0
  59. data/render/xhtml/files/css/espresso_libre.css +109 -0
  60. data/render/xhtml/files/css/idle.css +62 -0
  61. data/render/xhtml/files/css/iplastic.css +80 -0
  62. data/render/xhtml/files/css/lazy.css +73 -0
  63. data/render/xhtml/files/css/mac_classic.css +123 -0
  64. data/render/xhtml/files/css/magicwb_amiga.css +104 -0
  65. data/render/xhtml/files/css/pastels_on_dark.css +188 -0
  66. data/render/xhtml/files/css/slush_poppies.css +85 -0
  67. data/render/xhtml/files/css/spacecadet.css +51 -0
  68. data/render/xhtml/files/css/sunburst.css +180 -0
  69. data/render/xhtml/files/css/twilight.css +137 -0
  70. data/render/xhtml/files/css/zenburnesque.css +91 -0
  71. data/render/xhtml/idle.render +101 -0
  72. data/render/xhtml/iplastic.render +107 -0
  73. data/render/xhtml/lazy.render +104 -0
  74. data/render/xhtml/mac_classic.render +143 -0
  75. data/render/xhtml/magicwb_amiga.render +125 -0
  76. data/render/xhtml/pastels_on_dark.render +212 -0
  77. data/render/xhtml/slush_poppies.render +131 -0
  78. data/render/xhtml/spacecadet.render +89 -0
  79. data/render/xhtml/sunburst.render +194 -0
  80. data/render/xhtml/twilight.render +161 -0
  81. data/render/xhtml/zenburnesque.render +134 -0
  82. data/syntax/actionscript.syntax +97 -0
  83. data/syntax/active4d.syntax +276 -0
  84. data/syntax/active4d_html.syntax +311 -0
  85. data/syntax/active4d_ini.syntax +50 -0
  86. data/syntax/active4d_library.syntax +21 -0
  87. data/syntax/ada.syntax +33 -0
  88. data/syntax/antlr.syntax +151 -0
  89. data/syntax/apache.syntax +191 -0
  90. data/syntax/applescript.syntax +384 -0
  91. data/syntax/asp.syntax +70 -0
  92. data/syntax/asp_vb.net.syntax +129 -0
  93. data/syntax/bibtex.syntax +151 -0
  94. data/syntax/blog_html.syntax +41 -0
  95. data/syntax/blog_markdown.syntax +42 -0
  96. data/syntax/blog_text.syntax +27 -0
  97. data/syntax/blog_textile.syntax +27 -0
  98. data/syntax/buggy/nemerle.syntax +74 -0
  99. data/syntax/build.syntax +53 -0
  100. data/syntax/bulletin_board.syntax +287 -0
  101. data/syntax/c++.syntax +186 -0
  102. data/syntax/c.syntax +414 -0
  103. data/syntax/cake.syntax +55 -0
  104. data/syntax/camlp4.syntax +36 -0
  105. data/syntax/cm.syntax +32 -0
  106. data/syntax/coffeescript.syntax +216 -0
  107. data/syntax/coldfusion.syntax +119 -0
  108. data/syntax/context_free.syntax +176 -0
  109. data/syntax/cs.syntax +59 -0
  110. data/syntax/css.syntax +195 -0
  111. data/syntax/css_experimental.syntax +1925 -0
  112. data/syntax/csv.syntax +68 -0
  113. data/syntax/d.syntax +142 -0
  114. data/syntax/diff.syntax +81 -0
  115. data/syntax/dokuwiki.syntax +204 -0
  116. data/syntax/dot.syntax +47 -0
  117. data/syntax/doxygen.syntax +43 -0
  118. data/syntax/dylan.syntax +62 -0
  119. data/syntax/eiffel.syntax +78 -0
  120. data/syntax/erlang.syntax +922 -0
  121. data/syntax/f-script.syntax +80 -0
  122. data/syntax/fortran.syntax +141 -0
  123. data/syntax/fxscript.syntax +142 -0
  124. data/syntax/greasemonkey.syntax +34 -0
  125. data/syntax/gri.syntax +83 -0
  126. data/syntax/groovy.syntax +191 -0
  127. data/syntax/gtd.syntax +22 -0
  128. data/syntax/gtdalt.syntax +143 -0
  129. data/syntax/haml.syntax +88 -0
  130. data/syntax/haskell.syntax +88 -0
  131. data/syntax/html-asp.syntax +27 -0
  132. data/syntax/html.syntax +362 -0
  133. data/syntax/html_django.syntax +36 -0
  134. data/syntax/html_for_asp.net.syntax +424 -0
  135. data/syntax/html_mason.syntax +119 -0
  136. data/syntax/html_rails.syntax +40 -0
  137. data/syntax/html_tcl.syntax +26 -0
  138. data/syntax/icalendar.syntax +32 -0
  139. data/syntax/inform.syntax +48 -0
  140. data/syntax/ini.syntax +55 -0
  141. data/syntax/installer_distribution_script.syntax +77 -0
  142. data/syntax/io.syntax +81 -0
  143. data/syntax/java.syntax +211 -0
  144. data/syntax/javaproperties.syntax +20 -0
  145. data/syntax/javascript.syntax +256 -0
  146. data/syntax/javascript_+_prototype.syntax +72 -0
  147. data/syntax/javascript_+_prototype_bracketed.syntax +140 -0
  148. data/syntax/jquery_javascript.syntax +114 -0
  149. data/syntax/json.syntax +136 -0
  150. data/syntax/languagedefinition.syntax +708 -0
  151. data/syntax/latex.syntax +566 -0
  152. data/syntax/latex_beamer.syntax +41 -0
  153. data/syntax/latex_log.syntax +50 -0
  154. data/syntax/latex_memoir.syntax +64 -0
  155. data/syntax/lexflex.syntax +219 -0
  156. data/syntax/lighttpd.syntax +54 -0
  157. data/syntax/lilypond.syntax +492 -0
  158. data/syntax/lisp.syntax +61 -0
  159. data/syntax/literate_haskell.syntax +24 -0
  160. data/syntax/logo.syntax +29 -0
  161. data/syntax/logtalk.syntax +152 -0
  162. data/syntax/lua.syntax +86 -0
  163. data/syntax/m.syntax +142 -0
  164. data/syntax/macports_portfile.syntax +163 -0
  165. data/syntax/mail.syntax +118 -0
  166. data/syntax/makefile.syntax +36 -0
  167. data/syntax/man.syntax +17 -0
  168. data/syntax/mediawiki.syntax +567 -0
  169. data/syntax/mel.syntax +92 -0
  170. data/syntax/mips.syntax +66 -0
  171. data/syntax/mod_perl.syntax +50 -0
  172. data/syntax/modula-3.syntax +47 -0
  173. data/syntax/moinmoin.syntax +189 -0
  174. data/syntax/mootools.syntax +572 -0
  175. data/syntax/movable_type.syntax +162 -0
  176. data/syntax/multimarkdown.syntax +39 -0
  177. data/syntax/objective-c++.syntax +18 -0
  178. data/syntax/objective-c.syntax +233 -0
  179. data/syntax/ocaml.syntax +764 -0
  180. data/syntax/ocamllex.syntax +167 -0
  181. data/syntax/ocamlyacc.syntax +184 -0
  182. data/syntax/old/YAML.yaml +160 -0
  183. data/syntax/old/txt2tags.yaml +139 -0
  184. data/syntax/opengl.syntax +14 -0
  185. data/syntax/pascal.syntax +77 -0
  186. data/syntax/perl.syntax +1115 -0
  187. data/syntax/plain_text.syntax +32 -0
  188. data/syntax/pmwiki.syntax +113 -0
  189. data/syntax/postscript.syntax +114 -0
  190. data/syntax/processing.syntax +106 -0
  191. data/syntax/prolog.syntax +40 -0
  192. data/syntax/property_list.syntax +635 -0
  193. data/syntax/python.syntax +868 -0
  194. data/syntax/python_django.syntax +21 -0
  195. data/syntax/qmake_project.syntax +114 -0
  196. data/syntax/qt_c++.syntax +26 -0
  197. data/syntax/quake3_config.syntax +32 -0
  198. data/syntax/r.syntax +81 -0
  199. data/syntax/r_console.syntax +16 -0
  200. data/syntax/ragel.syntax +201 -0
  201. data/syntax/rd_r_documentation.syntax +91 -0
  202. data/syntax/regexp.syntax +50 -0
  203. data/syntax/regular_expressions_oniguruma.syntax +107 -0
  204. data/syntax/regular_expressions_python.syntax +109 -0
  205. data/syntax/release_notes.syntax +46 -0
  206. data/syntax/remind.syntax +253 -0
  207. data/syntax/restructuredtext.syntax +250 -0
  208. data/syntax/rez.syntax +80 -0
  209. data/syntax/ruby.syntax +1035 -0
  210. data/syntax/ruby_experimental.syntax +145 -0
  211. data/syntax/ruby_on_rails.syntax +88 -0
  212. data/syntax/s5.syntax +69 -0
  213. data/syntax/sass.syntax +45 -0
  214. data/syntax/scheme.syntax +347 -0
  215. data/syntax/scilab.syntax +41 -0
  216. data/syntax/setext.syntax +147 -0
  217. data/syntax/shell-unix-generic.syntax +384 -0
  218. data/syntax/slate.syntax +149 -0
  219. data/syntax/smarty.syntax +63 -0
  220. data/syntax/sql.syntax +237 -0
  221. data/syntax/sql_rails.syntax +18 -0
  222. data/syntax/ssh-config.syntax +33 -0
  223. data/syntax/standard_ml.syntax +121 -0
  224. data/syntax/strings_file.syntax +39 -0
  225. data/syntax/subversion_commit_message.syntax +36 -0
  226. data/syntax/sweave.syntax +84 -0
  227. data/syntax/swig.syntax +57 -0
  228. data/syntax/tcl.syntax +152 -0
  229. data/syntax/template_toolkit.syntax +121 -0
  230. data/syntax/tex.syntax +86 -0
  231. data/syntax/tex_math.syntax +49 -0
  232. data/syntax/textile.syntax +215 -0
  233. data/syntax/tsv.syntax +50 -0
  234. data/syntax/twiki.syntax +241 -0
  235. data/syntax/txt2tags.syntax +79 -0
  236. data/syntax/vectorscript.syntax +57 -0
  237. data/syntax/xhtml_1.0.syntax +4027 -0
  238. data/syntax/xml.syntax +180 -0
  239. data/syntax/xml_strict.syntax +92 -0
  240. data/syntax/xsl.syntax +60 -0
  241. data/syntax/yaml.syntax +160 -0
  242. data/syntax/yui_javascript.syntax +176 -0
  243. data/test/ultraviolet_test.rb +17 -0
  244. data/test/uv_test.rb +0 -0
  245. data/ultraviolet1x.gemspec +22 -0
  246. metadata +333 -0
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ .DS_Store
2
+ pkg/
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source :rubygems
2
+
3
+ gem 'oniguruma', :platform => :ruby_18
4
+ gem 'textpow1x'
5
+
6
+ group :dev do
7
+ gem 'rake', '0.8.7'
8
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,16 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ oniguruma (1.1.0)
5
+ plist (3.1.0)
6
+ rake (0.8.7)
7
+ textpow1x (0.11.0)
8
+ plist (>= 3.0.1)
9
+
10
+ PLATFORMS
11
+ ruby
12
+
13
+ DEPENDENCIES
14
+ oniguruma
15
+ rake (= 0.8.7)
16
+ textpow1x
data/History.txt ADDED
@@ -0,0 +1,25 @@
1
+ == 0.10.2
2
+ * Fixed --no-lines command line option.
3
+ * Updated PHP syntax, no longer stalling.
4
+
5
+ == 0.10.1 / 2007-06-15
6
+ * Corrected line-number schemes in theme2xhtmlrender
7
+ * Corrected alpha blending code in theme2xhtmlrender, Now the brilliance themes seem to work!
8
+ * Modified html_processor to include whole syntax scopes.
9
+ * Add index for duplicated setting names in tmTheme files.
10
+ * Multiple fixes for latex, color boxes have now the right color and size.
11
+
12
+ == 0.10.0 / 2007-05-15
13
+ * Added copy files commant to Uv module and to command line utility.
14
+ now the required files (ex. css) may be easily copied to a destination
15
+ directory.
16
+ * Small corrections in html_processor (should change name)
17
+ * Many modifications to latex rendering
18
+ * First latex rendering implementation (still buggy).
19
+ * All processing is defined in render files.
20
+
21
+ == 0.9.0 / 2007-04-24
22
+
23
+ * 1 major enhancement
24
+ * Birthday!
25
+
data/README.rdoc ADDED
@@ -0,0 +1,29 @@
1
+ = Ultraviolet -- Ultraviolet1x
2
+
3
+ Fixed version of the Ultraviolet syntax highlighting gem.
4
+ * works on Ruby18 and Ruby19
5
+ * more syntaxes then {spox}[https://github.com/spox/ultraviolet]
6
+ * lots of other bugfixes
7
+
8
+ * http://ultraviolet.rubyforge.org
9
+
10
+ == Install
11
+
12
+ gem install ultraviolet
13
+
14
+ == TODO
15
+ * repair markdown
16
+ * repair PHP
17
+
18
+
19
+ = Etc.
20
+
21
+ For original ultraviolet information, see README.txt
22
+
23
+ = Fork includes contributions of
24
+ * {Chris Hoffman}[https://github.com/cehoffman]
25
+ * {Spox}[https://github.com/spox]
26
+ * {Michael Grosser}[http://grosser.it]
27
+ * {Richard Ramsden}[https://github.com/rramsden]
28
+ * {Humza}[https://github.com/secondplanet]
29
+ * {Harry Brundage}[https://github.com/hornairs]
data/README.txt ADDED
@@ -0,0 +1,52 @@
1
+ = Ultraviolet
2
+
3
+ Ultraviolet is a syntax highlighting library and engine. It
4
+ uses TextMate[http://macromates.com/] syntax files and parses
5
+ them using the Textpow[http://textpow.rubyforge.org] library. It
6
+ supports more than 60 programming languages out of the box.
7
+
8
+ == SYNTAX
9
+
10
+
11
+ == REQUIREMENTS:
12
+
13
+ * Oniguruma for Ruby[http://oniguruma.rubyforge.org] v1.1.0 or higher.
14
+ * Textpow[http://textpow.rubyforge.org] v0.9.0 or higher.
15
+
16
+ == INSTALL:
17
+
18
+ sudo gem install -r markray
19
+
20
+ == BUGS/PROBLEMS/INCOMPATIBILITIES:
21
+
22
+
23
+ == TODO:
24
+
25
+
26
+ == CREDITS:
27
+
28
+
29
+ == LICENSE:
30
+
31
+ (The MIT License)
32
+
33
+ Copyright (c) 2007 FIX
34
+
35
+ Permission is hereby granted, free of charge, to any person obtaining
36
+ a copy of this software and associated documentation files (the
37
+ 'Software'), to deal in the Software without restriction, including
38
+ without limitation the rights to use, copy, modify, merge, publish,
39
+ distribute, sublicense, and/or sell copies of the Software, and to
40
+ permit persons to whom the Software is furnished to do so, subject to
41
+ the following conditions:
42
+
43
+ The above copyright notice and this permission notice shall be
44
+ included in all copies or substantial portions of the Software.
45
+
46
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
47
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
48
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
49
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
50
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
51
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
52
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require "bundler"
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rake/testtask'
5
+ Rake::TestTask.new do |test|
6
+ test.libs << 'lib'
7
+ test.pattern = 'test/**/*_test.rb'
8
+ test.verbose = true
9
+ end
10
+
11
+ task :default => :test
@@ -0,0 +1,122 @@
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
+ base_dir = File.join( File.dirname(__FILE__), '..', 'render' )
11
+
12
+ def settings
13
+ unless @settings
14
+ @settings = @theme["settings"].find { |s| ! s["name"] }["settings"]
15
+ end
16
+ @settings
17
+ end
18
+
19
+ @theme = Plist::parse_xml( ARGV[0] )
20
+ render = {"name" => @theme["name"]}
21
+ codecolumn = ""
22
+ numbercolumn = ""
23
+ standard_name = File.basename( ARGV[0] ).downcase.gsub(/\s+/, '_').gsub('.tmtheme', '').gsub(/\W/, '').gsub(/_+/, '_')
24
+
25
+ render["tags"] = []
26
+
27
+ @theme["settings"].each do |t|
28
+ if t["scope"]
29
+ class_name = t["name"].downcase.gsub(/\W/, ' ').gsub('.tmtheme', '').split(' ').collect{|s| s.capitalize}.join
30
+ if class_name == ""
31
+ class_name = "x" * t["name"].size
32
+ end
33
+
34
+ tag = {}
35
+ tag["selector"] = t["scope"]
36
+ render["tags"] << tag
37
+
38
+ begin_string = ""
39
+ pcount = 0
40
+ if s = t["settings"]
41
+ if s["background"]
42
+ begin_string << "\\setlength{\\fboxsep}{0ex}\\colorbox[HTML]{#{Uv.normalize_color(settings, s["background"])[1..-1]}}{\\rule[-0.5ex]{0pt}{2.0ex}"
43
+ else
44
+ begin_string << "{"
45
+ end
46
+ pcount += 1
47
+ if s["foreground"]
48
+ begin_string << "\\color[HTML]{#{Uv.normalize_color(settings, s["foreground"], true)[1..-1]}}"
49
+ end
50
+ case s["fontStyle"]
51
+ when /bold/
52
+ begin_string << "\\textbf{"
53
+ pcount += 1
54
+ when /italic/
55
+ begin_string << "\\textit{"
56
+ pcount += 1
57
+ when /underline/
58
+ begin_string << "\\underline{"
59
+ pcount += 1
60
+ end
61
+ tag["begin"] = begin_string
62
+ tag["end"] = "}" * pcount
63
+ end
64
+
65
+
66
+ elsif ! t["name"]
67
+ if s = t["settings"]
68
+ codecolumn = "\\newcolumntype{C}{>{"
69
+ codecolumn << "\\color[HTML]{#{Uv.normalize_color(settings, s["foreground"], true)[1..-1]}}" if s["foreground"]
70
+ codecolumn << "\\columncolor[HTML]{#{Uv.alpha_blend(s["background"], s["background"])[1..-1]}}" if s["background"]
71
+ codecolumn << "}l}"
72
+ bg = Uv.alpha_blend(s["selection"], s["selection"]) if s["selection"]
73
+ numbercolumn = "\\newcolumntype{N}{>{"
74
+ numbercolumn << "\\color[HTML]{#{Uv.foreground(bg)[1..-1]}}" if bg
75
+ numbercolumn << "\\columncolor[HTML]{#{bg[1..-1]}}" if s["selection"]
76
+ numbercolumn << "}l}"
77
+
78
+ tag = {}
79
+ tag["begin"] = "\\texttt{"
80
+ tag["end"] = "}&\\mbox{\\texttt{"
81
+ render["line-numbers"] = tag end
82
+ end
83
+ end
84
+
85
+ render["filter"] = '@escaped.gsub(/(\$)/, \'\\\\\\\\\1\').gsub(/\\\\(?!\$)/, \'$\\\\\\\\backslash$\').gsub(/(_|\{|\}|&|\#|%)/, \'\\\\\\\\\1\').gsub(/~/, \'\\\\textasciitilde \').gsub(/ /,\'\\\\hspace{1ex}\').gsub(/\t| /,\'\\\\hspace{3ex}\').gsub(/\"/, "\'\'").gsub(/(\^)/,\'\\\\\\\\\1{}\')'
86
+
87
+ tag = {}
88
+ tag["begin"] = ""
89
+ tag["end"] = "}}\\\\"
90
+ render["line"] = tag
91
+
92
+ tag = {}
93
+ tag["begin"] = <<END
94
+ #{codecolumn}
95
+ #{numbercolumn}
96
+ \\begin{longtable}{NC}
97
+ END
98
+
99
+ tag["end"] = <<END
100
+ \\end{longtable}
101
+ END
102
+ render["listing"] = tag
103
+
104
+ tag = {}
105
+ tag["begin"] = <<END
106
+ \\documentclass[a4paper,landscape]{article}
107
+ \\usepackage{xcolor}
108
+ \\usepackage{colortbl}
109
+ \\usepackage{longtable}
110
+ \\usepackage[left=2cm,top=1cm,right=3cm,nohead,nofoot]{geometry}
111
+ \\usepackage[T1]{fontenc}
112
+ \\usepackage[scaled]{beramono}
113
+ \\begin{document}
114
+ END
115
+
116
+ tag["end"] = <<END
117
+ \\end{document}
118
+ END
119
+
120
+ render["document"] = tag
121
+
122
+ File.open( File.join( base_dir, "latex", "#{standard_name}.render" ), "w" ) {|f| YAML.dump( render, f ) }
@@ -0,0 +1,156 @@
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
+ base_dir = File.join( File.dirname(__FILE__), '..', 'render' )
11
+
12
+
13
+ def settings
14
+ unless @settings
15
+ @settings = @theme["settings"].find { |s| ! s["name"] }["settings"]
16
+ end
17
+ @settings
18
+ end
19
+
20
+ puts "Processing #{ARGV[0]}"
21
+
22
+ @theme = Plist::parse_xml( ARGV[0] )
23
+ render = {"name" => @theme["name"]}
24
+ css = {}
25
+
26
+ standard_name = File.basename( ARGV[0] ).downcase.gsub(/\s+/, '_').gsub('.tmtheme', '').gsub(/\W/, '').gsub(/_+/, '_')
27
+ code_name = "pre.#{standard_name}"
28
+
29
+ render["tags"] = []
30
+ count_names = {}
31
+ @theme["settings"].each do |t|
32
+ if t["scope"]
33
+ class_name = t["name"].downcase.gsub(/\W/, ' ').gsub('.tmtheme', '').split(' ').collect{|s| s.capitalize}.join
34
+ if class_name == ""
35
+ class_name = "x" * t["name"].size
36
+ end
37
+
38
+ if count_names[class_name]
39
+ tname = class_name
40
+ class_name = "#{class_name}#{count_names[class_name]}"
41
+ count_names[tname] += count_names[tname] + 1
42
+ else
43
+ count_names[class_name] = 1
44
+ end
45
+
46
+ tag = {}
47
+ tag["selector"] = t["scope"]
48
+ tag["begin"] = "<span class=\"#{class_name}\">"
49
+ tag["end"] = "</span>"
50
+ render["tags"] << tag
51
+
52
+ if s = t["settings"]
53
+ style = {}
54
+ style["color"] = Uv.normalize_color(settings, s["foreground"], true)
55
+ style["background-color"] = Uv.normalize_color(settings, s["background"])
56
+ case s["fontStyle"]
57
+ when /bold/ then style["font-weight"] = "bold"
58
+ when /italic/ then style["font-style"] = "italic"
59
+ when /underline/ then style["text-decoration"] = "underline"
60
+ end
61
+ css[".#{class_name}"] = style
62
+ end
63
+ elsif ! t["name"]
64
+ if s = t["settings"]
65
+ style = {}
66
+ style["color"] = Uv.normalize_color(settings, s["foreground"], true)
67
+ style["background-color"] = Uv.alpha_blend(s["background"], s["background"])
68
+ css[code_name] = style
69
+ @style = style
70
+ style = {}
71
+ style["background-color"] = Uv.alpha_blend(s["selection"], s["selection"])
72
+ style["color"] = Uv.foreground( style["background-color"] )
73
+ css[".line-numbers"] = style
74
+
75
+ tag = {}
76
+ tag["begin"] = "<span class=\"line-numbers\">"
77
+ tag["end"] = "</span>"
78
+ render["line-numbers"] = tag
79
+ end
80
+ end
81
+ end
82
+
83
+ render["filter"] = "CGI.escapeHTML( @escaped )"
84
+
85
+ tag = {}
86
+ tag["begin"] = ""
87
+ tag["end"] = ""
88
+ render["line"] = tag
89
+
90
+
91
+ tag = {}
92
+ tag["begin"] = "<pre class=\"#{standard_name}\">"
93
+ tag["end"] = "</pre>"
94
+ render["listing"] = tag
95
+
96
+ tag = {}
97
+ tag["begin"] = <<END
98
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
99
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
100
+
101
+ <head>
102
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
103
+ <meta http-equiv="cache-control" content="no-cache" />
104
+ <meta http-equiv="expires" content="3600" />
105
+ <meta name="revisit-after" content="2 days" />
106
+ <meta name="robots" content="index,follow" />
107
+ <meta name="publisher" content="Dichodaemon" />
108
+ <meta name="copyright" content="Dichodaemon" />
109
+
110
+ <meta name="author" content="Dichodaemon" />
111
+ <meta name="distribution" content="global" />
112
+ <meta name="description" content="Ocatarinetabellachithchix" />
113
+ <meta name="keywords" content="arzaversperia flexilimosos toves" />
114
+ <link rel="stylesheet" type="text/css" media="screen,projection,print" href="css/#{standard_name}.css" />
115
+ <title>#{standard_name}</title>
116
+
117
+ </head>
118
+
119
+ <body>
120
+ END
121
+
122
+ tag["end"] = <<END
123
+ <p>
124
+ <a href="http://validator.w3.org/check?uri=referer">
125
+ <img style="border:0"
126
+ src="http://www.w3.org/Icons/valid-xhtml10"
127
+ alt="Valid XHTML 1.0 Strict" height="31" width="88" />
128
+ </a>
129
+ <a href="http://jigsaw.w3.org/css-validator/check?uri=referer">
130
+ <img style="border:0;width:88px;height:31px"
131
+ src="http://jigsaw.w3.org/css-validator/images/vcss"
132
+ alt="Valid CSS!" />
133
+ </a>
134
+ </p>
135
+ </body>
136
+ </html>
137
+ END
138
+
139
+ render["document"] = tag
140
+
141
+ File.open( File.join( base_dir, "xhtml", "#{standard_name}.render" ), "w" ) {|f| YAML.dump( render, f ) }
142
+
143
+ File.open( File.join( base_dir, "xhtml", "files", "css", "#{standard_name}.css" ), "w" ) do |f|
144
+ css.each do |key, values|
145
+ if key == code_name
146
+ f.puts "#{code_name} {"
147
+ #puts @style
148
+ else
149
+ f.puts "#{code_name} #{key} {"
150
+ end
151
+ values.each do |style, value|
152
+ f.puts " #{style}: #{value};" if value
153
+ end
154
+ f.puts "}"
155
+ end
156
+ end
data/bin/uv ADDED
@@ -0,0 +1,140 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'rubygems'
5
+ require 'uv'
6
+ rescue LoadError
7
+ $:.unshift File.join( File.dirname(__FILE__), '..', 'lib' )
8
+ require 'uv'
9
+ end
10
+
11
+ require 'optparse'
12
+ require 'ostruct'
13
+
14
+ o = OpenStruct.new
15
+ o.copy_files = false
16
+ o.output = "xhtml"
17
+ o.headers = false
18
+ o.theme = "espresso_libre"
19
+ o.lines = true
20
+
21
+ options = OptionParser.new
22
+
23
+ options.banner =<<END
24
+
25
+ Usage: uv [options] input_file
26
+
27
+ Parses input_file (or stdin, if no input_file is given) and
28
+ outputs the coresponding HTML to stdout. If no syntax is specified,
29
+ it tries to guess the best one. If no theme is specified, defaults
30
+ to espresso_libre.
31
+
32
+ Example:
33
+
34
+ uv -t amy -h ~/.bashrc > bashrc.html
35
+
36
+ Renders the contents of ~/.bashrc to file bashrc.html
37
+ as a standalone web page.
38
+
39
+ All options are non-mandatory
40
+
41
+ Options:
42
+
43
+ END
44
+
45
+ options.on( "-c DIR", "--copy-files DIR", <<DESCRIPTION ) {|val| o.copy_files = val}
46
+ Copy the required files to the specified output directory (css, images, etc).
47
+ DESCRIPTION
48
+
49
+ options.on( "-s SYNTAX", "--syntax SYNTAX", <<DESCRIPTION, Uv.syntaxes) {|val| o.syntax = val}
50
+ The file's syntax (e.g. ruby, c++, etc.)
51
+ DESCRIPTION
52
+
53
+ options.on( "-o OUTPUT", "--output OUTPUT", <<DESCRIPTION) {|val| o.output = val}
54
+ The output format (xhtml, latex, etc.) default to xhtml
55
+ DESCRIPTION
56
+
57
+ options.on( "-t THEME", "--theme THEME", <<DESCRIPTION, Uv.themes) {|val| o.theme = val}
58
+ The theme to be used (e.g. amy, espresso_libre, etc.)
59
+ DESCRIPTION
60
+
61
+ options.on( "-n", "--no-lines", <<DESCRIPTION ) {|val| o.lines = false}
62
+ Produces output without line numbers
63
+ DESCRIPTION
64
+
65
+
66
+ options.on( "-h", "--headers", <<DESCRIPTION ) {|val| o.headers = val}
67
+ Include headers, outputs a self-contained web page/document
68
+ DESCRIPTION
69
+
70
+ options.on( "-d", "--debug", <<DESCRIPTION ) {|val| o.debug = val}
71
+ Outputs debug information instead of normal page rendering
72
+ DESCRIPTION
73
+
74
+ options.on( "-l [syntaxes|themes]", "--list [syntaxes|themes]", ['syntaxes', 'themes'], <<DESCRIPTION ) {|val| o.list = val}
75
+ Lists all the available syntaxes/themes
76
+ DESCRIPTION
77
+
78
+
79
+ options.on( "-?", "--help", <<DESCRIPTION ) {|val| o.help = val}
80
+ Show this message
81
+ DESCRIPTION
82
+
83
+ rest = options.parse( ARGV )
84
+
85
+
86
+ if o.help
87
+ puts options
88
+ exit
89
+ elsif o.list
90
+ if o.list == 'syntaxes'
91
+ puts "Available syntaxes:\n"
92
+ Uv.syntaxes.sort.each{ |s| puts " - #{s}"}
93
+ elsif o.list == 'themes'
94
+ puts "Available themes:\n"
95
+ Uv.themes.sort.each{ |t| puts " - #{t}"}
96
+ else
97
+ STDERR.puts "Option #{o.list} is not valid should be one of [syntaxes, themes]"
98
+ end
99
+ exit
100
+ end
101
+
102
+ if o.copy_files
103
+ unless File.exists?(o.copy_files)
104
+ STDERR.puts "The specified output directory: #{o.copy_files} does not exist."
105
+ exit -1
106
+ end
107
+ Uv.copy_files o.output, o.copy_files
108
+ end
109
+
110
+ o.filename = rest[0]
111
+
112
+ if o.filename && ! o.syntax
113
+ candidates = Uv.syntax_for_file o.filename
114
+ if candidates.size > 1
115
+ STDERR.puts "Many syntaxes match, please specify"
116
+ STDERR.puts "\nMatching syntaxes:"
117
+ candidates.sort.each { |name, syntax| STDERR.puts "\t - " + name}
118
+ exit -1
119
+ end
120
+ o.syntax = candidates.first.first unless candidates.size == 0
121
+ end
122
+
123
+ unless o.syntax
124
+ STDERR.puts "No default syntax found, please specify"
125
+ exit -1
126
+ end
127
+
128
+ if o.filename
129
+ o.text = File.read(o.filename)
130
+ else
131
+ o.text = STDIN
132
+ end
133
+
134
+ if o.debug
135
+ Uv.debug( o.text, o.syntax )
136
+ exit
137
+ end
138
+
139
+ puts Uv.parse( o.text, o.output, o.syntax, o.lines, o.theme, o.headers )
140
+