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,112 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class BBCBASIC < RegexLexer
7
+ title "BBCBASIC"
8
+ desc "BBC BASIC syntax"
9
+ tag 'bbcbasic'
10
+ filenames '*,fd1'
11
+
12
+ def self.punctuation
13
+ @punctuation ||= %w(
14
+ [,;'~] SPC TAB
15
+ )
16
+ end
17
+
18
+ def self.function
19
+ @function ||= %w(
20
+ ABS ACS ADVAL ASC ASN ATN BEATS BEAT BGET# CHR\$ COS COUNT DEG DIM
21
+ EOF# ERL ERR EVAL EXP EXT# FN GET\$# GET\$ GET HIMEM INKEY\$ INKEY
22
+ INSTR INT LEFT\$ LEN LN LOG LOMEM MID\$ OPENIN OPENOUT OPENUP PAGE
23
+ POINT POS PTR# RAD REPORT\$ RIGHT\$ RND SGN SIN SQR STR\$ STRING\$ SUM
24
+ SUMLEN TAN TEMPO TIME\$ TIME TOP USR VAL VPOS
25
+ )
26
+ end
27
+
28
+ def self.statement
29
+ @statement ||= %w(
30
+ BEATS BPUT# CALL CASE CHAIN CLEAR CLG CLOSE# CLS COLOR COLOUR DATA
31
+ ELSE ENDCASE ENDIF ENDPROC ENDWHILE END ENVELOPE FOR GCOL GOSUB GOTO
32
+ IF INSTALL LET LIBRARY MODE NEXT OFF OF ON ORIGIN OSCI OTHERWISE
33
+ OVERLAY PLOT PRINT# PRINT PROC QUIT READ REPEAT REPORT RETURN SOUND
34
+ STEP STEREO STOP SWAP SYS THEN TINT TO VDU VOICES VOICE UNTIL WAIT
35
+ WHEN WHILE WIDTH
36
+ )
37
+ end
38
+
39
+ def self.operator
40
+ @operator ||= %w(
41
+ << <= <> < >= >>> >> > [-!$()*+/=?^|] AND DIV EOR MOD NOT OR
42
+ )
43
+ end
44
+
45
+ def self.constant
46
+ @constant ||= %w(
47
+ FALSE TRUE
48
+ )
49
+ end
50
+
51
+ state :expression do
52
+ rule %r/#{BBCBASIC.function.join('|')}/o, Name::Builtin # function or pseudo-variable
53
+ rule %r/#{BBCBASIC.operator.join('|')}/o, Operator
54
+ rule %r/#{BBCBASIC.constant.join('|')}/o, Name::Constant
55
+ rule %r/"[^"]*"/o, Literal::String
56
+ rule %r/[a-z_`][\w`]*[$%]?/io, Name::Variable
57
+ rule %r/@%/o, Name::Variable
58
+ rule %r/[\d.]+/o, Literal::Number
59
+ rule %r/%[01]+/o, Literal::Number::Bin
60
+ rule %r/&[\h]+/o, Literal::Number::Hex
61
+ end
62
+
63
+ state :root do
64
+ rule %r/(:+)( *)(\*)(.*)/ do
65
+ groups Punctuation, Text, Keyword, Text # CLI command
66
+ end
67
+ rule %r/(\n+ *)(\*)(.*)/ do
68
+ groups Text, Keyword, Text # CLI command
69
+ end
70
+ rule %r/(ELSE|OTHERWISE|REPEAT|THEN)( *)(\*)(.*)/ do
71
+ groups Keyword, Text, Keyword, Text # CLI command
72
+ end
73
+ rule %r/[ \n]+/o, Text
74
+ rule %r/:+/o, Punctuation
75
+ rule %r/[\[]/o, Keyword, :assembly1
76
+ rule %r/REM *>.*/o, Comment::Special
77
+ rule %r/REM.*/o, Comment
78
+ rule %r/(?:#{BBCBASIC.statement.join('|')}|CIRCLE(?: *FILL)?|DEF *(?:FN|PROC)|DRAW(?: *BY)?|DIM(?!\()|ELLIPSE(?: *FILL)?|ERROR(?: *EXT)?|FILL(?: *BY)?|INPUT(?:#| *LINE)?|LINE(?: *INPUT)?|LOCAL(?: *DATA| *ERROR)?|MOUSE(?: *COLOUR| *OFF| *ON| *RECTANGLE| *STEP| *TO)?|MOVE(?: *BY)?|ON(?! *ERROR)|ON *ERROR *(?:LOCAL|OFF)?|POINT(?: *BY)?(?!\()|RECTANGE(?: *FILL)?|RESTORE(?: *DATA| *ERROR)?|TRACE(?: *CLOSE| *ENDPROC| *OFF| *STEP(?: *FN| *ON| *PROC)?| *TO)?)/o, Keyword
79
+ mixin :expression
80
+ rule %r/#{BBCBASIC.punctuation.join('|')}/o, Punctuation
81
+ end
82
+
83
+ # Assembly statements are parsed as
84
+ # {label} {directive|opcode |']' {expressions}} {comment}
85
+ # Technically, you don't need whitespace between opcodes and arguments,
86
+ # but this is rare in uncrunched source and trying to enumerate all
87
+ # possible opcodes here is impractical so we colour it as though
88
+ # the whitespace is required. Opcodes and directives can only easily be
89
+ # distinguished from the symbols that make up expressions by looking at
90
+ # their position within the statement. Similarly, ']' is treated as a
91
+ # keyword at the start of a statement or as punctuation elsewhere. This
92
+ # requires a two-state state machine.
93
+
94
+ state :assembly1 do
95
+ rule %r/ +/o, Text
96
+ rule %r/]/o, Keyword, :pop!
97
+ rule %r/[:\n]/o, Punctuation
98
+ rule %r/\.[a-z_`][\w`]*%? */io, Name::Label
99
+ rule %r/(?:REM|;)[^:\n]*/o, Comment
100
+ rule %r/[^ :\n]+/o, Keyword, :assembly2
101
+ end
102
+
103
+ state :assembly2 do
104
+ rule %r/ +/o, Text
105
+ rule %r/[:\n]/o, Punctuation, :pop!
106
+ rule %r/(?:REM|;)[^:\n]*/o, Comment, :pop!
107
+ mixin :expression
108
+ rule %r/[!#,@\[\]^{}]/, Punctuation
109
+ end
110
+ end
111
+ end
112
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Rouge
2
4
  module Lexers
3
5
  load_lexer 'xml.rb'
@@ -24,16 +26,16 @@ module Rouge
24
26
  end
25
27
 
26
28
  state :directive_as_csharp do
27
- rule /\s*#>\s*/m, Name::Tag, :pop!
29
+ rule %r/\s*#>\s*/m, Name::Tag, :pop!
28
30
  rule %r(.*?(?=\s*#>\s*))m do
29
31
  delegate CSharp
30
32
  end
31
33
  end
32
34
 
33
35
  state :directive_tag do
34
- rule /\s+/m, Text
35
- rule /[\w.:-]+\s*=/m, Name::Attribute, :attr
36
- rule /[\w]+\s*/m, Name::Attribute
36
+ rule %r/\s+/m, Text
37
+ rule %r/[\w.:-]+\s*=/m, Name::Attribute, :attr
38
+ rule %r/\w+\s*/m, Name::Attribute
37
39
  rule %r(/?\s*#>), Name::Tag, :pop!
38
40
  end
39
41
  end
@@ -0,0 +1,118 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class BPF < RegexLexer
7
+ title "BPF"
8
+ desc "BPF bytecode syntax"
9
+ tag 'bpf'
10
+
11
+ TYPE_KEYWORDS = %w(
12
+ u8 u16 u32 u64 ll
13
+ ).join('|')
14
+
15
+ MISC_KEYWORDS = %w(
16
+ be16 be32 be64 exit lock map
17
+ ).join('|')
18
+
19
+ state :root do
20
+ # Line numbers and hexadecimal output from bpftool/objdump
21
+ rule %r/(\d+)(:)(\s+)(\(\h{2}\))/i do
22
+ groups Generic::Lineno, Punctuation, Text::Whitespace, Generic
23
+ end
24
+ rule %r/(\d+)(:)(\s+)((?:\h{2} ){8})/i do
25
+ groups Generic::Lineno, Punctuation, Text::Whitespace, Generic
26
+ end
27
+ rule %r/(\d+)(:)(\s+)/i do
28
+ groups Generic::Lineno, Punctuation, Text::Whitespace
29
+ end
30
+
31
+ # Calls to helpers
32
+ rule %r/(call)(\s+)(\d+)/i do
33
+ groups Keyword, Text::Whitespace, Literal::Number::Integer
34
+ end
35
+ rule %r/(call)(\s+)(\w+)(#)(\d+)/i do
36
+ groups Keyword, Text::Whitespace, Name::Builtin, Punctuation, Literal::Number::Integer
37
+ end
38
+
39
+ # Unconditional jumps
40
+ rule %r/(goto)(\s*)(\+\d+)?(\s*)(<?\w+>?)/i do
41
+ groups Keyword, Text::Whitespace, Literal::Number::Integer, Text::Whitespace, Name::Label
42
+ end
43
+
44
+ # Conditional jumps
45
+ rule %r/(if)(\s+)([rw]\d+)(\s*)([s!=<>]+)(\s*)(0x\h+|[-]?\d+)(\s*)(goto)(\s*)(\+\d+)?(\s*)(<?\w+>?)/i do
46
+ groups Keyword, Text::Whitespace, Name, Text::Whitespace, Operator, Text::Whitespace, Literal::Number, Text::Whitespace, Keyword, Text::Whitespace, Literal::Number::Integer, Text::Whitespace, Name::Label
47
+ end
48
+ rule %r/(if)(\s+)([rw]\d+)(\s*)([s!=<>]+)(\s*)([rw]\d+)(\s*)(goto)(\s*)(\+\d+)?(\s*)(<?\w+>?)/i do
49
+ groups Keyword, Text::Whitespace, Name, Text::Whitespace, Operator, Text::Whitespace, Name, Text::Whitespace, Keyword, Text::Whitespace, Literal::Number::Integer, Text::Whitespace, Name::Label
50
+ end
51
+
52
+ # Dereferences
53
+ rule %r/(\*)(\s*)(\()(#{TYPE_KEYWORDS})(\s*)(\*)(\))/i do
54
+ groups Operator, Text::Whitespace, Punctuation, Keyword::Type, Text::Whitespace, Operator, Punctuation
55
+ push :address
56
+ end
57
+
58
+ # Operators
59
+ rule %r/[+-\/\*&|><^s]{0,3}=/i, Operator
60
+
61
+ # Registers
62
+ rule %r/([+-]?)([rw]\d+)/i do
63
+ groups Punctuation, Name
64
+ end
65
+
66
+ # Comments
67
+ rule %r/\/\//, Comment::Single, :linecomment
68
+ rule %r/\/\*/, Comment::Multiline, :multilinescomment
69
+
70
+ rule %r/#{MISC_KEYWORDS}/i, Keyword
71
+
72
+ # Literals and global objects (maps) refered by name
73
+ rule %r/(0x\h+|[-]?\d+)(\s*)(ll)?/i do
74
+ groups Literal::Number, Text::Whitespace, Keyword::Type
75
+ end
76
+ rule %r/(\w+)(\s*)(ll)/i do
77
+ groups Name, Text::Whitespace, Keyword::Type
78
+ end
79
+
80
+ # Labels
81
+ rule %r/(\w+)(\s*)(:)/i do
82
+ groups Name::Label, Text::Whitespace, Punctuation
83
+ end
84
+
85
+ rule %r{.}m, Text
86
+ end
87
+
88
+ state :address do
89
+ # Address is offset from register
90
+ rule %r/(\()([rw]\d+)(\s*)([+-])(\s*)(\d+)(\))/i do
91
+ groups Punctuation, Name, Text::Whitespace, Operator, Text::Whitespace, Literal::Number::Integer, Punctuation
92
+ pop!
93
+ end
94
+
95
+ # Address is array subscript
96
+ rule %r/(\w+)(\[)(\d+)(\])/i do
97
+ groups Name, Punctuation, Literal::Number::Integer, Punctuation
98
+ pop!
99
+ end
100
+ rule %r/(\w+)(\[)([rw]\d+)(\])/i do
101
+ groups Name, Punctuation, Name, Punctuation
102
+ pop!
103
+ end
104
+ end
105
+
106
+ state :linecomment do
107
+ rule %r/\n/, Comment::Single, :pop!
108
+ rule %r/.+/, Comment::Single
109
+ end
110
+
111
+ state :multilinescomment do
112
+ rule %r/\*\//, Comment::Multiline, :pop!
113
+ rule %r/([^\*\/]+)/, Comment::Multiline
114
+ rule %r/([\*\/])/, Comment::Multiline
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,53 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Brainfuck < RegexLexer
7
+ tag 'brainfuck'
8
+ filenames '*.b', '*.bf'
9
+ mimetypes 'text/x-brainfuck'
10
+
11
+ title "Brainfuck"
12
+ desc "The Brainfuck programming language"
13
+
14
+ start { push :bol }
15
+
16
+ state :bol do
17
+ rule %r/\s+/m, Text
18
+ rule %r/\[/, Comment::Multiline, :comment_multi
19
+ rule(//) { pop! }
20
+ end
21
+
22
+ state :root do
23
+ rule %r/\]/, Error
24
+ rule %r/\[/, Punctuation, :loop
25
+
26
+ mixin :comment_single
27
+ mixin :commands
28
+ end
29
+
30
+ state :comment_multi do
31
+ rule %r/\[/, Comment::Multiline, :comment_multi
32
+ rule %r/\]/, Comment::Multiline, :pop!
33
+ rule %r/[^\[\]]+?/m, Comment::Multiline
34
+ end
35
+
36
+ state :comment_single do
37
+ rule %r/[^><+\-.,\[\]]+/, Comment::Single
38
+ end
39
+
40
+ state :loop do
41
+ rule %r/\[/, Punctuation, :loop
42
+ rule %r/\]/, Punctuation, :pop!
43
+ mixin :comment_single
44
+ mixin :commands
45
+ end
46
+
47
+ state :commands do
48
+ rule %r/[><]+/, Name::Builtin
49
+ rule %r/[+\-.,]+/, Name::Function
50
+ end
51
+ end
52
+ end
53
+ 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
@@ -59,22 +60,22 @@ module Rouge
59
60
  )\s*(?=\()/ix
60
61
 
61
62
  state :root do
62
- rule /\n/, Text
63
- rule /[^\S\n]+/, Text
64
- rule /\/\/.*$/, Comment::Single
65
- rule /[\[\]:(),;]/, Punctuation
66
- rule /(?<=[^\wа-яё]|^)\&.*$/, Keyword::Declaration
67
- rule /[-+\/=<>*%=<>.?&]/, Operator
68
- rule /(?<=[^\wа-яё]|^)\#.*$/, Keyword::Declaration
63
+ rule %r/\n/, Text
64
+ rule %r/[^\S\n]+/, Text
65
+ rule %r(//.*$), Comment::Single
66
+ rule %r/[\[\]:(),;]/, Punctuation
67
+ rule %r/(?<=[^\wа-яё]|^)\&.*$/, Keyword::Declaration
68
+ rule %r/[-+\/*%=<>.?&]/, Operator
69
+ rule %r/(?<=[^\wа-яё]|^)\#.*$/, Keyword::Declaration
69
70
  rule KEYWORDS, Keyword
70
71
  rule BUILTINS, Name::Builtin
71
- rule /[\wа-яё_][\wа-яё0-9_]*/i, Name::Variable
72
+ rule %r/[\wа-яё][\wа-яё]*/i, Name::Variable
72
73
 
73
74
  #literals
74
- rule /\b((\h{8}-(\h{4}-){3}\h{12})|\d+\.?\d*)\b/, Literal::Number
75
- rule /\'.*\'/, Literal::Date
76
- rule /".*?("|$)/, Literal::String::Single
77
- rule /(?<=[^\wа-яё]|^)\|((?!\"\").)*?(\"|$)/, Literal::String
75
+ rule %r/\b((\h{8}-(\h{4}-){3}\h{12})|\d+\.?\d*)\b/, Literal::Number
76
+ rule %r/\'.*\'/, Literal::Date
77
+ rule %r/".*?("|$)/, Literal::String::Single
78
+ rule %r/(?<=[^\wа-яё]|^)\|((?!\"\").)*?(\"|$)/, Literal::String
78
79
  end
79
80
  end
80
81
  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
@@ -64,8 +65,8 @@ module Rouge
64
65
  state :expr_bol do
65
66
  mixin :inline_whitespace
66
67
 
67
- rule /#if\s0/, Comment, :if_0
68
- rule /#/, Comment::Preproc, :macro
68
+ rule %r/#if\s0/, Comment, :if_0
69
+ rule %r/#/, Comment::Preproc, :macro
69
70
 
70
71
  rule(//) { pop! }
71
72
  end
@@ -73,41 +74,41 @@ module Rouge
73
74
  # :expr_bol is the same as :bol but without labels, since
74
75
  # labels can only appear at the beginning of a statement.
75
76
  state :bol do
76
- rule /#{id}:(?!:)/, Name::Label
77
+ rule %r/#{id}:(?!:)/, Name::Label
77
78
  mixin :expr_bol
78
79
  end
79
80
 
80
81
  state :inline_whitespace do
81
- rule /[ \t\r]+/, Text
82
- rule /\\\n/, Text # line continuation
82
+ rule %r/[ \t\r]+/, Text
83
+ rule %r/\\\n/, Text # line continuation
83
84
  rule %r(/(\\\n)?[*].*?[*](\\\n)?/)m, Comment::Multiline
84
85
  end
85
86
 
86
87
  state :whitespace do
87
- rule /\n+/m, Text, :bol
88
+ rule %r/\n+/m, Text, :bol
88
89
  rule %r(//(\\.|.)*?$), Comment::Single, :bol
89
90
  mixin :inline_whitespace
90
91
  end
91
92
 
92
93
  state :expr_whitespace do
93
- rule /\n+/m, Text, :expr_bol
94
+ rule %r/\n+/m, Text, :expr_bol
94
95
  mixin :whitespace
95
96
  end
96
97
 
97
98
  state :statements do
98
99
  mixin :whitespace
99
- rule /(u8|u|U|L)?"/, Str, :string
100
+ rule %r/(u8|u|U|L)?"/, Str, :string
100
101
  rule %r((u8|u|U|L)?'(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\'\n])')i, Str::Char
101
102
  rule %r((\d+[.]\d*|[.]?\d+)e[+-]?\d+[lu]*)i, Num::Float
102
103
  rule %r(\d+e[+-]?\d+[lu]*)i, Num::Float
103
- rule /0x[0-9a-f]+[lu]*/i, Num::Hex
104
- rule /0[0-7]+[lu]*/i, Num::Oct
105
- rule /\d+[lu]*/i, Num::Integer
104
+ rule %r/0x[0-9a-f]+[lu]*/i, Num::Hex
105
+ rule %r/0[0-7]+[lu]*/i, Num::Oct
106
+ rule %r/\d+[lu]*/i, Num::Integer
106
107
  rule %r(\*/), Error
107
108
  rule %r([~!%^&*+=\|?:<>/-]), Operator
108
- rule /[()\[\],.]/, Punctuation
109
- rule /\bcase\b/, Keyword, :case
110
- rule /(?:true|false|NULL)\b/, Name::Builtin
109
+ rule %r/[()\[\],.;]/, Punctuation
110
+ rule %r/\bcase\b/, Keyword, :case
111
+ rule %r/(?:true|false|NULL)\b/, Name::Builtin
111
112
  rule id do |m|
112
113
  name = m[0]
113
114
 
@@ -126,19 +127,17 @@ module Rouge
126
127
  end
127
128
 
128
129
  state :case do
129
- rule /:/, Punctuation, :pop!
130
+ rule %r/:/, Punctuation, :pop!
130
131
  mixin :statements
131
132
  end
132
133
 
133
134
  state :root do
134
135
  mixin :expr_whitespace
135
-
136
- # functions
137
136
  rule %r(
138
137
  ([\w*\s]+?[\s*]) # return arguments
139
138
  (#{id}) # function name
140
139
  (\s*\([^;]*?\)) # signature
141
- (#{ws})({) # open brace
140
+ (#{ws}?)({|;) # open brace or semicolon
142
141
  )mx do |m|
143
142
  # TODO: do this better.
144
143
  recurse m[1]
@@ -146,66 +145,45 @@ module Rouge
146
145
  recurse m[3]
147
146
  recurse m[4]
148
147
  token Punctuation, m[5]
149
- push :function
150
- end
151
-
152
- # function declarations
153
- rule %r(
154
- ([\w*\s]+?[\s*]) # return arguments
155
- (#{id}) # function name
156
- (\s*\([^;]*?\)) # signature
157
- (#{ws})(;) # semicolon
158
- )mx do |m|
159
- # TODO: do this better.
160
- recurse m[1]
161
- token Name::Function, m[2]
162
- recurse m[3]
163
- recurse m[4]
164
- token Punctuation, m[5]
165
- push :statement
148
+ if m[5] == ?{
149
+ push :function
150
+ end
166
151
  end
167
-
168
- rule(//) { push :statement }
169
- end
170
-
171
- state :statement do
172
- rule /;/, Punctuation, :pop!
173
- mixin :expr_whitespace
152
+ rule %r/\{/, Punctuation, :function
174
153
  mixin :statements
175
- rule /[{}]/, Punctuation
176
154
  end
177
155
 
178
156
  state :function do
179
157
  mixin :whitespace
180
158
  mixin :statements
181
- rule /;/, Punctuation
182
- rule /{/, Punctuation, :function
183
- rule /}/, Punctuation, :pop!
159
+ rule %r/;/, Punctuation
160
+ rule %r/{/, Punctuation, :function
161
+ rule %r/}/, Punctuation, :pop!
184
162
  end
185
163
 
186
164
  state :string do
187
- rule /"/, Str, :pop!
188
- rule /\\([\\abfnrtv"']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})/, Str::Escape
189
- rule /[^\\"\n]+/, Str
190
- rule /\\\n/, Str
191
- rule /\\/, Str # stray backslash
165
+ rule %r/"/, Str, :pop!
166
+ rule %r/\\([\\abfnrtv"']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})/, Str::Escape
167
+ rule %r/[^\\"\n]+/, Str
168
+ rule %r/\\\n/, Str
169
+ rule %r/\\/, Str # stray backslash
192
170
  end
193
171
 
194
172
  state :macro do
195
173
  # NB: pop! goes back to :bol
196
- rule /\n/, Comment::Preproc, :pop!
174
+ rule %r/\n/, Comment::Preproc, :pop!
197
175
  rule %r([^/\n\\]+), Comment::Preproc
198
- rule /\\./m, Comment::Preproc
176
+ rule %r/\\./m, Comment::Preproc
199
177
  mixin :inline_whitespace
200
178
  rule %r(/), Comment::Preproc
201
179
  end
202
180
 
203
181
  state :if_0 do
204
182
  # NB: no \b here, to cover #ifdef and #ifndef
205
- rule /^\s*#if/, Comment, :if_0
206
- rule /^\s*#\s*el(?:se|if)/, Comment, :pop!
207
- rule /^\s*#\s*endif\b.*?(?<!\\)\n/m, Comment, :pop!
208
- rule /.*?\n/, Comment
183
+ rule %r/^\s*#if/, Comment, :if_0
184
+ rule %r/^\s*#\s*el(?:se|if)/, Comment, :pop!
185
+ rule %r/^\s*#\s*endif\b.*?(?<!\\)\n/m, Comment, :pop!
186
+ rule %r/.*?\n/, Comment
209
187
  end
210
188
  end
211
189
  end