pygments.rb 1.2.1 → 2.0.0.rc2

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