rouge 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 (444) 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 +107 -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/cypher +5 -0
  41. data/lib/rouge/demos/cython +6 -0
  42. data/lib/rouge/demos/d +16 -0
  43. data/lib/rouge/demos/dart +6 -0
  44. data/lib/rouge/demos/datastudio +21 -0
  45. data/lib/rouge/demos/diff +7 -0
  46. data/lib/rouge/demos/digdag +19 -0
  47. data/lib/rouge/demos/docker +9 -0
  48. data/lib/rouge/demos/dot +5 -0
  49. data/lib/rouge/demos/ecl +18 -0
  50. data/lib/rouge/demos/eex +1 -0
  51. data/lib/rouge/demos/eiffel +30 -0
  52. data/lib/rouge/demos/elixir +1 -0
  53. data/lib/rouge/demos/elm +4 -0
  54. data/lib/rouge/demos/epp +4 -0
  55. data/lib/rouge/demos/erb +1 -0
  56. data/lib/rouge/demos/erlang +7 -0
  57. data/lib/rouge/demos/escape +3 -0
  58. data/lib/rouge/demos/factor +5 -0
  59. data/lib/rouge/demos/fortran +22 -0
  60. data/lib/rouge/demos/freefem +16 -0
  61. data/lib/rouge/demos/fsharp +12 -0
  62. data/lib/rouge/demos/gdscript +18 -0
  63. data/lib/rouge/demos/ghc-cmm +23 -0
  64. data/lib/rouge/demos/ghc-core +26 -0
  65. data/lib/rouge/demos/gherkin +17 -0
  66. data/lib/rouge/demos/glsl +14 -0
  67. data/lib/rouge/demos/go +7 -0
  68. data/lib/rouge/demos/gradle +10 -0
  69. data/lib/rouge/demos/graphql +17 -0
  70. data/lib/rouge/demos/groovy +9 -0
  71. data/lib/rouge/demos/hack +5 -0
  72. data/lib/rouge/demos/haml +5 -0
  73. data/lib/rouge/demos/handlebars +7 -0
  74. data/lib/rouge/demos/haskell +6 -0
  75. data/lib/rouge/demos/haxe +5 -0
  76. data/lib/rouge/demos/hcl +7 -0
  77. data/lib/rouge/demos/hocon +8 -0
  78. data/lib/rouge/demos/hql +5 -0
  79. data/lib/rouge/demos/html +8 -0
  80. data/lib/rouge/demos/http +14 -0
  81. data/lib/rouge/demos/hylang +10 -0
  82. data/lib/rouge/demos/idlang +8 -0
  83. data/lib/rouge/demos/igorpro +9 -0
  84. data/lib/rouge/demos/ini +4 -0
  85. data/lib/rouge/demos/io +11 -0
  86. data/lib/rouge/demos/irb +4 -0
  87. data/lib/rouge/demos/irb_output +2 -0
  88. data/lib/rouge/demos/isbl +4 -0
  89. data/lib/rouge/demos/java +5 -0
  90. data/lib/rouge/demos/javascript +1 -0
  91. data/lib/rouge/demos/jinja +9 -0
  92. data/lib/rouge/demos/jsl +3 -0
  93. data/lib/rouge/demos/json +1 -0
  94. data/lib/rouge/demos/json-doc +1 -0
  95. data/lib/rouge/demos/jsonnet +28 -0
  96. data/lib/rouge/demos/jsp +29 -0
  97. data/lib/rouge/demos/jsx +17 -0
  98. data/lib/rouge/demos/julia +11 -0
  99. data/lib/rouge/demos/kotlin +3 -0
  100. data/lib/rouge/demos/lasso +12 -0
  101. data/lib/rouge/demos/liquid +10 -0
  102. data/lib/rouge/demos/literate_coffeescript +3 -0
  103. data/lib/rouge/demos/literate_haskell +7 -0
  104. data/lib/rouge/demos/llvm +20 -0
  105. data/lib/rouge/demos/lua +12 -0
  106. data/lib/rouge/demos/lustre +6 -0
  107. data/lib/rouge/demos/lutin +18 -0
  108. data/lib/rouge/demos/m68k +16 -0
  109. data/lib/rouge/demos/magik +6 -0
  110. data/lib/rouge/demos/make +6 -0
  111. data/lib/rouge/demos/markdown +4 -0
  112. data/lib/rouge/demos/mason +22 -0
  113. data/lib/rouge/demos/mathematica +8 -0
  114. data/lib/rouge/demos/matlab +6 -0
  115. data/lib/rouge/demos/minizinc +23 -0
  116. data/lib/rouge/demos/moonscript +16 -0
  117. data/lib/rouge/demos/mosel +10 -0
  118. data/lib/rouge/demos/msgtrans +4 -0
  119. data/lib/rouge/demos/mxml +22 -0
  120. data/lib/rouge/demos/nasm +26 -0
  121. data/lib/rouge/demos/nesasm +11 -0
  122. data/lib/rouge/demos/nginx +5 -0
  123. data/lib/rouge/demos/nim +27 -0
  124. data/lib/rouge/demos/nix +19 -0
  125. data/lib/rouge/demos/objective_c +18 -0
  126. data/lib/rouge/demos/objective_cpp +17 -0
  127. data/lib/rouge/demos/ocaml +12 -0
  128. data/lib/rouge/demos/openedge +4 -0
  129. data/lib/rouge/demos/opentype_feature_file +6 -0
  130. data/lib/rouge/demos/pascal +14 -0
  131. data/lib/rouge/demos/perl +5 -0
  132. data/lib/rouge/demos/php +3 -0
  133. data/lib/rouge/demos/plaintext +1 -0
  134. data/lib/rouge/demos/plist +11 -0
  135. data/lib/rouge/demos/pony +17 -0
  136. data/lib/rouge/demos/powershell +13 -0
  137. data/lib/rouge/demos/praat +26 -0
  138. data/lib/rouge/demos/prolog +9 -0
  139. data/lib/rouge/demos/prometheus +9 -0
  140. data/lib/rouge/demos/properties +7 -0
  141. data/lib/rouge/demos/protobuf +5 -0
  142. data/lib/rouge/demos/puppet +6 -0
  143. data/lib/rouge/demos/python +6 -0
  144. data/lib/rouge/demos/q +8 -0
  145. data/lib/rouge/demos/qml +9 -0
  146. data/lib/rouge/demos/r +8 -0
  147. data/lib/rouge/demos/racket +24 -0
  148. data/lib/rouge/demos/reasonml +12 -0
  149. data/lib/rouge/demos/rego +8 -0
  150. data/lib/rouge/demos/robot_framework +27 -0
  151. data/lib/rouge/demos/ruby +9 -0
  152. data/lib/rouge/demos/rust +12 -0
  153. data/lib/rouge/demos/sas +13 -0
  154. data/lib/rouge/demos/sass +3 -0
  155. data/lib/rouge/demos/scala +3 -0
  156. data/lib/rouge/demos/scheme +4 -0
  157. data/lib/rouge/demos/scss +5 -0
  158. data/lib/rouge/demos/sed +4 -0
  159. data/lib/rouge/demos/shell +2 -0
  160. data/lib/rouge/demos/sieve +10 -0
  161. data/lib/rouge/demos/slice +10 -0
  162. data/lib/rouge/demos/slim +17 -0
  163. data/lib/rouge/demos/smalltalk +6 -0
  164. data/lib/rouge/demos/smarty +12 -0
  165. data/lib/rouge/demos/sml +4 -0
  166. data/lib/rouge/demos/solidity +13 -0
  167. data/lib/rouge/demos/sparql +6 -0
  168. data/lib/rouge/demos/sqf +14 -0
  169. data/lib/rouge/demos/sql +1 -0
  170. data/lib/rouge/demos/supercollider +11 -0
  171. data/lib/rouge/demos/swift +5 -0
  172. data/lib/rouge/demos/tap +5 -0
  173. data/lib/rouge/demos/tcl +1 -0
  174. data/lib/rouge/demos/terraform +16 -0
  175. data/lib/rouge/demos/tex +1 -0
  176. data/lib/rouge/demos/toml +9 -0
  177. data/lib/rouge/demos/tsx +17 -0
  178. data/lib/rouge/demos/ttcn3 +6 -0
  179. data/lib/rouge/demos/tulip +13 -0
  180. data/lib/rouge/demos/turtle +26 -0
  181. data/lib/rouge/demos/twig +9 -0
  182. data/lib/rouge/demos/typescript +1 -0
  183. data/lib/rouge/demos/vala +8 -0
  184. data/lib/rouge/demos/vb +4 -0
  185. data/lib/rouge/demos/vcl +12 -0
  186. data/lib/rouge/demos/verilog +27 -0
  187. data/lib/rouge/demos/vhdl +23 -0
  188. data/lib/rouge/demos/viml +14 -0
  189. data/lib/rouge/demos/vue +11 -0
  190. data/lib/rouge/demos/wollok +11 -0
  191. data/lib/rouge/demos/xml +2 -0
  192. data/lib/rouge/demos/xojo +14 -0
  193. data/lib/rouge/demos/xpath +2 -0
  194. data/lib/rouge/demos/xquery +22 -0
  195. data/lib/rouge/demos/yaml +4 -0
  196. data/lib/rouge/demos/yang +17 -0
  197. data/lib/rouge/formatter.rb +112 -0
  198. data/lib/rouge/formatters/html.rb +56 -0
  199. data/lib/rouge/formatters/html_inline.rb +31 -0
  200. data/lib/rouge/formatters/html_legacy.rb +45 -0
  201. data/lib/rouge/formatters/html_line_table.rb +53 -0
  202. data/lib/rouge/formatters/html_linewise.rb +23 -0
  203. data/lib/rouge/formatters/html_pygments.rb +18 -0
  204. data/lib/rouge/formatters/html_table.rb +51 -0
  205. data/lib/rouge/formatters/null.rb +20 -0
  206. data/lib/rouge/formatters/terminal256.rb +198 -0
  207. data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
  208. data/lib/rouge/formatters/tex.rb +92 -0
  209. data/lib/rouge/guesser.rb +57 -0
  210. data/lib/rouge/guessers/disambiguation.rb +136 -0
  211. data/lib/rouge/guessers/filename.rb +27 -0
  212. data/lib/rouge/guessers/glob_mapping.rb +45 -0
  213. data/lib/rouge/guessers/mimetype.rb +16 -0
  214. data/lib/rouge/guessers/modeline.rb +46 -0
  215. data/lib/rouge/guessers/source.rb +31 -0
  216. data/lib/rouge/guessers/util.rb +34 -0
  217. data/lib/rouge/lexer.rb +517 -0
  218. data/lib/rouge/lexers/abap.rb +240 -0
  219. data/lib/rouge/lexers/actionscript.rb +196 -0
  220. data/lib/rouge/lexers/ada.rb +162 -0
  221. data/lib/rouge/lexers/apache.rb +69 -0
  222. data/lib/rouge/lexers/apache/keywords.rb +15 -0
  223. data/lib/rouge/lexers/apex.rb +126 -0
  224. data/lib/rouge/lexers/apiblueprint.rb +49 -0
  225. data/lib/rouge/lexers/apple_script.rb +370 -0
  226. data/lib/rouge/lexers/armasm.rb +145 -0
  227. data/lib/rouge/lexers/awk.rb +162 -0
  228. data/lib/rouge/lexers/batchfile.rb +164 -0
  229. data/lib/rouge/lexers/bbcbasic.rb +112 -0
  230. data/lib/rouge/lexers/biml.rb +43 -0
  231. data/lib/rouge/lexers/bpf.rb +118 -0
  232. data/lib/rouge/lexers/brainfuck.rb +53 -0
  233. data/lib/rouge/lexers/bsl.rb +82 -0
  234. data/lib/rouge/lexers/c.rb +190 -0
  235. data/lib/rouge/lexers/ceylon.rb +96 -0
  236. data/lib/rouge/lexers/cfscript.rb +154 -0
  237. data/lib/rouge/lexers/clean.rb +156 -0
  238. data/lib/rouge/lexers/clojure.rb +113 -0
  239. data/lib/rouge/lexers/cmake.rb +208 -0
  240. data/lib/rouge/lexers/cmhg.rb +34 -0
  241. data/lib/rouge/lexers/coffeescript.rb +215 -0
  242. data/lib/rouge/lexers/common_lisp.rb +346 -0
  243. data/lib/rouge/lexers/conf.rb +25 -0
  244. data/lib/rouge/lexers/console.rb +190 -0
  245. data/lib/rouge/lexers/coq.rb +191 -0
  246. data/lib/rouge/lexers/cpp.rb +89 -0
  247. data/lib/rouge/lexers/crystal.rb +430 -0
  248. data/lib/rouge/lexers/csharp.rb +114 -0
  249. data/lib/rouge/lexers/css.rb +274 -0
  250. data/lib/rouge/lexers/csvs.rb +44 -0
  251. data/lib/rouge/lexers/cuda.rb +35 -0
  252. data/lib/rouge/lexers/cypher.rb +108 -0
  253. data/lib/rouge/lexers/cython.rb +151 -0
  254. data/lib/rouge/lexers/d.rb +177 -0
  255. data/lib/rouge/lexers/dart.rb +105 -0
  256. data/lib/rouge/lexers/datastudio.rb +138 -0
  257. data/lib/rouge/lexers/diff.rb +37 -0
  258. data/lib/rouge/lexers/digdag.rb +70 -0
  259. data/lib/rouge/lexers/docker.rb +51 -0
  260. data/lib/rouge/lexers/dot.rb +69 -0
  261. data/lib/rouge/lexers/ecl.rb +175 -0
  262. data/lib/rouge/lexers/eex.rb +52 -0
  263. data/lib/rouge/lexers/eiffel.rb +66 -0
  264. data/lib/rouge/lexers/elixir.rb +149 -0
  265. data/lib/rouge/lexers/elm.rb +90 -0
  266. data/lib/rouge/lexers/epp.rb +51 -0
  267. data/lib/rouge/lexers/erb.rb +53 -0
  268. data/lib/rouge/lexers/erlang.rb +115 -0
  269. data/lib/rouge/lexers/escape.rb +58 -0
  270. data/lib/rouge/lexers/factor.rb +303 -0
  271. data/lib/rouge/lexers/fortran.rb +178 -0
  272. data/lib/rouge/lexers/freefem.rb +240 -0
  273. data/lib/rouge/lexers/fsharp.rb +120 -0
  274. data/lib/rouge/lexers/gdscript.rb +171 -0
  275. data/lib/rouge/lexers/ghc_cmm.rb +340 -0
  276. data/lib/rouge/lexers/ghc_core.rb +151 -0
  277. data/lib/rouge/lexers/gherkin.rb +140 -0
  278. data/lib/rouge/lexers/gherkin/keywords.rb +16 -0
  279. data/lib/rouge/lexers/glsl.rb +132 -0
  280. data/lib/rouge/lexers/go.rb +175 -0
  281. data/lib/rouge/lexers/gradle.rb +38 -0
  282. data/lib/rouge/lexers/graphql.rb +261 -0
  283. data/lib/rouge/lexers/groovy.rb +111 -0
  284. data/lib/rouge/lexers/hack.rb +49 -0
  285. data/lib/rouge/lexers/haml.rb +226 -0
  286. data/lib/rouge/lexers/handlebars.rb +91 -0
  287. data/lib/rouge/lexers/haskell.rb +199 -0
  288. data/lib/rouge/lexers/haxe.rb +246 -0
  289. data/lib/rouge/lexers/hcl.rb +163 -0
  290. data/lib/rouge/lexers/hocon.rb +86 -0
  291. data/lib/rouge/lexers/hql.rb +139 -0
  292. data/lib/rouge/lexers/html.rb +141 -0
  293. data/lib/rouge/lexers/http.rb +81 -0
  294. data/lib/rouge/lexers/hylang.rb +94 -0
  295. data/lib/rouge/lexers/idlang.rb +312 -0
  296. data/lib/rouge/lexers/igorpro.rb +664 -0
  297. data/lib/rouge/lexers/ini.rb +54 -0
  298. data/lib/rouge/lexers/io.rb +69 -0
  299. data/lib/rouge/lexers/irb.rb +67 -0
  300. data/lib/rouge/lexers/isbl.rb +97 -0
  301. data/lib/rouge/lexers/isbl/builtins.rb +17 -0
  302. data/lib/rouge/lexers/java.rb +91 -0
  303. data/lib/rouge/lexers/javascript.rb +279 -0
  304. data/lib/rouge/lexers/jinja.rb +154 -0
  305. data/lib/rouge/lexers/jsl.rb +55 -0
  306. data/lib/rouge/lexers/json.rb +72 -0
  307. data/lib/rouge/lexers/json_doc.rb +26 -0
  308. data/lib/rouge/lexers/jsonnet.rb +152 -0
  309. data/lib/rouge/lexers/jsp.rb +120 -0
  310. data/lib/rouge/lexers/jsx.rb +104 -0
  311. data/lib/rouge/lexers/julia.rb +290 -0
  312. data/lib/rouge/lexers/kotlin.rb +131 -0
  313. data/lib/rouge/lexers/lasso.rb +210 -0
  314. data/lib/rouge/lexers/lasso/keywords.rb +14 -0
  315. data/lib/rouge/lexers/liquid.rb +285 -0
  316. data/lib/rouge/lexers/literate_coffeescript.rb +34 -0
  317. data/lib/rouge/lexers/literate_haskell.rb +37 -0
  318. data/lib/rouge/lexers/llvm.rb +97 -0
  319. data/lib/rouge/lexers/lua.rb +164 -0
  320. data/lib/rouge/lexers/lua/builtins.rb +24 -0
  321. data/lib/rouge/lexers/lustre.rb +79 -0
  322. data/lib/rouge/lexers/lutin.rb +33 -0
  323. data/lib/rouge/lexers/m68k.rb +143 -0
  324. data/lib/rouge/lexers/magik.rb +127 -0
  325. data/lib/rouge/lexers/make.rb +135 -0
  326. data/lib/rouge/lexers/markdown.rb +182 -0
  327. data/lib/rouge/lexers/mason.rb +110 -0
  328. data/lib/rouge/lexers/mathematica.rb +96 -0
  329. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  330. data/lib/rouge/lexers/matlab.rb +80 -0
  331. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  332. data/lib/rouge/lexers/minizinc.rb +87 -0
  333. data/lib/rouge/lexers/moonscript.rb +115 -0
  334. data/lib/rouge/lexers/mosel.rb +232 -0
  335. data/lib/rouge/lexers/msgtrans.rb +26 -0
  336. data/lib/rouge/lexers/mxml.rb +69 -0
  337. data/lib/rouge/lexers/nasm.rb +72 -0
  338. data/lib/rouge/lexers/nesasm.rb +78 -0
  339. data/lib/rouge/lexers/nginx.rb +72 -0
  340. data/lib/rouge/lexers/nim.rb +154 -0
  341. data/lib/rouge/lexers/nix.rb +211 -0
  342. data/lib/rouge/lexers/objective_c.rb +21 -0
  343. data/lib/rouge/lexers/objective_c/common.rb +184 -0
  344. data/lib/rouge/lexers/objective_cpp.rb +31 -0
  345. data/lib/rouge/lexers/ocaml.rb +65 -0
  346. data/lib/rouge/lexers/ocaml/common.rb +53 -0
  347. data/lib/rouge/lexers/openedge.rb +429 -0
  348. data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
  349. data/lib/rouge/lexers/pascal.rb +67 -0
  350. data/lib/rouge/lexers/perl.rb +231 -0
  351. data/lib/rouge/lexers/php.rb +231 -0
  352. data/lib/rouge/lexers/php/builtins.rb +203 -0
  353. data/lib/rouge/lexers/plain_text.rb +27 -0
  354. data/lib/rouge/lexers/plist.rb +47 -0
  355. data/lib/rouge/lexers/pony.rb +94 -0
  356. data/lib/rouge/lexers/powershell.rb +230 -0
  357. data/lib/rouge/lexers/praat.rb +351 -0
  358. data/lib/rouge/lexers/prolog.rb +67 -0
  359. data/lib/rouge/lexers/prometheus.rb +123 -0
  360. data/lib/rouge/lexers/properties.rb +52 -0
  361. data/lib/rouge/lexers/protobuf.rb +71 -0
  362. data/lib/rouge/lexers/puppet.rb +129 -0
  363. data/lib/rouge/lexers/python.rb +257 -0
  364. data/lib/rouge/lexers/q.rb +126 -0
  365. data/lib/rouge/lexers/qml.rb +74 -0
  366. data/lib/rouge/lexers/r.rb +89 -0
  367. data/lib/rouge/lexers/racket.rb +568 -0
  368. data/lib/rouge/lexers/reasonml.rb +65 -0
  369. data/lib/rouge/lexers/rego.rb +45 -0
  370. data/lib/rouge/lexers/robot_framework.rb +249 -0
  371. data/lib/rouge/lexers/ruby.rb +454 -0
  372. data/lib/rouge/lexers/rust.rb +193 -0
  373. data/lib/rouge/lexers/sas.rb +563 -0
  374. data/lib/rouge/lexers/sass.rb +75 -0
  375. data/lib/rouge/lexers/sass/common.rb +181 -0
  376. data/lib/rouge/lexers/scala.rb +169 -0
  377. data/lib/rouge/lexers/scheme.rb +113 -0
  378. data/lib/rouge/lexers/scss.rb +35 -0
  379. data/lib/rouge/lexers/sed.rb +173 -0
  380. data/lib/rouge/lexers/shell.rb +201 -0
  381. data/lib/rouge/lexers/sieve.rb +97 -0
  382. data/lib/rouge/lexers/slice.rb +32 -0
  383. data/lib/rouge/lexers/slim.rb +229 -0
  384. data/lib/rouge/lexers/smalltalk.rb +117 -0
  385. data/lib/rouge/lexers/smarty.rb +81 -0
  386. data/lib/rouge/lexers/sml.rb +345 -0
  387. data/lib/rouge/lexers/solidity.rb +185 -0
  388. data/lib/rouge/lexers/sparql.rb +129 -0
  389. data/lib/rouge/lexers/sqf.rb +109 -0
  390. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  391. data/lib/rouge/lexers/sql.rb +161 -0
  392. data/lib/rouge/lexers/supercollider.rb +116 -0
  393. data/lib/rouge/lexers/swift.rb +186 -0
  394. data/lib/rouge/lexers/tap.rb +89 -0
  395. data/lib/rouge/lexers/tcl.rb +193 -0
  396. data/lib/rouge/lexers/terraform.rb +128 -0
  397. data/lib/rouge/lexers/tex.rb +70 -0
  398. data/lib/rouge/lexers/toml.rb +106 -0
  399. data/lib/rouge/lexers/tsx.rb +20 -0
  400. data/lib/rouge/lexers/ttcn3.rb +119 -0
  401. data/lib/rouge/lexers/tulip.rb +108 -0
  402. data/lib/rouge/lexers/turtle.rb +61 -0
  403. data/lib/rouge/lexers/twig.rb +40 -0
  404. data/lib/rouge/lexers/typescript.rb +34 -0
  405. data/lib/rouge/lexers/typescript/common.rb +34 -0
  406. data/lib/rouge/lexers/vala.rb +78 -0
  407. data/lib/rouge/lexers/varnish.rb +168 -0
  408. data/lib/rouge/lexers/vb.rb +165 -0
  409. data/lib/rouge/lexers/verilog.rb +163 -0
  410. data/lib/rouge/lexers/vhdl.rb +98 -0
  411. data/lib/rouge/lexers/viml.rb +102 -0
  412. data/lib/rouge/lexers/viml/keywords.rb +14 -0
  413. data/lib/rouge/lexers/vue.rb +127 -0
  414. data/lib/rouge/lexers/wollok.rb +104 -0
  415. data/lib/rouge/lexers/xml.rb +54 -0
  416. data/lib/rouge/lexers/xojo.rb +61 -0
  417. data/lib/rouge/lexers/xpath.rb +332 -0
  418. data/lib/rouge/lexers/xquery.rb +145 -0
  419. data/lib/rouge/lexers/yaml.rb +376 -0
  420. data/lib/rouge/lexers/yang.rb +147 -0
  421. data/lib/rouge/plugins/redcarpet.rb +37 -0
  422. data/lib/rouge/regex_lexer.rb +443 -0
  423. data/lib/rouge/template_lexer.rb +21 -0
  424. data/lib/rouge/tex_theme_renderer.rb +132 -0
  425. data/lib/rouge/text_analyzer.rb +50 -0
  426. data/lib/rouge/theme.rb +218 -0
  427. data/lib/rouge/themes/base16.rb +131 -0
  428. data/lib/rouge/themes/bw.rb +41 -0
  429. data/lib/rouge/themes/colorful.rb +68 -0
  430. data/lib/rouge/themes/github.rb +72 -0
  431. data/lib/rouge/themes/gruvbox.rb +168 -0
  432. data/lib/rouge/themes/igor_pro.rb +21 -0
  433. data/lib/rouge/themes/magritte.rb +78 -0
  434. data/lib/rouge/themes/molokai.rb +83 -0
  435. data/lib/rouge/themes/monokai.rb +93 -0
  436. data/lib/rouge/themes/monokai_sublime.rb +93 -0
  437. data/lib/rouge/themes/pastie.rb +70 -0
  438. data/lib/rouge/themes/thankful_eyes.rb +75 -0
  439. data/lib/rouge/themes/tulip.rb +70 -0
  440. data/lib/rouge/token.rb +191 -0
  441. data/lib/rouge/util.rb +102 -0
  442. data/lib/rouge/version.rb +8 -0
  443. data/rouge.gemspec +26 -0
  444. metadata +491 -0
@@ -0,0 +1,178 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ # vim: set ts=2 sw=2 et:
5
+
6
+ # TODO: Implement format list support.
7
+
8
+ module Rouge
9
+ module Lexers
10
+ class Fortran < RegexLexer
11
+ title "Fortran"
12
+ desc "Fortran 2008 (free-form)"
13
+
14
+ tag 'fortran'
15
+ filenames '*.f', '*.f90', '*.f95', '*.f03', '*.f08',
16
+ '*.F', '*.F90', '*.F95', '*.F03', '*.F08'
17
+ mimetypes 'text/x-fortran'
18
+
19
+ name = /[A-Z][_A-Z0-9]*/i
20
+ kind_param = /(\d+|#{name})/
21
+ exponent = /[ED][+-]?\d+/i
22
+
23
+ def self.keywords
24
+ # Special rules for two-word keywords are defined further down.
25
+ # Note: Fortran allows to omit whitespace between certain keywords.
26
+ @keywords ||= Set.new %w(
27
+ abstract allocatable allocate assign assignment associate asynchronous
28
+ backspace bind block blockdata call case class close codimension
29
+ common concurrent contains contiguous continue critical cycle data
30
+ deallocate deferred dimension do elemental else elseif elsewhere end
31
+ endassociate endblock endblockdata enddo endenum endfile endforall
32
+ endfunction endif endinterface endmodule endprogram endselect
33
+ endsubmodule endsubroutine endtype endwhere endwhile entry enum
34
+ enumerator equivalence exit extends external final flush forall format
35
+ function generic goto if implicit import in include inout inquire
36
+ intent interface intrinsic is lock module namelist non_overridable
37
+ none nopass nullify only open operator optional out parameter pass
38
+ pause pointer print private procedure program protected public pure
39
+ read recursive result return rewind save select selectcase sequence
40
+ stop submodule subroutine target then type unlock use value volatile
41
+ wait where while write
42
+ )
43
+ end
44
+
45
+ def self.types
46
+ # A special rule for the two-word version "double precision" is
47
+ # defined further down.
48
+ @types ||= Set.new %w(
49
+ character complex doubleprecision integer logical real
50
+ )
51
+ end
52
+
53
+ def self.intrinsics
54
+ @intrinsics ||= Set.new %w(
55
+ abs achar acos acosh adjustl adjustr aimag aint all allocated anint
56
+ any asin asinh associated atan atan2 atanh atomic_define atomic_ref
57
+ bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn bge bgt
58
+ bit_size ble blt btest c_associated c_f_pointer c_f_procpointer
59
+ c_funloc c_loc c_sizeof ceiling char cmplx command_argument_count
60
+ compiler_options compiler_version conjg cos cosh count cpu_time cshift
61
+ date_and_time dble digits dim dot_product dprod dshiftl dshiftr
62
+ eoshift epsilon erf erfc_scaled erfc execute_command_line exp exponent
63
+ extends_type_of findloc floor fraction gamma get_command_argument
64
+ get_command get_environment_variable huge hypot iachar iall iand iany
65
+ ibclr ibits ibset ichar ieee_class ieee_copy_sign ieee_get_flag
66
+ ieee_get_halting_mode ieee_get_rounding_mode ieee_get_status
67
+ ieee_get_underflow_mode ieee_is_finite ieee_is_nan ieee_is_normal
68
+ ieee_logb ieee_next_after ieee_rem ieee_rint ieee_scalb
69
+ ieee_selected_real_kind ieee_set_flag ieee_set_halting_mode
70
+ ieee_set_rounding_mode ieee_set_status ieee_set_underflow_mode
71
+ ieee_support_datatype ieee_support_denormal ieee_support_divide
72
+ ieee_support_flag ieee_support_halting ieee_support_inf
73
+ ieee_support_io ieee_support_nan ieee_support_rounding
74
+ ieee_support_sqrt ieee_support_standard ieee_support_underflow_control
75
+ ieee_unordered ieee_value ieor image_index index int ior iparity
76
+ is_contiguous is_iostat_end is_iostat_eor ishft ishftc kind lbound
77
+ lcobound leadz len_trim len lge lgt lle llt log_gamma log log10
78
+ logical maskl maskr matmul max maxexponent maxloc maxval merge_bits
79
+ merge min minexponent minloc minval mod modulo move_alloc mvbits
80
+ nearest new_line nint norm2 not null num_images pack parity popcnt
81
+ poppar present product radix random_number random_seed range real
82
+ repeat reshape rrspacing same_type_as scale scan selected_char_kind
83
+ selected_int_kind selected_real_kind set_exponent shape shifta shiftl
84
+ shiftr sign sin sinh size spacing spread sqrt storage_size sum
85
+ system_clock tan tanh this_image tiny trailz transfer transpose trim
86
+ ubound ucobound unpack verify
87
+ )
88
+ end
89
+
90
+ state :root do
91
+ rule %r/[\s]+/, Text::Whitespace
92
+ rule %r/!.*$/, Comment::Single
93
+ rule %r/^#.*$/, Comment::Preproc
94
+
95
+ rule %r/::|[()\/;,:&\[\]]/, Punctuation
96
+
97
+ # TODO: This does not take into account line continuation.
98
+ rule %r/^(\s*)([0-9]+)\b/m do |m|
99
+ token Text::Whitespace, m[1]
100
+ token Name::Label, m[2]
101
+ end
102
+
103
+ # Format statements are quite a strange beast.
104
+ # Better process them in their own state.
105
+ rule %r/\b(FORMAT)(\s*)(\()/mi do |m|
106
+ token Keyword, m[1]
107
+ token Text::Whitespace, m[2]
108
+ token Punctuation, m[3]
109
+ push :format_spec
110
+ end
111
+
112
+ rule %r(
113
+ [+-]? # sign
114
+ (
115
+ (\d+[.]\d*|[.]\d+)(#{exponent})?
116
+ | \d+#{exponent} # exponent is mandatory
117
+ )
118
+ (_#{kind_param})? # kind parameter
119
+ )xi, Num::Float
120
+
121
+ rule %r/[+-]?\d+(_#{kind_param})?/i, Num::Integer
122
+ rule %r/B'[01]+'|B"[01]+"/i, Num::Bin
123
+ rule %r/O'[0-7]+'|O"[0-7]+"/i, Num::Oct
124
+ rule %r/Z'[0-9A-F]+'|Z"[0-9A-F]+"/i, Num::Hex
125
+ rule %r/(#{kind_param}_)?'/, Str::Single, :string_single
126
+ rule %r/(#{kind_param}_)?"/, Str::Double, :string_double
127
+ rule %r/[.](TRUE|FALSE)[.](_#{kind_param})?/i, Keyword::Constant
128
+
129
+ rule %r{\*\*|//|==|/=|<=|>=|=>|[-+*/<>=%]}, Operator
130
+ rule %r/\.(?:EQ|NE|LT|LE|GT|GE|NOT|AND|OR|EQV|NEQV|[A-Z]+)\./i, Operator::Word
131
+
132
+ # Special rules for two-word keywords and types.
133
+ # Note: "doubleprecision" is covered by the normal keyword rule.
134
+ rule %r/double\s+precision\b/i, Keyword::Type
135
+ rule %r/go\s+to\b/i, Keyword
136
+ rule %r/sync\s+(all|images|memory)\b/i, Keyword
137
+ rule %r/error\s+stop\b/i, Keyword
138
+
139
+ rule %r/#{name}/m do |m|
140
+ match = m[0].downcase
141
+ if self.class.keywords.include? match
142
+ token Keyword
143
+ elsif self.class.types.include? match
144
+ token Keyword::Type
145
+ elsif self.class.intrinsics.include? match
146
+ token Name::Builtin
147
+ else
148
+ token Name
149
+ end
150
+ end
151
+
152
+ end
153
+
154
+ state :string_single do
155
+ rule %r/[^']+/, Str::Single
156
+ rule %r/''/, Str::Escape
157
+ rule %r/'/, Str::Single, :pop!
158
+ end
159
+
160
+ state :string_double do
161
+ rule %r/[^"]+/, Str::Double
162
+ rule %r/""/, Str::Escape
163
+ rule %r/"/, Str::Double, :pop!
164
+ end
165
+
166
+ state :format_spec do
167
+ rule %r/'/, Str::Single, :string_single
168
+ rule %r/"/, Str::Double, :string_double
169
+ rule %r/\(/, Punctuation, :format_spec
170
+ rule %r/\)/, Punctuation, :pop!
171
+ rule %r/,/, Punctuation
172
+ rule %r/[\s]+/, Text::Whitespace
173
+ # Edit descriptors could be seen as a kind of "format literal".
174
+ rule %r/[^\s'"(),]+/, Literal
175
+ end
176
+ end
177
+ end
178
+ end
@@ -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,120 @@
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
+ rule %r/\[/, Punctuation, :pop!
117
+ end
118
+ end
119
+ end
120
+ end