rouge-alda 3.3.0

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 (335) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +28 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +18 -0
  5. data/lib/rouge/cli.rb +432 -0
  6. data/lib/rouge/demos/abap +6 -0
  7. data/lib/rouge/demos/actionscript +4 -0
  8. data/lib/rouge/demos/alda +10 -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/crystal +45 -0
  27. data/lib/rouge/demos/csharp +5 -0
  28. data/lib/rouge/demos/css +4 -0
  29. data/lib/rouge/demos/d +16 -0
  30. data/lib/rouge/demos/dart +6 -0
  31. data/lib/rouge/demos/diff +7 -0
  32. data/lib/rouge/demos/digdag +19 -0
  33. data/lib/rouge/demos/docker +9 -0
  34. data/lib/rouge/demos/dot +5 -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/hcl +7 -0
  54. data/lib/rouge/demos/html +8 -0
  55. data/lib/rouge/demos/http +14 -0
  56. data/lib/rouge/demos/hylang +10 -0
  57. data/lib/rouge/demos/idlang +8 -0
  58. data/lib/rouge/demos/igorpro +9 -0
  59. data/lib/rouge/demos/ini +4 -0
  60. data/lib/rouge/demos/io +11 -0
  61. data/lib/rouge/demos/irb +4 -0
  62. data/lib/rouge/demos/irb_output +2 -0
  63. data/lib/rouge/demos/java +5 -0
  64. data/lib/rouge/demos/javascript +1 -0
  65. data/lib/rouge/demos/jinja +9 -0
  66. data/lib/rouge/demos/json +1 -0
  67. data/lib/rouge/demos/json-doc +1 -0
  68. data/lib/rouge/demos/jsonnet +28 -0
  69. data/lib/rouge/demos/jsp +29 -0
  70. data/lib/rouge/demos/jsx +17 -0
  71. data/lib/rouge/demos/julia +11 -0
  72. data/lib/rouge/demos/kotlin +3 -0
  73. data/lib/rouge/demos/lasso +12 -0
  74. data/lib/rouge/demos/liquid +11 -0
  75. data/lib/rouge/demos/literate_coffeescript +3 -0
  76. data/lib/rouge/demos/literate_haskell +7 -0
  77. data/lib/rouge/demos/llvm +20 -0
  78. data/lib/rouge/demos/lua +12 -0
  79. data/lib/rouge/demos/m68k +16 -0
  80. data/lib/rouge/demos/make +6 -0
  81. data/lib/rouge/demos/markdown +4 -0
  82. data/lib/rouge/demos/mathematica +8 -0
  83. data/lib/rouge/demos/matlab +6 -0
  84. data/lib/rouge/demos/moonscript +16 -0
  85. data/lib/rouge/demos/mosel +10 -0
  86. data/lib/rouge/demos/mxml +22 -0
  87. data/lib/rouge/demos/nasm +26 -0
  88. data/lib/rouge/demos/nginx +5 -0
  89. data/lib/rouge/demos/nim +27 -0
  90. data/lib/rouge/demos/nix +19 -0
  91. data/lib/rouge/demos/objective_c +18 -0
  92. data/lib/rouge/demos/ocaml +12 -0
  93. data/lib/rouge/demos/pascal +14 -0
  94. data/lib/rouge/demos/perl +5 -0
  95. data/lib/rouge/demos/php +3 -0
  96. data/lib/rouge/demos/plaintext +1 -0
  97. data/lib/rouge/demos/plist +142 -0
  98. data/lib/rouge/demos/pony +17 -0
  99. data/lib/rouge/demos/powershell +49 -0
  100. data/lib/rouge/demos/praat +26 -0
  101. data/lib/rouge/demos/prolog +9 -0
  102. data/lib/rouge/demos/prometheus +9 -0
  103. data/lib/rouge/demos/properties +7 -0
  104. data/lib/rouge/demos/protobuf +5 -0
  105. data/lib/rouge/demos/puppet +6 -0
  106. data/lib/rouge/demos/python +6 -0
  107. data/lib/rouge/demos/q +2 -0
  108. data/lib/rouge/demos/qml +9 -0
  109. data/lib/rouge/demos/r +8 -0
  110. data/lib/rouge/demos/racket +24 -0
  111. data/lib/rouge/demos/ruby +9 -0
  112. data/lib/rouge/demos/rust +12 -0
  113. data/lib/rouge/demos/sass +3 -0
  114. data/lib/rouge/demos/scala +3 -0
  115. data/lib/rouge/demos/scheme +4 -0
  116. data/lib/rouge/demos/scss +5 -0
  117. data/lib/rouge/demos/sed +4 -0
  118. data/lib/rouge/demos/shell +2 -0
  119. data/lib/rouge/demos/sieve +10 -0
  120. data/lib/rouge/demos/slim +17 -0
  121. data/lib/rouge/demos/smalltalk +6 -0
  122. data/lib/rouge/demos/smarty +12 -0
  123. data/lib/rouge/demos/sml +4 -0
  124. data/lib/rouge/demos/sqf +14 -0
  125. data/lib/rouge/demos/sql +1 -0
  126. data/lib/rouge/demos/swift +5 -0
  127. data/lib/rouge/demos/tap +5 -0
  128. data/lib/rouge/demos/tcl +1 -0
  129. data/lib/rouge/demos/terraform +31 -0
  130. data/lib/rouge/demos/tex +1 -0
  131. data/lib/rouge/demos/toml +9 -0
  132. data/lib/rouge/demos/tsx +17 -0
  133. data/lib/rouge/demos/tulip +13 -0
  134. data/lib/rouge/demos/turtle +26 -0
  135. data/lib/rouge/demos/twig +9 -0
  136. data/lib/rouge/demos/typescript +1 -0
  137. data/lib/rouge/demos/vala +8 -0
  138. data/lib/rouge/demos/vb +4 -0
  139. data/lib/rouge/demos/verilog +27 -0
  140. data/lib/rouge/demos/vhdl +23 -0
  141. data/lib/rouge/demos/viml +14 -0
  142. data/lib/rouge/demos/vue +11 -0
  143. data/lib/rouge/demos/wollok +11 -0
  144. data/lib/rouge/demos/xml +2 -0
  145. data/lib/rouge/demos/yaml +4 -0
  146. data/lib/rouge/formatter.rb +76 -0
  147. data/lib/rouge/formatters/html.rb +38 -0
  148. data/lib/rouge/formatters/html_inline.rb +31 -0
  149. data/lib/rouge/formatters/html_legacy.rb +45 -0
  150. data/lib/rouge/formatters/html_linewise.rb +28 -0
  151. data/lib/rouge/formatters/html_pygments.rb +18 -0
  152. data/lib/rouge/formatters/html_table.rb +62 -0
  153. data/lib/rouge/formatters/null.rb +20 -0
  154. data/lib/rouge/formatters/terminal256.rb +181 -0
  155. data/lib/rouge/guesser.rb +57 -0
  156. data/lib/rouge/guessers/disambiguation.rb +106 -0
  157. data/lib/rouge/guessers/filename.rb +27 -0
  158. data/lib/rouge/guessers/glob_mapping.rb +45 -0
  159. data/lib/rouge/guessers/mimetype.rb +16 -0
  160. data/lib/rouge/guessers/modeline.rb +46 -0
  161. data/lib/rouge/guessers/source.rb +31 -0
  162. data/lib/rouge/guessers/util.rb +34 -0
  163. data/lib/rouge/lexer.rb +462 -0
  164. data/lib/rouge/lexers/abap.rb +240 -0
  165. data/lib/rouge/lexers/actionscript.rb +196 -0
  166. data/lib/rouge/lexers/alda.rb +43 -0
  167. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  168. data/lib/rouge/lexers/apache.rb +73 -0
  169. data/lib/rouge/lexers/apiblueprint.rb +49 -0
  170. data/lib/rouge/lexers/apple_script.rb +369 -0
  171. data/lib/rouge/lexers/awk.rb +162 -0
  172. data/lib/rouge/lexers/biml.rb +43 -0
  173. data/lib/rouge/lexers/bsl.rb +82 -0
  174. data/lib/rouge/lexers/c.rb +213 -0
  175. data/lib/rouge/lexers/ceylon.rb +124 -0
  176. data/lib/rouge/lexers/cfscript.rb +154 -0
  177. data/lib/rouge/lexers/clojure.rb +113 -0
  178. data/lib/rouge/lexers/cmake.rb +207 -0
  179. data/lib/rouge/lexers/coffeescript.rb +175 -0
  180. data/lib/rouge/lexers/common_lisp.rb +346 -0
  181. data/lib/rouge/lexers/conf.rb +25 -0
  182. data/lib/rouge/lexers/console.rb +137 -0
  183. data/lib/rouge/lexers/coq.rb +188 -0
  184. data/lib/rouge/lexers/cpp.rb +79 -0
  185. data/lib/rouge/lexers/crystal.rb +430 -0
  186. data/lib/rouge/lexers/csharp.rb +115 -0
  187. data/lib/rouge/lexers/css.rb +274 -0
  188. data/lib/rouge/lexers/d.rb +177 -0
  189. data/lib/rouge/lexers/dart.rb +105 -0
  190. data/lib/rouge/lexers/diff.rb +33 -0
  191. data/lib/rouge/lexers/digdag.rb +70 -0
  192. data/lib/rouge/lexers/docker.rb +51 -0
  193. data/lib/rouge/lexers/dot.rb +69 -0
  194. data/lib/rouge/lexers/eiffel.rb +66 -0
  195. data/lib/rouge/lexers/elixir.rb +134 -0
  196. data/lib/rouge/lexers/elm.rb +90 -0
  197. data/lib/rouge/lexers/erb.rb +53 -0
  198. data/lib/rouge/lexers/erlang.rb +115 -0
  199. data/lib/rouge/lexers/factor.rb +303 -0
  200. data/lib/rouge/lexers/fortran.rb +178 -0
  201. data/lib/rouge/lexers/fsharp.rb +119 -0
  202. data/lib/rouge/lexers/gherkin/keywords.rb +16 -0
  203. data/lib/rouge/lexers/gherkin.rb +138 -0
  204. data/lib/rouge/lexers/glsl.rb +136 -0
  205. data/lib/rouge/lexers/go.rb +175 -0
  206. data/lib/rouge/lexers/gradle.rb +38 -0
  207. data/lib/rouge/lexers/graphql.rb +254 -0
  208. data/lib/rouge/lexers/groovy.rb +113 -0
  209. data/lib/rouge/lexers/hack.rb +49 -0
  210. data/lib/rouge/lexers/haml.rb +230 -0
  211. data/lib/rouge/lexers/handlebars.rb +80 -0
  212. data/lib/rouge/lexers/haskell.rb +198 -0
  213. data/lib/rouge/lexers/hcl.rb +163 -0
  214. data/lib/rouge/lexers/html.rb +140 -0
  215. data/lib/rouge/lexers/http.rb +81 -0
  216. data/lib/rouge/lexers/hylang.rb +94 -0
  217. data/lib/rouge/lexers/idlang.rb +312 -0
  218. data/lib/rouge/lexers/igorpro.rb +664 -0
  219. data/lib/rouge/lexers/ini.rb +54 -0
  220. data/lib/rouge/lexers/io.rb +69 -0
  221. data/lib/rouge/lexers/irb.rb +67 -0
  222. data/lib/rouge/lexers/java.rb +88 -0
  223. data/lib/rouge/lexers/javascript.rb +283 -0
  224. data/lib/rouge/lexers/jinja.rb +138 -0
  225. data/lib/rouge/lexers/json.rb +30 -0
  226. data/lib/rouge/lexers/json_doc.rb +24 -0
  227. data/lib/rouge/lexers/jsonnet.rb +152 -0
  228. data/lib/rouge/lexers/jsp.rb +120 -0
  229. data/lib/rouge/lexers/jsx.rb +104 -0
  230. data/lib/rouge/lexers/julia.rb +167 -0
  231. data/lib/rouge/lexers/kotlin.rb +127 -0
  232. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  233. data/lib/rouge/lexers/lasso.rb +215 -0
  234. data/lib/rouge/lexers/liquid.rb +288 -0
  235. data/lib/rouge/lexers/literate_coffeescript.rb +34 -0
  236. data/lib/rouge/lexers/literate_haskell.rb +37 -0
  237. data/lib/rouge/lexers/llvm.rb +81 -0
  238. data/lib/rouge/lexers/lua/builtins.rb +24 -0
  239. data/lib/rouge/lexers/lua.rb +126 -0
  240. data/lib/rouge/lexers/m68k.rb +144 -0
  241. data/lib/rouge/lexers/make.rb +113 -0
  242. data/lib/rouge/lexers/markdown.rb +155 -0
  243. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  244. data/lib/rouge/lexers/mathematica.rb +96 -0
  245. data/lib/rouge/lexers/matlab/builtins.rb +13 -0
  246. data/lib/rouge/lexers/matlab.rb +72 -0
  247. data/lib/rouge/lexers/moonscript.rb +115 -0
  248. data/lib/rouge/lexers/mosel.rb +232 -0
  249. data/lib/rouge/lexers/mxml.rb +69 -0
  250. data/lib/rouge/lexers/nasm.rb +199 -0
  251. data/lib/rouge/lexers/nginx.rb +72 -0
  252. data/lib/rouge/lexers/nim.rb +153 -0
  253. data/lib/rouge/lexers/nix.rb +211 -0
  254. data/lib/rouge/lexers/objective_c.rb +195 -0
  255. data/lib/rouge/lexers/ocaml.rb +101 -0
  256. data/lib/rouge/lexers/pascal.rb +67 -0
  257. data/lib/rouge/lexers/perl.rb +201 -0
  258. data/lib/rouge/lexers/php/builtins.rb +196 -0
  259. data/lib/rouge/lexers/php.rb +194 -0
  260. data/lib/rouge/lexers/plain_text.rb +27 -0
  261. data/lib/rouge/lexers/plist.rb +47 -0
  262. data/lib/rouge/lexers/pony.rb +94 -0
  263. data/lib/rouge/lexers/powershell.rb +679 -0
  264. data/lib/rouge/lexers/praat.rb +351 -0
  265. data/lib/rouge/lexers/prolog.rb +61 -0
  266. data/lib/rouge/lexers/prometheus.rb +123 -0
  267. data/lib/rouge/lexers/properties.rb +52 -0
  268. data/lib/rouge/lexers/protobuf.rb +71 -0
  269. data/lib/rouge/lexers/puppet.rb +129 -0
  270. data/lib/rouge/lexers/python.rb +247 -0
  271. data/lib/rouge/lexers/q.rb +125 -0
  272. data/lib/rouge/lexers/qml.rb +74 -0
  273. data/lib/rouge/lexers/r.rb +90 -0
  274. data/lib/rouge/lexers/racket.rb +545 -0
  275. data/lib/rouge/lexers/ruby.rb +439 -0
  276. data/lib/rouge/lexers/rust.rb +198 -0
  277. data/lib/rouge/lexers/sass/common.rb +181 -0
  278. data/lib/rouge/lexers/sass.rb +75 -0
  279. data/lib/rouge/lexers/scala.rb +143 -0
  280. data/lib/rouge/lexers/scheme.rb +113 -0
  281. data/lib/rouge/lexers/scss.rb +35 -0
  282. data/lib/rouge/lexers/sed.rb +173 -0
  283. data/lib/rouge/lexers/shell.rb +190 -0
  284. data/lib/rouge/lexers/sieve.rb +97 -0
  285. data/lib/rouge/lexers/slim.rb +229 -0
  286. data/lib/rouge/lexers/smalltalk.rb +117 -0
  287. data/lib/rouge/lexers/smarty.rb +81 -0
  288. data/lib/rouge/lexers/sml.rb +345 -0
  289. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  290. data/lib/rouge/lexers/sqf.rb +109 -0
  291. data/lib/rouge/lexers/sql.rb +141 -0
  292. data/lib/rouge/lexers/swift.rb +182 -0
  293. data/lib/rouge/lexers/tap.rb +89 -0
  294. data/lib/rouge/lexers/tcl.rb +193 -0
  295. data/lib/rouge/lexers/terraform.rb +105 -0
  296. data/lib/rouge/lexers/tex.rb +70 -0
  297. data/lib/rouge/lexers/toml.rb +68 -0
  298. data/lib/rouge/lexers/tsx.rb +20 -0
  299. data/lib/rouge/lexers/tulip.rb +108 -0
  300. data/lib/rouge/lexers/turtle.rb +64 -0
  301. data/lib/rouge/lexers/twig.rb +40 -0
  302. data/lib/rouge/lexers/typescript/common.rb +34 -0
  303. data/lib/rouge/lexers/typescript.rb +23 -0
  304. data/lib/rouge/lexers/vala.rb +78 -0
  305. data/lib/rouge/lexers/vb.rb +165 -0
  306. data/lib/rouge/lexers/verilog.rb +165 -0
  307. data/lib/rouge/lexers/vhdl.rb +98 -0
  308. data/lib/rouge/lexers/viml/keywords.rb +14 -0
  309. data/lib/rouge/lexers/viml.rb +102 -0
  310. data/lib/rouge/lexers/vue.rb +124 -0
  311. data/lib/rouge/lexers/wollok.rb +104 -0
  312. data/lib/rouge/lexers/xml.rb +58 -0
  313. data/lib/rouge/lexers/yaml.rb +374 -0
  314. data/lib/rouge/plugins/redcarpet.rb +31 -0
  315. data/lib/rouge/regex_lexer.rb +442 -0
  316. data/lib/rouge/template_lexer.rb +21 -0
  317. data/lib/rouge/text_analyzer.rb +50 -0
  318. data/lib/rouge/theme.rb +214 -0
  319. data/lib/rouge/themes/base16.rb +131 -0
  320. data/lib/rouge/themes/colorful.rb +68 -0
  321. data/lib/rouge/themes/github.rb +72 -0
  322. data/lib/rouge/themes/gruvbox.rb +168 -0
  323. data/lib/rouge/themes/igor_pro.rb +21 -0
  324. data/lib/rouge/themes/molokai.rb +83 -0
  325. data/lib/rouge/themes/monokai.rb +93 -0
  326. data/lib/rouge/themes/monokai_sublime.rb +92 -0
  327. data/lib/rouge/themes/pastie.rb +70 -0
  328. data/lib/rouge/themes/thankful_eyes.rb +75 -0
  329. data/lib/rouge/themes/tulip.rb +70 -0
  330. data/lib/rouge/token.rb +183 -0
  331. data/lib/rouge/util.rb +102 -0
  332. data/lib/rouge/version.rb +8 -0
  333. data/lib/rouge.rb +84 -0
  334. data/rouge.gemspec +25 -0
  335. metadata +384 -0
@@ -0,0 +1,214 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ class Theme
6
+ include Token::Tokens
7
+
8
+ class Style < Hash
9
+ def initialize(theme, hsh={})
10
+ super()
11
+ @theme = theme
12
+ merge!(hsh)
13
+ end
14
+
15
+ [:fg, :bg].each do |mode|
16
+ define_method mode do
17
+ return self[mode] unless @theme
18
+ @theme.palette(self[mode]) if self[mode]
19
+ end
20
+ end
21
+
22
+ def render(selector, &b)
23
+ return enum_for(:render, selector).to_a.join("\n") unless b
24
+
25
+ return if empty?
26
+
27
+ yield "#{selector} {"
28
+ rendered_rules.each do |rule|
29
+ yield " #{rule};"
30
+ end
31
+ yield "}"
32
+ end
33
+
34
+ def rendered_rules(&b)
35
+ return enum_for(:rendered_rules) unless b
36
+ yield "color: #{fg}" if fg
37
+ yield "background-color: #{bg}" if bg
38
+ yield "font-weight: bold" if self[:bold]
39
+ yield "font-style: italic" if self[:italic]
40
+ yield "text-decoration: underline" if self[:underline]
41
+
42
+ (self[:rules] || []).each(&b)
43
+ end
44
+ end
45
+
46
+ def styles
47
+ @styles ||= self.class.styles.dup
48
+ end
49
+
50
+ @palette = {}
51
+ def self.palette(arg={})
52
+ @palette ||= InheritableHash.new(superclass.palette)
53
+
54
+ if arg.is_a? Hash
55
+ @palette.merge! arg
56
+ @palette
57
+ else
58
+ case arg
59
+ when /#[0-9a-f]+/i
60
+ arg
61
+ else
62
+ @palette[arg] or raise "not in palette: #{arg.inspect}"
63
+ end
64
+ end
65
+ end
66
+
67
+ def palette(*a) self.class.palette(*a) end
68
+
69
+ @styles = {}
70
+ def self.styles
71
+ @styles ||= InheritableHash.new(superclass.styles)
72
+ end
73
+
74
+ def self.render(opts={}, &b)
75
+ new(opts).render(&b)
76
+ end
77
+
78
+ def get_own_style(token)
79
+ self.class.get_own_style(token)
80
+ end
81
+
82
+ def get_style(token)
83
+ self.class.get_style(token)
84
+ end
85
+
86
+ class << self
87
+ def style(*tokens)
88
+ style = tokens.last.is_a?(Hash) ? tokens.pop : {}
89
+
90
+ tokens.each do |tok|
91
+ styles[tok] = style
92
+ end
93
+ end
94
+
95
+ def get_own_style(token)
96
+ token.token_chain.reverse_each do |anc|
97
+ return Style.new(self, styles[anc]) if styles[anc]
98
+ end
99
+
100
+ nil
101
+ end
102
+
103
+ def get_style(token)
104
+ get_own_style(token) || base_style
105
+ end
106
+
107
+ def base_style
108
+ get_own_style(Token::Tokens::Text)
109
+ end
110
+
111
+ def name(n=nil)
112
+ return @name if n.nil?
113
+
114
+ @name = n.to_s
115
+ register(@name)
116
+ end
117
+
118
+ def register(name)
119
+ Theme.registry[name.to_s] = self
120
+ end
121
+
122
+ def find(n)
123
+ registry[n.to_s]
124
+ end
125
+
126
+ def registry
127
+ @registry ||= {}
128
+ end
129
+ end
130
+ end
131
+
132
+ module HasModes
133
+ def mode(arg=:absent)
134
+ return @mode if arg == :absent
135
+
136
+ @modes ||= {}
137
+ @modes[arg] ||= get_mode(arg)
138
+ end
139
+
140
+ def get_mode(mode)
141
+ return self if self.mode == mode
142
+
143
+ new_name = "#{self.name}.#{mode}"
144
+ Class.new(self) { name(new_name); set_mode!(mode) }
145
+ end
146
+
147
+ def set_mode!(mode)
148
+ @mode = mode
149
+ send("make_#{mode}!")
150
+ end
151
+
152
+ def mode!(arg)
153
+ alt_name = "#{self.name}.#{arg}"
154
+ register(alt_name)
155
+ set_mode!(arg)
156
+ end
157
+ end
158
+
159
+ class CSSTheme < Theme
160
+ def initialize(opts={})
161
+ @scope = opts[:scope] || '.highlight'
162
+ end
163
+
164
+ def render(&b)
165
+ return enum_for(:render).to_a.join("\n") unless b
166
+
167
+ # shared styles for tableized line numbers
168
+ yield "#{@scope} table td { padding: 5px; }"
169
+ yield "#{@scope} table pre { margin: 0; }"
170
+
171
+ styles.each do |tok, style|
172
+ Style.new(self, style).render(css_selector(tok), &b)
173
+ end
174
+ end
175
+
176
+ def render_base(selector, &b)
177
+ self.class.base_style.render(selector, &b)
178
+ end
179
+
180
+ def style_for(tok)
181
+ self.class.get_style(tok)
182
+ end
183
+
184
+ private
185
+ def css_selector(token)
186
+ inflate_token(token).map do |tok|
187
+ raise "unknown token: #{tok.inspect}" if tok.shortname.nil?
188
+
189
+ single_css_selector(tok)
190
+ end.join(', ')
191
+ end
192
+
193
+ def single_css_selector(token)
194
+ return @scope if token == Text
195
+
196
+ "#{@scope} .#{token.shortname}"
197
+ end
198
+
199
+ # yield all of the tokens that should be styled the same
200
+ # as the given token. Essentially this recursively all of
201
+ # the subtokens, except those which are more specifically
202
+ # styled.
203
+ def inflate_token(tok, &b)
204
+ return enum_for(:inflate_token, tok) unless block_given?
205
+
206
+ yield tok
207
+ tok.sub_tokens.each do |(_, st)|
208
+ next if styles[st]
209
+
210
+ inflate_token(st, &b)
211
+ end
212
+ end
213
+ end
214
+ end
@@ -0,0 +1,131 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Themes
6
+ # default base16 theme
7
+ # by Chris Kempson (http://chriskempson.com)
8
+ class Base16 < CSSTheme
9
+ name 'base16'
10
+
11
+ palette base00: "#151515"
12
+ palette base01: "#202020"
13
+ palette base02: "#303030"
14
+ palette base03: "#505050"
15
+ palette base04: "#b0b0b0"
16
+ palette base05: "#d0d0d0"
17
+ palette base06: "#e0e0e0"
18
+ palette base07: "#f5f5f5"
19
+ palette base08: "#ac4142"
20
+ palette base09: "#d28445"
21
+ palette base0A: "#f4bf75"
22
+ palette base0B: "#90a959"
23
+ palette base0C: "#75b5aa"
24
+ palette base0D: "#6a9fb5"
25
+ palette base0E: "#aa759f"
26
+ palette base0F: "#8f5536"
27
+
28
+ extend HasModes
29
+
30
+ def self.light!
31
+ mode :dark # indicate that there is a dark variant
32
+ mode! :light
33
+ end
34
+
35
+ def self.dark!
36
+ mode :light # indicate that there is a light variant
37
+ mode! :dark
38
+ end
39
+
40
+ def self.make_dark!
41
+ style Text, :fg => :base05, :bg => :base00
42
+ end
43
+
44
+ def self.make_light!
45
+ style Text, :fg => :base02
46
+ end
47
+
48
+ light!
49
+
50
+ style Error, :fg => :base00, :bg => :base08
51
+ style Comment, :fg => :base03
52
+
53
+ style Comment::Preproc,
54
+ Name::Tag, :fg => :base0A
55
+
56
+ style Operator,
57
+ Punctuation, :fg => :base05
58
+
59
+ style Generic::Inserted, :fg => :base0B
60
+ style Generic::Deleted, :fg => :base08
61
+ style Generic::Heading, :fg => :base0D, :bg => :base00, :bold => true
62
+
63
+ style Keyword, :fg => :base0E
64
+ style Keyword::Constant,
65
+ Keyword::Type, :fg => :base09
66
+
67
+ style Keyword::Declaration, :fg => :base09
68
+
69
+ style Literal::String, :fg => :base0B
70
+ style Literal::String::Regex, :fg => :base0C
71
+
72
+ style Literal::String::Interpol,
73
+ Literal::String::Escape, :fg => :base0F
74
+
75
+ style Name::Namespace,
76
+ Name::Class,
77
+ Name::Constant, :fg => :base0A
78
+
79
+ style Name::Attribute, :fg => :base0D
80
+
81
+ style Literal::Number,
82
+ Literal::String::Symbol, :fg => :base0B
83
+
84
+ class Solarized < Base16
85
+ name 'base16.solarized'
86
+ light!
87
+ # author "Ethan Schoonover (http://ethanschoonover.com/solarized)"
88
+
89
+ palette base00: "#002b36"
90
+ palette base01: "#073642"
91
+ palette base02: "#586e75"
92
+ palette base03: "#657b83"
93
+ palette base04: "#839496"
94
+ palette base05: "#93a1a1"
95
+ palette base06: "#eee8d5"
96
+ palette base07: "#fdf6e3"
97
+ palette base08: "#dc322f"
98
+ palette base09: "#cb4b16"
99
+ palette base0A: "#b58900"
100
+ palette base0B: "#859900"
101
+ palette base0C: "#2aa198"
102
+ palette base0D: "#268bd2"
103
+ palette base0E: "#6c71c4"
104
+ palette base0F: "#d33682"
105
+ end
106
+
107
+ class Monokai < Base16
108
+ name 'base16.monokai'
109
+ dark!
110
+
111
+ # author "Wimer Hazenberg (http://www.monokai.nl)"
112
+ palette base00: "#272822"
113
+ palette base01: "#383830"
114
+ palette base02: "#49483e"
115
+ palette base03: "#75715e"
116
+ palette base04: "#a59f85"
117
+ palette base05: "#f8f8f2"
118
+ palette base06: "#f5f4f1"
119
+ palette base07: "#f9f8f5"
120
+ palette base08: "#f92672"
121
+ palette base09: "#fd971f"
122
+ palette base0A: "#f4bf75"
123
+ palette base0B: "#a6e22e"
124
+ palette base0C: "#a1efe4"
125
+ palette base0D: "#66d9ef"
126
+ palette base0E: "#ae81ff"
127
+ palette base0F: "#cc6633"
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,68 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Themes
6
+ # stolen from pygments
7
+ class Colorful < CSSTheme
8
+ name 'colorful'
9
+
10
+ style Text, :fg => "#bbbbbb", :bg => '#000'
11
+
12
+ style Comment, :fg => "#888"
13
+ style Comment::Preproc, :fg => "#579"
14
+ style Comment::Special, :fg => "#cc0000", :bold => true
15
+
16
+ style Keyword, :fg => "#080", :bold => true
17
+ style Keyword::Pseudo, :fg => "#038"
18
+ style Keyword::Type, :fg => "#339"
19
+
20
+ style Operator, :fg => "#333"
21
+ style Operator::Word, :fg => "#000", :bold => true
22
+
23
+ style Name::Builtin, :fg => "#007020"
24
+ style Name::Function, :fg => "#06B", :bold => true
25
+ style Name::Class, :fg => "#B06", :bold => true
26
+ style Name::Namespace, :fg => "#0e84b5", :bold => true
27
+ style Name::Exception, :fg => "#F00", :bold => true
28
+ style Name::Variable, :fg => "#963"
29
+ style Name::Variable::Instance, :fg => "#33B"
30
+ style Name::Variable::Class, :fg => "#369"
31
+ style Name::Variable::Global, :fg => "#d70", :bold => true
32
+ style Name::Constant, :fg => "#036", :bold => true
33
+ style Name::Label, :fg => "#970", :bold => true
34
+ style Name::Entity, :fg => "#800", :bold => true
35
+ style Name::Attribute, :fg => "#00C"
36
+ style Name::Tag, :fg => "#070"
37
+ style Name::Decorator, :fg => "#555", :bold => true
38
+
39
+ style Literal::String, :bg => "#fff0f0"
40
+ style Literal::String::Char, :fg => "#04D"
41
+ style Literal::String::Doc, :fg => "#D42"
42
+ style Literal::String::Interpol, :bg => "#eee"
43
+ style Literal::String::Escape, :fg => "#666", :bold => true
44
+ style Literal::String::Regex, :fg => "#000", :bg => "#fff0ff"
45
+ style Literal::String::Symbol, :fg => "#A60"
46
+ style Literal::String::Other, :fg => "#D20"
47
+
48
+ style Literal::Number, :fg => "#60E", :bold => true
49
+ style Literal::Number::Integer, :fg => "#00D", :bold => true
50
+ style Literal::Number::Float, :fg => "#60E", :bold => true
51
+ style Literal::Number::Hex, :fg => "#058", :bold => true
52
+ style Literal::Number::Oct, :fg => "#40E", :bold => true
53
+
54
+ style Generic::Heading, :fg => "#000080", :bold => true
55
+ style Generic::Subheading, :fg => "#800080", :bold => true
56
+ style Generic::Deleted, :fg => "#A00000"
57
+ style Generic::Inserted, :fg => "#00A000"
58
+ style Generic::Error, :fg => "#FF0000"
59
+ style Generic::Emph, :italic => true
60
+ style Generic::Strong, :bold => true
61
+ style Generic::Prompt, :fg => "#c65d09", :bold => true
62
+ style Generic::Output, :fg => "#888"
63
+ style Generic::Traceback, :fg => "#04D"
64
+
65
+ style Error, :fg => "#F00", :bg => "#FAA"
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,72 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Themes
6
+ class Github < CSSTheme
7
+ name 'github'
8
+
9
+ style Comment::Multiline, :fg => '#999988', :italic => true
10
+ style Comment::Preproc, :fg => '#999999', :bold => true
11
+ style Comment::Single, :fg => '#999988', :italic => true
12
+ style Comment::Special, :fg => '#999999', :italic => true, :bold => true
13
+ style Comment, :fg => '#999988', :italic => true
14
+ style Error, :fg => '#a61717', :bg => '#e3d2d2'
15
+ style Generic::Deleted, :fg => '#000000', :bg => '#ffdddd'
16
+ style Generic::Emph, :fg => '#000000', :italic => true
17
+ style Generic::Error, :fg => '#aa0000'
18
+ style Generic::Heading, :fg => '#999999'
19
+ style Generic::Inserted, :fg => '#000000', :bg => '#ddffdd'
20
+ style Generic::Output, :fg => '#888888'
21
+ style Generic::Prompt, :fg => '#555555'
22
+ style Generic::Strong, :bold => true
23
+ style Generic::Subheading, :fg => '#aaaaaa'
24
+ style Generic::Traceback, :fg => '#aa0000'
25
+ style Keyword::Constant, :fg => '#000000', :bold => true
26
+ style Keyword::Declaration, :fg => '#000000', :bold => true
27
+ style Keyword::Namespace, :fg => '#000000', :bold => true
28
+ style Keyword::Pseudo, :fg => '#000000', :bold => true
29
+ style Keyword::Reserved, :fg => '#000000', :bold => true
30
+ style Keyword::Type, :fg => '#445588', :bold => true
31
+ style Keyword, :fg => '#000000', :bold => true
32
+ style Literal::Number::Float, :fg => '#009999'
33
+ style Literal::Number::Hex, :fg => '#009999'
34
+ style Literal::Number::Integer::Long, :fg => '#009999'
35
+ style Literal::Number::Integer, :fg => '#009999'
36
+ style Literal::Number::Oct, :fg => '#009999'
37
+ style Literal::Number, :fg => '#009999'
38
+ style Literal::String::Backtick, :fg => '#d14'
39
+ style Literal::String::Char, :fg => '#d14'
40
+ style Literal::String::Doc, :fg => '#d14'
41
+ style Literal::String::Double, :fg => '#d14'
42
+ style Literal::String::Escape, :fg => '#d14'
43
+ style Literal::String::Heredoc, :fg => '#d14'
44
+ style Literal::String::Interpol, :fg => '#d14'
45
+ style Literal::String::Other, :fg => '#d14'
46
+ style Literal::String::Regex, :fg => '#009926'
47
+ style Literal::String::Single, :fg => '#d14'
48
+ style Literal::String::Symbol, :fg => '#990073'
49
+ style Literal::String, :fg => '#d14'
50
+ style Name::Attribute, :fg => '#008080'
51
+ style Name::Builtin::Pseudo, :fg => '#999999'
52
+ style Name::Builtin, :fg => '#0086B3'
53
+ style Name::Class, :fg => '#445588', :bold => true
54
+ style Name::Constant, :fg => '#008080'
55
+ style Name::Decorator, :fg => '#3c5d5d', :bold => true
56
+ style Name::Entity, :fg => '#800080'
57
+ style Name::Exception, :fg => '#990000', :bold => true
58
+ style Name::Function, :fg => '#990000', :bold => true
59
+ style Name::Label, :fg => '#990000', :bold => true
60
+ style Name::Namespace, :fg => '#555555'
61
+ style Name::Tag, :fg => '#000080'
62
+ style Name::Variable::Class, :fg => '#008080'
63
+ style Name::Variable::Global, :fg => '#008080'
64
+ style Name::Variable::Instance, :fg => '#008080'
65
+ style Name::Variable, :fg => '#008080'
66
+ style Operator::Word, :fg => '#000000', :bold => true
67
+ style Operator, :fg => '#000000', :bold => true
68
+ style Text::Whitespace, :fg => '#bbbbbb'
69
+ style Text, :bg => '#f8f8f8'
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,168 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ # TODO how are we going to handle soft/hard contrast?
5
+
6
+ module Rouge
7
+ module Themes
8
+ # Based on https://github.com/morhetz/gruvbox, with help from
9
+ # https://github.com/daveyarwood/gruvbox-pygments
10
+ class Gruvbox < CSSTheme
11
+ name 'gruvbox'
12
+
13
+ # global Gruvbox colours {{{
14
+ C_dark0_hard = '#1d2021'
15
+ C_dark0 ='#282828'
16
+ C_dark0_soft = '#32302f'
17
+ C_dark1 = '#3c3836'
18
+ C_dark2 = '#504945'
19
+ C_dark3 = '#665c54'
20
+ C_dark4 = '#7c6f64'
21
+ C_dark4_256 = '#7c6f64'
22
+
23
+ C_gray_245 = '#928374'
24
+ C_gray_244 = '#928374'
25
+
26
+ C_light0_hard = '#f9f5d7'
27
+ C_light0 = '#fbf1c7'
28
+ C_light0_soft = '#f2e5bc'
29
+ C_light1 = '#ebdbb2'
30
+ C_light2 = '#d5c4a1'
31
+ C_light3 = '#bdae93'
32
+ C_light4 = '#a89984'
33
+ C_light4_256 = '#a89984'
34
+
35
+ C_bright_red = '#fb4934'
36
+ C_bright_green = '#b8bb26'
37
+ C_bright_yellow = '#fabd2f'
38
+ C_bright_blue = '#83a598'
39
+ C_bright_purple = '#d3869b'
40
+ C_bright_aqua = '#8ec07c'
41
+ C_bright_orange = '#fe8019'
42
+
43
+ C_neutral_red = '#cc241d'
44
+ C_neutral_green = '#98971a'
45
+ C_neutral_yellow = '#d79921'
46
+ C_neutral_blue = '#458588'
47
+ C_neutral_purple = '#b16286'
48
+ C_neutral_aqua = '#689d6a'
49
+ C_neutral_orange = '#d65d0e'
50
+
51
+ C_faded_red = '#9d0006'
52
+ C_faded_green = '#79740e'
53
+ C_faded_yellow = '#b57614'
54
+ C_faded_blue = '#076678'
55
+ C_faded_purple = '#8f3f71'
56
+ C_faded_aqua = '#427b58'
57
+ C_faded_orange = '#af3a03'
58
+ # }}}
59
+
60
+ extend HasModes
61
+
62
+ def self.light!
63
+ mode :dark # indicate that there is a dark variant
64
+ mode! :light
65
+ end
66
+
67
+ def self.dark!
68
+ mode :light # indicate that there is a light variant
69
+ mode! :dark
70
+ end
71
+
72
+ def self.make_dark!
73
+ palette bg0: C_dark0
74
+ palette bg1: C_dark1
75
+ palette bg2: C_dark2
76
+ palette bg3: C_dark3
77
+ palette bg4: C_dark4
78
+
79
+ palette gray: C_gray_245
80
+
81
+ palette fg0: C_light0
82
+ palette fg1: C_light1
83
+ palette fg2: C_light2
84
+ palette fg3: C_light3
85
+ palette fg4: C_light4
86
+
87
+ palette fg4_256: C_light4_256
88
+
89
+ palette red: C_bright_red
90
+ palette green: C_bright_green
91
+ palette yellow: C_bright_yellow
92
+ palette blue: C_bright_blue
93
+ palette purple: C_bright_purple
94
+ palette aqua: C_bright_aqua
95
+ palette orange: C_bright_orange
96
+
97
+ end
98
+
99
+ def self.make_light!
100
+ palette bg0: C_light0
101
+ palette bg1: C_light1
102
+ palette bg2: C_light2
103
+ palette bg3: C_light3
104
+ palette bg4: C_light4
105
+
106
+ palette gray: C_gray_244
107
+
108
+ palette fg0: C_dark0
109
+ palette fg1: C_dark1
110
+ palette fg2: C_dark2
111
+ palette fg3: C_dark3
112
+ palette fg4: C_dark4
113
+
114
+ palette fg4_256: C_dark4_256
115
+
116
+ palette red: C_faded_red
117
+ palette green: C_faded_green
118
+ palette yellow: C_faded_yellow
119
+ palette blue: C_faded_blue
120
+ palette purple: C_faded_purple
121
+ palette aqua: C_faded_aqua
122
+ palette orange: C_faded_orange
123
+ end
124
+
125
+ dark!
126
+ mode :light
127
+
128
+ style Text, :fg => :fg0, :bg => :bg0
129
+ style Error, :fg => :red, :bg => :bg0, :bold => true
130
+ style Comment, :fg => :gray, :italic => true
131
+
132
+ style Comment::Preproc, :fg => :aqua
133
+
134
+ style Name::Tag, :fg => :red
135
+
136
+ style Operator,
137
+ Punctuation, :fg => :fg0
138
+
139
+ style Generic::Inserted, :fg => :green, :bg => :bg0
140
+ style Generic::Deleted, :fg => :red, :bg => :bg0
141
+ style Generic::Heading, :fg => :green, :bold => true
142
+
143
+ style Keyword, :fg => :red
144
+ style Keyword::Constant, :fg => :purple
145
+ style Keyword::Type, :fg => :yellow
146
+
147
+ style Keyword::Declaration, :fg => :orange
148
+
149
+ style Literal::String,
150
+ Literal::String::Interpol,
151
+ Literal::String::Regex, :fg => :green, :italic => true
152
+
153
+ style Literal::String::Escape, :fg => :orange
154
+
155
+ style Name::Namespace,
156
+ Name::Class, :fg => :aqua
157
+
158
+ style Name::Constant, :fg => :purple
159
+
160
+ style Name::Attribute, :fg => :green
161
+
162
+ style Literal::Number, :fg => :purple
163
+
164
+ style Literal::String::Symbol, :fg => :blue
165
+
166
+ end
167
+ end
168
+ end
@@ -0,0 +1,21 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Themes
6
+ class IgorPro < CSSTheme
7
+ name 'igorpro'
8
+
9
+ style Text, :fg => '#444444'
10
+ style Comment::Preproc, :fg => '#CC00A3'
11
+ style Comment::Special, :fg => '#CC00A3'
12
+ style Comment, :fg => '#FF0000'
13
+ style Keyword::Constant, :fg => '#C34E00'
14
+ style Keyword::Declaration, :fg => '#0000FF'
15
+ style Keyword::Reserved, :fg => '#007575'
16
+ style Keyword, :fg => '#0000FF'
17
+ style Literal::String, :fg => '#009C00'
18
+ style Name::Builtin, :fg => '#C34E00'
19
+ end
20
+ end
21
+ end