pygments.rb 1.2.1 → 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 (381) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +13 -0
  3. data/.github/workflows/ci.yml +28 -0
  4. data/.github/workflows/release.yml +24 -0
  5. data/.gitignore +5 -6
  6. data/CHANGELOG.adoc +128 -0
  7. data/Gemfile +3 -1
  8. data/LICENSE +1 -1
  9. data/README.adoc +160 -0
  10. data/Rakefile +11 -21
  11. data/bench.rb +8 -7
  12. data/cache-lexers.rb +3 -2
  13. data/lexers +0 -0
  14. data/lib/pygments/lexer.rb +5 -5
  15. data/lib/pygments/mentos.py +23 -110
  16. data/lib/pygments/popen.rb +148 -229
  17. data/lib/pygments/version.rb +2 -2
  18. data/lib/pygments.rb +10 -11
  19. data/pygments.rb.gemspec +12 -10
  20. data/test/test_pygments.rb +46 -104
  21. data/vendor/pygments-main/{AUTHORS → Pygments-2.7.3.dist-info/AUTHORS} +21 -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 +38 -29
  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 +9 -8
  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 +68 -41
  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 +28 -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 +1 -1
  57. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +2 -4
  58. data/vendor/pygments-main/pygments/lexers/_mapping.py +74 -29
  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 +440 -76
  81. data/vendor/pygments-main/pygments/lexers/automation.py +1 -1
  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 +5 -5
  85. data/vendor/pygments-main/pygments/lexers/boa.py +102 -0
  86. data/vendor/pygments-main/pygments/lexers/business.py +17 -2
  87. data/vendor/pygments-main/pygments/lexers/c_cpp.py +137 -45
  88. data/vendor/pygments-main/pygments/lexers/c_like.py +67 -42
  89. data/vendor/pygments-main/pygments/lexers/capnproto.py +7 -7
  90. data/vendor/pygments-main/pygments/lexers/chapel.py +23 -13
  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 +187 -36
  94. data/vendor/pygments-main/pygments/lexers/console.py +1 -1
  95. data/vendor/pygments-main/pygments/lexers/crystal.py +3 -4
  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 +144 -62
  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 +46 -19
  112. data/vendor/pygments-main/pygments/lexers/ezhil.py +21 -13
  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 +62 -5
  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 +48 -21
  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 +1 -1
  131. data/vendor/pygments-main/pygments/lexers/html.py +31 -19
  132. data/vendor/pygments-main/pygments/lexers/idl.py +19 -8
  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 +60 -45
  140. data/vendor/pygments-main/pygments/lexers/julia.py +44 -46
  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 +1 -1
  152. data/vendor/pygments-main/pygments/lexers/mosel.py +448 -0
  153. data/vendor/pygments-main/pygments/lexers/ncl.py +1 -1
  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 +22 -22
  164. data/vendor/pygments-main/pygments/lexers/pawn.py +30 -24
  165. data/vendor/pygments-main/pygments/lexers/perl.py +260 -148
  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 -227
  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 +76 -72
  184. data/vendor/pygments-main/pygments/lexers/sas.py +1 -1
  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 +162 -42
  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 +3 -3
  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 -44
  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 +102 -121
  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 +4 -11
  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 +3 -3
  214. data/vendor/pygments-main/pygments/lexers/verification.py +13 -10
  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 +31 -28
  218. data/vendor/pygments-main/pygments/lexers/whiley.py +5 -5
  219. data/vendor/pygments-main/pygments/lexers/x10.py +1 -1
  220. data/vendor/pygments-main/pygments/lexers/xorg.py +5 -4
  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 +1 -1
  224. data/vendor/pygments-main/pygments/plugin.py +4 -2
  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 +10 -4
  230. data/vendor/pygments-main/pygments/styles/abap.py +1 -1
  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 +1 -1
  254. data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
  255. data/vendor/pygments-main/pygments/styles/sas.py +1 -1
  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.py → stata_light.py} +14 -15
  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 +15 -92
  267. metadata +68 -136
  268. data/CHANGELOG.md +0 -111
  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 -1186
  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 -354
  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 -166
  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 -728
  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 -101
  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/requirements.txt +0 -5
  331. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  332. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  333. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  334. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  335. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  336. data/vendor/pygments-main/scripts/pylintrc +0 -301
  337. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  338. data/vendor/pygments-main/setup.cfg +0 -10
  339. data/vendor/pygments-main/setup.py +0 -77
  340. data/vendor/pygments-main/tox.ini +0 -7
  341. data/vendor/simplejson/.gitignore +0 -10
  342. data/vendor/simplejson/.travis.yml +0 -5
  343. data/vendor/simplejson/CHANGES.txt +0 -291
  344. data/vendor/simplejson/LICENSE.txt +0 -19
  345. data/vendor/simplejson/MANIFEST.in +0 -5
  346. data/vendor/simplejson/README.rst +0 -19
  347. data/vendor/simplejson/conf.py +0 -179
  348. data/vendor/simplejson/index.rst +0 -628
  349. data/vendor/simplejson/scripts/make_docs.py +0 -18
  350. data/vendor/simplejson/setup.py +0 -104
  351. data/vendor/simplejson/simplejson/__init__.py +0 -510
  352. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  353. data/vendor/simplejson/simplejson/decoder.py +0 -425
  354. data/vendor/simplejson/simplejson/encoder.py +0 -567
  355. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  356. data/vendor/simplejson/simplejson/scanner.py +0 -77
  357. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  358. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  359. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  360. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  361. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  362. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  363. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  364. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  365. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  366. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  367. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  368. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  369. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  370. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  371. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  372. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  373. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  374. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  375. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  376. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  377. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  378. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  379. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  380. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  381. data/vendor/simplejson/simplejson/tool.py +0 -39
@@ -5,13 +5,14 @@
5
5
 
6
6
  Lexers for Matlab and related languages.
7
7
 
8
- :copyright: Copyright 2006-2017 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
13
 
14
- from pygments.lexer import Lexer, RegexLexer, bygroups, words, do_insertions
14
+ from pygments.lexer import Lexer, RegexLexer, bygroups, default, words, \
15
+ do_insertions
15
16
  from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
16
17
  Number, Punctuation, Generic, Whitespace
17
18
 
@@ -45,33 +46,35 @@ class MatlabLexer(RegexLexer):
45
46
  # specfun: Special Math functions
46
47
  # elmat: Elementary matrices and matrix manipulation
47
48
  #
48
- # taken from Matlab version 7.4.0.336 (R2007a)
49
+ # taken from Matlab version 9.4 (R2018a)
49
50
  #
50
51
  elfun = ("sin", "sind", "sinh", "asin", "asind", "asinh", "cos", "cosd", "cosh",
51
52
  "acos", "acosd", "acosh", "tan", "tand", "tanh", "atan", "atand", "atan2",
52
- "atanh", "sec", "secd", "sech", "asec", "asecd", "asech", "csc", "cscd",
53
+ "atan2d", "atanh", "sec", "secd", "sech", "asec", "asecd", "asech", "csc", "cscd",
53
54
  "csch", "acsc", "acscd", "acsch", "cot", "cotd", "coth", "acot", "acotd",
54
- "acoth", "hypot", "exp", "expm1", "log", "log1p", "log10", "log2", "pow2",
55
+ "acoth", "hypot", "deg2rad", "rad2deg", "exp", "expm1", "log", "log1p", "log10", "log2", "pow2",
55
56
  "realpow", "reallog", "realsqrt", "sqrt", "nthroot", "nextpow2", "abs",
56
57
  "angle", "complex", "conj", "imag", "real", "unwrap", "isreal", "cplxpair",
57
58
  "fix", "floor", "ceil", "round", "mod", "rem", "sign")
58
59
  specfun = ("airy", "besselj", "bessely", "besselh", "besseli", "besselk", "beta",
59
- "betainc", "betaln", "ellipj", "ellipke", "erf", "erfc", "erfcx",
60
- "erfinv", "expint", "gamma", "gammainc", "gammaln", "psi", "legendre",
60
+ "betainc", "betaincinv", "betaln", "ellipj", "ellipke", "erf", "erfc", "erfcx",
61
+ "erfinv", "erfcinv", "expint", "gamma", "gammainc", "gammaincinv", "gammaln", "psi", "legendre",
61
62
  "cross", "dot", "factor", "isprime", "primes", "gcd", "lcm", "rat",
62
63
  "rats", "perms", "nchoosek", "factorial", "cart2sph", "cart2pol",
63
64
  "pol2cart", "sph2cart", "hsv2rgb", "rgb2hsv")
64
- elmat = ("zeros", "ones", "eye", "repmat", "rand", "randn", "linspace", "logspace",
65
+ elmat = ("zeros", "ones", "eye", "repmat", "repelem", "linspace", "logspace",
65
66
  "freqspace", "meshgrid", "accumarray", "size", "length", "ndims", "numel",
66
- "disp", "isempty", "isequal", "isequalwithequalnans", "cat", "reshape",
67
- "diag", "blkdiag", "tril", "triu", "fliplr", "flipud", "flipdim", "rot90",
67
+ "disp", "isempty", "isequal", "isequaln", "cat", "reshape",
68
+ "diag", "blkdiag", "tril", "triu", "fliplr", "flipud", "flip", "rot90",
68
69
  "find", "end", "sub2ind", "ind2sub", "bsxfun", "ndgrid", "permute",
69
70
  "ipermute", "shiftdim", "circshift", "squeeze", "isscalar", "isvector",
70
- "ans", "eps", "realmax", "realmin", "pi", "i", "inf", "nan", "isnan",
71
- "isinf", "isfinite", "j", "why", "compan", "gallery", "hadamard", "hankel",
71
+ "isrow", "iscolumn", "ismatrix", "eps", "realmax", "realmin", "intmax", "intmin", "flintmax", "pi", "i", "inf", "nan", "isnan",
72
+ "isinf", "isfinite", "j", "true", "false", "compan", "gallery", "hadamard", "hankel",
72
73
  "hilb", "invhilb", "magic", "pascal", "rosser", "toeplitz", "vander",
73
74
  "wilkinson")
74
75
 
76
+ _operators = r'-|==|~=|<=|>=|<|>|&&|&|~|\|\|?|\.\*|\*|\+|\.\^|\.\\|\./|/|\\'
77
+
75
78
  tokens = {
76
79
  'root': [
77
80
  # line starting with '!' is sent as a system command. not sure what
@@ -79,25 +82,40 @@ class MatlabLexer(RegexLexer):
79
82
  (r'^!.*', String.Other),
80
83
  (r'%\{\s*\n', Comment.Multiline, 'blockcomment'),
81
84
  (r'%.*$', Comment),
82
- (r'^\s*function', Keyword, 'deffunc'),
83
-
84
- # from 'iskeyword' on version 7.11 (R2010):
85
- (words((
86
- 'break', 'case', 'catch', 'classdef', 'continue', 'else', 'elseif',
87
- 'end', 'enumerated', 'events', 'for', 'function', 'global', 'if',
88
- 'methods', 'otherwise', 'parfor', 'persistent', 'properties',
89
- 'return', 'spmd', 'switch', 'try', 'while'), suffix=r'\b'),
85
+ (r'^\s*function\b', Keyword, 'deffunc'),
86
+
87
+ # from 'iskeyword' on version 9.4 (R2018a):
88
+ # Check that there is no preceding dot, as keywords are valid field
89
+ # names.
90
+ (words(('break', 'case', 'catch', 'classdef', 'continue', 'else',
91
+ 'elseif', 'end', 'for', 'function',
92
+ 'global', 'if', 'otherwise', 'parfor',
93
+ 'persistent', 'return', 'spmd', 'switch',
94
+ 'try', 'while'),
95
+ prefix=r'(?<!\.)', suffix=r'\b'),
90
96
  Keyword),
91
97
 
92
98
  ("(" + "|".join(elfun + specfun + elmat) + r')\b', Name.Builtin),
93
99
 
94
100
  # line continuation with following comment:
95
- (r'\.\.\..*$', Comment),
101
+ (r'(\.\.\.)(.*)$', bygroups(Keyword, Comment)),
102
+
103
+ # command form:
104
+ # "How MATLAB Recognizes Command Syntax" specifies that an operator
105
+ # is recognized if it is either surrounded by spaces or by no
106
+ # spaces on both sides; only the former case matters for us. (This
107
+ # allows distinguishing `cd ./foo` from `cd ./ foo`.)
108
+ (r'(?:^|(?<=;))(\s*)(\w+)(\s+)(?!=|\(|(?:%s)\s+)' % _operators,
109
+ bygroups(Text, Name, Text), 'commandargs'),
96
110
 
97
111
  # operators:
98
- (r'-|==|~=|<|>|<=|>=|&&|&|~|\|\|?', Operator),
99
- # operators requiring escape for re:
100
- (r'\.\*|\*|\+|\.\^|\.\\|\.\/|\/|\\', Operator),
112
+ (_operators, Operator),
113
+
114
+ # numbers (must come before punctuation to handle `.5`; cannot use
115
+ # `\b` due to e.g. `5. + .5`).
116
+ (r'(?<!\w)((\d+\.\d*)|(\d*\.\d+))([eEf][+-]?\d+)?(?!\w)', Number.Float),
117
+ (r'\b\d+[eEf][+-]?[0-9]+\b', Number.Float),
118
+ (r'\b\d+\b', Number.Integer),
101
119
 
102
120
  # punctuation:
103
121
  (r'\[|\]|\(|\)|\{|\}|:|@|\.|,', Punctuation),
@@ -107,17 +125,12 @@ class MatlabLexer(RegexLexer):
107
125
  # (not great, but handles common cases...)
108
126
  (r'(?<=[\w)\].])\'+', Operator),
109
127
 
110
- (r'(\d+\.\d*|\d*\.\d+)([eEf][+-]?[0-9]+)?', Number.Float),
111
- (r'\d+[eEf][+-]?[0-9]+', Number.Float),
112
- (r'\d+', Number.Integer),
128
+ (r'"(""|[^"])*"', String),
113
129
 
114
130
  (r'(?<![\w)\].])\'', String, 'string'),
115
131
  (r'[a-zA-Z_]\w*', Name),
116
132
  (r'.', Text),
117
133
  ],
118
- 'string': [
119
- (r'[^\']*\'', String, '#pop')
120
- ],
121
134
  'blockcomment': [
122
135
  (r'^\s*%\}', Comment.Multiline, '#pop'),
123
136
  (r'^.*\n', Comment.Multiline),
@@ -131,12 +144,36 @@ class MatlabLexer(RegexLexer):
131
144
  # function with no args
132
145
  (r'(\s*)([a-zA-Z_]\w*)', bygroups(Text, Name.Function), '#pop'),
133
146
  ],
147
+ 'string': [
148
+ (r"[^']*'", String, '#pop'),
149
+ ],
150
+ 'commandargs': [
151
+ # If an equal sign or other operator is encountered, this
152
+ # isn't a command. It might be a variable assignment or
153
+ # comparison operation with multiple spaces before the
154
+ # equal sign or operator
155
+ (r"=", Punctuation, '#pop'),
156
+ (_operators, Operator, '#pop'),
157
+ (r"[ \t]+", Text),
158
+ ("'[^']*'", String),
159
+ (r"[^';\s]+", String),
160
+ (";", Punctuation, '#pop'),
161
+ default('#pop'),
162
+ ]
134
163
  }
135
164
 
136
165
  def analyse_text(text):
137
- if re.match('^\s*%', text, re.M): # comment
166
+ # function declaration.
167
+ first_non_comment = next((line for line in text.splitlines()
168
+ if not re.match(r'^\s*%', text)), '').strip()
169
+ if (first_non_comment.startswith('function')
170
+ and '{' not in first_non_comment):
171
+ return 1.
172
+ # comment
173
+ elif re.search(r'^\s*%', text, re.M):
138
174
  return 0.2
139
- elif re.match('^!\w+', text, re.M): # system cmd
175
+ # system cmd
176
+ elif re.search(r'^!\w+', text, re.M):
140
177
  return 0.2
141
178
 
142
179
 
@@ -158,6 +195,7 @@ class MatlabSessionLexer(Lexer):
158
195
 
159
196
  curcode = ''
160
197
  insertions = []
198
+ continuation = False
161
199
 
162
200
  for match in line_re.finditer(text):
163
201
  line = match.group()
@@ -180,21 +218,36 @@ class MatlabSessionLexer(Lexer):
180
218
  # line = "\n" + line
181
219
  token = (0, Generic.Traceback, line)
182
220
  insertions.append((idx, [token]))
183
-
221
+ elif continuation:
222
+ # line_start is the length of the most recent prompt symbol
223
+ line_start = len(insertions[-1][-1][-1])
224
+ # Set leading spaces with the length of the prompt to be a generic prompt
225
+ # This keeps code aligned when prompts are removed, say with some Javascript
226
+ if line.startswith(' '*line_start):
227
+ insertions.append((len(curcode),
228
+ [(0, Generic.Prompt, line[:line_start])]))
229
+ curcode += line[line_start:]
230
+ else:
231
+ curcode += line
184
232
  else:
185
233
  if curcode:
186
- for item in do_insertions(
187
- insertions, mlexer.get_tokens_unprocessed(curcode)):
188
- yield item
234
+ yield from do_insertions(
235
+ insertions, mlexer.get_tokens_unprocessed(curcode))
189
236
  curcode = ''
190
237
  insertions = []
191
238
 
192
239
  yield match.start(), Generic.Output, line
193
240
 
241
+ # Does not allow continuation if a comment is included after the ellipses.
242
+ # Continues any line that ends with ..., even comments (lines that start with %)
243
+ if line.strip().endswith('...'):
244
+ continuation = True
245
+ else:
246
+ continuation = False
247
+
194
248
  if curcode: # or item:
195
- for item in do_insertions(
196
- insertions, mlexer.get_tokens_unprocessed(curcode)):
197
- yield item
249
+ yield from do_insertions(
250
+ insertions, mlexer.get_tokens_unprocessed(curcode))
198
251
 
199
252
 
200
253
  class OctaveLexer(RegexLexer):
@@ -536,7 +589,7 @@ class OctaveLexer(RegexLexer):
536
589
  'root': [
537
590
  # We should look into multiline comments
538
591
  (r'[%#].*$', Comment),
539
- (r'^\s*function', Keyword, 'deffunc'),
592
+ (r'^\s*function\b', Keyword, 'deffunc'),
540
593
 
541
594
  # from 'iskeyword' on hg changeset 8cc154f45e37
542
595
  (words((
@@ -594,6 +647,10 @@ class OctaveLexer(RegexLexer):
594
647
  ],
595
648
  }
596
649
 
650
+ def analyse_text(text):
651
+ """Octave is quite hard to spot, and it looks like Matlab as well."""
652
+ return 0
653
+
597
654
 
598
655
  class ScilabLexer(RegexLexer):
599
656
  """
@@ -609,7 +666,7 @@ class ScilabLexer(RegexLexer):
609
666
  tokens = {
610
667
  'root': [
611
668
  (r'//.*?$', Comment.Single),
612
- (r'^\s*function', Keyword, 'deffunc'),
669
+ (r'^\s*function\b', Keyword, 'deffunc'),
613
670
 
614
671
  (words((
615
672
  '__FILE__', '__LINE__', 'break', 'case', 'catch', 'classdef', 'continue', 'do', 'else',
@@ -0,0 +1,226 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ pygments.lexers.mime
4
+ ~~~~~~~~~~~~~~~~~~~~
5
+
6
+ Lexer for Multipurpose Internet Mail Extensions (MIME) data.
7
+
8
+ :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
9
+ :license: BSD, see LICENSE for details.
10
+ """
11
+
12
+ import re
13
+
14
+ from pygments.lexer import RegexLexer, include
15
+ from pygments.lexers import get_lexer_for_mimetype
16
+ from pygments.token import Text, Name, String, Operator, Comment, Other
17
+ from pygments.util import get_int_opt, ClassNotFound
18
+
19
+ __all__ = ["MIMELexer"]
20
+
21
+
22
+ class MIMELexer(RegexLexer):
23
+ """
24
+ Lexer for Multipurpose Internet Mail Extensions (MIME) data. This lexer is
25
+ designed to process the nested mulitpart data.
26
+
27
+ It assumes that the given data contains both header and body (and is
28
+ splitted by empty line). If no valid header is found, then the entire data
29
+ would be treated as body.
30
+
31
+ Additional options accepted:
32
+
33
+ `MIME-max-level`
34
+ Max recurssion level for nested MIME structure. Any negative number
35
+ would treated as unlimited. (default: -1)
36
+
37
+ `Content-Type`
38
+ Treat the data as specific content type. Useful when header is
39
+ missing, or this lexer would try to parse from header. (default:
40
+ `text/plain`)
41
+
42
+ `Multipart-Boundary`
43
+ Set the default multipart boundary delimiter. This option is only used
44
+ when `Content-Type` is `multipart` and header is missing. This lexer
45
+ would try to parse from header by default. (default: None)
46
+
47
+ `Content-Transfer-Encoding`
48
+ Treat the data as specific encoding. Or this lexer would try to parse
49
+ from header by default. (default: None)
50
+
51
+ .. versionadded:: 2.5
52
+ """
53
+
54
+ name = "MIME"
55
+ aliases = ["mime"]
56
+ mimetypes = ["multipart/mixed",
57
+ "multipart/related",
58
+ "multipart/alternative"]
59
+
60
+ def __init__(self, **options):
61
+ super().__init__(**options)
62
+ self.boundary = options.get("Multipart-Boundary")
63
+ self.content_transfer_encoding = options.get("Content_Transfer_Encoding")
64
+ self.content_type = options.get("Content_Type", "text/plain")
65
+ self.max_nested_level = get_int_opt(options, "MIME-max-level", -1)
66
+
67
+ def analyse_text(text):
68
+ try:
69
+ header, body = text.strip().split("\n\n", 1)
70
+ if not body.strip():
71
+ return 0.1
72
+
73
+ invalid_headers = MIMELexer.tokens["header"].sub("", header)
74
+ if invalid_headers.strip():
75
+ return 0.1
76
+ else:
77
+ return 1
78
+
79
+ except ValueError:
80
+ return 0.1
81
+
82
+ def get_header_tokens(self, match):
83
+ field = match.group(1)
84
+
85
+ if field.lower() in self.attention_headers:
86
+ yield match.start(1), Name.Tag, field + ":"
87
+ yield match.start(2), Text.Whitespace, match.group(2)
88
+
89
+ pos = match.end(2)
90
+ body = match.group(3)
91
+ for i, t, v in self.get_tokens_unprocessed(body, ("root", field.lower())):
92
+ yield pos + i, t, v
93
+
94
+ else:
95
+ yield match.start(), Comment, match.group()
96
+
97
+ def get_body_tokens(self, match):
98
+ pos_body_start = match.start()
99
+ entire_body = match.group()
100
+
101
+ # skip first newline
102
+ if entire_body[0] == '\n':
103
+ yield pos_body_start, Text.Whitespace, '\n'
104
+ pos_body_start = pos_body_start + 1
105
+ entire_body = entire_body[1:]
106
+
107
+ # if it is not a mulitpart
108
+ if not self.content_type.startswith("multipart") or not self.boundary:
109
+ for i, t, v in self.get_bodypart_tokens(entire_body):
110
+ yield pos_body_start + i, t, v
111
+ return
112
+
113
+ # find boundary
114
+ bdry_pattern = r"^--%s(--)?\n" % re.escape(self.boundary)
115
+ bdry_matcher = re.compile(bdry_pattern, re.MULTILINE)
116
+
117
+ # some data has prefix text before first boundary
118
+ m = bdry_matcher.search(entire_body)
119
+ if m:
120
+ pos_part_start = pos_body_start + m.end()
121
+ pos_iter_start = lpos_end = m.end()
122
+ yield pos_body_start, Text, entire_body[:m.start()]
123
+ yield pos_body_start + lpos_end, String.Delimiter, m.group()
124
+ else:
125
+ pos_part_start = pos_body_start
126
+ pos_iter_start = 0
127
+
128
+ # process tokens of each body part
129
+ for m in bdry_matcher.finditer(entire_body, pos_iter_start):
130
+ # bodypart
131
+ lpos_start = pos_part_start - pos_body_start
132
+ lpos_end = m.start()
133
+ part = entire_body[lpos_start:lpos_end]
134
+ for i, t, v in self.get_bodypart_tokens(part):
135
+ yield pos_part_start + i, t, v
136
+
137
+ # boundary
138
+ yield pos_body_start + lpos_end, String.Delimiter, m.group()
139
+ pos_part_start = pos_body_start + m.end()
140
+
141
+ # some data has suffix text after last boundary
142
+ lpos_start = pos_part_start - pos_body_start
143
+ if lpos_start != len(entire_body):
144
+ yield pos_part_start, Text, entire_body[lpos_start:]
145
+
146
+ def get_bodypart_tokens(self, text):
147
+ # return if:
148
+ # * no content
149
+ # * no content type specific
150
+ # * content encoding is not readable
151
+ # * max recurrsion exceed
152
+ if not text.strip() or not self.content_type:
153
+ return [(0, Other, text)]
154
+
155
+ cte = self.content_transfer_encoding
156
+ if cte and cte not in {"8bit", "7bit", "quoted-printable"}:
157
+ return [(0, Other, text)]
158
+
159
+ if self.max_nested_level == 0:
160
+ return [(0, Other, text)]
161
+
162
+ # get lexer
163
+ try:
164
+ lexer = get_lexer_for_mimetype(self.content_type)
165
+ except ClassNotFound:
166
+ return [(0, Other, text)]
167
+
168
+ if isinstance(lexer, type(self)):
169
+ lexer.max_nested_level = self.max_nested_level - 1
170
+
171
+ return lexer.get_tokens_unprocessed(text)
172
+
173
+ def store_content_type(self, match):
174
+ self.content_type = match.group(1)
175
+
176
+ prefix_len = match.start(1) - match.start(0)
177
+ yield match.start(0), Text.Whitespace, match.group(0)[:prefix_len]
178
+ yield match.start(1), Name.Label, match.group(2)
179
+ yield match.end(2), String.Delimiter, '/'
180
+ yield match.start(3), Name.Label, match.group(3)
181
+
182
+ def get_content_type_subtokens(self, match):
183
+ yield match.start(1), Text, match.group(1)
184
+ yield match.start(2), Text.Whitespace, match.group(2)
185
+ yield match.start(3), Name.Attribute, match.group(3)
186
+ yield match.start(4), Operator, match.group(4)
187
+ yield match.start(5), String, match.group(5)
188
+
189
+ if match.group(3).lower() == "boundary":
190
+ boundary = match.group(5).strip()
191
+ if boundary[0] == '"' and boundary[-1] == '"':
192
+ boundary = boundary[1:-1]
193
+ self.boundary = boundary
194
+
195
+ def store_content_transfer_encoding(self, match):
196
+ self.content_transfer_encoding = match.group(0).lower()
197
+ yield match.start(0), Name.Constant, match.group(0)
198
+
199
+ attention_headers = {"content-type", "content-transfer-encoding"}
200
+
201
+ tokens = {
202
+ "root": [
203
+ (r"^([\w-]+):( *)([\s\S]*?\n)(?![ \t])", get_header_tokens),
204
+ (r"^$[\s\S]+", get_body_tokens),
205
+ ],
206
+ "header": [
207
+ # folding
208
+ (r"\n[ \t]", Text.Whitespace),
209
+ (r"\n(?![ \t])", Text.Whitespace, "#pop"),
210
+ ],
211
+ "content-type": [
212
+ include("header"),
213
+ (
214
+ r"^\s*((multipart|application|audio|font|image|model|text|video"
215
+ r"|message)/([\w-]+))",
216
+ store_content_type,
217
+ ),
218
+ (r'(;)((?:[ \t]|\n[ \t])*)([\w:-]+)(=)([\s\S]*?)(?=;|\n(?![ \t]))',
219
+ get_content_type_subtokens),
220
+ (r';[ \t]*\n(?![ \t])', Text, '#pop'),
221
+ ],
222
+ "content-transfer-encoding": [
223
+ include("header"),
224
+ (r"([\w-]+)", store_content_transfer_encoding),
225
+ ],
226
+ }