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
@@ -0,0 +1,151 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ # See http://www.cs.cmu.edu/afs/andrew/course/15/411/ghc/share/doc/ghc/ext-core/core.pdf for a description of the syntax
5
+ # of the language and https://www.aosabook.org/en/ghc.html for a high level overview.
6
+ module Rouge
7
+ module Lexers
8
+ class GHCCore < RegexLexer
9
+ title "GHC Core"
10
+ desc "Intermediate representation of the GHC Haskell compiler."
11
+ tag 'ghc-core'
12
+
13
+ filenames '*.dump-simpl', '*.dump-cse', '*.dump-ds', '*.dump-spec'
14
+
15
+ state :root do
16
+ # sections
17
+ rule %r/^=====.*=====$/, Generic::Heading
18
+ # timestamps
19
+ rule %r/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ UTC$/, Comment::Single
20
+ rule %r/^Result size of .+\s*.*}/, Comment::Multiline
21
+ rule %r/--.*$/, Comment::Single
22
+
23
+ rule %r/\[/, Comment::Special, :annotation
24
+
25
+ mixin :recursive_binding
26
+ mixin :ghc_rule
27
+ mixin :function
28
+
29
+ # rest is Text
30
+ rule %r/\s/m, Text
31
+ rule %r/.*/, Text
32
+ end
33
+
34
+ state :expression do
35
+ rule %r/[\n]+/, Text
36
+ rule %r/(?=^\S)/ do
37
+ pop!
38
+ end
39
+
40
+ rule %r/\s+/, Text, :expression_line
41
+ end
42
+
43
+ state :expression_line do
44
+ rule %r/ /, Text
45
+
46
+ mixin :common
47
+
48
+ rule %r/\n/, Text, :pop!
49
+ end
50
+
51
+ state :annotation do
52
+ rule %r/\]/, Comment::Special, :pop!
53
+ rule %r/\[/, Comment::Special, :annotation
54
+ rule %r/[^\[\]]+/, Comment::Special
55
+ end
56
+
57
+ state :common do
58
+ # array, e.g. '[]' or '[Char]'
59
+ rule %r/\[[^=]*\]/, Keyword::Type
60
+
61
+ rule %r/\[/, Comment::Special, :annotation
62
+
63
+ mixin :literal
64
+ mixin :constants
65
+ mixin :punctuation
66
+ mixin :operator
67
+ mixin :name
68
+ end
69
+
70
+ state :literal do
71
+ rule %r/\d+\.\d+\#{0,2}/, Literal::Number::Float
72
+ rule %r/\d+\#{0,2}/, Literal::Number::Integer
73
+ rule %r/".*"#/, Literal::String
74
+ rule %r/'.'#/, Literal::String::Char
75
+ end
76
+
77
+ state :constants do
78
+ rule %r/__DEFAULT/, Name::Constant
79
+ end
80
+
81
+ state :name do
82
+ rule %r/^([A-Z]\w*)(\.)/ do |m|
83
+ token Name::Namespace, m[0]
84
+ token Punctuation, m[1]
85
+ end
86
+
87
+ rule %r/[A-Z][^\s.,(){}]*/, Keyword::Type
88
+
89
+ # packages, e.g. 'ghc-prim-0.5.3:'
90
+ rule %r/(^[a-z].*?\d+\.\d+\.\d+)(:)(?=\S)/ do |m|
91
+ token Name::Namespace, m[1]
92
+ token Punctuation, m[2]
93
+ end
94
+
95
+ rule %r/\S*\(,\)\S*/, Name::Variable # '(,)' is a name, not punctuation
96
+ rule %r/\S[^\s.,(){}]*/, Name::Variable
97
+ end
98
+
99
+ state :punctuation do
100
+ rule %r/[.,(){};]/, Punctuation
101
+ end
102
+
103
+ state :operator do
104
+ rule %r/=>/, Operator
105
+ rule %r/->/, Operator
106
+ rule %r/::/, Operator
107
+ rule %r/=/, Operator
108
+ rule %r/forall/, Keyword
109
+ rule %r/case/, Keyword
110
+ rule %r/of/, Keyword
111
+ rule %r/letrec/, Keyword
112
+ rule %r/let/, Keyword
113
+ rule %r/join/, Keyword
114
+ rule %r/@/, Operator
115
+ rule %r/\\/, Operator
116
+ end
117
+
118
+ state :recursive_binding do
119
+ rule %r/(Rec)(\s*)({)/ do |m|
120
+ token Keyword, m[1]
121
+ token Text, m[2]
122
+ token Punctuation, m[3]
123
+ end
124
+
125
+ rule %r/^(end)(\s*)(Rec)(\s*)(})/ do |m|
126
+ token Keyword, m[1]
127
+ token Text, m[2]
128
+ token Keyword, m[3]
129
+ token Text, m[4]
130
+ token Punctuation, m[5]
131
+ end
132
+ end
133
+
134
+ state :ghc_rule do
135
+ rule %r/^(".*?")/m do |m|
136
+ token Name::Label, m[0]
137
+
138
+ push :expression
139
+ end
140
+ end
141
+
142
+ state :function do
143
+ rule %r/^(\S+)(?=.*?(=|::))/m do |m|
144
+ token Name::Function, m[0]
145
+
146
+ push :expression
147
+ end
148
+ end
149
+ end
150
+ end
151
+ end
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Rouge
4
5
  module Lexers
@@ -7,7 +8,7 @@ module Rouge
7
8
  aliases 'cucumber', 'behat'
8
9
 
9
10
  title "Gherkin"
10
- desc 'A business-readable spec DSL ( github.com/cucumber/cucumber/wiki/Gherkin )'
11
+ desc 'A business-readable spec DSL (github.com/cucumber/cucumber/wiki/Gherkin)'
11
12
 
12
13
  filenames '*.feature'
13
14
  mimetypes 'text/x-gherkin'
@@ -18,7 +19,7 @@ module Rouge
18
19
 
19
20
  # self-modifying method that loads the keywords file
20
21
  def self.keywords
21
- load Pathname.new(__FILE__).dirname.join('gherkin/keywords.rb')
22
+ load File.join(Lexers::BASE_DIR, 'gherkin/keywords.rb')
22
23
  keywords
23
24
  end
24
25
 
@@ -29,6 +30,8 @@ module Rouge
29
30
  keywords[:step].map do |w|
30
31
  if w.end_with? '<'
31
32
  Regexp.escape(w.chop)
33
+ elsif w.end_with?(' ')
34
+ Regexp.escape(w)
32
35
  else
33
36
  "#{Regexp.escape(w)}\\b"
34
37
  end
@@ -40,7 +43,7 @@ module Rouge
40
43
 
41
44
  state :basic do
42
45
  rule %r(#.*$), Comment
43
- rule /[ \r\t]+/, Text
46
+ rule %r/[ \r\t]+/, Text
44
47
  end
45
48
 
46
49
  state :root do
@@ -84,8 +87,8 @@ module Rouge
84
87
  end
85
88
 
86
89
  state :table_header do
87
- rule /[^|\s]+/, Name::Variable
88
- rule /\n/ do
90
+ rule %r/[^|\s]+/, Name::Variable
91
+ rule %r/\n/ do
89
92
  token Text
90
93
  goto :table
91
94
  end
@@ -94,9 +97,9 @@ module Rouge
94
97
 
95
98
  state :table do
96
99
  mixin :basic
97
- rule /\n/, Text, :table_bol
98
- rule /[|]/, Punctuation
99
- rule /[^|\s]+/, Name
100
+ rule %r/\n/, Text, :table_bol
101
+ rule %r/[|]/, Punctuation
102
+ rule %r/[^|\s]+/, Name
100
103
  end
101
104
 
102
105
  state :table_bol do
@@ -107,29 +110,29 @@ module Rouge
107
110
  state :description do
108
111
  mixin :basic
109
112
  mixin :has_examples
110
- rule /\n/, Text
113
+ rule %r/\n/, Text
111
114
  rule rest_of_line, Text
112
115
  end
113
116
 
114
117
  state :feature_description do
115
118
  mixin :basic
116
119
  mixin :has_scenarios
117
- rule /\n/, Text
120
+ rule %r/\n/, Text
118
121
  rule rest_of_line, Text
119
122
  end
120
123
 
121
124
  state :example_description do
122
125
  mixin :basic
123
126
  mixin :has_table
124
- rule /\n/, Text
127
+ rule %r/\n/, Text
125
128
  rule rest_of_line, Text
126
129
  end
127
130
 
128
131
  state :step do
129
132
  mixin :basic
130
- rule /<.*?>/, Name::Variable
131
- rule /".*?"/, Str
132
- rule /\S+/, Text
133
+ rule %r/<.*?>/, Name::Variable
134
+ rule %r/".*?"/, Str
135
+ rule %r/\S[^\s<]*/, Text
133
136
  rule rest_of_line, Text, :pop!
134
137
  end
135
138
  end
@@ -1,4 +1,6 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
2
4
  # automatically generated by `rake builtins:gherkin`
3
5
  module Rouge
4
6
  module Lexers
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Rouge
4
5
  module Lexers
@@ -16,10 +17,6 @@ module Rouge
16
17
  title "GLSL"
17
18
  desc "The GLSL shader language"
18
19
 
19
- # optional comment or whitespace
20
- ws = %r((?:\s|//.*?\n|/[*].*?[*]/)+)
21
- id = /[a-zA-Z_][a-zA-Z0-9_]*/
22
-
23
20
  def self.keywords
24
21
  @keywords ||= Set.new %w(
25
22
  attribute const uniform varying
@@ -98,7 +95,7 @@ module Rouge
98
95
  gl_TexCoord gl_FogFragCoord gl_Color gl_SecondaryColor gl_Normal gl_VertexID
99
96
  gl_MultiTexCord0 gl_MultiTexCord1 gl_MultiTexCord2 gl_MultiTexCord3
100
97
  gl_MultiTexCord4 gl_MultiTexCord5 gl_MultiTexCord6 gl_MultiTexCord7
101
- gl_FogCoord gl_MaxVertexAttribs gl_MaxVertexUniformComponents
98
+ gl_FogCoord gl_MaxVertexAttribs gl_MaxVertexUniformComponents
102
99
  gl_MaxVaryingFloats gl_MaxVaryingComponents gl_MaxVertexOutputComponents
103
100
  gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents
104
101
  gl_MaxFragmentInputComponents gl_MaxVertexTextureImageUnits
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Rouge
4
5
  module Lexers
@@ -13,7 +14,7 @@ module Rouge
13
14
 
14
15
  # Characters
15
16
 
16
- WHITE_SPACE = /[\s\t\r\n]+/
17
+ WHITE_SPACE = /\s+/
17
18
 
18
19
  NEWLINE = /\n/
19
20
  UNICODE_CHAR = /[^\n]/
@@ -148,7 +149,7 @@ module Rouge
148
149
  rule(OPERATOR, Operator)
149
150
  rule(SEPARATOR, Punctuation)
150
151
  rule(IDENTIFIER, Name)
151
- rule(WHITE_SPACE, Other)
152
+ rule(WHITE_SPACE, Text)
152
153
  end
153
154
 
154
155
  state :root do
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Rouge
4
5
  module Lexers
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Rouge
4
5
  module Lexers
@@ -11,40 +12,54 @@ module Rouge
11
12
  name = /[_A-Za-z][_0-9A-Za-z]*/
12
13
 
13
14
  state :root do
14
- rule /\b(?:query|mutation|subscription)\b/, Keyword, :query_definition
15
- rule /\{/ do
15
+ rule %r/\b(?:query|mutation|subscription)\b/, Keyword, :query_definition
16
+ rule %r/\{/ do
16
17
  token Punctuation
17
18
  push :query_definition
18
19
  push :selection_set
19
20
  end
20
21
 
21
- rule /\bfragment\b/, Keyword, :fragment_definition
22
+ rule %r/\bfragment\b/, Keyword, :fragment_definition
23
+
24
+ rule %r/\bscalar\b/, Keyword, :value
22
25
 
23
- rule /\b(?:type|interface|enum)\b/, Keyword, :type_definition
24
- rule /\b(?:input|schema)\b/, Keyword, :type_definition
26
+ rule %r/\b(?:type|interface|enum)\b/, Keyword, :type_definition
25
27
 
26
- rule /\bunion\b/, Keyword, :union_definition
28
+ rule %r/\b(?:input|schema)\b/, Keyword, :type_definition
29
+
30
+ rule %r/\bunion\b/, Keyword, :union_definition
31
+
32
+ rule %r/\bextend\b/, Keyword
27
33
 
28
34
  mixin :basic
35
+
36
+ # Markdown descriptions
37
+ rule %r/(""")(\n)(.*?)(\n)(""")/m do |m|
38
+ token Str::Double, m[1]
39
+ token Text::Whitespace, m[2]
40
+ delegate Markdown, m[3]
41
+ token Text::Whitespace, m[4]
42
+ token Str::Double, m[5]
43
+ end
29
44
  end
30
45
 
31
46
  state :basic do
32
- rule /\s+/m, Text::Whitespace
33
- rule /#.*$/, Comment
47
+ rule %r/\s+/m, Text::Whitespace
48
+ rule %r/#.*$/, Comment
34
49
 
35
- rule /[!,]/, Punctuation
50
+ rule %r/[!,]/, Punctuation
36
51
  end
37
52
 
38
53
  state :has_directives do
39
- rule /(@#{name})(\s*)(\()/ do
54
+ rule %r/(@#{name})(\s*)(\()/ do
40
55
  groups Keyword, Text::Whitespace, Punctuation
41
56
  push :arguments
42
57
  end
43
- rule /@#{name}\b/, Keyword
58
+ rule %r/@#{name}\b/, Keyword
44
59
  end
45
60
 
46
61
  state :fragment_definition do
47
- rule /\bon\b/, Keyword
62
+ rule %r/\bon\b/, Keyword
48
63
 
49
64
  mixin :query_definition
50
65
  end
@@ -52,31 +67,31 @@ module Rouge
52
67
  state :query_definition do
53
68
  mixin :has_directives
54
69
 
55
- rule /\b#{name}\b/, Name
56
- rule /\(/, Punctuation, :variable_definitions
57
- rule /\{/, Punctuation, :selection_set
70
+ rule %r/\b#{name}\b/, Name
71
+ rule %r/\(/, Punctuation, :variable_definitions
72
+ rule %r/\{/, Punctuation, :selection_set
58
73
 
59
74
  mixin :basic
60
75
  end
61
76
 
62
77
  state :type_definition do
63
- rule /\bimplements\b/, Keyword
64
- rule /\b#{name}\b/, Name
65
- rule /\(/, Punctuation, :variable_definitions
66
- rule /\{/, Punctuation, :type_definition_set
78
+ rule %r/\bimplements\b/, Keyword
79
+ rule %r/\b#{name}\b/, Name
80
+ rule %r/\(/, Punctuation, :variable_definitions
81
+ rule %r/\{/, Punctuation, :type_definition_set
67
82
 
68
83
  mixin :basic
69
84
  end
70
85
 
71
86
  state :union_definition do
72
- rule /\b#{name}\b/, Name
73
- rule /\=/, Punctuation, :union_definition_variant
87
+ rule %r/\b#{name}\b/, Name
88
+ rule %r/\=/, Punctuation, :union_definition_variant
74
89
 
75
90
  mixin :basic
76
91
  end
77
92
 
78
93
  state :union_definition_variant do
79
- rule /\b#{name}\b/ do
94
+ rule %r/\b#{name}\b/ do
80
95
  token Name
81
96
  pop!
82
97
  push :union_definition_pipe
@@ -86,13 +101,13 @@ module Rouge
86
101
  end
87
102
 
88
103
  state :union_definition_pipe do
89
- rule /\|/ do
104
+ rule %r/\|/ do
90
105
  token Punctuation
91
106
  pop!
92
107
  push :union_definition_variant
93
108
  end
94
109
 
95
- rule /(?!\||\s+|#[^\n]*)/ do
110
+ rule %r/(?!\||\s+|#[^\n]*)/ do
96
111
  pop! 2
97
112
  end
98
113
 
@@ -100,62 +115,62 @@ module Rouge
100
115
  end
101
116
 
102
117
  state :type_definition_set do
103
- rule /\}/ do
118
+ rule %r/\}/ do
104
119
  token Punctuation
105
120
  pop! 2
106
121
  end
107
122
 
108
- rule /\b(#{name})(\s*)(\()/ do
123
+ rule %r/\b(#{name})(\s*)(\()/ do
109
124
  groups Name, Text::Whitespace, Punctuation
110
125
  push :variable_definitions
111
126
  end
112
- rule /\b#{name}\b/, Name
127
+ rule %r/\b#{name}\b/, Name
113
128
 
114
- rule /:/, Punctuation, :type_names
129
+ rule %r/:/, Punctuation, :type_names
115
130
 
116
131
  mixin :basic
117
132
  end
118
133
 
119
134
  state :arguments do
120
- rule /\)/ do
135
+ rule %r/\)/ do
121
136
  token Punctuation
122
137
  pop!
123
138
  end
124
139
 
125
- rule /\b#{name}\b/, Name
126
- rule /:/, Punctuation, :value
140
+ rule %r/\b#{name}\b/, Name
141
+ rule %r/:/, Punctuation, :value
127
142
 
128
143
  mixin :basic
129
144
  end
130
145
 
131
146
  state :variable_definitions do
132
- rule /\)/ do
147
+ rule %r/\)/ do
133
148
  token Punctuation
134
149
  pop!
135
150
  end
136
151
 
137
- rule /\$#{name}\b/, Name::Variable
138
- rule /\b#{name}\b/, Name
139
- rule /:/, Punctuation, :type_names
140
- rule /\=/, Punctuation, :value
152
+ rule %r/\$#{name}\b/, Name::Variable
153
+ rule %r/\b#{name}\b/, Name
154
+ rule %r/:/, Punctuation, :type_names
155
+ rule %r/\=/, Punctuation, :value
141
156
 
142
157
  mixin :basic
143
158
  end
144
159
 
145
160
  state :type_names do
146
- rule /\b(?:Int|Float|String|Boolean|ID)\b/, Name::Builtin, :pop!
147
- rule /\b#{name}\b/, Name, :pop!
161
+ rule %r/\b(?:Int|Float|String|Boolean|ID)\b/, Name::Builtin, :pop!
162
+ rule %r/\b#{name}\b/, Name, :pop!
148
163
 
149
- rule /\[/, Punctuation, :type_name_list
164
+ rule %r/\[/, Punctuation, :type_name_list
150
165
 
151
166
  mixin :basic
152
167
  end
153
168
 
154
169
  state :type_name_list do
155
- rule /\b(?:Int|Float|String|Boolean|ID)\b/, Name::Builtin
156
- rule /\b#{name}\b/, Name
170
+ rule %r/\b(?:Int|Float|String|Boolean|ID)\b/, Name::Builtin
171
+ rule %r/\b#{name}\b/, Name
157
172
 
158
- rule /\]/ do
173
+ rule %r/\]/ do
159
174
  token Punctuation
160
175
  pop! 2
161
176
  end
@@ -166,35 +181,35 @@ module Rouge
166
181
  state :selection_set do
167
182
  mixin :has_directives
168
183
 
169
- rule /\}/ do
184
+ rule %r/\}/ do
170
185
  token Punctuation
171
186
  pop!
172
187
  pop! if state?(:query_definition) || state?(:fragment_definition)
173
188
  end
174
189
 
175
- rule /\b(#{name})(\s*)(\()/ do
190
+ rule %r/\b(#{name})(\s*)(\()/ do
176
191
  groups Name, Text::Whitespace, Punctuation
177
192
  push :arguments
178
193
  end
179
194
 
180
- rule /\b(#{name})(\s*)(:)/ do
195
+ rule %r/\b(#{name})(\s*)(:)/ do
181
196
  groups Name, Text::Whitespace, Punctuation
182
197
  end
183
198
 
184
- rule /\b#{name}\b/, Name
199
+ rule %r/\b#{name}\b/, Name
185
200
 
186
- rule /(\.\.\.)(\s+)(on)\b/ do
201
+ rule %r/(\.\.\.)(\s+)(on)\b/ do
187
202
  groups Punctuation, Text::Whitespace, Keyword
188
203
  end
189
- rule /\.\.\./, Punctuation
204
+ rule %r/\.\.\./, Punctuation
190
205
 
191
- rule /\{/, Punctuation, :selection_set
206
+ rule %r/\{/, Punctuation, :selection_set
192
207
 
193
208
  mixin :basic
194
209
  end
195
210
 
196
211
  state :list do
197
- rule /\]/ do
212
+ rule %r/\]/ do
198
213
  token Punctuation
199
214
  pop!
200
215
  pop! if state?(:value)
@@ -204,13 +219,13 @@ module Rouge
204
219
  end
205
220
 
206
221
  state :object do
207
- rule /\}/ do
222
+ rule %r/\}/ do
208
223
  token Punctuation
209
224
  pop!
210
225
  pop! if state?(:value)
211
226
  end
212
227
 
213
- rule /\b(#{name})(\s*)(:)/ do
228
+ rule %r/\b(#{name})(\s*)(:)/ do
214
229
  groups Name, Text::Whitespace, Punctuation
215
230
  push :value
216
231
  end
@@ -226,15 +241,18 @@ module Rouge
226
241
  }
227
242
  }
228
243
 
229
- rule /\$#{name}\b/, &pop_unless_list[Name::Variable]
230
- rule /\b(?:true|false|null)\b/, &pop_unless_list[Keyword::Constant]
231
- rule /[+-]?[0-9]+\.[0-9]+(?:[eE][+-]?[0-9]+)?/, &pop_unless_list[Num::Float]
232
- rule /[+-]?[1-9][0-9]*(?:[eE][+-]?[0-9]+)?/, &pop_unless_list[Num::Integer]
233
- rule /"(\\[\\"]|[^"])*"/, &pop_unless_list[Str::Double]
234
- rule /\b#{name}\b/, &pop_unless_list[Name]
244
+ # Multiline strings
245
+ rule %r/""".*?"""/m, Str::Double
246
+
247
+ rule %r/\$#{name}\b/, &pop_unless_list[Name::Variable]
248
+ rule %r/\b(?:true|false|null)\b/, &pop_unless_list[Keyword::Constant]
249
+ rule %r/[+-]?[0-9]+\.[0-9]+(?:[eE][+-]?[0-9]+)?/, &pop_unless_list[Num::Float]
250
+ rule %r/[+-]?[1-9][0-9]*(?:[eE][+-]?[0-9]+)?/, &pop_unless_list[Num::Integer]
251
+ rule %r/"(\\[\\"]|[^"])*"/, &pop_unless_list[Str::Double]
252
+ rule %r/\b#{name}\b/, &pop_unless_list[Name]
235
253
 
236
- rule /\{/, Punctuation, :object
237
- rule /\[/, Punctuation, :list
254
+ rule %r/\{/, Punctuation, :object
255
+ rule %r/\[/, Punctuation, :list
238
256
 
239
257
  mixin :basic
240
258
  end