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.
- data/.gitignore +2 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +16 -0
- data/History.txt +25 -0
- data/README.rdoc +29 -0
- data/README.txt +52 -0
- data/Rakefile +11 -0
- data/bin/theme2latexrender +122 -0
- data/bin/theme2xhtmlrender +156 -0
- data/bin/uv +140 -0
- data/broken_syntax/markdown.syntax +543 -0
- data/broken_syntax/php.syntax +1253 -0
- data/lib/uv/render_processor.rb +140 -0
- data/lib/uv/utility.rb +67 -0
- data/lib/uv/version.rb +3 -0
- data/lib/uv.rb +95 -0
- data/mm/manual.mm +840 -0
- data/render/latex/active4d.render +132 -0
- data/render/latex/all_hallows_eve.render +96 -0
- data/render/latex/amy.render +171 -0
- data/render/latex/blackboard.render +111 -0
- data/render/latex/brilliance_black.render +552 -0
- data/render/latex/brilliance_dull.render +561 -0
- data/render/latex/cobalt.render +162 -0
- data/render/latex/dawn.render +126 -0
- data/render/latex/eiffel.render +132 -0
- data/render/latex/espresso_libre.render +123 -0
- data/render/latex/idle.render +93 -0
- data/render/latex/iplastic.render +99 -0
- data/render/latex/lazy.render +96 -0
- data/render/latex/mac_classic.render +135 -0
- data/render/latex/magicwb_amiga.render +117 -0
- data/render/latex/pastels_on_dark.render +204 -0
- data/render/latex/slush_poppies.render +123 -0
- data/render/latex/spacecadet.render +81 -0
- data/render/latex/sunburst.render +186 -0
- data/render/latex/twilight.render +153 -0
- data/render/latex/zenburnesque.render +126 -0
- data/render/old/txt2tags.render +131 -0
- data/render/xhtml/active4d.render +140 -0
- data/render/xhtml/all_hallows_eve.render +104 -0
- data/render/xhtml/amy.render +179 -0
- data/render/xhtml/blackboard.render +119 -0
- data/render/xhtml/brilliance_black.render +560 -0
- data/render/xhtml/brilliance_dull.render +569 -0
- data/render/xhtml/cobalt.render +170 -0
- data/render/xhtml/dawn.render +134 -0
- data/render/xhtml/eiffel.render +140 -0
- data/render/xhtml/espresso_libre.render +131 -0
- data/render/xhtml/files/css/active4d.css +114 -0
- data/render/xhtml/files/css/all_hallows_eve.css +72 -0
- data/render/xhtml/files/css/amy.css +147 -0
- data/render/xhtml/files/css/blackboard.css +88 -0
- data/render/xhtml/files/css/brilliance_black.css +605 -0
- data/render/xhtml/files/css/brilliance_dull.css +599 -0
- data/render/xhtml/files/css/cobalt.css +149 -0
- data/render/xhtml/files/css/dawn.css +121 -0
- data/render/xhtml/files/css/eiffel.css +121 -0
- data/render/xhtml/files/css/espresso_libre.css +109 -0
- data/render/xhtml/files/css/idle.css +62 -0
- data/render/xhtml/files/css/iplastic.css +80 -0
- data/render/xhtml/files/css/lazy.css +73 -0
- data/render/xhtml/files/css/mac_classic.css +123 -0
- data/render/xhtml/files/css/magicwb_amiga.css +104 -0
- data/render/xhtml/files/css/pastels_on_dark.css +188 -0
- data/render/xhtml/files/css/slush_poppies.css +85 -0
- data/render/xhtml/files/css/spacecadet.css +51 -0
- data/render/xhtml/files/css/sunburst.css +180 -0
- data/render/xhtml/files/css/twilight.css +137 -0
- data/render/xhtml/files/css/zenburnesque.css +91 -0
- data/render/xhtml/idle.render +101 -0
- data/render/xhtml/iplastic.render +107 -0
- data/render/xhtml/lazy.render +104 -0
- data/render/xhtml/mac_classic.render +143 -0
- data/render/xhtml/magicwb_amiga.render +125 -0
- data/render/xhtml/pastels_on_dark.render +212 -0
- data/render/xhtml/slush_poppies.render +131 -0
- data/render/xhtml/spacecadet.render +89 -0
- data/render/xhtml/sunburst.render +194 -0
- data/render/xhtml/twilight.render +161 -0
- data/render/xhtml/zenburnesque.render +134 -0
- data/syntax/actionscript.syntax +97 -0
- data/syntax/active4d.syntax +276 -0
- data/syntax/active4d_html.syntax +311 -0
- data/syntax/active4d_ini.syntax +50 -0
- data/syntax/active4d_library.syntax +21 -0
- data/syntax/ada.syntax +33 -0
- data/syntax/antlr.syntax +151 -0
- data/syntax/apache.syntax +191 -0
- data/syntax/applescript.syntax +384 -0
- data/syntax/asp.syntax +70 -0
- data/syntax/asp_vb.net.syntax +129 -0
- data/syntax/bibtex.syntax +151 -0
- data/syntax/blog_html.syntax +41 -0
- data/syntax/blog_markdown.syntax +42 -0
- data/syntax/blog_text.syntax +27 -0
- data/syntax/blog_textile.syntax +27 -0
- data/syntax/buggy/nemerle.syntax +74 -0
- data/syntax/build.syntax +53 -0
- data/syntax/bulletin_board.syntax +287 -0
- data/syntax/c++.syntax +186 -0
- data/syntax/c.syntax +414 -0
- data/syntax/cake.syntax +55 -0
- data/syntax/camlp4.syntax +36 -0
- data/syntax/cm.syntax +32 -0
- data/syntax/coffeescript.syntax +216 -0
- data/syntax/coldfusion.syntax +119 -0
- data/syntax/context_free.syntax +176 -0
- data/syntax/cs.syntax +59 -0
- data/syntax/css.syntax +195 -0
- data/syntax/css_experimental.syntax +1925 -0
- data/syntax/csv.syntax +68 -0
- data/syntax/d.syntax +142 -0
- data/syntax/diff.syntax +81 -0
- data/syntax/dokuwiki.syntax +204 -0
- data/syntax/dot.syntax +47 -0
- data/syntax/doxygen.syntax +43 -0
- data/syntax/dylan.syntax +62 -0
- data/syntax/eiffel.syntax +78 -0
- data/syntax/erlang.syntax +922 -0
- data/syntax/f-script.syntax +80 -0
- data/syntax/fortran.syntax +141 -0
- data/syntax/fxscript.syntax +142 -0
- data/syntax/greasemonkey.syntax +34 -0
- data/syntax/gri.syntax +83 -0
- data/syntax/groovy.syntax +191 -0
- data/syntax/gtd.syntax +22 -0
- data/syntax/gtdalt.syntax +143 -0
- data/syntax/haml.syntax +88 -0
- data/syntax/haskell.syntax +88 -0
- data/syntax/html-asp.syntax +27 -0
- data/syntax/html.syntax +362 -0
- data/syntax/html_django.syntax +36 -0
- data/syntax/html_for_asp.net.syntax +424 -0
- data/syntax/html_mason.syntax +119 -0
- data/syntax/html_rails.syntax +40 -0
- data/syntax/html_tcl.syntax +26 -0
- data/syntax/icalendar.syntax +32 -0
- data/syntax/inform.syntax +48 -0
- data/syntax/ini.syntax +55 -0
- data/syntax/installer_distribution_script.syntax +77 -0
- data/syntax/io.syntax +81 -0
- data/syntax/java.syntax +211 -0
- data/syntax/javaproperties.syntax +20 -0
- data/syntax/javascript.syntax +256 -0
- data/syntax/javascript_+_prototype.syntax +72 -0
- data/syntax/javascript_+_prototype_bracketed.syntax +140 -0
- data/syntax/jquery_javascript.syntax +114 -0
- data/syntax/json.syntax +136 -0
- data/syntax/languagedefinition.syntax +708 -0
- data/syntax/latex.syntax +566 -0
- data/syntax/latex_beamer.syntax +41 -0
- data/syntax/latex_log.syntax +50 -0
- data/syntax/latex_memoir.syntax +64 -0
- data/syntax/lexflex.syntax +219 -0
- data/syntax/lighttpd.syntax +54 -0
- data/syntax/lilypond.syntax +492 -0
- data/syntax/lisp.syntax +61 -0
- data/syntax/literate_haskell.syntax +24 -0
- data/syntax/logo.syntax +29 -0
- data/syntax/logtalk.syntax +152 -0
- data/syntax/lua.syntax +86 -0
- data/syntax/m.syntax +142 -0
- data/syntax/macports_portfile.syntax +163 -0
- data/syntax/mail.syntax +118 -0
- data/syntax/makefile.syntax +36 -0
- data/syntax/man.syntax +17 -0
- data/syntax/mediawiki.syntax +567 -0
- data/syntax/mel.syntax +92 -0
- data/syntax/mips.syntax +66 -0
- data/syntax/mod_perl.syntax +50 -0
- data/syntax/modula-3.syntax +47 -0
- data/syntax/moinmoin.syntax +189 -0
- data/syntax/mootools.syntax +572 -0
- data/syntax/movable_type.syntax +162 -0
- data/syntax/multimarkdown.syntax +39 -0
- data/syntax/objective-c++.syntax +18 -0
- data/syntax/objective-c.syntax +233 -0
- data/syntax/ocaml.syntax +764 -0
- data/syntax/ocamllex.syntax +167 -0
- data/syntax/ocamlyacc.syntax +184 -0
- data/syntax/old/YAML.yaml +160 -0
- data/syntax/old/txt2tags.yaml +139 -0
- data/syntax/opengl.syntax +14 -0
- data/syntax/pascal.syntax +77 -0
- data/syntax/perl.syntax +1115 -0
- data/syntax/plain_text.syntax +32 -0
- data/syntax/pmwiki.syntax +113 -0
- data/syntax/postscript.syntax +114 -0
- data/syntax/processing.syntax +106 -0
- data/syntax/prolog.syntax +40 -0
- data/syntax/property_list.syntax +635 -0
- data/syntax/python.syntax +868 -0
- data/syntax/python_django.syntax +21 -0
- data/syntax/qmake_project.syntax +114 -0
- data/syntax/qt_c++.syntax +26 -0
- data/syntax/quake3_config.syntax +32 -0
- data/syntax/r.syntax +81 -0
- data/syntax/r_console.syntax +16 -0
- data/syntax/ragel.syntax +201 -0
- data/syntax/rd_r_documentation.syntax +91 -0
- data/syntax/regexp.syntax +50 -0
- data/syntax/regular_expressions_oniguruma.syntax +107 -0
- data/syntax/regular_expressions_python.syntax +109 -0
- data/syntax/release_notes.syntax +46 -0
- data/syntax/remind.syntax +253 -0
- data/syntax/restructuredtext.syntax +250 -0
- data/syntax/rez.syntax +80 -0
- data/syntax/ruby.syntax +1035 -0
- data/syntax/ruby_experimental.syntax +145 -0
- data/syntax/ruby_on_rails.syntax +88 -0
- data/syntax/s5.syntax +69 -0
- data/syntax/sass.syntax +45 -0
- data/syntax/scheme.syntax +347 -0
- data/syntax/scilab.syntax +41 -0
- data/syntax/setext.syntax +147 -0
- data/syntax/shell-unix-generic.syntax +384 -0
- data/syntax/slate.syntax +149 -0
- data/syntax/smarty.syntax +63 -0
- data/syntax/sql.syntax +237 -0
- data/syntax/sql_rails.syntax +18 -0
- data/syntax/ssh-config.syntax +33 -0
- data/syntax/standard_ml.syntax +121 -0
- data/syntax/strings_file.syntax +39 -0
- data/syntax/subversion_commit_message.syntax +36 -0
- data/syntax/sweave.syntax +84 -0
- data/syntax/swig.syntax +57 -0
- data/syntax/tcl.syntax +152 -0
- data/syntax/template_toolkit.syntax +121 -0
- data/syntax/tex.syntax +86 -0
- data/syntax/tex_math.syntax +49 -0
- data/syntax/textile.syntax +215 -0
- data/syntax/tsv.syntax +50 -0
- data/syntax/twiki.syntax +241 -0
- data/syntax/txt2tags.syntax +79 -0
- data/syntax/vectorscript.syntax +57 -0
- data/syntax/xhtml_1.0.syntax +4027 -0
- data/syntax/xml.syntax +180 -0
- data/syntax/xml_strict.syntax +92 -0
- data/syntax/xsl.syntax +60 -0
- data/syntax/yaml.syntax +160 -0
- data/syntax/yui_javascript.syntax +176 -0
- data/test/ultraviolet_test.rb +17 -0
- data/test/uv_test.rb +0 -0
- data/ultraviolet1x.gemspec +22 -0
- metadata +333 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
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,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
|
+
|