rouge 3.17.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 (429) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +40 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +18 -0
  5. data/lib/rouge.rb +93 -0
  6. data/lib/rouge/cli.rb +498 -0
  7. data/lib/rouge/demos/abap +6 -0
  8. data/lib/rouge/demos/actionscript +4 -0
  9. data/lib/rouge/demos/ada +26 -0
  10. data/lib/rouge/demos/apache +21 -0
  11. data/lib/rouge/demos/apex +9 -0
  12. data/lib/rouge/demos/apiblueprint +33 -0
  13. data/lib/rouge/demos/applescript +2 -0
  14. data/lib/rouge/demos/armasm +12 -0
  15. data/lib/rouge/demos/awk +4 -0
  16. data/lib/rouge/demos/batchfile +3 -0
  17. data/lib/rouge/demos/bbcbasic +6 -0
  18. data/lib/rouge/demos/biml +38 -0
  19. data/lib/rouge/demos/bpf +7 -0
  20. data/lib/rouge/demos/brainfuck +5 -0
  21. data/lib/rouge/demos/bsl +7 -0
  22. data/lib/rouge/demos/c +8 -0
  23. data/lib/rouge/demos/ceylon +7 -0
  24. data/lib/rouge/demos/cfscript +18 -0
  25. data/lib/rouge/demos/clean +6 -0
  26. data/lib/rouge/demos/clojure +5 -0
  27. data/lib/rouge/demos/cmake +7 -0
  28. data/lib/rouge/demos/cmhg +8 -0
  29. data/lib/rouge/demos/coffeescript +5 -0
  30. data/lib/rouge/demos/common_lisp +1 -0
  31. data/lib/rouge/demos/conf +4 -0
  32. data/lib/rouge/demos/console +6 -0
  33. data/lib/rouge/demos/coq +13 -0
  34. data/lib/rouge/demos/cpp +8 -0
  35. data/lib/rouge/demos/crystal +45 -0
  36. data/lib/rouge/demos/csharp +5 -0
  37. data/lib/rouge/demos/css +4 -0
  38. data/lib/rouge/demos/csvs +8 -0
  39. data/lib/rouge/demos/cuda +11 -0
  40. data/lib/rouge/demos/cython +6 -0
  41. data/lib/rouge/demos/d +16 -0
  42. data/lib/rouge/demos/dart +6 -0
  43. data/lib/rouge/demos/diff +7 -0
  44. data/lib/rouge/demos/digdag +19 -0
  45. data/lib/rouge/demos/docker +9 -0
  46. data/lib/rouge/demos/dot +5 -0
  47. data/lib/rouge/demos/ecl +18 -0
  48. data/lib/rouge/demos/eex +1 -0
  49. data/lib/rouge/demos/eiffel +30 -0
  50. data/lib/rouge/demos/elixir +1 -0
  51. data/lib/rouge/demos/elm +4 -0
  52. data/lib/rouge/demos/epp +4 -0
  53. data/lib/rouge/demos/erb +1 -0
  54. data/lib/rouge/demos/erlang +7 -0
  55. data/lib/rouge/demos/escape +3 -0
  56. data/lib/rouge/demos/factor +5 -0
  57. data/lib/rouge/demos/fortran +22 -0
  58. data/lib/rouge/demos/freefem +16 -0
  59. data/lib/rouge/demos/fsharp +12 -0
  60. data/lib/rouge/demos/gdscript +18 -0
  61. data/lib/rouge/demos/ghc-core +26 -0
  62. data/lib/rouge/demos/gherkin +17 -0
  63. data/lib/rouge/demos/glsl +14 -0
  64. data/lib/rouge/demos/go +7 -0
  65. data/lib/rouge/demos/gradle +10 -0
  66. data/lib/rouge/demos/graphql +17 -0
  67. data/lib/rouge/demos/groovy +9 -0
  68. data/lib/rouge/demos/hack +5 -0
  69. data/lib/rouge/demos/haml +5 -0
  70. data/lib/rouge/demos/handlebars +7 -0
  71. data/lib/rouge/demos/haskell +6 -0
  72. data/lib/rouge/demos/haxe +5 -0
  73. data/lib/rouge/demos/hcl +7 -0
  74. data/lib/rouge/demos/hocon +8 -0
  75. data/lib/rouge/demos/hql +5 -0
  76. data/lib/rouge/demos/html +8 -0
  77. data/lib/rouge/demos/http +14 -0
  78. data/lib/rouge/demos/hylang +10 -0
  79. data/lib/rouge/demos/idlang +8 -0
  80. data/lib/rouge/demos/igorpro +9 -0
  81. data/lib/rouge/demos/ini +4 -0
  82. data/lib/rouge/demos/io +11 -0
  83. data/lib/rouge/demos/irb +4 -0
  84. data/lib/rouge/demos/irb_output +2 -0
  85. data/lib/rouge/demos/java +5 -0
  86. data/lib/rouge/demos/javascript +1 -0
  87. data/lib/rouge/demos/jinja +9 -0
  88. data/lib/rouge/demos/jsl +3 -0
  89. data/lib/rouge/demos/json +1 -0
  90. data/lib/rouge/demos/json-doc +1 -0
  91. data/lib/rouge/demos/jsonnet +28 -0
  92. data/lib/rouge/demos/jsp +29 -0
  93. data/lib/rouge/demos/jsx +17 -0
  94. data/lib/rouge/demos/julia +11 -0
  95. data/lib/rouge/demos/kotlin +3 -0
  96. data/lib/rouge/demos/lasso +12 -0
  97. data/lib/rouge/demos/liquid +10 -0
  98. data/lib/rouge/demos/literate_coffeescript +3 -0
  99. data/lib/rouge/demos/literate_haskell +7 -0
  100. data/lib/rouge/demos/llvm +20 -0
  101. data/lib/rouge/demos/lua +12 -0
  102. data/lib/rouge/demos/lustre +6 -0
  103. data/lib/rouge/demos/lutin +18 -0
  104. data/lib/rouge/demos/m68k +16 -0
  105. data/lib/rouge/demos/magik +6 -0
  106. data/lib/rouge/demos/make +6 -0
  107. data/lib/rouge/demos/markdown +4 -0
  108. data/lib/rouge/demos/mason +22 -0
  109. data/lib/rouge/demos/mathematica +8 -0
  110. data/lib/rouge/demos/matlab +6 -0
  111. data/lib/rouge/demos/minizinc +23 -0
  112. data/lib/rouge/demos/moonscript +16 -0
  113. data/lib/rouge/demos/mosel +10 -0
  114. data/lib/rouge/demos/msgtrans +4 -0
  115. data/lib/rouge/demos/mxml +22 -0
  116. data/lib/rouge/demos/nasm +26 -0
  117. data/lib/rouge/demos/nesasm +11 -0
  118. data/lib/rouge/demos/nginx +5 -0
  119. data/lib/rouge/demos/nim +27 -0
  120. data/lib/rouge/demos/nix +19 -0
  121. data/lib/rouge/demos/objective_c +18 -0
  122. data/lib/rouge/demos/objective_cpp +17 -0
  123. data/lib/rouge/demos/ocaml +12 -0
  124. data/lib/rouge/demos/openedge +4 -0
  125. data/lib/rouge/demos/opentype_feature_file +6 -0
  126. data/lib/rouge/demos/pascal +14 -0
  127. data/lib/rouge/demos/perl +5 -0
  128. data/lib/rouge/demos/php +3 -0
  129. data/lib/rouge/demos/plaintext +1 -0
  130. data/lib/rouge/demos/plist +11 -0
  131. data/lib/rouge/demos/pony +17 -0
  132. data/lib/rouge/demos/powershell +13 -0
  133. data/lib/rouge/demos/praat +26 -0
  134. data/lib/rouge/demos/prolog +9 -0
  135. data/lib/rouge/demos/prometheus +9 -0
  136. data/lib/rouge/demos/properties +7 -0
  137. data/lib/rouge/demos/protobuf +5 -0
  138. data/lib/rouge/demos/puppet +6 -0
  139. data/lib/rouge/demos/python +6 -0
  140. data/lib/rouge/demos/q +8 -0
  141. data/lib/rouge/demos/qml +9 -0
  142. data/lib/rouge/demos/r +8 -0
  143. data/lib/rouge/demos/racket +24 -0
  144. data/lib/rouge/demos/reasonml +12 -0
  145. data/lib/rouge/demos/robot_framework +27 -0
  146. data/lib/rouge/demos/ruby +9 -0
  147. data/lib/rouge/demos/rust +12 -0
  148. data/lib/rouge/demos/sas +13 -0
  149. data/lib/rouge/demos/sass +3 -0
  150. data/lib/rouge/demos/scala +3 -0
  151. data/lib/rouge/demos/scheme +4 -0
  152. data/lib/rouge/demos/scss +5 -0
  153. data/lib/rouge/demos/sed +4 -0
  154. data/lib/rouge/demos/shell +2 -0
  155. data/lib/rouge/demos/sieve +10 -0
  156. data/lib/rouge/demos/slice +10 -0
  157. data/lib/rouge/demos/slim +17 -0
  158. data/lib/rouge/demos/smalltalk +6 -0
  159. data/lib/rouge/demos/smarty +12 -0
  160. data/lib/rouge/demos/sml +4 -0
  161. data/lib/rouge/demos/sparql +6 -0
  162. data/lib/rouge/demos/sqf +14 -0
  163. data/lib/rouge/demos/sql +1 -0
  164. data/lib/rouge/demos/supercollider +11 -0
  165. data/lib/rouge/demos/swift +5 -0
  166. data/lib/rouge/demos/tap +5 -0
  167. data/lib/rouge/demos/tcl +1 -0
  168. data/lib/rouge/demos/terraform +16 -0
  169. data/lib/rouge/demos/tex +1 -0
  170. data/lib/rouge/demos/toml +9 -0
  171. data/lib/rouge/demos/tsx +17 -0
  172. data/lib/rouge/demos/ttcn3 +6 -0
  173. data/lib/rouge/demos/tulip +13 -0
  174. data/lib/rouge/demos/turtle +26 -0
  175. data/lib/rouge/demos/twig +9 -0
  176. data/lib/rouge/demos/typescript +1 -0
  177. data/lib/rouge/demos/vala +8 -0
  178. data/lib/rouge/demos/vb +4 -0
  179. data/lib/rouge/demos/vcl +12 -0
  180. data/lib/rouge/demos/verilog +27 -0
  181. data/lib/rouge/demos/vhdl +23 -0
  182. data/lib/rouge/demos/viml +14 -0
  183. data/lib/rouge/demos/vue +11 -0
  184. data/lib/rouge/demos/wollok +11 -0
  185. data/lib/rouge/demos/xml +2 -0
  186. data/lib/rouge/demos/xojo +14 -0
  187. data/lib/rouge/demos/xpath +2 -0
  188. data/lib/rouge/demos/xquery +22 -0
  189. data/lib/rouge/demos/yaml +4 -0
  190. data/lib/rouge/formatter.rb +112 -0
  191. data/lib/rouge/formatters/html.rb +56 -0
  192. data/lib/rouge/formatters/html_inline.rb +31 -0
  193. data/lib/rouge/formatters/html_legacy.rb +45 -0
  194. data/lib/rouge/formatters/html_line_table.rb +53 -0
  195. data/lib/rouge/formatters/html_linewise.rb +23 -0
  196. data/lib/rouge/formatters/html_pygments.rb +18 -0
  197. data/lib/rouge/formatters/html_table.rb +51 -0
  198. data/lib/rouge/formatters/null.rb +20 -0
  199. data/lib/rouge/formatters/terminal256.rb +198 -0
  200. data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
  201. data/lib/rouge/formatters/tex.rb +92 -0
  202. data/lib/rouge/guesser.rb +57 -0
  203. data/lib/rouge/guessers/disambiguation.rb +136 -0
  204. data/lib/rouge/guessers/filename.rb +27 -0
  205. data/lib/rouge/guessers/glob_mapping.rb +45 -0
  206. data/lib/rouge/guessers/mimetype.rb +16 -0
  207. data/lib/rouge/guessers/modeline.rb +46 -0
  208. data/lib/rouge/guessers/source.rb +31 -0
  209. data/lib/rouge/guessers/util.rb +34 -0
  210. data/lib/rouge/lexer.rb +516 -0
  211. data/lib/rouge/lexers/abap.rb +240 -0
  212. data/lib/rouge/lexers/actionscript.rb +196 -0
  213. data/lib/rouge/lexers/ada.rb +162 -0
  214. data/lib/rouge/lexers/apache.rb +73 -0
  215. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  216. data/lib/rouge/lexers/apex.rb +126 -0
  217. data/lib/rouge/lexers/apiblueprint.rb +49 -0
  218. data/lib/rouge/lexers/apple_script.rb +370 -0
  219. data/lib/rouge/lexers/armasm.rb +145 -0
  220. data/lib/rouge/lexers/awk.rb +162 -0
  221. data/lib/rouge/lexers/batchfile.rb +164 -0
  222. data/lib/rouge/lexers/bbcbasic.rb +112 -0
  223. data/lib/rouge/lexers/biml.rb +43 -0
  224. data/lib/rouge/lexers/bpf.rb +118 -0
  225. data/lib/rouge/lexers/brainfuck.rb +53 -0
  226. data/lib/rouge/lexers/bsl.rb +82 -0
  227. data/lib/rouge/lexers/c.rb +190 -0
  228. data/lib/rouge/lexers/ceylon.rb +96 -0
  229. data/lib/rouge/lexers/cfscript.rb +154 -0
  230. data/lib/rouge/lexers/clean.rb +156 -0
  231. data/lib/rouge/lexers/clojure.rb +113 -0
  232. data/lib/rouge/lexers/cmake.rb +207 -0
  233. data/lib/rouge/lexers/cmhg.rb +34 -0
  234. data/lib/rouge/lexers/coffeescript.rb +215 -0
  235. data/lib/rouge/lexers/common_lisp.rb +346 -0
  236. data/lib/rouge/lexers/conf.rb +25 -0
  237. data/lib/rouge/lexers/console.rb +174 -0
  238. data/lib/rouge/lexers/coq.rb +191 -0
  239. data/lib/rouge/lexers/cpp.rb +82 -0
  240. data/lib/rouge/lexers/crystal.rb +430 -0
  241. data/lib/rouge/lexers/csharp.rb +114 -0
  242. data/lib/rouge/lexers/css.rb +274 -0
  243. data/lib/rouge/lexers/csvs.rb +44 -0
  244. data/lib/rouge/lexers/cuda.rb +35 -0
  245. data/lib/rouge/lexers/cython.rb +151 -0
  246. data/lib/rouge/lexers/d.rb +177 -0
  247. data/lib/rouge/lexers/dart.rb +105 -0
  248. data/lib/rouge/lexers/diff.rb +37 -0
  249. data/lib/rouge/lexers/digdag.rb +70 -0
  250. data/lib/rouge/lexers/docker.rb +51 -0
  251. data/lib/rouge/lexers/dot.rb +69 -0
  252. data/lib/rouge/lexers/ecl.rb +175 -0
  253. data/lib/rouge/lexers/eex.rb +52 -0
  254. data/lib/rouge/lexers/eiffel.rb +66 -0
  255. data/lib/rouge/lexers/elixir.rb +149 -0
  256. data/lib/rouge/lexers/elm.rb +90 -0
  257. data/lib/rouge/lexers/epp.rb +51 -0
  258. data/lib/rouge/lexers/erb.rb +53 -0
  259. data/lib/rouge/lexers/erlang.rb +115 -0
  260. data/lib/rouge/lexers/escape.rb +58 -0
  261. data/lib/rouge/lexers/factor.rb +303 -0
  262. data/lib/rouge/lexers/fortran.rb +178 -0
  263. data/lib/rouge/lexers/freefem.rb +240 -0
  264. data/lib/rouge/lexers/fsharp.rb +119 -0
  265. data/lib/rouge/lexers/gdscript.rb +171 -0
  266. data/lib/rouge/lexers/ghc_core.rb +151 -0
  267. data/lib/rouge/lexers/gherkin.rb +140 -0
  268. data/lib/rouge/lexers/gherkin/keywords.rb +16 -0
  269. data/lib/rouge/lexers/glsl.rb +132 -0
  270. data/lib/rouge/lexers/go.rb +175 -0
  271. data/lib/rouge/lexers/gradle.rb +38 -0
  272. data/lib/rouge/lexers/graphql.rb +261 -0
  273. data/lib/rouge/lexers/groovy.rb +111 -0
  274. data/lib/rouge/lexers/hack.rb +49 -0
  275. data/lib/rouge/lexers/haml.rb +226 -0
  276. data/lib/rouge/lexers/handlebars.rb +91 -0
  277. data/lib/rouge/lexers/haskell.rb +199 -0
  278. data/lib/rouge/lexers/haxe.rb +246 -0
  279. data/lib/rouge/lexers/hcl.rb +163 -0
  280. data/lib/rouge/lexers/hocon.rb +86 -0
  281. data/lib/rouge/lexers/hql.rb +139 -0
  282. data/lib/rouge/lexers/html.rb +141 -0
  283. data/lib/rouge/lexers/http.rb +81 -0
  284. data/lib/rouge/lexers/hylang.rb +94 -0
  285. data/lib/rouge/lexers/idlang.rb +312 -0
  286. data/lib/rouge/lexers/igorpro.rb +664 -0
  287. data/lib/rouge/lexers/ini.rb +54 -0
  288. data/lib/rouge/lexers/io.rb +69 -0
  289. data/lib/rouge/lexers/irb.rb +67 -0
  290. data/lib/rouge/lexers/java.rb +91 -0
  291. data/lib/rouge/lexers/javascript.rb +279 -0
  292. data/lib/rouge/lexers/jinja.rb +154 -0
  293. data/lib/rouge/lexers/jsl.rb +55 -0
  294. data/lib/rouge/lexers/json.rb +69 -0
  295. data/lib/rouge/lexers/json_doc.rb +25 -0
  296. data/lib/rouge/lexers/jsonnet.rb +152 -0
  297. data/lib/rouge/lexers/jsp.rb +120 -0
  298. data/lib/rouge/lexers/jsx.rb +104 -0
  299. data/lib/rouge/lexers/julia.rb +290 -0
  300. data/lib/rouge/lexers/kotlin.rb +127 -0
  301. data/lib/rouge/lexers/lasso.rb +215 -0
  302. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  303. data/lib/rouge/lexers/liquid.rb +285 -0
  304. data/lib/rouge/lexers/literate_coffeescript.rb +34 -0
  305. data/lib/rouge/lexers/literate_haskell.rb +37 -0
  306. data/lib/rouge/lexers/llvm.rb +97 -0
  307. data/lib/rouge/lexers/lua.rb +164 -0
  308. data/lib/rouge/lexers/lua/builtins.rb +24 -0
  309. data/lib/rouge/lexers/lustre.rb +79 -0
  310. data/lib/rouge/lexers/lutin.rb +33 -0
  311. data/lib/rouge/lexers/m68k.rb +143 -0
  312. data/lib/rouge/lexers/magik.rb +127 -0
  313. data/lib/rouge/lexers/make.rb +135 -0
  314. data/lib/rouge/lexers/markdown.rb +182 -0
  315. data/lib/rouge/lexers/mason.rb +110 -0
  316. data/lib/rouge/lexers/mathematica.rb +96 -0
  317. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  318. data/lib/rouge/lexers/matlab.rb +81 -0
  319. data/lib/rouge/lexers/matlab/builtins.yml +3515 -0
  320. data/lib/rouge/lexers/minizinc.rb +87 -0
  321. data/lib/rouge/lexers/moonscript.rb +115 -0
  322. data/lib/rouge/lexers/mosel.rb +232 -0
  323. data/lib/rouge/lexers/msgtrans.rb +26 -0
  324. data/lib/rouge/lexers/mxml.rb +69 -0
  325. data/lib/rouge/lexers/nasm.rb +72 -0
  326. data/lib/rouge/lexers/nesasm.rb +78 -0
  327. data/lib/rouge/lexers/nginx.rb +72 -0
  328. data/lib/rouge/lexers/nim.rb +154 -0
  329. data/lib/rouge/lexers/nix.rb +211 -0
  330. data/lib/rouge/lexers/objective_c.rb +21 -0
  331. data/lib/rouge/lexers/objective_c/common.rb +184 -0
  332. data/lib/rouge/lexers/objective_cpp.rb +31 -0
  333. data/lib/rouge/lexers/ocaml.rb +65 -0
  334. data/lib/rouge/lexers/ocaml/common.rb +53 -0
  335. data/lib/rouge/lexers/openedge.rb +429 -0
  336. data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
  337. data/lib/rouge/lexers/pascal.rb +67 -0
  338. data/lib/rouge/lexers/perl.rb +231 -0
  339. data/lib/rouge/lexers/php.rb +216 -0
  340. data/lib/rouge/lexers/php/builtins.rb +203 -0
  341. data/lib/rouge/lexers/plain_text.rb +27 -0
  342. data/lib/rouge/lexers/plist.rb +47 -0
  343. data/lib/rouge/lexers/pony.rb +94 -0
  344. data/lib/rouge/lexers/powershell.rb +230 -0
  345. data/lib/rouge/lexers/praat.rb +351 -0
  346. data/lib/rouge/lexers/prolog.rb +67 -0
  347. data/lib/rouge/lexers/prometheus.rb +123 -0
  348. data/lib/rouge/lexers/properties.rb +52 -0
  349. data/lib/rouge/lexers/protobuf.rb +71 -0
  350. data/lib/rouge/lexers/puppet.rb +129 -0
  351. data/lib/rouge/lexers/python.rb +248 -0
  352. data/lib/rouge/lexers/q.rb +126 -0
  353. data/lib/rouge/lexers/qml.rb +74 -0
  354. data/lib/rouge/lexers/r.rb +89 -0
  355. data/lib/rouge/lexers/racket.rb +545 -0
  356. data/lib/rouge/lexers/reasonml.rb +65 -0
  357. data/lib/rouge/lexers/robot_framework.rb +249 -0
  358. data/lib/rouge/lexers/ruby.rb +444 -0
  359. data/lib/rouge/lexers/rust.rb +193 -0
  360. data/lib/rouge/lexers/sas.rb +563 -0
  361. data/lib/rouge/lexers/sass.rb +75 -0
  362. data/lib/rouge/lexers/sass/common.rb +181 -0
  363. data/lib/rouge/lexers/scala.rb +169 -0
  364. data/lib/rouge/lexers/scheme.rb +113 -0
  365. data/lib/rouge/lexers/scss.rb +35 -0
  366. data/lib/rouge/lexers/sed.rb +173 -0
  367. data/lib/rouge/lexers/shell.rb +201 -0
  368. data/lib/rouge/lexers/sieve.rb +97 -0
  369. data/lib/rouge/lexers/slice.rb +32 -0
  370. data/lib/rouge/lexers/slim.rb +229 -0
  371. data/lib/rouge/lexers/smalltalk.rb +117 -0
  372. data/lib/rouge/lexers/smarty.rb +81 -0
  373. data/lib/rouge/lexers/sml.rb +345 -0
  374. data/lib/rouge/lexers/sparql.rb +129 -0
  375. data/lib/rouge/lexers/sqf.rb +109 -0
  376. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  377. data/lib/rouge/lexers/sql.rb +161 -0
  378. data/lib/rouge/lexers/supercollider.rb +116 -0
  379. data/lib/rouge/lexers/swift.rb +186 -0
  380. data/lib/rouge/lexers/tap.rb +89 -0
  381. data/lib/rouge/lexers/tcl.rb +193 -0
  382. data/lib/rouge/lexers/terraform.rb +113 -0
  383. data/lib/rouge/lexers/tex.rb +70 -0
  384. data/lib/rouge/lexers/toml.rb +106 -0
  385. data/lib/rouge/lexers/tsx.rb +20 -0
  386. data/lib/rouge/lexers/ttcn3.rb +119 -0
  387. data/lib/rouge/lexers/tulip.rb +108 -0
  388. data/lib/rouge/lexers/turtle.rb +61 -0
  389. data/lib/rouge/lexers/twig.rb +40 -0
  390. data/lib/rouge/lexers/typescript.rb +30 -0
  391. data/lib/rouge/lexers/typescript/common.rb +34 -0
  392. data/lib/rouge/lexers/vala.rb +78 -0
  393. data/lib/rouge/lexers/varnish.rb +168 -0
  394. data/lib/rouge/lexers/vb.rb +165 -0
  395. data/lib/rouge/lexers/verilog.rb +163 -0
  396. data/lib/rouge/lexers/vhdl.rb +98 -0
  397. data/lib/rouge/lexers/viml.rb +102 -0
  398. data/lib/rouge/lexers/viml/keywords.rb +14 -0
  399. data/lib/rouge/lexers/vue.rb +124 -0
  400. data/lib/rouge/lexers/wollok.rb +104 -0
  401. data/lib/rouge/lexers/xml.rb +54 -0
  402. data/lib/rouge/lexers/xojo.rb +61 -0
  403. data/lib/rouge/lexers/xpath.rb +332 -0
  404. data/lib/rouge/lexers/xquery.rb +145 -0
  405. data/lib/rouge/lexers/yaml.rb +376 -0
  406. data/lib/rouge/plugins/redcarpet.rb +37 -0
  407. data/lib/rouge/regex_lexer.rb +443 -0
  408. data/lib/rouge/template_lexer.rb +21 -0
  409. data/lib/rouge/tex_theme_renderer.rb +132 -0
  410. data/lib/rouge/text_analyzer.rb +50 -0
  411. data/lib/rouge/theme.rb +218 -0
  412. data/lib/rouge/themes/base16.rb +131 -0
  413. data/lib/rouge/themes/bw.rb +41 -0
  414. data/lib/rouge/themes/colorful.rb +68 -0
  415. data/lib/rouge/themes/github.rb +72 -0
  416. data/lib/rouge/themes/gruvbox.rb +168 -0
  417. data/lib/rouge/themes/igor_pro.rb +21 -0
  418. data/lib/rouge/themes/magritte.rb +78 -0
  419. data/lib/rouge/themes/molokai.rb +83 -0
  420. data/lib/rouge/themes/monokai.rb +93 -0
  421. data/lib/rouge/themes/monokai_sublime.rb +93 -0
  422. data/lib/rouge/themes/pastie.rb +70 -0
  423. data/lib/rouge/themes/thankful_eyes.rb +75 -0
  424. data/lib/rouge/themes/tulip.rb +70 -0
  425. data/lib/rouge/token.rb +191 -0
  426. data/lib/rouge/util.rb +102 -0
  427. data/lib/rouge/version.rb +8 -0
  428. data/rouge.gemspec +26 -0
  429. metadata +476 -0
@@ -0,0 +1,240 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ load_lexer 'cpp.rb'
7
+
8
+ class FreeFEM < Cpp
9
+ title "FreeFEM"
10
+ desc "The FreeFEM programming language (freefem.org)"
11
+
12
+ tag 'freefem'
13
+ aliases 'ff'
14
+ filenames '*.edp', '*.idp'
15
+ mimetypes 'text/x-ffhdr', 'text/x-ffsrc'
16
+
17
+ # Override C/C++ ones (for example, `do` does not exists)
18
+ def self.keywords
19
+ @keywords ||= Set.new(%w(
20
+ break catch continue else for if return try while
21
+ ))
22
+ end
23
+
24
+ # Override C/C++ ones (for example, `double` does not exists)
25
+ def self.keywords_type
26
+ @keywords_type ||= Set.new(%w(
27
+ bool border complex dmatrix fespace func gslspline ifstream int macro
28
+ matrix mesh mesh3 mpiComm mpiGroup mpiRequest NewMacro EndMacro
29
+ ofstream Pmmap problem Psemaphore real solve string varf
30
+ ))
31
+ end
32
+
33
+ # Override C/C++ ones (totally different)
34
+ def self.reserved
35
+ @reserved ||= Set.new(%w(
36
+ BDM1 BDM1Ortho Edge03d Edge13d Edge23d FEQF HCT P0 P03d P0Edge P1
37
+ P13d P1b P1b3d P1bl P1bl3d P1dc P1Edge P1nc P2 P23d P2b P2BR P2dc
38
+ P2Edge P2h P2Morley P2pnc P3 P3dc P3Edge P4 P4dc P4Edge P5Edge RT0
39
+ RT03d RT0Ortho RT1 RT1Ortho RT2 RT2Ortho
40
+
41
+ qf1pE qf1pElump qf1pT qf1pTlump qfV1 qfV1lump qf2pE qf2pT qf2pT4P1
42
+ qfV2 qf3pE qf4pE qf5pE qf5pT qfV5 qf7pT qf9pT qfnbpE
43
+
44
+ ARGV append area be binary BoundaryEdge bordermeasure CG Cholesky cin
45
+ cout Crout default diag edgeOrientation endl FILE fixed GMRES good
46
+ hTriangle im imax imin InternalEdge l1 l2 label lenEdge length LINE
47
+ linfty LU m max measure min mpiAnySource mpiBAND mpiBXOR mpiCommWorld
48
+ mpiLAND mpiLOR mpiLXOR mpiMAX mpiMIN mpiPROD mpirank mpisize mpiSUM
49
+ mpiUndefined n N nbe ndof ndofK noshowbase noshowpos notaregion nt
50
+ nTonEdge nuEdge nuTriangle nv P pi precision quantile re region
51
+ scientific searchMethod setw showbase showpos sparsesolver sum tellp
52
+ true UMFPACK unused whoinElement verbosity version volume x y z
53
+ ))
54
+ end
55
+
56
+ def self.builtins
57
+ @builtins ||= Set.new(%w(
58
+ abs acos acosh adaptmesh adj AffineCG AffineGMRES arg asin asinh
59
+ assert atan atan2 atanh atof atoi BFGS broadcast buildlayers
60
+ buildmesh ceil chi complexEigenValue copysign change checkmovemesh
61
+ clock cmaes conj convect cos cosh cube d dd dfft diffnp diffpos
62
+ dimKrylov dist dumptable dx dxx dxy dxz dy dyx dyy dyz dz dzx dzy dzz
63
+ EigenValue emptymesh erf erfc exec exit exp fdim ffind find floor
64
+ flush fmax fmin fmod freeyams getARGV getline gmshload gmshload3
65
+ gslcdfugaussianP gslcdfugaussianQ gslcdfugaussianPinv
66
+ gslcdfugaussianQinv gslcdfgaussianP gslcdfgaussianQ
67
+ gslcdfgaussianPinv gslcdfgaussianQinv gslcdfgammaP gslcdfgammaQ
68
+ gslcdfgammaPinv gslcdfgammaQinv gslcdfcauchyP gslcdfcauchyQ
69
+ gslcdfcauchyPinv gslcdfcauchyQinv gslcdflaplaceP gslcdflaplaceQ
70
+ gslcdflaplacePinv gslcdflaplaceQinv gslcdfrayleighP gslcdfrayleighQ
71
+ gslcdfrayleighPinv gslcdfrayleighQinv gslcdfchisqP gslcdfchisqQ
72
+ gslcdfchisqPinv gslcdfchisqQinv gslcdfexponentialP gslcdfexponentialQ
73
+ gslcdfexponentialPinv gslcdfexponentialQinv gslcdfexppowP
74
+ gslcdfexppowQ gslcdftdistP gslcdftdistQ gslcdftdistPinv
75
+ gslcdftdistQinv gslcdffdistP gslcdffdistQ gslcdffdistPinv
76
+ gslcdffdistQinv gslcdfbetaP gslcdfbetaQ gslcdfbetaPinv gslcdfbetaQinv
77
+ gslcdfflatP gslcdfflatQ gslcdfflatPinv gslcdfflatQinv
78
+ gslcdflognormalP gslcdflognormalQ gslcdflognormalPinv
79
+ gslcdflognormalQinv gslcdfgumbel1P gslcdfgumbel1Q gslcdfgumbel1Pinv
80
+ gslcdfgumbel1Qinv gslcdfgumbel2P gslcdfgumbel2Q gslcdfgumbel2Pinv
81
+ gslcdfgumbel2Qinv gslcdfweibullP gslcdfweibullQ gslcdfweibullPinv
82
+ gslcdfweibullQinv gslcdfparetoP gslcdfparetoQ gslcdfparetoPinv
83
+ gslcdfparetoQinv gslcdflogisticP gslcdflogisticQ gslcdflogisticPinv
84
+ gslcdflogisticQinv gslcdfbinomialP gslcdfbinomialQ gslcdfpoissonP
85
+ gslcdfpoissonQ gslcdfgeometricP gslcdfgeometricQ
86
+ gslcdfnegativebinomialP gslcdfnegativebinomialQ gslcdfpascalP
87
+ gslcdfpascalQ gslinterpakima gslinterpakimaperiodic
88
+ gslinterpcsplineperiodic gslinterpcspline gslinterpsteffen
89
+ gslinterplinear gslinterppolynomial gslranbernoullipdf gslranbeta
90
+ gslranbetapdf gslranbinomialpdf gslranexponential
91
+ gslranexponentialpdf gslranexppow gslranexppowpdf gslrancauchy
92
+ gslrancauchypdf gslranchisq gslranchisqpdf gslranerlang
93
+ gslranerlangpdf gslranfdist gslranfdistpdf gslranflat gslranflatpdf
94
+ gslrangamma gslrangammaint gslrangammapdf gslrangammamt
95
+ gslrangammaknuth gslrangaussian gslrangaussianratiomethod
96
+ gslrangaussianziggurat gslrangaussianpdf gslranugaussian
97
+ gslranugaussianratiomethod gslranugaussianpdf gslrangaussiantail
98
+ gslrangaussiantailpdf gslranugaussiantail gslranugaussiantailpdf
99
+ gslranlandau gslranlandaupdf gslrangeometricpdf gslrangumbel1
100
+ gslrangumbel1pdf gslrangumbel2 gslrangumbel2pdf gslranlogistic
101
+ gslranlogisticpdf gslranlognormal gslranlognormalpdf
102
+ gslranlogarithmicpdf gslrannegativebinomialpdf gslranpascalpdf
103
+ gslranpareto gslranparetopdf gslranpoissonpdf gslranrayleigh
104
+ gslranrayleighpdf gslranrayleightail gslranrayleightailpdf
105
+ gslrantdist gslrantdistpdf gslranlaplace gslranlaplacepdf gslranlevy
106
+ gslranweibull gslranweibullpdf gslsfairyAi gslsfairyBi
107
+ gslsfairyAiscaled gslsfairyBiscaled gslsfairyAideriv gslsfairyBideriv
108
+ gslsfairyAiderivscaled gslsfairyBiderivscaled gslsfairyzeroAi
109
+ gslsfairyzeroBi gslsfairyzeroAideriv gslsfairyzeroBideriv
110
+ gslsfbesselJ0 gslsfbesselJ1 gslsfbesselJn gslsfbesselY0 gslsfbesselY1
111
+ gslsfbesselYn gslsfbesselI0 gslsfbesselI1 gslsfbesselIn
112
+ gslsfbesselI0scaled gslsfbesselI1scaled gslsfbesselInscaled
113
+ gslsfbesselK0 gslsfbesselK1 gslsfbesselKn gslsfbesselK0scaled
114
+ gslsfbesselK1scaled gslsfbesselKnscaled gslsfbesselj0 gslsfbesselj1
115
+ gslsfbesselj2 gslsfbesseljl gslsfbessely0 gslsfbessely1 gslsfbessely2
116
+ gslsfbesselyl gslsfbesseli0scaled gslsfbesseli1scaled
117
+ gslsfbesseli2scaled gslsfbesselilscaled gslsfbesselk0scaled
118
+ gslsfbesselk1scaled gslsfbesselk2scaled gslsfbesselklscaled
119
+ gslsfbesselJnu gslsfbesselYnu gslsfbesselInuscaled gslsfbesselInu
120
+ gslsfbesselKnuscaled gslsfbesselKnu gslsfbessellnKnu
121
+ gslsfbesselzeroJ0 gslsfbesselzeroJ1 gslsfbesselzeroJnu gslsfclausen
122
+ gslsfhydrogenicR1 gslsfdawson gslsfdebye1 gslsfdebye2 gslsfdebye3
123
+ gslsfdebye4 gslsfdebye5 gslsfdebye6 gslsfdilog gslsfmultiply
124
+ gslsfellintKcomp gslsfellintEcomp gslsfellintPcomp gslsfellintDcomp
125
+ gslsfellintF gslsfellintE gslsfellintRC gslsferfc gslsflogerfc
126
+ gslsferf gslsferfZ gslsferfQ gslsfhazard gslsfexp gslsfexpmult
127
+ gslsfexpm1 gslsfexprel gslsfexprel2 gslsfexpreln gslsfexpintE1
128
+ gslsfexpintE2 gslsfexpintEn gslsfexpintE1scaled gslsfexpintE2scaled
129
+ gslsfexpintEnscaled gslsfexpintEi gslsfexpintEiscaled gslsfShi
130
+ gslsfChi gslsfexpint3 gslsfSi gslsfCi gslsfatanint gslsffermidiracm1
131
+ gslsffermidirac0 gslsffermidirac1 gslsffermidirac2 gslsffermidiracint
132
+ gslsffermidiracmhalf gslsffermidirachalf gslsffermidirac3half
133
+ gslsffermidiracinc0 gslsflngamma gslsfgamma gslsfgammastar
134
+ gslsfgammainv gslsftaylorcoeff gslsffact gslsfdoublefact gslsflnfact
135
+ gslsflndoublefact gslsflnchoose gslsfchoose gslsflnpoch gslsfpoch
136
+ gslsfpochrel gslsfgammaincQ gslsfgammaincP gslsfgammainc gslsflnbeta
137
+ gslsfbeta gslsfbetainc gslsfgegenpoly1 gslsfgegenpoly2
138
+ gslsfgegenpoly3 gslsfgegenpolyn gslsfhyperg0F1 gslsfhyperg1F1int
139
+ gslsfhyperg1F1 gslsfhypergUint gslsfhypergU gslsfhyperg2F0
140
+ gslsflaguerre1 gslsflaguerre2 gslsflaguerre3 gslsflaguerren
141
+ gslsflambertW0 gslsflambertWm1 gslsflegendrePl gslsflegendreP1
142
+ gslsflegendreP2 gslsflegendreP3 gslsflegendreQ0 gslsflegendreQ1
143
+ gslsflegendreQl gslsflegendrePlm gslsflegendresphPlm
144
+ gslsflegendrearraysize gslsfconicalPhalf gslsfconicalPmhalf
145
+ gslsfconicalP0 gslsfconicalP1 gslsfconicalPsphreg gslsfconicalPcylreg
146
+ gslsflegendreH3d0 gslsflegendreH3d1 gslsflegendreH3d gslsflog
147
+ gslsflogabs gslsflog1plusx gslsflog1plusxmx gslsfpowint gslsfpsiint
148
+ gslsfpsi gslsfpsi1piy gslsfpsi1int gslsfpsi1 gslsfpsin
149
+ gslsfsynchrotron1 gslsfsynchrotron2 gslsftransport2 gslsftransport3
150
+ gslsftransport4 gslsftransport5 gslsfsin gslsfcos gslsfhypot
151
+ gslsfsinc gslsflnsinh gslsflncosh gslsfanglerestrictsymm
152
+ gslsfanglerestrictpos gslsfzetaint gslsfzeta gslsfzetam1
153
+ gslsfzetam1int gslsfhzeta gslsfetaint gslsfeta imag int1d int2d int3d
154
+ intalledges intallfaces interpolate invdiff invdiffnp invdiffpos
155
+ Isend isInf isNaN isoline Irecv j0 j1 jn jump lgamma LinearCG
156
+ LinearGMRES log log10 lrint lround max mean medit min mmg3d movemesh
157
+ movemesh23 mpiAlltoall mpiAlltoallv mpiAllgather mpiAllgatherv
158
+ mpiAllReduce mpiBarrier mpiGather mpiGatherv mpiRank mpiReduce
159
+ mpiScatter mpiScatterv mpiSize mpiWait mpiWaitAny mpiWtick mpiWtime
160
+ mshmet NLCG on plot polar Post pow processor processorblock
161
+ projection randinit randint31 randint32 random randreal1 randreal2
162
+ randreal3 randres53 Read readmesh readmesh3 Recv rfind rint round
163
+ savemesh savesol savevtk seekg Sent set sign signbit sin sinh sort
164
+ splitComm splitmesh sqrt square srandom srandomdev Stringification
165
+ swap system tan tanh tellg tetg tetgconvexhull tetgreconstruction
166
+ tetgtransfo tgamma triangulate trunc Wait Write y0 y1 yn
167
+ ))
168
+ end
169
+
170
+ def self.attributes
171
+ @builtinsParameters ||= Set.new(%w(
172
+ A A1 abserror absolute aniso aspectratio B B1 bb beginend bin
173
+ boundary bw close cmm coef composante cutoff datafilename dataname
174
+ dim distmax displacement doptions dparams eps err errg facemerge
175
+ facetcl factorize file fill fixedborder flabel flags floatmesh
176
+ floatsol fregion gradation grey hmax hmin holelist hsv init inquire
177
+ inside IsMetric iso ivalue keepbackvertices label labeldown labelmid
178
+ labelup levelset loptions lparams maxit maxsubdiv meditff mem memory
179
+ metric mode nbarrow nbiso nbiter nbjacoby nboffacetcl nbofholes
180
+ nbofregions nbregul nbsmooth nbvx ncv nev nomeshgeneration
181
+ normalization omega op optimize option options order orientation
182
+ periodic power precon prev ps ptmerge qfe qforder qft qfV ratio
183
+ rawvector reffacelow reffacemid reffaceup refnum reftet reftri region
184
+ regionlist renumv rescaling ridgeangle save sigma sizeofvolume
185
+ smoothing solver sparams split splitin2 splitpbedge stop strategy
186
+ swap switch sym t tgv thetamax tol tolpivot tolpivotsym transfo U2Vc
187
+ value varrow vector veps viso wait width withsurfacemesh WindowIndex
188
+ which zbound
189
+ ))
190
+ end
191
+
192
+ id = /[a-z_]\w*/i
193
+
194
+ state :expr_bol do
195
+ mixin :inline_whitespace
196
+
197
+ rule %r/include/, Comment::Preproc, :macro
198
+ rule %r/load/, Comment::Preproc, :macro
199
+ rule %r/ENDIFMACRO/, Comment::Preproc, :macro
200
+ rule %r/IFMACRO/, Comment::Preproc, :macro
201
+
202
+ rule(//) { pop! }
203
+ end
204
+
205
+ state :statements do
206
+ mixin :whitespace
207
+ rule %r/(u8|u|U|L)?"/, Str, :string
208
+ rule %r((u8|u|U|L)?'(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\'\n])')i, Str::Char
209
+ rule %r((\d+[.]\d*|[.]?\d+)e[+-]?\d+[lu]*)i, Num::Float
210
+ rule %r(\d+e[+-]?\d+[lu]*)i, Num::Float
211
+ rule %r/0x[0-9a-f]+[lu]*/i, Num::Hex
212
+ rule %r/0[0-7]+[lu]*/i, Num::Oct
213
+ rule %r/\d+[lu]*/i, Num::Integer
214
+ rule %r(\*/), Error
215
+ rule %r([~!%^&*+=\|?:<>/-]), Operator
216
+ rule %r/'/, Operator
217
+ rule %r/[()\[\],.;]/, Punctuation
218
+ rule %r/\bcase\b/, Keyword, :case
219
+ rule %r/(?:true|false|NaN)\b/, Name::Builtin
220
+ rule id do |m|
221
+ name = m[0]
222
+
223
+ if self.class.keywords.include? name
224
+ token Keyword
225
+ elsif self.class.keywords_type.include? name
226
+ token Keyword::Type
227
+ elsif self.class.reserved.include? name
228
+ token Keyword::Reserved
229
+ elsif self.class.builtins.include? name
230
+ token Name::Builtin
231
+ elsif self.class.attributes.include? name
232
+ token Name::Attribute
233
+ else
234
+ token Name
235
+ end
236
+ end
237
+ end
238
+ end
239
+ end
240
+ end
@@ -0,0 +1,119 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class FSharp < RegexLexer
7
+ title "FSharp"
8
+ desc 'F# (fsharp.net)'
9
+ tag 'fsharp'
10
+ filenames '*.fs', '*.fsi', '*.fsx'
11
+ mimetypes 'application/fsharp-script', 'text/x-fsharp', 'text/x-fsi'
12
+
13
+ def self.keywords
14
+ @keywords ||= Set.new %w(
15
+ abstract and as assert base begin class default delegate do
16
+ done downcast downto elif else end exception extern false
17
+ finally for fun function global if in inherit inline interface
18
+ internal lazy let let! match member module mutable namespace
19
+ new not null of open or override private public rec return
20
+ return! select static struct then to true try type upcast
21
+ use use! val void when while with yield yield! sig atomic
22
+ break checked component const constraint constructor
23
+ continue eager event external fixed functor include method
24
+ mixin object parallel process protected pure sealed tailcall
25
+ trait virtual volatile
26
+ )
27
+ end
28
+
29
+ def self.keyopts
30
+ @keyopts ||= Set.new %w(
31
+ != # & && ( ) * \+ , - -. -> . .. : :: := :> ; ;; < <- =
32
+ > >] >} ? ?? [ [< [> [| ] _ ` { {< | |] } ~ |> <| <>
33
+ )
34
+ end
35
+
36
+ def self.word_operators
37
+ @word_operators ||= Set.new %w(and asr land lor lsl lxor mod or)
38
+ end
39
+
40
+ def self.primitives
41
+ @primitives ||= Set.new %w(unit int float bool string char list array)
42
+ end
43
+
44
+ operator = %r([\[\];,{}_()!$%&*+./:<=>?@^|~#-]+)
45
+ id = /([a-z][\w']*)|(``[^`\n\r\t]+``)/i
46
+ upper_id = /[A-Z][\w']*/
47
+
48
+ state :root do
49
+ rule %r/\s+/m, Text
50
+ rule %r/false|true|[(][)]|\[\]/, Name::Builtin::Pseudo
51
+ rule %r/#{upper_id}(?=\s*[.])/, Name::Namespace, :dotted
52
+ rule upper_id, Name::Class
53
+ rule %r/[(][*](?![)])/, Comment, :comment
54
+ rule %r(//.*?$), Comment::Single
55
+ rule id do |m|
56
+ match = m[0]
57
+ if self.class.keywords.include? match
58
+ token Keyword
59
+ elsif self.class.word_operators.include? match
60
+ token Operator::Word
61
+ elsif self.class.primitives.include? match
62
+ token Keyword::Type
63
+ else
64
+ token Name
65
+ end
66
+ end
67
+
68
+ rule operator do |m|
69
+ match = m[0]
70
+ if self.class.keyopts.include? match
71
+ token Punctuation
72
+ else
73
+ token Operator
74
+ end
75
+ end
76
+
77
+ rule %r/-?\d[\d_]*(.[\d_]*)?(e[+-]?\d[\d_]*)/i, Num::Float
78
+ rule %r/0x\h[\h_]*/i, Num::Hex
79
+ rule %r/0o[0-7][0-7_]*/i, Num::Oct
80
+ rule %r/0b[01][01_]*/i, Num::Bin
81
+ rule %r/\d[\d_]*/, Num::Integer
82
+
83
+ rule %r/'(?:(\\[\\"'ntbr ])|(\\[0-9]{3})|(\\x\h{2}))'/, Str::Char
84
+ rule %r/'[.]'/, Str::Char
85
+ rule %r/'/, Keyword
86
+ rule %r/"/, Str::Double, :string
87
+ rule %r/[~?]#{id}/, Name::Variable
88
+ end
89
+
90
+ state :comment do
91
+ rule %r/[^(*)]+/, Comment
92
+ rule(/[(][*]/) { token Comment; push }
93
+ rule %r/[*][)]/, Comment, :pop!
94
+ rule %r/[(*)]/, Comment
95
+ end
96
+
97
+ state :string do
98
+ rule %r/[^\\"]+/, Str::Double
99
+ mixin :escape_sequence
100
+ rule %r/\\\n/, Str::Double
101
+ rule %r/"/, Str::Double, :pop!
102
+ end
103
+
104
+ state :escape_sequence do
105
+ rule %r/\\[\\"'ntbr]/, Str::Escape
106
+ rule %r/\\\d{3}/, Str::Escape
107
+ rule %r/\\x\h{2}/, Str::Escape
108
+ end
109
+
110
+ state :dotted do
111
+ rule %r/\s+/m, Text
112
+ rule %r/[.]/, Punctuation
113
+ rule %r/#{upper_id}(?=\s*[.])/, Name::Namespace
114
+ rule upper_id, Name::Class, :pop!
115
+ rule id, Name, :pop!
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,171 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class GDScript < RegexLexer
7
+ title "GDScript"
8
+ desc "The Godot Engine programming language (https://godotengine.org/)"
9
+ tag 'gdscript'
10
+ aliases 'gd', 'gdscript'
11
+ filenames '*.gd'
12
+ mimetypes 'text/x-gdscript', 'application/x-gdscript'
13
+
14
+ def self.keywords
15
+ @keywords = %w(
16
+ and in not or as breakpoint class class_name extends is func setget
17
+ signal tool const enum export onready static var break continue
18
+ if elif else for pass return match while remote master puppet
19
+ remotesync mastersync puppetsync
20
+ ).join('|')
21
+ end
22
+
23
+ # Reserved for future implementation
24
+ def self.keywords_reserved
25
+ @keywords_reserved = %w(
26
+ do switch case
27
+ ).join('|')
28
+ end
29
+
30
+ def self.builtins
31
+ builtins = %w(
32
+ Color8 ColorN abs acos asin assert atan atan2 bytes2var ceil char
33
+ clamp convert cos cosh db2linear decimals dectime deg2rad dict2inst
34
+ ease exp floor fmod fposmod funcref hash inst2dict instance_from_id
35
+ is_inf is_nan lerp linear2db load log max min nearest_po2 pow
36
+ preload print print_stack printerr printraw prints printt rad2deg
37
+ rand_range rand_seed randf randi randomize range round seed sign
38
+ sin sinh sqrt stepify str str2var tan tan tanh type_exist typeof
39
+ var2bytes var2str weakref yield
40
+ ).join('|')
41
+ end
42
+
43
+ def self.builtins_type
44
+ @builtins_type = %w(
45
+ bool int float String Vector2 Rect2 Transform2D Vector3 AABB
46
+ Plane Quat Basis Transform Color RID Object NodePath Dictionary
47
+ Array PoolByteArray PoolIntArray PoolRealArray PoolStringArray
48
+ PoolVector2Array PoolVector3Array PoolColorArray null
49
+ ).join('|')
50
+ end
51
+
52
+ state :root do
53
+ rule %r/\n/, Text
54
+ rule %r/[^\S\n]+/, Text
55
+ rule %r/#.*/, Comment::Single
56
+ rule %r/[\[\]{}:(),;]/, Punctuation
57
+ rule %r/\\\n/, Text
58
+ rule %r/(in|and|or|not)\b/, Operator::Word
59
+ rule %r/!=|==|<<|>>|&&|\+=|-=|\*=|\/=|%=|&=|\|=|\|\||[-~+\/*%=<>&^.!|$]/, Operator
60
+ rule %r/(func)((?:\s|\\)+)/ do
61
+ groups Keyword, Text
62
+ push :funcname
63
+ end
64
+ rule %r/(class)((?:\s|\\)+)/ do
65
+ groups Keyword, Text
66
+ push :classname
67
+ end
68
+ mixin :keywords
69
+ mixin :builtins
70
+ rule %r/"""/, Str::Double, :escape_tdqs
71
+ rule %r/'''/, Str::Double, :escape_tsqs
72
+ rule %r/"/, Str::Double, :escape_dqs
73
+ rule %r/'/, Str::Double, :escape_sqs
74
+ mixin :name
75
+ mixin :numbers
76
+ end
77
+
78
+ state :keywords do
79
+ rule %r/\b(#{GDScript.keywords})\b/, Keyword
80
+ rule %r/\b(#{GDScript.keywords_reserved})\b/, Keyword::Reserved
81
+ end
82
+
83
+ state :builtins do
84
+ rule %r/\b(#{GDScript.builtins})\b/, Name::Builtin
85
+ rule %r/\b((self|false|true)|(PI|TAU|NAN|INF))\b/, Name::Builtin::Pseudo
86
+ rule %r/\b(#{GDScript.builtins_type})\b/, Keyword::Type
87
+ end
88
+
89
+ state :numbers do
90
+ rule %r/(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?/, Num::Float
91
+ rule %r/\d+[eE][+-]?[0-9]+j?/, Num::Float
92
+ rule %r/0[xX][a-fA-F0-9]+/, Num::Hex
93
+ rule %r/\d+j?/, Num::Integer
94
+ end
95
+
96
+ state :name do
97
+ rule %r/[a-zA-Z_]\w*/, Name
98
+ end
99
+
100
+ state :funcname do
101
+ rule %r/[a-zA-Z_]\w*/, Name::Function, :pop!
102
+ end
103
+
104
+ state :classname do
105
+ rule %r/[a-zA-Z_]\w*/, Name::Class, :pop!
106
+ end
107
+
108
+ state :string_escape do
109
+ rule %r/\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})/, Str::Escape
110
+ end
111
+
112
+ state :strings_single do
113
+ rule %r/%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?[hlL]?[E-GXc-giorsux%]/, Str::Interpol
114
+ rule %r/[^\\'%\n]+/, Str::Single
115
+ rule %r/["\\]/, Str::Single
116
+ rule %r/%/, Str::Single
117
+ end
118
+
119
+ state :strings_double do
120
+ rule %r/%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?[hlL]?[E-GXc-giorsux%]/, Str::Interpol
121
+ rule %r/[^\\"%\n]+/, Str::Double
122
+ rule %r/['\\]/, Str::Double
123
+ rule %r/%/, Str::Double
124
+ end
125
+
126
+ state :dqs do
127
+ rule %r/"/, Str::Double, :pop!
128
+ rule %r/\\\\|\\"|\\\n/, Str::Escape
129
+ mixin :strings_double
130
+ end
131
+
132
+ state :escape_dqs do
133
+ mixin :string_escape
134
+ mixin :dqs
135
+ end
136
+
137
+ state :sqs do
138
+ rule %r/'/, Str::Single, :pop!
139
+ rule %r/\\\\|\\'|\\\n/, Str::Escape
140
+ mixin :strings_single
141
+ end
142
+
143
+ state :escape_sqs do
144
+ mixin :string_escape
145
+ mixin :sqs
146
+ end
147
+
148
+ state :tdqs do
149
+ rule %r/"""/, Str::Double, :pop!
150
+ mixin :strings_double
151
+ rule %r/\n/, Str::Double
152
+ end
153
+
154
+ state :escape_tdqs do
155
+ mixin :string_escape
156
+ mixin :tdqs
157
+ end
158
+
159
+ state :tsqs do
160
+ rule %r/'''/, Str::Single, :pop!
161
+ mixin :strings_single
162
+ rule %r/\n/, Str::Single
163
+ end
164
+
165
+ state :escape_tsqs do
166
+ mixin :string_escape
167
+ mixin :tsqs
168
+ end
169
+ end
170
+ end
171
+ end