gitlab-rouge 1.9.2

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 (185) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +23 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +16 -0
  5. data/gitlab-rouge.gemspec +17 -0
  6. data/lib/rouge.rb +57 -0
  7. data/lib/rouge/cli.rb +363 -0
  8. data/lib/rouge/demos/apache +21 -0
  9. data/lib/rouge/demos/applescript +2 -0
  10. data/lib/rouge/demos/c +8 -0
  11. data/lib/rouge/demos/clojure +5 -0
  12. data/lib/rouge/demos/coffeescript +5 -0
  13. data/lib/rouge/demos/common_lisp +1 -0
  14. data/lib/rouge/demos/conf +4 -0
  15. data/lib/rouge/demos/cpp +8 -0
  16. data/lib/rouge/demos/csharp +5 -0
  17. data/lib/rouge/demos/css +4 -0
  18. data/lib/rouge/demos/dart +6 -0
  19. data/lib/rouge/demos/diff +7 -0
  20. data/lib/rouge/demos/elixir +1 -0
  21. data/lib/rouge/demos/erb +1 -0
  22. data/lib/rouge/demos/erlang +7 -0
  23. data/lib/rouge/demos/factor +5 -0
  24. data/lib/rouge/demos/gherkin +17 -0
  25. data/lib/rouge/demos/glsl +14 -0
  26. data/lib/rouge/demos/go +7 -0
  27. data/lib/rouge/demos/groovy +9 -0
  28. data/lib/rouge/demos/haml +5 -0
  29. data/lib/rouge/demos/handlebars +7 -0
  30. data/lib/rouge/demos/haskell +6 -0
  31. data/lib/rouge/demos/html +8 -0
  32. data/lib/rouge/demos/http +14 -0
  33. data/lib/rouge/demos/ini +4 -0
  34. data/lib/rouge/demos/io +11 -0
  35. data/lib/rouge/demos/java +5 -0
  36. data/lib/rouge/demos/javascript +1 -0
  37. data/lib/rouge/demos/json +1 -0
  38. data/lib/rouge/demos/json-doc +1 -0
  39. data/lib/rouge/demos/liquid +11 -0
  40. data/lib/rouge/demos/literate_coffeescript +3 -0
  41. data/lib/rouge/demos/literate_haskell +7 -0
  42. data/lib/rouge/demos/llvm +20 -0
  43. data/lib/rouge/demos/lua +12 -0
  44. data/lib/rouge/demos/make +6 -0
  45. data/lib/rouge/demos/markdown +4 -0
  46. data/lib/rouge/demos/matlab +6 -0
  47. data/lib/rouge/demos/moonscript +16 -0
  48. data/lib/rouge/demos/nginx +5 -0
  49. data/lib/rouge/demos/nim +27 -0
  50. data/lib/rouge/demos/objective_c +14 -0
  51. data/lib/rouge/demos/ocaml +12 -0
  52. data/lib/rouge/demos/perl +5 -0
  53. data/lib/rouge/demos/php +3 -0
  54. data/lib/rouge/demos/plaintext +1 -0
  55. data/lib/rouge/demos/powershell +49 -0
  56. data/lib/rouge/demos/prolog +9 -0
  57. data/lib/rouge/demos/properties +7 -0
  58. data/lib/rouge/demos/puppet +6 -0
  59. data/lib/rouge/demos/python +6 -0
  60. data/lib/rouge/demos/qml +9 -0
  61. data/lib/rouge/demos/r +8 -0
  62. data/lib/rouge/demos/racket +24 -0
  63. data/lib/rouge/demos/ruby +9 -0
  64. data/lib/rouge/demos/rust +12 -0
  65. data/lib/rouge/demos/sass +3 -0
  66. data/lib/rouge/demos/scala +3 -0
  67. data/lib/rouge/demos/scheme +4 -0
  68. data/lib/rouge/demos/scss +5 -0
  69. data/lib/rouge/demos/sed +4 -0
  70. data/lib/rouge/demos/shell +2 -0
  71. data/lib/rouge/demos/slim +17 -0
  72. data/lib/rouge/demos/smalltalk +6 -0
  73. data/lib/rouge/demos/sml +4 -0
  74. data/lib/rouge/demos/sql +1 -0
  75. data/lib/rouge/demos/swift +5 -0
  76. data/lib/rouge/demos/tcl +1 -0
  77. data/lib/rouge/demos/tex +1 -0
  78. data/lib/rouge/demos/toml +9 -0
  79. data/lib/rouge/demos/tulip +14 -0
  80. data/lib/rouge/demos/vb +4 -0
  81. data/lib/rouge/demos/viml +5 -0
  82. data/lib/rouge/demos/xml +2 -0
  83. data/lib/rouge/demos/yaml +4 -0
  84. data/lib/rouge/formatter.rb +50 -0
  85. data/lib/rouge/formatters/html.rb +117 -0
  86. data/lib/rouge/formatters/null.rb +19 -0
  87. data/lib/rouge/formatters/terminal256.rb +176 -0
  88. data/lib/rouge/lexer.rb +443 -0
  89. data/lib/rouge/lexers/apache.rb +68 -0
  90. data/lib/rouge/lexers/apache/keywords.yml +453 -0
  91. data/lib/rouge/lexers/apple_script.rb +367 -0
  92. data/lib/rouge/lexers/c.rb +212 -0
  93. data/lib/rouge/lexers/clojure.rb +112 -0
  94. data/lib/rouge/lexers/coffeescript.rb +174 -0
  95. data/lib/rouge/lexers/common_lisp.rb +345 -0
  96. data/lib/rouge/lexers/conf.rb +24 -0
  97. data/lib/rouge/lexers/cpp.rb +66 -0
  98. data/lib/rouge/lexers/csharp.rb +88 -0
  99. data/lib/rouge/lexers/css.rb +271 -0
  100. data/lib/rouge/lexers/dart.rb +104 -0
  101. data/lib/rouge/lexers/diff.rb +31 -0
  102. data/lib/rouge/lexers/elixir.rb +108 -0
  103. data/lib/rouge/lexers/erb.rb +56 -0
  104. data/lib/rouge/lexers/erlang.rb +118 -0
  105. data/lib/rouge/lexers/factor.rb +302 -0
  106. data/lib/rouge/lexers/gherkin.rb +137 -0
  107. data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
  108. data/lib/rouge/lexers/glsl.rb +135 -0
  109. data/lib/rouge/lexers/go.rb +178 -0
  110. data/lib/rouge/lexers/groovy.rb +104 -0
  111. data/lib/rouge/lexers/haml.rb +228 -0
  112. data/lib/rouge/lexers/handlebars.rb +79 -0
  113. data/lib/rouge/lexers/haskell.rb +183 -0
  114. data/lib/rouge/lexers/html.rb +94 -0
  115. data/lib/rouge/lexers/http.rb +80 -0
  116. data/lib/rouge/lexers/ini.rb +57 -0
  117. data/lib/rouge/lexers/io.rb +68 -0
  118. data/lib/rouge/lexers/java.rb +76 -0
  119. data/lib/rouge/lexers/javascript.rb +297 -0
  120. data/lib/rouge/lexers/liquid.rb +287 -0
  121. data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
  122. data/lib/rouge/lexers/literate_haskell.rb +36 -0
  123. data/lib/rouge/lexers/llvm.rb +84 -0
  124. data/lib/rouge/lexers/lua.rb +122 -0
  125. data/lib/rouge/lexers/lua/builtins.rb +22 -0
  126. data/lib/rouge/lexers/make.rb +116 -0
  127. data/lib/rouge/lexers/markdown.rb +154 -0
  128. data/lib/rouge/lexers/matlab.rb +74 -0
  129. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  130. data/lib/rouge/lexers/moonscript.rb +110 -0
  131. data/lib/rouge/lexers/nginx.rb +71 -0
  132. data/lib/rouge/lexers/nim.rb +152 -0
  133. data/lib/rouge/lexers/objective_c.rb +197 -0
  134. data/lib/rouge/lexers/ocaml.rb +111 -0
  135. data/lib/rouge/lexers/perl.rb +197 -0
  136. data/lib/rouge/lexers/php.rb +173 -0
  137. data/lib/rouge/lexers/php/builtins.rb +204 -0
  138. data/lib/rouge/lexers/plain_text.rb +25 -0
  139. data/lib/rouge/lexers/powershell.rb +96 -0
  140. data/lib/rouge/lexers/prolog.rb +64 -0
  141. data/lib/rouge/lexers/properties.rb +55 -0
  142. data/lib/rouge/lexers/puppet.rb +128 -0
  143. data/lib/rouge/lexers/python.rb +228 -0
  144. data/lib/rouge/lexers/qml.rb +72 -0
  145. data/lib/rouge/lexers/r.rb +56 -0
  146. data/lib/rouge/lexers/racket.rb +542 -0
  147. data/lib/rouge/lexers/ruby.rb +415 -0
  148. data/lib/rouge/lexers/rust.rb +191 -0
  149. data/lib/rouge/lexers/sass.rb +74 -0
  150. data/lib/rouge/lexers/sass/common.rb +180 -0
  151. data/lib/rouge/lexers/scala.rb +142 -0
  152. data/lib/rouge/lexers/scheme.rb +112 -0
  153. data/lib/rouge/lexers/scss.rb +34 -0
  154. data/lib/rouge/lexers/sed.rb +170 -0
  155. data/lib/rouge/lexers/shell.rb +152 -0
  156. data/lib/rouge/lexers/slim.rb +228 -0
  157. data/lib/rouge/lexers/smalltalk.rb +116 -0
  158. data/lib/rouge/lexers/sml.rb +347 -0
  159. data/lib/rouge/lexers/sql.rb +140 -0
  160. data/lib/rouge/lexers/swift.rb +144 -0
  161. data/lib/rouge/lexers/tcl.rb +192 -0
  162. data/lib/rouge/lexers/tex.rb +72 -0
  163. data/lib/rouge/lexers/toml.rb +71 -0
  164. data/lib/rouge/lexers/tulip.rb +75 -0
  165. data/lib/rouge/lexers/vb.rb +164 -0
  166. data/lib/rouge/lexers/viml.rb +101 -0
  167. data/lib/rouge/lexers/viml/keywords.rb +12 -0
  168. data/lib/rouge/lexers/xml.rb +59 -0
  169. data/lib/rouge/lexers/yaml.rb +364 -0
  170. data/lib/rouge/plugins/redcarpet.rb +30 -0
  171. data/lib/rouge/regex_lexer.rb +439 -0
  172. data/lib/rouge/template_lexer.rb +22 -0
  173. data/lib/rouge/text_analyzer.rb +48 -0
  174. data/lib/rouge/theme.rb +195 -0
  175. data/lib/rouge/themes/base16.rb +130 -0
  176. data/lib/rouge/themes/colorful.rb +67 -0
  177. data/lib/rouge/themes/github.rb +71 -0
  178. data/lib/rouge/themes/molokai.rb +82 -0
  179. data/lib/rouge/themes/monokai.rb +92 -0
  180. data/lib/rouge/themes/monokai_sublime.rb +90 -0
  181. data/lib/rouge/themes/thankful_eyes.rb +71 -0
  182. data/lib/rouge/token.rb +182 -0
  183. data/lib/rouge/util.rb +101 -0
  184. data/lib/rouge/version.rb +7 -0
  185. metadata +231 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 57aa0f443e2f11f799446cad2c73155a274eba34
4
+ data.tar.gz: fce722eb099832fc128e1fb409ef26f20bde1b68
5
+ SHA512:
6
+ metadata.gz: a2ff1dce9852605af2231b1a3858f291217c39923a64852bafc1ba042395b393f6387fb9e8239516d356f4d432ffc170d441253ec7e502744c2e6bc4030518e3
7
+ data.tar.gz: f9f18423829a7918d15f0bdc314eca82acc063795094549eaf2a1d96f6d44f51b78a189378dd40baabb430100ce5ec48db58e5d9a6e91bd3c3a82371ff0a907d
data/Gemfile ADDED
@@ -0,0 +1,23 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'minitest', '~> 4.0'
6
+ gem 'wrong'
7
+
8
+ gem 'rake'
9
+
10
+ # don't try to install redcarpet under jruby
11
+ gem 'redcarpet', :platforms => :ruby
12
+
13
+ group :development do
14
+ gem 'pry'
15
+
16
+ # docs
17
+ gem 'yard'
18
+ gem 'github-markup'
19
+
20
+ # for visual tests
21
+ gem 'sinatra'
22
+ gem 'shotgun'
23
+ end
data/LICENSE ADDED
@@ -0,0 +1,186 @@
1
+ # MIT license. See http://www.opensource.org/licenses/mit-license.php
2
+
3
+ Copyright (c) 2012 Jeanine Adkisson.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
22
+
23
+ # SPECIAL NOTE:
24
+ Many of the lexers in this project are adaptations of those in Pygments
25
+ (pygments.org). The license for Pygments is as follows:
26
+
27
+ # BEGIN pygments/LICENSE #
28
+
29
+ Copyright (c) 2006-2012 by the respective authors (see AUTHORS file).
30
+ All rights reserved.
31
+
32
+ Redistribution and use in source and binary forms, with or without
33
+ modification, are permitted provided that the following conditions are
34
+ met:
35
+
36
+ * Redistributions of source code must retain the above copyright
37
+ notice, this list of conditions and the following disclaimer.
38
+
39
+ * Redistributions in binary form must reproduce the above copyright
40
+ notice, this list of conditions and the following disclaimer in the
41
+ documentation and/or other materials provided with the distribution.
42
+
43
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
44
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
45
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
46
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
47
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
48
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
49
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
50
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
51
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
52
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
53
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
54
+
55
+ # END pygments/LICENSE #
56
+
57
+ The contents of the AUTHORS file at the time of porting was:
58
+
59
+ # BEGIN pygments/AUTHORS #
60
+
61
+ Pygments is written and maintained by Georg Brandl <georg@python.org>.
62
+
63
+ Major developers are Tim Hatch <tim@timhatch.com> and Armin Ronacher
64
+ <armin.ronacher@active-4.com>.
65
+
66
+ Other contributors, listed alphabetically, are:
67
+
68
+ * Sam Aaron -- Ioke lexer
69
+ * Kumar Appaiah -- Debian control lexer
70
+ * Ali Afshar -- image formatter
71
+ * Andreas Amann -- AppleScript lexer
72
+ * Jeffrey Arnold -- R/S lexer, BUGS lexers
73
+ * Jeremy Ashkenas -- CoffeeScript lexer
74
+ * Stefan Matthias Aust -- Smalltalk lexer
75
+ * Ben Bangert -- Mako lexers
76
+ * Max Battcher -- Darcs patch lexer
77
+ * Paul Baumgart, 280 North, Inc. -- Objective-J lexer
78
+ * Michael Bayer -- Myghty lexers
79
+ * John Benediktsson -- Factor lexer
80
+ * Christopher Bertels -- Fancy lexer
81
+ * Jarrett Billingsley -- MiniD lexer
82
+ * Adam Blinkinsop -- Haskell, Redcode lexers
83
+ * Frits van Bommel -- assembler lexers
84
+ * Pierre Bourdon -- bugfixes
85
+ * Hiram Chirino -- Scaml and Jade lexers
86
+ * Leaf Corcoran -- MoonScript lexer
87
+ * Christopher Creutzig -- MuPAD lexer
88
+ * Pete Curry -- bugfixes
89
+ * Owen Durni -- haXe lexer
90
+ * Nick Efford -- Python 3 lexer
91
+ * Sven Efftinge -- Xtend lexer
92
+ * Artem Egorkine -- terminal256 formatter
93
+ * James H. Fisher -- PostScript lexer
94
+ * Carlos Galdino -- Elixir and Elixir Console lexers
95
+ * Naveen Garg -- Autohotkey lexer
96
+ * Laurent Gautier -- R/S lexer
97
+ * Alex Gaynor -- PyPy log lexer
98
+ * Bertrand Goetzmann -- Groovy lexer
99
+ * Krzysiek Goj -- Scala lexer
100
+ * Matt Good -- Genshi, Cheetah lexers
101
+ * Patrick Gotthardt -- PHP namespaces support
102
+ * Olivier Guibe -- Asymptote lexer
103
+ * Martin Harriman -- SNOBOL lexer
104
+ * Matthew Harrison -- SVG formatter
105
+ * Steven Hazel -- Tcl lexer
106
+ * Aslak Hellesøy -- Gherkin lexer
107
+ * Greg Hendershott -- Racket lexer
108
+ * Jordi Gutiérrez Hermoso -- Octave lexer
109
+ * David Hess, Fish Software, Inc. -- Objective-J lexer
110
+ * Varun Hiremath -- Debian control lexer
111
+ * Doug Hogan -- Mscgen lexer
112
+ * Ben Hollis -- Mason lexer
113
+ * Tim Howard -- BlitzMax lexer
114
+ * Ivan Inozemtsev -- Fantom lexer
115
+ * Brian R. Jackson -- Tea lexer
116
+ * Dennis Kaarsemaker -- sources.list lexer
117
+ * Igor Kalnitsky -- vhdl lexer
118
+ * Eric Knibbe -- Lasso lexer
119
+ * Adam Koprowski -- Opa lexer
120
+ * Benjamin Kowarsch -- Modula-2 lexer
121
+ * Alexander Kriegisch -- Kconfig and AspectJ lexers
122
+ * Marek Kubica -- Scheme lexer
123
+ * Jochen Kupperschmidt -- Markdown processor
124
+ * Gerd Kurzbach -- Modelica lexer
125
+ * Olov Lassus -- Dart lexer
126
+ * Sylvestre Ledru -- Scilab lexer
127
+ * Mark Lee -- Vala lexer
128
+ * Ben Mabey -- Gherkin lexer
129
+ * Simone Margaritelli -- Hybris lexer
130
+ * Kirk McDonald -- D lexer
131
+ * Gordon McGregor -- SystemVerilog lexer
132
+ * Stephen McKamey -- Duel/JBST lexer
133
+ * Brian McKenna -- F# lexer
134
+ * Lukas Meuser -- BBCode formatter, Lua lexer
135
+ * Paul Miller -- LiveScript lexer
136
+ * Hong Minhee -- HTTP lexer
137
+ * Michael Mior -- Awk lexer
138
+ * Jon Morton -- Rust lexer
139
+ * Paulo Moura -- Logtalk lexer
140
+ * Mher Movsisyan -- DTD lexer
141
+ * Ana Nelson -- Ragel, ANTLR, R console lexers
142
+ * Nam T. Nguyen -- Monokai style
143
+ * Jesper Noehr -- HTML formatter "anchorlinenos"
144
+ * Mike Nolta -- Julia lexer
145
+ * Jonas Obrist -- BBCode lexer
146
+ * David Oliva -- Rebol lexer
147
+ * Jon Parise -- Protocol buffers lexer
148
+ * Ronny Pfannschmidt -- BBCode lexer
149
+ * Benjamin Peterson -- Test suite refactoring
150
+ * Dominik Picheta -- Nimrod lexer
151
+ * Clément Prévost -- UrbiScript lexer
152
+ * Kashif Rasul -- CUDA lexer
153
+ * Justin Reidy -- MXML lexer
154
+ * Norman Richards -- JSON lexer
155
+ * Lubomir Rintel -- GoodData MAQL and CL lexers
156
+ * Andre Roberge -- Tango style
157
+ * Konrad Rudolph -- LaTeX formatter enhancements
158
+ * Mario Ruggier -- Evoque lexers
159
+ * Stou Sandalski -- NumPy, FORTRAN, tcsh and XSLT lexers
160
+ * Matteo Sasso -- Common Lisp lexer
161
+ * Joe Schafer -- Ada lexer
162
+ * Ken Schutte -- Matlab lexers
163
+ * Tassilo Schweyer -- Io, MOOCode lexers
164
+ * Joerg Sieker -- ABAP lexer
165
+ * Robert Simmons -- Standard ML lexer
166
+ * Kirill Simonov -- YAML lexer
167
+ * Steve Spigarelli -- XQuery lexer
168
+ * Jerome St-Louis -- eC lexer
169
+ * James Strachan -- Kotlin lexer
170
+ * Tiberius Teng -- default style overhaul
171
+ * Jeremy Thurgood -- Erlang, Squid config lexers
172
+ * Erick Tryzelaar -- Felix lexer
173
+ * Daniele Varrazzo -- PostgreSQL lexers
174
+ * Abe Voelker -- OpenEdge ABL lexer
175
+ * Whitney Young -- ObjectiveC lexer
176
+ * Matthias Vallentin -- Bro lexer
177
+ * Nathan Weizenbaum -- Haml and Sass lexers
178
+ * Dietmar Winkler -- Modelica lexer
179
+ * Nils Winter -- Smalltalk lexer
180
+ * Davy Wybiral -- Clojure lexer
181
+ * Diego Zamboni -- CFengine3 lexer
182
+ * Alex Zimin -- Nemerle lexer
183
+
184
+ Many thanks for all contributions!
185
+
186
+ # END pygments/AUTHORS #
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ ROOT_DIR = Pathname.new(__FILE__).dirname.parent
5
+ load ROOT_DIR.join('lib/rouge.rb')
6
+ load ROOT_DIR.join('lib/rouge/cli.rb')
7
+
8
+ begin
9
+ Rouge::CLI.parse(ARGV).run
10
+ rescue Rouge::CLI::Error => e
11
+ puts e.message
12
+ exit e.status
13
+ rescue Interrupt
14
+ $stderr.puts "\nrouge: interrupted"
15
+ exit 2
16
+ end
@@ -0,0 +1,17 @@
1
+ require './lib/rouge/version'
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "gitlab-rouge"
5
+ s.version = Rouge.version
6
+ s.authors = ["Jeanine Adkisson", "Douwe Maan"]
7
+ s.email = ["jneen@jneen.net", "douwe@gitlab.com"]
8
+ s.summary = "A pure-ruby colorizer based on pygments"
9
+ s.description = <<-desc.strip.gsub(/\s+/, ' ')
10
+ Rouge aims to a be a simple, easy-to-extend drop-in replacement
11
+ for pygments.
12
+ desc
13
+ s.homepage = "https://gitlab.com/gitlab-org/gitlab-rouge"
14
+ s.files = Dir['Gemfile', 'LICENSE', 'gitlab-rouge.gemspec', 'lib/**/*.rb', 'lib/**/*.yml', 'bin/rougify', 'lib/rouge/demos/*']
15
+ s.executables = %w(rougify)
16
+ s.license = 'MIT (see LICENSE file)'
17
+ end
@@ -0,0 +1,57 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ # stdlib
4
+ require 'pathname'
5
+
6
+ # The containing module for Rouge
7
+ module Rouge
8
+ class << self
9
+ # Highlight some text with a given lexer and formatter.
10
+ #
11
+ # @example
12
+ # Rouge.highlight('@foo = 1', 'ruby', 'html')
13
+ # Rouge.highlight('var foo = 1;', 'js', 'terminal256')
14
+ #
15
+ # # streaming - chunks become available as they are lexed
16
+ # Rouge.highlight(large_string, 'ruby', 'html') do |chunk|
17
+ # $stdout.print chunk
18
+ # end
19
+ def highlight(text, lexer, formatter, &b)
20
+ lexer = Lexer.find(lexer) unless lexer.respond_to? :lex
21
+ raise "unknown lexer #{lexer}" unless lexer
22
+
23
+ formatter = Formatter.find(formatter) unless formatter.respond_to? :format
24
+ raise "unknown formatter #{formatter}" unless formatter
25
+
26
+ formatter.format(lexer.lex(text), &b)
27
+ end
28
+ end
29
+ end
30
+
31
+ load_dir = Pathname.new(__FILE__).dirname
32
+ load load_dir.join('rouge/version.rb')
33
+
34
+ load load_dir.join('rouge/util.rb')
35
+
36
+ load load_dir.join('rouge/text_analyzer.rb')
37
+ load load_dir.join('rouge/token.rb')
38
+
39
+ load load_dir.join('rouge/lexer.rb')
40
+ load load_dir.join('rouge/regex_lexer.rb')
41
+ load load_dir.join('rouge/template_lexer.rb')
42
+
43
+ Dir.glob(load_dir.join('rouge/lexers/*.rb')).each { |f| load f }
44
+
45
+ load load_dir.join('rouge/formatter.rb')
46
+ load load_dir.join('rouge/formatters/html.rb')
47
+ load load_dir.join('rouge/formatters/terminal256.rb')
48
+ load load_dir.join('rouge/formatters/null.rb')
49
+
50
+ load load_dir.join('rouge/theme.rb')
51
+ load load_dir.join('rouge/themes/thankful_eyes.rb')
52
+ load load_dir.join('rouge/themes/colorful.rb')
53
+ load load_dir.join('rouge/themes/base16.rb')
54
+ load load_dir.join('rouge/themes/github.rb')
55
+ load load_dir.join('rouge/themes/monokai.rb')
56
+ load load_dir.join('rouge/themes/molokai.rb')
57
+ load load_dir.join('rouge/themes/monokai_sublime.rb')
@@ -0,0 +1,363 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ # not required by the main lib.
4
+ # to use this module, require 'rouge/cli'.
5
+
6
+ module Rouge
7
+ class FileReader
8
+ attr_reader :input
9
+ def initialize(input)
10
+ @input = input
11
+ end
12
+
13
+ def file
14
+ case input
15
+ when '-'
16
+ $stdin
17
+ when String
18
+ File.new(input)
19
+ when ->(i){ i.respond_to? :read }
20
+ input
21
+ end
22
+ end
23
+
24
+ def read
25
+ @read ||= begin
26
+ file.read
27
+ rescue => e
28
+ $stderr.puts "unable to open #{input}: #{e.message}"
29
+ exit 1
30
+ ensure
31
+ file.close
32
+ end
33
+ end
34
+ end
35
+
36
+ class CLI
37
+ def self.doc
38
+ return enum_for(:doc) unless block_given?
39
+
40
+ yield %|usage: rougify [command] [args...]|
41
+ yield %||
42
+ yield %|where <command> is one of:|
43
+ yield %| highlight #{Highlight.desc}|
44
+ yield %| help #{Help.desc}|
45
+ yield %| style #{Style.desc}|
46
+ yield %| list #{List.desc}|
47
+ yield %| version #{Version.desc}|
48
+ yield %||
49
+ yield %|See `rougify help <command>` for more info.|
50
+ end
51
+
52
+ class Error < StandardError
53
+ attr_reader :message, :status
54
+ def initialize(message, status=1)
55
+ @message = message
56
+ @status = status
57
+ end
58
+ end
59
+
60
+ def self.parse(argv=ARGV)
61
+ argv = normalize_syntax(argv)
62
+
63
+ mode = argv.shift
64
+
65
+ klass = class_from_arg(mode)
66
+ return klass.parse(argv) if klass
67
+
68
+ case mode
69
+ when '-h', '--help', 'help', '-help'
70
+ Help.parse(argv)
71
+ else
72
+ argv.unshift(mode) if mode
73
+ Highlight.parse(argv)
74
+ end
75
+ end
76
+
77
+ def initialize(options={})
78
+ end
79
+
80
+ def self.error!(msg, status=1)
81
+ raise Error.new(msg, status)
82
+ end
83
+
84
+ def error!(*a)
85
+ self.class.error!(*a)
86
+ end
87
+
88
+ def self.class_from_arg(arg)
89
+ case arg
90
+ when 'version', '--version', '-v'
91
+ Version
92
+ when 'help'
93
+ Help
94
+ when 'highlight', 'hi'
95
+ Highlight
96
+ when 'style'
97
+ Style
98
+ when 'list'
99
+ List
100
+ end
101
+ end
102
+
103
+ class Version < CLI
104
+ def self.desc
105
+ "print the rouge version number"
106
+ end
107
+
108
+ def self.parse(*); new; end
109
+
110
+ def run
111
+ puts Rouge.version
112
+ end
113
+ end
114
+
115
+ class Help < CLI
116
+ def self.desc
117
+ "print help info"
118
+ end
119
+
120
+ def self.doc
121
+ return enum_for(:doc) unless block_given?
122
+
123
+ yield %|usage: rougify help <command>|
124
+ yield %||
125
+ yield %|print help info for <command>.|
126
+ end
127
+
128
+ def self.parse(argv)
129
+ opts = { :mode => CLI }
130
+ until argv.empty?
131
+ arg = argv.shift
132
+ klass = class_from_arg(arg)
133
+ if klass
134
+ opts[:mode] = klass
135
+ next
136
+ end
137
+ end
138
+ new(opts)
139
+ end
140
+
141
+ def initialize(opts={})
142
+ @mode = opts[:mode]
143
+ end
144
+
145
+ def run
146
+ @mode.doc.each(&method(:puts))
147
+ end
148
+ end
149
+
150
+ class Highlight < CLI
151
+ def self.desc
152
+ "highlight code"
153
+ end
154
+
155
+ def self.doc
156
+ return enum_for(:doc) unless block_given?
157
+
158
+ yield %[usage: rougify highlight <filename> [options...]]
159
+ yield %[ rougify highlight [options...]]
160
+ yield %[]
161
+ yield %[--input-file|-i <filename> specify a file to read, or - to use stdin]
162
+ yield %[]
163
+ yield %[--lexer|-l <lexer> specify the lexer to use.]
164
+ yield %[ If not provided, rougify will try to guess]
165
+ yield %[ based on --mimetype, the filename, and the]
166
+ yield %[ file contents.]
167
+ yield %[]
168
+ yield %[--formatter|-f <opts> specify the output formatter to use.]
169
+ yield %[ If not provided, rougify will default to]
170
+ yield %[ terminal256.]
171
+ yield %[]
172
+ yield %[--mimetype|-m <mimetype> specify a mimetype for lexer guessing]
173
+ yield %[]
174
+ yield %[--lexer-opts|-L <opts> specify lexer options in CGI format]
175
+ yield %[ (opt1=val1&opt2=val2)]
176
+ yield %[]
177
+ yield %[--formatter-opts|-F <opts> specify formatter options in CGI format]
178
+ yield %[ (opt1=val1&opt2=val2)]
179
+ end
180
+
181
+ def self.parse(argv)
182
+ opts = {
183
+ :formatter => 'terminal256',
184
+ :input_file => '-',
185
+ :lexer_opts => {},
186
+ :formatter_opts => {},
187
+ }
188
+
189
+ until argv.empty?
190
+ arg = argv.shift
191
+ case arg
192
+ when '--input-file', '-i'
193
+ opts[:input_file] = argv.shift
194
+ when '--mimetype', '-m'
195
+ opts[:mimetype] = argv.shift
196
+ when '--lexer', '-l'
197
+ opts[:lexer] = argv.shift
198
+ when '--formatter', '-f'
199
+ opts[:formatter] = argv.shift
200
+ when '--lexer-opts', '-L'
201
+ opts[:lexer_opts] = parse_cgi(argv.shift)
202
+ when '--formatter-opts', '-F'
203
+ opts[:formatter_opts] = parse_cgi(argv.shift)
204
+ when /^--/
205
+ error! "unknown option #{arg.inspect}"
206
+ else
207
+ opts[:input_file] = arg
208
+ end
209
+ end
210
+
211
+ new(opts)
212
+ end
213
+
214
+ def input_stream
215
+ @input_stream ||= FileReader.new(@input_file)
216
+ end
217
+
218
+ def input
219
+ @input ||= input_stream.read
220
+ end
221
+
222
+ def lexer_class
223
+ @lexer_class ||= Lexer.guess(
224
+ :filename => @input_file,
225
+ :mimetype => @mimetype,
226
+ :source => input_stream,
227
+ )
228
+ end
229
+
230
+ def lexer
231
+ @lexer ||= lexer_class.new(@lexer_opts)
232
+ end
233
+
234
+ attr_reader :input_file, :lexer_name, :mimetype, :formatter
235
+
236
+ def initialize(opts={})
237
+ @input_file = opts[:input_file]
238
+
239
+ if opts[:lexer]
240
+ @lexer_class = Lexer.find(opts[:lexer]) \
241
+ or error! "unkown lexer #{opts[:lexer].inspect}"
242
+ else
243
+ @lexer_name = opts[:lexer]
244
+ @mimetype = opts[:mimetype]
245
+ end
246
+
247
+ @lexer_opts = opts[:lexer_opts]
248
+
249
+ formatter_class = Formatter.find(opts[:formatter]) \
250
+ or error! "unknown formatter #{opts[:formatter]}"
251
+
252
+ @formatter = formatter_class.new(opts[:formatter_opts])
253
+ end
254
+
255
+ def run
256
+ formatter.format(lexer.lex(input), &method(:print))
257
+ end
258
+
259
+ private
260
+ def self.parse_cgi(str)
261
+ pairs = CGI.parse(str).map { |k, v| [k.to_sym, v.first] }
262
+ Hash[pairs]
263
+ end
264
+ end
265
+
266
+ class Style < CLI
267
+ def self.desc
268
+ "print CSS styles"
269
+ end
270
+
271
+ def self.doc
272
+ return enum_for(:doc) unless block_given?
273
+
274
+ yield %|usage: rougify style [<theme-name>] [<options>]|
275
+ yield %||
276
+ yield %|Print CSS styles for the given theme. Extra options are|
277
+ yield %|passed to the theme. Theme defaults to thankful_eyes.|
278
+ yield %||
279
+ yield %|options:|
280
+ yield %| --scope (default: .highlight) a css selector to scope by|
281
+ yield %||
282
+ yield %|available themes:|
283
+ yield %| #{Theme.registry.keys.sort.join(', ')}|
284
+ end
285
+
286
+ def self.parse(argv)
287
+ opts = { :theme_name => 'thankful_eyes' }
288
+
289
+ until argv.empty?
290
+ arg = argv.shift
291
+ case arg
292
+ when /--(\w+)/
293
+ opts[$1.tr('-', '_').to_sym] = argv.shift
294
+ else
295
+ opts[:theme_name] = arg
296
+ end
297
+ end
298
+
299
+ new(opts)
300
+ end
301
+
302
+ def initialize(opts)
303
+ theme_name = opts.delete(:theme_name)
304
+ theme_class = Theme.find(theme_name) \
305
+ or error! "unknown theme: #{theme_name}"
306
+
307
+ @theme = theme_class.new(opts)
308
+ end
309
+
310
+ def run
311
+ @theme.render(&method(:puts))
312
+ end
313
+ end
314
+
315
+ class List < CLI
316
+ def self.desc
317
+ "list available lexers"
318
+ end
319
+
320
+ def self.doc
321
+ return enum_for(:doc) unless block_given?
322
+
323
+ yield %|usage: rouge list|
324
+ yield %||
325
+ yield %|print a list of all available lexers with their descriptions.|
326
+ end
327
+
328
+ def self.parse(argv)
329
+ new
330
+ end
331
+
332
+ def run
333
+ puts "== Available Lexers =="
334
+
335
+ Lexer.all.sort_by(&:tag).each do |lexer|
336
+ desc = "#{lexer.desc}"
337
+ if lexer.aliases.any?
338
+ desc << " [aliases: #{lexer.aliases.join(',')}]"
339
+ end
340
+ puts "%s: %s" % [lexer.tag, desc]
341
+ puts
342
+ end
343
+ end
344
+ end
345
+
346
+ private
347
+ def self.normalize_syntax(argv)
348
+ out = []
349
+ argv.each do |arg|
350
+ case arg
351
+ when /^(--\w+)=(.*)$/
352
+ out << $1 << $2
353
+ when /^(-\w)(.+)$/
354
+ out << $1 << $2
355
+ else
356
+ out << arg
357
+ end
358
+ end
359
+
360
+ out
361
+ end
362
+ end
363
+ end