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