rouge_ecl 0.0.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 (319) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +26 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +17 -0
  5. data/lib/rouge.rb +82 -0
  6. data/lib/rouge/cli.rb +429 -0
  7. data/lib/rouge/demos/abap +6 -0
  8. data/lib/rouge/demos/actionscript +4 -0
  9. data/lib/rouge/demos/apache +21 -0
  10. data/lib/rouge/demos/apiblueprint +33 -0
  11. data/lib/rouge/demos/applescript +2 -0
  12. data/lib/rouge/demos/awk +4 -0
  13. data/lib/rouge/demos/biml +38 -0
  14. data/lib/rouge/demos/bsl +7 -0
  15. data/lib/rouge/demos/c +8 -0
  16. data/lib/rouge/demos/ceylon +7 -0
  17. data/lib/rouge/demos/cfscript +18 -0
  18. data/lib/rouge/demos/clojure +5 -0
  19. data/lib/rouge/demos/cmake +7 -0
  20. data/lib/rouge/demos/coffeescript +5 -0
  21. data/lib/rouge/demos/common_lisp +1 -0
  22. data/lib/rouge/demos/conf +4 -0
  23. data/lib/rouge/demos/console +6 -0
  24. data/lib/rouge/demos/coq +13 -0
  25. data/lib/rouge/demos/cpp +8 -0
  26. data/lib/rouge/demos/csharp +5 -0
  27. data/lib/rouge/demos/css +4 -0
  28. data/lib/rouge/demos/d +16 -0
  29. data/lib/rouge/demos/dart +6 -0
  30. data/lib/rouge/demos/diff +7 -0
  31. data/lib/rouge/demos/digdag +19 -0
  32. data/lib/rouge/demos/docker +9 -0
  33. data/lib/rouge/demos/dot +5 -0
  34. data/lib/rouge/demos/ecl +1 -0
  35. data/lib/rouge/demos/eiffel +30 -0
  36. data/lib/rouge/demos/elixir +1 -0
  37. data/lib/rouge/demos/elm +4 -0
  38. data/lib/rouge/demos/erb +1 -0
  39. data/lib/rouge/demos/erlang +7 -0
  40. data/lib/rouge/demos/factor +5 -0
  41. data/lib/rouge/demos/fortran +22 -0
  42. data/lib/rouge/demos/fsharp +12 -0
  43. data/lib/rouge/demos/gherkin +17 -0
  44. data/lib/rouge/demos/glsl +14 -0
  45. data/lib/rouge/demos/go +7 -0
  46. data/lib/rouge/demos/gradle +10 -0
  47. data/lib/rouge/demos/graphql +17 -0
  48. data/lib/rouge/demos/groovy +9 -0
  49. data/lib/rouge/demos/hack +5 -0
  50. data/lib/rouge/demos/haml +5 -0
  51. data/lib/rouge/demos/handlebars +7 -0
  52. data/lib/rouge/demos/haskell +6 -0
  53. data/lib/rouge/demos/html +8 -0
  54. data/lib/rouge/demos/http +14 -0
  55. data/lib/rouge/demos/hylang +10 -0
  56. data/lib/rouge/demos/idlang +8 -0
  57. data/lib/rouge/demos/igorpro +9 -0
  58. data/lib/rouge/demos/ini +4 -0
  59. data/lib/rouge/demos/io +11 -0
  60. data/lib/rouge/demos/irb +4 -0
  61. data/lib/rouge/demos/irb_output +2 -0
  62. data/lib/rouge/demos/java +5 -0
  63. data/lib/rouge/demos/javascript +1 -0
  64. data/lib/rouge/demos/jinja +9 -0
  65. data/lib/rouge/demos/json +1 -0
  66. data/lib/rouge/demos/json-doc +1 -0
  67. data/lib/rouge/demos/jsonnet +28 -0
  68. data/lib/rouge/demos/jsx +17 -0
  69. data/lib/rouge/demos/julia +11 -0
  70. data/lib/rouge/demos/kotlin +3 -0
  71. data/lib/rouge/demos/lasso +12 -0
  72. data/lib/rouge/demos/liquid +11 -0
  73. data/lib/rouge/demos/literate_coffeescript +3 -0
  74. data/lib/rouge/demos/literate_haskell +7 -0
  75. data/lib/rouge/demos/llvm +20 -0
  76. data/lib/rouge/demos/lua +12 -0
  77. data/lib/rouge/demos/make +6 -0
  78. data/lib/rouge/demos/markdown +4 -0
  79. data/lib/rouge/demos/matlab +6 -0
  80. data/lib/rouge/demos/moonscript +16 -0
  81. data/lib/rouge/demos/mosel +10 -0
  82. data/lib/rouge/demos/mxml +22 -0
  83. data/lib/rouge/demos/nasm +26 -0
  84. data/lib/rouge/demos/nginx +5 -0
  85. data/lib/rouge/demos/nim +27 -0
  86. data/lib/rouge/demos/nix +19 -0
  87. data/lib/rouge/demos/objective_c +18 -0
  88. data/lib/rouge/demos/ocaml +12 -0
  89. data/lib/rouge/demos/pascal +14 -0
  90. data/lib/rouge/demos/perl +5 -0
  91. data/lib/rouge/demos/php +3 -0
  92. data/lib/rouge/demos/plaintext +1 -0
  93. data/lib/rouge/demos/plist +142 -0
  94. data/lib/rouge/demos/pony +17 -0
  95. data/lib/rouge/demos/powershell +49 -0
  96. data/lib/rouge/demos/praat +26 -0
  97. data/lib/rouge/demos/prolog +9 -0
  98. data/lib/rouge/demos/prometheus +9 -0
  99. data/lib/rouge/demos/properties +7 -0
  100. data/lib/rouge/demos/protobuf +5 -0
  101. data/lib/rouge/demos/puppet +6 -0
  102. data/lib/rouge/demos/python +6 -0
  103. data/lib/rouge/demos/q +2 -0
  104. data/lib/rouge/demos/qml +9 -0
  105. data/lib/rouge/demos/r +8 -0
  106. data/lib/rouge/demos/racket +24 -0
  107. data/lib/rouge/demos/ruby +9 -0
  108. data/lib/rouge/demos/rust +12 -0
  109. data/lib/rouge/demos/sass +3 -0
  110. data/lib/rouge/demos/scala +3 -0
  111. data/lib/rouge/demos/scheme +4 -0
  112. data/lib/rouge/demos/scss +5 -0
  113. data/lib/rouge/demos/sed +4 -0
  114. data/lib/rouge/demos/shell +2 -0
  115. data/lib/rouge/demos/sieve +10 -0
  116. data/lib/rouge/demos/slim +17 -0
  117. data/lib/rouge/demos/smalltalk +6 -0
  118. data/lib/rouge/demos/smarty +12 -0
  119. data/lib/rouge/demos/sml +4 -0
  120. data/lib/rouge/demos/sql +1 -0
  121. data/lib/rouge/demos/swift +5 -0
  122. data/lib/rouge/demos/tap +5 -0
  123. data/lib/rouge/demos/tcl +1 -0
  124. data/lib/rouge/demos/tex +1 -0
  125. data/lib/rouge/demos/toml +9 -0
  126. data/lib/rouge/demos/tsx +17 -0
  127. data/lib/rouge/demos/tulip +13 -0
  128. data/lib/rouge/demos/turtle +26 -0
  129. data/lib/rouge/demos/twig +9 -0
  130. data/lib/rouge/demos/typescript +1 -0
  131. data/lib/rouge/demos/vala +8 -0
  132. data/lib/rouge/demos/vb +4 -0
  133. data/lib/rouge/demos/verilog +27 -0
  134. data/lib/rouge/demos/vhdl +23 -0
  135. data/lib/rouge/demos/viml +14 -0
  136. data/lib/rouge/demos/vue +11 -0
  137. data/lib/rouge/demos/wollok +11 -0
  138. data/lib/rouge/demos/xml +2 -0
  139. data/lib/rouge/demos/yaml +4 -0
  140. data/lib/rouge/formatter.rb +75 -0
  141. data/lib/rouge/formatters/html.rb +37 -0
  142. data/lib/rouge/formatters/html_inline.rb +30 -0
  143. data/lib/rouge/formatters/html_legacy.rb +44 -0
  144. data/lib/rouge/formatters/html_linewise.rb +27 -0
  145. data/lib/rouge/formatters/html_pygments.rb +16 -0
  146. data/lib/rouge/formatters/html_table.rb +61 -0
  147. data/lib/rouge/formatters/null.rb +19 -0
  148. data/lib/rouge/formatters/terminal256.rb +180 -0
  149. data/lib/rouge/guesser.rb +55 -0
  150. data/lib/rouge/guessers/disambiguation.rb +101 -0
  151. data/lib/rouge/guessers/filename.rb +25 -0
  152. data/lib/rouge/guessers/glob_mapping.rb +43 -0
  153. data/lib/rouge/guessers/mimetype.rb +14 -0
  154. data/lib/rouge/guessers/modeline.rb +44 -0
  155. data/lib/rouge/guessers/source.rb +29 -0
  156. data/lib/rouge/guessers/util.rb +32 -0
  157. data/lib/rouge/lexer.rb +461 -0
  158. data/lib/rouge/lexers/abap.rb +238 -0
  159. data/lib/rouge/lexers/actionscript.rb +195 -0
  160. data/lib/rouge/lexers/apache.rb +71 -0
  161. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  162. data/lib/rouge/lexers/apiblueprint.rb +47 -0
  163. data/lib/rouge/lexers/apple_script.rb +367 -0
  164. data/lib/rouge/lexers/awk.rb +161 -0
  165. data/lib/rouge/lexers/biml.rb +41 -0
  166. data/lib/rouge/lexers/bsl.rb +81 -0
  167. data/lib/rouge/lexers/c.rb +212 -0
  168. data/lib/rouge/lexers/ceylon.rb +123 -0
  169. data/lib/rouge/lexers/cfscript.rb +153 -0
  170. data/lib/rouge/lexers/clojure.rb +112 -0
  171. data/lib/rouge/lexers/cmake.rb +206 -0
  172. data/lib/rouge/lexers/coffeescript.rb +174 -0
  173. data/lib/rouge/lexers/common_lisp.rb +345 -0
  174. data/lib/rouge/lexers/conf.rb +24 -0
  175. data/lib/rouge/lexers/console.rb +136 -0
  176. data/lib/rouge/lexers/coq.rb +187 -0
  177. data/lib/rouge/lexers/cpp.rb +78 -0
  178. data/lib/rouge/lexers/csharp.rb +114 -0
  179. data/lib/rouge/lexers/css.rb +273 -0
  180. data/lib/rouge/lexers/d.rb +176 -0
  181. data/lib/rouge/lexers/dart.rb +104 -0
  182. data/lib/rouge/lexers/diff.rb +31 -0
  183. data/lib/rouge/lexers/digdag.rb +68 -0
  184. data/lib/rouge/lexers/docker.rb +50 -0
  185. data/lib/rouge/lexers/dot.rb +68 -0
  186. data/lib/rouge/lexers/ecl.rb +138 -0
  187. data/lib/rouge/lexers/eiffel.rb +65 -0
  188. data/lib/rouge/lexers/elixir.rb +133 -0
  189. data/lib/rouge/lexers/elm.rb +89 -0
  190. data/lib/rouge/lexers/erb.rb +52 -0
  191. data/lib/rouge/lexers/erlang.rb +114 -0
  192. data/lib/rouge/lexers/factor.rb +302 -0
  193. data/lib/rouge/lexers/fortran.rb +176 -0
  194. data/lib/rouge/lexers/fsharp.rb +118 -0
  195. data/lib/rouge/lexers/gherkin.rb +137 -0
  196. data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
  197. data/lib/rouge/lexers/glsl.rb +135 -0
  198. data/lib/rouge/lexers/go.rb +174 -0
  199. data/lib/rouge/lexers/gradle.rb +37 -0
  200. data/lib/rouge/lexers/graphql.rb +243 -0
  201. data/lib/rouge/lexers/groovy.rb +112 -0
  202. data/lib/rouge/lexers/hack.rb +48 -0
  203. data/lib/rouge/lexers/haml.rb +229 -0
  204. data/lib/rouge/lexers/handlebars.rb +79 -0
  205. data/lib/rouge/lexers/haskell.rb +182 -0
  206. data/lib/rouge/lexers/html.rb +139 -0
  207. data/lib/rouge/lexers/http.rb +80 -0
  208. data/lib/rouge/lexers/hylang.rb +93 -0
  209. data/lib/rouge/lexers/idlang.rb +310 -0
  210. data/lib/rouge/lexers/igorpro.rb +408 -0
  211. data/lib/rouge/lexers/ini.rb +53 -0
  212. data/lib/rouge/lexers/io.rb +68 -0
  213. data/lib/rouge/lexers/irb.rb +66 -0
  214. data/lib/rouge/lexers/java.rb +87 -0
  215. data/lib/rouge/lexers/javascript.rb +281 -0
  216. data/lib/rouge/lexers/jinja.rb +137 -0
  217. data/lib/rouge/lexers/json.rb +29 -0
  218. data/lib/rouge/lexers/json_doc.rb +23 -0
  219. data/lib/rouge/lexers/jsonnet.rb +151 -0
  220. data/lib/rouge/lexers/jsx.rb +102 -0
  221. data/lib/rouge/lexers/julia.rb +172 -0
  222. data/lib/rouge/lexers/kotlin.rb +79 -0
  223. data/lib/rouge/lexers/lasso.rb +214 -0
  224. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  225. data/lib/rouge/lexers/liquid.rb +287 -0
  226. data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
  227. data/lib/rouge/lexers/literate_haskell.rb +36 -0
  228. data/lib/rouge/lexers/llvm.rb +80 -0
  229. data/lib/rouge/lexers/lua.rb +125 -0
  230. data/lib/rouge/lexers/lua/builtins.rb +22 -0
  231. data/lib/rouge/lexers/make.rb +112 -0
  232. data/lib/rouge/lexers/markdown.rb +154 -0
  233. data/lib/rouge/lexers/matlab.rb +71 -0
  234. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  235. data/lib/rouge/lexers/moonscript.rb +114 -0
  236. data/lib/rouge/lexers/mosel.rb +231 -0
  237. data/lib/rouge/lexers/mxml.rb +68 -0
  238. data/lib/rouge/lexers/nasm.rb +198 -0
  239. data/lib/rouge/lexers/nginx.rb +71 -0
  240. data/lib/rouge/lexers/nim.rb +152 -0
  241. data/lib/rouge/lexers/nix.rb +205 -0
  242. data/lib/rouge/lexers/objective_c.rb +194 -0
  243. data/lib/rouge/lexers/ocaml.rb +100 -0
  244. data/lib/rouge/lexers/pascal.rb +66 -0
  245. data/lib/rouge/lexers/perl.rb +196 -0
  246. data/lib/rouge/lexers/php.rb +193 -0
  247. data/lib/rouge/lexers/php/builtins.rb +194 -0
  248. data/lib/rouge/lexers/plain_text.rb +26 -0
  249. data/lib/rouge/lexers/plist.rb +45 -0
  250. data/lib/rouge/lexers/pony.rb +93 -0
  251. data/lib/rouge/lexers/powershell.rb +678 -0
  252. data/lib/rouge/lexers/praat.rb +350 -0
  253. data/lib/rouge/lexers/prolog.rb +59 -0
  254. data/lib/rouge/lexers/prometheus.rb +121 -0
  255. data/lib/rouge/lexers/properties.rb +51 -0
  256. data/lib/rouge/lexers/protobuf.rb +70 -0
  257. data/lib/rouge/lexers/puppet.rb +128 -0
  258. data/lib/rouge/lexers/python.rb +232 -0
  259. data/lib/rouge/lexers/q.rb +123 -0
  260. data/lib/rouge/lexers/qml.rb +73 -0
  261. data/lib/rouge/lexers/r.rb +89 -0
  262. data/lib/rouge/lexers/racket.rb +543 -0
  263. data/lib/rouge/lexers/ruby.rb +437 -0
  264. data/lib/rouge/lexers/rust.rb +192 -0
  265. data/lib/rouge/lexers/sass.rb +74 -0
  266. data/lib/rouge/lexers/sass/common.rb +180 -0
  267. data/lib/rouge/lexers/scala.rb +142 -0
  268. data/lib/rouge/lexers/scheme.rb +112 -0
  269. data/lib/rouge/lexers/scss.rb +34 -0
  270. data/lib/rouge/lexers/sed.rb +172 -0
  271. data/lib/rouge/lexers/shell.rb +189 -0
  272. data/lib/rouge/lexers/sieve.rb +96 -0
  273. data/lib/rouge/lexers/slim.rb +228 -0
  274. data/lib/rouge/lexers/smalltalk.rb +116 -0
  275. data/lib/rouge/lexers/smarty.rb +80 -0
  276. data/lib/rouge/lexers/sml.rb +344 -0
  277. data/lib/rouge/lexers/sql.rb +140 -0
  278. data/lib/rouge/lexers/swift.rb +181 -0
  279. data/lib/rouge/lexers/tap.rb +87 -0
  280. data/lib/rouge/lexers/tcl.rb +192 -0
  281. data/lib/rouge/lexers/tex.rb +69 -0
  282. data/lib/rouge/lexers/toml.rb +67 -0
  283. data/lib/rouge/lexers/tsx.rb +19 -0
  284. data/lib/rouge/lexers/tulip.rb +106 -0
  285. data/lib/rouge/lexers/turtle.rb +63 -0
  286. data/lib/rouge/lexers/twig.rb +39 -0
  287. data/lib/rouge/lexers/typescript.rb +22 -0
  288. data/lib/rouge/lexers/typescript/common.rb +33 -0
  289. data/lib/rouge/lexers/vala.rb +77 -0
  290. data/lib/rouge/lexers/vb.rb +164 -0
  291. data/lib/rouge/lexers/verilog.rb +164 -0
  292. data/lib/rouge/lexers/vhdl.rb +97 -0
  293. data/lib/rouge/lexers/viml.rb +101 -0
  294. data/lib/rouge/lexers/viml/keywords.rb +12 -0
  295. data/lib/rouge/lexers/vue.rb +122 -0
  296. data/lib/rouge/lexers/wollok.rb +103 -0
  297. data/lib/rouge/lexers/xml.rb +57 -0
  298. data/lib/rouge/lexers/yaml.rb +373 -0
  299. data/lib/rouge/plugins/redcarpet.rb +30 -0
  300. data/lib/rouge/regex_lexer.rb +441 -0
  301. data/lib/rouge/template_lexer.rb +20 -0
  302. data/lib/rouge/text_analyzer.rb +49 -0
  303. data/lib/rouge/theme.rb +213 -0
  304. data/lib/rouge/themes/base16.rb +130 -0
  305. data/lib/rouge/themes/colorful.rb +67 -0
  306. data/lib/rouge/themes/github.rb +71 -0
  307. data/lib/rouge/themes/gruvbox.rb +167 -0
  308. data/lib/rouge/themes/igor_pro.rb +20 -0
  309. data/lib/rouge/themes/molokai.rb +82 -0
  310. data/lib/rouge/themes/monokai.rb +92 -0
  311. data/lib/rouge/themes/monokai_sublime.rb +90 -0
  312. data/lib/rouge/themes/pastie.rb +69 -0
  313. data/lib/rouge/themes/thankful_eyes.rb +74 -0
  314. data/lib/rouge/themes/tulip.rb +69 -0
  315. data/lib/rouge/token.rb +182 -0
  316. data/lib/rouge/util.rb +101 -0
  317. data/lib/rouge/version.rb +7 -0
  318. data/rouge.gemspec +23 -0
  319. metadata +365 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7edfb964a417fdfbb5cf50d7f290da8762f6e971
4
+ data.tar.gz: 20e938abaa0fef4ad9dd6163de7745374a6b835a
5
+ SHA512:
6
+ metadata.gz: 9d4d3c5df7ab546716df8bfe7ec45bbb1e5702a5a23196d9c15d55cc9edb7985d7debafcd955bb43189a1bdf3b9be0a616237b8b6146bac5f32bab3bad318320
7
+ data.tar.gz: 5ba4c4a9efa5e7db46f692350d5610d872284c518c326c03dd6e50682f34d7bac66c548def69703c6f2bbb22e3d791ba105f246f4e7e8c7dbc3bc51e5fc5162f
data/Gemfile ADDED
@@ -0,0 +1,26 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'bundler', '~> 1.15'
6
+ gem 'rake'
7
+
8
+ gem 'minitest', '>= 5.0'
9
+ gem 'minitest-power_assert'
10
+
11
+ gem 'rubocop', '~> 0.49.1'
12
+
13
+ # don't try to install redcarpet under jruby
14
+ gem 'redcarpet', :platforms => :ruby
15
+
16
+ group :development do
17
+ gem 'pry'
18
+
19
+ # docs
20
+ gem 'yard'
21
+ gem 'github-markup'
22
+
23
+ # for visual tests
24
+ gem 'sinatra'
25
+ gem 'shotgun'
26
+ 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 #
data/bin/rougify ADDED
@@ -0,0 +1,17 @@
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
+ Signal.trap('PIPE', 'SYSTEM_DEFAULT') if Signal.list.include? 'PIPE'
8
+
9
+ begin
10
+ Rouge::CLI.parse(ARGV).run
11
+ rescue Rouge::CLI::Error => e
12
+ puts e.message
13
+ exit e.status
14
+ rescue Interrupt
15
+ $stderr.puts "\nrouge: interrupted"
16
+ exit 2
17
+ end
data/lib/rouge.rb ADDED
@@ -0,0 +1,82 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ # stdlib
4
+ require 'pathname'
5
+
6
+ # The containing module for Rouge
7
+ module Rouge
8
+ class << self
9
+ def reload!
10
+ Object.send :remove_const, :Rouge
11
+ load __FILE__
12
+ end
13
+
14
+ # Highlight some text with a given lexer and formatter.
15
+ #
16
+ # @example
17
+ # Rouge.highlight('@foo = 1', 'ruby', 'html')
18
+ # Rouge.highlight('var foo = 1;', 'js', 'terminal256')
19
+ #
20
+ # # streaming - chunks become available as they are lexed
21
+ # Rouge.highlight(large_string, 'ruby', 'html') do |chunk|
22
+ # $stdout.print chunk
23
+ # end
24
+ def highlight(text, lexer, formatter, &b)
25
+ lexer = Lexer.find(lexer) unless lexer.respond_to? :lex
26
+ raise "unknown lexer #{lexer}" unless lexer
27
+
28
+ formatter = Formatter.find(formatter) unless formatter.respond_to? :format
29
+ raise "unknown formatter #{formatter}" unless formatter
30
+
31
+ formatter.format(lexer.lex(text), &b)
32
+ end
33
+ end
34
+ end
35
+
36
+ load_dir = Pathname.new(__FILE__).dirname
37
+ load load_dir.join('rouge/version.rb')
38
+
39
+ load load_dir.join('rouge/util.rb')
40
+
41
+ load load_dir.join('rouge/text_analyzer.rb')
42
+ load load_dir.join('rouge/token.rb')
43
+
44
+ load load_dir.join('rouge/lexer.rb')
45
+ load load_dir.join('rouge/regex_lexer.rb')
46
+ load load_dir.join('rouge/template_lexer.rb')
47
+
48
+ lexers_dir = load_dir.join('rouge/lexers')
49
+ Dir.glob(lexers_dir.join('*.rb')).each do |f|
50
+ Rouge::Lexers.load_lexer(Pathname.new(f).relative_path_from(lexers_dir).to_s)
51
+ end
52
+
53
+ load load_dir.join('rouge/guesser.rb')
54
+ load load_dir.join('rouge/guessers/util.rb')
55
+ load load_dir.join('rouge/guessers/glob_mapping.rb')
56
+ load load_dir.join('rouge/guessers/modeline.rb')
57
+ load load_dir.join('rouge/guessers/filename.rb')
58
+ load load_dir.join('rouge/guessers/mimetype.rb')
59
+ load load_dir.join('rouge/guessers/source.rb')
60
+ load load_dir.join('rouge/guessers/disambiguation.rb')
61
+
62
+ load load_dir.join('rouge/formatter.rb')
63
+ load load_dir.join('rouge/formatters/html.rb')
64
+ load load_dir.join('rouge/formatters/html_table.rb')
65
+ load load_dir.join('rouge/formatters/html_pygments.rb')
66
+ load load_dir.join('rouge/formatters/html_legacy.rb')
67
+ load load_dir.join('rouge/formatters/html_linewise.rb')
68
+ load load_dir.join('rouge/formatters/html_inline.rb')
69
+ load load_dir.join('rouge/formatters/terminal256.rb')
70
+ load load_dir.join('rouge/formatters/null.rb')
71
+
72
+ load load_dir.join('rouge/theme.rb')
73
+ load load_dir.join('rouge/themes/thankful_eyes.rb')
74
+ load load_dir.join('rouge/themes/colorful.rb')
75
+ load load_dir.join('rouge/themes/base16.rb')
76
+ load load_dir.join('rouge/themes/github.rb')
77
+ load load_dir.join('rouge/themes/igor_pro.rb')
78
+ load load_dir.join('rouge/themes/monokai.rb')
79
+ load load_dir.join('rouge/themes/molokai.rb')
80
+ load load_dir.join('rouge/themes/monokai_sublime.rb')
81
+ load load_dir.join('rouge/themes/gruvbox.rb')
82
+ load load_dir.join('rouge/themes/tulip.rb')
data/lib/rouge/cli.rb ADDED
@@ -0,0 +1,429 @@
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
+ IO.new($stdin.fileno, 'rt:bom|utf-8')
17
+ when String
18
+ File.new(input, 'rt:bom|utf-8')
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 %| guess #{Guess.desc}|
48
+ yield %| version #{Version.desc}|
49
+ yield %||
50
+ yield %|See `rougify help <command>` for more info.|
51
+ end
52
+
53
+ class Error < StandardError
54
+ attr_reader :message, :status
55
+ def initialize(message, status=1)
56
+ @message = message
57
+ @status = status
58
+ end
59
+ end
60
+
61
+ def self.parse(argv=ARGV)
62
+ argv = normalize_syntax(argv)
63
+
64
+ mode = argv.shift
65
+
66
+ klass = class_from_arg(mode)
67
+ return klass.parse(argv) if klass
68
+
69
+ case mode
70
+ when '-h', '--help', 'help', '-help', nil
71
+ Help.parse(argv)
72
+ else
73
+ argv.unshift(mode) if mode
74
+ Highlight.parse(argv)
75
+ end
76
+ end
77
+
78
+ def initialize(options={})
79
+ end
80
+
81
+ def self.error!(msg, status=1)
82
+ raise Error.new(msg, status)
83
+ end
84
+
85
+ def error!(*a)
86
+ self.class.error!(*a)
87
+ end
88
+
89
+ def self.class_from_arg(arg)
90
+ case arg
91
+ when 'version', '--version', '-v'
92
+ Version
93
+ when 'help'
94
+ Help
95
+ when 'highlight', 'hi'
96
+ Highlight
97
+ when 'style'
98
+ Style
99
+ when 'list'
100
+ List
101
+ when 'guess'
102
+ Guess
103
+ end
104
+ end
105
+
106
+ class Version < CLI
107
+ def self.desc
108
+ "print the rouge version number"
109
+ end
110
+
111
+ def self.parse(*); new; end
112
+
113
+ def run
114
+ puts Rouge.version
115
+ end
116
+ end
117
+
118
+ class Help < CLI
119
+ def self.desc
120
+ "print help info"
121
+ end
122
+
123
+ def self.doc
124
+ return enum_for(:doc) unless block_given?
125
+
126
+ yield %|usage: rougify help <command>|
127
+ yield %||
128
+ yield %|print help info for <command>.|
129
+ end
130
+
131
+ def self.parse(argv)
132
+ opts = { :mode => CLI }
133
+ until argv.empty?
134
+ arg = argv.shift
135
+ klass = class_from_arg(arg)
136
+ if klass
137
+ opts[:mode] = klass
138
+ next
139
+ end
140
+ end
141
+ new(opts)
142
+ end
143
+
144
+ def initialize(opts={})
145
+ @mode = opts[:mode]
146
+ end
147
+
148
+ def run
149
+ @mode.doc.each(&method(:puts))
150
+ end
151
+ end
152
+
153
+ class Highlight < CLI
154
+ def self.desc
155
+ "highlight code"
156
+ end
157
+
158
+ def self.doc
159
+ return enum_for(:doc) unless block_given?
160
+
161
+ yield %[usage: rougify highlight <filename> [options...]]
162
+ yield %[ rougify highlight [options...]]
163
+ yield %[]
164
+ yield %[--input-file|-i <filename> specify a file to read, or - to use stdin]
165
+ yield %[]
166
+ yield %[--lexer|-l <lexer> specify the lexer to use.]
167
+ yield %[ If not provided, rougify will try to guess]
168
+ yield %[ based on --mimetype, the filename, and the]
169
+ yield %[ file contents.]
170
+ yield %[]
171
+ yield %[--formatter|-f <opts> specify the output formatter to use.]
172
+ yield %[ If not provided, rougify will default to]
173
+ yield %[ terminal256.]
174
+ yield %[]
175
+ yield %[--theme|-t <theme> specify the theme to use for highlighting]
176
+ yield %[ the file. (only applies to some formatters)]
177
+ yield %[]
178
+ yield %[--mimetype|-m <mimetype> specify a mimetype for lexer guessing]
179
+ yield %[]
180
+ yield %[--lexer-opts|-L <opts> specify lexer options in CGI format]
181
+ yield %[ (opt1=val1&opt2=val2)]
182
+ yield %[]
183
+ yield %[--formatter-opts|-F <opts> specify formatter options in CGI format]
184
+ yield %[ (opt1=val1&opt2=val2)]
185
+ yield %[]
186
+ yield %[--require|-r <filename> require a filename or library before]
187
+ yield %[ highlighting]
188
+ end
189
+
190
+ def self.parse(argv)
191
+ opts = {
192
+ :formatter => 'terminal256',
193
+ :theme => 'thankful_eyes',
194
+ :css_class => 'codehilite',
195
+ :input_file => '-',
196
+ :lexer_opts => {},
197
+ :formatter_opts => {},
198
+ :requires => [],
199
+ }
200
+
201
+ until argv.empty?
202
+ arg = argv.shift
203
+ case arg
204
+ when '-r', '--require'
205
+ opts[:requires] << argv.shift
206
+ when '--input-file', '-i'
207
+ opts[:input_file] = argv.shift
208
+ when '--mimetype', '-m'
209
+ opts[:mimetype] = argv.shift
210
+ when '--lexer', '-l'
211
+ opts[:lexer] = argv.shift
212
+ when '--formatter-preset', '-f'
213
+ opts[:formatter] = argv.shift
214
+ when '--theme', '-t'
215
+ opts[:theme] = argv.shift
216
+ when '--css-class', '-c'
217
+ opts[:css_class] = argv.shift
218
+ when '--lexer-opts', '-L'
219
+ opts[:lexer_opts] = parse_cgi(argv.shift)
220
+ when /^--/
221
+ error! "unknown option #{arg.inspect}"
222
+ else
223
+ opts[:input_file] = arg
224
+ end
225
+ end
226
+
227
+ new(opts)
228
+ end
229
+
230
+ def input_stream
231
+ @input_stream ||= FileReader.new(@input_file)
232
+ end
233
+
234
+ def input
235
+ @input ||= input_stream.read
236
+ end
237
+
238
+ def lexer_class
239
+ @lexer_class ||= Lexer.guess(
240
+ :filename => @input_file,
241
+ :mimetype => @mimetype,
242
+ :source => input_stream,
243
+ )
244
+ end
245
+
246
+ def lexer
247
+ @lexer ||= lexer_class.new(@lexer_opts)
248
+ end
249
+
250
+ attr_reader :input_file, :lexer_name, :mimetype, :formatter
251
+
252
+ def initialize(opts={})
253
+ Rouge::Lexer.enable_debug!
254
+
255
+ opts[:requires].each do |r|
256
+ require r
257
+ end
258
+
259
+ @input_file = opts[:input_file]
260
+
261
+ if opts[:lexer]
262
+ @lexer_class = Lexer.find(opts[:lexer]) \
263
+ or error! "unknown lexer #{opts[:lexer].inspect}"
264
+ else
265
+ @lexer_name = opts[:lexer]
266
+ @mimetype = opts[:mimetype]
267
+ end
268
+
269
+ @lexer_opts = opts[:lexer_opts]
270
+
271
+ theme = Theme.find(opts[:theme]).new or error! "unknown theme #{opts[:theme]}"
272
+
273
+ @formatter = case opts[:formatter]
274
+ when 'terminal256' then Formatters::Terminal256.new(theme)
275
+ when 'html' then Formatters::HTML.new
276
+ when 'html-pygments' then Formatters::HTMLPygments.new(Formatters::HTML.new, opts[:css_class])
277
+ when 'html-inline' then Formatters::HTMLInline.new(theme)
278
+ when 'html-table' then Formatters::HTMLTable.new(Formatters::HTML.new)
279
+ when 'null', 'raw', 'tokens' then Formatters::Null.new
280
+ else
281
+ error! "unknown formatter preset #{opts[:formatter]}"
282
+ end
283
+ end
284
+
285
+ def run
286
+ formatter.format(lexer.lex(input), &method(:print))
287
+ end
288
+
289
+ private_class_method
290
+ def self.parse_cgi(str)
291
+ pairs = CGI.parse(str).map { |k, v| [k.to_sym, v.first] }
292
+ Hash[pairs]
293
+ end
294
+ end
295
+
296
+ class Style < CLI
297
+ def self.desc
298
+ "print CSS styles"
299
+ end
300
+
301
+ def self.doc
302
+ return enum_for(:doc) unless block_given?
303
+
304
+ yield %|usage: rougify style [<theme-name>] [<options>]|
305
+ yield %||
306
+ yield %|Print CSS styles for the given theme. Extra options are|
307
+ yield %|passed to the theme. Theme defaults to thankful_eyes.|
308
+ yield %||
309
+ yield %|options:|
310
+ yield %| --scope (default: .highlight) a css selector to scope by|
311
+ yield %||
312
+ yield %|available themes:|
313
+ yield %| #{Theme.registry.keys.sort.join(', ')}|
314
+ end
315
+
316
+ def self.parse(argv)
317
+ opts = { :theme_name => 'thankful_eyes' }
318
+
319
+ until argv.empty?
320
+ arg = argv.shift
321
+ case arg
322
+ when /--(\w+)/
323
+ opts[$1.tr('-', '_').to_sym] = argv.shift
324
+ else
325
+ opts[:theme_name] = arg
326
+ end
327
+ end
328
+
329
+ new(opts)
330
+ end
331
+
332
+ def initialize(opts)
333
+ theme_name = opts.delete(:theme_name)
334
+ theme_class = Theme.find(theme_name) \
335
+ or error! "unknown theme: #{theme_name}"
336
+
337
+ @theme = theme_class.new(opts)
338
+ end
339
+
340
+ def run
341
+ @theme.render(&method(:puts))
342
+ end
343
+ end
344
+
345
+ class List < CLI
346
+ def self.desc
347
+ "list available lexers"
348
+ end
349
+
350
+ def self.doc
351
+ return enum_for(:doc) unless block_given?
352
+
353
+ yield %|usage: rouge list|
354
+ yield %||
355
+ yield %|print a list of all available lexers with their descriptions.|
356
+ end
357
+
358
+ def self.parse(argv)
359
+ new
360
+ end
361
+
362
+ def run
363
+ puts "== Available Lexers =="
364
+
365
+ Lexer.all.sort_by(&:tag).each do |lexer|
366
+ desc = "#{lexer.desc}"
367
+ if lexer.aliases.any?
368
+ desc << " [aliases: #{lexer.aliases.join(',')}]"
369
+ end
370
+ puts "%s: %s" % [lexer.tag, desc]
371
+
372
+ lexer.option_docs.keys.sort.each do |option|
373
+ puts " ?#{option}= #{lexer.option_docs[option]}"
374
+ end
375
+
376
+ puts
377
+ end
378
+ end
379
+ end
380
+
381
+ class Guess < CLI
382
+ def self.desc
383
+ "guess the languages of file"
384
+ end
385
+
386
+ def self.parse(args)
387
+ new(input_file: args.shift)
388
+ end
389
+
390
+ attr_reader :input_file, :input_source
391
+
392
+ def initialize(opts)
393
+ @input_file = opts[:input_file] || '-'
394
+ @input_source = FileReader.new(@input_file).read
395
+ end
396
+
397
+ def lexers
398
+ Lexer.guesses(
399
+ filename: input_file,
400
+ source: input_source,
401
+ )
402
+ end
403
+
404
+ def run
405
+ lexers.each do |l|
406
+ puts "{ tag: #{l.tag.inspect}, title: #{l.title.inspect}, desc: #{l.desc.inspect} }"
407
+ end
408
+ end
409
+ end
410
+
411
+
412
+ private_class_method
413
+ def self.normalize_syntax(argv)
414
+ out = []
415
+ argv.each do |arg|
416
+ case arg
417
+ when /^(--\w+)=(.*)$/
418
+ out << $1 << $2
419
+ when /^(-\w)(.+)$/
420
+ out << $1 << $2
421
+ else
422
+ out << arg
423
+ end
424
+ end
425
+
426
+ out
427
+ end
428
+ end
429
+ end