pygments.rb 2.0.0.rc3 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (286) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +13 -1
  3. data/.gitignore +0 -1
  4. data/.rubocop.yml +16 -0
  5. data/CHANGELOG.adoc +19 -0
  6. data/README.adoc +1 -3
  7. data/Rakefile +0 -14
  8. data/bench.rb +11 -6
  9. data/lib/pygments/lexer.rb +84 -62
  10. data/lib/pygments/mentos.py +7 -49
  11. data/lib/pygments/popen.rb +133 -173
  12. data/lib/pygments/version.rb +1 -1
  13. data/lib/pygments.rb +15 -6
  14. data/pygments.rb.gemspec +16 -11
  15. data/test/test_pygments.rb +19 -40
  16. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/AUTHORS +13 -1
  17. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/INSTALLER +0 -0
  18. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/LICENSE +1 -1
  19. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/METADATA +8 -9
  20. data/vendor/pygments-main/Pygments-2.10.0.dist-info/RECORD +524 -0
  21. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/REQUESTED +0 -0
  22. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/WHEEL +0 -0
  23. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/entry_points.txt +0 -0
  24. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/top_level.txt +0 -0
  25. data/vendor/pygments-main/bin/pygmentize +1 -1
  26. data/vendor/pygments-main/pygments/__init__.py +2 -3
  27. data/vendor/pygments-main/pygments/__main__.py +1 -2
  28. data/vendor/pygments-main/pygments/cmdline.py +179 -159
  29. data/vendor/pygments-main/pygments/console.py +1 -2
  30. data/vendor/pygments-main/pygments/filter.py +1 -2
  31. data/vendor/pygments-main/pygments/filters/__init__.py +1 -2
  32. data/vendor/pygments-main/pygments/formatter.py +1 -2
  33. data/vendor/pygments-main/pygments/formatters/__init__.py +2 -3
  34. data/vendor/pygments-main/pygments/formatters/_mapping.py +2 -2
  35. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -2
  36. data/vendor/pygments-main/pygments/formatters/html.py +53 -25
  37. data/vendor/pygments-main/pygments/formatters/img.py +24 -10
  38. data/vendor/pygments-main/pygments/formatters/irc.py +1 -2
  39. data/vendor/pygments-main/pygments/formatters/latex.py +8 -9
  40. data/vendor/pygments-main/pygments/formatters/other.py +7 -10
  41. data/vendor/pygments-main/pygments/formatters/pangomarkup.py +83 -0
  42. data/vendor/pygments-main/pygments/formatters/rtf.py +1 -2
  43. data/vendor/pygments-main/pygments/formatters/svg.py +5 -4
  44. data/vendor/pygments-main/pygments/formatters/terminal.py +1 -2
  45. data/vendor/pygments-main/pygments/formatters/terminal256.py +24 -3
  46. data/vendor/pygments-main/pygments/lexer.py +7 -6
  47. data/vendor/pygments-main/pygments/lexers/__init__.py +2 -3
  48. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1 -2
  49. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +1 -2
  50. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +16 -12
  51. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +56 -16
  52. data/vendor/pygments-main/pygments/lexers/_julia_builtins.py +401 -0
  53. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +1 -2
  54. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +1 -2
  55. data/vendor/pygments-main/pygments/lexers/_mapping.py +73 -54
  56. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1 -2
  57. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +2 -3
  58. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +439 -386
  59. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +1 -2
  60. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +1 -2
  61. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +1 -2
  62. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1 -2
  63. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +1 -2
  64. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +91 -55
  65. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -2
  66. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +1 -2
  67. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +1 -2
  68. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -2
  69. data/vendor/pygments-main/pygments/lexers/actionscript.py +9 -10
  70. data/vendor/pygments-main/pygments/lexers/agile.py +1 -2
  71. data/vendor/pygments-main/pygments/lexers/algebra.py +1 -2
  72. data/vendor/pygments-main/pygments/lexers/ambient.py +3 -4
  73. data/vendor/pygments-main/pygments/lexers/amdgpu.py +53 -0
  74. data/vendor/pygments-main/pygments/lexers/ampl.py +1 -2
  75. data/vendor/pygments-main/pygments/lexers/apdlexer.py +448 -0
  76. data/vendor/pygments-main/pygments/lexers/apl.py +7 -5
  77. data/vendor/pygments-main/pygments/lexers/archetype.py +2 -3
  78. data/vendor/pygments-main/pygments/lexers/arrow.py +1 -2
  79. data/vendor/pygments-main/pygments/lexers/asc.py +51 -0
  80. data/vendor/pygments-main/pygments/lexers/asm.py +87 -60
  81. data/vendor/pygments-main/pygments/lexers/automation.py +8 -3
  82. data/vendor/pygments-main/pygments/lexers/bare.py +1 -2
  83. data/vendor/pygments-main/pygments/lexers/basic.py +3 -4
  84. data/vendor/pygments-main/pygments/lexers/bibtex.py +3 -4
  85. data/vendor/pygments-main/pygments/lexers/boa.py +4 -5
  86. data/vendor/pygments-main/pygments/lexers/business.py +3 -4
  87. data/vendor/pygments-main/pygments/lexers/c_cpp.py +61 -36
  88. data/vendor/pygments-main/pygments/lexers/c_like.py +103 -5
  89. data/vendor/pygments-main/pygments/lexers/capnproto.py +1 -2
  90. data/vendor/pygments-main/pygments/lexers/cddl.py +190 -0
  91. data/vendor/pygments-main/pygments/lexers/chapel.py +52 -29
  92. data/vendor/pygments-main/pygments/lexers/clean.py +7 -8
  93. data/vendor/pygments-main/pygments/lexers/compiled.py +1 -2
  94. data/vendor/pygments-main/pygments/lexers/configs.py +139 -48
  95. data/vendor/pygments-main/pygments/lexers/console.py +1 -2
  96. data/vendor/pygments-main/pygments/lexers/crystal.py +53 -79
  97. data/vendor/pygments-main/pygments/lexers/csound.py +3 -4
  98. data/vendor/pygments-main/pygments/lexers/css.py +11 -8
  99. data/vendor/pygments-main/pygments/lexers/d.py +3 -4
  100. data/vendor/pygments-main/pygments/lexers/dalvik.py +1 -2
  101. data/vendor/pygments-main/pygments/lexers/data.py +2 -3
  102. data/vendor/pygments-main/pygments/lexers/devicetree.py +2 -3
  103. data/vendor/pygments-main/pygments/lexers/diff.py +1 -2
  104. data/vendor/pygments-main/pygments/lexers/dotnet.py +7 -8
  105. data/vendor/pygments-main/pygments/lexers/dsls.py +3 -4
  106. data/vendor/pygments-main/pygments/lexers/dylan.py +1 -2
  107. data/vendor/pygments-main/pygments/lexers/ecl.py +4 -6
  108. data/vendor/pygments-main/pygments/lexers/eiffel.py +2 -3
  109. data/vendor/pygments-main/pygments/lexers/elm.py +1 -2
  110. data/vendor/pygments-main/pygments/lexers/email.py +1 -2
  111. data/vendor/pygments-main/pygments/lexers/erlang.py +2 -3
  112. data/vendor/pygments-main/pygments/lexers/esoteric.py +1 -2
  113. data/vendor/pygments-main/pygments/lexers/ezhil.py +1 -2
  114. data/vendor/pygments-main/pygments/lexers/factor.py +3 -4
  115. data/vendor/pygments-main/pygments/lexers/fantom.py +1 -2
  116. data/vendor/pygments-main/pygments/lexers/felix.py +1 -2
  117. data/vendor/pygments-main/pygments/lexers/floscript.py +2 -3
  118. data/vendor/pygments-main/pygments/lexers/forth.py +2 -3
  119. data/vendor/pygments-main/pygments/lexers/fortran.py +9 -7
  120. data/vendor/pygments-main/pygments/lexers/foxpro.py +1 -2
  121. data/vendor/pygments-main/pygments/lexers/freefem.py +1 -2
  122. data/vendor/pygments-main/pygments/lexers/functional.py +1 -2
  123. data/vendor/pygments-main/pygments/lexers/futhark.py +111 -0
  124. data/vendor/pygments-main/pygments/lexers/gcodelexer.py +36 -0
  125. data/vendor/pygments-main/pygments/lexers/gdscript.py +1 -2
  126. data/vendor/pygments-main/pygments/lexers/go.py +3 -4
  127. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +1 -2
  128. data/vendor/pygments-main/pygments/lexers/graph.py +1 -2
  129. data/vendor/pygments-main/pygments/lexers/graphics.py +4 -5
  130. data/vendor/pygments-main/pygments/lexers/graphviz.py +58 -0
  131. data/vendor/pygments-main/pygments/lexers/gsql.py +92 -0
  132. data/vendor/pygments-main/pygments/lexers/haskell.py +5 -6
  133. data/vendor/pygments-main/pygments/lexers/haxe.py +4 -5
  134. data/vendor/pygments-main/pygments/lexers/hdl.py +2 -6
  135. data/vendor/pygments-main/pygments/lexers/hexdump.py +1 -2
  136. data/vendor/pygments-main/pygments/lexers/html.py +7 -8
  137. data/vendor/pygments-main/pygments/lexers/idl.py +1 -2
  138. data/vendor/pygments-main/pygments/lexers/igor.py +1 -2
  139. data/vendor/pygments-main/pygments/lexers/inferno.py +1 -2
  140. data/vendor/pygments-main/pygments/lexers/installers.py +3 -4
  141. data/vendor/pygments-main/pygments/lexers/int_fiction.py +1 -2
  142. data/vendor/pygments-main/pygments/lexers/iolang.py +2 -3
  143. data/vendor/pygments-main/pygments/lexers/j.py +2 -3
  144. data/vendor/pygments-main/pygments/lexers/javascript.py +170 -156
  145. data/vendor/pygments-main/pygments/lexers/jslt.py +94 -0
  146. data/vendor/pygments-main/pygments/lexers/julia.py +136 -185
  147. data/vendor/pygments-main/pygments/lexers/jvm.py +433 -307
  148. data/vendor/pygments-main/pygments/lexers/kuin.py +299 -0
  149. data/vendor/pygments-main/pygments/lexers/lisp.py +25 -23
  150. data/vendor/pygments-main/pygments/lexers/make.py +3 -4
  151. data/vendor/pygments-main/pygments/lexers/markup.py +13 -16
  152. data/vendor/pygments-main/pygments/lexers/math.py +1 -2
  153. data/vendor/pygments-main/pygments/lexers/matlab.py +2666 -93
  154. data/vendor/pygments-main/pygments/lexers/meson.py +155 -0
  155. data/vendor/pygments-main/pygments/lexers/mime.py +7 -23
  156. data/vendor/pygments-main/pygments/lexers/ml.py +8 -9
  157. data/vendor/pygments-main/pygments/lexers/modeling.py +1 -2
  158. data/vendor/pygments-main/pygments/lexers/modula2.py +3 -4
  159. data/vendor/pygments-main/pygments/lexers/monte.py +1 -2
  160. data/vendor/pygments-main/pygments/lexers/mosel.py +1 -2
  161. data/vendor/pygments-main/pygments/lexers/ncl.py +1 -2
  162. data/vendor/pygments-main/pygments/lexers/nimrod.py +2 -3
  163. data/vendor/pygments-main/pygments/lexers/nit.py +1 -2
  164. data/vendor/pygments-main/pygments/lexers/nix.py +1 -2
  165. data/vendor/pygments-main/pygments/lexers/oberon.py +1 -2
  166. data/vendor/pygments-main/pygments/lexers/objective.py +6 -7
  167. data/vendor/pygments-main/pygments/lexers/ooc.py +1 -2
  168. data/vendor/pygments-main/pygments/lexers/other.py +1 -2
  169. data/vendor/pygments-main/pygments/lexers/parasail.py +1 -2
  170. data/vendor/pygments-main/pygments/lexers/parsers.py +26 -27
  171. data/vendor/pygments-main/pygments/lexers/pascal.py +1 -2
  172. data/vendor/pygments-main/pygments/lexers/pawn.py +2 -5
  173. data/vendor/pygments-main/pygments/lexers/perl.py +1 -2
  174. data/vendor/pygments-main/pygments/lexers/php.py +3 -4
  175. data/vendor/pygments-main/pygments/lexers/pointless.py +1 -2
  176. data/vendor/pygments-main/pygments/lexers/pony.py +1 -2
  177. data/vendor/pygments-main/pygments/lexers/praat.py +1 -2
  178. data/vendor/pygments-main/pygments/lexers/procfile.py +43 -0
  179. data/vendor/pygments-main/pygments/lexers/prolog.py +3 -4
  180. data/vendor/pygments-main/pygments/lexers/promql.py +2 -3
  181. data/vendor/pygments-main/pygments/lexers/python.py +38 -17
  182. data/vendor/pygments-main/pygments/lexers/qvt.py +1 -2
  183. data/vendor/pygments-main/pygments/lexers/r.py +1 -2
  184. data/vendor/pygments-main/pygments/lexers/rdf.py +1 -2
  185. data/vendor/pygments-main/pygments/lexers/rebol.py +1 -2
  186. data/vendor/pygments-main/pygments/lexers/resource.py +2 -3
  187. data/vendor/pygments-main/pygments/lexers/ride.py +1 -2
  188. data/vendor/pygments-main/pygments/lexers/rnc.py +2 -3
  189. data/vendor/pygments-main/pygments/lexers/roboconf.py +1 -2
  190. data/vendor/pygments-main/pygments/lexers/robotframework.py +1 -2
  191. data/vendor/pygments-main/pygments/lexers/ruby.py +31 -25
  192. data/vendor/pygments-main/pygments/lexers/rust.py +10 -12
  193. data/vendor/pygments-main/pygments/lexers/sas.py +1 -2
  194. data/vendor/pygments-main/pygments/lexers/scdoc.py +1 -2
  195. data/vendor/pygments-main/pygments/lexers/scripting.py +12 -13
  196. data/vendor/pygments-main/pygments/lexers/sgf.py +1 -2
  197. data/vendor/pygments-main/pygments/lexers/shell.py +15 -17
  198. data/vendor/pygments-main/pygments/lexers/sieve.py +1 -2
  199. data/vendor/pygments-main/pygments/lexers/slash.py +1 -2
  200. data/vendor/pygments-main/pygments/lexers/smalltalk.py +1 -2
  201. data/vendor/pygments-main/pygments/lexers/smithy.py +79 -0
  202. data/vendor/pygments-main/pygments/lexers/smv.py +2 -3
  203. data/vendor/pygments-main/pygments/lexers/snobol.py +1 -2
  204. data/vendor/pygments-main/pygments/lexers/solidity.py +1 -2
  205. data/vendor/pygments-main/pygments/lexers/special.py +44 -30
  206. data/vendor/pygments-main/pygments/lexers/sql.py +8 -13
  207. data/vendor/pygments-main/pygments/lexers/stata.py +1 -2
  208. data/vendor/pygments-main/pygments/lexers/supercollider.py +4 -5
  209. data/vendor/pygments-main/pygments/lexers/tcl.py +4 -5
  210. data/vendor/pygments-main/pygments/lexers/teal.py +88 -0
  211. data/vendor/pygments-main/pygments/lexers/templates.py +34 -35
  212. data/vendor/pygments-main/pygments/lexers/teraterm.py +2 -3
  213. data/vendor/pygments-main/pygments/lexers/testing.py +2 -3
  214. data/vendor/pygments-main/pygments/lexers/text.py +1 -2
  215. data/vendor/pygments-main/pygments/lexers/textedit.py +3 -4
  216. data/vendor/pygments-main/pygments/lexers/textfmts.py +1 -2
  217. data/vendor/pygments-main/pygments/lexers/theorem.py +11 -7
  218. data/vendor/pygments-main/pygments/lexers/thingsdb.py +118 -0
  219. data/vendor/pygments-main/pygments/lexers/tnt.py +26 -17
  220. data/vendor/pygments-main/pygments/lexers/trafficscript.py +2 -3
  221. data/vendor/pygments-main/pygments/lexers/typoscript.py +1 -2
  222. data/vendor/pygments-main/pygments/lexers/unicon.py +1 -2
  223. data/vendor/pygments-main/pygments/lexers/urbi.py +3 -4
  224. data/vendor/pygments-main/pygments/lexers/usd.py +1 -2
  225. data/vendor/pygments-main/pygments/lexers/varnish.py +2 -3
  226. data/vendor/pygments-main/pygments/lexers/verification.py +1 -2
  227. data/vendor/pygments-main/pygments/lexers/web.py +1 -2
  228. data/vendor/pygments-main/pygments/lexers/webassembly.py +120 -0
  229. data/vendor/pygments-main/pygments/lexers/webidl.py +1 -2
  230. data/vendor/pygments-main/pygments/lexers/webmisc.py +5 -5
  231. data/vendor/pygments-main/pygments/lexers/whiley.py +1 -2
  232. data/vendor/pygments-main/pygments/lexers/x10.py +2 -3
  233. data/vendor/pygments-main/pygments/lexers/xorg.py +1 -2
  234. data/vendor/pygments-main/pygments/lexers/yang.py +1 -2
  235. data/vendor/pygments-main/pygments/lexers/zig.py +1 -2
  236. data/vendor/pygments-main/pygments/modeline.py +1 -2
  237. data/vendor/pygments-main/pygments/plugin.py +2 -3
  238. data/vendor/pygments-main/pygments/regexopt.py +2 -3
  239. data/vendor/pygments-main/pygments/scanner.py +1 -2
  240. data/vendor/pygments-main/pygments/sphinxext.py +1 -2
  241. data/vendor/pygments-main/pygments/style.py +4 -5
  242. data/vendor/pygments-main/pygments/styles/__init__.py +5 -2
  243. data/vendor/pygments-main/pygments/styles/abap.py +1 -2
  244. data/vendor/pygments-main/pygments/styles/algol.py +1 -2
  245. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -2
  246. data/vendor/pygments-main/pygments/styles/arduino.py +1 -2
  247. data/vendor/pygments-main/pygments/styles/autumn.py +1 -2
  248. data/vendor/pygments-main/pygments/styles/borland.py +1 -2
  249. data/vendor/pygments-main/pygments/styles/bw.py +1 -2
  250. data/vendor/pygments-main/pygments/styles/colorful.py +1 -2
  251. data/vendor/pygments-main/pygments/styles/default.py +1 -2
  252. data/vendor/pygments-main/pygments/styles/emacs.py +1 -2
  253. data/vendor/pygments-main/pygments/styles/friendly.py +2 -2
  254. data/vendor/pygments-main/pygments/styles/fruity.py +1 -2
  255. data/vendor/pygments-main/pygments/styles/gruvbox.py +107 -0
  256. data/vendor/pygments-main/pygments/styles/igor.py +1 -2
  257. data/vendor/pygments-main/pygments/styles/inkpot.py +1 -2
  258. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -2
  259. data/vendor/pygments-main/pygments/styles/manni.py +1 -2
  260. data/vendor/pygments-main/pygments/styles/material.py +118 -0
  261. data/vendor/pygments-main/pygments/styles/monokai.py +1 -2
  262. data/vendor/pygments-main/pygments/styles/murphy.py +1 -2
  263. data/vendor/pygments-main/pygments/styles/native.py +2 -2
  264. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -2
  265. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -2
  266. data/vendor/pygments-main/pygments/styles/pastie.py +1 -2
  267. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -2
  268. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -2
  269. data/vendor/pygments-main/pygments/styles/rrt.py +1 -2
  270. data/vendor/pygments-main/pygments/styles/sas.py +1 -2
  271. data/vendor/pygments-main/pygments/styles/solarized.py +4 -2
  272. data/vendor/pygments-main/pygments/styles/stata_dark.py +1 -2
  273. data/vendor/pygments-main/pygments/styles/stata_light.py +1 -2
  274. data/vendor/pygments-main/pygments/styles/tango.py +1 -2
  275. data/vendor/pygments-main/pygments/styles/trac.py +1 -2
  276. data/vendor/pygments-main/pygments/styles/vim.py +1 -2
  277. data/vendor/pygments-main/pygments/styles/vs.py +1 -2
  278. data/vendor/pygments-main/pygments/styles/xcode.py +1 -2
  279. data/vendor/pygments-main/pygments/styles/zenburn.py +80 -0
  280. data/vendor/pygments-main/pygments/token.py +1 -2
  281. data/vendor/pygments-main/pygments/unistring.py +1 -2
  282. data/vendor/pygments-main/pygments/util.py +2 -5
  283. metadata +48 -23
  284. data/cache-lexers.rb +0 -9
  285. data/lexers +0 -0
  286. data/vendor/pygments-main/Pygments-2.7.3.dist-info/RECORD +0 -482
@@ -1,11 +1,10 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.lexers.julia
4
3
  ~~~~~~~~~~~~~~~~~~~~~
5
4
 
6
5
  Lexers for the Julia language.
7
6
 
8
- :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
9
8
  :license: BSD, see LICENSE for details.
10
9
  """
11
10
 
@@ -16,12 +15,16 @@ from pygments.lexer import Lexer, RegexLexer, bygroups, do_insertions, \
16
15
  from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
17
16
  Number, Punctuation, Generic
18
17
  from pygments.util import shebang_matches
18
+ from pygments.lexers._julia_builtins import OPERATORS_LIST, DOTTED_OPERATORS_LIST, \
19
+ KEYWORD_LIST, BUILTIN_LIST, LITERAL_LIST
19
20
 
20
21
  __all__ = ['JuliaLexer', 'JuliaConsoleLexer']
21
22
 
23
+ # see https://docs.julialang.org/en/v1/manual/variables/#Allowed-Variable-Names
22
24
  allowed_variable = \
23
- '(?:[a-zA-Z_\u00A1-\U0010ffff]|%s)(?:[a-zA-Z_0-9\u00A1-\U0010ffff])*!*'
24
-
25
+ '(?:[a-zA-Z_\u00A1-\U0010ffff][a-zA-Z_0-9!\u00A1-\U0010ffff]*)'
26
+ # see https://github.com/JuliaLang/julia/blob/master/src/flisp/julia_opsuffs.h
27
+ operator_suffixes = r'[²³¹ʰʲʳʷʸˡˢˣᴬᴮᴰᴱᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾᴿᵀᵁᵂᵃᵇᵈᵉᵍᵏᵐᵒᵖᵗᵘᵛᵝᵞᵟᵠᵡᵢᵣᵤᵥᵦᵧᵨᵩᵪᶜᶠᶥᶦᶫᶰᶸᶻᶿ′″‴‵‶‷⁗⁰ⁱ⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₒₓₕₖₗₘₙₚₛₜⱼⱽ]*'
25
28
 
26
29
  class JuliaLexer(RegexLexer):
27
30
  """
@@ -43,21 +46,35 @@ class JuliaLexer(RegexLexer):
43
46
  (r'[^\S\n]+', Text),
44
47
  (r'#=', Comment.Multiline, "blockcomment"),
45
48
  (r'#.*$', Comment),
46
- (r'[\[\]{}(),;]', Punctuation),
49
+ (r'[\[\](),;]', Punctuation),
50
+
51
+ # symbols
52
+ # intercept range expressions first
53
+ (r'(' + allowed_variable + r')(\s*)(:)(' + allowed_variable + ')',
54
+ bygroups(Name, Text, Operator, Name)),
55
+ # then match :name which does not follow closing brackets, digits, or the
56
+ # ::, <:, and :> operators
57
+ (r'(?<![\]):<>\d.])(:' + allowed_variable + ')', String.Symbol),
58
+
59
+ # type assertions - excludes expressions like ::typeof(sin) and ::avec[1]
60
+ (r'(?<=::)(\s*)(' + allowed_variable + r')\b(?![(\[])', bygroups(Text, Keyword.Type)),
61
+ # type comparisons
62
+ # - MyType <: A or MyType >: A
63
+ ('(' + allowed_variable + r')(\s*)([<>]:)(\s*)(' + allowed_variable + r')\b(?![(\[])',
64
+ bygroups(Keyword.Type, Text, Operator, Text, Keyword.Type)),
65
+ # - <: B or >: B
66
+ (r'([<>]:)(\s*)(' + allowed_variable + r')\b(?![(\[])',
67
+ bygroups(Operator, Text, Keyword.Type)),
68
+ # - A <: or A >:
69
+ (r'\b(' + allowed_variable + r')(\s*)([<>]:)',
70
+ bygroups(Keyword.Type, Text, Operator)),
47
71
 
48
- # keywords
49
- (r'in\b', Keyword.Pseudo),
50
- (r'isa\b', Keyword.Pseudo),
51
- (r'(true|false)\b', Keyword.Constant),
52
- (r'(local|global|const)\b', Keyword.Declaration),
53
- (words([
54
- 'function', 'type', 'typealias', 'abstract', 'immutable',
55
- 'baremodule', 'begin', 'bitstype', 'break', 'catch', 'ccall',
56
- 'continue', 'do', 'else', 'elseif', 'end', 'export', 'finally',
57
- 'for', 'if', 'import', 'importall', 'let', 'macro', 'module',
58
- 'mutable', 'primitive', 'quote', 'return', 'struct', 'try',
59
- 'using', 'while'],
60
- suffix=r'\b'), Keyword),
72
+ # operators
73
+ # Suffixes aren't actually allowed on all operators, but we'll ignore that
74
+ # since those cases are invalid Julia code.
75
+ (words([*OPERATORS_LIST, *DOTTED_OPERATORS_LIST], suffix=operator_suffixes), Operator),
76
+ (words(['.' + o for o in DOTTED_OPERATORS_LIST], suffix=operator_suffixes), Operator),
77
+ (words(['...', '..']), Operator),
61
78
 
62
79
  # NOTE
63
80
  # Patterns below work only for definition sites and thus hardly reliable.
@@ -65,160 +82,67 @@ class JuliaLexer(RegexLexer):
65
82
  # functions
66
83
  # (r'(function)(\s+)(' + allowed_variable + ')',
67
84
  # bygroups(Keyword, Text, Name.Function)),
68
- #
69
- # types
70
- # (r'(type|typealias|abstract|immutable)(\s+)(' + allowed_variable + ')',
71
- # bygroups(Keyword, Text, Name.Class)),
72
-
73
- # type names
74
- (words([
75
- 'ANY', 'ASCIIString', 'AbstractArray', 'AbstractChannel',
76
- 'AbstractFloat', 'AbstractMatrix', 'AbstractRNG',
77
- 'AbstractSparseArray', 'AbstractSparseMatrix',
78
- 'AbstractSparseVector', 'AbstractString', 'AbstractVecOrMat',
79
- 'AbstractVector', 'Any', 'ArgumentError', 'Array',
80
- 'AssertionError', 'Associative', 'Base64DecodePipe',
81
- 'Base64EncodePipe', 'Bidiagonal', 'BigFloat', 'BigInt',
82
- 'BitArray', 'BitMatrix', 'BitVector', 'Bool', 'BoundsError',
83
- 'Box', 'BufferStream', 'CapturedException', 'CartesianIndex',
84
- 'CartesianRange', 'Cchar', 'Cdouble', 'Cfloat', 'Channel',
85
- 'Char', 'Cint', 'Cintmax_t', 'Clong', 'Clonglong',
86
- 'ClusterManager', 'Cmd', 'Coff_t', 'Colon', 'Complex',
87
- 'Complex128', 'Complex32', 'Complex64', 'CompositeException',
88
- 'Condition', 'Cptrdiff_t', 'Cshort', 'Csize_t', 'Cssize_t',
89
- 'Cstring', 'Cuchar', 'Cuint', 'Cuintmax_t', 'Culong',
90
- 'Culonglong', 'Cushort', 'Cwchar_t', 'Cwstring', 'DataType',
91
- 'Date', 'DateTime', 'DenseArray', 'DenseMatrix',
92
- 'DenseVecOrMat', 'DenseVector', 'Diagonal', 'Dict',
93
- 'DimensionMismatch', 'Dims', 'DirectIndexString', 'Display',
94
- 'DivideError', 'DomainError', 'EOFError', 'EachLine', 'Enum',
95
- 'Enumerate', 'ErrorException', 'Exception', 'Expr',
96
- 'Factorization', 'FileMonitor', 'FileOffset', 'Filter',
97
- 'Float16', 'Float32', 'Float64', 'FloatRange', 'Function',
98
- 'GenSym', 'GlobalRef', 'GotoNode', 'HTML', 'Hermitian', 'IO',
99
- 'IOBuffer', 'IOStream', 'IPv4', 'IPv6', 'InexactError',
100
- 'InitError', 'Int', 'Int128', 'Int16', 'Int32', 'Int64', 'Int8',
101
- 'IntSet', 'Integer', 'InterruptException', 'IntrinsicFunction',
102
- 'InvalidStateException', 'Irrational', 'KeyError', 'LabelNode',
103
- 'LambdaStaticData', 'LinSpace', 'LineNumberNode', 'LoadError',
104
- 'LocalProcess', 'LowerTriangular', 'MIME', 'Matrix',
105
- 'MersenneTwister', 'Method', 'MethodError', 'MethodTable',
106
- 'Module', 'NTuple', 'NewvarNode', 'NullException', 'Nullable',
107
- 'Number', 'ObjectIdDict', 'OrdinalRange', 'OutOfMemoryError',
108
- 'OverflowError', 'Pair', 'ParseError', 'PartialQuickSort',
109
- 'Pipe', 'PollingFileWatcher', 'ProcessExitedException',
110
- 'ProcessGroup', 'Ptr', 'QuoteNode', 'RandomDevice', 'Range',
111
- 'Rational', 'RawFD', 'ReadOnlyMemoryError', 'Real',
112
- 'ReentrantLock', 'Ref', 'Regex', 'RegexMatch',
113
- 'RemoteException', 'RemoteRef', 'RepString', 'RevString',
114
- 'RopeString', 'RoundingMode', 'SegmentationFault',
115
- 'SerializationState', 'Set', 'SharedArray', 'SharedMatrix',
116
- 'SharedVector', 'Signed', 'SimpleVector', 'SparseMatrixCSC',
117
- 'StackOverflowError', 'StatStruct', 'StepRange', 'StridedArray',
118
- 'StridedMatrix', 'StridedVecOrMat', 'StridedVector', 'SubArray',
119
- 'SubString', 'SymTridiagonal', 'Symbol', 'SymbolNode',
120
- 'Symmetric', 'SystemError', 'TCPSocket', 'Task', 'Text',
121
- 'TextDisplay', 'Timer', 'TopNode', 'Tridiagonal', 'Tuple',
122
- 'Type', 'TypeConstructor', 'TypeError', 'TypeName', 'TypeVar',
123
- 'UDPSocket', 'UInt', 'UInt128', 'UInt16', 'UInt32', 'UInt64',
124
- 'UInt8', 'UTF16String', 'UTF32String', 'UTF8String',
125
- 'UndefRefError', 'UndefVarError', 'UnicodeError', 'UniformScaling',
126
- 'Union', 'UnitRange', 'Unsigned', 'UpperTriangular', 'Val',
127
- 'Vararg', 'VecOrMat', 'Vector', 'VersionNumber', 'Void', 'WString',
128
- 'WeakKeyDict', 'WeakRef', 'WorkerConfig', 'Zip'], suffix=r'\b'),
129
- Keyword.Type),
130
-
131
- # builtins
132
- (words([
133
- 'ARGS', 'CPU_CORES', 'C_NULL', 'DevNull', 'ENDIAN_BOM',
134
- 'ENV', 'I', 'Inf', 'Inf16', 'Inf32', 'Inf64',
135
- 'InsertionSort', 'JULIA_HOME', 'LOAD_PATH', 'MergeSort',
136
- 'NaN', 'NaN16', 'NaN32', 'NaN64', 'OS_NAME',
137
- 'QuickSort', 'RoundDown', 'RoundFromZero', 'RoundNearest',
138
- 'RoundNearestTiesAway', 'RoundNearestTiesUp',
139
- 'RoundToZero', 'RoundUp', 'STDERR', 'STDIN', 'STDOUT',
140
- 'VERSION', 'WORD_SIZE', 'catalan', 'e', 'eu',
141
- 'eulergamma', 'golden', 'im', 'nothing', 'pi', 'γ', 'π', 'φ'],
142
- suffix=r'\b'), Name.Builtin),
143
-
144
- # operators
145
- # see: https://github.com/JuliaLang/julia/blob/master/src/julia-parser.scm
146
- (words((
147
- # prec-assignment
148
- '=', ':=', '+=', '-=', '*=', '/=', '//=', './/=', '.*=', './=',
149
- '\\=', '.\\=', '^=', '.^=', '÷=', '.÷=', '%=', '.%=', '|=', '&=',
150
- '$=', '=>', '<<=', '>>=', '>>>=', '~', '.+=', '.-=',
151
- # prec-conditional
152
- '?',
153
- # prec-arrow
154
- '--', '-->',
155
- # prec-lazy-or
156
- '||',
157
- # prec-lazy-and
158
- '&&',
159
- # prec-comparison
160
- '>', '<', '>=', '≥', '<=', '≤', '==', '===', '≡', '!=', '≠',
161
- '!==', '≢', '.>', '.<', '.>=', '.≥', '.<=', '.≤', '.==', '.!=',
162
- '.≠', '.=', '.!', '<:', '>:', '∈', '∉', '∋', '∌', '⊆',
163
- '⊈', '⊂',
164
- '⊄', '⊊',
165
- # prec-pipe
166
- '|>', '<|',
167
- # prec-colon
168
- ':',
169
- # prec-plus
170
- '.+', '.-', '|', '∪', '$',
171
- # prec-bitshift
172
- '<<', '>>', '>>>', '.<<', '.>>', '.>>>',
173
- # prec-times
174
- '*', '/', './', '÷', '.÷', '%', '⋅', '.%', '.*', '\\', '.\\', '&', '∩',
175
- # prec-rational
176
- '//', './/',
177
- # prec-power
178
- '^', '.^',
179
- # prec-decl
180
- '::',
181
- # prec-dot
182
- '.',
183
- # unary op
184
- '+', '-', '!', '√', '∛', '∜',
185
- )), Operator),
186
85
 
187
86
  # chars
188
87
  (r"'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,3}|\\u[a-fA-F0-9]{1,4}|"
189
88
  r"\\U[a-fA-F0-9]{1,6}|[^\\\'\n])'", String.Char),
190
89
 
191
90
  # try to match trailing transpose
192
- (r'(?<=[.\w)\]])\'+', Operator),
193
-
194
- # strings
195
- (r'"""', String, 'tqstring'),
196
- (r'"', String, 'string'),
91
+ (r'(?<=[.\w)\]])(\'' + operator_suffixes + ')+', Operator),
197
92
 
93
+ # raw strings
94
+ (r'(raw)(""")', bygroups(String.Affix, String), 'tqrawstring'),
95
+ (r'(raw)(")', bygroups(String.Affix, String), 'rawstring'),
198
96
  # regular expressions
199
- (r'r"""', String.Regex, 'tqregex'),
200
- (r'r"', String.Regex, 'regex'),
97
+ (r'(r)(""")', bygroups(String.Affix, String.Regex), 'tqregex'),
98
+ (r'(r)(")', bygroups(String.Affix, String.Regex), 'regex'),
99
+ # other strings
100
+ (r'(' + allowed_variable + ')?(""")', bygroups(String.Affix, String), 'tqstring'),
101
+ (r'(' + allowed_variable + ')?(")', bygroups(String.Affix, String), 'string'),
201
102
 
202
103
  # backticks
203
- (r'`', String.Backtick, 'command'),
104
+ (r'(' + allowed_variable + ')?(```)', bygroups(String.Affix, String.Backtick), 'tqcommand'),
105
+ (r'(' + allowed_variable + ')?(`)', bygroups(String.Affix, String.Backtick), 'command'),
106
+
107
+ # type names
108
+ # - names that begin a curly expression
109
+ ('(' + allowed_variable + r')(\{)',
110
+ bygroups(Keyword.Type, Punctuation), 'curly'),
111
+ # - names as part of bare 'where'
112
+ (r'(where)(\s+)(' + allowed_variable + ')',
113
+ bygroups(Keyword, Text, Keyword.Type)),
114
+ # - curly expressions in general
115
+ (r'(\{)', Punctuation, 'curly'),
116
+ # - names as part of type declaration
117
+ (r'(abstract[ \t]+type|primitive[ \t]+type|mutable[ \t]+struct|struct)([\s()]+)(' +
118
+ allowed_variable + r')', bygroups(Keyword, Text, Keyword.Type)),
119
+
120
+ # macros
121
+ (r'@' + allowed_variable, Name.Decorator),
122
+ (words([*OPERATORS_LIST, '..', '.', *DOTTED_OPERATORS_LIST],
123
+ prefix='@', suffix=operator_suffixes), Name.Decorator),
124
+
125
+ # keywords
126
+ (words(KEYWORD_LIST, suffix=r'\b'), Keyword),
127
+ # builtin types
128
+ (words(BUILTIN_LIST, suffix=r'\b'), Keyword.Type),
129
+ # builtin literals
130
+ (words(LITERAL_LIST, suffix=r'\b'), Name.Builtin),
204
131
 
205
132
  # names
206
133
  (allowed_variable, Name),
207
- (r'@' + allowed_variable, Name.Decorator),
208
134
 
209
135
  # numbers
210
- (r'(\d+(_\d+)+\.\d*|\d*\.\d+(_\d+)+)([eEf][+-]?[0-9]+)?', Number.Float),
211
- (r'(\d+\.\d*|\d*\.\d+)([eEf][+-]?[0-9]+)?', Number.Float),
212
- (r'\d+(_\d+)+[eEf][+-]?[0-9]+', Number.Float),
213
- (r'\d+[eEf][+-]?[0-9]+', Number.Float),
214
- (r'0b[01]+(_[01]+)+', Number.Bin),
215
- (r'0b[01]+', Number.Bin),
216
- (r'0o[0-7]+(_[0-7]+)+', Number.Oct),
217
- (r'0o[0-7]+', Number.Oct),
218
- (r'0x[a-fA-F0-9]+(_[a-fA-F0-9]+)+', Number.Hex),
219
- (r'0x[a-fA-F0-9]+', Number.Hex),
220
- (r'\d+(_\d+)+', Number.Integer),
221
- (r'\d+', Number.Integer)
136
+ (r'(\d+((_\d+)+)?\.(?!\.)(\d+((_\d+)+)?)?|\.\d+((_\d+)+)?)([eEf][+-]?[0-9]+)?', Number.Float),
137
+ (r'\d+((_\d+)+)?[eEf][+-]?[0-9]+', Number.Float),
138
+ (r'0x[a-fA-F0-9]+((_[a-fA-F0-9]+)+)?(\.([a-fA-F0-9]+((_[a-fA-F0-9]+)+)?)?)?p[+-]?\d+', Number.Float),
139
+ (r'0b[01]+((_[01]+)+)?', Number.Bin),
140
+ (r'0o[0-7]+((_[0-7]+)+)?', Number.Oct),
141
+ (r'0x[a-fA-F0-9]+((_[a-fA-F0-9]+)+)?', Number.Hex),
142
+ (r'\d+((_\d+)+)?', Number.Integer),
143
+
144
+ # single dot operator matched last to permit e.g. ".1" as a float
145
+ (words(['.']), Operator),
222
146
  ],
223
147
 
224
148
  "blockcomment": [
@@ -228,53 +152,80 @@ class JuliaLexer(RegexLexer):
228
152
  (r'[=#]', Comment.Multiline),
229
153
  ],
230
154
 
231
- 'string': [
155
+ 'curly': [
156
+ (r'\{', Punctuation, '#push'),
157
+ (r'\}', Punctuation, '#pop'),
158
+ (allowed_variable, Keyword.Type),
159
+ include('root'),
160
+ ],
161
+
162
+ 'tqrawstring': [
163
+ (r'"""', String, '#pop'),
164
+ (r'([^"]|"[^"][^"])+', String),
165
+ ],
166
+ 'rawstring': [
232
167
  (r'"', String, '#pop'),
233
- # FIXME: This escape pattern is not perfect.
234
- (r'\\([\\"\'$nrbtfav]|(x|u|U)[a-fA-F0-9]+|\d+)', String.Escape),
235
- # Interpolation is defined as "$" followed by the shortest full
236
- # expression, which is something we can't parse.
237
- # Include the most common cases here: $word, and $(paren'd expr).
168
+ (r'\\"', String.Escape),
169
+ (r'([^"\\]|\\[^"])+', String),
170
+ ],
171
+
172
+ # Interpolation is defined as "$" followed by the shortest full expression, which is
173
+ # something we can't parse.
174
+ # Include the most common cases here: $word, and $(paren'd expr).
175
+ 'interp': [
238
176
  (r'\$' + allowed_variable, String.Interpol),
239
- # (r'\$[a-zA-Z_]+', String.Interpol),
240
177
  (r'(\$)(\()', bygroups(String.Interpol, Punctuation), 'in-intp'),
178
+ ],
179
+ 'in-intp': [
180
+ (r'\(', Punctuation, '#push'),
181
+ (r'\)', Punctuation, '#pop'),
182
+ include('root'),
183
+ ],
184
+
185
+ 'string': [
186
+ (r'(")(' + allowed_variable + r'|\d+)?', bygroups(String, String.Affix), '#pop'),
187
+ # FIXME: This escape pattern is not perfect.
188
+ (r'\\([\\"\'$nrbtfav]|(x|u|U)[a-fA-F0-9]+|\d+)', String.Escape),
189
+ include('interp'),
241
190
  # @printf and @sprintf formats
242
191
  (r'%[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?[hlL]?[E-GXc-giorsux%]',
243
192
  String.Interpol),
244
- (r'.|\s', String),
193
+ (r'[^"$%\\]+', String),
194
+ (r'.', String),
245
195
  ],
246
-
247
196
  'tqstring': [
248
- (r'"""', String, '#pop'),
197
+ (r'(""")(' + allowed_variable + r'|\d+)?', bygroups(String, String.Affix), '#pop'),
249
198
  (r'\\([\\"\'$nrbtfav]|(x|u|U)[a-fA-F0-9]+|\d+)', String.Escape),
250
- (r'\$' + allowed_variable, String.Interpol),
251
- (r'(\$)(\()', bygroups(String.Interpol, Punctuation), 'in-intp'),
252
- (r'.|\s', String),
199
+ include('interp'),
200
+ (r'[^"$%\\]+', String),
201
+ (r'.', String),
253
202
  ],
254
203
 
255
204
  'regex': [
256
- (r'"', String.Regex, '#pop'),
205
+ (r'(")([imsxa]*)?', bygroups(String.Regex, String.Affix), '#pop'),
257
206
  (r'\\"', String.Regex),
258
- (r'.|\s', String.Regex),
207
+ (r'[^\\"]+', String.Regex),
259
208
  ],
260
209
 
261
210
  'tqregex': [
262
- (r'"""', String.Regex, '#pop'),
263
- (r'.|\s', String.Regex),
211
+ (r'(""")([imsxa]*)?', bygroups(String.Regex, String.Affix), '#pop'),
212
+ (r'[^"]+', String.Regex),
264
213
  ],
265
214
 
266
215
  'command': [
267
- (r'`', String.Backtick, '#pop'),
268
- (r'\$' + allowed_variable, String.Interpol),
269
- (r'(\$)(\()', bygroups(String.Interpol, Punctuation), 'in-intp'),
270
- (r'.|\s', String.Backtick)
216
+ (r'(`)(' + allowed_variable + r'|\d+)?', bygroups(String.Backtick, String.Affix), '#pop'),
217
+ (r'\\[`$]', String.Escape),
218
+ include('interp'),
219
+ (r'[^\\`$]+', String.Backtick),
220
+ (r'.', String.Backtick),
221
+ ],
222
+ 'tqcommand': [
223
+ (r'(```)(' + allowed_variable + r'|\d+)?', bygroups(String.Backtick, String.Affix), '#pop'),
224
+ (r'\\\$', String.Escape),
225
+ include('interp'),
226
+ (r'[^\\`$]+', String.Backtick),
227
+ (r'.', String.Backtick),
271
228
  ],
272
-
273
- 'in-intp': [
274
- (r'\(', Punctuation, '#push'),
275
- (r'\)', Punctuation, '#pop'),
276
- include('root'),
277
- ]
278
229
  }
279
230
 
280
231
  def analyse_text(text):
@@ -288,7 +239,7 @@ class JuliaConsoleLexer(Lexer):
288
239
  .. versionadded:: 1.6
289
240
  """
290
241
  name = 'Julia console'
291
- aliases = ['jlcon']
242
+ aliases = ['jlcon', 'julia-repl']
292
243
 
293
244
  def get_tokens_unprocessed(self, text):
294
245
  jllexer = JuliaLexer(**self.options)