pygments.rb 1.2.0 → 2.1.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 (388) 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 +5 -5
  6. data/.rubocop.yml +18 -0
  7. data/CHANGELOG.adoc +132 -0
  8. data/Gemfile +3 -1
  9. data/LICENSE +1 -1
  10. data/README.adoc +160 -0
  11. data/Rakefile +12 -21
  12. data/bench.rb +14 -8
  13. data/{cache-lexers.rb → cache_lexers.rb} +3 -2
  14. data/lexers +0 -0
  15. data/lib/pygments.rb +10 -11
  16. data/lib/pygments/lexer.rb +6 -6
  17. data/lib/pygments/mentos.py +23 -110
  18. data/lib/pygments/popen.rb +196 -275
  19. data/lib/pygments/version.rb +2 -2
  20. data/pygments.rb.gemspec +12 -10
  21. data/test/test_pygments.rb +50 -110
  22. data/vendor/pygments-main/{AUTHORS → Pygments-2.8.0.dist-info/AUTHORS} +26 -3
  23. data/vendor/pygments-main/Pygments-2.8.0.dist-info/INSTALLER +1 -0
  24. data/vendor/pygments-main/{LICENSE → Pygments-2.8.0.dist-info/LICENSE} +1 -1
  25. data/vendor/pygments-main/Pygments-2.8.0.dist-info/METADATA +48 -0
  26. data/vendor/pygments-main/Pygments-2.8.0.dist-info/RECORD +494 -0
  27. data/vendor/pygments-main/Pygments-2.8.0.dist-info/REQUESTED +0 -0
  28. data/vendor/pygments-main/Pygments-2.8.0.dist-info/WHEEL +5 -0
  29. data/vendor/pygments-main/Pygments-2.8.0.dist-info/entry_points.txt +3 -0
  30. data/vendor/pygments-main/Pygments-2.8.0.dist-info/top_level.txt +1 -0
  31. data/vendor/pygments-main/bin/pygmentize +8 -0
  32. data/vendor/pygments-main/pygments/__init__.py +6 -12
  33. data/vendor/pygments-main/pygments/__main__.py +17 -0
  34. data/vendor/pygments-main/pygments/cmdline.py +213 -184
  35. data/vendor/pygments-main/pygments/console.py +6 -10
  36. data/vendor/pygments-main/pygments/filter.py +4 -7
  37. data/vendor/pygments-main/pygments/filters/__init__.py +609 -22
  38. data/vendor/pygments-main/pygments/formatter.py +4 -5
  39. data/vendor/pygments-main/pygments/formatters/__init__.py +10 -10
  40. data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -4
  41. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -2
  42. data/vendor/pygments-main/pygments/formatters/html.py +242 -139
  43. data/vendor/pygments-main/pygments/formatters/img.py +91 -50
  44. data/vendor/pygments-main/pygments/formatters/irc.py +39 -40
  45. data/vendor/pygments-main/pygments/formatters/latex.py +62 -33
  46. data/vendor/pygments-main/pygments/formatters/other.py +18 -17
  47. data/vendor/pygments-main/pygments/formatters/rtf.py +29 -30
  48. data/vendor/pygments-main/pygments/formatters/svg.py +40 -5
  49. data/vendor/pygments-main/pygments/formatters/terminal.py +25 -32
  50. data/vendor/pygments-main/pygments/formatters/terminal256.py +45 -14
  51. data/vendor/pygments-main/pygments/lexer.py +47 -44
  52. data/vendor/pygments-main/pygments/lexers/__init__.py +29 -17
  53. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +5 -6
  54. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +15 -16
  55. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +21 -18
  56. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1717 -1339
  57. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +1 -2
  58. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +2 -5
  59. data/vendor/pygments-main/pygments/lexers/_mapping.py +79 -31
  60. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +2 -3
  61. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1281 -0
  62. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +439 -386
  63. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +17 -21
  64. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +73 -17
  65. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +2 -3
  66. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1 -4
  67. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +151 -126
  68. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +96 -58
  69. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -2
  70. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +112 -0
  71. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +279 -0
  72. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -2
  73. data/vendor/pygments-main/pygments/lexers/actionscript.py +14 -10
  74. data/vendor/pygments-main/pygments/lexers/agile.py +1 -2
  75. data/vendor/pygments-main/pygments/lexers/algebra.py +20 -2
  76. data/vendor/pygments-main/pygments/lexers/ambient.py +2 -3
  77. data/vendor/pygments-main/pygments/lexers/amdgpu.py +48 -0
  78. data/vendor/pygments-main/pygments/lexers/ampl.py +3 -4
  79. data/vendor/pygments-main/pygments/lexers/apl.py +15 -16
  80. data/vendor/pygments-main/pygments/lexers/archetype.py +4 -5
  81. data/vendor/pygments-main/pygments/lexers/arrow.py +116 -0
  82. data/vendor/pygments-main/pygments/lexers/asm.py +440 -77
  83. data/vendor/pygments-main/pygments/lexers/automation.py +7 -2
  84. data/vendor/pygments-main/pygments/lexers/bare.py +103 -0
  85. data/vendor/pygments-main/pygments/lexers/basic.py +168 -7
  86. data/vendor/pygments-main/pygments/lexers/bibtex.py +5 -6
  87. data/vendor/pygments-main/pygments/lexers/boa.py +101 -0
  88. data/vendor/pygments-main/pygments/lexers/business.py +19 -5
  89. data/vendor/pygments-main/pygments/lexers/c_cpp.py +138 -48
  90. data/vendor/pygments-main/pygments/lexers/c_like.py +67 -43
  91. data/vendor/pygments-main/pygments/lexers/capnproto.py +7 -8
  92. data/vendor/pygments-main/pygments/lexers/cddl.py +190 -0
  93. data/vendor/pygments-main/pygments/lexers/chapel.py +25 -16
  94. data/vendor/pygments-main/pygments/lexers/clean.py +135 -245
  95. data/vendor/pygments-main/pygments/lexers/compiled.py +1 -2
  96. data/vendor/pygments-main/pygments/lexers/configs.py +190 -38
  97. data/vendor/pygments-main/pygments/lexers/console.py +1 -2
  98. data/vendor/pygments-main/pygments/lexers/crystal.py +54 -81
  99. data/vendor/pygments-main/pygments/lexers/csound.py +288 -188
  100. data/vendor/pygments-main/pygments/lexers/css.py +28 -23
  101. data/vendor/pygments-main/pygments/lexers/d.py +12 -8
  102. data/vendor/pygments-main/pygments/lexers/dalvik.py +1 -2
  103. data/vendor/pygments-main/pygments/lexers/data.py +240 -98
  104. data/vendor/pygments-main/pygments/lexers/devicetree.py +108 -0
  105. data/vendor/pygments-main/pygments/lexers/diff.py +4 -5
  106. data/vendor/pygments-main/pygments/lexers/dotnet.py +46 -31
  107. data/vendor/pygments-main/pygments/lexers/dsls.py +146 -65
  108. data/vendor/pygments-main/pygments/lexers/dylan.py +16 -19
  109. data/vendor/pygments-main/pygments/lexers/ecl.py +17 -5
  110. data/vendor/pygments-main/pygments/lexers/eiffel.py +2 -3
  111. data/vendor/pygments-main/pygments/lexers/elm.py +5 -6
  112. data/vendor/pygments-main/pygments/lexers/email.py +150 -0
  113. data/vendor/pygments-main/pygments/lexers/erlang.py +29 -33
  114. data/vendor/pygments-main/pygments/lexers/esoteric.py +46 -20
  115. data/vendor/pygments-main/pygments/lexers/ezhil.py +21 -14
  116. data/vendor/pygments-main/pygments/lexers/factor.py +3 -4
  117. data/vendor/pygments-main/pygments/lexers/fantom.py +1 -2
  118. data/vendor/pygments-main/pygments/lexers/felix.py +1 -2
  119. data/vendor/pygments-main/pygments/lexers/floscript.py +82 -0
  120. data/vendor/pygments-main/pygments/lexers/forth.py +41 -41
  121. data/vendor/pygments-main/pygments/lexers/fortran.py +13 -10
  122. data/vendor/pygments-main/pygments/lexers/foxpro.py +2 -3
  123. data/vendor/pygments-main/pygments/lexers/freefem.py +897 -0
  124. data/vendor/pygments-main/pygments/lexers/functional.py +1 -2
  125. data/vendor/pygments-main/pygments/lexers/futhark.py +110 -0
  126. data/vendor/pygments-main/pygments/lexers/gdscript.py +345 -0
  127. data/vendor/pygments-main/pygments/lexers/go.py +2 -3
  128. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +62 -6
  129. data/vendor/pygments-main/pygments/lexers/graph.py +14 -10
  130. data/vendor/pygments-main/pygments/lexers/graphics.py +274 -28
  131. data/vendor/pygments-main/pygments/lexers/graphviz.py +57 -0
  132. data/vendor/pygments-main/pygments/lexers/haskell.py +48 -22
  133. data/vendor/pygments-main/pygments/lexers/haxe.py +8 -9
  134. data/vendor/pygments-main/pygments/lexers/hdl.py +176 -90
  135. data/vendor/pygments-main/pygments/lexers/hexdump.py +1 -2
  136. data/vendor/pygments-main/pygments/lexers/html.py +37 -26
  137. data/vendor/pygments-main/pygments/lexers/idl.py +19 -9
  138. data/vendor/pygments-main/pygments/lexers/igor.py +244 -113
  139. data/vendor/pygments-main/pygments/lexers/inferno.py +2 -3
  140. data/vendor/pygments-main/pygments/lexers/installers.py +1 -2
  141. data/vendor/pygments-main/pygments/lexers/int_fiction.py +40 -16
  142. data/vendor/pygments-main/pygments/lexers/iolang.py +3 -4
  143. data/vendor/pygments-main/pygments/lexers/j.py +4 -5
  144. data/vendor/pygments-main/pygments/lexers/javascript.py +115 -104
  145. data/vendor/pygments-main/pygments/lexers/julia.py +44 -47
  146. data/vendor/pygments-main/pygments/lexers/jvm.py +368 -202
  147. data/vendor/pygments-main/pygments/lexers/lisp.py +887 -810
  148. data/vendor/pygments-main/pygments/lexers/make.py +12 -9
  149. data/vendor/pygments-main/pygments/lexers/markup.py +212 -45
  150. data/vendor/pygments-main/pygments/lexers/math.py +1 -2
  151. data/vendor/pygments-main/pygments/lexers/matlab.py +2705 -88
  152. data/vendor/pygments-main/pygments/lexers/mime.py +225 -0
  153. data/vendor/pygments-main/pygments/lexers/ml.py +203 -15
  154. data/vendor/pygments-main/pygments/lexers/modeling.py +26 -19
  155. data/vendor/pygments-main/pygments/lexers/modula2.py +27 -9
  156. data/vendor/pygments-main/pygments/lexers/monte.py +1 -2
  157. data/vendor/pygments-main/pygments/lexers/mosel.py +447 -0
  158. data/vendor/pygments-main/pygments/lexers/ncl.py +1 -2
  159. data/vendor/pygments-main/pygments/lexers/nimrod.py +4 -5
  160. data/vendor/pygments-main/pygments/lexers/nit.py +1 -2
  161. data/vendor/pygments-main/pygments/lexers/nix.py +1 -2
  162. data/vendor/pygments-main/pygments/lexers/oberon.py +17 -2
  163. data/vendor/pygments-main/pygments/lexers/objective.py +18 -19
  164. data/vendor/pygments-main/pygments/lexers/ooc.py +1 -2
  165. data/vendor/pygments-main/pygments/lexers/other.py +1 -2
  166. data/vendor/pygments-main/pygments/lexers/parasail.py +1 -2
  167. data/vendor/pygments-main/pygments/lexers/parsers.py +47 -83
  168. data/vendor/pygments-main/pygments/lexers/pascal.py +22 -23
  169. data/vendor/pygments-main/pygments/lexers/pawn.py +31 -28
  170. data/vendor/pygments-main/pygments/lexers/perl.py +260 -149
  171. data/vendor/pygments-main/pygments/lexers/php.py +66 -13
  172. data/vendor/pygments-main/pygments/lexers/pointless.py +70 -0
  173. data/vendor/pygments-main/pygments/lexers/pony.py +93 -0
  174. data/vendor/pygments-main/pygments/lexers/praat.py +38 -31
  175. data/vendor/pygments-main/pygments/lexers/prolog.py +38 -39
  176. data/vendor/pygments-main/pygments/lexers/promql.py +182 -0
  177. data/vendor/pygments-main/pygments/lexers/python.py +450 -231
  178. data/vendor/pygments-main/pygments/lexers/qvt.py +6 -7
  179. data/vendor/pygments-main/pygments/lexers/r.py +13 -276
  180. data/vendor/pygments-main/pygments/lexers/rdf.py +232 -40
  181. data/vendor/pygments-main/pygments/lexers/rebol.py +8 -9
  182. data/vendor/pygments-main/pygments/lexers/resource.py +2 -3
  183. data/vendor/pygments-main/pygments/lexers/ride.py +138 -0
  184. data/vendor/pygments-main/pygments/lexers/rnc.py +1 -2
  185. data/vendor/pygments-main/pygments/lexers/roboconf.py +1 -2
  186. data/vendor/pygments-main/pygments/lexers/robotframework.py +23 -32
  187. data/vendor/pygments-main/pygments/lexers/ruby.py +50 -46
  188. data/vendor/pygments-main/pygments/lexers/rust.py +76 -73
  189. data/vendor/pygments-main/pygments/lexers/sas.py +1 -2
  190. data/vendor/pygments-main/pygments/lexers/scdoc.py +82 -0
  191. data/vendor/pygments-main/pygments/lexers/scripting.py +79 -18
  192. data/vendor/pygments-main/pygments/lexers/sgf.py +60 -0
  193. data/vendor/pygments-main/pygments/lexers/shell.py +164 -49
  194. data/vendor/pygments-main/pygments/lexers/sieve.py +68 -0
  195. data/vendor/pygments-main/pygments/lexers/slash.py +184 -0
  196. data/vendor/pygments-main/pygments/lexers/smalltalk.py +2 -3
  197. data/vendor/pygments-main/pygments/lexers/smv.py +3 -4
  198. data/vendor/pygments-main/pygments/lexers/snobol.py +1 -2
  199. data/vendor/pygments-main/pygments/lexers/solidity.py +91 -0
  200. data/vendor/pygments-main/pygments/lexers/special.py +31 -28
  201. data/vendor/pygments-main/pygments/lexers/sql.py +330 -179
  202. data/vendor/pygments-main/pygments/lexers/stata.py +107 -45
  203. data/vendor/pygments-main/pygments/lexers/supercollider.py +8 -4
  204. data/vendor/pygments-main/pygments/lexers/tcl.py +1 -2
  205. data/vendor/pygments-main/pygments/lexers/templates.py +116 -136
  206. data/vendor/pygments-main/pygments/lexers/teraterm.py +334 -0
  207. data/vendor/pygments-main/pygments/lexers/testing.py +6 -7
  208. data/vendor/pygments-main/pygments/lexers/text.py +2 -2
  209. data/vendor/pygments-main/pygments/lexers/textedit.py +6 -7
  210. data/vendor/pygments-main/pygments/lexers/textfmts.py +146 -14
  211. data/vendor/pygments-main/pygments/lexers/theorem.py +74 -56
  212. data/vendor/pygments-main/pygments/lexers/tnt.py +262 -0
  213. data/vendor/pygments-main/pygments/lexers/trafficscript.py +1 -2
  214. data/vendor/pygments-main/pygments/lexers/typoscript.py +4 -12
  215. data/vendor/pygments-main/pygments/lexers/unicon.py +411 -0
  216. data/vendor/pygments-main/pygments/lexers/urbi.py +16 -4
  217. data/vendor/pygments-main/pygments/lexers/usd.py +89 -0
  218. data/vendor/pygments-main/pygments/lexers/varnish.py +4 -5
  219. data/vendor/pygments-main/pygments/lexers/verification.py +13 -11
  220. data/vendor/pygments-main/pygments/lexers/web.py +1 -2
  221. data/vendor/pygments-main/pygments/lexers/webidl.py +298 -0
  222. data/vendor/pygments-main/pygments/lexers/webmisc.py +35 -32
  223. data/vendor/pygments-main/pygments/lexers/whiley.py +5 -6
  224. data/vendor/pygments-main/pygments/lexers/x10.py +2 -3
  225. data/vendor/pygments-main/pygments/lexers/xorg.py +5 -5
  226. data/vendor/pygments-main/pygments/lexers/yang.py +103 -0
  227. data/vendor/pygments-main/pygments/lexers/zig.py +123 -0
  228. data/vendor/pygments-main/pygments/modeline.py +1 -2
  229. data/vendor/pygments-main/pygments/plugin.py +4 -3
  230. data/vendor/pygments-main/pygments/regexopt.py +1 -2
  231. data/vendor/pygments-main/pygments/scanner.py +2 -3
  232. data/vendor/pygments-main/pygments/sphinxext.py +2 -5
  233. data/vendor/pygments-main/pygments/style.py +61 -25
  234. data/vendor/pygments-main/pygments/styles/__init__.py +12 -5
  235. data/vendor/pygments-main/pygments/styles/abap.py +1 -2
  236. data/vendor/pygments-main/pygments/styles/algol.py +1 -2
  237. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -2
  238. data/vendor/pygments-main/pygments/styles/arduino.py +2 -3
  239. data/vendor/pygments-main/pygments/styles/autumn.py +1 -2
  240. data/vendor/pygments-main/pygments/styles/borland.py +1 -2
  241. data/vendor/pygments-main/pygments/styles/bw.py +1 -2
  242. data/vendor/pygments-main/pygments/styles/colorful.py +1 -2
  243. data/vendor/pygments-main/pygments/styles/default.py +1 -2
  244. data/vendor/pygments-main/pygments/styles/emacs.py +1 -2
  245. data/vendor/pygments-main/pygments/styles/friendly.py +1 -2
  246. data/vendor/pygments-main/pygments/styles/fruity.py +1 -2
  247. data/vendor/pygments-main/pygments/styles/igor.py +1 -2
  248. data/vendor/pygments-main/pygments/styles/inkpot.py +66 -0
  249. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -2
  250. data/vendor/pygments-main/pygments/styles/manni.py +1 -2
  251. data/vendor/pygments-main/pygments/styles/material.py +118 -0
  252. data/vendor/pygments-main/pygments/styles/monokai.py +4 -4
  253. data/vendor/pygments-main/pygments/styles/murphy.py +1 -2
  254. data/vendor/pygments-main/pygments/styles/native.py +1 -2
  255. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -2
  256. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -2
  257. data/vendor/pygments-main/pygments/styles/pastie.py +1 -2
  258. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -2
  259. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -2
  260. data/vendor/pygments-main/pygments/styles/rrt.py +1 -2
  261. data/vendor/pygments-main/pygments/styles/sas.py +1 -2
  262. data/vendor/pygments-main/pygments/styles/solarized.py +136 -0
  263. data/vendor/pygments-main/pygments/styles/stata_dark.py +40 -0
  264. data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -16
  265. data/vendor/pygments-main/pygments/styles/tango.py +1 -2
  266. data/vendor/pygments-main/pygments/styles/trac.py +1 -2
  267. data/vendor/pygments-main/pygments/styles/vim.py +1 -2
  268. data/vendor/pygments-main/pygments/styles/vs.py +1 -2
  269. data/vendor/pygments-main/pygments/styles/xcode.py +1 -2
  270. data/vendor/pygments-main/pygments/styles/zenburn.py +80 -0
  271. data/vendor/pygments-main/pygments/token.py +1 -2
  272. data/vendor/pygments-main/pygments/unistring.py +47 -109
  273. data/vendor/pygments-main/pygments/util.py +16 -96
  274. metadata +76 -137
  275. data/CHANGELOG.md +0 -105
  276. data/README.md +0 -121
  277. data/circle.yml +0 -20
  278. data/test/test_data.c +0 -2581
  279. data/test/test_data.py +0 -514
  280. data/test/test_data_generated +0 -2582
  281. data/vendor/custom_lexers/github.py +0 -565
  282. data/vendor/pygments-main/CHANGES +0 -1186
  283. data/vendor/pygments-main/MANIFEST.in +0 -6
  284. data/vendor/pygments-main/Makefile +0 -65
  285. data/vendor/pygments-main/README.rst +0 -39
  286. data/vendor/pygments-main/REVISION +0 -1
  287. data/vendor/pygments-main/TODO +0 -12
  288. data/vendor/pygments-main/doc/Makefile +0 -153
  289. data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
  290. data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
  291. data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
  292. data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
  293. data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
  294. data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
  295. data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
  296. data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
  297. data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
  298. data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
  299. data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
  300. data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
  301. data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
  302. data/vendor/pygments-main/doc/conf.py +0 -241
  303. data/vendor/pygments-main/doc/docs/api.rst +0 -354
  304. data/vendor/pygments-main/doc/docs/authors.rst +0 -4
  305. data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
  306. data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
  307. data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
  308. data/vendor/pygments-main/doc/docs/filters.rst +0 -41
  309. data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
  310. data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
  311. data/vendor/pygments-main/doc/docs/index.rst +0 -66
  312. data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
  313. data/vendor/pygments-main/doc/docs/java.rst +0 -70
  314. data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
  315. data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
  316. data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
  317. data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
  318. data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
  319. data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
  320. data/vendor/pygments-main/doc/docs/styles.rst +0 -201
  321. data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
  322. data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
  323. data/vendor/pygments-main/doc/download.rst +0 -41
  324. data/vendor/pygments-main/doc/faq.rst +0 -139
  325. data/vendor/pygments-main/doc/index.rst +0 -54
  326. data/vendor/pygments-main/doc/languages.rst +0 -154
  327. data/vendor/pygments-main/doc/make.bat +0 -190
  328. data/vendor/pygments-main/doc/pygmentize.1 +0 -94
  329. data/vendor/pygments-main/external/autopygmentize +0 -101
  330. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
  331. data/vendor/pygments-main/external/markdown-processor.py +0 -67
  332. data/vendor/pygments-main/external/moin-parser.py +0 -112
  333. data/vendor/pygments-main/external/pygments.bashcomp +0 -38
  334. data/vendor/pygments-main/external/rst-directive.py +0 -82
  335. data/vendor/pygments-main/pygmentize +0 -8
  336. data/vendor/pygments-main/pygments/lexers/github.py +0 -565
  337. data/vendor/pygments-main/requirements.txt +0 -5
  338. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  339. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  340. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  341. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  342. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  343. data/vendor/pygments-main/scripts/pylintrc +0 -301
  344. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  345. data/vendor/pygments-main/setup.cfg +0 -10
  346. data/vendor/pygments-main/setup.py +0 -77
  347. data/vendor/pygments-main/tox.ini +0 -7
  348. data/vendor/simplejson/.gitignore +0 -10
  349. data/vendor/simplejson/.travis.yml +0 -5
  350. data/vendor/simplejson/CHANGES.txt +0 -291
  351. data/vendor/simplejson/LICENSE.txt +0 -19
  352. data/vendor/simplejson/MANIFEST.in +0 -5
  353. data/vendor/simplejson/README.rst +0 -19
  354. data/vendor/simplejson/conf.py +0 -179
  355. data/vendor/simplejson/index.rst +0 -628
  356. data/vendor/simplejson/scripts/make_docs.py +0 -18
  357. data/vendor/simplejson/setup.py +0 -104
  358. data/vendor/simplejson/simplejson/__init__.py +0 -510
  359. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  360. data/vendor/simplejson/simplejson/decoder.py +0 -425
  361. data/vendor/simplejson/simplejson/encoder.py +0 -567
  362. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  363. data/vendor/simplejson/simplejson/scanner.py +0 -77
  364. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  365. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  366. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  367. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  368. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  369. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  370. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  371. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  372. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  373. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  374. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  375. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  376. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  377. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  378. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  379. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  380. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  381. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  382. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  383. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  384. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  385. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  386. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  387. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  388. data/vendor/simplejson/simplejson/tool.py +0 -39
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.lexers.sql
4
3
  ~~~~~~~~~~~~~~~~~~~
@@ -34,20 +33,26 @@
34
33
  The ``tests/examplefiles`` contains a few test files with data to be
35
34
  parsed by these lexers.
36
35
 
37
- :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
36
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
38
37
  :license: BSD, see LICENSE for details.
39
38
  """
40
39
 
41
40
  import re
42
41
 
43
42
  from pygments.lexer import Lexer, RegexLexer, do_insertions, bygroups, words
44
- from pygments.token import Punctuation, Whitespace, Error, \
45
- Text, Comment, Operator, Keyword, Name, String, Number, Generic
43
+ from pygments.token import Punctuation, Whitespace, Text, Comment, Operator, \
44
+ Keyword, Name, String, Number, Generic, Literal
46
45
  from pygments.lexers import get_lexer_by_name, ClassNotFound
47
- from pygments.util import iteritems
48
46
 
49
47
  from pygments.lexers._postgres_builtins import KEYWORDS, DATATYPES, \
50
48
  PSEUDO_TYPES, PLPGSQL_KEYWORDS
49
+ from pygments.lexers._mysql_builtins import \
50
+ MYSQL_CONSTANTS, \
51
+ MYSQL_DATATYPES, \
52
+ MYSQL_FUNCTIONS, \
53
+ MYSQL_KEYWORDS, \
54
+ MYSQL_OPTIMIZER_HINTS
55
+
51
56
  from pygments.lexers import _tsql_builtins
52
57
 
53
58
 
@@ -59,7 +64,14 @@ line_re = re.compile('.*?\n')
59
64
 
60
65
  language_re = re.compile(r"\s+LANGUAGE\s+'?(\w+)'?", re.IGNORECASE)
61
66
 
62
- do_re = re.compile(r'\bDO\b', re.IGNORECASE)
67
+ do_re = re.compile(r'\bDO\b', re.IGNORECASE)
68
+
69
+ # Regular expressions for analyse_text()
70
+ name_between_bracket_re = re.compile(r'\[[a-zA-Z_]\w*\]')
71
+ name_between_backtick_re = re.compile(r'`[a-zA-Z_]\w*`')
72
+ tsql_go_re = re.compile(r'\bgo\b', re.IGNORECASE)
73
+ tsql_declare_re = re.compile(r'\bdeclare\s+@', re.IGNORECASE)
74
+ tsql_variable_re = re.compile(r'@[a-zA-Z_]\w*\b')
63
75
 
64
76
 
65
77
  def language_callback(lexer, match):
@@ -68,29 +80,28 @@ def language_callback(lexer, match):
68
80
  The lexer is chosen looking for a nearby LANGUAGE or assumed as
69
81
  plpgsql if inside a DO statement and no LANGUAGE has been found.
70
82
  """
71
- l = None
83
+ lx = None
72
84
  m = language_re.match(lexer.text[match.end():match.end()+100])
73
85
  if m is not None:
74
- l = lexer._get_lexer(m.group(1))
86
+ lx = lexer._get_lexer(m.group(1))
75
87
  else:
76
88
  m = list(language_re.finditer(
77
89
  lexer.text[max(0, match.start()-100):match.start()]))
78
90
  if m:
79
- l = lexer._get_lexer(m[-1].group(1))
91
+ lx = lexer._get_lexer(m[-1].group(1))
80
92
  else:
81
93
  m = list(do_re.finditer(
82
94
  lexer.text[max(0, match.start()-25):match.start()]))
83
95
  if m:
84
- l = lexer._get_lexer('plpgsql')
85
-
96
+ lx = lexer._get_lexer('plpgsql')
97
+
86
98
  # 1 = $, 2 = delimiter, 3 = $
87
99
  yield (match.start(1), String, match.group(1))
88
100
  yield (match.start(2), String.Delimiter, match.group(2))
89
101
  yield (match.start(3), String, match.group(3))
90
102
  # 4 = string contents
91
- if l:
92
- for x in l.get_tokens_unprocessed(match.group(4)):
93
- yield x
103
+ if lx:
104
+ yield from lx.get_tokens_unprocessed(match.group(4))
94
105
  else:
95
106
  yield (match.start(4), String, match.group(4))
96
107
  # 5 = $, 6 = delimiter, 7 = $
@@ -99,7 +110,7 @@ def language_callback(lexer, match):
99
110
  yield (match.start(7), String, match.group(7))
100
111
 
101
112
 
102
- class PostgresBase(object):
113
+ class PostgresBase:
103
114
  """Base class for Postgres-related lexers.
104
115
 
105
116
  This is implemented as a mixin to avoid the Lexer metaclass kicking in.
@@ -111,9 +122,7 @@ class PostgresBase(object):
111
122
  def get_tokens_unprocessed(self, text, *args):
112
123
  # Have a copy of the entire text to be used by `language_callback`.
113
124
  self.text = text
114
- for x in super(PostgresBase, self).get_tokens_unprocessed(
115
- text, *args):
116
- yield x
125
+ yield from super().get_tokens_unprocessed(text, *args)
117
126
 
118
127
  def _get_lexer(self, lang):
119
128
  if lang.lower() == 'sql':
@@ -127,9 +136,9 @@ class PostgresBase(object):
127
136
  if lang.startswith('pl') and lang.endswith('u'):
128
137
  tries.append(lang[2:-1])
129
138
 
130
- for l in tries:
139
+ for lx in tries:
131
140
  try:
132
- return get_lexer_by_name(l, **self.options)
141
+ return get_lexer_by_name(lx, **self.options)
133
142
  except ClassNotFound:
134
143
  pass
135
144
  else:
@@ -155,9 +164,9 @@ class PostgresLexer(PostgresBase, RegexLexer):
155
164
  (r'\s+', Text),
156
165
  (r'--.*\n?', Comment.Single),
157
166
  (r'/\*', Comment.Multiline, 'multiline-comments'),
158
- (r'(' + '|'.join(s.replace(" ", "\s+")
159
- for s in DATATYPES + PSEUDO_TYPES)
160
- + r')\b', Name.Builtin),
167
+ (r'(' + '|'.join(s.replace(" ", r"\s+")
168
+ for s in DATATYPES + PSEUDO_TYPES) + r')\b',
169
+ Name.Builtin),
161
170
  (words(KEYWORDS, suffix=r'\b'), Keyword),
162
171
  (r'[+*/<>=~!@#%^&|`?-]+', Operator),
163
172
  (r'::', Operator), # cast
@@ -205,7 +214,7 @@ class PlPgsqlLexer(PostgresBase, RegexLexer):
205
214
  mimetypes = ['text/x-plpgsql']
206
215
 
207
216
  flags = re.IGNORECASE
208
- tokens = dict((k, l[:]) for (k, l) in iteritems(PostgresLexer.tokens))
217
+ tokens = {k: l[:] for (k, l) in PostgresLexer.tokens.items()}
209
218
 
210
219
  # extend the keywords list
211
220
  for i, pattern in enumerate(tokens['root']):
@@ -239,7 +248,7 @@ class PsqlRegexLexer(PostgresBase, RegexLexer):
239
248
  aliases = [] # not public
240
249
 
241
250
  flags = re.IGNORECASE
242
- tokens = dict((k, l[:]) for (k, l) in iteritems(PostgresLexer.tokens))
251
+ tokens = {k: l[:] for (k, l) in PostgresLexer.tokens.items()}
243
252
 
244
253
  tokens['root'].append(
245
254
  (r'\\[^\s]+', Keyword.Pseudo, 'psql-command'))
@@ -253,6 +262,7 @@ class PsqlRegexLexer(PostgresBase, RegexLexer):
253
262
  (r"[^\s]+", String.Symbol),
254
263
  ]
255
264
 
265
+
256
266
  re_prompt = re.compile(r'^(\S.*?)??[=\-\(\$\'\"][#>]')
257
267
  re_psql_command = re.compile(r'\s*\\')
258
268
  re_end_command = re.compile(r';\s*(--.*?)?$')
@@ -263,7 +273,7 @@ re_message = re.compile(
263
273
  r'FATAL|HINT|DETAIL|CONTEXT|LINE [0-9]+):)(.*?\n)')
264
274
 
265
275
 
266
- class lookahead(object):
276
+ class lookahead:
267
277
  """Wrap an iterator and allow pushing back an item."""
268
278
  def __init__(self, x):
269
279
  self.iter = iter(x)
@@ -308,19 +318,11 @@ class PostgresConsoleLexer(Lexer):
308
318
  # and continue until the end of command is detected
309
319
  curcode = ''
310
320
  insertions = []
311
- while 1:
312
- try:
313
- line = next(lines)
314
- except StopIteration:
315
- # allow the emission of partially collected items
316
- # the repl loop will be broken below
317
- break
318
-
321
+ for line in lines:
319
322
  # Identify a shell prompt in case of psql commandline example
320
323
  if line.startswith('$') and not curcode:
321
324
  lexer = get_lexer_by_name('console', **self.options)
322
- for x in lexer.get_tokens_unprocessed(line):
323
- yield x
325
+ yield from lexer.get_tokens_unprocessed(line)
324
326
  break
325
327
 
326
328
  # Identify a psql prompt
@@ -340,14 +342,12 @@ class PostgresConsoleLexer(Lexer):
340
342
  break
341
343
 
342
344
  # Emit the combined stream of command and prompt(s)
343
- for item in do_insertions(insertions,
344
- sql.get_tokens_unprocessed(curcode)):
345
- yield item
345
+ yield from do_insertions(insertions,
346
+ sql.get_tokens_unprocessed(curcode))
346
347
 
347
348
  # Emit the output lines
348
349
  out_token = Generic.Output
349
- while 1:
350
- line = next(lines)
350
+ for line in lines:
351
351
  mprompt = re_prompt.match(line)
352
352
  if mprompt is not None:
353
353
  # push the line back to have it processed by the prompt
@@ -363,6 +363,8 @@ class PostgresConsoleLexer(Lexer):
363
363
  yield (mmsg.start(2), out_token, mmsg.group(2))
364
364
  else:
365
365
  yield (0, out_token, line)
366
+ else:
367
+ return
366
368
 
367
369
 
368
370
  class SqlLexer(RegexLexer):
@@ -383,86 +385,99 @@ class SqlLexer(RegexLexer):
383
385
  (r'--.*\n?', Comment.Single),
384
386
  (r'/\*', Comment.Multiline, 'multiline-comments'),
385
387
  (words((
386
- 'ABORT', 'ABS', 'ABSOLUTE', 'ACCESS', 'ADA', 'ADD', 'ADMIN', 'AFTER', 'AGGREGATE',
387
- 'ALIAS', 'ALL', 'ALLOCATE', 'ALTER', 'ANALYSE', 'ANALYZE', 'AND', 'ANY', 'ARE', 'AS',
388
- 'ASC', 'ASENSITIVE', 'ASSERTION', 'ASSIGNMENT', 'ASYMMETRIC', 'AT', 'ATOMIC',
389
- 'AUTHORIZATION', 'AVG', 'BACKWARD', 'BEFORE', 'BEGIN', 'BETWEEN', 'BITVAR',
390
- 'BIT_LENGTH', 'BOTH', 'BREADTH', 'BY', 'C', 'CACHE', 'CALL', 'CALLED', 'CARDINALITY',
391
- 'CASCADE', 'CASCADED', 'CASE', 'CAST', 'CATALOG', 'CATALOG_NAME', 'CHAIN',
388
+ 'ABORT', 'ABS', 'ABSOLUTE', 'ACCESS', 'ADA', 'ADD', 'ADMIN', 'AFTER',
389
+ 'AGGREGATE', 'ALIAS', 'ALL', 'ALLOCATE', 'ALTER', 'ANALYSE', 'ANALYZE',
390
+ 'AND', 'ANY', 'ARE', 'AS', 'ASC', 'ASENSITIVE', 'ASSERTION', 'ASSIGNMENT',
391
+ 'ASYMMETRIC', 'AT', 'ATOMIC', 'AUTHORIZATION', 'AVG', 'BACKWARD',
392
+ 'BEFORE', 'BEGIN', 'BETWEEN', 'BITVAR', 'BIT_LENGTH', 'BOTH', 'BREADTH',
393
+ 'BY', 'C', 'CACHE', 'CALL', 'CALLED', 'CARDINALITY', 'CASCADE',
394
+ 'CASCADED', 'CASE', 'CAST', 'CATALOG', 'CATALOG_NAME', 'CHAIN',
392
395
  'CHARACTERISTICS', 'CHARACTER_LENGTH', 'CHARACTER_SET_CATALOG',
393
396
  'CHARACTER_SET_NAME', 'CHARACTER_SET_SCHEMA', 'CHAR_LENGTH', 'CHECK',
394
- 'CHECKED', 'CHECKPOINT', 'CLASS', 'CLASS_ORIGIN', 'CLOB', 'CLOSE', 'CLUSTER',
395
- 'COALSECE', 'COBOL', 'COLLATE', 'COLLATION', 'COLLATION_CATALOG',
396
- 'COLLATION_NAME', 'COLLATION_SCHEMA', 'COLUMN', 'COLUMN_NAME',
397
- 'COMMAND_FUNCTION', 'COMMAND_FUNCTION_CODE', 'COMMENT', 'COMMIT',
398
- 'COMMITTED', 'COMPLETION', 'CONDITION_NUMBER', 'CONNECT', 'CONNECTION',
399
- 'CONNECTION_NAME', 'CONSTRAINT', 'CONSTRAINTS', 'CONSTRAINT_CATALOG',
400
- 'CONSTRAINT_NAME', 'CONSTRAINT_SCHEMA', 'CONSTRUCTOR', 'CONTAINS',
401
- 'CONTINUE', 'CONVERSION', 'CONVERT', 'COPY', 'CORRESPONTING', 'COUNT',
402
- 'CREATE', 'CREATEDB', 'CREATEUSER', 'CROSS', 'CUBE', 'CURRENT', 'CURRENT_DATE',
403
- 'CURRENT_PATH', 'CURRENT_ROLE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP',
404
- 'CURRENT_USER', 'CURSOR', 'CURSOR_NAME', 'CYCLE', 'DATA', 'DATABASE',
397
+ 'CHECKED', 'CHECKPOINT', 'CLASS', 'CLASS_ORIGIN', 'CLOB', 'CLOSE',
398
+ 'CLUSTER', 'COALESCE', 'COBOL', 'COLLATE', 'COLLATION',
399
+ 'COLLATION_CATALOG', 'COLLATION_NAME', 'COLLATION_SCHEMA', 'COLUMN',
400
+ 'COLUMN_NAME', 'COMMAND_FUNCTION', 'COMMAND_FUNCTION_CODE', 'COMMENT',
401
+ 'COMMIT', 'COMMITTED', 'COMPLETION', 'CONDITION_NUMBER', 'CONNECT',
402
+ 'CONNECTION', 'CONNECTION_NAME', 'CONSTRAINT', 'CONSTRAINTS',
403
+ 'CONSTRAINT_CATALOG', 'CONSTRAINT_NAME', 'CONSTRAINT_SCHEMA',
404
+ 'CONSTRUCTOR', 'CONTAINS', 'CONTINUE', 'CONVERSION', 'CONVERT',
405
+ 'COPY', 'CORRESPONDING', 'COUNT', 'CREATE', 'CREATEDB', 'CREATEUSER',
406
+ 'CROSS', 'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_PATH',
407
+ 'CURRENT_ROLE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER',
408
+ 'CURSOR', 'CURSOR_NAME', 'CYCLE', 'DATA', 'DATABASE',
405
409
  'DATETIME_INTERVAL_CODE', 'DATETIME_INTERVAL_PRECISION', 'DAY',
406
- 'DEALLOCATE', 'DECLARE', 'DEFAULT', 'DEFAULTS', 'DEFERRABLE', 'DEFERRED',
407
- 'DEFINED', 'DEFINER', 'DELETE', 'DELIMITER', 'DELIMITERS', 'DEREF', 'DESC',
408
- 'DESCRIBE', 'DESCRIPTOR', 'DESTROY', 'DESTRUCTOR', 'DETERMINISTIC',
409
- 'DIAGNOSTICS', 'DICTIONARY', 'DISCONNECT', 'DISPATCH', 'DISTINCT', 'DO',
410
- 'DOMAIN', 'DROP', 'DYNAMIC', 'DYNAMIC_FUNCTION', 'DYNAMIC_FUNCTION_CODE', 'EACH',
411
- 'ELSE', 'ELSIF', 'ENCODING', 'ENCRYPTED', 'END', 'END-EXEC', 'EQUALS', 'ESCAPE', 'EVERY',
412
- 'EXCEPTION', 'EXCEPT', 'EXCLUDING', 'EXCLUSIVE', 'EXEC', 'EXECUTE', 'EXISTING',
413
- 'EXISTS', 'EXPLAIN', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FETCH', 'FINAL', 'FIRST', 'FOR',
414
- 'FORCE', 'FOREIGN', 'FORTRAN', 'FORWARD', 'FOUND', 'FREE', 'FREEZE', 'FROM', 'FULL',
415
- 'FUNCTION', 'G', 'GENERAL', 'GENERATED', 'GET', 'GLOBAL', 'GO', 'GOTO', 'GRANT', 'GRANTED',
416
- 'GROUP', 'GROUPING', 'HANDLER', 'HAVING', 'HIERARCHY', 'HOLD', 'HOST', 'IDENTITY', 'IF',
417
- 'IGNORE', 'ILIKE', 'IMMEDIATE', 'IMMUTABLE', 'IMPLEMENTATION', 'IMPLICIT', 'IN',
418
- 'INCLUDING', 'INCREMENT', 'INDEX', 'INDITCATOR', 'INFIX', 'INHERITS', 'INITIALIZE',
419
- 'INITIALLY', 'INNER', 'INOUT', 'INPUT', 'INSENSITIVE', 'INSERT', 'INSTANTIABLE',
420
- 'INSTEAD', 'INTERSECT', 'INTO', 'INVOKER', 'IS', 'ISNULL', 'ISOLATION', 'ITERATE', 'JOIN',
421
- 'KEY', 'KEY_MEMBER', 'KEY_TYPE', 'LANCOMPILER', 'LANGUAGE', 'LARGE', 'LAST',
422
- 'LATERAL', 'LEADING', 'LEFT', 'LENGTH', 'LESS', 'LEVEL', 'LIKE', 'LIMIT', 'LISTEN', 'LOAD',
423
- 'LOCAL', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATION', 'LOCATOR', 'LOCK', 'LOWER',
424
- 'MAP', 'MATCH', 'MAX', 'MAXVALUE', 'MESSAGE_LENGTH', 'MESSAGE_OCTET_LENGTH',
425
- 'MESSAGE_TEXT', 'METHOD', 'MIN', 'MINUTE', 'MINVALUE', 'MOD', 'MODE', 'MODIFIES',
426
- 'MODIFY', 'MONTH', 'MORE', 'MOVE', 'MUMPS', 'NAMES', 'NATIONAL', 'NATURAL', 'NCHAR',
427
- 'NCLOB', 'NEW', 'NEXT', 'NO', 'NOCREATEDB', 'NOCREATEUSER', 'NONE', 'NOT', 'NOTHING',
428
- 'NOTIFY', 'NOTNULL', 'NULL', 'NULLABLE', 'NULLIF', 'OBJECT', 'OCTET_LENGTH', 'OF', 'OFF',
429
- 'OFFSET', 'OIDS', 'OLD', 'ON', 'ONLY', 'OPEN', 'OPERATION', 'OPERATOR', 'OPTION', 'OPTIONS',
430
- 'OR', 'ORDER', 'ORDINALITY', 'OUT', 'OUTER', 'OUTPUT', 'OVERLAPS', 'OVERLAY', 'OVERRIDING',
431
- 'OWNER', 'PAD', 'PARAMETER', 'PARAMETERS', 'PARAMETER_MODE', 'PARAMATER_NAME',
432
- 'PARAMATER_ORDINAL_POSITION', 'PARAMETER_SPECIFIC_CATALOG',
433
- 'PARAMETER_SPECIFIC_NAME', 'PARAMATER_SPECIFIC_SCHEMA', 'PARTIAL',
434
- 'PASCAL', 'PENDANT', 'PLACING', 'PLI', 'POSITION', 'POSTFIX', 'PRECISION', 'PREFIX',
435
- 'PREORDER', 'PREPARE', 'PRESERVE', 'PRIMARY', 'PRIOR', 'PRIVILEGES', 'PROCEDURAL',
436
- 'PROCEDURE', 'PUBLIC', 'READ', 'READS', 'RECHECK', 'RECURSIVE', 'REF', 'REFERENCES',
437
- 'REFERENCING', 'REINDEX', 'RELATIVE', 'RENAME', 'REPEATABLE', 'REPLACE', 'RESET',
438
- 'RESTART', 'RESTRICT', 'RESULT', 'RETURN', 'RETURNED_LENGTH',
439
- 'RETURNED_OCTET_LENGTH', 'RETURNED_SQLSTATE', 'RETURNS', 'REVOKE', 'RIGHT',
440
- 'ROLE', 'ROLLBACK', 'ROLLUP', 'ROUTINE', 'ROUTINE_CATALOG', 'ROUTINE_NAME',
441
- 'ROUTINE_SCHEMA', 'ROW', 'ROWS', 'ROW_COUNT', 'RULE', 'SAVE_POINT', 'SCALE', 'SCHEMA',
442
- 'SCHEMA_NAME', 'SCOPE', 'SCROLL', 'SEARCH', 'SECOND', 'SECURITY', 'SELECT', 'SELF',
443
- 'SENSITIVE', 'SERIALIZABLE', 'SERVER_NAME', 'SESSION', 'SESSION_USER', 'SET',
444
- 'SETOF', 'SETS', 'SHARE', 'SHOW', 'SIMILAR', 'SIMPLE', 'SIZE', 'SOME', 'SOURCE', 'SPACE',
445
- 'SPECIFIC', 'SPECIFICTYPE', 'SPECIFIC_NAME', 'SQL', 'SQLCODE', 'SQLERROR',
446
- 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNINIG', 'STABLE', 'START', 'STATE', 'STATEMENT',
447
- 'STATIC', 'STATISTICS', 'STDIN', 'STDOUT', 'STORAGE', 'STRICT', 'STRUCTURE', 'STYPE',
448
- 'SUBCLASS_ORIGIN', 'SUBLIST', 'SUBSTRING', 'SUM', 'SYMMETRIC', 'SYSID', 'SYSTEM',
449
- 'SYSTEM_USER', 'TABLE', 'TABLE_NAME', ' TEMP', 'TEMPLATE', 'TEMPORARY', 'TERMINATE',
450
- 'THAN', 'THEN', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TO', 'TOAST',
451
- 'TRAILING', 'TRANSATION', 'TRANSACTIONS_COMMITTED',
452
- 'TRANSACTIONS_ROLLED_BACK', 'TRANSATION_ACTIVE', 'TRANSFORM',
453
- 'TRANSFORMS', 'TRANSLATE', 'TRANSLATION', 'TREAT', 'TRIGGER', 'TRIGGER_CATALOG',
454
- 'TRIGGER_NAME', 'TRIGGER_SCHEMA', 'TRIM', 'TRUE', 'TRUNCATE', 'TRUSTED', 'TYPE',
455
- 'UNCOMMITTED', 'UNDER', 'UNENCRYPTED', 'UNION', 'UNIQUE', 'UNKNOWN', 'UNLISTEN',
456
- 'UNNAMED', 'UNNEST', 'UNTIL', 'UPDATE', 'UPPER', 'USAGE', 'USER',
457
- 'USER_DEFINED_TYPE_CATALOG', 'USER_DEFINED_TYPE_NAME',
458
- 'USER_DEFINED_TYPE_SCHEMA', 'USING', 'VACUUM', 'VALID', 'VALIDATOR', 'VALUES',
459
- 'VARIABLE', 'VERBOSE', 'VERSION', 'VIEW', 'VOLATILE', 'WHEN', 'WHENEVER', 'WHERE',
460
- 'WITH', 'WITHOUT', 'WORK', 'WRITE', 'YEAR', 'ZONE'), suffix=r'\b'),
410
+ 'DEALLOCATE', 'DECLARE', 'DEFAULT', 'DEFAULTS', 'DEFERRABLE',
411
+ 'DEFERRED', 'DEFINED', 'DEFINER', 'DELETE', 'DELIMITER', 'DELIMITERS',
412
+ 'DEREF', 'DESC', 'DESCRIBE', 'DESCRIPTOR', 'DESTROY', 'DESTRUCTOR',
413
+ 'DETERMINISTIC', 'DIAGNOSTICS', 'DICTIONARY', 'DISCONNECT', 'DISPATCH',
414
+ 'DISTINCT', 'DO', 'DOMAIN', 'DROP', 'DYNAMIC', 'DYNAMIC_FUNCTION',
415
+ 'DYNAMIC_FUNCTION_CODE', 'EACH', 'ELSE', 'ELSIF', 'ENCODING',
416
+ 'ENCRYPTED', 'END', 'END-EXEC', 'EQUALS', 'ESCAPE', 'EVERY', 'EXCEPTION',
417
+ 'EXCEPT', 'EXCLUDING', 'EXCLUSIVE', 'EXEC', 'EXECUTE', 'EXISTING',
418
+ 'EXISTS', 'EXPLAIN', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FETCH', 'FINAL',
419
+ 'FIRST', 'FOR', 'FORCE', 'FOREIGN', 'FORTRAN', 'FORWARD', 'FOUND', 'FREE',
420
+ 'FREEZE', 'FROM', 'FULL', 'FUNCTION', 'G', 'GENERAL', 'GENERATED', 'GET',
421
+ 'GLOBAL', 'GO', 'GOTO', 'GRANT', 'GRANTED', 'GROUP', 'GROUPING',
422
+ 'HANDLER', 'HAVING', 'HIERARCHY', 'HOLD', 'HOST', 'IDENTITY', 'IF',
423
+ 'IGNORE', 'ILIKE', 'IMMEDIATE', 'IMMEDIATELY', 'IMMUTABLE', 'IMPLEMENTATION', 'IMPLICIT',
424
+ 'IN', 'INCLUDING', 'INCREMENT', 'INDEX', 'INDITCATOR', 'INFIX',
425
+ 'INHERITS', 'INITIALIZE', 'INITIALLY', 'INNER', 'INOUT', 'INPUT',
426
+ 'INSENSITIVE', 'INSERT', 'INSTANTIABLE', 'INSTEAD', 'INTERSECT', 'INTO',
427
+ 'INVOKER', 'IS', 'ISNULL', 'ISOLATION', 'ITERATE', 'JOIN', 'KEY',
428
+ 'KEY_MEMBER', 'KEY_TYPE', 'LANCOMPILER', 'LANGUAGE', 'LARGE', 'LAST',
429
+ 'LATERAL', 'LEADING', 'LEFT', 'LENGTH', 'LESS', 'LEVEL', 'LIKE', 'LIMIT',
430
+ 'LISTEN', 'LOAD', 'LOCAL', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATION',
431
+ 'LOCATOR', 'LOCK', 'LOWER', 'MAP', 'MATCH', 'MAX', 'MAXVALUE',
432
+ 'MESSAGE_LENGTH', 'MESSAGE_OCTET_LENGTH', 'MESSAGE_TEXT', 'METHOD', 'MIN',
433
+ 'MINUTE', 'MINVALUE', 'MOD', 'MODE', 'MODIFIES', 'MODIFY', 'MONTH',
434
+ 'MORE', 'MOVE', 'MUMPS', 'NAMES', 'NATIONAL', 'NATURAL', 'NCHAR', 'NCLOB',
435
+ 'NEW', 'NEXT', 'NO', 'NOCREATEDB', 'NOCREATEUSER', 'NONE', 'NOT',
436
+ 'NOTHING', 'NOTIFY', 'NOTNULL', 'NULL', 'NULLABLE', 'NULLIF', 'OBJECT',
437
+ 'OCTET_LENGTH', 'OF', 'OFF', 'OFFSET', 'OIDS', 'OLD', 'ON', 'ONLY',
438
+ 'OPEN', 'OPERATION', 'OPERATOR', 'OPTION', 'OPTIONS', 'OR', 'ORDER',
439
+ 'ORDINALITY', 'OUT', 'OUTER', 'OUTPUT', 'OVERLAPS', 'OVERLAY',
440
+ 'OVERRIDING', 'OWNER', 'PAD', 'PARAMETER', 'PARAMETERS', 'PARAMETER_MODE',
441
+ 'PARAMETER_NAME', 'PARAMETER_ORDINAL_POSITION',
442
+ 'PARAMETER_SPECIFIC_CATALOG', 'PARAMETER_SPECIFIC_NAME',
443
+ 'PARAMETER_SPECIFIC_SCHEMA', 'PARTIAL', 'PASCAL', 'PENDANT', 'PERIOD', 'PLACING',
444
+ 'PLI', 'POSITION', 'POSTFIX', 'PRECEEDS', 'PRECISION', 'PREFIX', 'PREORDER',
445
+ 'PREPARE', 'PRESERVE', 'PRIMARY', 'PRIOR', 'PRIVILEGES', 'PROCEDURAL',
446
+ 'PROCEDURE', 'PUBLIC', 'READ', 'READS', 'RECHECK', 'RECURSIVE', 'REF',
447
+ 'REFERENCES', 'REFERENCING', 'REINDEX', 'RELATIVE', 'RENAME',
448
+ 'REPEATABLE', 'REPLACE', 'RESET', 'RESTART', 'RESTRICT', 'RESULT',
449
+ 'RETURN', 'RETURNED_LENGTH', 'RETURNED_OCTET_LENGTH', 'RETURNED_SQLSTATE',
450
+ 'RETURNS', 'REVOKE', 'RIGHT', 'ROLE', 'ROLLBACK', 'ROLLUP', 'ROUTINE',
451
+ 'ROUTINE_CATALOG', 'ROUTINE_NAME', 'ROUTINE_SCHEMA', 'ROW', 'ROWS',
452
+ 'ROW_COUNT', 'RULE', 'SAVE_POINT', 'SCALE', 'SCHEMA', 'SCHEMA_NAME',
453
+ 'SCOPE', 'SCROLL', 'SEARCH', 'SECOND', 'SECURITY', 'SELECT', 'SELF',
454
+ 'SENSITIVE', 'SERIALIZABLE', 'SERVER_NAME', 'SESSION', 'SESSION_USER',
455
+ 'SET', 'SETOF', 'SETS', 'SHARE', 'SHOW', 'SIMILAR', 'SIMPLE', 'SIZE',
456
+ 'SOME', 'SOURCE', 'SPACE', 'SPECIFIC', 'SPECIFICTYPE', 'SPECIFIC_NAME',
457
+ 'SQL', 'SQLCODE', 'SQLERROR', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNINIG',
458
+ 'STABLE', 'START', 'STATE', 'STATEMENT', 'STATIC', 'STATISTICS', 'STDIN',
459
+ 'STDOUT', 'STORAGE', 'STRICT', 'STRUCTURE', 'STYPE', 'SUBCLASS_ORIGIN',
460
+ 'SUBLIST', 'SUBSTRING', 'SUCCEEDS', 'SUM', 'SYMMETRIC', 'SYSID', 'SYSTEM',
461
+ 'SYSTEM_USER', 'TABLE', 'TABLE_NAME', ' TEMP', 'TEMPLATE', 'TEMPORARY',
462
+ 'TERMINATE', 'THAN', 'THEN', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR',
463
+ 'TIMEZONE_MINUTE', 'TO', 'TOAST', 'TRAILING', 'TRANSACTION',
464
+ 'TRANSACTIONS_COMMITTED', 'TRANSACTIONS_ROLLED_BACK', 'TRANSACTION_ACTIVE',
465
+ 'TRANSFORM', 'TRANSFORMS', 'TRANSLATE', 'TRANSLATION', 'TREAT', 'TRIGGER',
466
+ 'TRIGGER_CATALOG', 'TRIGGER_NAME', 'TRIGGER_SCHEMA', 'TRIM', 'TRUE',
467
+ 'TRUNCATE', 'TRUSTED', 'TYPE', 'UNCOMMITTED', 'UNDER', 'UNENCRYPTED',
468
+ 'UNION', 'UNIQUE', 'UNKNOWN', 'UNLISTEN', 'UNNAMED', 'UNNEST', 'UNTIL',
469
+ 'UPDATE', 'UPPER', 'USAGE', 'USER', 'USER_DEFINED_TYPE_CATALOG',
470
+ 'USER_DEFINED_TYPE_NAME', 'USER_DEFINED_TYPE_SCHEMA', 'USING', 'VACUUM',
471
+ 'VALID', 'VALIDATOR', 'VALUES', 'VARIABLE', 'VERBOSE',
472
+ 'VERSION', 'VERSIONS', 'VERSIONING', 'VIEW',
473
+ 'VOLATILE', 'WHEN', 'WHENEVER', 'WHERE', 'WITH', 'WITHOUT', 'WORK',
474
+ 'WRITE', 'YEAR', 'ZONE'), suffix=r'\b'),
461
475
  Keyword),
462
476
  (words((
463
- 'ARRAY', 'BIGINT', 'BINARY', 'BIT', 'BLOB', 'BOOLEAN', 'CHAR', 'CHARACTER', 'DATE',
464
- 'DEC', 'DECIMAL', 'FLOAT', 'INT', 'INTEGER', 'INTERVAL', 'NUMBER', 'NUMERIC', 'REAL',
465
- 'SERIAL', 'SMALLINT', 'VARCHAR', 'VARYING', 'INT8', 'SERIAL8', 'TEXT'), suffix=r'\b'),
477
+ 'ARRAY', 'BIGINT', 'BINARY', 'BIT', 'BLOB', 'BOOLEAN', 'CHAR',
478
+ 'CHARACTER', 'DATE', 'DEC', 'DECIMAL', 'FLOAT', 'INT', 'INTEGER',
479
+ 'INTERVAL', 'NUMBER', 'NUMERIC', 'REAL', 'SERIAL', 'SMALLINT',
480
+ 'VARCHAR', 'VARYING', 'INT8', 'SERIAL8', 'TEXT'), suffix=r'\b'),
466
481
  Name.Builtin),
467
482
  (r'[+*/<>=~!@#%^&|`?-]', Operator),
468
483
  (r'[0-9]+', Number.Integer),
@@ -499,7 +514,7 @@ class TransactSqlLexer(RegexLexer):
499
514
  tokens = {
500
515
  'root': [
501
516
  (r'\s+', Whitespace),
502
- (r'--(?m).*?$\n?', Comment.Single),
517
+ (r'--.*?$\n?', Comment.Single),
503
518
  (r'/\*', Comment.Multiline, 'multiline-comments'),
504
519
  (words(_tsql_builtins.OPERATORS), Operator),
505
520
  (words(_tsql_builtins.OPERATOR_WORDS, suffix=r'\b'), Operator.Word),
@@ -536,10 +551,42 @@ class TransactSqlLexer(RegexLexer):
536
551
  ]
537
552
  }
538
553
 
554
+ def analyse_text(text):
555
+ rating = 0
556
+ if tsql_declare_re.search(text):
557
+ # Found T-SQL variable declaration.
558
+ rating = 1.0
559
+ else:
560
+ name_between_backtick_count = len(
561
+ name_between_backtick_re.findall(text))
562
+ name_between_bracket_count = len(
563
+ name_between_bracket_re.findall(text))
564
+ # We need to check if there are any names using
565
+ # backticks or brackets, as otherwise both are 0
566
+ # and 0 >= 2 * 0, so we would always assume it's true
567
+ dialect_name_count = name_between_backtick_count + name_between_bracket_count
568
+ if dialect_name_count >= 1 and \
569
+ name_between_bracket_count >= 2 * name_between_backtick_count:
570
+ # Found at least twice as many [name] as `name`.
571
+ rating += 0.5
572
+ elif name_between_bracket_count > name_between_backtick_count:
573
+ rating += 0.2
574
+ elif name_between_bracket_count > 0:
575
+ rating += 0.1
576
+ if tsql_variable_re.search(text) is not None:
577
+ rating += 0.1
578
+ if tsql_go_re.search(text) is not None:
579
+ rating += 0.1
580
+ return rating
581
+
539
582
 
540
583
  class MySqlLexer(RegexLexer):
541
- """
542
- Special lexer for MySQL.
584
+ """The Oracle MySQL lexer.
585
+
586
+ This lexer does not attempt to maintain strict compatibility with
587
+ MariaDB syntax or keywords. Although MySQL and MariaDB's common code
588
+ history suggests there may be significant overlap between the two,
589
+ compatibility between the two is not a target for this lexer.
543
590
  """
544
591
 
545
592
  name = 'MySQL'
@@ -550,65 +597,171 @@ class MySqlLexer(RegexLexer):
550
597
  tokens = {
551
598
  'root': [
552
599
  (r'\s+', Text),
553
- (r'(#|--\s+).*\n?', Comment.Single),
554
- (r'/\*', Comment.Multiline, 'multiline-comments'),
555
- (r'[0-9]+', Number.Integer),
556
- (r'[0-9]*\.[0-9]+(e[+-][0-9]+)', Number.Float),
557
- (r"'(\\\\|\\'|''|[^'])*'", String.Single),
558
- (r'"(\\\\|\\"|""|[^"])*"', String.Double),
559
- (r"`(\\\\|\\`|``|[^`])*`", String.Symbol),
560
- (r'[+*/<>=~!@#%^&|`?-]', Operator),
561
- (r'\b(tinyint|smallint|mediumint|int|integer|bigint|date|'
562
- r'datetime|time|bit|bool|tinytext|mediumtext|longtext|text|'
563
- r'tinyblob|mediumblob|longblob|blob|float|double|double\s+'
564
- r'precision|real|numeric|dec|decimal|timestamp|year|char|'
565
- r'varchar|varbinary|varcharacter|enum|set)(\b\s*)(\()?',
566
- bygroups(Keyword.Type, Text, Punctuation)),
567
- (r'\b(add|all|alter|analyze|and|as|asc|asensitive|before|between|'
568
- r'bigint|binary|blob|both|by|call|cascade|case|change|char|'
569
- r'character|check|collate|column|condition|constraint|continue|'
570
- r'convert|create|cross|current_date|current_time|'
571
- r'current_timestamp|current_user|cursor|database|databases|'
572
- r'day_hour|day_microsecond|day_minute|day_second|dec|decimal|'
573
- r'declare|default|delayed|delete|desc|describe|deterministic|'
574
- r'distinct|distinctrow|div|double|drop|dual|each|else|elseif|'
575
- r'enclosed|escaped|exists|exit|explain|fetch|flush|float|float4|'
576
- r'float8|for|force|foreign|from|fulltext|grant|group|having|'
577
- r'high_priority|hour_microsecond|hour_minute|hour_second|if|'
578
- r'ignore|in|index|infile|inner|inout|insensitive|insert|int|'
579
- r'int1|int2|int3|int4|int8|integer|interval|into|is|iterate|'
580
- r'join|key|keys|kill|leading|leave|left|like|limit|lines|load|'
581
- r'localtime|localtimestamp|lock|long|loop|low_priority|match|'
582
- r'minute_microsecond|minute_second|mod|modifies|natural|'
583
- r'no_write_to_binlog|not|numeric|on|optimize|option|optionally|'
584
- r'or|order|out|outer|outfile|precision|primary|procedure|purge|'
585
- r'raid0|read|reads|real|references|regexp|release|rename|repeat|'
586
- r'replace|require|restrict|return|revoke|right|rlike|schema|'
587
- r'schemas|second_microsecond|select|sensitive|separator|set|'
588
- r'show|smallint|soname|spatial|specific|sql|sql_big_result|'
589
- r'sql_calc_found_rows|sql_small_result|sqlexception|sqlstate|'
590
- r'sqlwarning|ssl|starting|straight_join|table|terminated|then|'
591
- r'to|trailing|trigger|undo|union|unique|unlock|unsigned|update|'
592
- r'usage|use|using|utc_date|utc_time|utc_timestamp|values|'
593
- r'varying|when|where|while|with|write|x509|xor|year_month|'
594
- r'zerofill)\b', Keyword),
595
- # TODO: this list is not complete
596
- (r'\b(auto_increment|engine|charset|tables)\b', Keyword.Pseudo),
597
- (r'(true|false|null)', Name.Constant),
598
- (r'([a-z_]\w*)(\s*)(\()',
600
+
601
+ # Comments
602
+ (r'(?:#|--\s+).*', Comment.Single),
603
+ (r'/\*\+', Comment.Special, 'optimizer-hints'),
604
+ (r'/\*', Comment.Multiline, 'multiline-comment'),
605
+
606
+ # Hexadecimal literals
607
+ (r"x'([0-9a-f]{2})+'", Number.Hex), # MySQL requires paired hex characters in this form.
608
+ (r'0x[0-9a-f]+', Number.Hex),
609
+
610
+ # Binary literals
611
+ (r"b'[01]+'", Number.Bin),
612
+ (r'0b[01]+', Number.Bin),
613
+
614
+ # Numeric literals
615
+ (r'[0-9]+\.[0-9]*(e[+-]?[0-9]+)?', Number.Float), # Mandatory integer, optional fraction and exponent
616
+ (r'[0-9]*\.[0-9]+(e[+-]?[0-9]+)?', Number.Float), # Mandatory fraction, optional integer and exponent
617
+ (r'[0-9]+e[+-]?[0-9]+', Number.Float), # Exponents with integer significands are still floats
618
+ (r'[0-9]+(?=[^0-9a-z$_\u0080-\uffff])', Number.Integer), # Integers that are not in a schema object name
619
+
620
+ # Date literals
621
+ (r"\{\s*d\s*(?P<quote>['\"])\s*\d{2}(\d{2})?.?\d{2}.?\d{2}\s*(?P=quote)\s*\}",
622
+ Literal.Date),
623
+
624
+ # Time literals
625
+ (r"\{\s*t\s*(?P<quote>['\"])\s*(?:\d+\s+)?\d{1,2}.?\d{1,2}.?\d{1,2}(\.\d*)?\s*(?P=quote)\s*\}",
626
+ Literal.Date),
627
+
628
+ # Timestamp literals
629
+ (
630
+ r"\{\s*ts\s*(?P<quote>['\"])\s*"
631
+ r"\d{2}(?:\d{2})?.?\d{2}.?\d{2}" # Date part
632
+ r"\s+" # Whitespace between date and time
633
+ r"\d{1,2}.?\d{1,2}.?\d{1,2}(\.\d*)?" # Time part
634
+ r"\s*(?P=quote)\s*\}",
635
+ Literal.Date
636
+ ),
637
+
638
+ # String literals
639
+ (r"'", String.Single, 'single-quoted-string'),
640
+ (r'"', String.Double, 'double-quoted-string'),
641
+
642
+ # Variables
643
+ (r'@@(?:global\.|persist\.|persist_only\.|session\.)?[a-z_]+', Name.Variable),
644
+ (r'@[a-z0-9_$.]+', Name.Variable),
645
+ (r"@'", Name.Variable, 'single-quoted-variable'),
646
+ (r'@"', Name.Variable, 'double-quoted-variable'),
647
+ (r"@`", Name.Variable, 'backtick-quoted-variable'),
648
+ (r'\?', Name.Variable), # For demonstrating prepared statements
649
+
650
+ # Operators
651
+ (r'[!%&*+/:<=>^|~-]+', Operator),
652
+
653
+ # Exceptions; these words tokenize differently in different contexts.
654
+ (r'\b(set)(?!\s*\()', Keyword),
655
+ (r'\b(character)(\s+)(set)\b', bygroups(Keyword, Text, Keyword)),
656
+ # In all other known cases, "SET" is tokenized by MYSQL_DATATYPES.
657
+
658
+ (words(MYSQL_CONSTANTS, prefix=r'\b', suffix=r'\b'), Name.Constant),
659
+ (words(MYSQL_DATATYPES, prefix=r'\b', suffix=r'\b'), Keyword.Type),
660
+ (words(MYSQL_KEYWORDS, prefix=r'\b', suffix=r'\b'), Keyword),
661
+ (words(MYSQL_FUNCTIONS, prefix=r'\b', suffix=r'\b(\s*)(\()'),
599
662
  bygroups(Name.Function, Text, Punctuation)),
600
- (r'[a-z_]\w*', Name),
601
- (r'@[a-z0-9]*[._]*[a-z0-9]*', Name.Variable),
602
- (r'[;:()\[\],.]', Punctuation)
663
+
664
+ # Schema object names
665
+ #
666
+ # Note: Although the first regex supports unquoted all-numeric
667
+ # identifiers, this will not be a problem in practice because
668
+ # numeric literals have already been handled above.
669
+ #
670
+ ('[0-9a-z$_\u0080-\uffff]+', Name),
671
+ (r'`', Name.Quoted, 'schema-object-name'),
672
+
673
+ # Punctuation
674
+ (r'[(),.;]', Punctuation),
603
675
  ],
604
- 'multiline-comments': [
605
- (r'/\*', Comment.Multiline, 'multiline-comments'),
676
+
677
+ # Multiline comment substates
678
+ # ---------------------------
679
+
680
+ 'optimizer-hints': [
681
+ (r'[^*a-z]+', Comment.Special),
682
+ (r'\*/', Comment.Special, '#pop'),
683
+ (words(MYSQL_OPTIMIZER_HINTS, suffix=r'\b'), Comment.Preproc),
684
+ ('[a-z]+', Comment.Special),
685
+ (r'\*', Comment.Special),
686
+ ],
687
+
688
+ 'multiline-comment': [
689
+ (r'[^*]+', Comment.Multiline),
606
690
  (r'\*/', Comment.Multiline, '#pop'),
607
- (r'[^/*]+', Comment.Multiline),
608
- (r'[/*]', Comment.Multiline)
609
- ]
691
+ (r'\*', Comment.Multiline),
692
+ ],
693
+
694
+ # String substates
695
+ # ----------------
696
+
697
+ 'single-quoted-string': [
698
+ (r"[^'\\]+", String.Single),
699
+ (r"''", String.Escape),
700
+ (r"""\\[0'"bnrtZ\\%_]""", String.Escape),
701
+ (r"'", String.Single, '#pop'),
702
+ ],
703
+
704
+ 'double-quoted-string': [
705
+ (r'[^"\\]+', String.Double),
706
+ (r'""', String.Escape),
707
+ (r"""\\[0'"bnrtZ\\%_]""", String.Escape),
708
+ (r'"', String.Double, '#pop'),
709
+ ],
710
+
711
+ # Variable substates
712
+ # ------------------
713
+
714
+ 'single-quoted-variable': [
715
+ (r"[^']+", Name.Variable),
716
+ (r"''", Name.Variable),
717
+ (r"'", Name.Variable, '#pop'),
718
+ ],
719
+
720
+ 'double-quoted-variable': [
721
+ (r'[^"]+', Name.Variable),
722
+ (r'""', Name.Variable),
723
+ (r'"', Name.Variable, '#pop'),
724
+ ],
725
+
726
+ 'backtick-quoted-variable': [
727
+ (r'[^`]+', Name.Variable),
728
+ (r'``', Name.Variable),
729
+ (r'`', Name.Variable, '#pop'),
730
+ ],
731
+
732
+ # Schema object name substates
733
+ # ----------------------------
734
+ #
735
+ # "Name.Quoted" and "Name.Quoted.Escape" are non-standard but
736
+ # formatters will style them as "Name" by default but add
737
+ # additional styles based on the token name. This gives users
738
+ # flexibility to add custom styles as desired.
739
+ #
740
+ 'schema-object-name': [
741
+ (r'[^`]+', Name.Quoted),
742
+ (r'``', Name.Quoted.Escape),
743
+ (r'`', Name.Quoted, '#pop'),
744
+ ],
610
745
  }
611
746
 
747
+ def analyse_text(text):
748
+ rating = 0
749
+ name_between_backtick_count = len(
750
+ name_between_backtick_re.findall(text))
751
+ name_between_bracket_count = len(
752
+ name_between_bracket_re.findall(text))
753
+ # Same logic as above in the TSQL analysis
754
+ dialect_name_count = name_between_backtick_count + name_between_bracket_count
755
+ if dialect_name_count >= 1 and \
756
+ name_between_backtick_count >= 2 * name_between_bracket_count:
757
+ # Found at least twice as many `name` as [name].
758
+ rating += 0.5
759
+ elif name_between_backtick_count > name_between_bracket_count:
760
+ rating += 0.2
761
+ elif name_between_backtick_count > 0:
762
+ rating += 0.1
763
+ return rating
764
+
612
765
 
613
766
  class SqliteConsoleLexer(Lexer):
614
767
  """
@@ -635,9 +788,8 @@ class SqliteConsoleLexer(Lexer):
635
788
  curcode += line[8:]
636
789
  else:
637
790
  if curcode:
638
- for item in do_insertions(insertions,
639
- sql.get_tokens_unprocessed(curcode)):
640
- yield item
791
+ yield from do_insertions(insertions,
792
+ sql.get_tokens_unprocessed(curcode))
641
793
  curcode = ''
642
794
  insertions = []
643
795
  if line.startswith('SQL error: '):
@@ -645,9 +797,8 @@ class SqliteConsoleLexer(Lexer):
645
797
  else:
646
798
  yield (match.start(), Generic.Output, line)
647
799
  if curcode:
648
- for item in do_insertions(insertions,
649
- sql.get_tokens_unprocessed(curcode)):
650
- yield item
800
+ yield from do_insertions(insertions,
801
+ sql.get_tokens_unprocessed(curcode))
651
802
 
652
803
 
653
804
  class RqlLexer(RegexLexer):