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
@@ -0,0 +1,20 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ # @abstract
5
+ # A TemplateLexer is one that accepts a :parent option, to specify
6
+ # which language is being templated. The lexer class can specify its
7
+ # own default for the parent lexer, which is otherwise defaulted to
8
+ # HTML.
9
+ class TemplateLexer < RegexLexer
10
+ # the parent lexer - the one being templated.
11
+ def parent
12
+ return @parent if instance_variable_defined? :@parent
13
+ @parent = lexer_option(:parent) || Lexers::HTML.new(@options)
14
+ end
15
+
16
+ option :parent, "the parent language (default: html)"
17
+
18
+ start { parent.reset! }
19
+ end
20
+ end
@@ -0,0 +1,49 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ class TextAnalyzer < String
5
+ # Find a shebang. Returns nil if no shebang is present.
6
+ def shebang
7
+ return @shebang if instance_variable_defined? :@shebang
8
+
9
+ self =~ /\A\s*#!(.*)$/
10
+ @shebang = $1
11
+ end
12
+
13
+ # Check if the given shebang is present.
14
+ #
15
+ # This normalizes things so that `text.shebang?('bash')` will detect
16
+ # `#!/bash`, '#!/bin/bash', '#!/usr/bin/env bash', and '#!/bin/bash -x'
17
+ def shebang?(match)
18
+ return false unless shebang
19
+ match = /\b#{match}(\s|$)/
20
+ match === shebang
21
+ end
22
+
23
+ # Return the contents of the doctype tag if present, nil otherwise.
24
+ def doctype
25
+ return @doctype if instance_variable_defined? :@doctype
26
+
27
+ self =~ %r(\A\s*
28
+ (?:<\?.*?\?>\s*)? # possible <?xml...?> tag
29
+ <!DOCTYPE\s+(.+?)>
30
+ )xm
31
+ @doctype = $1
32
+ end
33
+
34
+ # Check if the doctype matches a given regexp or string
35
+ def doctype?(type=//)
36
+ type === doctype
37
+ end
38
+
39
+ # Return true if the result of lexing with the given lexer contains no
40
+ # error tokens.
41
+ def lexes_cleanly?(lexer)
42
+ lexer.lex(self) do |(tok, _)|
43
+ return false if tok.name == 'Error'
44
+ end
45
+
46
+ true
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,213 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ class Theme
5
+ include Token::Tokens
6
+
7
+ class Style < Hash
8
+ def initialize(theme, hsh={})
9
+ super()
10
+ @theme = theme
11
+ merge!(hsh)
12
+ end
13
+
14
+ [:fg, :bg].each do |mode|
15
+ define_method mode do
16
+ return self[mode] unless @theme
17
+ @theme.palette(self[mode]) if self[mode]
18
+ end
19
+ end
20
+
21
+ def render(selector, &b)
22
+ return enum_for(:render, selector).to_a.join("\n") unless b
23
+
24
+ return if empty?
25
+
26
+ yield "#{selector} {"
27
+ rendered_rules.each do |rule|
28
+ yield " #{rule};"
29
+ end
30
+ yield "}"
31
+ end
32
+
33
+ def rendered_rules(&b)
34
+ return enum_for(:rendered_rules) unless b
35
+ yield "color: #{fg}" if fg
36
+ yield "background-color: #{bg}" if bg
37
+ yield "font-weight: bold" if self[:bold]
38
+ yield "font-style: italic" if self[:italic]
39
+ yield "text-decoration: underline" if self[:underline]
40
+
41
+ (self[:rules] || []).each(&b)
42
+ end
43
+ end
44
+
45
+ def styles
46
+ @styles ||= self.class.styles.dup
47
+ end
48
+
49
+ @palette = {}
50
+ def self.palette(arg={})
51
+ @palette ||= InheritableHash.new(superclass.palette)
52
+
53
+ if arg.is_a? Hash
54
+ @palette.merge! arg
55
+ @palette
56
+ else
57
+ case arg
58
+ when /#[0-9a-f]+/i
59
+ arg
60
+ else
61
+ @palette[arg] or raise "not in palette: #{arg.inspect}"
62
+ end
63
+ end
64
+ end
65
+
66
+ def palette(*a) self.class.palette(*a) end
67
+
68
+ @styles = {}
69
+ def self.styles
70
+ @styles ||= InheritableHash.new(superclass.styles)
71
+ end
72
+
73
+ def self.render(opts={}, &b)
74
+ new(opts).render(&b)
75
+ end
76
+
77
+ def get_own_style(token)
78
+ self.class.get_own_style(token)
79
+ end
80
+
81
+ def get_style(token)
82
+ self.class.get_style(token)
83
+ end
84
+
85
+ class << self
86
+ def style(*tokens)
87
+ style = tokens.last.is_a?(Hash) ? tokens.pop : {}
88
+
89
+ tokens.each do |tok|
90
+ styles[tok] = style
91
+ end
92
+ end
93
+
94
+ def get_own_style(token)
95
+ token.token_chain.reverse_each do |anc|
96
+ return Style.new(self, styles[anc]) if styles[anc]
97
+ end
98
+
99
+ nil
100
+ end
101
+
102
+ def get_style(token)
103
+ get_own_style(token) || base_style
104
+ end
105
+
106
+ def base_style
107
+ get_own_style(Token::Tokens::Text)
108
+ end
109
+
110
+ def name(n=nil)
111
+ return @name if n.nil?
112
+
113
+ @name = n.to_s
114
+ register(@name)
115
+ end
116
+
117
+ def register(name)
118
+ Theme.registry[name.to_s] = self
119
+ end
120
+
121
+ def find(n)
122
+ registry[n.to_s]
123
+ end
124
+
125
+ def registry
126
+ @registry ||= {}
127
+ end
128
+ end
129
+ end
130
+
131
+ module HasModes
132
+ def mode(arg=:absent)
133
+ return @mode if arg == :absent
134
+
135
+ @modes ||= {}
136
+ @modes[arg] ||= get_mode(arg)
137
+ end
138
+
139
+ def get_mode(mode)
140
+ return self if self.mode == mode
141
+
142
+ new_name = "#{self.name}.#{mode}"
143
+ Class.new(self) { name(new_name); set_mode!(mode) }
144
+ end
145
+
146
+ def set_mode!(mode)
147
+ @mode = mode
148
+ send("make_#{mode}!")
149
+ end
150
+
151
+ def mode!(arg)
152
+ alt_name = "#{self.name}.#{arg}"
153
+ register(alt_name)
154
+ set_mode!(arg)
155
+ end
156
+ end
157
+
158
+ class CSSTheme < Theme
159
+ def initialize(opts={})
160
+ @scope = opts[:scope] || '.highlight'
161
+ end
162
+
163
+ def render(&b)
164
+ return enum_for(:render).to_a.join("\n") unless b
165
+
166
+ # shared styles for tableized line numbers
167
+ yield "#{@scope} table td { padding: 5px; }"
168
+ yield "#{@scope} table pre { margin: 0; }"
169
+
170
+ styles.each do |tok, style|
171
+ Style.new(self, style).render(css_selector(tok), &b)
172
+ end
173
+ end
174
+
175
+ def render_base(selector, &b)
176
+ self.class.base_style.render(selector, &b)
177
+ end
178
+
179
+ def style_for(tok)
180
+ self.class.get_style(tok)
181
+ end
182
+
183
+ private
184
+ def css_selector(token)
185
+ inflate_token(token).map do |tok|
186
+ raise "unknown token: #{tok.inspect}" if tok.shortname.nil?
187
+
188
+ single_css_selector(tok)
189
+ end.join(', ')
190
+ end
191
+
192
+ def single_css_selector(token)
193
+ return @scope if token == Text
194
+
195
+ "#{@scope} .#{token.shortname}"
196
+ end
197
+
198
+ # yield all of the tokens that should be styled the same
199
+ # as the given token. Essentially this recursively all of
200
+ # the subtokens, except those which are more specifically
201
+ # styled.
202
+ def inflate_token(tok, &b)
203
+ return enum_for(:inflate_token, tok) unless block_given?
204
+
205
+ yield tok
206
+ tok.sub_tokens.each do |(_, st)|
207
+ next if styles[st]
208
+
209
+ inflate_token(st, &b)
210
+ end
211
+ end
212
+ end
213
+ end
@@ -0,0 +1,130 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Themes
5
+ # default base16 theme
6
+ # by Chris Kempson (http://chriskempson.com)
7
+ class Base16 < CSSTheme
8
+ name 'base16'
9
+
10
+ palette base00: "#151515"
11
+ palette base01: "#202020"
12
+ palette base02: "#303030"
13
+ palette base03: "#505050"
14
+ palette base04: "#b0b0b0"
15
+ palette base05: "#d0d0d0"
16
+ palette base06: "#e0e0e0"
17
+ palette base07: "#f5f5f5"
18
+ palette base08: "#ac4142"
19
+ palette base09: "#d28445"
20
+ palette base0A: "#f4bf75"
21
+ palette base0B: "#90a959"
22
+ palette base0C: "#75b5aa"
23
+ palette base0D: "#6a9fb5"
24
+ palette base0E: "#aa759f"
25
+ palette base0F: "#8f5536"
26
+
27
+ extend HasModes
28
+
29
+ def self.light!
30
+ mode :dark # indicate that there is a dark variant
31
+ mode! :light
32
+ end
33
+
34
+ def self.dark!
35
+ mode :light # indicate that there is a light variant
36
+ mode! :dark
37
+ end
38
+
39
+ def self.make_dark!
40
+ style Text, :fg => :base05, :bg => :base00
41
+ end
42
+
43
+ def self.make_light!
44
+ style Text, :fg => :base02
45
+ end
46
+
47
+ light!
48
+
49
+ style Error, :fg => :base00, :bg => :base08
50
+ style Comment, :fg => :base03
51
+
52
+ style Comment::Preproc,
53
+ Name::Tag, :fg => :base0A
54
+
55
+ style Operator,
56
+ Punctuation, :fg => :base05
57
+
58
+ style Generic::Inserted, :fg => :base0B
59
+ style Generic::Deleted, :fg => :base08
60
+ style Generic::Heading, :fg => :base0D, :bg => :base00, :bold => true
61
+
62
+ style Keyword, :fg => :base0E
63
+ style Keyword::Constant,
64
+ Keyword::Type, :fg => :base09
65
+
66
+ style Keyword::Declaration, :fg => :base09
67
+
68
+ style Literal::String, :fg => :base0B
69
+ style Literal::String::Regex, :fg => :base0C
70
+
71
+ style Literal::String::Interpol,
72
+ Literal::String::Escape, :fg => :base0F
73
+
74
+ style Name::Namespace,
75
+ Name::Class,
76
+ Name::Constant, :fg => :base0A
77
+
78
+ style Name::Attribute, :fg => :base0D
79
+
80
+ style Literal::Number,
81
+ Literal::String::Symbol, :fg => :base0B
82
+
83
+ class Solarized < Base16
84
+ name 'base16.solarized'
85
+ light!
86
+ # author "Ethan Schoonover (http://ethanschoonover.com/solarized)"
87
+
88
+ palette base00: "#002b36"
89
+ palette base01: "#073642"
90
+ palette base02: "#586e75"
91
+ palette base03: "#657b83"
92
+ palette base04: "#839496"
93
+ palette base05: "#93a1a1"
94
+ palette base06: "#eee8d5"
95
+ palette base07: "#fdf6e3"
96
+ palette base08: "#dc322f"
97
+ palette base09: "#cb4b16"
98
+ palette base0A: "#b58900"
99
+ palette base0B: "#859900"
100
+ palette base0C: "#2aa198"
101
+ palette base0D: "#268bd2"
102
+ palette base0E: "#6c71c4"
103
+ palette base0F: "#d33682"
104
+ end
105
+
106
+ class Monokai < Base16
107
+ name 'base16.monokai'
108
+ dark!
109
+
110
+ # author "Wimer Hazenberg (http://www.monokai.nl)"
111
+ palette base00: "#272822"
112
+ palette base01: "#383830"
113
+ palette base02: "#49483e"
114
+ palette base03: "#75715e"
115
+ palette base04: "#a59f85"
116
+ palette base05: "#f8f8f2"
117
+ palette base06: "#f5f4f1"
118
+ palette base07: "#f9f8f5"
119
+ palette base08: "#f92672"
120
+ palette base09: "#fd971f"
121
+ palette base0A: "#f4bf75"
122
+ palette base0B: "#a6e22e"
123
+ palette base0C: "#a1efe4"
124
+ palette base0D: "#66d9ef"
125
+ palette base0E: "#ae81ff"
126
+ palette base0F: "#cc6633"
127
+ end
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,67 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Themes
5
+ # stolen from pygments
6
+ class Colorful < CSSTheme
7
+ name 'colorful'
8
+
9
+ style Text, :fg => "#bbbbbb", :bg => '#000'
10
+
11
+ style Comment, :fg => "#888"
12
+ style Comment::Preproc, :fg => "#579"
13
+ style Comment::Special, :fg => "#cc0000", :bold => true
14
+
15
+ style Keyword, :fg => "#080", :bold => true
16
+ style Keyword::Pseudo, :fg => "#038"
17
+ style Keyword::Type, :fg => "#339"
18
+
19
+ style Operator, :fg => "#333"
20
+ style Operator::Word, :fg => "#000", :bold => true
21
+
22
+ style Name::Builtin, :fg => "#007020"
23
+ style Name::Function, :fg => "#06B", :bold => true
24
+ style Name::Class, :fg => "#B06", :bold => true
25
+ style Name::Namespace, :fg => "#0e84b5", :bold => true
26
+ style Name::Exception, :fg => "#F00", :bold => true
27
+ style Name::Variable, :fg => "#963"
28
+ style Name::Variable::Instance, :fg => "#33B"
29
+ style Name::Variable::Class, :fg => "#369"
30
+ style Name::Variable::Global, :fg => "#d70", :bold => true
31
+ style Name::Constant, :fg => "#036", :bold => true
32
+ style Name::Label, :fg => "#970", :bold => true
33
+ style Name::Entity, :fg => "#800", :bold => true
34
+ style Name::Attribute, :fg => "#00C"
35
+ style Name::Tag, :fg => "#070"
36
+ style Name::Decorator, :fg => "#555", :bold => true
37
+
38
+ style Literal::String, :bg => "#fff0f0"
39
+ style Literal::String::Char, :fg => "#04D"
40
+ style Literal::String::Doc, :fg => "#D42"
41
+ style Literal::String::Interpol, :bg => "#eee"
42
+ style Literal::String::Escape, :fg => "#666", :bold => true
43
+ style Literal::String::Regex, :fg => "#000", :bg => "#fff0ff"
44
+ style Literal::String::Symbol, :fg => "#A60"
45
+ style Literal::String::Other, :fg => "#D20"
46
+
47
+ style Literal::Number, :fg => "#60E", :bold => true
48
+ style Literal::Number::Integer, :fg => "#00D", :bold => true
49
+ style Literal::Number::Float, :fg => "#60E", :bold => true
50
+ style Literal::Number::Hex, :fg => "#058", :bold => true
51
+ style Literal::Number::Oct, :fg => "#40E", :bold => true
52
+
53
+ style Generic::Heading, :fg => "#000080", :bold => true
54
+ style Generic::Subheading, :fg => "#800080", :bold => true
55
+ style Generic::Deleted, :fg => "#A00000"
56
+ style Generic::Inserted, :fg => "#00A000"
57
+ style Generic::Error, :fg => "#FF0000"
58
+ style Generic::Emph, :italic => true
59
+ style Generic::Strong, :bold => true
60
+ style Generic::Prompt, :fg => "#c65d09", :bold => true
61
+ style Generic::Output, :fg => "#888"
62
+ style Generic::Traceback, :fg => "#04D"
63
+
64
+ style Error, :fg => "#F00", :bg => "#FAA"
65
+ end
66
+ end
67
+ end