rouge 3.2.0 → 3.18.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 (316) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +17 -3
  3. data/bin/rougify +1 -0
  4. data/lib/rouge.rb +67 -43
  5. data/lib/rouge/cli.rb +84 -17
  6. data/lib/rouge/demos/ada +26 -0
  7. data/lib/rouge/demos/apex +9 -0
  8. data/lib/rouge/demos/armasm +12 -0
  9. data/lib/rouge/demos/batchfile +3 -0
  10. data/lib/rouge/demos/bbcbasic +6 -0
  11. data/lib/rouge/demos/bpf +7 -0
  12. data/lib/rouge/demos/brainfuck +5 -0
  13. data/lib/rouge/demos/clean +6 -0
  14. data/lib/rouge/demos/cmhg +8 -0
  15. data/lib/rouge/demos/csvs +8 -0
  16. data/lib/rouge/demos/cuda +11 -0
  17. data/lib/rouge/demos/cypher +5 -0
  18. data/lib/rouge/demos/cython +6 -0
  19. data/lib/rouge/demos/datastudio +21 -0
  20. data/lib/rouge/demos/ecl +18 -0
  21. data/lib/rouge/demos/eex +1 -0
  22. data/lib/rouge/demos/epp +4 -0
  23. data/lib/rouge/demos/escape +3 -0
  24. data/lib/rouge/demos/freefem +16 -0
  25. data/lib/rouge/demos/gdscript +18 -0
  26. data/lib/rouge/demos/ghc-cmm +23 -0
  27. data/lib/rouge/demos/ghc-core +26 -0
  28. data/lib/rouge/demos/haxe +5 -0
  29. data/lib/rouge/demos/hocon +8 -0
  30. data/lib/rouge/demos/hql +5 -0
  31. data/lib/rouge/demos/isbl +4 -0
  32. data/lib/rouge/demos/jsl +3 -0
  33. data/lib/rouge/demos/jsp +29 -0
  34. data/lib/rouge/demos/liquid +0 -1
  35. data/lib/rouge/demos/lustre +6 -0
  36. data/lib/rouge/demos/lutin +18 -0
  37. data/lib/rouge/demos/m68k +16 -0
  38. data/lib/rouge/demos/magik +6 -0
  39. data/lib/rouge/demos/mason +22 -0
  40. data/lib/rouge/demos/mathematica +8 -0
  41. data/lib/rouge/demos/minizinc +23 -0
  42. data/lib/rouge/demos/msgtrans +4 -0
  43. data/lib/rouge/demos/nasm +6 -6
  44. data/lib/rouge/demos/nesasm +11 -0
  45. data/lib/rouge/demos/objective_cpp +17 -0
  46. data/lib/rouge/demos/openedge +4 -0
  47. data/lib/rouge/demos/opentype_feature_file +6 -0
  48. data/lib/rouge/demos/plist +1 -132
  49. data/lib/rouge/demos/powershell +12 -48
  50. data/lib/rouge/demos/q +6 -0
  51. data/lib/rouge/demos/reasonml +12 -0
  52. data/lib/rouge/demos/rego +8 -0
  53. data/lib/rouge/demos/robot_framework +27 -0
  54. data/lib/rouge/demos/sas +13 -0
  55. data/lib/rouge/demos/slice +10 -0
  56. data/lib/rouge/demos/solidity +13 -0
  57. data/lib/rouge/demos/sparql +6 -0
  58. data/lib/rouge/demos/sqf +14 -0
  59. data/lib/rouge/demos/supercollider +11 -0
  60. data/lib/rouge/demos/terraform +0 -15
  61. data/lib/rouge/demos/ttcn3 +6 -0
  62. data/lib/rouge/demos/vcl +12 -0
  63. data/lib/rouge/demos/xojo +14 -0
  64. data/lib/rouge/demos/xpath +2 -0
  65. data/lib/rouge/demos/xquery +22 -0
  66. data/lib/rouge/demos/yang +17 -0
  67. data/lib/rouge/formatter.rb +39 -2
  68. data/lib/rouge/formatters/html.rb +21 -2
  69. data/lib/rouge/formatters/html_inline.rb +1 -0
  70. data/lib/rouge/formatters/html_legacy.rb +1 -0
  71. data/lib/rouge/formatters/html_line_table.rb +53 -0
  72. data/lib/rouge/formatters/html_linewise.rb +7 -11
  73. data/lib/rouge/formatters/html_pygments.rb +2 -0
  74. data/lib/rouge/formatters/html_table.rb +21 -31
  75. data/lib/rouge/formatters/null.rb +1 -0
  76. data/lib/rouge/formatters/terminal256.rb +23 -5
  77. data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
  78. data/lib/rouge/formatters/tex.rb +92 -0
  79. data/lib/rouge/guesser.rb +2 -0
  80. data/lib/rouge/guessers/disambiguation.rb +35 -0
  81. data/lib/rouge/guessers/filename.rb +2 -0
  82. data/lib/rouge/guessers/glob_mapping.rb +3 -1
  83. data/lib/rouge/guessers/mimetype.rb +2 -0
  84. data/lib/rouge/guessers/modeline.rb +3 -1
  85. data/lib/rouge/guessers/source.rb +3 -1
  86. data/lib/rouge/guessers/util.rb +2 -0
  87. data/lib/rouge/lexer.rb +71 -15
  88. data/lib/rouge/lexers/abap.rb +13 -11
  89. data/lib/rouge/lexers/actionscript.rb +35 -34
  90. data/lib/rouge/lexers/ada.rb +162 -0
  91. data/lib/rouge/lexers/apache.rb +13 -15
  92. data/lib/rouge/lexers/apache/keywords.rb +15 -0
  93. data/lib/rouge/lexers/apex.rb +126 -0
  94. data/lib/rouge/lexers/apiblueprint.rb +2 -0
  95. data/lib/rouge/lexers/apple_script.rb +17 -14
  96. data/lib/rouge/lexers/armasm.rb +145 -0
  97. data/lib/rouge/lexers/awk.rb +26 -25
  98. data/lib/rouge/lexers/batchfile.rb +164 -0
  99. data/lib/rouge/lexers/bbcbasic.rb +112 -0
  100. data/lib/rouge/lexers/biml.rb +6 -4
  101. data/lib/rouge/lexers/bpf.rb +118 -0
  102. data/lib/rouge/lexers/brainfuck.rb +53 -0
  103. data/lib/rouge/lexers/bsl.rb +13 -12
  104. data/lib/rouge/lexers/c.rb +35 -57
  105. data/lib/rouge/lexers/ceylon.rb +7 -34
  106. data/lib/rouge/lexers/cfscript.rb +27 -26
  107. data/lib/rouge/lexers/clean.rb +156 -0
  108. data/lib/rouge/lexers/clojure.rb +15 -14
  109. data/lib/rouge/lexers/cmake.rb +16 -14
  110. data/lib/rouge/lexers/cmhg.rb +34 -0
  111. data/lib/rouge/lexers/coffeescript.rb +90 -49
  112. data/lib/rouge/lexers/common_lisp.rb +39 -38
  113. data/lib/rouge/lexers/conf.rb +7 -6
  114. data/lib/rouge/lexers/console.rb +92 -38
  115. data/lib/rouge/lexers/coq.rb +27 -23
  116. data/lib/rouge/lexers/cpp.rb +24 -13
  117. data/lib/rouge/lexers/crystal.rb +71 -70
  118. data/lib/rouge/lexers/csharp.rb +29 -29
  119. data/lib/rouge/lexers/css.rb +24 -23
  120. data/lib/rouge/lexers/csvs.rb +44 -0
  121. data/lib/rouge/lexers/cuda.rb +35 -0
  122. data/lib/rouge/lexers/cypher.rb +108 -0
  123. data/lib/rouge/lexers/cython.rb +151 -0
  124. data/lib/rouge/lexers/d.rb +64 -63
  125. data/lib/rouge/lexers/dart.rb +34 -33
  126. data/lib/rouge/lexers/datastudio.rb +138 -0
  127. data/lib/rouge/lexers/diff.rb +10 -4
  128. data/lib/rouge/lexers/digdag.rb +3 -1
  129. data/lib/rouge/lexers/docker.rb +12 -11
  130. data/lib/rouge/lexers/dot.rb +19 -18
  131. data/lib/rouge/lexers/ecl.rb +175 -0
  132. data/lib/rouge/lexers/eex.rb +52 -0
  133. data/lib/rouge/lexers/eiffel.rb +21 -20
  134. data/lib/rouge/lexers/elixir.rb +52 -36
  135. data/lib/rouge/lexers/elm.rb +30 -29
  136. data/lib/rouge/lexers/epp.rb +51 -0
  137. data/lib/rouge/lexers/erb.rb +5 -4
  138. data/lib/rouge/lexers/erlang.rb +1 -0
  139. data/lib/rouge/lexers/escape.rb +58 -0
  140. data/lib/rouge/lexers/factor.rb +41 -40
  141. data/lib/rouge/lexers/fortran.rb +34 -32
  142. data/lib/rouge/lexers/freefem.rb +240 -0
  143. data/lib/rouge/lexers/fsharp.rb +33 -31
  144. data/lib/rouge/lexers/gdscript.rb +171 -0
  145. data/lib/rouge/lexers/ghc_cmm.rb +340 -0
  146. data/lib/rouge/lexers/ghc_core.rb +151 -0
  147. data/lib/rouge/lexers/gherkin.rb +17 -14
  148. data/lib/rouge/lexers/gherkin/keywords.rb +2 -0
  149. data/lib/rouge/lexers/glsl.rb +2 -5
  150. data/lib/rouge/lexers/go.rb +3 -2
  151. data/lib/rouge/lexers/gradle.rb +1 -0
  152. data/lib/rouge/lexers/graphql.rb +78 -60
  153. data/lib/rouge/lexers/groovy.rb +24 -25
  154. data/lib/rouge/lexers/hack.rb +2 -1
  155. data/lib/rouge/lexers/haml.rb +26 -29
  156. data/lib/rouge/lexers/handlebars.rb +32 -20
  157. data/lib/rouge/lexers/haskell.rb +67 -65
  158. data/lib/rouge/lexers/haxe.rb +246 -0
  159. data/lib/rouge/lexers/hcl.rb +26 -25
  160. data/lib/rouge/lexers/hocon.rb +86 -0
  161. data/lib/rouge/lexers/hql.rb +139 -0
  162. data/lib/rouge/lexers/html.rb +33 -31
  163. data/lib/rouge/lexers/http.rb +10 -9
  164. data/lib/rouge/lexers/hylang.rb +15 -14
  165. data/lib/rouge/lexers/idlang.rb +34 -32
  166. data/lib/rouge/lexers/igorpro.rb +32 -31
  167. data/lib/rouge/lexers/ini.rb +13 -12
  168. data/lib/rouge/lexers/io.rb +10 -9
  169. data/lib/rouge/lexers/irb.rb +6 -5
  170. data/lib/rouge/lexers/isbl.rb +97 -0
  171. data/lib/rouge/lexers/isbl/builtins.rb +17 -0
  172. data/lib/rouge/lexers/java.rb +29 -25
  173. data/lib/rouge/lexers/javascript.rb +58 -61
  174. data/lib/rouge/lexers/jinja.rb +39 -22
  175. data/lib/rouge/lexers/jsl.rb +55 -0
  176. data/lib/rouge/lexers/json.rb +54 -11
  177. data/lib/rouge/lexers/json_doc.rb +8 -5
  178. data/lib/rouge/lexers/jsonnet.rb +19 -18
  179. data/lib/rouge/lexers/jsp.rb +120 -0
  180. data/lib/rouge/lexers/jsx.rb +18 -16
  181. data/lib/rouge/lexers/julia.rb +182 -58
  182. data/lib/rouge/lexers/kotlin.rb +78 -26
  183. data/lib/rouge/lexers/lasso.rb +54 -58
  184. data/lib/rouge/lexers/lasso/keywords.rb +14 -0
  185. data/lib/rouge/lexers/liquid.rb +116 -118
  186. data/lib/rouge/lexers/literate_coffeescript.rb +3 -2
  187. data/lib/rouge/lexers/literate_haskell.rb +6 -5
  188. data/lib/rouge/lexers/llvm.rb +66 -49
  189. data/lib/rouge/lexers/lua.rb +43 -4
  190. data/lib/rouge/lexers/lua/builtins.rb +2 -0
  191. data/lib/rouge/lexers/lustre.rb +79 -0
  192. data/lib/rouge/lexers/lutin.rb +33 -0
  193. data/lib/rouge/lexers/m68k.rb +143 -0
  194. data/lib/rouge/lexers/magik.rb +127 -0
  195. data/lib/rouge/lexers/make.rb +57 -34
  196. data/lib/rouge/lexers/markdown.rb +67 -39
  197. data/lib/rouge/lexers/mason.rb +110 -0
  198. data/lib/rouge/lexers/mathematica.rb +96 -0
  199. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  200. data/lib/rouge/lexers/matlab.rb +26 -17
  201. data/lib/rouge/lexers/matlab/builtins.rb +4 -4
  202. data/lib/rouge/lexers/minizinc.rb +87 -0
  203. data/lib/rouge/lexers/moonscript.rb +4 -3
  204. data/lib/rouge/lexers/mosel.rb +64 -63
  205. data/lib/rouge/lexers/msgtrans.rb +26 -0
  206. data/lib/rouge/lexers/mxml.rb +19 -18
  207. data/lib/rouge/lexers/nasm.rb +43 -169
  208. data/lib/rouge/lexers/nesasm.rb +78 -0
  209. data/lib/rouge/lexers/nginx.rb +15 -14
  210. data/lib/rouge/lexers/nim.rb +4 -2
  211. data/lib/rouge/lexers/nix.rb +44 -43
  212. data/lib/rouge/lexers/objective_c.rb +5 -178
  213. data/lib/rouge/lexers/objective_c/common.rb +184 -0
  214. data/lib/rouge/lexers/objective_cpp.rb +31 -0
  215. data/lib/rouge/lexers/ocaml.rb +29 -64
  216. data/lib/rouge/lexers/ocaml/common.rb +53 -0
  217. data/lib/rouge/lexers/openedge.rb +429 -0
  218. data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
  219. data/lib/rouge/lexers/pascal.rb +6 -5
  220. data/lib/rouge/lexers/perl.rb +102 -67
  221. data/lib/rouge/lexers/php.rb +91 -53
  222. data/lib/rouge/lexers/php/builtins.rb +183 -174
  223. data/lib/rouge/lexers/plain_text.rb +2 -1
  224. data/lib/rouge/lexers/plist.rb +16 -14
  225. data/lib/rouge/lexers/pony.rb +21 -20
  226. data/lib/rouge/lexers/powershell.rb +190 -638
  227. data/lib/rouge/lexers/praat.rb +76 -75
  228. data/lib/rouge/lexers/prolog.rb +27 -19
  229. data/lib/rouge/lexers/prometheus.rb +32 -30
  230. data/lib/rouge/lexers/properties.rb +13 -12
  231. data/lib/rouge/lexers/protobuf.rb +23 -22
  232. data/lib/rouge/lexers/puppet.rb +33 -32
  233. data/lib/rouge/lexers/python.rb +124 -99
  234. data/lib/rouge/lexers/q.rb +17 -14
  235. data/lib/rouge/lexers/qml.rb +13 -12
  236. data/lib/rouge/lexers/r.rb +13 -13
  237. data/lib/rouge/lexers/racket.rb +47 -22
  238. data/lib/rouge/lexers/reasonml.rb +65 -0
  239. data/lib/rouge/lexers/rego.rb +45 -0
  240. data/lib/rouge/lexers/robot_framework.rb +249 -0
  241. data/lib/rouge/lexers/ruby.rb +88 -71
  242. data/lib/rouge/lexers/rust.rb +45 -44
  243. data/lib/rouge/lexers/sas.rb +563 -0
  244. data/lib/rouge/lexers/sass.rb +9 -8
  245. data/lib/rouge/lexers/sass/common.rb +41 -40
  246. data/lib/rouge/lexers/scala.rb +67 -40
  247. data/lib/rouge/lexers/scheme.rb +19 -18
  248. data/lib/rouge/lexers/scss.rb +4 -3
  249. data/lib/rouge/lexers/sed.rb +31 -30
  250. data/lib/rouge/lexers/shell.rb +67 -55
  251. data/lib/rouge/lexers/sieve.rb +10 -9
  252. data/lib/rouge/lexers/slice.rb +32 -0
  253. data/lib/rouge/lexers/slim.rb +27 -26
  254. data/lib/rouge/lexers/smalltalk.rb +34 -33
  255. data/lib/rouge/lexers/smarty.rb +20 -19
  256. data/lib/rouge/lexers/sml.rb +68 -67
  257. data/lib/rouge/lexers/solidity.rb +185 -0
  258. data/lib/rouge/lexers/sparql.rb +129 -0
  259. data/lib/rouge/lexers/sqf.rb +109 -0
  260. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  261. data/lib/rouge/lexers/sql.rb +47 -26
  262. data/lib/rouge/lexers/supercollider.rb +116 -0
  263. data/lib/rouge/lexers/swift.rb +49 -44
  264. data/lib/rouge/lexers/tap.rb +22 -20
  265. data/lib/rouge/lexers/tcl.rb +28 -27
  266. data/lib/rouge/lexers/terraform.rb +37 -13
  267. data/lib/rouge/lexers/tex.rb +20 -19
  268. data/lib/rouge/lexers/toml.rb +59 -20
  269. data/lib/rouge/lexers/tsx.rb +1 -0
  270. data/lib/rouge/lexers/ttcn3.rb +119 -0
  271. data/lib/rouge/lexers/tulip.rb +38 -36
  272. data/lib/rouge/lexers/turtle.rb +36 -38
  273. data/lib/rouge/lexers/twig.rb +1 -0
  274. data/lib/rouge/lexers/typescript.rb +12 -0
  275. data/lib/rouge/lexers/typescript/common.rb +1 -0
  276. data/lib/rouge/lexers/vala.rb +19 -18
  277. data/lib/rouge/lexers/varnish.rb +168 -0
  278. data/lib/rouge/lexers/vb.rb +28 -27
  279. data/lib/rouge/lexers/verilog.rb +27 -28
  280. data/lib/rouge/lexers/vhdl.rb +12 -11
  281. data/lib/rouge/lexers/viml.rb +15 -14
  282. data/lib/rouge/lexers/viml/keywords.rb +2 -0
  283. data/lib/rouge/lexers/vue.rb +15 -10
  284. data/lib/rouge/lexers/wollok.rb +27 -26
  285. data/lib/rouge/lexers/xml.rb +18 -21
  286. data/lib/rouge/lexers/xojo.rb +61 -0
  287. data/lib/rouge/lexers/xpath.rb +332 -0
  288. data/lib/rouge/lexers/xquery.rb +145 -0
  289. data/lib/rouge/lexers/yaml.rb +64 -61
  290. data/lib/rouge/lexers/yang.rb +147 -0
  291. data/lib/rouge/plugins/redcarpet.rb +9 -2
  292. data/lib/rouge/regex_lexer.rb +27 -25
  293. data/lib/rouge/template_lexer.rb +1 -0
  294. data/lib/rouge/tex_theme_renderer.rb +132 -0
  295. data/lib/rouge/text_analyzer.rb +1 -0
  296. data/lib/rouge/theme.rb +5 -0
  297. data/lib/rouge/themes/base16.rb +1 -0
  298. data/lib/rouge/themes/bw.rb +41 -0
  299. data/lib/rouge/themes/colorful.rb +1 -0
  300. data/lib/rouge/themes/github.rb +1 -0
  301. data/lib/rouge/themes/gruvbox.rb +1 -0
  302. data/lib/rouge/themes/igor_pro.rb +1 -0
  303. data/lib/rouge/themes/magritte.rb +78 -0
  304. data/lib/rouge/themes/molokai.rb +1 -0
  305. data/lib/rouge/themes/monokai.rb +1 -0
  306. data/lib/rouge/themes/monokai_sublime.rb +4 -1
  307. data/lib/rouge/themes/pastie.rb +2 -1
  308. data/lib/rouge/themes/thankful_eyes.rb +2 -1
  309. data/lib/rouge/themes/tulip.rb +2 -1
  310. data/lib/rouge/token.rb +31 -22
  311. data/lib/rouge/util.rb +3 -2
  312. data/lib/rouge/version.rb +2 -1
  313. data/rouge.gemspec +6 -3
  314. metadata +130 -8
  315. data/lib/rouge/lexers/apache/keywords.yml +0 -764
  316. data/lib/rouge/lexers/lasso/keywords.yml +0 -446
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Rouge
4
5
  module Lexers
@@ -77,38 +78,38 @@ module Rouge
77
78
  start { reset_indent }
78
79
 
79
80
  state :basic do
80
- rule /#.*$/, Comment::Single
81
+ rule %r/#.*$/, Comment::Single
81
82
  end
82
83
 
83
84
  state :root do
84
85
  mixin :basic
85
86
 
86
- rule /\n+/, Text
87
+ rule %r/\n+/, Text
87
88
 
88
89
  # trailing or pre-comment whitespace
89
- rule /[ ]+(?=#|$)/, Text
90
+ rule %r/[ ]+(?=#|$)/, Text
90
91
 
91
- rule /^%YAML\b/ do
92
+ rule %r/^%YAML\b/ do
92
93
  token Name::Tag
93
94
  reset_indent
94
95
  push :yaml_directive
95
96
  end
96
97
 
97
- rule /^%TAG\b/ do
98
+ rule %r/^%TAG\b/ do
98
99
  token Name::Tag
99
100
  reset_indent
100
101
  push :tag_directive
101
102
  end
102
103
 
103
104
  # doc-start and doc-end indicators
104
- rule /^(?:---|\.\.\.)(?= |$)/ do
105
+ rule %r/^(?:---|\.\.\.)(?= |$)/ do
105
106
  token Name::Namespace
106
107
  reset_indent
107
108
  push :block_line
108
109
  end
109
110
 
110
111
  # indentation spaces
111
- rule /[ ]*(?!\s|$)/ do |m|
112
+ rule %r/[ ]*(?!\s|$)/ do |m|
112
113
  text, err = save_indent(m[0])
113
114
  token Text, text
114
115
  token Error, err
@@ -119,7 +120,7 @@ module Rouge
119
120
  state :indentation do
120
121
  rule(/\s*?\n/) { token Text; pop! 2 }
121
122
  # whitespace preceding block collection indicators
122
- rule /[ ]+(?=[-:?](?:[ ]|$))/ do |m|
123
+ rule %r/[ ]+(?=[-:?](?:[ ]|$))/ do |m|
123
124
  token Text
124
125
  continue_indent(m[0])
125
126
  end
@@ -137,8 +138,8 @@ module Rouge
137
138
  # indented line in the block context
138
139
  state :block_line do
139
140
  # line end
140
- rule /[ ]*(?=#|$)/, Text, :pop!
141
- rule /[ ]+/, Text
141
+ rule %r/[ ]*(?=#|$)/, Text, :pop!
142
+ rule %r/[ ]+/, Text
142
143
  # tags, anchors, and aliases
143
144
  mixin :descriptors
144
145
  # block collections and scalars
@@ -147,7 +148,7 @@ module Rouge
147
148
  mixin :flow_nodes
148
149
 
149
150
  # a plain scalar
150
- rule /(?=#{plain_scalar_start}|[?:-][^ \t\n\r\f\v])/ do
151
+ rule %r/(?=#{plain_scalar_start}|[?:-][^ \t\n\r\f\v])/ do
151
152
  token Name::Variable
152
153
  push :plain_scalar_in_block_context
153
154
  end
@@ -155,7 +156,7 @@ module Rouge
155
156
 
156
157
  state :descriptors do
157
158
  # a full-form tag
158
- rule /!<[0-9A-Za-z;\/?:@&=+$,_.!~*'()\[\]%-]+>/, Keyword::Type
159
+ rule %r/!<[0-9A-Za-z;\/?:@&=+$,_.!~*'()\[\]%-]+>/, Keyword::Type
159
160
 
160
161
  # a tag in the form '!', '!suffix' or '!handle!suffix'
161
162
  rule %r(
@@ -164,21 +165,21 @@ module Rouge
164
165
  )x, Keyword::Type
165
166
 
166
167
  # an anchor
167
- rule /&[\w-]+/, Name::Label
168
+ rule %r/&[\w-]+/, Name::Label
168
169
 
169
170
  # an alias
170
- rule /\*[\w-]+/, Name::Variable
171
+ rule %r/\*[\w-]+/, Name::Variable
171
172
  end
172
173
 
173
174
  state :block_nodes do
174
175
  # implicit key
175
- rule /((?:\w[\w -]*)?)(:)(?=\s|$)/ do |m|
176
+ rule %r/((?:\w[\w -]*)?)(:)(?=\s|$)/ do |m|
176
177
  groups Name::Attribute, Punctuation::Indicator
177
178
  set_indent m[0], :implicit => true
178
179
  end
179
180
 
180
181
  # literal and folded scalars
181
- rule /[\|>]/ do
182
+ rule %r/[\|>][+-]?/ do
182
183
  token Punctuation::Indicator
183
184
  push :block_scalar_content
184
185
  push :block_scalar_header
@@ -186,39 +187,39 @@ module Rouge
186
187
  end
187
188
 
188
189
  state :flow_nodes do
189
- rule /\[/, Punctuation::Indicator, :flow_sequence
190
- rule /\{/, Punctuation::Indicator, :flow_mapping
191
- rule /'/, Str::Single, :single_quoted_scalar
192
- rule /"/, Str::Double, :double_quoted_scalar
190
+ rule %r/\[/, Punctuation::Indicator, :flow_sequence
191
+ rule %r/\{/, Punctuation::Indicator, :flow_mapping
192
+ rule %r/'/, Str::Single, :single_quoted_scalar
193
+ rule %r/"/, Str::Double, :double_quoted_scalar
193
194
  end
194
195
 
195
196
  state :flow_collection do
196
- rule /\s+/m, Text
197
+ rule %r/\s+/m, Text
197
198
  mixin :basic
198
- rule /[?:,]/, Punctuation::Indicator
199
+ rule %r/[?:,]/, Punctuation::Indicator
199
200
  mixin :descriptors
200
201
  mixin :flow_nodes
201
202
 
202
- rule /(?=#{plain_scalar_start})/ do
203
+ rule %r/(?=#{plain_scalar_start})/ do
203
204
  push :plain_scalar_in_flow_context
204
205
  end
205
206
  end
206
207
 
207
208
  state :flow_sequence do
208
- rule /\]/, Punctuation::Indicator, :pop!
209
+ rule %r/\]/, Punctuation::Indicator, :pop!
209
210
  mixin :flow_collection
210
211
  end
211
212
 
212
213
  state :flow_mapping do
213
- rule /\}/, Punctuation::Indicator, :pop!
214
+ rule %r/\}/, Punctuation::Indicator, :pop!
214
215
  mixin :flow_collection
215
216
  end
216
217
 
217
218
  state :block_scalar_content do
218
- rule /\n+/, Text
219
+ rule %r/\n+/, Text
219
220
 
220
221
  # empty lines never dedent, but they might be part of the scalar.
221
- rule /^[ ]+$/ do |m|
222
+ rule %r/^[ ]+$/ do |m|
222
223
  text = m[0]
223
224
  indent_size = text.size
224
225
 
@@ -230,7 +231,7 @@ module Rouge
230
231
 
231
232
  # TODO: ^ doesn't actually seem to affect the match at all.
232
233
  # Find a way to work around this limitation.
233
- rule /^[ ]*/ do |m|
234
+ rule %r/^[ ]*/ do |m|
234
235
  token Text
235
236
 
236
237
  indent_size = m[0].size
@@ -245,7 +246,7 @@ module Rouge
245
246
  end
246
247
  end
247
248
 
248
- rule /[^\n\r\f\v]+/, Name::Constant
249
+ rule %r/[^\n\r\f\v]+/, Str
249
250
  end
250
251
 
251
252
  state :block_scalar_header do
@@ -270,46 +271,46 @@ module Rouge
270
271
 
271
272
  state :ignored_line do
272
273
  mixin :basic
273
- rule /[ ]+/, Text
274
- rule /\n/, Text, :pop!
274
+ rule %r/[ ]+/, Text
275
+ rule %r/\n/, Text, :pop!
275
276
  end
276
277
 
277
278
  state :quoted_scalar_whitespaces do
278
279
  # leading and trailing whitespace is ignored
279
- rule /^[ ]+/, Text
280
- rule /[ ]+$/, Text
280
+ rule %r/^[ ]+/, Text
281
+ rule %r/[ ]+$/, Text
281
282
 
282
- rule /\n+/m, Text
283
+ rule %r/\n+/m, Text
283
284
 
284
- rule /[ ]+/, Name::Variable
285
+ rule %r/[ ]+/, Name::Variable
285
286
  end
286
287
 
287
288
  state :single_quoted_scalar do
288
289
  mixin :quoted_scalar_whitespaces
289
- rule /\\'/, Str::Escape
290
- rule /'/, Str, :pop!
291
- rule /[^\s']+/, Str
290
+ rule %r/\\'/, Str::Escape
291
+ rule %r/'/, Str, :pop!
292
+ rule %r/[^\s']+/, Str
292
293
  end
293
294
 
294
295
  state :double_quoted_scalar do
295
- rule /"/, Str, :pop!
296
+ rule %r/"/, Str, :pop!
296
297
  mixin :quoted_scalar_whitespaces
297
298
  # escapes
298
- rule /\\[0abt\tn\nvfre "\\N_LP]/, Str::Escape
299
- rule /\\(?:x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
299
+ rule %r/\\[0abt\tn\nvfre "\\N_LP]/, Str::Escape
300
+ rule %r/\\(?:x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
300
301
  Str::Escape
301
- rule /[^ \t\n\r\f\v"\\]+/, Str
302
+ rule %r/[^ \t\n\r\f\v"\\]+/, Str
302
303
  end
303
304
 
304
305
  state :plain_scalar_in_block_context_new_line do
305
- rule /^[ ]+\n/, Text
306
- rule /\n+/m, Text
307
- rule /^(?=---|\.\.\.)/ do
306
+ rule %r/^[ ]+\n/, Text
307
+ rule %r/\n+/m, Text
308
+ rule %r/^(?=---|\.\.\.)/ do
308
309
  pop! 3
309
310
  end
310
311
 
311
312
  # dedent detection
312
- rule /^[ ]*/ do |m|
313
+ rule %r/^[ ]*/ do |m|
313
314
  token Text
314
315
  pop!
315
316
 
@@ -326,34 +327,36 @@ module Rouge
326
327
 
327
328
  state :plain_scalar_in_block_context do
328
329
  # the : indicator ends a scalar
329
- rule /[ ]*(?=:[ \n]|:$)/, Text, :pop!
330
- rule /[ ]*:/, Str
331
- rule /[ ]+(?=#)/, Text, :pop!
332
- rule /[ ]+$/, Text
330
+ rule %r/[ ]*(?=:[ \n]|:$)/, Text, :pop!
331
+ rule %r/[ ]*:\S+/, Str
332
+ rule %r/[ ]+(?=#)/, Text, :pop!
333
+ rule %r/[ ]+$/, Text
333
334
  # check for new documents or dedents at the new line
334
- rule /\n+/ do
335
+ rule %r/\n+/ do
335
336
  token Text
336
337
  push :plain_scalar_in_block_context_new_line
337
338
  end
338
339
 
339
- rule /[ ]+/, Str
340
+ rule %r/[ ]+/, Str
340
341
  rule SPECIAL_VALUES, Name::Constant
342
+ rule %r/\d+(?:\.\d+)?(?=(\r?\n)| +#)/, Literal::Number, :pop!
343
+
341
344
  # regular non-whitespace characters
342
- rule /[^\s:]+/, Str
345
+ rule %r/[^\s:]+/, Str
343
346
  end
344
347
 
345
348
  state :plain_scalar_in_flow_context do
346
- rule /[ ]*(?=[,:?\[\]{}])/, Text, :pop!
347
- rule /[ ]+(?=#)/, Text, :pop!
348
- rule /^[ ]+/, Text
349
- rule /[ ]+$/, Text
350
- rule /\n+/, Text
351
- rule /[ ]+/, Name::Variable
352
- rule /[^\s,:?\[\]{}]+/, Name::Variable
349
+ rule %r/[ ]*(?=[,:?\[\]{}])/, Text, :pop!
350
+ rule %r/[ ]+(?=#)/, Text, :pop!
351
+ rule %r/^[ ]+/, Text
352
+ rule %r/[ ]+$/, Text
353
+ rule %r/\n+/, Text
354
+ rule %r/[ ]+/, Name::Variable
355
+ rule %r/[^\s,:?\[\]{}]+/, Name::Variable
353
356
  end
354
357
 
355
358
  state :yaml_directive do
356
- rule /([ ]+)(\d+\.\d+)/ do
359
+ rule %r/([ ]+)(\d+\.\d+)/ do
357
360
  groups Text, Num
358
361
  goto :ignored_line
359
362
  end
@@ -0,0 +1,147 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class YANG < RegexLexer
7
+ title 'YANG'
8
+ desc "Lexer for the YANG 1.1 modeling language (RFC7950)"
9
+ tag 'yang'
10
+ filenames '*.yang'
11
+ mimetypes 'application/yang'
12
+
13
+ id = /[\w_-]+(?=[^\w\-\:])\b/
14
+
15
+ #Keywords from RFC7950 ; oriented at BNF style
16
+ def self.top_stmts_keywords
17
+ @top_stms_keywords ||= Set.new %w(
18
+ module submodule
19
+ )
20
+ end
21
+
22
+ def self.module_header_stmts_keywords
23
+ @module_header_stmts_keywords ||= Set.new %w(
24
+ belongs-to namespace prefix yang-version
25
+ )
26
+ end
27
+
28
+ def self.meta_stmts_keywords
29
+ @meta_stmts_keywords ||= Set.new %w(
30
+ contact description organization reference revision
31
+ )
32
+ end
33
+
34
+ def self.linkage_stmts_keywords
35
+ @linkage_stmts_keywords ||= Set.new %w(
36
+ import include revision-date
37
+ )
38
+ end
39
+
40
+ def self.body_stmts_keywords
41
+ @body_stms_keywords ||= Set.new %w(
42
+ action argument augment deviation extension feature grouping identity
43
+ if-feature input notification output rpc typedef
44
+ )
45
+ end
46
+
47
+ def self.data_def_stmts_keywords
48
+ @data_def_stms_keywords ||= Set.new %w(
49
+ anydata anyxml case choice config container deviate leaf leaf-list
50
+ list must presence refine uses when
51
+ )
52
+ end
53
+
54
+ def self.type_stmts_keywords
55
+ @type_stmts_keywords ||= Set.new %w(
56
+ base bit default enum error-app-tag error-message fraction-digits
57
+ length max-elements min-elements modifier ordered-by path pattern
58
+ position range require-instance status type units value yin-element
59
+ )
60
+ end
61
+
62
+ def self.list_stmts_keywords
63
+ @list_stmts_keywords ||= Set.new %w(
64
+ key mandatory unique
65
+ )
66
+ end
67
+
68
+ #RFC7950 other keywords
69
+ def self.constants_keywords
70
+ @constants_keywords ||= Set.new %w(
71
+ add current delete deprecated false invert-match max min
72
+ not-supported obsolete replace true unbounded user
73
+ )
74
+ end
75
+
76
+ #RFC7950 Built-In Types
77
+ def self.types
78
+ @types ||= Set.new %w(
79
+ binary bits boolean decimal64 empty enumeration identityref
80
+ instance-identifier int16 int32 int64 int8 leafref string uint16
81
+ uint32 uint64 uint8 union
82
+ )
83
+ end
84
+
85
+ state :comment do
86
+ rule %r/[^*\/]/, Comment
87
+ rule %r/\/\*/, Comment, :comment
88
+ rule %r/\*\//, Comment, :pop!
89
+ rule %r/[*\/]/, Comment
90
+ end
91
+
92
+ #Keyword::Reserved
93
+ #groups Name::Tag, Text::Whitespace
94
+ state :root do
95
+ rule %r/\s+/, Text::Whitespace
96
+ rule %r/[\{\}\;]+/, Punctuation
97
+ rule %r/(?<![\-\w])(and|or|not|\+|\.)(?![\-\w])/, Operator
98
+
99
+ rule %r/"(?:\\"|[^"])*?"/, Str::Double #for double quotes
100
+ rule %r/'(?:\\'|[^'])*?'/, Str::Single #for single quotes
101
+
102
+ rule %r/\/\*/, Comment, :comment
103
+ rule %r/\/\/.*?$/, Comment
104
+
105
+ #match BNF stmt for `node-identifier` with [ prefix ":"]
106
+ rule %r/(?:^|(?<=[\s{};]))([\w.-]+)(:)([\w.-]+)(?=[\s{};])/ do
107
+ groups Name::Namespace, Punctuation, Name
108
+ end
109
+
110
+ #match BNF stmt `date-arg-str`
111
+ rule %r/([0-9]{4}\-[0-9]{2}\-[0-9]{2})(?=[\s\{\}\;])/, Name::Label
112
+ rule %r/([0-9]+\.[0-9]+)(?=[\s\{\}\;])/, Num::Float
113
+ rule %r/([0-9]+)(?=[\s\{\}\;])/, Num::Integer
114
+
115
+ rule id do |m|
116
+ name = m[0].downcase
117
+
118
+ if self.class.top_stmts_keywords.include? name
119
+ token Keyword::Declaration
120
+ elsif self.class.module_header_stmts_keywords.include? name
121
+ token Keyword::Declaration
122
+ elsif self.class.meta_stmts_keywords.include? name
123
+ token Keyword::Declaration
124
+ elsif self.class.linkage_stmts_keywords.include? name
125
+ token Keyword::Declaration
126
+ elsif self.class.body_stmts_keywords.include? name
127
+ token Keyword::Declaration
128
+ elsif self.class.data_def_stmts_keywords.include? name
129
+ token Keyword::Declaration
130
+ elsif self.class.type_stmts_keywords.include? name
131
+ token Keyword::Declaration
132
+ elsif self.class.list_stmts_keywords.include? name
133
+ token Keyword::Declaration
134
+ elsif self.class.types.include? name
135
+ token Keyword::Type
136
+ elsif self.class.constants_keywords.include? name
137
+ token Name::Constant
138
+ else
139
+ token Name
140
+ end
141
+ end
142
+
143
+ rule %r/[^;{}\s'"]+/, Name
144
+ end
145
+ end
146
+ end
147
+ end
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  # this file is not require'd from the root. To use this plugin, run:
4
5
  #
@@ -8,13 +9,19 @@ module Rouge
8
9
  module Plugins
9
10
  module Redcarpet
10
11
  def block_code(code, language)
11
- lexer = Lexer.find_fancy(language, code) || Lexers::PlainText
12
+ lexer =
13
+ begin
14
+ Lexer.find_fancy(language, code)
15
+ rescue Guesser::Ambiguous => e
16
+ e.alternatives.first
17
+ end
18
+ lexer ||= Lexers::PlainText
12
19
 
13
20
  # XXX HACK: Redcarpet strips hard tabs out of code blocks,
14
21
  # so we assume you're not using leading spaces that aren't tabs,
15
22
  # and just replace them here.
16
23
  if lexer.tag == 'make'
17
- code.gsub! /^ /, "\t"
24
+ code.gsub! %r/^ /, "\t"
18
25
  end
19
26
 
20
27
  formatter = rouge_formatter(lexer)