pygments.rb 1.2.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +13 -0
  3. data/.github/workflows/ci.yml +40 -0
  4. data/.github/workflows/release.yml +24 -0
  5. data/.gitignore +4 -6
  6. data/.rubocop.yml +16 -0
  7. data/CHANGELOG.adoc +137 -0
  8. data/Gemfile +3 -1
  9. data/LICENSE +1 -1
  10. data/README.adoc +159 -0
  11. data/Rakefile +8 -32
  12. data/bench.rb +14 -8
  13. data/lib/pygments.rb +16 -14
  14. data/lib/pygments/lexer.rb +87 -65
  15. data/lib/pygments/mentos.py +23 -110
  16. data/lib/pygments/popen.rb +188 -284
  17. data/lib/pygments/version.rb +2 -2
  18. data/pygments.rb.gemspec +20 -13
  19. data/test/test_pygments.rb +50 -110
  20. data/vendor/pygments-main/{AUTHORS → Pygments-2.8.1.dist-info/AUTHORS} +26 -3
  21. data/vendor/pygments-main/Pygments-2.8.1.dist-info/INSTALLER +1 -0
  22. data/vendor/pygments-main/{LICENSE → Pygments-2.8.1.dist-info/LICENSE} +1 -1
  23. data/vendor/pygments-main/Pygments-2.8.1.dist-info/METADATA +48 -0
  24. data/vendor/pygments-main/Pygments-2.8.1.dist-info/RECORD +494 -0
  25. data/vendor/pygments-main/Pygments-2.8.1.dist-info/REQUESTED +0 -0
  26. data/vendor/pygments-main/Pygments-2.8.1.dist-info/WHEEL +5 -0
  27. data/vendor/pygments-main/Pygments-2.8.1.dist-info/entry_points.txt +3 -0
  28. data/vendor/pygments-main/Pygments-2.8.1.dist-info/top_level.txt +1 -0
  29. data/vendor/pygments-main/bin/pygmentize +8 -0
  30. data/vendor/pygments-main/pygments/__init__.py +6 -12
  31. data/vendor/pygments-main/pygments/__main__.py +17 -0
  32. data/vendor/pygments-main/pygments/cmdline.py +213 -184
  33. data/vendor/pygments-main/pygments/console.py +6 -10
  34. data/vendor/pygments-main/pygments/filter.py +4 -7
  35. data/vendor/pygments-main/pygments/filters/__init__.py +609 -22
  36. data/vendor/pygments-main/pygments/formatter.py +4 -5
  37. data/vendor/pygments-main/pygments/formatters/__init__.py +10 -10
  38. data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -4
  39. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -2
  40. data/vendor/pygments-main/pygments/formatters/html.py +242 -139
  41. data/vendor/pygments-main/pygments/formatters/img.py +91 -50
  42. data/vendor/pygments-main/pygments/formatters/irc.py +39 -40
  43. data/vendor/pygments-main/pygments/formatters/latex.py +62 -33
  44. data/vendor/pygments-main/pygments/formatters/other.py +18 -17
  45. data/vendor/pygments-main/pygments/formatters/rtf.py +29 -30
  46. data/vendor/pygments-main/pygments/formatters/svg.py +40 -5
  47. data/vendor/pygments-main/pygments/formatters/terminal.py +25 -32
  48. data/vendor/pygments-main/pygments/formatters/terminal256.py +45 -14
  49. data/vendor/pygments-main/pygments/lexer.py +47 -44
  50. data/vendor/pygments-main/pygments/lexers/__init__.py +341 -0
  51. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1644 -0
  52. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +231 -0
  53. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +75 -0
  54. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1724 -0
  55. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +5326 -0
  56. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +292 -0
  57. data/vendor/pygments-main/pygments/lexers/_mapping.py +554 -0
  58. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1171 -0
  59. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1281 -0
  60. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +2600 -0
  61. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +4752 -0
  62. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +677 -0
  63. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +3093 -0
  64. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1160 -0
  65. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +557 -0
  66. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +457 -0
  67. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1003 -0
  68. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +112 -0
  69. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +279 -0
  70. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1938 -0
  71. data/vendor/pygments-main/pygments/lexers/actionscript.py +244 -0
  72. data/vendor/pygments-main/pygments/lexers/agile.py +23 -0
  73. data/vendor/pygments-main/pygments/lexers/algebra.py +239 -0
  74. data/vendor/pygments-main/pygments/lexers/ambient.py +75 -0
  75. data/vendor/pygments-main/pygments/lexers/amdgpu.py +48 -0
  76. data/vendor/pygments-main/pygments/lexers/ampl.py +86 -0
  77. data/vendor/pygments-main/pygments/lexers/apl.py +100 -0
  78. data/vendor/pygments-main/pygments/lexers/archetype.py +317 -0
  79. data/vendor/pygments-main/pygments/lexers/arrow.py +116 -0
  80. data/vendor/pygments-main/pygments/lexers/asm.py +1004 -0
  81. data/vendor/pygments-main/pygments/lexers/automation.py +379 -0
  82. data/vendor/pygments-main/pygments/lexers/bare.py +103 -0
  83. data/vendor/pygments-main/pygments/lexers/basic.py +661 -0
  84. data/vendor/pygments-main/pygments/lexers/bibtex.py +159 -0
  85. data/vendor/pygments-main/pygments/lexers/boa.py +101 -0
  86. data/vendor/pygments-main/pygments/lexers/business.py +626 -0
  87. data/vendor/pygments-main/pygments/lexers/c_cpp.py +342 -0
  88. data/vendor/pygments-main/pygments/lexers/c_like.py +565 -0
  89. data/vendor/pygments-main/pygments/lexers/capnproto.py +77 -0
  90. data/vendor/pygments-main/pygments/lexers/cddl.py +190 -0
  91. data/vendor/pygments-main/pygments/lexers/chapel.py +111 -0
  92. data/vendor/pygments-main/pygments/lexers/clean.py +178 -0
  93. data/vendor/pygments-main/pygments/lexers/compiled.py +33 -0
  94. data/vendor/pygments-main/pygments/lexers/configs.py +985 -0
  95. data/vendor/pygments-main/pygments/lexers/console.py +113 -0
  96. data/vendor/pygments-main/pygments/lexers/crystal.py +366 -0
  97. data/vendor/pygments-main/pygments/lexers/csound.py +466 -0
  98. data/vendor/pygments-main/pygments/lexers/css.py +694 -0
  99. data/vendor/pygments-main/pygments/lexers/d.py +255 -0
  100. data/vendor/pygments-main/pygments/lexers/dalvik.py +124 -0
  101. data/vendor/pygments-main/pygments/lexers/data.py +697 -0
  102. data/vendor/pygments-main/pygments/lexers/devicetree.py +108 -0
  103. data/vendor/pygments-main/pygments/lexers/diff.py +164 -0
  104. data/vendor/pygments-main/pygments/lexers/dotnet.py +706 -0
  105. data/vendor/pygments-main/pygments/lexers/dsls.py +959 -0
  106. data/vendor/pygments-main/pygments/lexers/dylan.py +286 -0
  107. data/vendor/pygments-main/pygments/lexers/ecl.py +137 -0
  108. data/vendor/pygments-main/pygments/lexers/eiffel.py +64 -0
  109. data/vendor/pygments-main/pygments/lexers/elm.py +120 -0
  110. data/vendor/pygments-main/pygments/lexers/email.py +150 -0
  111. data/vendor/pygments-main/pygments/lexers/erlang.py +529 -0
  112. data/vendor/pygments-main/pygments/lexers/esoteric.py +303 -0
  113. data/vendor/pygments-main/pygments/lexers/ezhil.py +76 -0
  114. data/vendor/pygments-main/pygments/lexers/factor.py +343 -0
  115. data/vendor/pygments-main/pygments/lexers/fantom.py +249 -0
  116. data/vendor/pygments-main/pygments/lexers/felix.py +272 -0
  117. data/vendor/pygments-main/pygments/lexers/floscript.py +82 -0
  118. data/vendor/pygments-main/pygments/lexers/forth.py +177 -0
  119. data/vendor/pygments-main/pygments/lexers/fortran.py +208 -0
  120. data/vendor/pygments-main/pygments/lexers/foxpro.py +427 -0
  121. data/vendor/pygments-main/pygments/lexers/freefem.py +897 -0
  122. data/vendor/pygments-main/pygments/lexers/functional.py +20 -0
  123. data/vendor/pygments-main/pygments/lexers/futhark.py +110 -0
  124. data/vendor/pygments-main/pygments/lexers/gdscript.py +345 -0
  125. data/vendor/pygments-main/pygments/lexers/go.py +100 -0
  126. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +269 -0
  127. data/vendor/pygments-main/pygments/lexers/graph.py +84 -0
  128. data/vendor/pygments-main/pygments/lexers/graphics.py +799 -0
  129. data/vendor/pygments-main/pygments/lexers/graphviz.py +57 -0
  130. data/vendor/pygments-main/pygments/lexers/haskell.py +869 -0
  131. data/vendor/pygments-main/pygments/lexers/haxe.py +935 -0
  132. data/vendor/pygments-main/pygments/lexers/hdl.py +468 -0
  133. data/vendor/pygments-main/pygments/lexers/hexdump.py +102 -0
  134. data/vendor/pygments-main/pygments/lexers/html.py +613 -0
  135. data/vendor/pygments-main/pygments/lexers/idl.py +280 -0
  136. data/vendor/pygments-main/pygments/lexers/igor.py +419 -0
  137. data/vendor/pygments-main/pygments/lexers/inferno.py +95 -0
  138. data/vendor/pygments-main/pygments/lexers/installers.py +321 -0
  139. data/vendor/pygments-main/pygments/lexers/int_fiction.py +1367 -0
  140. data/vendor/pygments-main/pygments/lexers/iolang.py +62 -0
  141. data/vendor/pygments-main/pygments/lexers/j.py +145 -0
  142. data/vendor/pygments-main/pygments/lexers/javascript.py +1536 -0
  143. data/vendor/pygments-main/pygments/lexers/julia.py +330 -0
  144. data/vendor/pygments-main/pygments/lexers/jvm.py +1739 -0
  145. data/vendor/pygments-main/pygments/lexers/lisp.py +2698 -0
  146. data/vendor/pygments-main/pygments/lexers/make.py +205 -0
  147. data/vendor/pygments-main/pygments/lexers/markup.py +762 -0
  148. data/vendor/pygments-main/pygments/lexers/math.py +20 -0
  149. data/vendor/pygments-main/pygments/lexers/matlab.py +3280 -0
  150. data/vendor/pygments-main/pygments/lexers/mime.py +225 -0
  151. data/vendor/pygments-main/pygments/lexers/ml.py +957 -0
  152. data/vendor/pygments-main/pygments/lexers/modeling.py +365 -0
  153. data/vendor/pygments-main/pygments/lexers/modula2.py +1579 -0
  154. data/vendor/pygments-main/pygments/lexers/monte.py +203 -0
  155. data/vendor/pygments-main/pygments/lexers/mosel.py +447 -0
  156. data/vendor/pygments-main/pygments/lexers/ncl.py +893 -0
  157. data/vendor/pygments-main/pygments/lexers/nimrod.py +158 -0
  158. data/vendor/pygments-main/pygments/lexers/nit.py +63 -0
  159. data/vendor/pygments-main/pygments/lexers/nix.py +135 -0
  160. data/vendor/pygments-main/pygments/lexers/oberon.py +120 -0
  161. data/vendor/pygments-main/pygments/lexers/objective.py +503 -0
  162. data/vendor/pygments-main/pygments/lexers/ooc.py +84 -0
  163. data/vendor/pygments-main/pygments/lexers/other.py +40 -0
  164. data/vendor/pygments-main/pygments/lexers/parasail.py +78 -0
  165. data/vendor/pygments-main/pygments/lexers/parsers.py +799 -0
  166. data/vendor/pygments-main/pygments/lexers/pascal.py +643 -0
  167. data/vendor/pygments-main/pygments/lexers/pawn.py +202 -0
  168. data/vendor/pygments-main/pygments/lexers/perl.py +731 -0
  169. data/vendor/pygments-main/pygments/lexers/php.py +320 -0
  170. data/vendor/pygments-main/pygments/lexers/pointless.py +70 -0
  171. data/vendor/pygments-main/pygments/lexers/pony.py +93 -0
  172. data/vendor/pygments-main/pygments/lexers/praat.py +301 -0
  173. data/vendor/pygments-main/pygments/lexers/prolog.py +305 -0
  174. data/vendor/pygments-main/pygments/lexers/promql.py +182 -0
  175. data/vendor/pygments-main/pygments/lexers/python.py +1158 -0
  176. data/vendor/pygments-main/pygments/lexers/qvt.py +151 -0
  177. data/vendor/pygments-main/pygments/lexers/r.py +190 -0
  178. data/vendor/pygments-main/pygments/lexers/rdf.py +462 -0
  179. data/vendor/pygments-main/pygments/lexers/rebol.py +430 -0
  180. data/vendor/pygments-main/pygments/lexers/resource.py +84 -0
  181. data/vendor/pygments-main/pygments/lexers/ride.py +138 -0
  182. data/vendor/pygments-main/pygments/lexers/rnc.py +66 -0
  183. data/vendor/pygments-main/pygments/lexers/roboconf.py +81 -0
  184. data/vendor/pygments-main/pygments/lexers/robotframework.py +551 -0
  185. data/vendor/pygments-main/pygments/lexers/ruby.py +523 -0
  186. data/vendor/pygments-main/pygments/lexers/rust.py +223 -0
  187. data/vendor/pygments-main/pygments/lexers/sas.py +227 -0
  188. data/vendor/pygments-main/pygments/lexers/scdoc.py +82 -0
  189. data/vendor/pygments-main/pygments/lexers/scripting.py +1283 -0
  190. data/vendor/pygments-main/pygments/lexers/sgf.py +60 -0
  191. data/vendor/pygments-main/pygments/lexers/shell.py +909 -0
  192. data/vendor/pygments-main/pygments/lexers/sieve.py +68 -0
  193. data/vendor/pygments-main/pygments/lexers/slash.py +184 -0
  194. data/vendor/pygments-main/pygments/lexers/smalltalk.py +194 -0
  195. data/vendor/pygments-main/pygments/lexers/smv.py +78 -0
  196. data/vendor/pygments-main/pygments/lexers/snobol.py +82 -0
  197. data/vendor/pygments-main/pygments/lexers/solidity.py +91 -0
  198. data/vendor/pygments-main/pygments/lexers/special.py +106 -0
  199. data/vendor/pygments-main/pygments/lexers/sql.py +832 -0
  200. data/vendor/pygments-main/pygments/lexers/stata.py +170 -0
  201. data/vendor/pygments-main/pygments/lexers/supercollider.py +94 -0
  202. data/vendor/pygments-main/pygments/lexers/tcl.py +144 -0
  203. data/vendor/pygments-main/pygments/lexers/templates.py +2263 -0
  204. data/vendor/pygments-main/pygments/lexers/teraterm.py +334 -0
  205. data/vendor/pygments-main/pygments/lexers/testing.py +206 -0
  206. data/vendor/pygments-main/pygments/lexers/text.py +25 -0
  207. data/vendor/pygments-main/pygments/lexers/textedit.py +168 -0
  208. data/vendor/pygments-main/pygments/lexers/textfmts.py +429 -0
  209. data/vendor/pygments-main/pygments/lexers/theorem.py +476 -0
  210. data/vendor/pygments-main/pygments/lexers/tnt.py +262 -0
  211. data/vendor/pygments-main/pygments/lexers/trafficscript.py +53 -0
  212. data/vendor/pygments-main/pygments/lexers/typoscript.py +218 -0
  213. data/vendor/pygments-main/pygments/lexers/unicon.py +411 -0
  214. data/vendor/pygments-main/pygments/lexers/urbi.py +145 -0
  215. data/vendor/pygments-main/pygments/lexers/usd.py +89 -0
  216. data/vendor/pygments-main/pygments/lexers/varnish.py +189 -0
  217. data/vendor/pygments-main/pygments/lexers/verification.py +113 -0
  218. data/vendor/pygments-main/pygments/lexers/web.py +23 -0
  219. data/vendor/pygments-main/pygments/lexers/webidl.py +298 -0
  220. data/vendor/pygments-main/pygments/lexers/webmisc.py +991 -0
  221. data/vendor/pygments-main/pygments/lexers/whiley.py +115 -0
  222. data/vendor/pygments-main/pygments/lexers/x10.py +68 -0
  223. data/vendor/pygments-main/pygments/lexers/xorg.py +36 -0
  224. data/vendor/pygments-main/pygments/lexers/yang.py +103 -0
  225. data/vendor/pygments-main/pygments/lexers/zig.py +123 -0
  226. data/vendor/pygments-main/pygments/modeline.py +1 -2
  227. data/vendor/pygments-main/pygments/plugin.py +4 -3
  228. data/vendor/pygments-main/pygments/regexopt.py +1 -2
  229. data/vendor/pygments-main/pygments/scanner.py +2 -3
  230. data/vendor/pygments-main/pygments/sphinxext.py +2 -5
  231. data/vendor/pygments-main/pygments/style.py +61 -25
  232. data/vendor/pygments-main/pygments/styles/__init__.py +12 -5
  233. data/vendor/pygments-main/pygments/styles/abap.py +1 -2
  234. data/vendor/pygments-main/pygments/styles/algol.py +1 -2
  235. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -2
  236. data/vendor/pygments-main/pygments/styles/arduino.py +2 -3
  237. data/vendor/pygments-main/pygments/styles/autumn.py +1 -2
  238. data/vendor/pygments-main/pygments/styles/borland.py +1 -2
  239. data/vendor/pygments-main/pygments/styles/bw.py +1 -2
  240. data/vendor/pygments-main/pygments/styles/colorful.py +1 -2
  241. data/vendor/pygments-main/pygments/styles/default.py +1 -2
  242. data/vendor/pygments-main/pygments/styles/emacs.py +1 -2
  243. data/vendor/pygments-main/pygments/styles/friendly.py +1 -2
  244. data/vendor/pygments-main/pygments/styles/fruity.py +1 -2
  245. data/vendor/pygments-main/pygments/styles/igor.py +1 -2
  246. data/vendor/pygments-main/pygments/styles/inkpot.py +66 -0
  247. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -2
  248. data/vendor/pygments-main/pygments/styles/manni.py +1 -2
  249. data/vendor/pygments-main/pygments/styles/material.py +118 -0
  250. data/vendor/pygments-main/pygments/styles/monokai.py +4 -4
  251. data/vendor/pygments-main/pygments/styles/murphy.py +1 -2
  252. data/vendor/pygments-main/pygments/styles/native.py +1 -2
  253. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -2
  254. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -2
  255. data/vendor/pygments-main/pygments/styles/pastie.py +1 -2
  256. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -2
  257. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -2
  258. data/vendor/pygments-main/pygments/styles/rrt.py +1 -2
  259. data/vendor/pygments-main/pygments/styles/sas.py +1 -2
  260. data/vendor/pygments-main/pygments/styles/solarized.py +136 -0
  261. data/vendor/pygments-main/pygments/styles/stata_dark.py +40 -0
  262. data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -16
  263. data/vendor/pygments-main/pygments/styles/tango.py +1 -2
  264. data/vendor/pygments-main/pygments/styles/trac.py +1 -2
  265. data/vendor/pygments-main/pygments/styles/vim.py +1 -2
  266. data/vendor/pygments-main/pygments/styles/vs.py +1 -2
  267. data/vendor/pygments-main/pygments/styles/xcode.py +1 -2
  268. data/vendor/pygments-main/pygments/styles/zenburn.py +80 -0
  269. data/vendor/pygments-main/pygments/token.py +1 -2
  270. data/vendor/pygments-main/pygments/unistring.py +47 -109
  271. data/vendor/pygments-main/pygments/util.py +16 -96
  272. metadata +81 -139
  273. data/CHANGELOG.md +0 -111
  274. data/README.md +0 -121
  275. data/cache-lexers.rb +0 -8
  276. data/circle.yml +0 -20
  277. data/test/test_data.c +0 -2581
  278. data/test/test_data.py +0 -514
  279. data/test/test_data_generated +0 -2582
  280. data/vendor/custom_lexers/github.py +0 -565
  281. data/vendor/pygments-main/CHANGES +0 -1186
  282. data/vendor/pygments-main/MANIFEST.in +0 -6
  283. data/vendor/pygments-main/Makefile +0 -65
  284. data/vendor/pygments-main/README.rst +0 -39
  285. data/vendor/pygments-main/REVISION +0 -1
  286. data/vendor/pygments-main/TODO +0 -12
  287. data/vendor/pygments-main/doc/Makefile +0 -153
  288. data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
  289. data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
  290. data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
  291. data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
  292. data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
  293. data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
  294. data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
  295. data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
  296. data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
  297. data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
  298. data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
  299. data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
  300. data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
  301. data/vendor/pygments-main/doc/conf.py +0 -241
  302. data/vendor/pygments-main/doc/docs/api.rst +0 -354
  303. data/vendor/pygments-main/doc/docs/authors.rst +0 -4
  304. data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
  305. data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
  306. data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
  307. data/vendor/pygments-main/doc/docs/filters.rst +0 -41
  308. data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
  309. data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
  310. data/vendor/pygments-main/doc/docs/index.rst +0 -66
  311. data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
  312. data/vendor/pygments-main/doc/docs/java.rst +0 -70
  313. data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
  314. data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
  315. data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
  316. data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
  317. data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
  318. data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
  319. data/vendor/pygments-main/doc/docs/styles.rst +0 -201
  320. data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
  321. data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
  322. data/vendor/pygments-main/doc/download.rst +0 -41
  323. data/vendor/pygments-main/doc/faq.rst +0 -139
  324. data/vendor/pygments-main/doc/index.rst +0 -54
  325. data/vendor/pygments-main/doc/languages.rst +0 -154
  326. data/vendor/pygments-main/doc/make.bat +0 -190
  327. data/vendor/pygments-main/doc/pygmentize.1 +0 -94
  328. data/vendor/pygments-main/external/autopygmentize +0 -101
  329. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
  330. data/vendor/pygments-main/external/markdown-processor.py +0 -67
  331. data/vendor/pygments-main/external/moin-parser.py +0 -112
  332. data/vendor/pygments-main/external/pygments.bashcomp +0 -38
  333. data/vendor/pygments-main/external/rst-directive.py +0 -82
  334. data/vendor/pygments-main/pygmentize +0 -8
  335. data/vendor/pygments-main/requirements.txt +0 -5
  336. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  337. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  338. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  339. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  340. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  341. data/vendor/pygments-main/scripts/pylintrc +0 -301
  342. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  343. data/vendor/pygments-main/setup.cfg +0 -10
  344. data/vendor/pygments-main/setup.py +0 -77
  345. data/vendor/pygments-main/tox.ini +0 -7
  346. data/vendor/simplejson/.gitignore +0 -10
  347. data/vendor/simplejson/.travis.yml +0 -5
  348. data/vendor/simplejson/CHANGES.txt +0 -291
  349. data/vendor/simplejson/LICENSE.txt +0 -19
  350. data/vendor/simplejson/MANIFEST.in +0 -5
  351. data/vendor/simplejson/README.rst +0 -19
  352. data/vendor/simplejson/conf.py +0 -179
  353. data/vendor/simplejson/index.rst +0 -628
  354. data/vendor/simplejson/scripts/make_docs.py +0 -18
  355. data/vendor/simplejson/setup.py +0 -104
  356. data/vendor/simplejson/simplejson/__init__.py +0 -510
  357. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  358. data/vendor/simplejson/simplejson/decoder.py +0 -425
  359. data/vendor/simplejson/simplejson/encoder.py +0 -567
  360. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  361. data/vendor/simplejson/simplejson/scanner.py +0 -77
  362. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  363. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  364. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  365. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  366. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  367. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  368. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  369. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  370. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  371. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  372. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  373. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  374. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  375. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  376. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  377. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  378. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  379. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  380. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  381. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  382. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  383. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  384. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  385. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  386. data/vendor/simplejson/simplejson/tool.py +0 -39
@@ -0,0 +1,82 @@
1
+ """
2
+ pygments.lexers.scdoc
3
+ ~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for scdoc, a simple man page generator.
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
+ using, this
15
+ from pygments.token import Text, Comment, Keyword, String, \
16
+ Generic
17
+
18
+
19
+ __all__ = ['ScdocLexer']
20
+
21
+
22
+ class ScdocLexer(RegexLexer):
23
+ """
24
+ `scdoc` is a simple man page generator for POSIX systems written in C99.
25
+ https://git.sr.ht/~sircmpwn/scdoc
26
+
27
+ .. versionadded:: 2.5
28
+ """
29
+ name = 'scdoc'
30
+ aliases = ['scdoc', 'scd']
31
+ filenames = ['*.scd', '*.scdoc']
32
+ flags = re.MULTILINE
33
+
34
+ tokens = {
35
+ 'root': [
36
+ # comment
37
+ (r'^(;.+\n)', bygroups(Comment)),
38
+
39
+ # heading with pound prefix
40
+ (r'^(#)([^#].+\n)', bygroups(Generic.Heading, Text)),
41
+ (r'^(#{2})(.+\n)', bygroups(Generic.Subheading, Text)),
42
+ # bulleted lists
43
+ (r'^(\s*)([*-])(\s)(.+\n)',
44
+ bygroups(Text, Keyword, Text, using(this, state='inline'))),
45
+ # numbered lists
46
+ (r'^(\s*)(\.+\.)( .+\n)',
47
+ bygroups(Text, Keyword, using(this, state='inline'))),
48
+ # quote
49
+ (r'^(\s*>\s)(.+\n)', bygroups(Keyword, Generic.Emph)),
50
+ # text block
51
+ (r'^(```\n)([\w\W]*?)(^```$)', bygroups(String, Text, String)),
52
+
53
+ include('inline'),
54
+ ],
55
+ 'inline': [
56
+ # escape
57
+ (r'\\.', Text),
58
+ # underlines
59
+ (r'(\s)(_[^_]+_)(\W|\n)', bygroups(Text, Generic.Emph, Text)),
60
+ # bold
61
+ (r'(\s)(\*[^*]+\*)(\W|\n)', bygroups(Text, Generic.Strong, Text)),
62
+ # inline code
63
+ (r'`[^`]+`', String.Backtick),
64
+
65
+ # general text, must come last!
66
+ (r'[^\\\s]+', Text),
67
+ (r'.', Text),
68
+ ],
69
+ }
70
+
71
+ def analyse_text(text):
72
+ """This is very similar to markdown, save for the escape characters
73
+ needed for * and _."""
74
+ result = 0
75
+
76
+ if '\\*' in text:
77
+ result += 0.01
78
+
79
+ if '\\_' in text:
80
+ result += 0.01
81
+
82
+ return result
@@ -0,0 +1,1283 @@
1
+ """
2
+ pygments.lexers.scripting
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for scripting and embedded languages.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import RegexLexer, include, bygroups, default, combined, \
14
+ words
15
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
16
+ Number, Punctuation, Error, Whitespace, Other
17
+ from pygments.util import get_bool_opt, get_list_opt
18
+
19
+ __all__ = ['LuaLexer', 'MoonScriptLexer', 'ChaiscriptLexer', 'LSLLexer',
20
+ 'AppleScriptLexer', 'RexxLexer', 'MOOCodeLexer', 'HybrisLexer',
21
+ 'EasytrieveLexer', 'JclLexer', 'MiniScriptLexer']
22
+
23
+
24
+ class LuaLexer(RegexLexer):
25
+ """
26
+ For `Lua <http://www.lua.org>`_ source code.
27
+
28
+ Additional options accepted:
29
+
30
+ `func_name_highlighting`
31
+ If given and ``True``, highlight builtin function names
32
+ (default: ``True``).
33
+ `disabled_modules`
34
+ If given, must be a list of module names whose function names
35
+ should not be highlighted. By default all modules are highlighted.
36
+
37
+ To get a list of allowed modules have a look into the
38
+ `_lua_builtins` module:
39
+
40
+ .. sourcecode:: pycon
41
+
42
+ >>> from pygments.lexers._lua_builtins import MODULES
43
+ >>> MODULES.keys()
44
+ ['string', 'coroutine', 'modules', 'io', 'basic', ...]
45
+ """
46
+
47
+ name = 'Lua'
48
+ aliases = ['lua']
49
+ filenames = ['*.lua', '*.wlua']
50
+ mimetypes = ['text/x-lua', 'application/x-lua']
51
+
52
+ _comment_multiline = r'(?:--\[(?P<level>=*)\[[\w\W]*?\](?P=level)\])'
53
+ _comment_single = r'(?:--.*$)'
54
+ _space = r'(?:\s+)'
55
+ _s = r'(?:%s|%s|%s)' % (_comment_multiline, _comment_single, _space)
56
+ _name = r'(?:[^\W\d]\w*)'
57
+
58
+ tokens = {
59
+ 'root': [
60
+ # Lua allows a file to start with a shebang.
61
+ (r'#!.*', Comment.Preproc),
62
+ default('base'),
63
+ ],
64
+ 'ws': [
65
+ (_comment_multiline, Comment.Multiline),
66
+ (_comment_single, Comment.Single),
67
+ (_space, Text),
68
+ ],
69
+ 'base': [
70
+ include('ws'),
71
+
72
+ (r'(?i)0x[\da-f]*(\.[\da-f]*)?(p[+-]?\d+)?', Number.Hex),
73
+ (r'(?i)(\d*\.\d+|\d+\.\d*)(e[+-]?\d+)?', Number.Float),
74
+ (r'(?i)\d+e[+-]?\d+', Number.Float),
75
+ (r'\d+', Number.Integer),
76
+
77
+ # multiline strings
78
+ (r'(?s)\[(=*)\[.*?\]\1\]', String),
79
+
80
+ (r'::', Punctuation, 'label'),
81
+ (r'\.{3}', Punctuation),
82
+ (r'[=<>|~&+\-*/%#^]+|\.\.', Operator),
83
+ (r'[\[\]{}().,:;]', Punctuation),
84
+ (r'(and|or|not)\b', Operator.Word),
85
+
86
+ ('(break|do|else|elseif|end|for|if|in|repeat|return|then|until|'
87
+ r'while)\b', Keyword.Reserved),
88
+ (r'goto\b', Keyword.Reserved, 'goto'),
89
+ (r'(local)\b', Keyword.Declaration),
90
+ (r'(true|false|nil)\b', Keyword.Constant),
91
+
92
+ (r'(function)\b', Keyword.Reserved, 'funcname'),
93
+
94
+ (r'[A-Za-z_]\w*(\.[A-Za-z_]\w*)?', Name),
95
+
96
+ ("'", String.Single, combined('stringescape', 'sqs')),
97
+ ('"', String.Double, combined('stringescape', 'dqs'))
98
+ ],
99
+
100
+ 'funcname': [
101
+ include('ws'),
102
+ (r'[.:]', Punctuation),
103
+ (r'%s(?=%s*[.:])' % (_name, _s), Name.Class),
104
+ (_name, Name.Function, '#pop'),
105
+ # inline function
106
+ (r'\(', Punctuation, '#pop'),
107
+ ],
108
+
109
+ 'goto': [
110
+ include('ws'),
111
+ (_name, Name.Label, '#pop'),
112
+ ],
113
+
114
+ 'label': [
115
+ include('ws'),
116
+ (r'::', Punctuation, '#pop'),
117
+ (_name, Name.Label),
118
+ ],
119
+
120
+ 'stringescape': [
121
+ (r'\\([abfnrtv\\"\']|[\r\n]{1,2}|z\s*|x[0-9a-fA-F]{2}|\d{1,3}|'
122
+ r'u\{[0-9a-fA-F]+\})', String.Escape),
123
+ ],
124
+
125
+ 'sqs': [
126
+ (r"'", String.Single, '#pop'),
127
+ (r"[^\\']+", String.Single),
128
+ ],
129
+
130
+ 'dqs': [
131
+ (r'"', String.Double, '#pop'),
132
+ (r'[^\\"]+', String.Double),
133
+ ]
134
+ }
135
+
136
+ def __init__(self, **options):
137
+ self.func_name_highlighting = get_bool_opt(
138
+ options, 'func_name_highlighting', True)
139
+ self.disabled_modules = get_list_opt(options, 'disabled_modules', [])
140
+
141
+ self._functions = set()
142
+ if self.func_name_highlighting:
143
+ from pygments.lexers._lua_builtins import MODULES
144
+ for mod, func in MODULES.items():
145
+ if mod not in self.disabled_modules:
146
+ self._functions.update(func)
147
+ RegexLexer.__init__(self, **options)
148
+
149
+ def get_tokens_unprocessed(self, text):
150
+ for index, token, value in \
151
+ RegexLexer.get_tokens_unprocessed(self, text):
152
+ if token is Name:
153
+ if value in self._functions:
154
+ yield index, Name.Builtin, value
155
+ continue
156
+ elif '.' in value:
157
+ a, b = value.split('.')
158
+ yield index, Name, a
159
+ yield index + len(a), Punctuation, '.'
160
+ yield index + len(a) + 1, Name, b
161
+ continue
162
+ yield index, token, value
163
+
164
+ class MoonScriptLexer(LuaLexer):
165
+ """
166
+ For `MoonScript <http://moonscript.org>`_ source code.
167
+
168
+ .. versionadded:: 1.5
169
+ """
170
+
171
+ name = "MoonScript"
172
+ aliases = ["moon", "moonscript"]
173
+ filenames = ["*.moon"]
174
+ mimetypes = ['text/x-moonscript', 'application/x-moonscript']
175
+
176
+ tokens = {
177
+ 'root': [
178
+ (r'#!(.*?)$', Comment.Preproc),
179
+ default('base'),
180
+ ],
181
+ 'base': [
182
+ ('--.*$', Comment.Single),
183
+ (r'(?i)(\d*\.\d+|\d+\.\d*)(e[+-]?\d+)?', Number.Float),
184
+ (r'(?i)\d+e[+-]?\d+', Number.Float),
185
+ (r'(?i)0x[0-9a-f]*', Number.Hex),
186
+ (r'\d+', Number.Integer),
187
+ (r'\n', Text),
188
+ (r'[^\S\n]+', Text),
189
+ (r'(?s)\[(=*)\[.*?\]\1\]', String),
190
+ (r'(->|=>)', Name.Function),
191
+ (r':[a-zA-Z_]\w*', Name.Variable),
192
+ (r'(==|!=|~=|<=|>=|\.\.\.|\.\.|[=+\-*/%^<>#!.\\:])', Operator),
193
+ (r'[;,]', Punctuation),
194
+ (r'[\[\]{}()]', Keyword.Type),
195
+ (r'[a-zA-Z_]\w*:', Name.Variable),
196
+ (words((
197
+ 'class', 'extends', 'if', 'then', 'super', 'do', 'with',
198
+ 'import', 'export', 'while', 'elseif', 'return', 'for', 'in',
199
+ 'from', 'when', 'using', 'else', 'and', 'or', 'not', 'switch',
200
+ 'break'), suffix=r'\b'),
201
+ Keyword),
202
+ (r'(true|false|nil)\b', Keyword.Constant),
203
+ (r'(and|or|not)\b', Operator.Word),
204
+ (r'(self)\b', Name.Builtin.Pseudo),
205
+ (r'@@?([a-zA-Z_]\w*)?', Name.Variable.Class),
206
+ (r'[A-Z]\w*', Name.Class), # proper name
207
+ (r'[A-Za-z_]\w*(\.[A-Za-z_]\w*)?', Name),
208
+ ("'", String.Single, combined('stringescape', 'sqs')),
209
+ ('"', String.Double, combined('stringescape', 'dqs'))
210
+ ],
211
+ 'stringescape': [
212
+ (r'''\\([abfnrtv\\"']|\d{1,3})''', String.Escape)
213
+ ],
214
+ 'sqs': [
215
+ ("'", String.Single, '#pop'),
216
+ (".", String)
217
+ ],
218
+ 'dqs': [
219
+ ('"', String.Double, '#pop'),
220
+ (".", String)
221
+ ]
222
+ }
223
+
224
+ def get_tokens_unprocessed(self, text):
225
+ # set . as Operator instead of Punctuation
226
+ for index, token, value in LuaLexer.get_tokens_unprocessed(self, text):
227
+ if token == Punctuation and value == ".":
228
+ token = Operator
229
+ yield index, token, value
230
+
231
+
232
+ class ChaiscriptLexer(RegexLexer):
233
+ """
234
+ For `ChaiScript <http://chaiscript.com/>`_ source code.
235
+
236
+ .. versionadded:: 2.0
237
+ """
238
+
239
+ name = 'ChaiScript'
240
+ aliases = ['chai', 'chaiscript']
241
+ filenames = ['*.chai']
242
+ mimetypes = ['text/x-chaiscript', 'application/x-chaiscript']
243
+
244
+ flags = re.DOTALL | re.MULTILINE
245
+
246
+ tokens = {
247
+ 'commentsandwhitespace': [
248
+ (r'\s+', Text),
249
+ (r'//.*?\n', Comment.Single),
250
+ (r'/\*.*?\*/', Comment.Multiline),
251
+ (r'^\#.*?\n', Comment.Single)
252
+ ],
253
+ 'slashstartsregex': [
254
+ include('commentsandwhitespace'),
255
+ (r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
256
+ r'([gim]+\b|\B)', String.Regex, '#pop'),
257
+ (r'(?=/)', Text, ('#pop', 'badregex')),
258
+ default('#pop')
259
+ ],
260
+ 'badregex': [
261
+ (r'\n', Text, '#pop')
262
+ ],
263
+ 'root': [
264
+ include('commentsandwhitespace'),
265
+ (r'\n', Text),
266
+ (r'[^\S\n]+', Text),
267
+ (r'\+\+|--|~|&&|\?|:|\|\||\\(?=\n)|\.\.'
268
+ r'(<<|>>>?|==?|!=?|[-<>+*%&|^/])=?', Operator, 'slashstartsregex'),
269
+ (r'[{(\[;,]', Punctuation, 'slashstartsregex'),
270
+ (r'[})\].]', Punctuation),
271
+ (r'[=+\-*/]', Operator),
272
+ (r'(for|in|while|do|break|return|continue|if|else|'
273
+ r'throw|try|catch'
274
+ r')\b', Keyword, 'slashstartsregex'),
275
+ (r'(var)\b', Keyword.Declaration, 'slashstartsregex'),
276
+ (r'(attr|def|fun)\b', Keyword.Reserved),
277
+ (r'(true|false)\b', Keyword.Constant),
278
+ (r'(eval|throw)\b', Name.Builtin),
279
+ (r'`\S+`', Name.Builtin),
280
+ (r'[$a-zA-Z_]\w*', Name.Other),
281
+ (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
282
+ (r'0x[0-9a-fA-F]+', Number.Hex),
283
+ (r'[0-9]+', Number.Integer),
284
+ (r'"', String.Double, 'dqstring'),
285
+ (r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),
286
+ ],
287
+ 'dqstring': [
288
+ (r'\$\{[^"}]+?\}', String.Interpol),
289
+ (r'\$', String.Double),
290
+ (r'\\\\', String.Double),
291
+ (r'\\"', String.Double),
292
+ (r'[^\\"$]+', String.Double),
293
+ (r'"', String.Double, '#pop'),
294
+ ],
295
+ }
296
+
297
+
298
+ class LSLLexer(RegexLexer):
299
+ """
300
+ For Second Life's Linden Scripting Language source code.
301
+
302
+ .. versionadded:: 2.0
303
+ """
304
+
305
+ name = 'LSL'
306
+ aliases = ['lsl']
307
+ filenames = ['*.lsl']
308
+ mimetypes = ['text/x-lsl']
309
+
310
+ flags = re.MULTILINE
311
+
312
+ lsl_keywords = r'\b(?:do|else|for|if|jump|return|while)\b'
313
+ lsl_types = r'\b(?:float|integer|key|list|quaternion|rotation|string|vector)\b'
314
+ lsl_states = r'\b(?:(?:state)\s+\w+|default)\b'
315
+ lsl_events = r'\b(?:state_(?:entry|exit)|touch(?:_(?:start|end))?|(?:land_)?collision(?:_(?:start|end))?|timer|listen|(?:no_)?sensor|control|(?:not_)?at_(?:rot_)?target|money|email|run_time_permissions|changed|attach|dataserver|moving_(?:start|end)|link_message|(?:on|object)_rez|remote_data|http_re(?:sponse|quest)|path_update|transaction_result)\b'
316
+ lsl_functions_builtin = r'\b(?:ll(?:ReturnObjectsBy(?:ID|Owner)|Json(?:2List|[GS]etValue|ValueType)|Sin|Cos|Tan|Atan2|Sqrt|Pow|Abs|Fabs|Frand|Floor|Ceil|Round|Vec(?:Mag|Norm|Dist)|Rot(?:Between|2(?:Euler|Fwd|Left|Up))|(?:Euler|Axes)2Rot|Whisper|(?:Region|Owner)?Say|Shout|Listen(?:Control|Remove)?|Sensor(?:Repeat|Remove)?|Detected(?:Name|Key|Owner|Type|Pos|Vel|Grab|Rot|Group|LinkNumber)|Die|Ground|Wind|(?:[GS]et)(?:AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(?:Desc|Name)|PhysicsMaterial|Status|Scale|Color|Alpha|Texture|Pos|Rot|Force|Torque)|ResetAnimationOverride|(?:Scale|Offset|Rotate)Texture|(?:Rot)?Target(?:Remove)?|(?:Stop)?MoveToTarget|Apply(?:Rotational)?Impulse|Set(?:KeyframedMotion|ContentType|RegionPos|(?:Angular)?Velocity|Buoyancy|HoverHeight|ForceAndTorque|TimerEvent|ScriptState|Damage|TextureAnim|Sound(?:Queueing|Radius)|Vehicle(?:Type|(?:Float|Vector|Rotation)Param)|(?:Touch|Sit)?Text|Camera(?:Eye|At)Offset|PrimitiveParams|ClickAction|Link(?:Alpha|Color|PrimitiveParams(?:Fast)?|Texture(?:Anim)?|Camera|Media)|RemoteScriptAccessPin|PayPrice|LocalRot)|ScaleByFactor|Get(?:(?:Max|Min)ScaleFactor|ClosestNavPoint|StaticPath|SimStats|Env|PrimitiveParams|Link(?:PrimitiveParams|Number(?:OfSides)?|Key|Name|Media)|HTTPHeader|FreeURLs|Object(?:Details|PermMask|PrimCount)|Parcel(?:MaxPrims|Details|Prim(?:Count|Owners))|Attached|(?:SPMax|Free|Used)Memory|Region(?:Name|TimeDilation|FPS|Corner|AgentCount)|Root(?:Position|Rotation)|UnixTime|(?:Parcel|Region)Flags|(?:Wall|GMT)clock|SimulatorHostname|BoundingBox|GeometricCenter|Creator|NumberOf(?:Prims|NotecardLines|Sides)|Animation(?:List)?|(?:Camera|Local)(?:Pos|Rot)|Vel|Accel|Omega|Time(?:stamp|OfDay)|(?:Object|CenterOf)?Mass|MassMKS|Energy|Owner|(?:Owner)?Key|SunDirection|Texture(?:Offset|Scale|Rot)|Inventory(?:Number|Name|Key|Type|Creator|PermMask)|Permissions(?:Key)?|StartParameter|List(?:Length|EntryType)|Date|Agent(?:Size|Info|Language|List)|LandOwnerAt|NotecardLine|Script(?:Name|State))|(?:Get|Reset|GetAndReset)Time|PlaySound(?:Slave)?|LoopSound(?:Master|Slave)?|(?:Trigger|Stop|Preload)Sound|(?:(?:Get|Delete)Sub|Insert)String|To(?:Upper|Lower)|Give(?:InventoryList|Money)|RezObject|(?:Stop)?LookAt|Sleep|CollisionFilter|(?:Take|Release)Controls|DetachFromAvatar|AttachToAvatar(?:Temp)?|InstantMessage|(?:GetNext)?Email|StopHover|MinEventDelay|RotLookAt|String(?:Length|Trim)|(?:Start|Stop)Animation|TargetOmega|RequestPermissions|(?:Create|Break)Link|BreakAllLinks|(?:Give|Remove)Inventory|Water|PassTouches|Request(?:Agent|Inventory)Data|TeleportAgent(?:Home|GlobalCoords)?|ModifyLand|CollisionSound|ResetScript|MessageLinked|PushObject|PassCollisions|AxisAngle2Rot|Rot2(?:Axis|Angle)|A(?:cos|sin)|AngleBetween|AllowInventoryDrop|SubStringIndex|List2(?:CSV|Integer|Json|Float|String|Key|Vector|Rot|List(?:Strided)?)|DeleteSubList|List(?:Statistics|Sort|Randomize|(?:Insert|Find|Replace)List)|EdgeOfWorld|AdjustSoundVolume|Key2Name|TriggerSoundLimited|EjectFromLand|(?:CSV|ParseString)2List|OverMyLand|SameGroup|UnSit|Ground(?:Slope|Normal|Contour)|GroundRepel|(?:Set|Remove)VehicleFlags|(?:AvatarOn)?(?:Link)?SitTarget|Script(?:Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(?:Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(?:Integer|String)ToBase64|XorBase64|Log(?:10)?|Base64To(?:String|Integer)|ParseStringKeepNulls|RezAtRoot|RequestSimulatorData|ForceMouselook|(?:Load|Release|(?:E|Une)scape)URL|ParcelMedia(?:CommandList|Query)|ModPow|MapDestination|(?:RemoveFrom|AddTo|Reset)Land(?:Pass|Ban)List|(?:Set|Clear)CameraParams|HTTP(?:Request|Response)|TextBox|DetectedTouch(?:UV|Face|Pos|(?:N|Bin)ormal|ST)|(?:MD5|SHA1|DumpList2)String|Request(?:Secure)?URL|Clear(?:Prim|Link)Media|(?:Link)?ParticleSystem|(?:Get|Request)(?:Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(?:Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin))\b'
317
+ lsl_constants_float = r'\b(?:DEG_TO_RAD|PI(?:_BY_TWO)?|RAD_TO_DEG|SQRT2|TWO_PI)\b'
318
+ lsl_constants_integer = r'\b(?:JSON_APPEND|STATUS_(?:PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(?:_OBJECT)?|(?:DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(?:FOUND|SUPPORTED)|INTERNAL_ERROR|WHITELIST_FAILED)|AGENT(?:_(?:BY_(?:LEGACY_|USER)NAME|FLYING|ATTACHMENTS|SCRIPTED|MOUSELOOK|SITTING|ON_OBJECT|AWAY|WALKING|IN_AIR|TYPING|CROUCHING|BUSY|ALWAYS_RUN|AUTOPILOT|LIST_(?:PARCEL(?:_OWNER)?|REGION)))?|CAMERA_(?:PITCH|DISTANCE|BEHINDNESS_(?:ANGLE|LAG)|(?:FOCUS|POSITION)(?:_(?:THRESHOLD|LOCKED|LAG))?|FOCUS_OFFSET|ACTIVE)|ANIM_ON|LOOP|REVERSE|PING_PONG|SMOOTH|ROTATE|SCALE|ALL_SIDES|LINK_(?:ROOT|SET|ALL_(?:OTHERS|CHILDREN)|THIS)|ACTIVE|PASSIVE|SCRIPTED|CONTROL_(?:FWD|BACK|(?:ROT_)?(?:LEFT|RIGHT)|UP|DOWN|(?:ML_)?LBUTTON)|PERMISSION_(?:RETURN_OBJECTS|DEBIT|OVERRIDE_ANIMATIONS|SILENT_ESTATE_MANAGEMENT|TAKE_CONTROLS|TRIGGER_ANIMATION|ATTACH|CHANGE_LINKS|(?:CONTROL|TRACK)_CAMERA|TELEPORT)|INVENTORY_(?:TEXTURE|SOUND|OBJECT|SCRIPT|LANDMARK|CLOTHING|NOTECARD|BODYPART|ANIMATION|GESTURE|ALL|NONE)|CHANGED_(?:INVENTORY|COLOR|SHAPE|SCALE|TEXTURE|LINK|ALLOWED_DROP|OWNER|REGION(?:_START)?|TELEPORT|MEDIA)|OBJECT_(?:(?:PHYSICS|SERVER|STREAMING)_COST|UNKNOWN_DETAIL|CHARACTER_TIME|PHANTOM|PHYSICS|TEMP_ON_REZ|NAME|DESC|POS|PRIM_EQUIVALENCE|RETURN_(?:PARCEL(?:_OWNER)?|REGION)|ROO?T|VELOCITY|OWNER|GROUP|CREATOR|ATTACHED_POINT|RENDER_WEIGHT|PATHFINDING_TYPE|(?:RUNNING|TOTAL)_SCRIPT_COUNT|SCRIPT_(?:MEMORY|TIME))|TYPE_(?:INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|(?:DEBUG|PUBLIC)_CHANNEL|ATTACH_(?:AVATAR_CENTER|CHEST|HEAD|BACK|PELVIS|MOUTH|CHIN|NECK|NOSE|BELLY|[LR](?:SHOULDER|HAND|FOOT|EAR|EYE|[UL](?:ARM|LEG)|HIP)|(?:LEFT|RIGHT)_PEC|HUD_(?:CENTER_[12]|TOP_(?:RIGHT|CENTER|LEFT)|BOTTOM(?:_(?:RIGHT|LEFT))?))|LAND_(?:LEVEL|RAISE|LOWER|SMOOTH|NOISE|REVERT)|DATA_(?:ONLINE|NAME|BORN|SIM_(?:POS|STATUS|RATING)|PAYINFO)|PAYMENT_INFO_(?:ON_FILE|USED)|REMOTE_DATA_(?:CHANNEL|REQUEST|REPLY)|PSYS_(?:PART_(?:BF_(?:ZERO|ONE(?:_MINUS_(?:DEST_COLOR|SOURCE_(ALPHA|COLOR)))?|DEST_COLOR|SOURCE_(ALPHA|COLOR))|BLEND_FUNC_(DEST|SOURCE)|FLAGS|(?:START|END)_(?:COLOR|ALPHA|SCALE|GLOW)|MAX_AGE|(?:RIBBON|WIND|INTERP_(?:COLOR|SCALE)|BOUNCE|FOLLOW_(?:SRC|VELOCITY)|TARGET_(?:POS|LINEAR)|EMISSIVE)_MASK)|SRC_(?:MAX_AGE|PATTERN|ANGLE_(?:BEGIN|END)|BURST_(?:RATE|PART_COUNT|RADIUS|SPEED_(?:MIN|MAX))|ACCEL|TEXTURE|TARGET_KEY|OMEGA|PATTERN_(?:DROP|EXPLODE|ANGLE(?:_CONE(?:_EMPTY)?)?)))|VEHICLE_(?:REFERENCE_FRAME|TYPE_(?:NONE|SLED|CAR|BOAT|AIRPLANE|BALLOON)|(?:LINEAR|ANGULAR)_(?:FRICTION_TIMESCALE|MOTOR_DIRECTION)|LINEAR_MOTOR_OFFSET|HOVER_(?:HEIGHT|EFFICIENCY|TIMESCALE)|BUOYANCY|(?:LINEAR|ANGULAR)_(?:DEFLECTION_(?:EFFICIENCY|TIMESCALE)|MOTOR_(?:DECAY_)?TIMESCALE)|VERTICAL_ATTRACTION_(?:EFFICIENCY|TIMESCALE)|BANKING_(?:EFFICIENCY|MIX|TIMESCALE)|FLAG_(?:NO_DEFLECTION_UP|LIMIT_(?:ROLL_ONLY|MOTOR_UP)|HOVER_(?:(?:WATER|TERRAIN|UP)_ONLY|GLOBAL_HEIGHT)|MOUSELOOK_(?:STEER|BANK)|CAMERA_DECOUPLED))|PRIM_(?:TYPE(?:_(?:BOX|CYLINDER|PRISM|SPHERE|TORUS|TUBE|RING|SCULPT))?|HOLE_(?:DEFAULT|CIRCLE|SQUARE|TRIANGLE)|MATERIAL(?:_(?:STONE|METAL|GLASS|WOOD|FLESH|PLASTIC|RUBBER))?|SHINY_(?:NONE|LOW|MEDIUM|HIGH)|BUMP_(?:NONE|BRIGHT|DARK|WOOD|BARK|BRICKS|CHECKER|CONCRETE|TILE|STONE|DISKS|GRAVEL|BLOBS|SIDING|LARGETILE|STUCCO|SUCTION|WEAVE)|TEXGEN_(?:DEFAULT|PLANAR)|SCULPT_(?:TYPE_(?:SPHERE|TORUS|PLANE|CYLINDER|MASK)|FLAG_(?:MIRROR|INVERT))|PHYSICS(?:_(?:SHAPE_(?:CONVEX|NONE|PRIM|TYPE)))?|(?:POS|ROT)_LOCAL|SLICE|TEXT|FLEXIBLE|POINT_LIGHT|TEMP_ON_REZ|PHANTOM|POSITION|SIZE|ROTATION|TEXTURE|NAME|OMEGA|DESC|LINK_TARGET|COLOR|BUMP_SHINY|FULLBRIGHT|TEXGEN|GLOW|MEDIA_(?:ALT_IMAGE_ENABLE|CONTROLS|(?:CURRENT|HOME)_URL|AUTO_(?:LOOP|PLAY|SCALE|ZOOM)|FIRST_CLICK_INTERACT|(?:WIDTH|HEIGHT)_PIXELS|WHITELIST(?:_ENABLE)?|PERMS_(?:INTERACT|CONTROL)|PARAM_MAX|CONTROLS_(?:STANDARD|MINI)|PERM_(?:NONE|OWNER|GROUP|ANYONE)|MAX_(?:URL_LENGTH|WHITELIST_(?:SIZE|COUNT)|(?:WIDTH|HEIGHT)_PIXELS)))|MASK_(?:BASE|OWNER|GROUP|EVERYONE|NEXT)|PERM_(?:TRANSFER|MODIFY|COPY|MOVE|ALL)|PARCEL_(?:MEDIA_COMMAND_(?:STOP|PAUSE|PLAY|LOOP|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC|LOOP_SET)|FLAG_(?:ALLOW_(?:FLY|(?:GROUP_)?SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|CREATE_(?:GROUP_)?OBJECTS)|USE_(?:ACCESS_(?:GROUP|LIST)|BAN_LIST|LAND_PASS_LIST)|LOCAL_SOUND_ONLY|RESTRICT_PUSHOBJECT|ALLOW_(?:GROUP|ALL)_OBJECT_ENTRY)|COUNT_(?:TOTAL|OWNER|GROUP|OTHER|SELECTED|TEMP)|DETAILS_(?:NAME|DESC|OWNER|GROUP|AREA|ID|SEE_AVATARS))|LIST_STAT_(?:MAX|MIN|MEAN|MEDIAN|STD_DEV|SUM(?:_SQUARES)?|NUM_COUNT|GEOMETRIC_MEAN|RANGE)|PAY_(?:HIDE|DEFAULT)|REGION_FLAG_(?:ALLOW_DAMAGE|FIXED_SUN|BLOCK_TERRAFORM|SANDBOX|DISABLE_(?:COLLISIONS|PHYSICS)|BLOCK_FLY|ALLOW_DIRECT_TELEPORT|RESTRICT_PUSHOBJECT)|HTTP_(?:METHOD|MIMETYPE|BODY_(?:MAXLENGTH|TRUNCATED)|CUSTOM_HEADER|PRAGMA_NO_CACHE|VERBOSE_THROTTLE|VERIFY_CERT)|STRING_(?:TRIM(?:_(?:HEAD|TAIL))?)|CLICK_ACTION_(?:NONE|TOUCH|SIT|BUY|PAY|OPEN(?:_MEDIA)?|PLAY|ZOOM)|TOUCH_INVALID_FACE|PROFILE_(?:NONE|SCRIPT_MEMORY)|RC_(?:DATA_FLAGS|DETECT_PHANTOM|GET_(?:LINK_NUM|NORMAL|ROOT_KEY)|MAX_HITS|REJECT_(?:TYPES|AGENTS|(?:NON)?PHYSICAL|LAND))|RCERR_(?:CAST_TIME_EXCEEDED|SIM_PERF_LOW|UNKNOWN)|ESTATE_ACCESS_(?:ALLOWED_(?:AGENT|GROUP)_(?:ADD|REMOVE)|BANNED_AGENT_(?:ADD|REMOVE))|DENSITY|FRICTION|RESTITUTION|GRAVITY_MULTIPLIER|KFM_(?:COMMAND|CMD_(?:PLAY|STOP|PAUSE|SET_MODE)|MODE|FORWARD|LOOP|PING_PONG|REVERSE|DATA|ROTATION|TRANSLATION)|ERR_(?:GENERIC|PARCEL_PERMISSIONS|MALFORMED_PARAMS|RUNTIME_PERMISSIONS|THROTTLED)|CHARACTER_(?:CMD_(?:(?:SMOOTH_)?STOP|JUMP)|DESIRED_(?:TURN_)?SPEED|RADIUS|STAY_WITHIN_PARCEL|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(?:_(?:[A-D]|NONE))?|MAX_(?:DECEL|TURN_RADIUS|(?:ACCEL|SPEED)))|PURSUIT_(?:OFFSET|FUZZ_FACTOR|GOAL_TOLERANCE|INTERCEPT)|REQUIRE_LINE_OF_SIGHT|FORCE_DIRECT_PATH|VERTICAL|HORIZONTAL|AVOID_(?:CHARACTERS|DYNAMIC_OBSTACLES|NONE)|PU_(?:EVADE_(?:HIDDEN|SPOTTED)|FAILURE_(?:DYNAMIC_PATHFINDING_DISABLED|INVALID_(?:GOAL|START)|NO_(?:NAVMESH|VALID_DESTINATION)|OTHER|TARGET_GONE|(?:PARCEL_)?UNREACHABLE)|(?:GOAL|SLOWDOWN_DISTANCE)_REACHED)|TRAVERSAL_TYPE(?:_(?:FAST|NONE|SLOW))?|CONTENT_TYPE_(?:ATOM|FORM|HTML|JSON|LLSD|RSS|TEXT|XHTML|XML)|GCNP_(?:RADIUS|STATIC)|(?:PATROL|WANDER)_PAUSE_AT_WAYPOINTS|OPT_(?:AVATAR|CHARACTER|EXCLUSION_VOLUME|LEGACY_LINKSET|MATERIAL_VOLUME|OTHER|STATIC_OBSTACLE|WALKABLE)|SIM_STAT_PCT_CHARS_STEPPED)\b'
319
+ lsl_constants_integer_boolean = r'\b(?:FALSE|TRUE)\b'
320
+ lsl_constants_rotation = r'\b(?:ZERO_ROTATION)\b'
321
+ lsl_constants_string = r'\b(?:EOF|JSON_(?:ARRAY|DELETE|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)|NULL_KEY|TEXTURE_(?:BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|URL_REQUEST_(?:GRANTED|DENIED))\b'
322
+ lsl_constants_vector = r'\b(?:TOUCH_INVALID_(?:TEXCOORD|VECTOR)|ZERO_VECTOR)\b'
323
+ lsl_invalid_broken = r'\b(?:LAND_(?:LARGE|MEDIUM|SMALL)_BRUSH)\b'
324
+ lsl_invalid_deprecated = r'\b(?:ATTACH_[LR]PEC|DATA_RATING|OBJECT_ATTACHMENT_(?:GEOMETRY_BYTES|SURFACE_AREA)|PRIM_(?:CAST_SHADOWS|MATERIAL_LIGHT|TYPE_LEGACY)|PSYS_SRC_(?:INNER|OUTER)ANGLE|VEHICLE_FLAG_NO_FLY_UP|ll(?:Cloud|Make(?:Explosion|Fountain|Smoke|Fire)|RemoteDataSetRegion|Sound(?:Preload)?|XorBase64Strings(?:Correct)?))\b'
325
+ lsl_invalid_illegal = r'\b(?:event)\b'
326
+ lsl_invalid_unimplemented = r'\b(?:CHARACTER_(?:MAX_ANGULAR_(?:ACCEL|SPEED)|TURN_SPEED_MULTIPLIER)|PERMISSION_(?:CHANGE_(?:JOINTS|PERMISSIONS)|RELEASE_OWNERSHIP|REMAP_CONTROLS)|PRIM_PHYSICS_MATERIAL|PSYS_SRC_OBJ_REL_MASK|ll(?:CollisionSprite|(?:Stop)?PointAt|(?:(?:Refresh|Set)Prim)URL|(?:Take|Release)Camera|RemoteLoadScript))\b'
327
+ lsl_reserved_godmode = r'\b(?:ll(?:GodLikeRezObject|Set(?:Inventory|Object)PermMask))\b'
328
+ lsl_reserved_log = r'\b(?:print)\b'
329
+ lsl_operators = r'\+\+|\-\-|<<|>>|&&?|\|\|?|\^|~|[!%<>=*+\-/]=?'
330
+
331
+ tokens = {
332
+ 'root':
333
+ [
334
+ (r'//.*?\n', Comment.Single),
335
+ (r'/\*', Comment.Multiline, 'comment'),
336
+ (r'"', String.Double, 'string'),
337
+ (lsl_keywords, Keyword),
338
+ (lsl_types, Keyword.Type),
339
+ (lsl_states, Name.Class),
340
+ (lsl_events, Name.Builtin),
341
+ (lsl_functions_builtin, Name.Function),
342
+ (lsl_constants_float, Keyword.Constant),
343
+ (lsl_constants_integer, Keyword.Constant),
344
+ (lsl_constants_integer_boolean, Keyword.Constant),
345
+ (lsl_constants_rotation, Keyword.Constant),
346
+ (lsl_constants_string, Keyword.Constant),
347
+ (lsl_constants_vector, Keyword.Constant),
348
+ (lsl_invalid_broken, Error),
349
+ (lsl_invalid_deprecated, Error),
350
+ (lsl_invalid_illegal, Error),
351
+ (lsl_invalid_unimplemented, Error),
352
+ (lsl_reserved_godmode, Keyword.Reserved),
353
+ (lsl_reserved_log, Keyword.Reserved),
354
+ (r'\b([a-zA-Z_]\w*)\b', Name.Variable),
355
+ (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d*', Number.Float),
356
+ (r'(\d+\.\d*|\.\d+)', Number.Float),
357
+ (r'0[xX][0-9a-fA-F]+', Number.Hex),
358
+ (r'\d+', Number.Integer),
359
+ (lsl_operators, Operator),
360
+ (r':=?', Error),
361
+ (r'[,;{}()\[\]]', Punctuation),
362
+ (r'\n+', Whitespace),
363
+ (r'\s+', Whitespace)
364
+ ],
365
+ 'comment':
366
+ [
367
+ (r'[^*/]+', Comment.Multiline),
368
+ (r'/\*', Comment.Multiline, '#push'),
369
+ (r'\*/', Comment.Multiline, '#pop'),
370
+ (r'[*/]', Comment.Multiline)
371
+ ],
372
+ 'string':
373
+ [
374
+ (r'\\([nt"\\])', String.Escape),
375
+ (r'"', String.Double, '#pop'),
376
+ (r'\\.', Error),
377
+ (r'[^"\\]+', String.Double),
378
+ ]
379
+ }
380
+
381
+
382
+ class AppleScriptLexer(RegexLexer):
383
+ """
384
+ For `AppleScript source code
385
+ <http://developer.apple.com/documentation/AppleScript/
386
+ Conceptual/AppleScriptLangGuide>`_,
387
+ including `AppleScript Studio
388
+ <http://developer.apple.com/documentation/AppleScript/
389
+ Reference/StudioReference>`_.
390
+ Contributed by Andreas Amann <aamann@mac.com>.
391
+
392
+ .. versionadded:: 1.0
393
+ """
394
+
395
+ name = 'AppleScript'
396
+ aliases = ['applescript']
397
+ filenames = ['*.applescript']
398
+
399
+ flags = re.MULTILINE | re.DOTALL
400
+
401
+ Identifiers = r'[a-zA-Z]\w*'
402
+
403
+ # XXX: use words() for all of these
404
+ Literals = ('AppleScript', 'current application', 'false', 'linefeed',
405
+ 'missing value', 'pi', 'quote', 'result', 'return', 'space',
406
+ 'tab', 'text item delimiters', 'true', 'version')
407
+ Classes = ('alias ', 'application ', 'boolean ', 'class ', 'constant ',
408
+ 'date ', 'file ', 'integer ', 'list ', 'number ', 'POSIX file ',
409
+ 'real ', 'record ', 'reference ', 'RGB color ', 'script ',
410
+ 'text ', 'unit types', '(?:Unicode )?text', 'string')
411
+ BuiltIn = ('attachment', 'attribute run', 'character', 'day', 'month',
412
+ 'paragraph', 'word', 'year')
413
+ HandlerParams = ('about', 'above', 'against', 'apart from', 'around',
414
+ 'aside from', 'at', 'below', 'beneath', 'beside',
415
+ 'between', 'for', 'given', 'instead of', 'on', 'onto',
416
+ 'out of', 'over', 'since')
417
+ Commands = ('ASCII (character|number)', 'activate', 'beep', 'choose URL',
418
+ 'choose application', 'choose color', 'choose file( name)?',
419
+ 'choose folder', 'choose from list',
420
+ 'choose remote application', 'clipboard info',
421
+ 'close( access)?', 'copy', 'count', 'current date', 'delay',
422
+ 'delete', 'display (alert|dialog)', 'do shell script',
423
+ 'duplicate', 'exists', 'get eof', 'get volume settings',
424
+ 'info for', 'launch', 'list (disks|folder)', 'load script',
425
+ 'log', 'make', 'mount volume', 'new', 'offset',
426
+ 'open( (for access|location))?', 'path to', 'print', 'quit',
427
+ 'random number', 'read', 'round', 'run( script)?',
428
+ 'say', 'scripting components',
429
+ 'set (eof|the clipboard to|volume)', 'store script',
430
+ 'summarize', 'system attribute', 'system info',
431
+ 'the clipboard', 'time to GMT', 'write', 'quoted form')
432
+ References = ('(in )?back of', '(in )?front of', '[0-9]+(st|nd|rd|th)',
433
+ 'first', 'second', 'third', 'fourth', 'fifth', 'sixth',
434
+ 'seventh', 'eighth', 'ninth', 'tenth', 'after', 'back',
435
+ 'before', 'behind', 'every', 'front', 'index', 'last',
436
+ 'middle', 'some', 'that', 'through', 'thru', 'where', 'whose')
437
+ Operators = ("and", "or", "is equal", "equals", "(is )?equal to", "is not",
438
+ "isn't", "isn't equal( to)?", "is not equal( to)?",
439
+ "doesn't equal", "does not equal", "(is )?greater than",
440
+ "comes after", "is not less than or equal( to)?",
441
+ "isn't less than or equal( to)?", "(is )?less than",
442
+ "comes before", "is not greater than or equal( to)?",
443
+ "isn't greater than or equal( to)?",
444
+ "(is )?greater than or equal( to)?", "is not less than",
445
+ "isn't less than", "does not come before",
446
+ "doesn't come before", "(is )?less than or equal( to)?",
447
+ "is not greater than", "isn't greater than",
448
+ "does not come after", "doesn't come after", "starts? with",
449
+ "begins? with", "ends? with", "contains?", "does not contain",
450
+ "doesn't contain", "is in", "is contained by", "is not in",
451
+ "is not contained by", "isn't contained by", "div", "mod",
452
+ "not", "(a )?(ref( to)?|reference to)", "is", "does")
453
+ Control = ('considering', 'else', 'error', 'exit', 'from', 'if',
454
+ 'ignoring', 'in', 'repeat', 'tell', 'then', 'times', 'to',
455
+ 'try', 'until', 'using terms from', 'while', 'whith',
456
+ 'with timeout( of)?', 'with transaction', 'by', 'continue',
457
+ 'end', 'its?', 'me', 'my', 'return', 'of', 'as')
458
+ Declarations = ('global', 'local', 'prop(erty)?', 'set', 'get')
459
+ Reserved = ('but', 'put', 'returning', 'the')
460
+ StudioClasses = ('action cell', 'alert reply', 'application', 'box',
461
+ 'browser( cell)?', 'bundle', 'button( cell)?', 'cell',
462
+ 'clip view', 'color well', 'color-panel',
463
+ 'combo box( item)?', 'control',
464
+ 'data( (cell|column|item|row|source))?', 'default entry',
465
+ 'dialog reply', 'document', 'drag info', 'drawer',
466
+ 'event', 'font(-panel)?', 'formatter',
467
+ 'image( (cell|view))?', 'matrix', 'menu( item)?', 'item',
468
+ 'movie( view)?', 'open-panel', 'outline view', 'panel',
469
+ 'pasteboard', 'plugin', 'popup button',
470
+ 'progress indicator', 'responder', 'save-panel',
471
+ 'scroll view', 'secure text field( cell)?', 'slider',
472
+ 'sound', 'split view', 'stepper', 'tab view( item)?',
473
+ 'table( (column|header cell|header view|view))',
474
+ 'text( (field( cell)?|view))?', 'toolbar( item)?',
475
+ 'user-defaults', 'view', 'window')
476
+ StudioEvents = ('accept outline drop', 'accept table drop', 'action',
477
+ 'activated', 'alert ended', 'awake from nib', 'became key',
478
+ 'became main', 'begin editing', 'bounds changed',
479
+ 'cell value', 'cell value changed', 'change cell value',
480
+ 'change item value', 'changed', 'child of item',
481
+ 'choose menu item', 'clicked', 'clicked toolbar item',
482
+ 'closed', 'column clicked', 'column moved',
483
+ 'column resized', 'conclude drop', 'data representation',
484
+ 'deminiaturized', 'dialog ended', 'document nib name',
485
+ 'double clicked', 'drag( (entered|exited|updated))?',
486
+ 'drop', 'end editing', 'exposed', 'idle', 'item expandable',
487
+ 'item value', 'item value changed', 'items changed',
488
+ 'keyboard down', 'keyboard up', 'launched',
489
+ 'load data representation', 'miniaturized', 'mouse down',
490
+ 'mouse dragged', 'mouse entered', 'mouse exited',
491
+ 'mouse moved', 'mouse up', 'moved',
492
+ 'number of browser rows', 'number of items',
493
+ 'number of rows', 'open untitled', 'opened', 'panel ended',
494
+ 'parameters updated', 'plugin loaded', 'prepare drop',
495
+ 'prepare outline drag', 'prepare outline drop',
496
+ 'prepare table drag', 'prepare table drop',
497
+ 'read from file', 'resigned active', 'resigned key',
498
+ 'resigned main', 'resized( sub views)?',
499
+ 'right mouse down', 'right mouse dragged',
500
+ 'right mouse up', 'rows changed', 'scroll wheel',
501
+ 'selected tab view item', 'selection changed',
502
+ 'selection changing', 'should begin editing',
503
+ 'should close', 'should collapse item',
504
+ 'should end editing', 'should expand item',
505
+ 'should open( untitled)?',
506
+ 'should quit( after last window closed)?',
507
+ 'should select column', 'should select item',
508
+ 'should select row', 'should select tab view item',
509
+ 'should selection change', 'should zoom', 'shown',
510
+ 'update menu item', 'update parameters',
511
+ 'update toolbar item', 'was hidden', 'was miniaturized',
512
+ 'will become active', 'will close', 'will dismiss',
513
+ 'will display browser cell', 'will display cell',
514
+ 'will display item cell', 'will display outline cell',
515
+ 'will finish launching', 'will hide', 'will miniaturize',
516
+ 'will move', 'will open', 'will pop up', 'will quit',
517
+ 'will resign active', 'will resize( sub views)?',
518
+ 'will select tab view item', 'will show', 'will zoom',
519
+ 'write to file', 'zoomed')
520
+ StudioCommands = ('animate', 'append', 'call method', 'center',
521
+ 'close drawer', 'close panel', 'display',
522
+ 'display alert', 'display dialog', 'display panel', 'go',
523
+ 'hide', 'highlight', 'increment', 'item for',
524
+ 'load image', 'load movie', 'load nib', 'load panel',
525
+ 'load sound', 'localized string', 'lock focus', 'log',
526
+ 'open drawer', 'path for', 'pause', 'perform action',
527
+ 'play', 'register', 'resume', 'scroll', 'select( all)?',
528
+ 'show', 'size to fit', 'start', 'step back',
529
+ 'step forward', 'stop', 'synchronize', 'unlock focus',
530
+ 'update')
531
+ StudioProperties = ('accepts arrow key', 'action method', 'active',
532
+ 'alignment', 'allowed identifiers',
533
+ 'allows branch selection', 'allows column reordering',
534
+ 'allows column resizing', 'allows column selection',
535
+ 'allows customization',
536
+ 'allows editing text attributes',
537
+ 'allows empty selection', 'allows mixed state',
538
+ 'allows multiple selection', 'allows reordering',
539
+ 'allows undo', 'alpha( value)?', 'alternate image',
540
+ 'alternate increment value', 'alternate title',
541
+ 'animation delay', 'associated file name',
542
+ 'associated object', 'auto completes', 'auto display',
543
+ 'auto enables items', 'auto repeat',
544
+ 'auto resizes( outline column)?',
545
+ 'auto save expanded items', 'auto save name',
546
+ 'auto save table columns', 'auto saves configuration',
547
+ 'auto scroll', 'auto sizes all columns to fit',
548
+ 'auto sizes cells', 'background color', 'bezel state',
549
+ 'bezel style', 'bezeled', 'border rect', 'border type',
550
+ 'bordered', 'bounds( rotation)?', 'box type',
551
+ 'button returned', 'button type',
552
+ 'can choose directories', 'can choose files',
553
+ 'can draw', 'can hide',
554
+ 'cell( (background color|size|type))?', 'characters',
555
+ 'class', 'click count', 'clicked( data)? column',
556
+ 'clicked data item', 'clicked( data)? row',
557
+ 'closeable', 'collating', 'color( (mode|panel))',
558
+ 'command key down', 'configuration',
559
+ 'content(s| (size|view( margins)?))?', 'context',
560
+ 'continuous', 'control key down', 'control size',
561
+ 'control tint', 'control view',
562
+ 'controller visible', 'coordinate system',
563
+ 'copies( on scroll)?', 'corner view', 'current cell',
564
+ 'current column', 'current( field)? editor',
565
+ 'current( menu)? item', 'current row',
566
+ 'current tab view item', 'data source',
567
+ 'default identifiers', 'delta (x|y|z)',
568
+ 'destination window', 'directory', 'display mode',
569
+ 'displayed cell', 'document( (edited|rect|view))?',
570
+ 'double value', 'dragged column', 'dragged distance',
571
+ 'dragged items', 'draws( cell)? background',
572
+ 'draws grid', 'dynamically scrolls', 'echos bullets',
573
+ 'edge', 'editable', 'edited( data)? column',
574
+ 'edited data item', 'edited( data)? row', 'enabled',
575
+ 'enclosing scroll view', 'ending page',
576
+ 'error handling', 'event number', 'event type',
577
+ 'excluded from windows menu', 'executable path',
578
+ 'expanded', 'fax number', 'field editor', 'file kind',
579
+ 'file name', 'file type', 'first responder',
580
+ 'first visible column', 'flipped', 'floating',
581
+ 'font( panel)?', 'formatter', 'frameworks path',
582
+ 'frontmost', 'gave up', 'grid color', 'has data items',
583
+ 'has horizontal ruler', 'has horizontal scroller',
584
+ 'has parent data item', 'has resize indicator',
585
+ 'has shadow', 'has sub menu', 'has vertical ruler',
586
+ 'has vertical scroller', 'header cell', 'header view',
587
+ 'hidden', 'hides when deactivated', 'highlights by',
588
+ 'horizontal line scroll', 'horizontal page scroll',
589
+ 'horizontal ruler view', 'horizontally resizable',
590
+ 'icon image', 'id', 'identifier',
591
+ 'ignores multiple clicks',
592
+ 'image( (alignment|dims when disabled|frame style|scaling))?',
593
+ 'imports graphics', 'increment value',
594
+ 'indentation per level', 'indeterminate', 'index',
595
+ 'integer value', 'intercell spacing', 'item height',
596
+ 'key( (code|equivalent( modifier)?|window))?',
597
+ 'knob thickness', 'label', 'last( visible)? column',
598
+ 'leading offset', 'leaf', 'level', 'line scroll',
599
+ 'loaded', 'localized sort', 'location', 'loop mode',
600
+ 'main( (bunde|menu|window))?', 'marker follows cell',
601
+ 'matrix mode', 'maximum( content)? size',
602
+ 'maximum visible columns',
603
+ 'menu( form representation)?', 'miniaturizable',
604
+ 'miniaturized', 'minimized image', 'minimized title',
605
+ 'minimum column width', 'minimum( content)? size',
606
+ 'modal', 'modified', 'mouse down state',
607
+ 'movie( (controller|file|rect))?', 'muted', 'name',
608
+ 'needs display', 'next state', 'next text',
609
+ 'number of tick marks', 'only tick mark values',
610
+ 'opaque', 'open panel', 'option key down',
611
+ 'outline table column', 'page scroll', 'pages across',
612
+ 'pages down', 'palette label', 'pane splitter',
613
+ 'parent data item', 'parent window', 'pasteboard',
614
+ 'path( (names|separator))?', 'playing',
615
+ 'plays every frame', 'plays selection only', 'position',
616
+ 'preferred edge', 'preferred type', 'pressure',
617
+ 'previous text', 'prompt', 'properties',
618
+ 'prototype cell', 'pulls down', 'rate',
619
+ 'released when closed', 'repeated',
620
+ 'requested print time', 'required file type',
621
+ 'resizable', 'resized column', 'resource path',
622
+ 'returns records', 'reuses columns', 'rich text',
623
+ 'roll over', 'row height', 'rulers visible',
624
+ 'save panel', 'scripts path', 'scrollable',
625
+ 'selectable( identifiers)?', 'selected cell',
626
+ 'selected( data)? columns?', 'selected data items?',
627
+ 'selected( data)? rows?', 'selected item identifier',
628
+ 'selection by rect', 'send action on arrow key',
629
+ 'sends action when done editing', 'separates columns',
630
+ 'separator item', 'sequence number', 'services menu',
631
+ 'shared frameworks path', 'shared support path',
632
+ 'sheet', 'shift key down', 'shows alpha',
633
+ 'shows state by', 'size( mode)?',
634
+ 'smart insert delete enabled', 'sort case sensitivity',
635
+ 'sort column', 'sort order', 'sort type',
636
+ 'sorted( data rows)?', 'sound', 'source( mask)?',
637
+ 'spell checking enabled', 'starting page', 'state',
638
+ 'string value', 'sub menu', 'super menu', 'super view',
639
+ 'tab key traverses cells', 'tab state', 'tab type',
640
+ 'tab view', 'table view', 'tag', 'target( printer)?',
641
+ 'text color', 'text container insert',
642
+ 'text container origin', 'text returned',
643
+ 'tick mark position', 'time stamp',
644
+ 'title(d| (cell|font|height|position|rect))?',
645
+ 'tool tip', 'toolbar', 'trailing offset', 'transparent',
646
+ 'treat packages as directories', 'truncated labels',
647
+ 'types', 'unmodified characters', 'update views',
648
+ 'use sort indicator', 'user defaults',
649
+ 'uses data source', 'uses ruler',
650
+ 'uses threaded animation',
651
+ 'uses title from previous column', 'value wraps',
652
+ 'version',
653
+ 'vertical( (line scroll|page scroll|ruler view))?',
654
+ 'vertically resizable', 'view',
655
+ 'visible( document rect)?', 'volume', 'width', 'window',
656
+ 'windows menu', 'wraps', 'zoomable', 'zoomed')
657
+
658
+ tokens = {
659
+ 'root': [
660
+ (r'\s+', Text),
661
+ (r'¬\n', String.Escape),
662
+ (r"'s\s+", Text), # This is a possessive, consider moving
663
+ (r'(--|#).*?$', Comment),
664
+ (r'\(\*', Comment.Multiline, 'comment'),
665
+ (r'[(){}!,.:]', Punctuation),
666
+ (r'(«)([^»]+)(»)',
667
+ bygroups(Text, Name.Builtin, Text)),
668
+ (r'\b((?:considering|ignoring)\s*)'
669
+ r'(application responses|case|diacriticals|hyphens|'
670
+ r'numeric strings|punctuation|white space)',
671
+ bygroups(Keyword, Name.Builtin)),
672
+ (r'(-|\*|\+|&|≠|>=?|<=?|=|≥|≤|/|÷|\^)', Operator),
673
+ (r"\b(%s)\b" % '|'.join(Operators), Operator.Word),
674
+ (r'^(\s*(?:on|end)\s+)'
675
+ r'(%s)' % '|'.join(StudioEvents[::-1]),
676
+ bygroups(Keyword, Name.Function)),
677
+ (r'^(\s*)(in|on|script|to)(\s+)', bygroups(Text, Keyword, Text)),
678
+ (r'\b(as )(%s)\b' % '|'.join(Classes),
679
+ bygroups(Keyword, Name.Class)),
680
+ (r'\b(%s)\b' % '|'.join(Literals), Name.Constant),
681
+ (r'\b(%s)\b' % '|'.join(Commands), Name.Builtin),
682
+ (r'\b(%s)\b' % '|'.join(Control), Keyword),
683
+ (r'\b(%s)\b' % '|'.join(Declarations), Keyword),
684
+ (r'\b(%s)\b' % '|'.join(Reserved), Name.Builtin),
685
+ (r'\b(%s)s?\b' % '|'.join(BuiltIn), Name.Builtin),
686
+ (r'\b(%s)\b' % '|'.join(HandlerParams), Name.Builtin),
687
+ (r'\b(%s)\b' % '|'.join(StudioProperties), Name.Attribute),
688
+ (r'\b(%s)s?\b' % '|'.join(StudioClasses), Name.Builtin),
689
+ (r'\b(%s)\b' % '|'.join(StudioCommands), Name.Builtin),
690
+ (r'\b(%s)\b' % '|'.join(References), Name.Builtin),
691
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
692
+ (r'\b(%s)\b' % Identifiers, Name.Variable),
693
+ (r'[-+]?(\d+\.\d*|\d*\.\d+)(E[-+][0-9]+)?', Number.Float),
694
+ (r'[-+]?\d+', Number.Integer),
695
+ ],
696
+ 'comment': [
697
+ (r'\(\*', Comment.Multiline, '#push'),
698
+ (r'\*\)', Comment.Multiline, '#pop'),
699
+ ('[^*(]+', Comment.Multiline),
700
+ ('[*(]', Comment.Multiline),
701
+ ],
702
+ }
703
+
704
+
705
+ class RexxLexer(RegexLexer):
706
+ """
707
+ `Rexx <http://www.rexxinfo.org/>`_ is a scripting language available for
708
+ a wide range of different platforms with its roots found on mainframe
709
+ systems. It is popular for I/O- and data based tasks and can act as glue
710
+ language to bind different applications together.
711
+
712
+ .. versionadded:: 2.0
713
+ """
714
+ name = 'Rexx'
715
+ aliases = ['rexx', 'arexx']
716
+ filenames = ['*.rexx', '*.rex', '*.rx', '*.arexx']
717
+ mimetypes = ['text/x-rexx']
718
+ flags = re.IGNORECASE
719
+
720
+ tokens = {
721
+ 'root': [
722
+ (r'\s', Whitespace),
723
+ (r'/\*', Comment.Multiline, 'comment'),
724
+ (r'"', String, 'string_double'),
725
+ (r"'", String, 'string_single'),
726
+ (r'[0-9]+(\.[0-9]+)?(e[+-]?[0-9])?', Number),
727
+ (r'([a-z_]\w*)(\s*)(:)(\s*)(procedure)\b',
728
+ bygroups(Name.Function, Whitespace, Operator, Whitespace,
729
+ Keyword.Declaration)),
730
+ (r'([a-z_]\w*)(\s*)(:)',
731
+ bygroups(Name.Label, Whitespace, Operator)),
732
+ include('function'),
733
+ include('keyword'),
734
+ include('operator'),
735
+ (r'[a-z_]\w*', Text),
736
+ ],
737
+ 'function': [
738
+ (words((
739
+ 'abbrev', 'abs', 'address', 'arg', 'b2x', 'bitand', 'bitor', 'bitxor',
740
+ 'c2d', 'c2x', 'center', 'charin', 'charout', 'chars', 'compare',
741
+ 'condition', 'copies', 'd2c', 'd2x', 'datatype', 'date', 'delstr',
742
+ 'delword', 'digits', 'errortext', 'form', 'format', 'fuzz', 'insert',
743
+ 'lastpos', 'left', 'length', 'linein', 'lineout', 'lines', 'max',
744
+ 'min', 'overlay', 'pos', 'queued', 'random', 'reverse', 'right', 'sign',
745
+ 'sourceline', 'space', 'stream', 'strip', 'substr', 'subword', 'symbol',
746
+ 'time', 'trace', 'translate', 'trunc', 'value', 'verify', 'word',
747
+ 'wordindex', 'wordlength', 'wordpos', 'words', 'x2b', 'x2c', 'x2d',
748
+ 'xrange'), suffix=r'(\s*)(\()'),
749
+ bygroups(Name.Builtin, Whitespace, Operator)),
750
+ ],
751
+ 'keyword': [
752
+ (r'(address|arg|by|call|do|drop|else|end|exit|for|forever|if|'
753
+ r'interpret|iterate|leave|nop|numeric|off|on|options|parse|'
754
+ r'pull|push|queue|return|say|select|signal|to|then|trace|until|'
755
+ r'while)\b', Keyword.Reserved),
756
+ ],
757
+ 'operator': [
758
+ (r'(-|//|/|\(|\)|\*\*|\*|\\<<|\\<|\\==|\\=|\\>>|\\>|\\|\|\||\||'
759
+ r'&&|&|%|\+|<<=|<<|<=|<>|<|==|=|><|>=|>>=|>>|>|¬<<|¬<|¬==|¬=|'
760
+ r'¬>>|¬>|¬|\.|,)', Operator),
761
+ ],
762
+ 'string_double': [
763
+ (r'[^"\n]+', String),
764
+ (r'""', String),
765
+ (r'"', String, '#pop'),
766
+ (r'\n', Text, '#pop'), # Stray linefeed also terminates strings.
767
+ ],
768
+ 'string_single': [
769
+ (r'[^\'\n]', String),
770
+ (r'\'\'', String),
771
+ (r'\'', String, '#pop'),
772
+ (r'\n', Text, '#pop'), # Stray linefeed also terminates strings.
773
+ ],
774
+ 'comment': [
775
+ (r'[^*]+', Comment.Multiline),
776
+ (r'\*/', Comment.Multiline, '#pop'),
777
+ (r'\*', Comment.Multiline),
778
+ ]
779
+ }
780
+
781
+ _c = lambda s: re.compile(s, re.MULTILINE)
782
+ _ADDRESS_COMMAND_PATTERN = _c(r'^\s*address\s+command\b')
783
+ _ADDRESS_PATTERN = _c(r'^\s*address\s+')
784
+ _DO_WHILE_PATTERN = _c(r'^\s*do\s+while\b')
785
+ _IF_THEN_DO_PATTERN = _c(r'^\s*if\b.+\bthen\s+do\s*$')
786
+ _PROCEDURE_PATTERN = _c(r'^\s*([a-z_]\w*)(\s*)(:)(\s*)(procedure)\b')
787
+ _ELSE_DO_PATTERN = _c(r'\belse\s+do\s*$')
788
+ _PARSE_ARG_PATTERN = _c(r'^\s*parse\s+(upper\s+)?(arg|value)\b')
789
+ PATTERNS_AND_WEIGHTS = (
790
+ (_ADDRESS_COMMAND_PATTERN, 0.2),
791
+ (_ADDRESS_PATTERN, 0.05),
792
+ (_DO_WHILE_PATTERN, 0.1),
793
+ (_ELSE_DO_PATTERN, 0.1),
794
+ (_IF_THEN_DO_PATTERN, 0.1),
795
+ (_PROCEDURE_PATTERN, 0.5),
796
+ (_PARSE_ARG_PATTERN, 0.2),
797
+ )
798
+
799
+ def analyse_text(text):
800
+ """
801
+ Check for inital comment and patterns that distinguish Rexx from other
802
+ C-like languages.
803
+ """
804
+ if re.search(r'/\*\**\s*rexx', text, re.IGNORECASE):
805
+ # Header matches MVS Rexx requirements, this is certainly a Rexx
806
+ # script.
807
+ return 1.0
808
+ elif text.startswith('/*'):
809
+ # Header matches general Rexx requirements; the source code might
810
+ # still be any language using C comments such as C++, C# or Java.
811
+ lowerText = text.lower()
812
+ result = sum(weight
813
+ for (pattern, weight) in RexxLexer.PATTERNS_AND_WEIGHTS
814
+ if pattern.search(lowerText)) + 0.01
815
+ return min(result, 1.0)
816
+
817
+
818
+ class MOOCodeLexer(RegexLexer):
819
+ """
820
+ For `MOOCode <http://www.moo.mud.org/>`_ (the MOO scripting
821
+ language).
822
+
823
+ .. versionadded:: 0.9
824
+ """
825
+ name = 'MOOCode'
826
+ filenames = ['*.moo']
827
+ aliases = ['moocode', 'moo']
828
+ mimetypes = ['text/x-moocode']
829
+
830
+ tokens = {
831
+ 'root': [
832
+ # Numbers
833
+ (r'(0|[1-9][0-9_]*)', Number.Integer),
834
+ # Strings
835
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String),
836
+ # exceptions
837
+ (r'(E_PERM|E_DIV)', Name.Exception),
838
+ # db-refs
839
+ (r'((#[-0-9]+)|(\$\w+))', Name.Entity),
840
+ # Keywords
841
+ (r'\b(if|else|elseif|endif|for|endfor|fork|endfork|while'
842
+ r'|endwhile|break|continue|return|try'
843
+ r'|except|endtry|finally|in)\b', Keyword),
844
+ # builtins
845
+ (r'(random|length)', Name.Builtin),
846
+ # special variables
847
+ (r'(player|caller|this|args)', Name.Variable.Instance),
848
+ # skip whitespace
849
+ (r'\s+', Text),
850
+ (r'\n', Text),
851
+ # other operators
852
+ (r'([!;=,{}&|:.\[\]@()<>?]+)', Operator),
853
+ # function call
854
+ (r'(\w+)(\()', bygroups(Name.Function, Operator)),
855
+ # variables
856
+ (r'(\w+)', Text),
857
+ ]
858
+ }
859
+
860
+
861
+ class HybrisLexer(RegexLexer):
862
+ """
863
+ For `Hybris <http://www.hybris-lang.org>`_ source code.
864
+
865
+ .. versionadded:: 1.4
866
+ """
867
+
868
+ name = 'Hybris'
869
+ aliases = ['hybris', 'hy']
870
+ filenames = ['*.hy', '*.hyb']
871
+ mimetypes = ['text/x-hybris', 'application/x-hybris']
872
+
873
+ flags = re.MULTILINE | re.DOTALL
874
+
875
+ tokens = {
876
+ 'root': [
877
+ # method names
878
+ (r'^(\s*(?:function|method|operator\s+)+?)'
879
+ r'([a-zA-Z_]\w*)'
880
+ r'(\s*)(\()', bygroups(Keyword, Name.Function, Text, Operator)),
881
+ (r'[^\S\n]+', Text),
882
+ (r'//.*?\n', Comment.Single),
883
+ (r'/\*.*?\*/', Comment.Multiline),
884
+ (r'@[a-zA-Z_][\w.]*', Name.Decorator),
885
+ (r'(break|case|catch|next|default|do|else|finally|for|foreach|of|'
886
+ r'unless|if|new|return|switch|me|throw|try|while)\b', Keyword),
887
+ (r'(extends|private|protected|public|static|throws|function|method|'
888
+ r'operator)\b', Keyword.Declaration),
889
+ (r'(true|false|null|__FILE__|__LINE__|__VERSION__|__LIB_PATH__|'
890
+ r'__INC_PATH__)\b', Keyword.Constant),
891
+ (r'(class|struct)(\s+)',
892
+ bygroups(Keyword.Declaration, Text), 'class'),
893
+ (r'(import|include)(\s+)',
894
+ bygroups(Keyword.Namespace, Text), 'import'),
895
+ (words((
896
+ 'gc_collect', 'gc_mm_items', 'gc_mm_usage', 'gc_collect_threshold',
897
+ 'urlencode', 'urldecode', 'base64encode', 'base64decode', 'sha1', 'crc32',
898
+ 'sha2', 'md5', 'md5_file', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos',
899
+ 'cosh', 'exp', 'fabs', 'floor', 'fmod', 'log', 'log10', 'pow', 'sin',
900
+ 'sinh', 'sqrt', 'tan', 'tanh', 'isint', 'isfloat', 'ischar', 'isstring',
901
+ 'isarray', 'ismap', 'isalias', 'typeof', 'sizeof', 'toint', 'tostring',
902
+ 'fromxml', 'toxml', 'binary', 'pack', 'load', 'eval', 'var_names',
903
+ 'var_values', 'user_functions', 'dyn_functions', 'methods', 'call',
904
+ 'call_method', 'mknod', 'mkfifo', 'mount', 'umount2', 'umount', 'ticks',
905
+ 'usleep', 'sleep', 'time', 'strtime', 'strdate', 'dllopen', 'dlllink',
906
+ 'dllcall', 'dllcall_argv', 'dllclose', 'env', 'exec', 'fork', 'getpid',
907
+ 'wait', 'popen', 'pclose', 'exit', 'kill', 'pthread_create',
908
+ 'pthread_create_argv', 'pthread_exit', 'pthread_join', 'pthread_kill',
909
+ 'smtp_send', 'http_get', 'http_post', 'http_download', 'socket', 'bind',
910
+ 'listen', 'accept', 'getsockname', 'getpeername', 'settimeout', 'connect',
911
+ 'server', 'recv', 'send', 'close', 'print', 'println', 'printf', 'input',
912
+ 'readline', 'serial_open', 'serial_fcntl', 'serial_get_attr',
913
+ 'serial_get_ispeed', 'serial_get_ospeed', 'serial_set_attr',
914
+ 'serial_set_ispeed', 'serial_set_ospeed', 'serial_write', 'serial_read',
915
+ 'serial_close', 'xml_load', 'xml_parse', 'fopen', 'fseek', 'ftell',
916
+ 'fsize', 'fread', 'fwrite', 'fgets', 'fclose', 'file', 'readdir',
917
+ 'pcre_replace', 'size', 'pop', 'unmap', 'has', 'keys', 'values',
918
+ 'length', 'find', 'substr', 'replace', 'split', 'trim', 'remove',
919
+ 'contains', 'join'), suffix=r'\b'),
920
+ Name.Builtin),
921
+ (words((
922
+ 'MethodReference', 'Runner', 'Dll', 'Thread', 'Pipe', 'Process',
923
+ 'Runnable', 'CGI', 'ClientSocket', 'Socket', 'ServerSocket',
924
+ 'File', 'Console', 'Directory', 'Exception'), suffix=r'\b'),
925
+ Keyword.Type),
926
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String),
927
+ (r"'\\.'|'[^\\]'|'\\u[0-9a-f]{4}'", String.Char),
928
+ (r'(\.)([a-zA-Z_]\w*)',
929
+ bygroups(Operator, Name.Attribute)),
930
+ (r'[a-zA-Z_]\w*:', Name.Label),
931
+ (r'[a-zA-Z_$]\w*', Name),
932
+ (r'[~^*!%&\[\](){}<>|+=:;,./?\-@]+', Operator),
933
+ (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
934
+ (r'0x[0-9a-f]+', Number.Hex),
935
+ (r'[0-9]+L?', Number.Integer),
936
+ (r'\n', Text),
937
+ ],
938
+ 'class': [
939
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop')
940
+ ],
941
+ 'import': [
942
+ (r'[\w.]+\*?', Name.Namespace, '#pop')
943
+ ],
944
+ }
945
+
946
+ def analyse_text(text):
947
+ """public method and private method don't seem to be quite common
948
+ elsewhere."""
949
+ result = 0
950
+ if re.search(r'\b(?:public|private)\s+method\b', text):
951
+ result += 0.01
952
+ return result
953
+
954
+
955
+
956
+ class EasytrieveLexer(RegexLexer):
957
+ """
958
+ Easytrieve Plus is a programming language for extracting, filtering and
959
+ converting sequential data. Furthermore it can layout data for reports.
960
+ It is mainly used on mainframe platforms and can access several of the
961
+ mainframe's native file formats. It is somewhat comparable to awk.
962
+
963
+ .. versionadded:: 2.1
964
+ """
965
+ name = 'Easytrieve'
966
+ aliases = ['easytrieve']
967
+ filenames = ['*.ezt', '*.mac']
968
+ mimetypes = ['text/x-easytrieve']
969
+ flags = 0
970
+
971
+ # Note: We cannot use r'\b' at the start and end of keywords because
972
+ # Easytrieve Plus delimiter characters are:
973
+ #
974
+ # * space ( )
975
+ # * apostrophe (')
976
+ # * period (.)
977
+ # * comma (,)
978
+ # * paranthesis ( and )
979
+ # * colon (:)
980
+ #
981
+ # Additionally words end once a '*' appears, indicatins a comment.
982
+ _DELIMITERS = r' \'.,():\n'
983
+ _DELIMITERS_OR_COMENT = _DELIMITERS + '*'
984
+ _DELIMITER_PATTERN = '[' + _DELIMITERS + ']'
985
+ _DELIMITER_PATTERN_CAPTURE = '(' + _DELIMITER_PATTERN + ')'
986
+ _NON_DELIMITER_OR_COMMENT_PATTERN = '[^' + _DELIMITERS_OR_COMENT + ']'
987
+ _OPERATORS_PATTERN = '[.+\\-/=\\[\\](){}<>;,&%¬]'
988
+ _KEYWORDS = [
989
+ 'AFTER-BREAK', 'AFTER-LINE', 'AFTER-SCREEN', 'AIM', 'AND', 'ATTR',
990
+ 'BEFORE', 'BEFORE-BREAK', 'BEFORE-LINE', 'BEFORE-SCREEN', 'BUSHU',
991
+ 'BY', 'CALL', 'CASE', 'CHECKPOINT', 'CHKP', 'CHKP-STATUS', 'CLEAR',
992
+ 'CLOSE', 'COL', 'COLOR', 'COMMIT', 'CONTROL', 'COPY', 'CURSOR', 'D',
993
+ 'DECLARE', 'DEFAULT', 'DEFINE', 'DELETE', 'DENWA', 'DISPLAY', 'DLI',
994
+ 'DO', 'DUPLICATE', 'E', 'ELSE', 'ELSE-IF', 'END', 'END-CASE',
995
+ 'END-DO', 'END-IF', 'END-PROC', 'ENDPAGE', 'ENDTABLE', 'ENTER', 'EOF',
996
+ 'EQ', 'ERROR', 'EXIT', 'EXTERNAL', 'EZLIB', 'F1', 'F10', 'F11', 'F12',
997
+ 'F13', 'F14', 'F15', 'F16', 'F17', 'F18', 'F19', 'F2', 'F20', 'F21',
998
+ 'F22', 'F23', 'F24', 'F25', 'F26', 'F27', 'F28', 'F29', 'F3', 'F30',
999
+ 'F31', 'F32', 'F33', 'F34', 'F35', 'F36', 'F4', 'F5', 'F6', 'F7',
1000
+ 'F8', 'F9', 'FETCH', 'FILE-STATUS', 'FILL', 'FINAL', 'FIRST',
1001
+ 'FIRST-DUP', 'FOR', 'GE', 'GET', 'GO', 'GOTO', 'GQ', 'GR', 'GT',
1002
+ 'HEADING', 'HEX', 'HIGH-VALUES', 'IDD', 'IDMS', 'IF', 'IN', 'INSERT',
1003
+ 'JUSTIFY', 'KANJI-DATE', 'KANJI-DATE-LONG', 'KANJI-TIME', 'KEY',
1004
+ 'KEY-PRESSED', 'KOKUGO', 'KUN', 'LAST-DUP', 'LE', 'LEVEL', 'LIKE',
1005
+ 'LINE', 'LINE-COUNT', 'LINE-NUMBER', 'LINK', 'LIST', 'LOW-VALUES',
1006
+ 'LQ', 'LS', 'LT', 'MACRO', 'MASK', 'MATCHED', 'MEND', 'MESSAGE',
1007
+ 'MOVE', 'MSTART', 'NE', 'NEWPAGE', 'NOMASK', 'NOPRINT', 'NOT',
1008
+ 'NOTE', 'NOVERIFY', 'NQ', 'NULL', 'OF', 'OR', 'OTHERWISE', 'PA1',
1009
+ 'PA2', 'PA3', 'PAGE-COUNT', 'PAGE-NUMBER', 'PARM-REGISTER',
1010
+ 'PATH-ID', 'PATTERN', 'PERFORM', 'POINT', 'POS', 'PRIMARY', 'PRINT',
1011
+ 'PROCEDURE', 'PROGRAM', 'PUT', 'READ', 'RECORD', 'RECORD-COUNT',
1012
+ 'RECORD-LENGTH', 'REFRESH', 'RELEASE', 'RENUM', 'REPEAT', 'REPORT',
1013
+ 'REPORT-INPUT', 'RESHOW', 'RESTART', 'RETRIEVE', 'RETURN-CODE',
1014
+ 'ROLLBACK', 'ROW', 'S', 'SCREEN', 'SEARCH', 'SECONDARY', 'SELECT',
1015
+ 'SEQUENCE', 'SIZE', 'SKIP', 'SOKAKU', 'SORT', 'SQL', 'STOP', 'SUM',
1016
+ 'SYSDATE', 'SYSDATE-LONG', 'SYSIN', 'SYSIPT', 'SYSLST', 'SYSPRINT',
1017
+ 'SYSSNAP', 'SYSTIME', 'TALLY', 'TERM-COLUMNS', 'TERM-NAME',
1018
+ 'TERM-ROWS', 'TERMINATION', 'TITLE', 'TO', 'TRANSFER', 'TRC',
1019
+ 'UNIQUE', 'UNTIL', 'UPDATE', 'UPPERCASE', 'USER', 'USERID', 'VALUE',
1020
+ 'VERIFY', 'W', 'WHEN', 'WHILE', 'WORK', 'WRITE', 'X', 'XDM', 'XRST'
1021
+ ]
1022
+
1023
+ tokens = {
1024
+ 'root': [
1025
+ (r'\*.*\n', Comment.Single),
1026
+ (r'\n+', Whitespace),
1027
+ # Macro argument
1028
+ (r'&' + _NON_DELIMITER_OR_COMMENT_PATTERN + r'+\.', Name.Variable,
1029
+ 'after_macro_argument'),
1030
+ # Macro call
1031
+ (r'%' + _NON_DELIMITER_OR_COMMENT_PATTERN + r'+', Name.Variable),
1032
+ (r'(FILE|MACRO|REPORT)(\s+)',
1033
+ bygroups(Keyword.Declaration, Whitespace), 'after_declaration'),
1034
+ (r'(JOB|PARM)' + r'(' + _DELIMITER_PATTERN + r')',
1035
+ bygroups(Keyword.Declaration, Operator)),
1036
+ (words(_KEYWORDS, suffix=_DELIMITER_PATTERN_CAPTURE),
1037
+ bygroups(Keyword.Reserved, Operator)),
1038
+ (_OPERATORS_PATTERN, Operator),
1039
+ # Procedure declaration
1040
+ (r'(' + _NON_DELIMITER_OR_COMMENT_PATTERN + r'+)(\s*)(\.?)(\s*)(PROC)(\s*\n)',
1041
+ bygroups(Name.Function, Whitespace, Operator, Whitespace,
1042
+ Keyword.Declaration, Whitespace)),
1043
+ (r'[0-9]+\.[0-9]*', Number.Float),
1044
+ (r'[0-9]+', Number.Integer),
1045
+ (r"'(''|[^'])*'", String),
1046
+ (r'\s+', Whitespace),
1047
+ # Everything else just belongs to a name
1048
+ (_NON_DELIMITER_OR_COMMENT_PATTERN + r'+', Name),
1049
+ ],
1050
+ 'after_declaration': [
1051
+ (_NON_DELIMITER_OR_COMMENT_PATTERN + r'+', Name.Function),
1052
+ default('#pop'),
1053
+ ],
1054
+ 'after_macro_argument': [
1055
+ (r'\*.*\n', Comment.Single, '#pop'),
1056
+ (r'\s+', Whitespace, '#pop'),
1057
+ (_OPERATORS_PATTERN, Operator, '#pop'),
1058
+ (r"'(''|[^'])*'", String, '#pop'),
1059
+ # Everything else just belongs to a name
1060
+ (_NON_DELIMITER_OR_COMMENT_PATTERN + r'+', Name),
1061
+ ],
1062
+ }
1063
+ _COMMENT_LINE_REGEX = re.compile(r'^\s*\*')
1064
+ _MACRO_HEADER_REGEX = re.compile(r'^\s*MACRO')
1065
+
1066
+ def analyse_text(text):
1067
+ """
1068
+ Perform a structural analysis for basic Easytrieve constructs.
1069
+ """
1070
+ result = 0.0
1071
+ lines = text.split('\n')
1072
+ hasEndProc = False
1073
+ hasHeaderComment = False
1074
+ hasFile = False
1075
+ hasJob = False
1076
+ hasProc = False
1077
+ hasParm = False
1078
+ hasReport = False
1079
+
1080
+ def isCommentLine(line):
1081
+ return EasytrieveLexer._COMMENT_LINE_REGEX.match(lines[0]) is not None
1082
+
1083
+ def isEmptyLine(line):
1084
+ return not bool(line.strip())
1085
+
1086
+ # Remove possible empty lines and header comments.
1087
+ while lines and (isEmptyLine(lines[0]) or isCommentLine(lines[0])):
1088
+ if not isEmptyLine(lines[0]):
1089
+ hasHeaderComment = True
1090
+ del lines[0]
1091
+
1092
+ if EasytrieveLexer._MACRO_HEADER_REGEX.match(lines[0]):
1093
+ # Looks like an Easytrieve macro.
1094
+ result = 0.4
1095
+ if hasHeaderComment:
1096
+ result += 0.4
1097
+ else:
1098
+ # Scan the source for lines starting with indicators.
1099
+ for line in lines:
1100
+ words = line.split()
1101
+ if (len(words) >= 2):
1102
+ firstWord = words[0]
1103
+ if not hasReport:
1104
+ if not hasJob:
1105
+ if not hasFile:
1106
+ if not hasParm:
1107
+ if firstWord == 'PARM':
1108
+ hasParm = True
1109
+ if firstWord == 'FILE':
1110
+ hasFile = True
1111
+ if firstWord == 'JOB':
1112
+ hasJob = True
1113
+ elif firstWord == 'PROC':
1114
+ hasProc = True
1115
+ elif firstWord == 'END-PROC':
1116
+ hasEndProc = True
1117
+ elif firstWord == 'REPORT':
1118
+ hasReport = True
1119
+
1120
+ # Weight the findings.
1121
+ if hasJob and (hasProc == hasEndProc):
1122
+ if hasHeaderComment:
1123
+ result += 0.1
1124
+ if hasParm:
1125
+ if hasProc:
1126
+ # Found PARM, JOB and PROC/END-PROC:
1127
+ # pretty sure this is Easytrieve.
1128
+ result += 0.8
1129
+ else:
1130
+ # Found PARAM and JOB: probably this is Easytrieve
1131
+ result += 0.5
1132
+ else:
1133
+ # Found JOB and possibly other keywords: might be Easytrieve
1134
+ result += 0.11
1135
+ if hasParm:
1136
+ # Note: PARAM is not a proper English word, so this is
1137
+ # regarded a much better indicator for Easytrieve than
1138
+ # the other words.
1139
+ result += 0.2
1140
+ if hasFile:
1141
+ result += 0.01
1142
+ if hasReport:
1143
+ result += 0.01
1144
+ assert 0.0 <= result <= 1.0
1145
+ return result
1146
+
1147
+
1148
+ class JclLexer(RegexLexer):
1149
+ """
1150
+ `Job Control Language (JCL)
1151
+ <http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/IEA2B570/CCONTENTS>`_
1152
+ is a scripting language used on mainframe platforms to instruct the system
1153
+ on how to run a batch job or start a subsystem. It is somewhat
1154
+ comparable to MS DOS batch and Unix shell scripts.
1155
+
1156
+ .. versionadded:: 2.1
1157
+ """
1158
+ name = 'JCL'
1159
+ aliases = ['jcl']
1160
+ filenames = ['*.jcl']
1161
+ mimetypes = ['text/x-jcl']
1162
+ flags = re.IGNORECASE
1163
+
1164
+ tokens = {
1165
+ 'root': [
1166
+ (r'//\*.*\n', Comment.Single),
1167
+ (r'//', Keyword.Pseudo, 'statement'),
1168
+ (r'/\*', Keyword.Pseudo, 'jes2_statement'),
1169
+ # TODO: JES3 statement
1170
+ (r'.*\n', Other) # Input text or inline code in any language.
1171
+ ],
1172
+ 'statement': [
1173
+ (r'\s*\n', Whitespace, '#pop'),
1174
+ (r'([a-z]\w*)(\s+)(exec|job)(\s*)',
1175
+ bygroups(Name.Label, Whitespace, Keyword.Reserved, Whitespace),
1176
+ 'option'),
1177
+ (r'[a-z]\w*', Name.Variable, 'statement_command'),
1178
+ (r'\s+', Whitespace, 'statement_command'),
1179
+ ],
1180
+ 'statement_command': [
1181
+ (r'\s+(command|cntl|dd|endctl|endif|else|include|jcllib|'
1182
+ r'output|pend|proc|set|then|xmit)\s+', Keyword.Reserved, 'option'),
1183
+ include('option')
1184
+ ],
1185
+ 'jes2_statement': [
1186
+ (r'\s*\n', Whitespace, '#pop'),
1187
+ (r'\$', Keyword, 'option'),
1188
+ (r'\b(jobparam|message|netacct|notify|output|priority|route|'
1189
+ r'setup|signoff|xeq|xmit)\b', Keyword, 'option'),
1190
+ ],
1191
+ 'option': [
1192
+ # (r'\n', Text, 'root'),
1193
+ (r'\*', Name.Builtin),
1194
+ (r'[\[\](){}<>;,]', Punctuation),
1195
+ (r'[-+*/=&%]', Operator),
1196
+ (r'[a-z_]\w*', Name),
1197
+ (r'\d+\.\d*', Number.Float),
1198
+ (r'\.\d+', Number.Float),
1199
+ (r'\d+', Number.Integer),
1200
+ (r"'", String, 'option_string'),
1201
+ (r'[ \t]+', Whitespace, 'option_comment'),
1202
+ (r'\.', Punctuation),
1203
+ ],
1204
+ 'option_string': [
1205
+ (r"(\n)(//)", bygroups(Text, Keyword.Pseudo)),
1206
+ (r"''", String),
1207
+ (r"[^']", String),
1208
+ (r"'", String, '#pop'),
1209
+ ],
1210
+ 'option_comment': [
1211
+ # (r'\n', Text, 'root'),
1212
+ (r'.+', Comment.Single),
1213
+ ]
1214
+ }
1215
+
1216
+ _JOB_HEADER_PATTERN = re.compile(r'^//[a-z#$@][a-z0-9#$@]{0,7}\s+job(\s+.*)?$',
1217
+ re.IGNORECASE)
1218
+
1219
+ def analyse_text(text):
1220
+ """
1221
+ Recognize JCL job by header.
1222
+ """
1223
+ result = 0.0
1224
+ lines = text.split('\n')
1225
+ if len(lines) > 0:
1226
+ if JclLexer._JOB_HEADER_PATTERN.match(lines[0]):
1227
+ result = 1.0
1228
+ assert 0.0 <= result <= 1.0
1229
+ return result
1230
+
1231
+
1232
+ class MiniScriptLexer(RegexLexer):
1233
+ """
1234
+ For `MiniScript <https://miniscript.org>`_ source code.
1235
+
1236
+ .. versionadded:: 2.6
1237
+ """
1238
+
1239
+ name = "MiniScript"
1240
+ aliases = ["ms", "miniscript"]
1241
+ filenames = ["*.ms"]
1242
+ mimetypes = ['text/x-minicript', 'application/x-miniscript']
1243
+
1244
+ tokens = {
1245
+ 'root': [
1246
+ (r'#!(.*?)$', Comment.Preproc),
1247
+ default('base'),
1248
+ ],
1249
+ 'base': [
1250
+ ('//.*$', Comment.Single),
1251
+ (r'(?i)(\d*\.\d+|\d+\.\d*)(e[+-]?\d+)?', Number),
1252
+ (r'(?i)\d+e[+-]?\d+', Number),
1253
+ (r'\d+', Number),
1254
+ (r'\n', Text),
1255
+ (r'[^\S\n]+', Text),
1256
+ (r'"', String, 'string_double'),
1257
+ (r'(==|!=|<=|>=|[=+\-*/%^<>.:])', Operator),
1258
+ (r'[;,\[\]{}()]', Punctuation),
1259
+ (words((
1260
+ 'break', 'continue', 'else', 'end', 'for', 'function', 'if',
1261
+ 'in', 'isa', 'then', 'repeat', 'return', 'while'), suffix=r'\b'),
1262
+ Keyword),
1263
+ (words((
1264
+ 'abs', 'acos', 'asin', 'atan', 'ceil', 'char', 'cos', 'floor',
1265
+ 'log', 'round', 'rnd', 'pi', 'sign', 'sin', 'sqrt', 'str', 'tan',
1266
+ 'hasIndex', 'indexOf', 'len', 'val', 'code', 'remove', 'lower',
1267
+ 'upper', 'replace', 'split', 'indexes', 'values', 'join', 'sum',
1268
+ 'sort', 'shuffle', 'push', 'pop', 'pull', 'range',
1269
+ 'print', 'input', 'time', 'wait', 'locals', 'globals', 'outer',
1270
+ 'yield'), suffix=r'\b'),
1271
+ Name.Builtin),
1272
+ (r'(true|false|null)\b', Keyword.Constant),
1273
+ (r'(and|or|not|new)\b', Operator.Word),
1274
+ (r'(self|super|__isa)\b', Name.Builtin.Pseudo),
1275
+ (r'[a-zA-Z_]\w*', Name.Variable)
1276
+ ],
1277
+ 'string_double': [
1278
+ (r'[^"\n]+', String),
1279
+ (r'""', String),
1280
+ (r'"', String, '#pop'),
1281
+ (r'\n', Text, '#pop'), # Stray linefeed also terminates strings.
1282
+ ]
1283
+ }