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,374 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class YAML < RegexLexer
7
+ title "YAML"
8
+ desc "Yaml Ain't Markup Language (yaml.org)"
9
+ mimetypes 'text/x-yaml'
10
+ tag 'yaml'
11
+ aliases 'yml'
12
+ filenames '*.yaml', '*.yml'
13
+
14
+ def self.detect?(text)
15
+ # look for the %YAML directive
16
+ return true if text =~ /\A\s*%YAML/m
17
+ end
18
+
19
+ SPECIAL_VALUES = Regexp.union(%w(true false null))
20
+
21
+ # NB: Tabs are forbidden in YAML, which is why you see things
22
+ # like /[ ]+/.
23
+
24
+ # reset the indentation levels
25
+ def reset_indent
26
+ puts " yaml: reset_indent" if @debug
27
+ @indent_stack = [0]
28
+ @next_indent = 0
29
+ @block_scalar_indent = nil
30
+ end
31
+
32
+ def indent
33
+ raise 'empty indent stack!' if @indent_stack.empty?
34
+ @indent_stack.last
35
+ end
36
+
37
+ def dedent?(level)
38
+ level < self.indent
39
+ end
40
+
41
+ def indent?(level)
42
+ level > self.indent
43
+ end
44
+
45
+ # Save a possible indentation level
46
+ def save_indent(match)
47
+ @next_indent = match.size
48
+ puts " yaml: indent: #{self.indent}/#@next_indent" if @debug
49
+ puts " yaml: popping indent stack - before: #@indent_stack" if @debug
50
+ if dedent?(@next_indent)
51
+ @indent_stack.pop while dedent?(@next_indent)
52
+ puts " yaml: popping indent stack - after: #@indent_stack" if @debug
53
+ puts " yaml: indent: #{self.indent}/#@next_indent" if @debug
54
+
55
+ # dedenting to a state not previously indented to is an error
56
+ [match[0...self.indent], match[self.indent..-1]]
57
+ else
58
+ [match, '']
59
+ end
60
+ end
61
+
62
+ def continue_indent(match)
63
+ puts " yaml: continue_indent" if @debug
64
+ @next_indent += match.size
65
+ end
66
+
67
+ def set_indent(match, opts={})
68
+ if indent < @next_indent
69
+ puts " yaml: indenting #{indent}/#{@next_indent}" if @debug
70
+ @indent_stack << @next_indent
71
+ end
72
+
73
+ @next_indent += match.size unless opts[:implicit]
74
+ end
75
+
76
+ plain_scalar_start = /[^ \t\n\r\f\v?:,\[\]{}#&*!\|>'"%@`]/
77
+
78
+ start { reset_indent }
79
+
80
+ state :basic do
81
+ rule /#.*$/, Comment::Single
82
+ end
83
+
84
+ state :root do
85
+ mixin :basic
86
+
87
+ rule /\n+/, Text
88
+
89
+ # trailing or pre-comment whitespace
90
+ rule /[ ]+(?=#|$)/, Text
91
+
92
+ rule /^%YAML\b/ do
93
+ token Name::Tag
94
+ reset_indent
95
+ push :yaml_directive
96
+ end
97
+
98
+ rule /^%TAG\b/ do
99
+ token Name::Tag
100
+ reset_indent
101
+ push :tag_directive
102
+ end
103
+
104
+ # doc-start and doc-end indicators
105
+ rule /^(?:---|\.\.\.)(?= |$)/ do
106
+ token Name::Namespace
107
+ reset_indent
108
+ push :block_line
109
+ end
110
+
111
+ # indentation spaces
112
+ rule /[ ]*(?!\s|$)/ do |m|
113
+ text, err = save_indent(m[0])
114
+ token Text, text
115
+ token Error, err
116
+ push :block_line; push :indentation
117
+ end
118
+ end
119
+
120
+ state :indentation do
121
+ rule(/\s*?\n/) { token Text; pop! 2 }
122
+ # whitespace preceding block collection indicators
123
+ rule /[ ]+(?=[-:?](?:[ ]|$))/ do |m|
124
+ token Text
125
+ continue_indent(m[0])
126
+ end
127
+
128
+ # block collection indicators
129
+ rule(/[?:-](?=[ ]|$)/) do |m|
130
+ set_indent m[0]
131
+ token Punctuation::Indicator
132
+ end
133
+
134
+ # the beginning of a block line
135
+ rule(/[ ]*/) { |m| token Text; continue_indent(m[0]); pop! }
136
+ end
137
+
138
+ # indented line in the block context
139
+ state :block_line do
140
+ # line end
141
+ rule /[ ]*(?=#|$)/, Text, :pop!
142
+ rule /[ ]+/, Text
143
+ # tags, anchors, and aliases
144
+ mixin :descriptors
145
+ # block collections and scalars
146
+ mixin :block_nodes
147
+ # flow collections and quoed scalars
148
+ mixin :flow_nodes
149
+
150
+ # a plain scalar
151
+ rule /(?=#{plain_scalar_start}|[?:-][^ \t\n\r\f\v])/ do
152
+ token Name::Variable
153
+ push :plain_scalar_in_block_context
154
+ end
155
+ end
156
+
157
+ state :descriptors do
158
+ # a full-form tag
159
+ rule /!<[0-9A-Za-z;\/?:@&=+$,_.!~*'()\[\]%-]+>/, Keyword::Type
160
+
161
+ # a tag in the form '!', '!suffix' or '!handle!suffix'
162
+ rule %r(
163
+ (?:![\w-]+)? # handle
164
+ !(?:[\w;/?:@&=+$,.!~*\'()\[\]%-]*) # suffix
165
+ )x, Keyword::Type
166
+
167
+ # an anchor
168
+ rule /&[\w-]+/, Name::Label
169
+
170
+ # an alias
171
+ rule /\*[\w-]+/, Name::Variable
172
+ end
173
+
174
+ state :block_nodes do
175
+ # implicit key
176
+ rule /((?:\w[\w -]*)?)(:)(?=\s|$)/ do |m|
177
+ groups Name::Attribute, Punctuation::Indicator
178
+ set_indent m[0], :implicit => true
179
+ end
180
+
181
+ # literal and folded scalars
182
+ rule /[\|>]/ do
183
+ token Punctuation::Indicator
184
+ push :block_scalar_content
185
+ push :block_scalar_header
186
+ end
187
+ end
188
+
189
+ state :flow_nodes do
190
+ rule /\[/, Punctuation::Indicator, :flow_sequence
191
+ rule /\{/, Punctuation::Indicator, :flow_mapping
192
+ rule /'/, Str::Single, :single_quoted_scalar
193
+ rule /"/, Str::Double, :double_quoted_scalar
194
+ end
195
+
196
+ state :flow_collection do
197
+ rule /\s+/m, Text
198
+ mixin :basic
199
+ rule /[?:,]/, Punctuation::Indicator
200
+ mixin :descriptors
201
+ mixin :flow_nodes
202
+
203
+ rule /(?=#{plain_scalar_start})/ do
204
+ push :plain_scalar_in_flow_context
205
+ end
206
+ end
207
+
208
+ state :flow_sequence do
209
+ rule /\]/, Punctuation::Indicator, :pop!
210
+ mixin :flow_collection
211
+ end
212
+
213
+ state :flow_mapping do
214
+ rule /\}/, Punctuation::Indicator, :pop!
215
+ mixin :flow_collection
216
+ end
217
+
218
+ state :block_scalar_content do
219
+ rule /\n+/, Text
220
+
221
+ # empty lines never dedent, but they might be part of the scalar.
222
+ rule /^[ ]+$/ do |m|
223
+ text = m[0]
224
+ indent_size = text.size
225
+
226
+ indent_mark = @block_scalar_indent || indent_size
227
+
228
+ token Text, text[0...indent_mark]
229
+ token Name::Constant, text[indent_mark..-1]
230
+ end
231
+
232
+ # TODO: ^ doesn't actually seem to affect the match at all.
233
+ # Find a way to work around this limitation.
234
+ rule /^[ ]*/ do |m|
235
+ token Text
236
+
237
+ indent_size = m[0].size
238
+
239
+ dedent_level = @block_scalar_indent || self.indent
240
+ @block_scalar_indent ||= indent_size
241
+
242
+ if indent_size < dedent_level
243
+ save_indent m[0]
244
+ pop!
245
+ push :indentation
246
+ end
247
+ end
248
+
249
+ rule /[^\n\r\f\v]+/, Name::Constant
250
+ end
251
+
252
+ state :block_scalar_header do
253
+ # optional indentation indicator and chomping flag, in either order
254
+ rule %r(
255
+ (
256
+ ([1-9])[+-]? | [+-]?([1-9])?
257
+ )(?=[ ]|$)
258
+ )x do |m|
259
+ @block_scalar_indent = nil
260
+ goto :ignored_line
261
+ next if m[0].empty?
262
+
263
+ increment = m[1] || m[2]
264
+ if increment
265
+ @block_scalar_indent = indent + increment.to_i
266
+ end
267
+
268
+ token Punctuation::Indicator
269
+ end
270
+ end
271
+
272
+ state :ignored_line do
273
+ mixin :basic
274
+ rule /[ ]+/, Text
275
+ rule /\n/, Text, :pop!
276
+ end
277
+
278
+ state :quoted_scalar_whitespaces do
279
+ # leading and trailing whitespace is ignored
280
+ rule /^[ ]+/, Text
281
+ rule /[ ]+$/, Text
282
+
283
+ rule /\n+/m, Text
284
+
285
+ rule /[ ]+/, Name::Variable
286
+ end
287
+
288
+ state :single_quoted_scalar do
289
+ mixin :quoted_scalar_whitespaces
290
+ rule /\\'/, Str::Escape
291
+ rule /'/, Str, :pop!
292
+ rule /[^\s']+/, Str
293
+ end
294
+
295
+ state :double_quoted_scalar do
296
+ rule /"/, Str, :pop!
297
+ mixin :quoted_scalar_whitespaces
298
+ # escapes
299
+ rule /\\[0abt\tn\nvfre "\\N_LP]/, Str::Escape
300
+ rule /\\(?:x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
301
+ Str::Escape
302
+ rule /[^ \t\n\r\f\v"\\]+/, Str
303
+ end
304
+
305
+ state :plain_scalar_in_block_context_new_line do
306
+ rule /^[ ]+\n/, Text
307
+ rule /\n+/m, Text
308
+ rule /^(?=---|\.\.\.)/ do
309
+ pop! 3
310
+ end
311
+
312
+ # dedent detection
313
+ rule /^[ ]*/ do |m|
314
+ token Text
315
+ pop!
316
+
317
+ indent_size = m[0].size
318
+
319
+ # dedent = end of scalar
320
+ if indent_size <= self.indent
321
+ pop!
322
+ save_indent(m[0])
323
+ push :indentation
324
+ end
325
+ end
326
+ end
327
+
328
+ state :plain_scalar_in_block_context do
329
+ # the : indicator ends a scalar
330
+ rule /[ ]*(?=:[ \n]|:$)/, Text, :pop!
331
+ rule /[ ]*:/, Str
332
+ rule /[ ]+(?=#)/, Text, :pop!
333
+ rule /[ ]+$/, Text
334
+ # check for new documents or dedents at the new line
335
+ rule /\n+/ do
336
+ token Text
337
+ push :plain_scalar_in_block_context_new_line
338
+ end
339
+
340
+ rule /[ ]+/, Str
341
+ rule SPECIAL_VALUES, Name::Constant
342
+ # regular non-whitespace characters
343
+ rule /[^\s:]+/, Str
344
+ end
345
+
346
+ state :plain_scalar_in_flow_context do
347
+ rule /[ ]*(?=[,:?\[\]{}])/, Text, :pop!
348
+ rule /[ ]+(?=#)/, Text, :pop!
349
+ rule /^[ ]+/, Text
350
+ rule /[ ]+$/, Text
351
+ rule /\n+/, Text
352
+ rule /[ ]+/, Name::Variable
353
+ rule /[^\s,:?\[\]{}]+/, Name::Variable
354
+ end
355
+
356
+ state :yaml_directive do
357
+ rule /([ ]+)(\d+\.\d+)/ do
358
+ groups Text, Num
359
+ goto :ignored_line
360
+ end
361
+ end
362
+
363
+ state :tag_directive do
364
+ rule %r(
365
+ ([ ]+)(!|![\w-]*!) # prefix
366
+ ([ ]+)(!|!?[\w;/?:@&=+$,.!~*'()\[\]%-]+) # tag handle
367
+ )x do
368
+ groups Text, Keyword::Type, Text, Keyword::Type
369
+ goto :ignored_line
370
+ end
371
+ end
372
+ end
373
+ end
374
+ end
@@ -0,0 +1,31 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ # this file is not require'd from the root. To use this plugin, run:
5
+ #
6
+ # require 'rouge/plugins/redcarpet'
7
+
8
+ module Rouge
9
+ module Plugins
10
+ module Redcarpet
11
+ def block_code(code, language)
12
+ lexer = Lexer.find_fancy(language, code) || Lexers::PlainText
13
+
14
+ # XXX HACK: Redcarpet strips hard tabs out of code blocks,
15
+ # so we assume you're not using leading spaces that aren't tabs,
16
+ # and just replace them here.
17
+ if lexer.tag == 'make'
18
+ code.gsub! /^ /, "\t"
19
+ end
20
+
21
+ formatter = rouge_formatter(lexer)
22
+ formatter.format(lexer.lex(code))
23
+ end
24
+
25
+ # override this method for custom formatting behavior
26
+ def rouge_formatter(lexer)
27
+ Formatters::HTMLLegacy.new(:css_class => "highlight #{lexer.tag}")
28
+ end
29
+ end
30
+ end
31
+ end