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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Rouge
2
4
  module Lexers
3
5
  load_lexer 'markdown.rb'
@@ -1,4 +1,6 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
2
4
  module Rouge
3
5
  module Lexers
4
6
  class AppleScript < RegexLexer
@@ -317,28 +319,28 @@ module Rouge
317
319
  identifiers = %r(\b([a-zA-Z]\w*)\b)
318
320
 
319
321
  state :root do
320
- rule /\s+/, Text::Whitespace
321
- rule /¬\n/, Literal::String::Escape
322
- rule /'s\s+/, Text
323
- rule /(--|#).*?$/, Comment::Single
324
- rule /\(\*/, Comment::Multiline
325
- rule /[\(\){}!,.:]/, Punctuation
326
- rule /(«)([^»]+)(»)/ do |match|
322
+ rule %r/\s+/, Text::Whitespace
323
+ rule %r/¬\n/, Literal::String::Escape
324
+ rule %r/'s\s+/, Text
325
+ rule %r/(--|#).*?$/, Comment::Single
326
+ rule %r/\(\*/, Comment::Multiline
327
+ rule %r/[\(\){}!,.:]/, Punctuation
328
+ rule %r/(«)([^»]+)(»)/ do |match|
327
329
  token Text, match[1]
328
330
  token Name::Builtin, match[2]
329
331
  token Text, match[3]
330
332
  end
331
- rule /\b((?:considering|ignoring)\s*)(application responses|case|diacriticals|hyphens|numeric strings|punctuation|white space)/ do |match|
333
+ rule %r/\b((?:considering|ignoring)\s*)(application responses|case|diacriticals|hyphens|numeric strings|punctuation|white space)/ do |match|
332
334
  token Keyword, match[1]
333
335
  token Name::Builtin, match[2]
334
336
  end
335
- rule /(-|\*|\+|&|≠|>=?|<=?|=|≥|≤|\/|÷|\^)/, Operator
337
+ rule %r/(-|\*|\+|&|≠|>=?|<=?|=|≥|≤|\/|÷|\^)/, Operator
336
338
  rule operators, Operator::Word
337
- rule /^(\s*(?:on|end)\s+)'r'(%s)/ do |match|
339
+ rule %r/^(\s*(?:on|end)\s+)'r'(%s)/ do |match|
338
340
  token Keyword, match[1]
339
341
  token Name::Function, match[2]
340
342
  end
341
- rule /^(\s*)(in|on|script|to)(\s+)/ do |match|
343
+ rule %r/^(\s*)(in|on|script|to)(\s+)/ do |match|
342
344
  token Text, match[1]
343
345
  token Keyword, match[2]
344
346
  token Text, match[3]
@@ -347,6 +349,7 @@ module Rouge
347
349
  token Keyword, match[1]
348
350
  token Name::Class, match[2]
349
351
  end
352
+ rule literals, Name::Builtin
350
353
  rule commands, Name::Builtin
351
354
  rule controls, Keyword
352
355
  rule declarations, Keyword
@@ -357,10 +360,10 @@ module Rouge
357
360
  rule studio_classes, Name::Builtin
358
361
  rule studio_commands, Name::Builtin
359
362
  rule references, Name::Builtin
360
- rule /"(\\\\|\\"|[^"])*"/, Literal::String::Double
363
+ rule %r/"(\\\\|\\"|[^"])*"/, Literal::String::Double
361
364
  rule identifiers, Name::Variable
362
- rule /[-+]?(\d+\.\d*|\d*\.\d+)(E[-+][0-9]+)?/, Literal::Number::Float
363
- rule /[-+]?\d+/, Literal::Number::Integer
365
+ rule %r/[-+]?(\d+\.\d*|\d*\.\d+)(E[-+][0-9]+)?/, Literal::Number::Float
366
+ rule %r/[-+]?\d+/, Literal::Number::Integer
364
367
  end
365
368
  end
366
369
  end
@@ -0,0 +1,145 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class ArmAsm < RegexLexer
7
+ title "ArmAsm"
8
+ desc "Arm assembly syntax"
9
+ tag 'armasm'
10
+ filenames '*.s'
11
+
12
+ def self.preproc_keyword
13
+ @preproc_keyword ||= %w(
14
+ define elif else endif error if ifdef ifndef include line pragma undef warning
15
+ )
16
+ end
17
+
18
+ def self.file_directive
19
+ @file_directive ||= %w(
20
+ BIN GET INCBIN INCLUDE LNK
21
+ )
22
+ end
23
+
24
+ def self.general_directive
25
+ @general_directive ||= %w(
26
+ ALIAS ALIGN AOF AOUT AREA ARM ASSERT ATTR CN CODE16 CODE32 COMMON CP
27
+ DATA DCB DCD DCDO DCDU DCFD DCFDU DCFH DCFHU DCFS DCFSU DCI DCI.N DCI.W
28
+ DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT
29
+ EXPORTAS EXTERN FIELD FILL FN FRAME FUNCTION GBLA GBLL GBLS GLOBAL IF
30
+ IMPORT INFO KEEP LCLA LCLL LCLS LEADR LEAF LTORG MACRO MAP MEND MEXIT
31
+ NOFP OPT ORG PRESERVE8 PROC QN RELOC REQUIRE REQUIRE8 RLIST RN ROUT
32
+ SETA SETL SETS SN SPACE STRONG SUBT THUMB THUMBX TTL WEND WHILE
33
+ \[ \] [|!#*=%&^]
34
+ )
35
+ end
36
+
37
+ def self.shift_or_condition
38
+ @shift_or_condition ||= %w(
39
+ ASR LSL LSR ROR RRX AL CC CS EQ GE GT HI HS LE LO LS LT MI NE PL VC VS
40
+ asr lsl lsr ror rrx al cc cs eq ge gt hi hs le lo ls lt mi ne pl vc vs
41
+ )
42
+ end
43
+
44
+ def self.builtin
45
+ @builtin ||= %w(
46
+ ARCHITECTURE AREANAME ARMASM_VERSION CODESIZE COMMANDLINE CONFIG CPU
47
+ ENDIAN FALSE FPIC FPU INPUTFILE INTER LINENUM LINENUMUP LINENUMUPPER
48
+ OBJASM_VERSION OPT PC PCSTOREOFFSET REENTRANT ROPI RWPI TRUE VAR
49
+ )
50
+ end
51
+
52
+ def self.operator
53
+ @operator ||= %w(
54
+ AND BASE CC CC_ENCODING CHR DEF EOR FATTR FEXEC FLOAD FSIZE INDEX LAND
55
+ LEFT LEN LEOR LNOT LOR LOWERCASE MOD NOT OR RCONST REVERSE_CC RIGHT ROL
56
+ ROR SHL SHR STR TARGET_ARCH_[0-9A-Z_]+ TARGET_FEATURE_[0-9A-Z_]+
57
+ TARGET_FPU_[A-Z_] TARGET_PROFILE_[ARM] UAL UPPERCASE
58
+ )
59
+ end
60
+
61
+ state :root do
62
+ rule %r/\n/, Text
63
+ rule %r/^([ \t]*)(#[ \t]*(?:(?:#{ArmAsm.preproc_keyword.join('|')})(?:[ \t].*)?)?)(\n)/ do
64
+ groups Text, Comment::Preproc, Text
65
+ end
66
+ rule %r/[ \t]+/, Text, :command
67
+ rule %r/;.*/, Comment
68
+ rule %r/\$[a-z_]\w*\.?/i, Name::Namespace # variable substitution or macro argument
69
+ rule %r/\w+|\|[^|\n]+\|/, Name::Label
70
+ end
71
+
72
+ state :command do
73
+ rule %r/\n/, Text, :pop!
74
+ rule %r/[ \t]+/ do |m|
75
+ token Text
76
+ goto :args
77
+ end
78
+ rule %r/;.*/, Comment, :pop!
79
+ rule %r/(?:#{ArmAsm.file_directive.join('|')})\b/ do |m|
80
+ token Keyword
81
+ goto :filespec
82
+ end
83
+ rule %r/(?:#{ArmAsm.general_directive.join('|')})(?=[; \t\n])/, Keyword
84
+ rule %r/(?:[A-Z][\dA-Z]*|[a-z][\da-z]*)(?:\.[NWnw])?(?:\.[DFIPSUdfipsu]?(?:8|16|32|64)?){,3}\b/, Name::Builtin # rather than attempt to list all opcodes, rely on all-uppercase or all-lowercase rule
85
+ rule %r/[a-z_]\w*|\|[^|\n]+\|/i, Name::Function # probably a macro name
86
+ rule %r/\$[a-z]\w*\.?/i, Name::Namespace
87
+ end
88
+
89
+ state :args do
90
+ rule %r/\n/, Text, :pop!
91
+ rule %r/[ \t]+/, Text
92
+ rule %r/;.*/, Comment, :pop!
93
+ rule %r/(?:#{ArmAsm.shift_or_condition.join('|')})\b/, Name::Builtin
94
+ rule %r/[a-z_]\w*|\|[^|\n]+\|/i, Name::Variable # various types of symbol
95
+ rule %r/%[bf]?[at]?\d+(?:[a-z_]\w*)?/i, Name::Label
96
+ rule %r/(?:&|0x)\h+(?!p)/i, Literal::Number::Hex
97
+ rule %r/(?:&|0x)[.\h]+(?:p[-+]?\d+)?/i, Literal::Number::Float
98
+ rule %r/0f_\h{8}|0d_\h{16}/i, Literal::Number::Float
99
+ rule %r/(?:2_[01]+|3_[0-2]+|4_[0-3]+|5_[0-4]+|6_[0-5]+|7_[0-6]+|8_[0-7]+|9_[0-8]+|\d+)(?!e)/i, Literal::Number::Integer
100
+ rule %r/(?:2_[.01]+|3_[.0-2]+|4_[.0-3]+|5_[.0-4]+|6_[.0-5]+|7_[.0-6]+|8_[.0-7]+|9_[.0-8]+|[.\d]+)(?:e[-+]?\d+)?/i, Literal::Number::Float
101
+ rule %r/[@:](?=[ \t]*(?:8|16|32|64|128|256)[^\d])/, Operator
102
+ rule %r/[.@]|\{(?:#{ArmAsm.builtin.join('|')})\}/, Name::Constant
103
+ rule %r/[-!#%&()*+,\/<=>?^{|}]|\[|\]|!=|&&|\/=|<<|<=|<>|==|><|>=|>>|\|\||:(?:#{ArmAsm.operator.join('|')}):/, Operator
104
+ rule %r/\$[a-z]\w*\.?/i, Name::Namespace
105
+ rule %r/'/ do |m|
106
+ token Literal::String::Char
107
+ goto :singlequoted
108
+ end
109
+ rule %r/"/ do |m|
110
+ token Literal::String::Double
111
+ goto :doublequoted
112
+ end
113
+ end
114
+
115
+ state :singlequoted do
116
+ rule %r/\n/, Text, :pop!
117
+ rule %r/\$\$/, Literal::String::Char
118
+ rule %r/\$[a-z]\w*\.?/i, Name::Namespace
119
+ rule %r/'/ do |m|
120
+ token Literal::String::Char
121
+ goto :args
122
+ end
123
+ rule %r/[^$'\n]+/, Literal::String::Char
124
+ end
125
+
126
+ state :doublequoted do
127
+ rule %r/\n/, Text, :pop!
128
+ rule %r/\$\$/, Literal::String::Double
129
+ rule %r/\$[a-z]\w*\.?/i, Name::Namespace
130
+ rule %r/"/ do |m|
131
+ token Literal::String::Double
132
+ goto :args
133
+ end
134
+ rule %r/[^$"\n]+/, Literal::String::Double
135
+ end
136
+
137
+ state :filespec do
138
+ rule %r/\n/, Text, :pop!
139
+ rule %r/\$\$/, Literal::String::Other
140
+ rule %r/\$[a-z]\w*\.?/i, Name::Namespace
141
+ rule %r/[^$\n]+/, Literal::String::Other
142
+ end
143
+ end
144
+ end
145
+ 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
@@ -46,7 +47,7 @@ module Rouge
46
47
  end
47
48
 
48
49
  state :comments_and_whitespace do
49
- rule /\s+/, Text
50
+ rule %r/\s+/, Text
50
51
  rule %r(#.*?$), Comment::Single
51
52
  end
52
53
 
@@ -56,7 +57,7 @@ module Rouge
56
57
  token Str::Regex
57
58
  goto :regex
58
59
  end
59
- rule //, Text, :pop!
60
+ rule %r//, Text, :pop!
60
61
  end
61
62
 
62
63
  state :regex do
@@ -67,14 +68,14 @@ module Rouge
67
68
 
68
69
  rule %r([^/]\n), Error, :pop!
69
70
 
70
- rule /\n/, Error, :pop!
71
- rule /\[\^/, Str::Escape, :regex_group
72
- rule /\[/, Str::Escape, :regex_group
73
- rule /\\./, Str::Escape
71
+ rule %r/\n/, Error, :pop!
72
+ rule %r/\[\^/, Str::Escape, :regex_group
73
+ rule %r/\[/, Str::Escape, :regex_group
74
+ rule %r/\\./, Str::Escape
74
75
  rule %r{[(][?][:=<!]}, Str::Escape
75
- rule /[{][\d,]+[}]/, Str::Escape
76
- rule /[()?]/, Str::Escape
77
- rule /./, Str::Regex
76
+ rule %r/[{][\d,]+[}]/, Str::Escape
77
+ rule %r/[()?]/, Str::Escape
78
+ rule %r/./, Str::Regex
78
79
  end
79
80
 
80
81
  state :regex_end do
@@ -84,20 +85,20 @@ module Rouge
84
85
  state :regex_group do
85
86
  # specially highlight / in a group to indicate that it doesn't
86
87
  # close the regex
87
- rule /\//, Str::Escape
88
+ rule %r(/), Str::Escape
88
89
 
89
90
  rule %r([^/]\n) do
90
91
  token Error
91
92
  pop! 2
92
93
  end
93
94
 
94
- rule /\]/, Str::Escape, :pop!
95
- rule /\\./, Str::Escape
96
- rule /./, Str::Regex
95
+ rule %r/\]/, Str::Escape, :pop!
96
+ rule %r/\\./, Str::Escape
97
+ rule %r/./, Str::Regex
97
98
  end
98
99
 
99
100
  state :bad_regex do
100
- rule /[^\n]+/, Error, :pop!
101
+ rule %r/[^\n]+/, Error, :pop!
101
102
  end
102
103
 
103
104
  state :root do
@@ -105,17 +106,17 @@ module Rouge
105
106
  rule %r((?<=\n)(?=\s|/)), Text, :expr_start
106
107
  rule %r([-<>+*/%\^!=]=?|in\b|\+\+|--|\|), Operator, :expr_start
107
108
  rule %r(&&|\|\||~!?), Operator, :expr_start
108
- rule /[(\[,]/, Punctuation, :expr_start
109
- rule /;/, Punctuation, :statement
110
- rule /[)\].]/, Punctuation
109
+ rule %r/[(\[,]/, Punctuation, :expr_start
110
+ rule %r/;/, Punctuation, :statement
111
+ rule %r/[)\].]/, Punctuation
111
112
 
112
- rule /[?]/ do
113
+ rule %r/[?]/ do
113
114
  token Punctuation
114
115
  push :ternary
115
116
  push :expr_start
116
117
  end
117
118
 
118
- rule /[{}]/, Punctuation, :statement
119
+ rule %r/[{}]/, Punctuation, :statement
119
120
 
120
121
  rule id do |m|
121
122
  if self.class.keywords.include? m[0]
@@ -137,19 +138,19 @@ module Rouge
137
138
  end
138
139
  end
139
140
 
140
- rule /[0-9]+\.[0-9]+/, Num::Float
141
- rule /[0-9]+/, Num::Integer
142
- rule /"(\\[\\"]|[^"])*"/, Str::Double
143
- rule /:/, Punctuation
141
+ rule %r/[0-9]+\.[0-9]+/, Num::Float
142
+ rule %r/[0-9]+/, Num::Integer
143
+ rule %r/"(\\[\\"]|[^"])*"/, Str::Double
144
+ rule %r/:/, Punctuation
144
145
  end
145
146
 
146
147
  state :statement do
147
- rule /[{}]/, Punctuation
148
+ rule %r/[{}]/, Punctuation
148
149
  mixin :expr_start
149
150
  end
150
151
 
151
152
  state :ternary do
152
- rule /:/ do
153
+ rule %r/:/ do
153
154
  token Punctuation
154
155
  goto :expr_start
155
156
  end
@@ -0,0 +1,164 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Batchfile < RegexLexer
7
+ title "Batchfile"
8
+ desc "Windows Batch File"
9
+
10
+ tag 'batchfile'
11
+ aliases 'bat', 'batch', 'dosbatch', 'winbatch'
12
+ filenames '*.bat', '*.cmd'
13
+
14
+ mimetypes 'application/bat', 'application/x-bat', 'application/x-msdos-program'
15
+
16
+ def self.keywords
17
+ @keywords ||= %w(
18
+ if else for in do goto call exit
19
+ )
20
+ end
21
+
22
+ def self.operator_words
23
+ @operator_words ||= %w(
24
+ exist defined errorlevel cmdextversion not equ neq lss leq gtr geq
25
+ )
26
+ end
27
+
28
+ def self.devices
29
+ @devices ||= %w(
30
+ con prn aux nul com1 com2 com3 com4 com5 com6 com7 com8 com9 lpt1 lpt2
31
+ lpt3 lpt4 lpt5 lpt6 lpt7 lpt8 lpt9
32
+ )
33
+ end
34
+
35
+ def self.builtin_commands
36
+ @builtin_commands ||= %w(
37
+ assoc attrib break bcdedit cacls cd chcp chdir chkdsk chkntfs choice
38
+ cls cmd color comp compact convert copy date del dir diskpart doskey
39
+ dpath driverquery echo endlocal erase fc find findstr format fsutil
40
+ ftype gpresult graftabl help icacls label md mkdir mklink mode more
41
+ move openfiles path pause popd print prompt pushd rd recover ren
42
+ rename replace rmdir robocopy setlocal sc schtasks shift shutdown sort
43
+ start subst systeminfo takeown tasklist taskkill time timeout title
44
+ tree type ver verify vol xcopy waitfor wmic
45
+ )
46
+ end
47
+
48
+ def self.other_commands
49
+ @other_commands ||= %w(
50
+ addusers admodcmd ansicon arp at bcdboot bitsadmin browstat certreq
51
+ certutil change cidiag cipher cleanmgr clip cmdkey compress convertcp
52
+ coreinfo csccmd csvde cscript curl debug defrag delprof deltree devcon
53
+ diamond dirquota diruse diskshadow diskuse dism dnscmd dsacls dsadd
54
+ dsget dsquery dsmod dsmove dsrm dsmgmt dsregcmd edlin eventcreate
55
+ expand extract fdisk fltmc forfiles freedisk ftp getmac gpupdate
56
+ hostname ifmember inuse ipconfig kill lgpo lodctr logman logoff
57
+ logtime makecab mapisend mbsacli mem mountvol moveuser msg mshta
58
+ msiexec msinfo32 mstsc nbtstat net net1 netdom netsh netstat nlsinfo
59
+ nltest now nslookup ntbackup ntdsutil ntoskrnl ntrights nvspbind
60
+ pathping perms ping portqry powercfg pngout pnputil printbrm prncnfg
61
+ prnmngr procdump psexec psfile psgetsid psinfo pskill pslist
62
+ psloggedon psloglist pspasswd psping psservice psshutdown pssuspend
63
+ qbasic qgrep qprocess query quser qwinsta rasdial reg reg1 regdump
64
+ regedt32 regsvr32 regini reset restore rundll32 rmtshare route rpcping
65
+ run runas scandisk setspn setx sfc share shellrunas shortcut sigcheck
66
+ sleep slmgr strings subinacl sysmon telnet tftp tlist touch tracerpt
67
+ tracert tscon tsdiscon tskill tttracer typeperf tzutil undelete
68
+ unformat verifier vmconnect vssadmin w32tm wbadmin wecutil wevtutil
69
+ wget where whoami windiff winrm winrs wpeutil wpr wusa wuauclt wscript
70
+ )
71
+ end
72
+
73
+ def self.attributes
74
+ @attributes ||= %w(
75
+ on off disable enableextensions enabledelayedexpansion
76
+ )
77
+ end
78
+
79
+ state :basic do
80
+ # Comments
81
+ rule %r/\brem\b.*$/i, Comment
82
+ # Empty Labels
83
+ rule %r/^::.*$/, Comment
84
+
85
+ # Labels
86
+ rule %r/:[a-z]+/i, Name::Label
87
+
88
+ rule %r/([a-z]\w*)(\.exe|com|bat|cmd|msi)?/i do |m|
89
+ if self.class.devices.include? m[1]
90
+ groups Keyword::Reserved, Error
91
+ elsif self.class.keywords.include? m[1]
92
+ groups Keyword, Error
93
+ elsif self.class.operator_words.include? m[1]
94
+ groups Operator::Word, Error
95
+ elsif self.class.builtin_commands.include? m[1]
96
+ token Name::Builtin
97
+ elsif self.class.other_commands.include? m[1]
98
+ token Name::Builtin
99
+ elsif self.class.attributes.include? m[1]
100
+ groups Name::Attribute, Error
101
+ elsif "set".casecmp m[1]
102
+ groups Keyword::Declaration, Error
103
+ else
104
+ token Text
105
+ end
106
+ end
107
+
108
+ rule %r/([\/\-+][a-z]+)\s*/i, Name::Attribute
109
+
110
+ mixin :expansions
111
+
112
+ rule %r/[<>&|(){}\[\]\-+=;,~?*]/, Operator
113
+ end
114
+
115
+ state :escape do
116
+ rule %r/\^./m, Str::Escape
117
+ end
118
+
119
+ state :expansions do
120
+ # Normal and Delayed expansion
121
+ rule %r/[%!]+([a-z_$@#]+)[%!]+/i, Name::Variable
122
+ # For Variables
123
+ rule %r/(\%+~?[a-z]+\d?)/i, Name::Variable::Magic
124
+ end
125
+
126
+ state :double_quotes do
127
+ mixin :escape
128
+ rule %r/["]/, Str::Double, :pop!
129
+ mixin :expansions
130
+ rule %r/[^\^"%!]+/, Str::Double
131
+ end
132
+
133
+ state :single_quotes do
134
+ mixin :escape
135
+ rule %r/[']/, Str::Single, :pop!
136
+ mixin :expansions
137
+ rule %r/[^\^'%!]+/, Str::Single
138
+ end
139
+
140
+ state :backtick do
141
+ mixin :escape
142
+ rule %r/[`]/, Str::Backtick, :pop!
143
+ mixin :expansions
144
+ rule %r/[^\^`%!]+/, Str::Backtick
145
+ end
146
+
147
+ state :data do
148
+ rule %r/\s+/, Text
149
+ rule %r/0x[0-9a-f]+/i, Literal::Number::Hex
150
+ rule %r/[0-9]/, Literal::Number
151
+ rule %r/["]/, Str::Double, :double_quotes
152
+ rule %r/[']/, Str::Single, :single_quotes
153
+ rule %r/[`]/, Str::Backtick, :backtick
154
+ rule %r/[^\s&|()\[\]{}\^=;!%+\-,"'`~?*]+/, Text
155
+ mixin :escape
156
+ end
157
+
158
+ state :root do
159
+ mixin :basic
160
+ mixin :data
161
+ end
162
+ end
163
+ end
164
+ end