pygments.rb 1.2.1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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,108 @@
1
+ """
2
+ pygments.lexers.devicetree
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for Devicetree language.
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, include, default, words
12
+ from pygments.token import Comment, Keyword, Name, Number, Operator, \
13
+ Punctuation, String, Text
14
+
15
+ __all__ = ['DevicetreeLexer']
16
+
17
+
18
+ class DevicetreeLexer(RegexLexer):
19
+ """
20
+ Lexer for `Devicetree <https://www.devicetree.org/>`_ files.
21
+
22
+ .. versionadded:: 2.7
23
+ """
24
+
25
+ name = 'Devicetree'
26
+ aliases = ['devicetree', 'dts']
27
+ filenames = ['*.dts', '*.dtsi']
28
+ mimetypes = ['text/x-c']
29
+
30
+ #: optional Whitespace or /*...*/ style comment
31
+ _ws = r'\s*(?:/[*][^*/]*?[*]/\s*)*'
32
+
33
+ tokens = {
34
+ 'macro': [
35
+ # Include preprocessor directives (C style):
36
+ (r'(#include)(' + _ws + r')([^\n]+)',
37
+ bygroups(Comment.Preproc, Comment.Multiline, Comment.PreprocFile)),
38
+ # Define preprocessor directives (C style):
39
+ (r'(#define)(' + _ws + r')([^\n]+)',
40
+ bygroups(Comment.Preproc, Comment.Multiline, Comment.Preproc)),
41
+ # devicetree style with file:
42
+ (r'(/[^*/{]+/)(' + _ws + r')("[^\n{]+")',
43
+ bygroups(Comment.Preproc, Comment.Multiline, Comment.PreprocFile)),
44
+ # devicetree style with property:
45
+ (r'(/[^*/{]+/)(' + _ws + r')([^\n;{]*)([;]?)',
46
+ bygroups(Comment.Preproc, Comment.Multiline, Comment.Preproc, Punctuation)),
47
+ ],
48
+ 'whitespace': [
49
+ (r'\n', Text),
50
+ (r'\s+', Text),
51
+ (r'\\\n', Text), # line continuation
52
+ (r'//(\n|[\w\W]*?[^\\]\n)', Comment.Single),
53
+ (r'/(\\\n)?[*][\w\W]*?[*](\\\n)?/', Comment.Multiline),
54
+ # Open until EOF, so no ending delimeter
55
+ (r'/(\\\n)?[*][\w\W]*', Comment.Multiline),
56
+ ],
57
+ 'statements': [
58
+ (r'(L?)(")', bygroups(String.Affix, String), 'string'),
59
+ (r'0x[0-9a-fA-F]+', Number.Hex),
60
+ (r'\d+', Number.Integer),
61
+ (r'([^\s{}/*]*)(\s*)(:)', bygroups(Name.Label, Text, Punctuation)),
62
+ (words(('compatible', 'model', 'phandle', 'status', '#address-cells',
63
+ '#size-cells', 'reg', 'virtual-reg', 'ranges', 'dma-ranges',
64
+ 'device_type', 'name'), suffix=r'\b'), Keyword.Reserved),
65
+ (r'([~!%^&*+=|?:<>/#-])', Operator),
66
+ (r'[()\[\]{},.]', Punctuation),
67
+ (r'[a-zA-Z_][\w-]*(?=(?:\s*,\s*[a-zA-Z_][\w-]*|(?:' + _ws + r'))*\s*[=;])',
68
+ Name),
69
+ (r'[a-zA-Z_]\w*', Name.Attribute),
70
+ ],
71
+ 'root': [
72
+ include('whitespace'),
73
+ include('macro'),
74
+
75
+ # Nodes
76
+ (r'([^/*@\s&]+|/)(@?)([0-9a-fA-F,]*)(' + _ws + r')(\{)',
77
+ bygroups(Name.Function, Operator, Number.Integer,
78
+ Comment.Multiline, Punctuation), 'node'),
79
+
80
+ default('statement'),
81
+ ],
82
+ 'statement': [
83
+ include('whitespace'),
84
+ include('statements'),
85
+ (';', Punctuation, '#pop'),
86
+ ],
87
+ 'node': [
88
+ include('whitespace'),
89
+ include('macro'),
90
+
91
+ (r'([^/*@\s&]+|/)(@?)([0-9a-fA-F,]*)(' + _ws + r')(\{)',
92
+ bygroups(Name.Function, Operator, Number.Integer,
93
+ Comment.Multiline, Punctuation), '#push'),
94
+
95
+ include('statements'),
96
+
97
+ (r'\};', Punctuation, '#pop'),
98
+ (';', Punctuation),
99
+ ],
100
+ 'string': [
101
+ (r'"', String, '#pop'),
102
+ (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|'
103
+ r'u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})', String.Escape),
104
+ (r'[^\\"\n]+', String), # all other characters
105
+ (r'\\\n', String), # line continuation
106
+ (r'\\', String), # stray backslash
107
+ ],
108
+ }
@@ -0,0 +1,164 @@
1
+ """
2
+ pygments.lexers.diff
3
+ ~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for diff/patch formats.
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 RegexLexer, include, bygroups
14
+ from pygments.token import Text, Comment, Operator, Keyword, Name, Generic, \
15
+ Literal
16
+
17
+ __all__ = ['DiffLexer', 'DarcsPatchLexer', 'WDiffLexer']
18
+
19
+
20
+ class DiffLexer(RegexLexer):
21
+ """
22
+ Lexer for unified or context-style diffs or patches.
23
+ """
24
+
25
+ name = 'Diff'
26
+ aliases = ['diff', 'udiff']
27
+ filenames = ['*.diff', '*.patch']
28
+ mimetypes = ['text/x-diff', 'text/x-patch']
29
+
30
+ tokens = {
31
+ 'root': [
32
+ (r' .*\n', Text),
33
+ (r'\+.*\n', Generic.Inserted),
34
+ (r'-.*\n', Generic.Deleted),
35
+ (r'!.*\n', Generic.Strong),
36
+ (r'@.*\n', Generic.Subheading),
37
+ (r'([Ii]ndex|diff).*\n', Generic.Heading),
38
+ (r'=.*\n', Generic.Heading),
39
+ (r'.*\n', Text),
40
+ ]
41
+ }
42
+
43
+ def analyse_text(text):
44
+ if text[:7] == 'Index: ':
45
+ return True
46
+ if text[:5] == 'diff ':
47
+ return True
48
+ if text[:4] == '--- ':
49
+ return 0.9
50
+
51
+
52
+ class DarcsPatchLexer(RegexLexer):
53
+ """
54
+ DarcsPatchLexer is a lexer for the various versions of the darcs patch
55
+ format. Examples of this format are derived by commands such as
56
+ ``darcs annotate --patch`` and ``darcs send``.
57
+
58
+ .. versionadded:: 0.10
59
+ """
60
+
61
+ name = 'Darcs Patch'
62
+ aliases = ['dpatch']
63
+ filenames = ['*.dpatch', '*.darcspatch']
64
+
65
+ DPATCH_KEYWORDS = ('hunk', 'addfile', 'adddir', 'rmfile', 'rmdir', 'move',
66
+ 'replace')
67
+
68
+ tokens = {
69
+ 'root': [
70
+ (r'<', Operator),
71
+ (r'>', Operator),
72
+ (r'\{', Operator),
73
+ (r'\}', Operator),
74
+ (r'(\[)((?:TAG )?)(.*)(\n)(.*)(\*\*)(\d+)(\s?)(\])',
75
+ bygroups(Operator, Keyword, Name, Text, Name, Operator,
76
+ Literal.Date, Text, Operator)),
77
+ (r'(\[)((?:TAG )?)(.*)(\n)(.*)(\*\*)(\d+)(\s?)',
78
+ bygroups(Operator, Keyword, Name, Text, Name, Operator,
79
+ Literal.Date, Text), 'comment'),
80
+ (r'New patches:', Generic.Heading),
81
+ (r'Context:', Generic.Heading),
82
+ (r'Patch bundle hash:', Generic.Heading),
83
+ (r'(\s*)(%s)(.*\n)' % '|'.join(DPATCH_KEYWORDS),
84
+ bygroups(Text, Keyword, Text)),
85
+ (r'\+', Generic.Inserted, "insert"),
86
+ (r'-', Generic.Deleted, "delete"),
87
+ (r'.*\n', Text),
88
+ ],
89
+ 'comment': [
90
+ (r'[^\]].*\n', Comment),
91
+ (r'\]', Operator, "#pop"),
92
+ ],
93
+ 'specialText': [ # darcs add [_CODE_] special operators for clarity
94
+ (r'\n', Text, "#pop"), # line-based
95
+ (r'\[_[^_]*_]', Operator),
96
+ ],
97
+ 'insert': [
98
+ include('specialText'),
99
+ (r'\[', Generic.Inserted),
100
+ (r'[^\n\[]+', Generic.Inserted),
101
+ ],
102
+ 'delete': [
103
+ include('specialText'),
104
+ (r'\[', Generic.Deleted),
105
+ (r'[^\n\[]+', Generic.Deleted),
106
+ ],
107
+ }
108
+
109
+
110
+ class WDiffLexer(RegexLexer):
111
+ """
112
+ A `wdiff <https://www.gnu.org/software/wdiff/>`_ lexer.
113
+
114
+ Note that:
115
+
116
+ * It only works with normal output (without options like ``-l``).
117
+ * If the target files contain "[-", "-]", "{+", or "+}",
118
+ especially they are unbalanced, the lexer will get confused.
119
+
120
+ .. versionadded:: 2.2
121
+ """
122
+
123
+ name = 'WDiff'
124
+ aliases = ['wdiff']
125
+ filenames = ['*.wdiff']
126
+ mimetypes = []
127
+
128
+ flags = re.MULTILINE | re.DOTALL
129
+
130
+ # We can only assume "[-" after "[-" before "-]" is `nested`,
131
+ # for instance wdiff to wdiff outputs. We have no way to
132
+ # distinct these marker is of wdiff output from original text.
133
+
134
+ ins_op = r"\{\+"
135
+ ins_cl = r"\+\}"
136
+ del_op = r"\[\-"
137
+ del_cl = r"\-\]"
138
+ normal = r'[^{}[\]+-]+' # for performance
139
+ tokens = {
140
+ 'root': [
141
+ (ins_op, Generic.Inserted, 'inserted'),
142
+ (del_op, Generic.Deleted, 'deleted'),
143
+ (normal, Text),
144
+ (r'.', Text),
145
+ ],
146
+ 'inserted': [
147
+ (ins_op, Generic.Inserted, '#push'),
148
+ (del_op, Generic.Inserted, '#push'),
149
+ (del_cl, Generic.Inserted, '#pop'),
150
+
151
+ (ins_cl, Generic.Inserted, '#pop'),
152
+ (normal, Generic.Inserted),
153
+ (r'.', Generic.Inserted),
154
+ ],
155
+ 'deleted': [
156
+ (del_op, Generic.Deleted, '#push'),
157
+ (ins_op, Generic.Deleted, '#push'),
158
+ (ins_cl, Generic.Deleted, '#pop'),
159
+
160
+ (del_cl, Generic.Deleted, '#pop'),
161
+ (normal, Generic.Deleted),
162
+ (r'.', Generic.Deleted),
163
+ ],
164
+ }
@@ -0,0 +1,706 @@
1
+ """
2
+ pygments.lexers.dotnet
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for .net languages.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+ import re
11
+
12
+ from pygments.lexer import RegexLexer, DelegatingLexer, bygroups, include, \
13
+ using, this, default, words
14
+ from pygments.token import Punctuation, \
15
+ Text, Comment, Operator, Keyword, Name, String, Number, Literal, Other
16
+ from pygments.util import get_choice_opt
17
+ from pygments import unistring as uni
18
+
19
+ from pygments.lexers.html import XmlLexer
20
+
21
+ __all__ = ['CSharpLexer', 'NemerleLexer', 'BooLexer', 'VbNetLexer',
22
+ 'CSharpAspxLexer', 'VbNetAspxLexer', 'FSharpLexer']
23
+
24
+
25
+ class CSharpLexer(RegexLexer):
26
+ """
27
+ For `C# <http://msdn2.microsoft.com/en-us/vcsharp/default.aspx>`_
28
+ source code.
29
+
30
+ Additional options accepted:
31
+
32
+ `unicodelevel`
33
+ Determines which Unicode characters this lexer allows for identifiers.
34
+ The possible values are:
35
+
36
+ * ``none`` -- only the ASCII letters and numbers are allowed. This
37
+ is the fastest selection.
38
+ * ``basic`` -- all Unicode characters from the specification except
39
+ category ``Lo`` are allowed.
40
+ * ``full`` -- all Unicode characters as specified in the C# specs
41
+ are allowed. Note that this means a considerable slowdown since the
42
+ ``Lo`` category has more than 40,000 characters in it!
43
+
44
+ The default value is ``basic``.
45
+
46
+ .. versionadded:: 0.8
47
+ """
48
+
49
+ name = 'C#'
50
+ aliases = ['csharp', 'c#']
51
+ filenames = ['*.cs']
52
+ mimetypes = ['text/x-csharp'] # inferred
53
+
54
+ flags = re.MULTILINE | re.DOTALL | re.UNICODE
55
+
56
+ # for the range of allowed unicode characters in identifiers, see
57
+ # http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf
58
+
59
+ levels = {
60
+ 'none': r'@?[_a-zA-Z]\w*',
61
+ 'basic': ('@?[_' + uni.combine('Lu', 'Ll', 'Lt', 'Lm', 'Nl') + ']' +
62
+ '[' + uni.combine('Lu', 'Ll', 'Lt', 'Lm', 'Nl', 'Nd', 'Pc',
63
+ 'Cf', 'Mn', 'Mc') + ']*'),
64
+ 'full': ('@?(?:_|[^' +
65
+ uni.allexcept('Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl') + '])'
66
+ + '[^' + uni.allexcept('Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl',
67
+ 'Nd', 'Pc', 'Cf', 'Mn', 'Mc') + ']*'),
68
+ }
69
+
70
+ tokens = {}
71
+ token_variants = True
72
+
73
+ for levelname, cs_ident in levels.items():
74
+ tokens[levelname] = {
75
+ 'root': [
76
+ # method names
77
+ (r'^([ \t]*(?:' + cs_ident + r'(?:\[\])?\s+)+?)' # return type
78
+ r'(' + cs_ident + ')' # method name
79
+ r'(\s*)(\()', # signature start
80
+ bygroups(using(this), Name.Function, Text, Punctuation)),
81
+ (r'^\s*\[.*?\]', Name.Attribute),
82
+ (r'[^\S\n]+', Text),
83
+ (r'\\\n', Text), # line continuation
84
+ (r'//.*?\n', Comment.Single),
85
+ (r'/[*].*?[*]/', Comment.Multiline),
86
+ (r'\n', Text),
87
+ (r'[~!%^&*()+=|\[\]:;,.<>/?-]', Punctuation),
88
+ (r'[{}]', Punctuation),
89
+ (r'@"(""|[^"])*"', String),
90
+ (r'"(\\\\|\\[^\\]|[^"\\\n])*["\n]', String),
91
+ (r"'\\.'|'[^\\]'", String.Char),
92
+ (r"[0-9](\.[0-9]*)?([eE][+-][0-9]+)?"
93
+ r"[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?", Number),
94
+ (r'#[ \t]*(if|endif|else|elif|define|undef|'
95
+ r'line|error|warning|region|endregion|pragma)\b.*?\n',
96
+ Comment.Preproc),
97
+ (r'\b(extern)(\s+)(alias)\b', bygroups(Keyword, Text,
98
+ Keyword)),
99
+ (r'(abstract|as|async|await|base|break|by|case|catch|'
100
+ r'checked|const|continue|default|delegate|'
101
+ r'do|else|enum|event|explicit|extern|false|finally|'
102
+ r'fixed|for|foreach|goto|if|implicit|in|interface|'
103
+ r'internal|is|let|lock|new|null|on|operator|'
104
+ r'out|override|params|private|protected|public|readonly|'
105
+ r'ref|return|sealed|sizeof|stackalloc|static|'
106
+ r'switch|this|throw|true|try|typeof|'
107
+ r'unchecked|unsafe|virtual|void|while|'
108
+ r'get|set|new|partial|yield|add|remove|value|alias|ascending|'
109
+ r'descending|from|group|into|orderby|select|thenby|where|'
110
+ r'join|equals)\b', Keyword),
111
+ (r'(global)(::)', bygroups(Keyword, Punctuation)),
112
+ (r'(bool|byte|char|decimal|double|dynamic|float|int|long|object|'
113
+ r'sbyte|short|string|uint|ulong|ushort|var)\b\??', Keyword.Type),
114
+ (r'(class|struct)(\s+)', bygroups(Keyword, Text), 'class'),
115
+ (r'(namespace|using)(\s+)', bygroups(Keyword, Text), 'namespace'),
116
+ (cs_ident, Name),
117
+ ],
118
+ 'class': [
119
+ (cs_ident, Name.Class, '#pop'),
120
+ default('#pop'),
121
+ ],
122
+ 'namespace': [
123
+ (r'(?=\()', Text, '#pop'), # using (resource)
124
+ ('(' + cs_ident + r'|\.)+', Name.Namespace, '#pop'),
125
+ ]
126
+ }
127
+
128
+ def __init__(self, **options):
129
+ level = get_choice_opt(options, 'unicodelevel', list(self.tokens), 'basic')
130
+ if level not in self._all_tokens:
131
+ # compile the regexes now
132
+ self._tokens = self.__class__.process_tokendef(level)
133
+ else:
134
+ self._tokens = self._all_tokens[level]
135
+
136
+ RegexLexer.__init__(self, **options)
137
+
138
+
139
+ class NemerleLexer(RegexLexer):
140
+ """
141
+ For `Nemerle <http://nemerle.org>`_ source code.
142
+
143
+ Additional options accepted:
144
+
145
+ `unicodelevel`
146
+ Determines which Unicode characters this lexer allows for identifiers.
147
+ The possible values are:
148
+
149
+ * ``none`` -- only the ASCII letters and numbers are allowed. This
150
+ is the fastest selection.
151
+ * ``basic`` -- all Unicode characters from the specification except
152
+ category ``Lo`` are allowed.
153
+ * ``full`` -- all Unicode characters as specified in the C# specs
154
+ are allowed. Note that this means a considerable slowdown since the
155
+ ``Lo`` category has more than 40,000 characters in it!
156
+
157
+ The default value is ``basic``.
158
+
159
+ .. versionadded:: 1.5
160
+ """
161
+
162
+ name = 'Nemerle'
163
+ aliases = ['nemerle']
164
+ filenames = ['*.n']
165
+ mimetypes = ['text/x-nemerle'] # inferred
166
+
167
+ flags = re.MULTILINE | re.DOTALL | re.UNICODE
168
+
169
+ # for the range of allowed unicode characters in identifiers, see
170
+ # http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf
171
+
172
+ levels = {
173
+ 'none': r'@?[_a-zA-Z]\w*',
174
+ 'basic': ('@?[_' + uni.combine('Lu', 'Ll', 'Lt', 'Lm', 'Nl') + ']' +
175
+ '[' + uni.combine('Lu', 'Ll', 'Lt', 'Lm', 'Nl', 'Nd', 'Pc',
176
+ 'Cf', 'Mn', 'Mc') + ']*'),
177
+ 'full': ('@?(?:_|[^' +
178
+ uni.allexcept('Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl') + '])'
179
+ + '[^' + uni.allexcept('Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl',
180
+ 'Nd', 'Pc', 'Cf', 'Mn', 'Mc') + ']*'),
181
+ }
182
+
183
+ tokens = {}
184
+ token_variants = True
185
+
186
+ for levelname, cs_ident in levels.items():
187
+ tokens[levelname] = {
188
+ 'root': [
189
+ # method names
190
+ (r'^([ \t]*(?:' + cs_ident + r'(?:\[\])?\s+)+?)' # return type
191
+ r'(' + cs_ident + ')' # method name
192
+ r'(\s*)(\()', # signature start
193
+ bygroups(using(this), Name.Function, Text, Punctuation)),
194
+ (r'^\s*\[.*?\]', Name.Attribute),
195
+ (r'[^\S\n]+', Text),
196
+ (r'\\\n', Text), # line continuation
197
+ (r'//.*?\n', Comment.Single),
198
+ (r'/[*].*?[*]/', Comment.Multiline),
199
+ (r'\n', Text),
200
+ (r'\$\s*"', String, 'splice-string'),
201
+ (r'\$\s*<#', String, 'splice-string2'),
202
+ (r'<#', String, 'recursive-string'),
203
+
204
+ (r'(<\[)\s*(' + cs_ident + ':)?', Keyword),
205
+ (r'\]\>', Keyword),
206
+
207
+ # quasiquotation only
208
+ (r'\$' + cs_ident, Name),
209
+ (r'(\$)(\()', bygroups(Name, Punctuation),
210
+ 'splice-string-content'),
211
+
212
+ (r'[~!%^&*()+=|\[\]:;,.<>/?-]', Punctuation),
213
+ (r'[{}]', Punctuation),
214
+ (r'@"(""|[^"])*"', String),
215
+ (r'"(\\\\|\\[^\\]|[^"\\\n])*["\n]', String),
216
+ (r"'\\.'|'[^\\]'", String.Char),
217
+ (r"0[xX][0-9a-fA-F]+[Ll]?", Number),
218
+ (r"[0-9](\.[0-9]*)?([eE][+-][0-9]+)?[flFLdD]?", Number),
219
+ (r'#[ \t]*(if|endif|else|elif|define|undef|'
220
+ r'line|error|warning|region|endregion|pragma)\b.*?\n',
221
+ Comment.Preproc),
222
+ (r'\b(extern)(\s+)(alias)\b', bygroups(Keyword, Text,
223
+ Keyword)),
224
+ (r'(abstract|and|as|base|catch|def|delegate|'
225
+ r'enum|event|extern|false|finally|'
226
+ r'fun|implements|interface|internal|'
227
+ r'is|macro|match|matches|module|mutable|new|'
228
+ r'null|out|override|params|partial|private|'
229
+ r'protected|public|ref|sealed|static|'
230
+ r'syntax|this|throw|true|try|type|typeof|'
231
+ r'virtual|volatile|when|where|with|'
232
+ r'assert|assert2|async|break|checked|continue|do|else|'
233
+ r'ensures|for|foreach|if|late|lock|new|nolate|'
234
+ r'otherwise|regexp|repeat|requires|return|surroundwith|'
235
+ r'unchecked|unless|using|while|yield)\b', Keyword),
236
+ (r'(global)(::)', bygroups(Keyword, Punctuation)),
237
+ (r'(bool|byte|char|decimal|double|float|int|long|object|sbyte|'
238
+ r'short|string|uint|ulong|ushort|void|array|list)\b\??',
239
+ Keyword.Type),
240
+ (r'(:>?)\s*(' + cs_ident + r'\??)',
241
+ bygroups(Punctuation, Keyword.Type)),
242
+ (r'(class|struct|variant|module)(\s+)',
243
+ bygroups(Keyword, Text), 'class'),
244
+ (r'(namespace|using)(\s+)', bygroups(Keyword, Text),
245
+ 'namespace'),
246
+ (cs_ident, Name),
247
+ ],
248
+ 'class': [
249
+ (cs_ident, Name.Class, '#pop')
250
+ ],
251
+ 'namespace': [
252
+ (r'(?=\()', Text, '#pop'), # using (resource)
253
+ ('(' + cs_ident + r'|\.)+', Name.Namespace, '#pop')
254
+ ],
255
+ 'splice-string': [
256
+ (r'[^"$]', String),
257
+ (r'\$' + cs_ident, Name),
258
+ (r'(\$)(\()', bygroups(Name, Punctuation),
259
+ 'splice-string-content'),
260
+ (r'\\"', String),
261
+ (r'"', String, '#pop')
262
+ ],
263
+ 'splice-string2': [
264
+ (r'[^#<>$]', String),
265
+ (r'\$' + cs_ident, Name),
266
+ (r'(\$)(\()', bygroups(Name, Punctuation),
267
+ 'splice-string-content'),
268
+ (r'<#', String, '#push'),
269
+ (r'#>', String, '#pop')
270
+ ],
271
+ 'recursive-string': [
272
+ (r'[^#<>]', String),
273
+ (r'<#', String, '#push'),
274
+ (r'#>', String, '#pop')
275
+ ],
276
+ 'splice-string-content': [
277
+ (r'if|match', Keyword),
278
+ (r'[~!%^&*+=|\[\]:;,.<>/?-\\"$ ]', Punctuation),
279
+ (cs_ident, Name),
280
+ (r'\d+', Number),
281
+ (r'\(', Punctuation, '#push'),
282
+ (r'\)', Punctuation, '#pop')
283
+ ]
284
+ }
285
+
286
+ def __init__(self, **options):
287
+ level = get_choice_opt(options, 'unicodelevel', list(self.tokens),
288
+ 'basic')
289
+ if level not in self._all_tokens:
290
+ # compile the regexes now
291
+ self._tokens = self.__class__.process_tokendef(level)
292
+ else:
293
+ self._tokens = self._all_tokens[level]
294
+
295
+ RegexLexer.__init__(self, **options)
296
+
297
+ def analyse_text(text):
298
+ """Nemerle is quite similar to Python, but @if is relatively uncommon
299
+ elsewhere."""
300
+ result = 0
301
+
302
+ if '@if' in text:
303
+ result += 0.1
304
+
305
+ return result
306
+
307
+
308
+ class BooLexer(RegexLexer):
309
+ """
310
+ For `Boo <http://boo.codehaus.org/>`_ source code.
311
+ """
312
+
313
+ name = 'Boo'
314
+ aliases = ['boo']
315
+ filenames = ['*.boo']
316
+ mimetypes = ['text/x-boo']
317
+
318
+ tokens = {
319
+ 'root': [
320
+ (r'\s+', Text),
321
+ (r'(#|//).*$', Comment.Single),
322
+ (r'/[*]', Comment.Multiline, 'comment'),
323
+ (r'[]{}:(),.;[]', Punctuation),
324
+ (r'\\\n', Text),
325
+ (r'\\', Text),
326
+ (r'(in|is|and|or|not)\b', Operator.Word),
327
+ (r'/(\\\\|\\[^\\]|[^/\\\s])/', String.Regex),
328
+ (r'@/(\\\\|\\[^\\]|[^/\\])*/', String.Regex),
329
+ (r'=~|!=|==|<<|>>|[-+/*%=<>&^|]', Operator),
330
+ (r'(as|abstract|callable|constructor|destructor|do|import|'
331
+ r'enum|event|final|get|interface|internal|of|override|'
332
+ r'partial|private|protected|public|return|set|static|'
333
+ r'struct|transient|virtual|yield|super|and|break|cast|'
334
+ r'continue|elif|else|ensure|except|for|given|goto|if|in|'
335
+ r'is|isa|not|or|otherwise|pass|raise|ref|try|unless|when|'
336
+ r'while|from|as)\b', Keyword),
337
+ (r'def(?=\s+\(.*?\))', Keyword),
338
+ (r'(def)(\s+)', bygroups(Keyword, Text), 'funcname'),
339
+ (r'(class)(\s+)', bygroups(Keyword, Text), 'classname'),
340
+ (r'(namespace)(\s+)', bygroups(Keyword, Text), 'namespace'),
341
+ (r'(?<!\.)(true|false|null|self|__eval__|__switch__|array|'
342
+ r'assert|checked|enumerate|filter|getter|len|lock|map|'
343
+ r'matrix|max|min|normalArrayIndexing|print|property|range|'
344
+ r'rawArrayIndexing|required|typeof|unchecked|using|'
345
+ r'yieldAll|zip)\b', Name.Builtin),
346
+ (r'"""(\\\\|\\"|.*?)"""', String.Double),
347
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
348
+ (r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),
349
+ (r'[a-zA-Z_]\w*', Name),
350
+ (r'(\d+\.\d*|\d*\.\d+)([fF][+-]?[0-9]+)?', Number.Float),
351
+ (r'[0-9][0-9.]*(ms?|d|h|s)', Number),
352
+ (r'0\d+', Number.Oct),
353
+ (r'0x[a-fA-F0-9]+', Number.Hex),
354
+ (r'\d+L', Number.Integer.Long),
355
+ (r'\d+', Number.Integer),
356
+ ],
357
+ 'comment': [
358
+ ('/[*]', Comment.Multiline, '#push'),
359
+ ('[*]/', Comment.Multiline, '#pop'),
360
+ ('[^/*]', Comment.Multiline),
361
+ ('[*/]', Comment.Multiline)
362
+ ],
363
+ 'funcname': [
364
+ (r'[a-zA-Z_]\w*', Name.Function, '#pop')
365
+ ],
366
+ 'classname': [
367
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop')
368
+ ],
369
+ 'namespace': [
370
+ (r'[a-zA-Z_][\w.]*', Name.Namespace, '#pop')
371
+ ]
372
+ }
373
+
374
+
375
+ class VbNetLexer(RegexLexer):
376
+ """
377
+ For
378
+ `Visual Basic.NET <http://msdn2.microsoft.com/en-us/vbasic/default.aspx>`_
379
+ source code.
380
+ """
381
+
382
+ name = 'VB.net'
383
+ aliases = ['vb.net', 'vbnet']
384
+ filenames = ['*.vb', '*.bas']
385
+ mimetypes = ['text/x-vbnet', 'text/x-vba'] # (?)
386
+
387
+ uni_name = '[_' + uni.combine('Ll', 'Lt', 'Lm', 'Nl') + ']' + \
388
+ '[' + uni.combine('Ll', 'Lt', 'Lm', 'Nl', 'Nd', 'Pc',
389
+ 'Cf', 'Mn', 'Mc') + ']*'
390
+
391
+ flags = re.MULTILINE | re.IGNORECASE
392
+ tokens = {
393
+ 'root': [
394
+ (r'^\s*<.*?>', Name.Attribute),
395
+ (r'\s+', Text),
396
+ (r'\n', Text),
397
+ (r'rem\b.*?\n', Comment),
398
+ (r"'.*?\n", Comment),
399
+ (r'#If\s.*?\sThen|#ElseIf\s.*?\sThen|#Else|#End\s+If|#Const|'
400
+ r'#ExternalSource.*?\n|#End\s+ExternalSource|'
401
+ r'#Region.*?\n|#End\s+Region|#ExternalChecksum',
402
+ Comment.Preproc),
403
+ (r'[(){}!#,.:]', Punctuation),
404
+ (r'Option\s+(Strict|Explicit|Compare)\s+'
405
+ r'(On|Off|Binary|Text)', Keyword.Declaration),
406
+ (words((
407
+ 'AddHandler', 'Alias', 'ByRef', 'ByVal', 'Call', 'Case',
408
+ 'Catch', 'CBool', 'CByte', 'CChar', 'CDate', 'CDec', 'CDbl',
409
+ 'CInt', 'CLng', 'CObj', 'Continue', 'CSByte', 'CShort', 'CSng',
410
+ 'CStr', 'CType', 'CUInt', 'CULng', 'CUShort', 'Declare',
411
+ 'Default', 'Delegate', 'DirectCast', 'Do', 'Each', 'Else',
412
+ 'ElseIf', 'EndIf', 'Erase', 'Error', 'Event', 'Exit', 'False',
413
+ 'Finally', 'For', 'Friend', 'Get', 'Global', 'GoSub', 'GoTo',
414
+ 'Handles', 'If', 'Implements', 'Inherits', 'Interface', 'Let',
415
+ 'Lib', 'Loop', 'Me', 'MustInherit', 'MustOverride', 'MyBase',
416
+ 'MyClass', 'Narrowing', 'New', 'Next', 'Not', 'Nothing',
417
+ 'NotInheritable', 'NotOverridable', 'Of', 'On', 'Operator',
418
+ 'Option', 'Optional', 'Overloads', 'Overridable', 'Overrides',
419
+ 'ParamArray', 'Partial', 'Private', 'Protected', 'Public',
420
+ 'RaiseEvent', 'ReadOnly', 'ReDim', 'RemoveHandler', 'Resume',
421
+ 'Return', 'Select', 'Set', 'Shadows', 'Shared', 'Single',
422
+ 'Static', 'Step', 'Stop', 'SyncLock', 'Then', 'Throw', 'To',
423
+ 'True', 'Try', 'TryCast', 'Wend', 'Using', 'When', 'While',
424
+ 'Widening', 'With', 'WithEvents', 'WriteOnly'),
425
+ prefix=r'(?<!\.)', suffix=r'\b'), Keyword),
426
+ (r'(?<!\.)End\b', Keyword, 'end'),
427
+ (r'(?<!\.)(Dim|Const)\b', Keyword, 'dim'),
428
+ (r'(?<!\.)(Function|Sub|Property)(\s+)',
429
+ bygroups(Keyword, Text), 'funcname'),
430
+ (r'(?<!\.)(Class|Structure|Enum)(\s+)',
431
+ bygroups(Keyword, Text), 'classname'),
432
+ (r'(?<!\.)(Module|Namespace|Imports)(\s+)',
433
+ bygroups(Keyword, Text), 'namespace'),
434
+ (r'(?<!\.)(Boolean|Byte|Char|Date|Decimal|Double|Integer|Long|'
435
+ r'Object|SByte|Short|Single|String|Variant|UInteger|ULong|'
436
+ r'UShort)\b', Keyword.Type),
437
+ (r'(?<!\.)(AddressOf|And|AndAlso|As|GetType|In|Is|IsNot|Like|Mod|'
438
+ r'Or|OrElse|TypeOf|Xor)\b', Operator.Word),
439
+ (r'&=|[*]=|/=|\\=|\^=|\+=|-=|<<=|>>=|<<|>>|:=|'
440
+ r'<=|>=|<>|[-&*/\\^+=<>\[\]]',
441
+ Operator),
442
+ ('"', String, 'string'),
443
+ (r'_\n', Text), # Line continuation (must be before Name)
444
+ (uni_name + '[%&@!#$]?', Name),
445
+ ('#.*?#', Literal.Date),
446
+ (r'(\d+\.\d*|\d*\.\d+)(F[+-]?[0-9]+)?', Number.Float),
447
+ (r'\d+([SILDFR]|US|UI|UL)?', Number.Integer),
448
+ (r'&H[0-9a-f]+([SILDFR]|US|UI|UL)?', Number.Integer),
449
+ (r'&O[0-7]+([SILDFR]|US|UI|UL)?', Number.Integer),
450
+ ],
451
+ 'string': [
452
+ (r'""', String),
453
+ (r'"C?', String, '#pop'),
454
+ (r'[^"]+', String),
455
+ ],
456
+ 'dim': [
457
+ (uni_name, Name.Variable, '#pop'),
458
+ default('#pop'), # any other syntax
459
+ ],
460
+ 'funcname': [
461
+ (uni_name, Name.Function, '#pop'),
462
+ ],
463
+ 'classname': [
464
+ (uni_name, Name.Class, '#pop'),
465
+ ],
466
+ 'namespace': [
467
+ (uni_name, Name.Namespace),
468
+ (r'\.', Name.Namespace),
469
+ default('#pop'),
470
+ ],
471
+ 'end': [
472
+ (r'\s+', Text),
473
+ (r'(Function|Sub|Property|Class|Structure|Enum|Module|Namespace)\b',
474
+ Keyword, '#pop'),
475
+ default('#pop'),
476
+ ]
477
+ }
478
+
479
+ def analyse_text(text):
480
+ if re.search(r'^\s*(#If|Module|Namespace)', text, re.MULTILINE):
481
+ return 0.5
482
+
483
+
484
+ class GenericAspxLexer(RegexLexer):
485
+ """
486
+ Lexer for ASP.NET pages.
487
+ """
488
+
489
+ name = 'aspx-gen'
490
+ filenames = []
491
+ mimetypes = []
492
+
493
+ flags = re.DOTALL
494
+
495
+ tokens = {
496
+ 'root': [
497
+ (r'(<%[@=#]?)(.*?)(%>)', bygroups(Name.Tag, Other, Name.Tag)),
498
+ (r'(<script.*?>)(.*?)(</script>)', bygroups(using(XmlLexer),
499
+ Other,
500
+ using(XmlLexer))),
501
+ (r'(.+?)(?=<)', using(XmlLexer)),
502
+ (r'.+', using(XmlLexer)),
503
+ ],
504
+ }
505
+
506
+
507
+ # TODO support multiple languages within the same source file
508
+ class CSharpAspxLexer(DelegatingLexer):
509
+ """
510
+ Lexer for highlighting C# within ASP.NET pages.
511
+ """
512
+
513
+ name = 'aspx-cs'
514
+ aliases = ['aspx-cs']
515
+ filenames = ['*.aspx', '*.asax', '*.ascx', '*.ashx', '*.asmx', '*.axd']
516
+ mimetypes = []
517
+
518
+ def __init__(self, **options):
519
+ super().__init__(CSharpLexer, GenericAspxLexer, **options)
520
+
521
+ def analyse_text(text):
522
+ if re.search(r'Page\s*Language="C#"', text, re.I) is not None:
523
+ return 0.2
524
+ elif re.search(r'script[^>]+language=["\']C#', text, re.I) is not None:
525
+ return 0.15
526
+
527
+
528
+ class VbNetAspxLexer(DelegatingLexer):
529
+ """
530
+ Lexer for highlighting Visual Basic.net within ASP.NET pages.
531
+ """
532
+
533
+ name = 'aspx-vb'
534
+ aliases = ['aspx-vb']
535
+ filenames = ['*.aspx', '*.asax', '*.ascx', '*.ashx', '*.asmx', '*.axd']
536
+ mimetypes = []
537
+
538
+ def __init__(self, **options):
539
+ super().__init__(VbNetLexer, GenericAspxLexer, **options)
540
+
541
+ def analyse_text(text):
542
+ if re.search(r'Page\s*Language="Vb"', text, re.I) is not None:
543
+ return 0.2
544
+ elif re.search(r'script[^>]+language=["\']vb', text, re.I) is not None:
545
+ return 0.15
546
+
547
+
548
+ # Very close to functional.OcamlLexer
549
+ class FSharpLexer(RegexLexer):
550
+ """
551
+ For the `F# language <https://fsharp.org/>`_ (version 3.0).
552
+
553
+ .. versionadded:: 1.5
554
+ """
555
+
556
+ name = 'F#'
557
+ aliases = ['fsharp', 'f#']
558
+ filenames = ['*.fs', '*.fsi']
559
+ mimetypes = ['text/x-fsharp']
560
+
561
+ keywords = [
562
+ 'abstract', 'as', 'assert', 'base', 'begin', 'class', 'default',
563
+ 'delegate', 'do!', 'do', 'done', 'downcast', 'downto', 'elif', 'else',
564
+ 'end', 'exception', 'extern', 'false', 'finally', 'for', 'function',
565
+ 'fun', 'global', 'if', 'inherit', 'inline', 'interface', 'internal',
566
+ 'in', 'lazy', 'let!', 'let', 'match', 'member', 'module', 'mutable',
567
+ 'namespace', 'new', 'null', 'of', 'open', 'override', 'private', 'public',
568
+ 'rec', 'return!', 'return', 'select', 'static', 'struct', 'then', 'to',
569
+ 'true', 'try', 'type', 'upcast', 'use!', 'use', 'val', 'void', 'when',
570
+ 'while', 'with', 'yield!', 'yield',
571
+ ]
572
+ # Reserved words; cannot hurt to color them as keywords too.
573
+ keywords += [
574
+ 'atomic', 'break', 'checked', 'component', 'const', 'constraint',
575
+ 'constructor', 'continue', 'eager', 'event', 'external', 'fixed',
576
+ 'functor', 'include', 'method', 'mixin', 'object', 'parallel',
577
+ 'process', 'protected', 'pure', 'sealed', 'tailcall', 'trait',
578
+ 'virtual', 'volatile',
579
+ ]
580
+ keyopts = [
581
+ '!=', '#', '&&', '&', r'\(', r'\)', r'\*', r'\+', ',', r'-\.',
582
+ '->', '-', r'\.\.', r'\.', '::', ':=', ':>', ':', ';;', ';', '<-',
583
+ r'<\]', '<', r'>\]', '>', r'\?\?', r'\?', r'\[<', r'\[\|', r'\[', r'\]',
584
+ '_', '`', r'\{', r'\|\]', r'\|', r'\}', '~', '<@@', '<@', '=', '@>', '@@>',
585
+ ]
586
+
587
+ operators = r'[!$%&*+\./:<=>?@^|~-]'
588
+ word_operators = ['and', 'or', 'not']
589
+ prefix_syms = r'[!?~]'
590
+ infix_syms = r'[=<>@^|&+\*/$%-]'
591
+ primitives = [
592
+ 'sbyte', 'byte', 'char', 'nativeint', 'unativeint', 'float32', 'single',
593
+ 'float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32',
594
+ 'uint32', 'int64', 'uint64', 'decimal', 'unit', 'bool', 'string',
595
+ 'list', 'exn', 'obj', 'enum',
596
+ ]
597
+
598
+ # See http://msdn.microsoft.com/en-us/library/dd233181.aspx and/or
599
+ # http://fsharp.org/about/files/spec.pdf for reference. Good luck.
600
+
601
+ tokens = {
602
+ 'escape-sequence': [
603
+ (r'\\[\\"\'ntbrafv]', String.Escape),
604
+ (r'\\[0-9]{3}', String.Escape),
605
+ (r'\\u[0-9a-fA-F]{4}', String.Escape),
606
+ (r'\\U[0-9a-fA-F]{8}', String.Escape),
607
+ ],
608
+ 'root': [
609
+ (r'\s+', Text),
610
+ (r'\(\)|\[\]', Name.Builtin.Pseudo),
611
+ (r'\b(?<!\.)([A-Z][\w\']*)(?=\s*\.)',
612
+ Name.Namespace, 'dotted'),
613
+ (r'\b([A-Z][\w\']*)', Name),
614
+ (r'///.*?\n', String.Doc),
615
+ (r'//.*?\n', Comment.Single),
616
+ (r'\(\*(?!\))', Comment, 'comment'),
617
+
618
+ (r'@"', String, 'lstring'),
619
+ (r'"""', String, 'tqs'),
620
+ (r'"', String, 'string'),
621
+
622
+ (r'\b(open|module)(\s+)([\w.]+)',
623
+ bygroups(Keyword, Text, Name.Namespace)),
624
+ (r'\b(let!?)(\s+)(\w+)',
625
+ bygroups(Keyword, Text, Name.Variable)),
626
+ (r'\b(type)(\s+)(\w+)',
627
+ bygroups(Keyword, Text, Name.Class)),
628
+ (r'\b(member|override)(\s+)(\w+)(\.)(\w+)',
629
+ bygroups(Keyword, Text, Name, Punctuation, Name.Function)),
630
+ (r'\b(%s)\b' % '|'.join(keywords), Keyword),
631
+ (r'``([^`\n\r\t]|`[^`\n\r\t])+``', Name),
632
+ (r'(%s)' % '|'.join(keyopts), Operator),
633
+ (r'(%s|%s)?%s' % (infix_syms, prefix_syms, operators), Operator),
634
+ (r'\b(%s)\b' % '|'.join(word_operators), Operator.Word),
635
+ (r'\b(%s)\b' % '|'.join(primitives), Keyword.Type),
636
+ (r'#[ \t]*(if|endif|else|line|nowarn|light|\d+)\b.*?\n',
637
+ Comment.Preproc),
638
+
639
+ (r"[^\W\d][\w']*", Name),
640
+
641
+ (r'\d[\d_]*[uU]?[yslLnQRZINGmM]?', Number.Integer),
642
+ (r'0[xX][\da-fA-F][\da-fA-F_]*[uU]?[yslLn]?[fF]?', Number.Hex),
643
+ (r'0[oO][0-7][0-7_]*[uU]?[yslLn]?', Number.Oct),
644
+ (r'0[bB][01][01_]*[uU]?[yslLn]?', Number.Bin),
645
+ (r'-?\d[\d_]*(.[\d_]*)?([eE][+\-]?\d[\d_]*)[fFmM]?',
646
+ Number.Float),
647
+
648
+ (r"'(?:(\\[\\\"'ntbr ])|(\\[0-9]{3})|(\\x[0-9a-fA-F]{2}))'B?",
649
+ String.Char),
650
+ (r"'.'", String.Char),
651
+ (r"'", Keyword), # a stray quote is another syntax element
652
+
653
+ (r'@?"', String.Double, 'string'),
654
+
655
+ (r'[~?][a-z][\w\']*:', Name.Variable),
656
+ ],
657
+ 'dotted': [
658
+ (r'\s+', Text),
659
+ (r'\.', Punctuation),
660
+ (r'[A-Z][\w\']*(?=\s*\.)', Name.Namespace),
661
+ (r'[A-Z][\w\']*', Name, '#pop'),
662
+ (r'[a-z_][\w\']*', Name, '#pop'),
663
+ # e.g. dictionary index access
664
+ default('#pop'),
665
+ ],
666
+ 'comment': [
667
+ (r'[^(*)@"]+', Comment),
668
+ (r'\(\*', Comment, '#push'),
669
+ (r'\*\)', Comment, '#pop'),
670
+ # comments cannot be closed within strings in comments
671
+ (r'@"', String, 'lstring'),
672
+ (r'"""', String, 'tqs'),
673
+ (r'"', String, 'string'),
674
+ (r'[(*)@]', Comment),
675
+ ],
676
+ 'string': [
677
+ (r'[^\\"]+', String),
678
+ include('escape-sequence'),
679
+ (r'\\\n', String),
680
+ (r'\n', String), # newlines are allowed in any string
681
+ (r'"B?', String, '#pop'),
682
+ ],
683
+ 'lstring': [
684
+ (r'[^"]+', String),
685
+ (r'\n', String),
686
+ (r'""', String),
687
+ (r'"B?', String, '#pop'),
688
+ ],
689
+ 'tqs': [
690
+ (r'[^"]+', String),
691
+ (r'\n', String),
692
+ (r'"""B?', String, '#pop'),
693
+ (r'"', String),
694
+ ],
695
+ }
696
+
697
+ def analyse_text(text):
698
+ """F# doesn't have that many unique features -- |> and <| are weak
699
+ indicators."""
700
+ result = 0
701
+ if '|>' in text:
702
+ result += 0.05
703
+ if '<|' in text:
704
+ result += 0.05
705
+
706
+ return result