pygments.rb 1.2.1 → 2.2.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 (386) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +13 -0
  3. data/.github/workflows/ci.yml +40 -0
  4. data/.github/workflows/release.yml +24 -0
  5. data/.gitignore +4 -6
  6. data/.rubocop.yml +16 -0
  7. data/CHANGELOG.adoc +137 -0
  8. data/Gemfile +3 -1
  9. data/LICENSE +1 -1
  10. data/README.adoc +159 -0
  11. data/Rakefile +8 -32
  12. data/bench.rb +14 -8
  13. data/lib/pygments.rb +16 -14
  14. data/lib/pygments/lexer.rb +87 -65
  15. data/lib/pygments/mentos.py +23 -110
  16. data/lib/pygments/popen.rb +188 -284
  17. data/lib/pygments/version.rb +2 -2
  18. data/pygments.rb.gemspec +20 -13
  19. data/test/test_pygments.rb +50 -110
  20. data/vendor/pygments-main/{AUTHORS → Pygments-2.8.1.dist-info/AUTHORS} +26 -3
  21. data/vendor/pygments-main/Pygments-2.8.1.dist-info/INSTALLER +1 -0
  22. data/vendor/pygments-main/{LICENSE → Pygments-2.8.1.dist-info/LICENSE} +1 -1
  23. data/vendor/pygments-main/Pygments-2.8.1.dist-info/METADATA +48 -0
  24. data/vendor/pygments-main/Pygments-2.8.1.dist-info/RECORD +494 -0
  25. data/vendor/pygments-main/Pygments-2.8.1.dist-info/REQUESTED +0 -0
  26. data/vendor/pygments-main/Pygments-2.8.1.dist-info/WHEEL +5 -0
  27. data/vendor/pygments-main/Pygments-2.8.1.dist-info/entry_points.txt +3 -0
  28. data/vendor/pygments-main/Pygments-2.8.1.dist-info/top_level.txt +1 -0
  29. data/vendor/pygments-main/bin/pygmentize +8 -0
  30. data/vendor/pygments-main/pygments/__init__.py +6 -12
  31. data/vendor/pygments-main/pygments/__main__.py +17 -0
  32. data/vendor/pygments-main/pygments/cmdline.py +213 -184
  33. data/vendor/pygments-main/pygments/console.py +6 -10
  34. data/vendor/pygments-main/pygments/filter.py +4 -7
  35. data/vendor/pygments-main/pygments/filters/__init__.py +609 -22
  36. data/vendor/pygments-main/pygments/formatter.py +4 -5
  37. data/vendor/pygments-main/pygments/formatters/__init__.py +10 -10
  38. data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -4
  39. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -2
  40. data/vendor/pygments-main/pygments/formatters/html.py +242 -139
  41. data/vendor/pygments-main/pygments/formatters/img.py +91 -50
  42. data/vendor/pygments-main/pygments/formatters/irc.py +39 -40
  43. data/vendor/pygments-main/pygments/formatters/latex.py +62 -33
  44. data/vendor/pygments-main/pygments/formatters/other.py +18 -17
  45. data/vendor/pygments-main/pygments/formatters/rtf.py +29 -30
  46. data/vendor/pygments-main/pygments/formatters/svg.py +40 -5
  47. data/vendor/pygments-main/pygments/formatters/terminal.py +25 -32
  48. data/vendor/pygments-main/pygments/formatters/terminal256.py +45 -14
  49. data/vendor/pygments-main/pygments/lexer.py +47 -44
  50. data/vendor/pygments-main/pygments/lexers/__init__.py +341 -0
  51. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1644 -0
  52. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +231 -0
  53. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +75 -0
  54. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1724 -0
  55. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +5326 -0
  56. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +292 -0
  57. data/vendor/pygments-main/pygments/lexers/_mapping.py +554 -0
  58. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1171 -0
  59. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1281 -0
  60. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +2600 -0
  61. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +4752 -0
  62. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +677 -0
  63. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +3093 -0
  64. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1160 -0
  65. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +557 -0
  66. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +457 -0
  67. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1003 -0
  68. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +112 -0
  69. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +279 -0
  70. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1938 -0
  71. data/vendor/pygments-main/pygments/lexers/actionscript.py +244 -0
  72. data/vendor/pygments-main/pygments/lexers/agile.py +23 -0
  73. data/vendor/pygments-main/pygments/lexers/algebra.py +239 -0
  74. data/vendor/pygments-main/pygments/lexers/ambient.py +75 -0
  75. data/vendor/pygments-main/pygments/lexers/amdgpu.py +48 -0
  76. data/vendor/pygments-main/pygments/lexers/ampl.py +86 -0
  77. data/vendor/pygments-main/pygments/lexers/apl.py +100 -0
  78. data/vendor/pygments-main/pygments/lexers/archetype.py +317 -0
  79. data/vendor/pygments-main/pygments/lexers/arrow.py +116 -0
  80. data/vendor/pygments-main/pygments/lexers/asm.py +1004 -0
  81. data/vendor/pygments-main/pygments/lexers/automation.py +379 -0
  82. data/vendor/pygments-main/pygments/lexers/bare.py +103 -0
  83. data/vendor/pygments-main/pygments/lexers/basic.py +661 -0
  84. data/vendor/pygments-main/pygments/lexers/bibtex.py +159 -0
  85. data/vendor/pygments-main/pygments/lexers/boa.py +101 -0
  86. data/vendor/pygments-main/pygments/lexers/business.py +626 -0
  87. data/vendor/pygments-main/pygments/lexers/c_cpp.py +342 -0
  88. data/vendor/pygments-main/pygments/lexers/c_like.py +565 -0
  89. data/vendor/pygments-main/pygments/lexers/capnproto.py +77 -0
  90. data/vendor/pygments-main/pygments/lexers/cddl.py +190 -0
  91. data/vendor/pygments-main/pygments/lexers/chapel.py +111 -0
  92. data/vendor/pygments-main/pygments/lexers/clean.py +178 -0
  93. data/vendor/pygments-main/pygments/lexers/compiled.py +33 -0
  94. data/vendor/pygments-main/pygments/lexers/configs.py +985 -0
  95. data/vendor/pygments-main/pygments/lexers/console.py +113 -0
  96. data/vendor/pygments-main/pygments/lexers/crystal.py +366 -0
  97. data/vendor/pygments-main/pygments/lexers/csound.py +466 -0
  98. data/vendor/pygments-main/pygments/lexers/css.py +694 -0
  99. data/vendor/pygments-main/pygments/lexers/d.py +255 -0
  100. data/vendor/pygments-main/pygments/lexers/dalvik.py +124 -0
  101. data/vendor/pygments-main/pygments/lexers/data.py +697 -0
  102. data/vendor/pygments-main/pygments/lexers/devicetree.py +108 -0
  103. data/vendor/pygments-main/pygments/lexers/diff.py +164 -0
  104. data/vendor/pygments-main/pygments/lexers/dotnet.py +706 -0
  105. data/vendor/pygments-main/pygments/lexers/dsls.py +959 -0
  106. data/vendor/pygments-main/pygments/lexers/dylan.py +286 -0
  107. data/vendor/pygments-main/pygments/lexers/ecl.py +137 -0
  108. data/vendor/pygments-main/pygments/lexers/eiffel.py +64 -0
  109. data/vendor/pygments-main/pygments/lexers/elm.py +120 -0
  110. data/vendor/pygments-main/pygments/lexers/email.py +150 -0
  111. data/vendor/pygments-main/pygments/lexers/erlang.py +529 -0
  112. data/vendor/pygments-main/pygments/lexers/esoteric.py +303 -0
  113. data/vendor/pygments-main/pygments/lexers/ezhil.py +76 -0
  114. data/vendor/pygments-main/pygments/lexers/factor.py +343 -0
  115. data/vendor/pygments-main/pygments/lexers/fantom.py +249 -0
  116. data/vendor/pygments-main/pygments/lexers/felix.py +272 -0
  117. data/vendor/pygments-main/pygments/lexers/floscript.py +82 -0
  118. data/vendor/pygments-main/pygments/lexers/forth.py +177 -0
  119. data/vendor/pygments-main/pygments/lexers/fortran.py +208 -0
  120. data/vendor/pygments-main/pygments/lexers/foxpro.py +427 -0
  121. data/vendor/pygments-main/pygments/lexers/freefem.py +897 -0
  122. data/vendor/pygments-main/pygments/lexers/functional.py +20 -0
  123. data/vendor/pygments-main/pygments/lexers/futhark.py +110 -0
  124. data/vendor/pygments-main/pygments/lexers/gdscript.py +345 -0
  125. data/vendor/pygments-main/pygments/lexers/go.py +100 -0
  126. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +269 -0
  127. data/vendor/pygments-main/pygments/lexers/graph.py +84 -0
  128. data/vendor/pygments-main/pygments/lexers/graphics.py +799 -0
  129. data/vendor/pygments-main/pygments/lexers/graphviz.py +57 -0
  130. data/vendor/pygments-main/pygments/lexers/haskell.py +869 -0
  131. data/vendor/pygments-main/pygments/lexers/haxe.py +935 -0
  132. data/vendor/pygments-main/pygments/lexers/hdl.py +468 -0
  133. data/vendor/pygments-main/pygments/lexers/hexdump.py +102 -0
  134. data/vendor/pygments-main/pygments/lexers/html.py +613 -0
  135. data/vendor/pygments-main/pygments/lexers/idl.py +280 -0
  136. data/vendor/pygments-main/pygments/lexers/igor.py +419 -0
  137. data/vendor/pygments-main/pygments/lexers/inferno.py +95 -0
  138. data/vendor/pygments-main/pygments/lexers/installers.py +321 -0
  139. data/vendor/pygments-main/pygments/lexers/int_fiction.py +1367 -0
  140. data/vendor/pygments-main/pygments/lexers/iolang.py +62 -0
  141. data/vendor/pygments-main/pygments/lexers/j.py +145 -0
  142. data/vendor/pygments-main/pygments/lexers/javascript.py +1536 -0
  143. data/vendor/pygments-main/pygments/lexers/julia.py +330 -0
  144. data/vendor/pygments-main/pygments/lexers/jvm.py +1739 -0
  145. data/vendor/pygments-main/pygments/lexers/lisp.py +2698 -0
  146. data/vendor/pygments-main/pygments/lexers/make.py +205 -0
  147. data/vendor/pygments-main/pygments/lexers/markup.py +762 -0
  148. data/vendor/pygments-main/pygments/lexers/math.py +20 -0
  149. data/vendor/pygments-main/pygments/lexers/matlab.py +3280 -0
  150. data/vendor/pygments-main/pygments/lexers/mime.py +225 -0
  151. data/vendor/pygments-main/pygments/lexers/ml.py +957 -0
  152. data/vendor/pygments-main/pygments/lexers/modeling.py +365 -0
  153. data/vendor/pygments-main/pygments/lexers/modula2.py +1579 -0
  154. data/vendor/pygments-main/pygments/lexers/monte.py +203 -0
  155. data/vendor/pygments-main/pygments/lexers/mosel.py +447 -0
  156. data/vendor/pygments-main/pygments/lexers/ncl.py +893 -0
  157. data/vendor/pygments-main/pygments/lexers/nimrod.py +158 -0
  158. data/vendor/pygments-main/pygments/lexers/nit.py +63 -0
  159. data/vendor/pygments-main/pygments/lexers/nix.py +135 -0
  160. data/vendor/pygments-main/pygments/lexers/oberon.py +120 -0
  161. data/vendor/pygments-main/pygments/lexers/objective.py +503 -0
  162. data/vendor/pygments-main/pygments/lexers/ooc.py +84 -0
  163. data/vendor/pygments-main/pygments/lexers/other.py +40 -0
  164. data/vendor/pygments-main/pygments/lexers/parasail.py +78 -0
  165. data/vendor/pygments-main/pygments/lexers/parsers.py +799 -0
  166. data/vendor/pygments-main/pygments/lexers/pascal.py +643 -0
  167. data/vendor/pygments-main/pygments/lexers/pawn.py +202 -0
  168. data/vendor/pygments-main/pygments/lexers/perl.py +731 -0
  169. data/vendor/pygments-main/pygments/lexers/php.py +320 -0
  170. data/vendor/pygments-main/pygments/lexers/pointless.py +70 -0
  171. data/vendor/pygments-main/pygments/lexers/pony.py +93 -0
  172. data/vendor/pygments-main/pygments/lexers/praat.py +301 -0
  173. data/vendor/pygments-main/pygments/lexers/prolog.py +305 -0
  174. data/vendor/pygments-main/pygments/lexers/promql.py +182 -0
  175. data/vendor/pygments-main/pygments/lexers/python.py +1158 -0
  176. data/vendor/pygments-main/pygments/lexers/qvt.py +151 -0
  177. data/vendor/pygments-main/pygments/lexers/r.py +190 -0
  178. data/vendor/pygments-main/pygments/lexers/rdf.py +462 -0
  179. data/vendor/pygments-main/pygments/lexers/rebol.py +430 -0
  180. data/vendor/pygments-main/pygments/lexers/resource.py +84 -0
  181. data/vendor/pygments-main/pygments/lexers/ride.py +138 -0
  182. data/vendor/pygments-main/pygments/lexers/rnc.py +66 -0
  183. data/vendor/pygments-main/pygments/lexers/roboconf.py +81 -0
  184. data/vendor/pygments-main/pygments/lexers/robotframework.py +551 -0
  185. data/vendor/pygments-main/pygments/lexers/ruby.py +523 -0
  186. data/vendor/pygments-main/pygments/lexers/rust.py +223 -0
  187. data/vendor/pygments-main/pygments/lexers/sas.py +227 -0
  188. data/vendor/pygments-main/pygments/lexers/scdoc.py +82 -0
  189. data/vendor/pygments-main/pygments/lexers/scripting.py +1283 -0
  190. data/vendor/pygments-main/pygments/lexers/sgf.py +60 -0
  191. data/vendor/pygments-main/pygments/lexers/shell.py +909 -0
  192. data/vendor/pygments-main/pygments/lexers/sieve.py +68 -0
  193. data/vendor/pygments-main/pygments/lexers/slash.py +184 -0
  194. data/vendor/pygments-main/pygments/lexers/smalltalk.py +194 -0
  195. data/vendor/pygments-main/pygments/lexers/smv.py +78 -0
  196. data/vendor/pygments-main/pygments/lexers/snobol.py +82 -0
  197. data/vendor/pygments-main/pygments/lexers/solidity.py +91 -0
  198. data/vendor/pygments-main/pygments/lexers/special.py +106 -0
  199. data/vendor/pygments-main/pygments/lexers/sql.py +832 -0
  200. data/vendor/pygments-main/pygments/lexers/stata.py +170 -0
  201. data/vendor/pygments-main/pygments/lexers/supercollider.py +94 -0
  202. data/vendor/pygments-main/pygments/lexers/tcl.py +144 -0
  203. data/vendor/pygments-main/pygments/lexers/templates.py +2263 -0
  204. data/vendor/pygments-main/pygments/lexers/teraterm.py +334 -0
  205. data/vendor/pygments-main/pygments/lexers/testing.py +206 -0
  206. data/vendor/pygments-main/pygments/lexers/text.py +25 -0
  207. data/vendor/pygments-main/pygments/lexers/textedit.py +168 -0
  208. data/vendor/pygments-main/pygments/lexers/textfmts.py +429 -0
  209. data/vendor/pygments-main/pygments/lexers/theorem.py +476 -0
  210. data/vendor/pygments-main/pygments/lexers/tnt.py +262 -0
  211. data/vendor/pygments-main/pygments/lexers/trafficscript.py +53 -0
  212. data/vendor/pygments-main/pygments/lexers/typoscript.py +218 -0
  213. data/vendor/pygments-main/pygments/lexers/unicon.py +411 -0
  214. data/vendor/pygments-main/pygments/lexers/urbi.py +145 -0
  215. data/vendor/pygments-main/pygments/lexers/usd.py +89 -0
  216. data/vendor/pygments-main/pygments/lexers/varnish.py +189 -0
  217. data/vendor/pygments-main/pygments/lexers/verification.py +113 -0
  218. data/vendor/pygments-main/pygments/lexers/web.py +23 -0
  219. data/vendor/pygments-main/pygments/lexers/webidl.py +298 -0
  220. data/vendor/pygments-main/pygments/lexers/webmisc.py +991 -0
  221. data/vendor/pygments-main/pygments/lexers/whiley.py +115 -0
  222. data/vendor/pygments-main/pygments/lexers/x10.py +68 -0
  223. data/vendor/pygments-main/pygments/lexers/xorg.py +36 -0
  224. data/vendor/pygments-main/pygments/lexers/yang.py +103 -0
  225. data/vendor/pygments-main/pygments/lexers/zig.py +123 -0
  226. data/vendor/pygments-main/pygments/modeline.py +1 -2
  227. data/vendor/pygments-main/pygments/plugin.py +4 -3
  228. data/vendor/pygments-main/pygments/regexopt.py +1 -2
  229. data/vendor/pygments-main/pygments/scanner.py +2 -3
  230. data/vendor/pygments-main/pygments/sphinxext.py +2 -5
  231. data/vendor/pygments-main/pygments/style.py +61 -25
  232. data/vendor/pygments-main/pygments/styles/__init__.py +12 -5
  233. data/vendor/pygments-main/pygments/styles/abap.py +1 -2
  234. data/vendor/pygments-main/pygments/styles/algol.py +1 -2
  235. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -2
  236. data/vendor/pygments-main/pygments/styles/arduino.py +2 -3
  237. data/vendor/pygments-main/pygments/styles/autumn.py +1 -2
  238. data/vendor/pygments-main/pygments/styles/borland.py +1 -2
  239. data/vendor/pygments-main/pygments/styles/bw.py +1 -2
  240. data/vendor/pygments-main/pygments/styles/colorful.py +1 -2
  241. data/vendor/pygments-main/pygments/styles/default.py +1 -2
  242. data/vendor/pygments-main/pygments/styles/emacs.py +1 -2
  243. data/vendor/pygments-main/pygments/styles/friendly.py +1 -2
  244. data/vendor/pygments-main/pygments/styles/fruity.py +1 -2
  245. data/vendor/pygments-main/pygments/styles/igor.py +1 -2
  246. data/vendor/pygments-main/pygments/styles/inkpot.py +66 -0
  247. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -2
  248. data/vendor/pygments-main/pygments/styles/manni.py +1 -2
  249. data/vendor/pygments-main/pygments/styles/material.py +118 -0
  250. data/vendor/pygments-main/pygments/styles/monokai.py +4 -4
  251. data/vendor/pygments-main/pygments/styles/murphy.py +1 -2
  252. data/vendor/pygments-main/pygments/styles/native.py +1 -2
  253. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -2
  254. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -2
  255. data/vendor/pygments-main/pygments/styles/pastie.py +1 -2
  256. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -2
  257. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -2
  258. data/vendor/pygments-main/pygments/styles/rrt.py +1 -2
  259. data/vendor/pygments-main/pygments/styles/sas.py +1 -2
  260. data/vendor/pygments-main/pygments/styles/solarized.py +136 -0
  261. data/vendor/pygments-main/pygments/styles/stata_dark.py +40 -0
  262. data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -16
  263. data/vendor/pygments-main/pygments/styles/tango.py +1 -2
  264. data/vendor/pygments-main/pygments/styles/trac.py +1 -2
  265. data/vendor/pygments-main/pygments/styles/vim.py +1 -2
  266. data/vendor/pygments-main/pygments/styles/vs.py +1 -2
  267. data/vendor/pygments-main/pygments/styles/xcode.py +1 -2
  268. data/vendor/pygments-main/pygments/styles/zenburn.py +80 -0
  269. data/vendor/pygments-main/pygments/token.py +1 -2
  270. data/vendor/pygments-main/pygments/unistring.py +47 -109
  271. data/vendor/pygments-main/pygments/util.py +16 -96
  272. metadata +81 -139
  273. data/CHANGELOG.md +0 -111
  274. data/README.md +0 -121
  275. data/cache-lexers.rb +0 -8
  276. data/circle.yml +0 -20
  277. data/test/test_data.c +0 -2581
  278. data/test/test_data.py +0 -514
  279. data/test/test_data_generated +0 -2582
  280. data/vendor/custom_lexers/github.py +0 -565
  281. data/vendor/pygments-main/CHANGES +0 -1186
  282. data/vendor/pygments-main/MANIFEST.in +0 -6
  283. data/vendor/pygments-main/Makefile +0 -65
  284. data/vendor/pygments-main/README.rst +0 -39
  285. data/vendor/pygments-main/REVISION +0 -1
  286. data/vendor/pygments-main/TODO +0 -12
  287. data/vendor/pygments-main/doc/Makefile +0 -153
  288. data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
  289. data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
  290. data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
  291. data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
  292. data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
  293. data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
  294. data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
  295. data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
  296. data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
  297. data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
  298. data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
  299. data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
  300. data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
  301. data/vendor/pygments-main/doc/conf.py +0 -241
  302. data/vendor/pygments-main/doc/docs/api.rst +0 -354
  303. data/vendor/pygments-main/doc/docs/authors.rst +0 -4
  304. data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
  305. data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
  306. data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
  307. data/vendor/pygments-main/doc/docs/filters.rst +0 -41
  308. data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
  309. data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
  310. data/vendor/pygments-main/doc/docs/index.rst +0 -66
  311. data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
  312. data/vendor/pygments-main/doc/docs/java.rst +0 -70
  313. data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
  314. data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
  315. data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
  316. data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
  317. data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
  318. data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
  319. data/vendor/pygments-main/doc/docs/styles.rst +0 -201
  320. data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
  321. data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
  322. data/vendor/pygments-main/doc/download.rst +0 -41
  323. data/vendor/pygments-main/doc/faq.rst +0 -139
  324. data/vendor/pygments-main/doc/index.rst +0 -54
  325. data/vendor/pygments-main/doc/languages.rst +0 -154
  326. data/vendor/pygments-main/doc/make.bat +0 -190
  327. data/vendor/pygments-main/doc/pygmentize.1 +0 -94
  328. data/vendor/pygments-main/external/autopygmentize +0 -101
  329. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
  330. data/vendor/pygments-main/external/markdown-processor.py +0 -67
  331. data/vendor/pygments-main/external/moin-parser.py +0 -112
  332. data/vendor/pygments-main/external/pygments.bashcomp +0 -38
  333. data/vendor/pygments-main/external/rst-directive.py +0 -82
  334. data/vendor/pygments-main/pygmentize +0 -8
  335. data/vendor/pygments-main/requirements.txt +0 -5
  336. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  337. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  338. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  339. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  340. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  341. data/vendor/pygments-main/scripts/pylintrc +0 -301
  342. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  343. data/vendor/pygments-main/setup.cfg +0 -10
  344. data/vendor/pygments-main/setup.py +0 -77
  345. data/vendor/pygments-main/tox.ini +0 -7
  346. data/vendor/simplejson/.gitignore +0 -10
  347. data/vendor/simplejson/.travis.yml +0 -5
  348. data/vendor/simplejson/CHANGES.txt +0 -291
  349. data/vendor/simplejson/LICENSE.txt +0 -19
  350. data/vendor/simplejson/MANIFEST.in +0 -5
  351. data/vendor/simplejson/README.rst +0 -19
  352. data/vendor/simplejson/conf.py +0 -179
  353. data/vendor/simplejson/index.rst +0 -628
  354. data/vendor/simplejson/scripts/make_docs.py +0 -18
  355. data/vendor/simplejson/setup.py +0 -104
  356. data/vendor/simplejson/simplejson/__init__.py +0 -510
  357. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  358. data/vendor/simplejson/simplejson/decoder.py +0 -425
  359. data/vendor/simplejson/simplejson/encoder.py +0 -567
  360. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  361. data/vendor/simplejson/simplejson/scanner.py +0 -77
  362. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  363. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  364. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  365. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  366. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  367. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  368. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  369. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  370. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  371. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  372. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  373. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  374. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  375. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  376. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  377. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  378. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  379. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  380. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  381. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  382. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  383. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  384. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  385. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  386. data/vendor/simplejson/simplejson/tool.py +0 -39
@@ -0,0 +1,57 @@
1
+ """
2
+ pygments.lexers.graphviz
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for the DOT language (graphviz).
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, bygroups
12
+ from pygments.token import Comment, Keyword, Operator, Name, String, Number, Punctuation, Whitespace
13
+
14
+
15
+ __all__ = ['GraphvizLexer']
16
+
17
+
18
+ class GraphvizLexer(RegexLexer):
19
+ """
20
+ For graphviz DOT graph description language.
21
+
22
+ .. versionadded:: 2.8
23
+ """
24
+ name = 'Graphviz'
25
+ aliases = ['graphviz', 'dot']
26
+ filenames = ['*.gv', '*.dot']
27
+ mimetypes = ['text/x-graphviz', 'text/vnd.graphviz']
28
+ tokens = {
29
+ 'root': [
30
+ (r'\s+', Whitespace),
31
+ (r'(#|//).*?$', Comment.Single),
32
+ (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline),
33
+ (r'(?i)(node|edge|graph|digraph|subgraph|strict)\b', Keyword),
34
+ (r'--|->', Operator),
35
+ (r'[{}[\]:;,]', Punctuation),
36
+ (r'(\b\D\w*)(\s*)(=)(\s*)',
37
+ bygroups(Name.Attribute, Whitespace, Punctuation, Whitespace),
38
+ 'attr_id'),
39
+ (r'\b(n|ne|e|se|s|sw|w|nw|c|_)\b', Name.Builtin),
40
+ (r'\b\D\w*', Name.Tag), # node
41
+ (r'[-]?((\.[0-9]+)|([0-9]+(\.[0-9]*)?))', Number),
42
+ (r'"(\\"|[^"])*?"', Name.Tag), # quoted node
43
+ (r'<', Punctuation, 'xml'),
44
+ ],
45
+ 'attr_id': [
46
+ (r'\b\D\w*', String, '#pop'),
47
+ (r'[-]?((\.[0-9]+)|([0-9]+(\.[0-9]*)?))', Number, '#pop'),
48
+ (r'"(\\"|[^"])*?"', String.Double, '#pop'),
49
+ (r'<', Punctuation, ('#pop', 'xml')),
50
+ ],
51
+ 'xml': [
52
+ (r'<', Punctuation, '#push'),
53
+ (r'>', Punctuation, '#pop'),
54
+ (r'\s+', Whitespace),
55
+ (r'[^<>\s]', Name.Tag),
56
+ ]
57
+ }
@@ -0,0 +1,869 @@
1
+ """
2
+ pygments.lexers.haskell
3
+ ~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for Haskell and related languages.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import Lexer, RegexLexer, bygroups, do_insertions, \
14
+ default, include, inherit
15
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
16
+ Number, Punctuation, Generic
17
+ from pygments import unistring as uni
18
+
19
+ __all__ = ['HaskellLexer', 'HspecLexer', 'IdrisLexer', 'AgdaLexer', 'CryptolLexer',
20
+ 'LiterateHaskellLexer', 'LiterateIdrisLexer', 'LiterateAgdaLexer',
21
+ 'LiterateCryptolLexer', 'KokaLexer']
22
+
23
+
24
+ line_re = re.compile('.*?\n')
25
+
26
+
27
+ class HaskellLexer(RegexLexer):
28
+ """
29
+ A Haskell lexer based on the lexemes defined in the Haskell 98 Report.
30
+
31
+ .. versionadded:: 0.8
32
+ """
33
+ name = 'Haskell'
34
+ aliases = ['haskell', 'hs']
35
+ filenames = ['*.hs']
36
+ mimetypes = ['text/x-haskell']
37
+
38
+ flags = re.MULTILINE | re.UNICODE
39
+
40
+ reserved = ('case', 'class', 'data', 'default', 'deriving', 'do', 'else',
41
+ 'family', 'if', 'in', 'infix[lr]?', 'instance',
42
+ 'let', 'newtype', 'of', 'then', 'type', 'where', '_')
43
+ ascii = ('NUL', 'SOH', '[SE]TX', 'EOT', 'ENQ', 'ACK',
44
+ 'BEL', 'BS', 'HT', 'LF', 'VT', 'FF', 'CR', 'S[OI]', 'DLE',
45
+ 'DC[1-4]', 'NAK', 'SYN', 'ETB', 'CAN',
46
+ 'EM', 'SUB', 'ESC', '[FGRU]S', 'SP', 'DEL')
47
+
48
+ tokens = {
49
+ 'root': [
50
+ # Whitespace:
51
+ (r'\s+', Text),
52
+ # (r'--\s*|.*$', Comment.Doc),
53
+ (r'--(?![!#$%&*+./<=>?@^|_~:\\]).*?$', Comment.Single),
54
+ (r'\{-', Comment.Multiline, 'comment'),
55
+ # Lexemes:
56
+ # Identifiers
57
+ (r'\bimport\b', Keyword.Reserved, 'import'),
58
+ (r'\bmodule\b', Keyword.Reserved, 'module'),
59
+ (r'\berror\b', Name.Exception),
60
+ (r'\b(%s)(?!\')\b' % '|'.join(reserved), Keyword.Reserved),
61
+ (r"'[^\\]'", String.Char), # this has to come before the TH quote
62
+ (r'^[_' + uni.Ll + r'][\w\']*', Name.Function),
63
+ (r"'?[_" + uni.Ll + r"][\w']*", Name),
64
+ (r"('')?[" + uni.Lu + r"][\w\']*", Keyword.Type),
65
+ (r"(')[" + uni.Lu + r"][\w\']*", Keyword.Type),
66
+ (r"(')\[[^\]]*\]", Keyword.Type), # tuples and lists get special treatment in GHC
67
+ (r"(')\([^)]*\)", Keyword.Type), # ..
68
+ (r"(')[:!#$%&*+.\\/<=>?@^|~-]+", Keyword.Type), # promoted type operators
69
+ # Operators
70
+ (r'\\(?![:!#$%&*+.\\/<=>?@^|~-]+)', Name.Function), # lambda operator
71
+ (r'(<-|::|->|=>|=)(?![:!#$%&*+.\\/<=>?@^|~-]+)', Operator.Word), # specials
72
+ (r':[:!#$%&*+.\\/<=>?@^|~-]*', Keyword.Type), # Constructor operators
73
+ (r'[:!#$%&*+.\\/<=>?@^|~-]+', Operator), # Other operators
74
+ # Numbers
75
+ (r'0[xX]_*[\da-fA-F](_*[\da-fA-F])*_*[pP][+-]?\d(_*\d)*', Number.Float),
76
+ (r'0[xX]_*[\da-fA-F](_*[\da-fA-F])*\.[\da-fA-F](_*[\da-fA-F])*'
77
+ r'(_*[pP][+-]?\d(_*\d)*)?', Number.Float),
78
+ (r'\d(_*\d)*_*[eE][+-]?\d(_*\d)*', Number.Float),
79
+ (r'\d(_*\d)*\.\d(_*\d)*(_*[eE][+-]?\d(_*\d)*)?', Number.Float),
80
+ (r'0[bB]_*[01](_*[01])*', Number.Bin),
81
+ (r'0[oO]_*[0-7](_*[0-7])*', Number.Oct),
82
+ (r'0[xX]_*[\da-fA-F](_*[\da-fA-F])*', Number.Hex),
83
+ (r'\d(_*\d)*', Number.Integer),
84
+ # Character/String Literals
85
+ (r"'", String.Char, 'character'),
86
+ (r'"', String, 'string'),
87
+ # Special
88
+ (r'\[\]', Keyword.Type),
89
+ (r'\(\)', Name.Builtin),
90
+ (r'[][(),;`{}]', Punctuation),
91
+ ],
92
+ 'import': [
93
+ # Import statements
94
+ (r'\s+', Text),
95
+ (r'"', String, 'string'),
96
+ # after "funclist" state
97
+ (r'\)', Punctuation, '#pop'),
98
+ (r'qualified\b', Keyword),
99
+ # import X as Y
100
+ (r'([' + uni.Lu + r'][\w.]*)(\s+)(as)(\s+)([' + uni.Lu + r'][\w.]*)',
101
+ bygroups(Name.Namespace, Text, Keyword, Text, Name), '#pop'),
102
+ # import X hiding (functions)
103
+ (r'([' + uni.Lu + r'][\w.]*)(\s+)(hiding)(\s+)(\()',
104
+ bygroups(Name.Namespace, Text, Keyword, Text, Punctuation), 'funclist'),
105
+ # import X (functions)
106
+ (r'([' + uni.Lu + r'][\w.]*)(\s+)(\()',
107
+ bygroups(Name.Namespace, Text, Punctuation), 'funclist'),
108
+ # import X
109
+ (r'[\w.]+', Name.Namespace, '#pop'),
110
+ ],
111
+ 'module': [
112
+ (r'\s+', Text),
113
+ (r'([' + uni.Lu + r'][\w.]*)(\s+)(\()',
114
+ bygroups(Name.Namespace, Text, Punctuation), 'funclist'),
115
+ (r'[' + uni.Lu + r'][\w.]*', Name.Namespace, '#pop'),
116
+ ],
117
+ 'funclist': [
118
+ (r'\s+', Text),
119
+ (r'[' + uni.Lu + r']\w*', Keyword.Type),
120
+ (r'(_[\w\']+|[' + uni.Ll + r'][\w\']*)', Name.Function),
121
+ (r'--(?![!#$%&*+./<=>?@^|_~:\\]).*?$', Comment.Single),
122
+ (r'\{-', Comment.Multiline, 'comment'),
123
+ (r',', Punctuation),
124
+ (r'[:!#$%&*+.\\/<=>?@^|~-]+', Operator),
125
+ # (HACK, but it makes sense to push two instances, believe me)
126
+ (r'\(', Punctuation, ('funclist', 'funclist')),
127
+ (r'\)', Punctuation, '#pop:2'),
128
+ ],
129
+ # NOTE: the next four states are shared in the AgdaLexer; make sure
130
+ # any change is compatible with Agda as well or copy over and change
131
+ 'comment': [
132
+ # Multiline Comments
133
+ (r'[^-{}]+', Comment.Multiline),
134
+ (r'\{-', Comment.Multiline, '#push'),
135
+ (r'-\}', Comment.Multiline, '#pop'),
136
+ (r'[-{}]', Comment.Multiline),
137
+ ],
138
+ 'character': [
139
+ # Allows multi-chars, incorrectly.
140
+ (r"[^\\']'", String.Char, '#pop'),
141
+ (r"\\", String.Escape, 'escape'),
142
+ ("'", String.Char, '#pop'),
143
+ ],
144
+ 'string': [
145
+ (r'[^\\"]+', String),
146
+ (r"\\", String.Escape, 'escape'),
147
+ ('"', String, '#pop'),
148
+ ],
149
+ 'escape': [
150
+ (r'[abfnrtv"\'&\\]', String.Escape, '#pop'),
151
+ (r'\^[][' + uni.Lu + r'@^_]', String.Escape, '#pop'),
152
+ ('|'.join(ascii), String.Escape, '#pop'),
153
+ (r'o[0-7]+', String.Escape, '#pop'),
154
+ (r'x[\da-fA-F]+', String.Escape, '#pop'),
155
+ (r'\d+', String.Escape, '#pop'),
156
+ (r'\s+\\', String.Escape, '#pop'),
157
+ ],
158
+ }
159
+
160
+
161
+ class HspecLexer(HaskellLexer):
162
+ """
163
+ A Haskell lexer with support for Hspec constructs.
164
+
165
+ .. versionadded:: 2.4.0
166
+ """
167
+
168
+ name = 'Hspec'
169
+ aliases = ['hspec']
170
+ filenames = []
171
+ mimetypes = []
172
+
173
+ tokens = {
174
+ 'root': [
175
+ (r'(it\s*)("[^"]*")', bygroups(Text, String.Doc)),
176
+ (r'(describe\s*)("[^"]*")', bygroups(Text, String.Doc)),
177
+ (r'(context\s*)("[^"]*")', bygroups(Text, String.Doc)),
178
+ inherit,
179
+ ],
180
+ }
181
+
182
+
183
+ class IdrisLexer(RegexLexer):
184
+ """
185
+ A lexer for the dependently typed programming language Idris.
186
+
187
+ Based on the Haskell and Agda Lexer.
188
+
189
+ .. versionadded:: 2.0
190
+ """
191
+ name = 'Idris'
192
+ aliases = ['idris', 'idr']
193
+ filenames = ['*.idr']
194
+ mimetypes = ['text/x-idris']
195
+
196
+ reserved = ('case', 'class', 'data', 'default', 'using', 'do', 'else',
197
+ 'if', 'in', 'infix[lr]?', 'instance', 'rewrite', 'auto',
198
+ 'namespace', 'codata', 'mutual', 'private', 'public', 'abstract',
199
+ 'total', 'partial',
200
+ 'interface', 'implementation', 'export', 'covering', 'constructor',
201
+ 'let', 'proof', 'of', 'then', 'static', 'where', '_', 'with',
202
+ 'pattern', 'term', 'syntax', 'prefix',
203
+ 'postulate', 'parameters', 'record', 'dsl', 'impossible', 'implicit',
204
+ 'tactics', 'intros', 'intro', 'compute', 'refine', 'exact', 'trivial')
205
+
206
+ ascii = ('NUL', 'SOH', '[SE]TX', 'EOT', 'ENQ', 'ACK',
207
+ 'BEL', 'BS', 'HT', 'LF', 'VT', 'FF', 'CR', 'S[OI]', 'DLE',
208
+ 'DC[1-4]', 'NAK', 'SYN', 'ETB', 'CAN',
209
+ 'EM', 'SUB', 'ESC', '[FGRU]S', 'SP', 'DEL')
210
+
211
+ directives = ('lib', 'link', 'flag', 'include', 'hide', 'freeze', 'access',
212
+ 'default', 'logging', 'dynamic', 'name', 'error_handlers', 'language')
213
+
214
+ tokens = {
215
+ 'root': [
216
+ # Comments
217
+ (r'^(\s*)(%%(%s))' % '|'.join(directives),
218
+ bygroups(Text, Keyword.Reserved)),
219
+ (r'(\s*)(--(?![!#$%&*+./<=>?@^|_~:\\]).*?)$', bygroups(Text, Comment.Single)),
220
+ (r'(\s*)(\|{3}.*?)$', bygroups(Text, Comment.Single)),
221
+ (r'(\s*)(\{-)', bygroups(Text, Comment.Multiline), 'comment'),
222
+ # Declaration
223
+ (r'^(\s*)([^\s(){}]+)(\s*)(:)(\s*)',
224
+ bygroups(Text, Name.Function, Text, Operator.Word, Text)),
225
+ # Identifiers
226
+ (r'\b(%s)(?!\')\b' % '|'.join(reserved), Keyword.Reserved),
227
+ (r'(import|module)(\s+)', bygroups(Keyword.Reserved, Text), 'module'),
228
+ (r"('')?[A-Z][\w\']*", Keyword.Type),
229
+ (r'[a-z][\w\']*', Text),
230
+ # Special Symbols
231
+ (r'(<-|::|->|=>|=)', Operator.Word), # specials
232
+ (r'([(){}\[\]:!#$%&*+.\\/<=>?@^|~-]+)', Operator.Word), # specials
233
+ # Numbers
234
+ (r'\d+[eE][+-]?\d+', Number.Float),
235
+ (r'\d+\.\d+([eE][+-]?\d+)?', Number.Float),
236
+ (r'0[xX][\da-fA-F]+', Number.Hex),
237
+ (r'\d+', Number.Integer),
238
+ # Strings
239
+ (r"'", String.Char, 'character'),
240
+ (r'"', String, 'string'),
241
+ (r'[^\s(){}]+', Text),
242
+ (r'\s+?', Text), # Whitespace
243
+ ],
244
+ 'module': [
245
+ (r'\s+', Text),
246
+ (r'([A-Z][\w.]*)(\s+)(\()',
247
+ bygroups(Name.Namespace, Text, Punctuation), 'funclist'),
248
+ (r'[A-Z][\w.]*', Name.Namespace, '#pop'),
249
+ ],
250
+ 'funclist': [
251
+ (r'\s+', Text),
252
+ (r'[A-Z]\w*', Keyword.Type),
253
+ (r'(_[\w\']+|[a-z][\w\']*)', Name.Function),
254
+ (r'--.*$', Comment.Single),
255
+ (r'\{-', Comment.Multiline, 'comment'),
256
+ (r',', Punctuation),
257
+ (r'[:!#$%&*+.\\/<=>?@^|~-]+', Operator),
258
+ # (HACK, but it makes sense to push two instances, believe me)
259
+ (r'\(', Punctuation, ('funclist', 'funclist')),
260
+ (r'\)', Punctuation, '#pop:2'),
261
+ ],
262
+ # NOTE: the next four states are shared in the AgdaLexer; make sure
263
+ # any change is compatible with Agda as well or copy over and change
264
+ 'comment': [
265
+ # Multiline Comments
266
+ (r'[^-{}]+', Comment.Multiline),
267
+ (r'\{-', Comment.Multiline, '#push'),
268
+ (r'-\}', Comment.Multiline, '#pop'),
269
+ (r'[-{}]', Comment.Multiline),
270
+ ],
271
+ 'character': [
272
+ # Allows multi-chars, incorrectly.
273
+ (r"[^\\']", String.Char),
274
+ (r"\\", String.Escape, 'escape'),
275
+ ("'", String.Char, '#pop'),
276
+ ],
277
+ 'string': [
278
+ (r'[^\\"]+', String),
279
+ (r"\\", String.Escape, 'escape'),
280
+ ('"', String, '#pop'),
281
+ ],
282
+ 'escape': [
283
+ (r'[abfnrtv"\'&\\]', String.Escape, '#pop'),
284
+ (r'\^[][A-Z@^_]', String.Escape, '#pop'),
285
+ ('|'.join(ascii), String.Escape, '#pop'),
286
+ (r'o[0-7]+', String.Escape, '#pop'),
287
+ (r'x[\da-fA-F]+', String.Escape, '#pop'),
288
+ (r'\d+', String.Escape, '#pop'),
289
+ (r'\s+\\', String.Escape, '#pop')
290
+ ],
291
+ }
292
+
293
+
294
+ class AgdaLexer(RegexLexer):
295
+ """
296
+ For the `Agda <http://wiki.portal.chalmers.se/agda/pmwiki.php>`_
297
+ dependently typed functional programming language and proof assistant.
298
+
299
+ .. versionadded:: 2.0
300
+ """
301
+
302
+ name = 'Agda'
303
+ aliases = ['agda']
304
+ filenames = ['*.agda']
305
+ mimetypes = ['text/x-agda']
306
+
307
+ reserved = ['abstract', 'codata', 'coinductive', 'constructor', 'data',
308
+ 'field', 'forall', 'hiding', 'in', 'inductive', 'infix',
309
+ 'infixl', 'infixr', 'instance', 'let', 'mutual', 'open',
310
+ 'pattern', 'postulate', 'primitive', 'private',
311
+ 'quote', 'quoteGoal', 'quoteTerm',
312
+ 'record', 'renaming', 'rewrite', 'syntax', 'tactic',
313
+ 'unquote', 'unquoteDecl', 'using', 'where', 'with']
314
+
315
+ tokens = {
316
+ 'root': [
317
+ # Declaration
318
+ (r'^(\s*)([^\s(){}]+)(\s*)(:)(\s*)',
319
+ bygroups(Text, Name.Function, Text, Operator.Word, Text)),
320
+ # Comments
321
+ (r'--(?![!#$%&*+./<=>?@^|_~:\\]).*?$', Comment.Single),
322
+ (r'\{-', Comment.Multiline, 'comment'),
323
+ # Holes
324
+ (r'\{!', Comment.Directive, 'hole'),
325
+ # Lexemes:
326
+ # Identifiers
327
+ (r'\b(%s)(?!\')\b' % '|'.join(reserved), Keyword.Reserved),
328
+ (r'(import|module)(\s+)', bygroups(Keyword.Reserved, Text), 'module'),
329
+ (r'\b(Set|Prop)[\u2080-\u2089]*\b', Keyword.Type),
330
+ # Special Symbols
331
+ (r'(\(|\)|\{|\})', Operator),
332
+ (r'(\.{1,3}|\||\u03BB|\u2200|\u2192|:|=|->)', Operator.Word),
333
+ # Numbers
334
+ (r'\d+[eE][+-]?\d+', Number.Float),
335
+ (r'\d+\.\d+([eE][+-]?\d+)?', Number.Float),
336
+ (r'0[xX][\da-fA-F]+', Number.Hex),
337
+ (r'\d+', Number.Integer),
338
+ # Strings
339
+ (r"'", String.Char, 'character'),
340
+ (r'"', String, 'string'),
341
+ (r'[^\s(){}]+', Text),
342
+ (r'\s+?', Text), # Whitespace
343
+ ],
344
+ 'hole': [
345
+ # Holes
346
+ (r'[^!{}]+', Comment.Directive),
347
+ (r'\{!', Comment.Directive, '#push'),
348
+ (r'!\}', Comment.Directive, '#pop'),
349
+ (r'[!{}]', Comment.Directive),
350
+ ],
351
+ 'module': [
352
+ (r'\{-', Comment.Multiline, 'comment'),
353
+ (r'[a-zA-Z][\w.]*', Name, '#pop'),
354
+ (r'[\W0-9_]+', Text)
355
+ ],
356
+ 'comment': HaskellLexer.tokens['comment'],
357
+ 'character': HaskellLexer.tokens['character'],
358
+ 'string': HaskellLexer.tokens['string'],
359
+ 'escape': HaskellLexer.tokens['escape']
360
+ }
361
+
362
+
363
+ class CryptolLexer(RegexLexer):
364
+ """
365
+ FIXME: A Cryptol2 lexer based on the lexemes defined in the Haskell 98 Report.
366
+
367
+ .. versionadded:: 2.0
368
+ """
369
+ name = 'Cryptol'
370
+ aliases = ['cryptol', 'cry']
371
+ filenames = ['*.cry']
372
+ mimetypes = ['text/x-cryptol']
373
+
374
+ reserved = ('Arith', 'Bit', 'Cmp', 'False', 'Inf', 'True', 'else',
375
+ 'export', 'extern', 'fin', 'if', 'import', 'inf', 'lg2',
376
+ 'max', 'min', 'module', 'newtype', 'pragma', 'property',
377
+ 'then', 'type', 'where', 'width')
378
+ ascii = ('NUL', 'SOH', '[SE]TX', 'EOT', 'ENQ', 'ACK',
379
+ 'BEL', 'BS', 'HT', 'LF', 'VT', 'FF', 'CR', 'S[OI]', 'DLE',
380
+ 'DC[1-4]', 'NAK', 'SYN', 'ETB', 'CAN',
381
+ 'EM', 'SUB', 'ESC', '[FGRU]S', 'SP', 'DEL')
382
+
383
+ tokens = {
384
+ 'root': [
385
+ # Whitespace:
386
+ (r'\s+', Text),
387
+ # (r'--\s*|.*$', Comment.Doc),
388
+ (r'//.*$', Comment.Single),
389
+ (r'/\*', Comment.Multiline, 'comment'),
390
+ # Lexemes:
391
+ # Identifiers
392
+ (r'\bimport\b', Keyword.Reserved, 'import'),
393
+ (r'\bmodule\b', Keyword.Reserved, 'module'),
394
+ (r'\berror\b', Name.Exception),
395
+ (r'\b(%s)(?!\')\b' % '|'.join(reserved), Keyword.Reserved),
396
+ (r'^[_a-z][\w\']*', Name.Function),
397
+ (r"'?[_a-z][\w']*", Name),
398
+ (r"('')?[A-Z][\w\']*", Keyword.Type),
399
+ # Operators
400
+ (r'\\(?![:!#$%&*+.\\/<=>?@^|~-]+)', Name.Function), # lambda operator
401
+ (r'(<-|::|->|=>|=)(?![:!#$%&*+.\\/<=>?@^|~-]+)', Operator.Word), # specials
402
+ (r':[:!#$%&*+.\\/<=>?@^|~-]*', Keyword.Type), # Constructor operators
403
+ (r'[:!#$%&*+.\\/<=>?@^|~-]+', Operator), # Other operators
404
+ # Numbers
405
+ (r'\d+[eE][+-]?\d+', Number.Float),
406
+ (r'\d+\.\d+([eE][+-]?\d+)?', Number.Float),
407
+ (r'0[oO][0-7]+', Number.Oct),
408
+ (r'0[xX][\da-fA-F]+', Number.Hex),
409
+ (r'\d+', Number.Integer),
410
+ # Character/String Literals
411
+ (r"'", String.Char, 'character'),
412
+ (r'"', String, 'string'),
413
+ # Special
414
+ (r'\[\]', Keyword.Type),
415
+ (r'\(\)', Name.Builtin),
416
+ (r'[][(),;`{}]', Punctuation),
417
+ ],
418
+ 'import': [
419
+ # Import statements
420
+ (r'\s+', Text),
421
+ (r'"', String, 'string'),
422
+ # after "funclist" state
423
+ (r'\)', Punctuation, '#pop'),
424
+ (r'qualified\b', Keyword),
425
+ # import X as Y
426
+ (r'([A-Z][\w.]*)(\s+)(as)(\s+)([A-Z][\w.]*)',
427
+ bygroups(Name.Namespace, Text, Keyword, Text, Name), '#pop'),
428
+ # import X hiding (functions)
429
+ (r'([A-Z][\w.]*)(\s+)(hiding)(\s+)(\()',
430
+ bygroups(Name.Namespace, Text, Keyword, Text, Punctuation), 'funclist'),
431
+ # import X (functions)
432
+ (r'([A-Z][\w.]*)(\s+)(\()',
433
+ bygroups(Name.Namespace, Text, Punctuation), 'funclist'),
434
+ # import X
435
+ (r'[\w.]+', Name.Namespace, '#pop'),
436
+ ],
437
+ 'module': [
438
+ (r'\s+', Text),
439
+ (r'([A-Z][\w.]*)(\s+)(\()',
440
+ bygroups(Name.Namespace, Text, Punctuation), 'funclist'),
441
+ (r'[A-Z][\w.]*', Name.Namespace, '#pop'),
442
+ ],
443
+ 'funclist': [
444
+ (r'\s+', Text),
445
+ (r'[A-Z]\w*', Keyword.Type),
446
+ (r'(_[\w\']+|[a-z][\w\']*)', Name.Function),
447
+ # TODO: these don't match the comments in docs, remove.
448
+ # (r'--(?![!#$%&*+./<=>?@^|_~:\\]).*?$', Comment.Single),
449
+ # (r'{-', Comment.Multiline, 'comment'),
450
+ (r',', Punctuation),
451
+ (r'[:!#$%&*+.\\/<=>?@^|~-]+', Operator),
452
+ # (HACK, but it makes sense to push two instances, believe me)
453
+ (r'\(', Punctuation, ('funclist', 'funclist')),
454
+ (r'\)', Punctuation, '#pop:2'),
455
+ ],
456
+ 'comment': [
457
+ # Multiline Comments
458
+ (r'[^/*]+', Comment.Multiline),
459
+ (r'/\*', Comment.Multiline, '#push'),
460
+ (r'\*/', Comment.Multiline, '#pop'),
461
+ (r'[*/]', Comment.Multiline),
462
+ ],
463
+ 'character': [
464
+ # Allows multi-chars, incorrectly.
465
+ (r"[^\\']'", String.Char, '#pop'),
466
+ (r"\\", String.Escape, 'escape'),
467
+ ("'", String.Char, '#pop'),
468
+ ],
469
+ 'string': [
470
+ (r'[^\\"]+', String),
471
+ (r"\\", String.Escape, 'escape'),
472
+ ('"', String, '#pop'),
473
+ ],
474
+ 'escape': [
475
+ (r'[abfnrtv"\'&\\]', String.Escape, '#pop'),
476
+ (r'\^[][A-Z@^_]', String.Escape, '#pop'),
477
+ ('|'.join(ascii), String.Escape, '#pop'),
478
+ (r'o[0-7]+', String.Escape, '#pop'),
479
+ (r'x[\da-fA-F]+', String.Escape, '#pop'),
480
+ (r'\d+', String.Escape, '#pop'),
481
+ (r'\s+\\', String.Escape, '#pop'),
482
+ ],
483
+ }
484
+
485
+ EXTRA_KEYWORDS = {'join', 'split', 'reverse', 'transpose', 'width',
486
+ 'length', 'tail', '<<', '>>', '<<<', '>>>', 'const',
487
+ 'reg', 'par', 'seq', 'ASSERT', 'undefined', 'error',
488
+ 'trace'}
489
+
490
+ def get_tokens_unprocessed(self, text):
491
+ stack = ['root']
492
+ for index, token, value in \
493
+ RegexLexer.get_tokens_unprocessed(self, text, stack):
494
+ if token is Name and value in self.EXTRA_KEYWORDS:
495
+ yield index, Name.Builtin, value
496
+ else:
497
+ yield index, token, value
498
+
499
+
500
+ class LiterateLexer(Lexer):
501
+ """
502
+ Base class for lexers of literate file formats based on LaTeX or Bird-style
503
+ (prefixing each code line with ">").
504
+
505
+ Additional options accepted:
506
+
507
+ `litstyle`
508
+ If given, must be ``"bird"`` or ``"latex"``. If not given, the style
509
+ is autodetected: if the first non-whitespace character in the source
510
+ is a backslash or percent character, LaTeX is assumed, else Bird.
511
+ """
512
+
513
+ bird_re = re.compile(r'(>[ \t]*)(.*\n)')
514
+
515
+ def __init__(self, baselexer, **options):
516
+ self.baselexer = baselexer
517
+ Lexer.__init__(self, **options)
518
+
519
+ def get_tokens_unprocessed(self, text):
520
+ style = self.options.get('litstyle')
521
+ if style is None:
522
+ style = (text.lstrip()[0:1] in '%\\') and 'latex' or 'bird'
523
+
524
+ code = ''
525
+ insertions = []
526
+ if style == 'bird':
527
+ # bird-style
528
+ for match in line_re.finditer(text):
529
+ line = match.group()
530
+ m = self.bird_re.match(line)
531
+ if m:
532
+ insertions.append((len(code),
533
+ [(0, Comment.Special, m.group(1))]))
534
+ code += m.group(2)
535
+ else:
536
+ insertions.append((len(code), [(0, Text, line)]))
537
+ else:
538
+ # latex-style
539
+ from pygments.lexers.markup import TexLexer
540
+ lxlexer = TexLexer(**self.options)
541
+ codelines = 0
542
+ latex = ''
543
+ for match in line_re.finditer(text):
544
+ line = match.group()
545
+ if codelines:
546
+ if line.lstrip().startswith('\\end{code}'):
547
+ codelines = 0
548
+ latex += line
549
+ else:
550
+ code += line
551
+ elif line.lstrip().startswith('\\begin{code}'):
552
+ codelines = 1
553
+ latex += line
554
+ insertions.append((len(code),
555
+ list(lxlexer.get_tokens_unprocessed(latex))))
556
+ latex = ''
557
+ else:
558
+ latex += line
559
+ insertions.append((len(code),
560
+ list(lxlexer.get_tokens_unprocessed(latex))))
561
+ yield from do_insertions(insertions, self.baselexer.get_tokens_unprocessed(code))
562
+
563
+
564
+ class LiterateHaskellLexer(LiterateLexer):
565
+ """
566
+ For Literate Haskell (Bird-style or LaTeX) source.
567
+
568
+ Additional options accepted:
569
+
570
+ `litstyle`
571
+ If given, must be ``"bird"`` or ``"latex"``. If not given, the style
572
+ is autodetected: if the first non-whitespace character in the source
573
+ is a backslash or percent character, LaTeX is assumed, else Bird.
574
+
575
+ .. versionadded:: 0.9
576
+ """
577
+ name = 'Literate Haskell'
578
+ aliases = ['lhs', 'literate-haskell', 'lhaskell']
579
+ filenames = ['*.lhs']
580
+ mimetypes = ['text/x-literate-haskell']
581
+
582
+ def __init__(self, **options):
583
+ hslexer = HaskellLexer(**options)
584
+ LiterateLexer.__init__(self, hslexer, **options)
585
+
586
+
587
+ class LiterateIdrisLexer(LiterateLexer):
588
+ """
589
+ For Literate Idris (Bird-style or LaTeX) source.
590
+
591
+ Additional options accepted:
592
+
593
+ `litstyle`
594
+ If given, must be ``"bird"`` or ``"latex"``. If not given, the style
595
+ is autodetected: if the first non-whitespace character in the source
596
+ is a backslash or percent character, LaTeX is assumed, else Bird.
597
+
598
+ .. versionadded:: 2.0
599
+ """
600
+ name = 'Literate Idris'
601
+ aliases = ['lidr', 'literate-idris', 'lidris']
602
+ filenames = ['*.lidr']
603
+ mimetypes = ['text/x-literate-idris']
604
+
605
+ def __init__(self, **options):
606
+ hslexer = IdrisLexer(**options)
607
+ LiterateLexer.__init__(self, hslexer, **options)
608
+
609
+
610
+ class LiterateAgdaLexer(LiterateLexer):
611
+ """
612
+ For Literate Agda source.
613
+
614
+ Additional options accepted:
615
+
616
+ `litstyle`
617
+ If given, must be ``"bird"`` or ``"latex"``. If not given, the style
618
+ is autodetected: if the first non-whitespace character in the source
619
+ is a backslash or percent character, LaTeX is assumed, else Bird.
620
+
621
+ .. versionadded:: 2.0
622
+ """
623
+ name = 'Literate Agda'
624
+ aliases = ['lagda', 'literate-agda']
625
+ filenames = ['*.lagda']
626
+ mimetypes = ['text/x-literate-agda']
627
+
628
+ def __init__(self, **options):
629
+ agdalexer = AgdaLexer(**options)
630
+ LiterateLexer.__init__(self, agdalexer, litstyle='latex', **options)
631
+
632
+
633
+ class LiterateCryptolLexer(LiterateLexer):
634
+ """
635
+ For Literate Cryptol (Bird-style or LaTeX) source.
636
+
637
+ Additional options accepted:
638
+
639
+ `litstyle`
640
+ If given, must be ``"bird"`` or ``"latex"``. If not given, the style
641
+ is autodetected: if the first non-whitespace character in the source
642
+ is a backslash or percent character, LaTeX is assumed, else Bird.
643
+
644
+ .. versionadded:: 2.0
645
+ """
646
+ name = 'Literate Cryptol'
647
+ aliases = ['lcry', 'literate-cryptol', 'lcryptol']
648
+ filenames = ['*.lcry']
649
+ mimetypes = ['text/x-literate-cryptol']
650
+
651
+ def __init__(self, **options):
652
+ crylexer = CryptolLexer(**options)
653
+ LiterateLexer.__init__(self, crylexer, **options)
654
+
655
+
656
+ class KokaLexer(RegexLexer):
657
+ """
658
+ Lexer for the `Koka <http://koka.codeplex.com>`_
659
+ language.
660
+
661
+ .. versionadded:: 1.6
662
+ """
663
+
664
+ name = 'Koka'
665
+ aliases = ['koka']
666
+ filenames = ['*.kk', '*.kki']
667
+ mimetypes = ['text/x-koka']
668
+
669
+ keywords = [
670
+ 'infix', 'infixr', 'infixl',
671
+ 'type', 'cotype', 'rectype', 'alias',
672
+ 'struct', 'con',
673
+ 'fun', 'function', 'val', 'var',
674
+ 'external',
675
+ 'if', 'then', 'else', 'elif', 'return', 'match',
676
+ 'private', 'public', 'private',
677
+ 'module', 'import', 'as',
678
+ 'include', 'inline',
679
+ 'rec',
680
+ 'try', 'yield', 'enum',
681
+ 'interface', 'instance',
682
+ ]
683
+
684
+ # keywords that are followed by a type
685
+ typeStartKeywords = [
686
+ 'type', 'cotype', 'rectype', 'alias', 'struct', 'enum',
687
+ ]
688
+
689
+ # keywords valid in a type
690
+ typekeywords = [
691
+ 'forall', 'exists', 'some', 'with',
692
+ ]
693
+
694
+ # builtin names and special names
695
+ builtin = [
696
+ 'for', 'while', 'repeat',
697
+ 'foreach', 'foreach-indexed',
698
+ 'error', 'catch', 'finally',
699
+ 'cs', 'js', 'file', 'ref', 'assigned',
700
+ ]
701
+
702
+ # symbols that can be in an operator
703
+ symbols = r'[$%&*+@!/\\^~=.:\-?|<>]+'
704
+
705
+ # symbol boundary: an operator keyword should not be followed by any of these
706
+ sboundary = '(?!' + symbols + ')'
707
+
708
+ # name boundary: a keyword should not be followed by any of these
709
+ boundary = r'(?![\w/])'
710
+
711
+ # koka token abstractions
712
+ tokenType = Name.Attribute
713
+ tokenTypeDef = Name.Class
714
+ tokenConstructor = Generic.Emph
715
+
716
+ # main lexer
717
+ tokens = {
718
+ 'root': [
719
+ include('whitespace'),
720
+
721
+ # go into type mode
722
+ (r'::?' + sboundary, tokenType, 'type'),
723
+ (r'(alias)(\s+)([a-z]\w*)?', bygroups(Keyword, Text, tokenTypeDef),
724
+ 'alias-type'),
725
+ (r'(struct)(\s+)([a-z]\w*)?', bygroups(Keyword, Text, tokenTypeDef),
726
+ 'struct-type'),
727
+ ((r'(%s)' % '|'.join(typeStartKeywords)) +
728
+ r'(\s+)([a-z]\w*)?', bygroups(Keyword, Text, tokenTypeDef),
729
+ 'type'),
730
+
731
+ # special sequences of tokens (we use ?: for non-capturing group as
732
+ # required by 'bygroups')
733
+ (r'(module)(\s+)(interface\s+)?((?:[a-z]\w*/)*[a-z]\w*)',
734
+ bygroups(Keyword, Text, Keyword, Name.Namespace)),
735
+ (r'(import)(\s+)((?:[a-z]\w*/)*[a-z]\w*)'
736
+ r'(?:(\s*)(=)(\s*)((?:qualified\s*)?)'
737
+ r'((?:[a-z]\w*/)*[a-z]\w*))?',
738
+ bygroups(Keyword, Text, Name.Namespace, Text, Keyword, Text,
739
+ Keyword, Name.Namespace)),
740
+
741
+ (r'(^(?:(?:public|private)\s*)?(?:function|fun|val))'
742
+ r'(\s+)([a-z]\w*|\((?:' + symbols + r'|/)\))',
743
+ bygroups(Keyword, Text, Name.Function)),
744
+ (r'(^(?:(?:public|private)\s*)?external)(\s+)(inline\s+)?'
745
+ r'([a-z]\w*|\((?:' + symbols + r'|/)\))',
746
+ bygroups(Keyword, Text, Keyword, Name.Function)),
747
+
748
+ # keywords
749
+ (r'(%s)' % '|'.join(typekeywords) + boundary, Keyword.Type),
750
+ (r'(%s)' % '|'.join(keywords) + boundary, Keyword),
751
+ (r'(%s)' % '|'.join(builtin) + boundary, Keyword.Pseudo),
752
+ (r'::?|:=|\->|[=.]' + sboundary, Keyword),
753
+
754
+ # names
755
+ (r'((?:[a-z]\w*/)*)([A-Z]\w*)',
756
+ bygroups(Name.Namespace, tokenConstructor)),
757
+ (r'((?:[a-z]\w*/)*)([a-z]\w*)', bygroups(Name.Namespace, Name)),
758
+ (r'((?:[a-z]\w*/)*)(\((?:' + symbols + r'|/)\))',
759
+ bygroups(Name.Namespace, Name)),
760
+ (r'_\w*', Name.Variable),
761
+
762
+ # literal string
763
+ (r'@"', String.Double, 'litstring'),
764
+
765
+ # operators
766
+ (symbols + "|/(?![*/])", Operator),
767
+ (r'`', Operator),
768
+ (r'[{}()\[\];,]', Punctuation),
769
+
770
+ # literals. No check for literal characters with len > 1
771
+ (r'[0-9]+\.[0-9]+([eE][\-+]?[0-9]+)?', Number.Float),
772
+ (r'0[xX][0-9a-fA-F]+', Number.Hex),
773
+ (r'[0-9]+', Number.Integer),
774
+
775
+ (r"'", String.Char, 'char'),
776
+ (r'"', String.Double, 'string'),
777
+ ],
778
+
779
+ # type started by alias
780
+ 'alias-type': [
781
+ (r'=', Keyword),
782
+ include('type')
783
+ ],
784
+
785
+ # type started by struct
786
+ 'struct-type': [
787
+ (r'(?=\((?!,*\)))', Punctuation, '#pop'),
788
+ include('type')
789
+ ],
790
+
791
+ # type started by colon
792
+ 'type': [
793
+ (r'[(\[<]', tokenType, 'type-nested'),
794
+ include('type-content')
795
+ ],
796
+
797
+ # type nested in brackets: can contain parameters, comma etc.
798
+ 'type-nested': [
799
+ (r'[)\]>]', tokenType, '#pop'),
800
+ (r'[(\[<]', tokenType, 'type-nested'),
801
+ (r',', tokenType),
802
+ (r'([a-z]\w*)(\s*)(:)(?!:)',
803
+ bygroups(Name, Text, tokenType)), # parameter name
804
+ include('type-content')
805
+ ],
806
+
807
+ # shared contents of a type
808
+ 'type-content': [
809
+ include('whitespace'),
810
+
811
+ # keywords
812
+ (r'(%s)' % '|'.join(typekeywords) + boundary, Keyword),
813
+ (r'(?=((%s)' % '|'.join(keywords) + boundary + '))',
814
+ Keyword, '#pop'), # need to match because names overlap...
815
+
816
+ # kinds
817
+ (r'[EPHVX]' + boundary, tokenType),
818
+
819
+ # type names
820
+ (r'[a-z][0-9]*(?![\w/])', tokenType),
821
+ (r'_\w*', tokenType.Variable), # Generic.Emph
822
+ (r'((?:[a-z]\w*/)*)([A-Z]\w*)',
823
+ bygroups(Name.Namespace, tokenType)),
824
+ (r'((?:[a-z]\w*/)*)([a-z]\w+)',
825
+ bygroups(Name.Namespace, tokenType)),
826
+
827
+ # type keyword operators
828
+ (r'::|->|[.:|]', tokenType),
829
+
830
+ # catchall
831
+ default('#pop')
832
+ ],
833
+
834
+ # comments and literals
835
+ 'whitespace': [
836
+ (r'\n\s*#.*$', Comment.Preproc),
837
+ (r'\s+', Text),
838
+ (r'/\*', Comment.Multiline, 'comment'),
839
+ (r'//.*$', Comment.Single)
840
+ ],
841
+ 'comment': [
842
+ (r'[^/*]+', Comment.Multiline),
843
+ (r'/\*', Comment.Multiline, '#push'),
844
+ (r'\*/', Comment.Multiline, '#pop'),
845
+ (r'[*/]', Comment.Multiline),
846
+ ],
847
+ 'litstring': [
848
+ (r'[^"]+', String.Double),
849
+ (r'""', String.Escape),
850
+ (r'"', String.Double, '#pop'),
851
+ ],
852
+ 'string': [
853
+ (r'[^\\"\n]+', String.Double),
854
+ include('escape-sequence'),
855
+ (r'["\n]', String.Double, '#pop'),
856
+ ],
857
+ 'char': [
858
+ (r'[^\\\'\n]+', String.Char),
859
+ include('escape-sequence'),
860
+ (r'[\'\n]', String.Char, '#pop'),
861
+ ],
862
+ 'escape-sequence': [
863
+ (r'\\[nrt\\"\']', String.Escape),
864
+ (r'\\x[0-9a-fA-F]{2}', String.Escape),
865
+ (r'\\u[0-9a-fA-F]{4}', String.Escape),
866
+ # Yes, \U literals are 6 hex digits.
867
+ (r'\\U[0-9a-fA-F]{6}', String.Escape)
868
+ ]
869
+ }