pygments.rb 1.2.1 → 2.0.0.rc2

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 (378) 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 +119 -0
  7. data/Gemfile +3 -1
  8. data/LICENSE +1 -1
  9. data/README.adoc +161 -0
  10. data/Rakefile +10 -21
  11. data/bench.rb +8 -7
  12. data/cache-lexers.rb +3 -2
  13. data/lib/pygments.rb +10 -11
  14. data/lib/pygments/lexer.rb +5 -5
  15. data/lib/pygments/mentos.py +23 -66
  16. data/lib/pygments/popen.rb +152 -204
  17. data/lib/pygments/version.rb +2 -2
  18. data/pygments.rb.gemspec +11 -9
  19. data/test/test_pygments.rb +51 -84
  20. data/vendor/pygments-main/{AUTHORS → Pygments-2.7.3.dist-info/AUTHORS} +21 -3
  21. data/vendor/pygments-main/Pygments-2.7.3.dist-info/INSTALLER +1 -0
  22. data/vendor/pygments-main/{LICENSE → Pygments-2.7.3.dist-info/LICENSE} +1 -1
  23. data/vendor/pygments-main/Pygments-2.7.3.dist-info/METADATA +49 -0
  24. data/vendor/pygments-main/Pygments-2.7.3.dist-info/RECORD +482 -0
  25. data/vendor/pygments-main/Pygments-2.7.3.dist-info/REQUESTED +0 -0
  26. data/vendor/pygments-main/Pygments-2.7.3.dist-info/WHEEL +5 -0
  27. data/vendor/pygments-main/Pygments-2.7.3.dist-info/entry_points.txt +3 -0
  28. data/vendor/pygments-main/Pygments-2.7.3.dist-info/top_level.txt +1 -0
  29. data/vendor/pygments-main/bin/pygmentize +8 -0
  30. data/vendor/pygments-main/pygments/__init__.py +6 -11
  31. data/vendor/pygments-main/pygments/__main__.py +18 -0
  32. data/vendor/pygments-main/pygments/cmdline.py +38 -29
  33. data/vendor/pygments-main/pygments/console.py +6 -9
  34. data/vendor/pygments-main/pygments/filter.py +4 -6
  35. data/vendor/pygments-main/pygments/filters/__init__.py +609 -21
  36. data/vendor/pygments-main/pygments/formatter.py +4 -4
  37. data/vendor/pygments-main/pygments/formatters/__init__.py +9 -8
  38. data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -3
  39. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
  40. data/vendor/pygments-main/pygments/formatters/html.py +223 -135
  41. data/vendor/pygments-main/pygments/formatters/img.py +68 -41
  42. data/vendor/pygments-main/pygments/formatters/irc.py +39 -39
  43. data/vendor/pygments-main/pygments/formatters/latex.py +56 -26
  44. data/vendor/pygments-main/pygments/formatters/other.py +12 -8
  45. data/vendor/pygments-main/pygments/formatters/rtf.py +29 -29
  46. data/vendor/pygments-main/pygments/formatters/svg.py +38 -4
  47. data/vendor/pygments-main/pygments/formatters/terminal.py +25 -31
  48. data/vendor/pygments-main/pygments/formatters/terminal256.py +22 -12
  49. data/vendor/pygments-main/pygments/lexer.py +41 -39
  50. data/vendor/pygments-main/pygments/lexers/__init__.py +342 -0
  51. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1645 -0
  52. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +232 -0
  53. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +71 -0
  54. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1725 -0
  55. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +5327 -0
  56. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +293 -0
  57. data/vendor/pygments-main/pygments/lexers/_mapping.py +551 -0
  58. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1172 -0
  59. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1282 -0
  60. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +2547 -0
  61. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +4753 -0
  62. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +678 -0
  63. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +3094 -0
  64. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1161 -0
  65. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +558 -0
  66. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +421 -0
  67. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1004 -0
  68. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +113 -0
  69. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +280 -0
  70. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1939 -0
  71. data/vendor/pygments-main/pygments/lexers/actionscript.py +245 -0
  72. data/vendor/pygments-main/pygments/lexers/agile.py +24 -0
  73. data/vendor/pygments-main/pygments/lexers/algebra.py +240 -0
  74. data/vendor/pygments-main/pygments/lexers/ambient.py +76 -0
  75. data/vendor/pygments-main/pygments/lexers/ampl.py +87 -0
  76. data/vendor/pygments-main/pygments/lexers/apl.py +101 -0
  77. data/vendor/pygments-main/pygments/lexers/archetype.py +318 -0
  78. data/vendor/pygments-main/pygments/lexers/arrow.py +117 -0
  79. data/vendor/pygments-main/pygments/lexers/asm.py +1005 -0
  80. data/vendor/pygments-main/pygments/lexers/automation.py +374 -0
  81. data/vendor/pygments-main/pygments/lexers/bare.py +104 -0
  82. data/vendor/pygments-main/pygments/lexers/basic.py +662 -0
  83. data/vendor/pygments-main/pygments/lexers/bibtex.py +160 -0
  84. data/vendor/pygments-main/pygments/lexers/boa.py +102 -0
  85. data/vendor/pygments-main/pygments/lexers/business.py +627 -0
  86. data/vendor/pygments-main/pygments/lexers/c_cpp.py +344 -0
  87. data/vendor/pygments-main/pygments/lexers/c_like.py +566 -0
  88. data/vendor/pygments-main/pygments/lexers/capnproto.py +78 -0
  89. data/vendor/pygments-main/pygments/lexers/chapel.py +112 -0
  90. data/vendor/pygments-main/pygments/lexers/clean.py +179 -0
  91. data/vendor/pygments-main/pygments/lexers/compiled.py +34 -0
  92. data/vendor/pygments-main/pygments/lexers/configs.py +984 -0
  93. data/vendor/pygments-main/pygments/lexers/console.py +114 -0
  94. data/vendor/pygments-main/pygments/lexers/crystal.py +392 -0
  95. data/vendor/pygments-main/pygments/lexers/csound.py +467 -0
  96. data/vendor/pygments-main/pygments/lexers/css.py +691 -0
  97. data/vendor/pygments-main/pygments/lexers/d.py +256 -0
  98. data/vendor/pygments-main/pygments/lexers/dalvik.py +125 -0
  99. data/vendor/pygments-main/pygments/lexers/data.py +698 -0
  100. data/vendor/pygments-main/pygments/lexers/devicetree.py +109 -0
  101. data/vendor/pygments-main/pygments/lexers/diff.py +165 -0
  102. data/vendor/pygments-main/pygments/lexers/dotnet.py +707 -0
  103. data/vendor/pygments-main/pygments/lexers/dsls.py +960 -0
  104. data/vendor/pygments-main/pygments/lexers/dylan.py +287 -0
  105. data/vendor/pygments-main/pygments/lexers/ecl.py +139 -0
  106. data/vendor/pygments-main/pygments/lexers/eiffel.py +65 -0
  107. data/vendor/pygments-main/pygments/lexers/elm.py +121 -0
  108. data/vendor/pygments-main/pygments/lexers/email.py +151 -0
  109. data/vendor/pygments-main/pygments/lexers/erlang.py +530 -0
  110. data/vendor/pygments-main/pygments/lexers/esoteric.py +304 -0
  111. data/vendor/pygments-main/pygments/lexers/ezhil.py +77 -0
  112. data/vendor/pygments-main/pygments/lexers/factor.py +344 -0
  113. data/vendor/pygments-main/pygments/lexers/fantom.py +250 -0
  114. data/vendor/pygments-main/pygments/lexers/felix.py +273 -0
  115. data/vendor/pygments-main/pygments/lexers/floscript.py +83 -0
  116. data/vendor/pygments-main/pygments/lexers/forth.py +178 -0
  117. data/vendor/pygments-main/pygments/lexers/fortran.py +206 -0
  118. data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
  119. data/vendor/pygments-main/pygments/lexers/freefem.py +898 -0
  120. data/vendor/pygments-main/pygments/lexers/functional.py +21 -0
  121. data/vendor/pygments-main/pygments/lexers/gdscript.py +346 -0
  122. data/vendor/pygments-main/pygments/lexers/go.py +101 -0
  123. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +270 -0
  124. data/vendor/pygments-main/pygments/lexers/graph.py +85 -0
  125. data/vendor/pygments-main/pygments/lexers/graphics.py +800 -0
  126. data/vendor/pygments-main/pygments/lexers/haskell.py +870 -0
  127. data/vendor/pygments-main/pygments/lexers/haxe.py +936 -0
  128. data/vendor/pygments-main/pygments/lexers/hdl.py +472 -0
  129. data/vendor/pygments-main/pygments/lexers/hexdump.py +103 -0
  130. data/vendor/pygments-main/pygments/lexers/html.py +614 -0
  131. data/vendor/pygments-main/pygments/lexers/idl.py +281 -0
  132. data/vendor/pygments-main/pygments/lexers/igor.py +420 -0
  133. data/vendor/pygments-main/pygments/lexers/inferno.py +96 -0
  134. data/vendor/pygments-main/pygments/lexers/installers.py +322 -0
  135. data/vendor/pygments-main/pygments/lexers/int_fiction.py +1368 -0
  136. data/vendor/pygments-main/pygments/lexers/iolang.py +63 -0
  137. data/vendor/pygments-main/pygments/lexers/j.py +146 -0
  138. data/vendor/pygments-main/pygments/lexers/javascript.py +1540 -0
  139. data/vendor/pygments-main/pygments/lexers/julia.py +331 -0
  140. data/vendor/pygments-main/pygments/lexers/jvm.py +1673 -0
  141. data/vendor/pygments-main/pygments/lexers/lisp.py +2699 -0
  142. data/vendor/pygments-main/pygments/lexers/make.py +206 -0
  143. data/vendor/pygments-main/pygments/lexers/markup.py +765 -0
  144. data/vendor/pygments-main/pygments/lexers/math.py +21 -0
  145. data/vendor/pygments-main/pygments/lexers/matlab.py +720 -0
  146. data/vendor/pygments-main/pygments/lexers/mime.py +226 -0
  147. data/vendor/pygments-main/pygments/lexers/ml.py +958 -0
  148. data/vendor/pygments-main/pygments/lexers/modeling.py +366 -0
  149. data/vendor/pygments-main/pygments/lexers/modula2.py +1580 -0
  150. data/vendor/pygments-main/pygments/lexers/monte.py +204 -0
  151. data/vendor/pygments-main/pygments/lexers/mosel.py +448 -0
  152. data/vendor/pygments-main/pygments/lexers/ncl.py +894 -0
  153. data/vendor/pygments-main/pygments/lexers/nimrod.py +159 -0
  154. data/vendor/pygments-main/pygments/lexers/nit.py +64 -0
  155. data/vendor/pygments-main/pygments/lexers/nix.py +136 -0
  156. data/vendor/pygments-main/pygments/lexers/oberon.py +121 -0
  157. data/vendor/pygments-main/pygments/lexers/objective.py +504 -0
  158. data/vendor/pygments-main/pygments/lexers/ooc.py +85 -0
  159. data/vendor/pygments-main/pygments/lexers/other.py +41 -0
  160. data/vendor/pygments-main/pygments/lexers/parasail.py +79 -0
  161. data/vendor/pygments-main/pygments/lexers/parsers.py +800 -0
  162. data/vendor/pygments-main/pygments/lexers/pascal.py +644 -0
  163. data/vendor/pygments-main/pygments/lexers/pawn.py +205 -0
  164. data/vendor/pygments-main/pygments/lexers/perl.py +732 -0
  165. data/vendor/pygments-main/pygments/lexers/php.py +321 -0
  166. data/vendor/pygments-main/pygments/lexers/pointless.py +71 -0
  167. data/vendor/pygments-main/pygments/lexers/pony.py +94 -0
  168. data/vendor/pygments-main/pygments/lexers/praat.py +302 -0
  169. data/vendor/pygments-main/pygments/lexers/prolog.py +306 -0
  170. data/vendor/pygments-main/pygments/lexers/promql.py +183 -0
  171. data/vendor/pygments-main/pygments/lexers/python.py +1151 -0
  172. data/vendor/pygments-main/pygments/lexers/qvt.py +152 -0
  173. data/vendor/pygments-main/pygments/lexers/r.py +191 -0
  174. data/vendor/pygments-main/pygments/lexers/rdf.py +463 -0
  175. data/vendor/pygments-main/pygments/lexers/rebol.py +431 -0
  176. data/vendor/pygments-main/pygments/lexers/resource.py +85 -0
  177. data/vendor/pygments-main/pygments/lexers/ride.py +139 -0
  178. data/vendor/pygments-main/pygments/lexers/rnc.py +67 -0
  179. data/vendor/pygments-main/pygments/lexers/roboconf.py +82 -0
  180. data/vendor/pygments-main/pygments/lexers/robotframework.py +552 -0
  181. data/vendor/pygments-main/pygments/lexers/ruby.py +517 -0
  182. data/vendor/pygments-main/pygments/lexers/rust.py +224 -0
  183. data/vendor/pygments-main/pygments/lexers/sas.py +228 -0
  184. data/vendor/pygments-main/pygments/lexers/scdoc.py +83 -0
  185. data/vendor/pygments-main/pygments/lexers/scripting.py +1284 -0
  186. data/vendor/pygments-main/pygments/lexers/sgf.py +61 -0
  187. data/vendor/pygments-main/pygments/lexers/shell.py +914 -0
  188. data/vendor/pygments-main/pygments/lexers/sieve.py +69 -0
  189. data/vendor/pygments-main/pygments/lexers/slash.py +185 -0
  190. data/vendor/pygments-main/pygments/lexers/smalltalk.py +195 -0
  191. data/vendor/pygments-main/pygments/lexers/smv.py +79 -0
  192. data/vendor/pygments-main/pygments/lexers/snobol.py +83 -0
  193. data/vendor/pygments-main/pygments/lexers/solidity.py +92 -0
  194. data/vendor/pygments-main/pygments/lexers/special.py +105 -0
  195. data/vendor/pygments-main/pygments/lexers/sql.py +837 -0
  196. data/vendor/pygments-main/pygments/lexers/stata.py +171 -0
  197. data/vendor/pygments-main/pygments/lexers/supercollider.py +95 -0
  198. data/vendor/pygments-main/pygments/lexers/tcl.py +145 -0
  199. data/vendor/pygments-main/pygments/lexers/templates.py +2264 -0
  200. data/vendor/pygments-main/pygments/lexers/teraterm.py +335 -0
  201. data/vendor/pygments-main/pygments/lexers/testing.py +207 -0
  202. data/vendor/pygments-main/pygments/lexers/text.py +26 -0
  203. data/vendor/pygments-main/pygments/lexers/textedit.py +169 -0
  204. data/vendor/pygments-main/pygments/lexers/textfmts.py +430 -0
  205. data/vendor/pygments-main/pygments/lexers/theorem.py +474 -0
  206. data/vendor/pygments-main/pygments/lexers/tnt.py +263 -0
  207. data/vendor/pygments-main/pygments/lexers/trafficscript.py +54 -0
  208. data/vendor/pygments-main/pygments/lexers/typoscript.py +219 -0
  209. data/vendor/pygments-main/pygments/lexers/unicon.py +412 -0
  210. data/vendor/pygments-main/pygments/lexers/urbi.py +146 -0
  211. data/vendor/pygments-main/pygments/lexers/usd.py +90 -0
  212. data/vendor/pygments-main/pygments/lexers/varnish.py +190 -0
  213. data/vendor/pygments-main/pygments/lexers/verification.py +114 -0
  214. data/vendor/pygments-main/pygments/lexers/web.py +24 -0
  215. data/vendor/pygments-main/pygments/lexers/webidl.py +299 -0
  216. data/vendor/pygments-main/pygments/lexers/webmisc.py +991 -0
  217. data/vendor/pygments-main/pygments/lexers/whiley.py +116 -0
  218. data/vendor/pygments-main/pygments/lexers/x10.py +69 -0
  219. data/vendor/pygments-main/pygments/lexers/xorg.py +37 -0
  220. data/vendor/pygments-main/pygments/lexers/yang.py +104 -0
  221. data/vendor/pygments-main/pygments/lexers/zig.py +124 -0
  222. data/vendor/pygments-main/pygments/modeline.py +1 -1
  223. data/vendor/pygments-main/pygments/plugin.py +4 -2
  224. data/vendor/pygments-main/pygments/regexopt.py +1 -1
  225. data/vendor/pygments-main/pygments/scanner.py +2 -2
  226. data/vendor/pygments-main/pygments/sphinxext.py +2 -4
  227. data/vendor/pygments-main/pygments/style.py +61 -24
  228. data/vendor/pygments-main/pygments/styles/__init__.py +10 -4
  229. data/vendor/pygments-main/pygments/styles/abap.py +1 -1
  230. data/vendor/pygments-main/pygments/styles/algol.py +1 -1
  231. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -1
  232. data/vendor/pygments-main/pygments/styles/arduino.py +2 -2
  233. data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
  234. data/vendor/pygments-main/pygments/styles/borland.py +1 -1
  235. data/vendor/pygments-main/pygments/styles/bw.py +1 -1
  236. data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
  237. data/vendor/pygments-main/pygments/styles/default.py +1 -1
  238. data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
  239. data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
  240. data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
  241. data/vendor/pygments-main/pygments/styles/igor.py +1 -1
  242. data/vendor/pygments-main/pygments/styles/inkpot.py +67 -0
  243. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -1
  244. data/vendor/pygments-main/pygments/styles/manni.py +1 -1
  245. data/vendor/pygments-main/pygments/styles/monokai.py +4 -3
  246. data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
  247. data/vendor/pygments-main/pygments/styles/native.py +1 -1
  248. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -1
  249. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -1
  250. data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
  251. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
  252. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -1
  253. data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
  254. data/vendor/pygments-main/pygments/styles/sas.py +1 -1
  255. data/vendor/pygments-main/pygments/styles/solarized.py +134 -0
  256. data/vendor/pygments-main/pygments/styles/stata_dark.py +41 -0
  257. data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -15
  258. data/vendor/pygments-main/pygments/styles/tango.py +1 -1
  259. data/vendor/pygments-main/pygments/styles/trac.py +1 -1
  260. data/vendor/pygments-main/pygments/styles/vim.py +1 -1
  261. data/vendor/pygments-main/pygments/styles/vs.py +1 -1
  262. data/vendor/pygments-main/pygments/styles/xcode.py +1 -1
  263. data/vendor/pygments-main/pygments/token.py +1 -1
  264. data/vendor/pygments-main/pygments/unistring.py +47 -108
  265. data/vendor/pygments-main/pygments/util.py +15 -92
  266. metadata +69 -136
  267. data/CHANGELOG.md +0 -111
  268. data/README.md +0 -121
  269. data/circle.yml +0 -20
  270. data/test/test_data.py +0 -514
  271. data/test/test_data_generated +0 -2582
  272. data/vendor/custom_lexers/github.py +0 -565
  273. data/vendor/pygments-main/CHANGES +0 -1186
  274. data/vendor/pygments-main/MANIFEST.in +0 -6
  275. data/vendor/pygments-main/Makefile +0 -65
  276. data/vendor/pygments-main/README.rst +0 -39
  277. data/vendor/pygments-main/REVISION +0 -1
  278. data/vendor/pygments-main/TODO +0 -12
  279. data/vendor/pygments-main/doc/Makefile +0 -153
  280. data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
  281. data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
  282. data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
  283. data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
  284. data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
  285. data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
  286. data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
  287. data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
  288. data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
  289. data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
  290. data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
  291. data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
  292. data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
  293. data/vendor/pygments-main/doc/conf.py +0 -241
  294. data/vendor/pygments-main/doc/docs/api.rst +0 -354
  295. data/vendor/pygments-main/doc/docs/authors.rst +0 -4
  296. data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
  297. data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
  298. data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
  299. data/vendor/pygments-main/doc/docs/filters.rst +0 -41
  300. data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
  301. data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
  302. data/vendor/pygments-main/doc/docs/index.rst +0 -66
  303. data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
  304. data/vendor/pygments-main/doc/docs/java.rst +0 -70
  305. data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
  306. data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
  307. data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
  308. data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
  309. data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
  310. data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
  311. data/vendor/pygments-main/doc/docs/styles.rst +0 -201
  312. data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
  313. data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
  314. data/vendor/pygments-main/doc/download.rst +0 -41
  315. data/vendor/pygments-main/doc/faq.rst +0 -139
  316. data/vendor/pygments-main/doc/index.rst +0 -54
  317. data/vendor/pygments-main/doc/languages.rst +0 -154
  318. data/vendor/pygments-main/doc/make.bat +0 -190
  319. data/vendor/pygments-main/doc/pygmentize.1 +0 -94
  320. data/vendor/pygments-main/external/autopygmentize +0 -101
  321. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
  322. data/vendor/pygments-main/external/markdown-processor.py +0 -67
  323. data/vendor/pygments-main/external/moin-parser.py +0 -112
  324. data/vendor/pygments-main/external/pygments.bashcomp +0 -38
  325. data/vendor/pygments-main/external/rst-directive.py +0 -82
  326. data/vendor/pygments-main/pygmentize +0 -8
  327. data/vendor/pygments-main/requirements.txt +0 -5
  328. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  329. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  330. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  331. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  332. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  333. data/vendor/pygments-main/scripts/pylintrc +0 -301
  334. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  335. data/vendor/pygments-main/setup.cfg +0 -10
  336. data/vendor/pygments-main/setup.py +0 -77
  337. data/vendor/pygments-main/tox.ini +0 -7
  338. data/vendor/simplejson/.gitignore +0 -10
  339. data/vendor/simplejson/.travis.yml +0 -5
  340. data/vendor/simplejson/CHANGES.txt +0 -291
  341. data/vendor/simplejson/LICENSE.txt +0 -19
  342. data/vendor/simplejson/MANIFEST.in +0 -5
  343. data/vendor/simplejson/README.rst +0 -19
  344. data/vendor/simplejson/conf.py +0 -179
  345. data/vendor/simplejson/index.rst +0 -628
  346. data/vendor/simplejson/scripts/make_docs.py +0 -18
  347. data/vendor/simplejson/setup.py +0 -104
  348. data/vendor/simplejson/simplejson/__init__.py +0 -510
  349. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  350. data/vendor/simplejson/simplejson/decoder.py +0 -425
  351. data/vendor/simplejson/simplejson/encoder.py +0 -567
  352. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  353. data/vendor/simplejson/simplejson/scanner.py +0 -77
  354. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  355. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  356. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  357. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  358. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  359. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  360. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  361. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  362. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  363. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  364. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  365. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  366. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  367. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  368. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  369. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  370. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  371. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  372. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  373. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  374. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  375. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  376. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  377. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  378. data/vendor/simplejson/simplejson/tool.py +0 -39
@@ -0,0 +1,26 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ pygments.lexers.text
4
+ ~~~~~~~~~~~~~~~~~~~~
5
+
6
+ Lexers for non-source code file types.
7
+
8
+ :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
9
+ :license: BSD, see LICENSE for details.
10
+ """
11
+
12
+ from pygments.lexers.configs import ApacheConfLexer, NginxConfLexer, \
13
+ SquidConfLexer, LighttpdConfLexer, IniLexer, RegeditLexer, PropertiesLexer
14
+ from pygments.lexers.console import PyPyLogLexer
15
+ from pygments.lexers.textedit import VimLexer
16
+ from pygments.lexers.markup import BBCodeLexer, MoinWikiLexer, RstLexer, \
17
+ TexLexer, GroffLexer
18
+ from pygments.lexers.installers import DebianControlLexer, SourcesListLexer
19
+ from pygments.lexers.make import MakefileLexer, BaseMakefileLexer, CMakeLexer
20
+ from pygments.lexers.haxe import HxmlLexer
21
+ from pygments.lexers.sgf import SmartGameFormatLexer
22
+ from pygments.lexers.diff import DiffLexer, DarcsPatchLexer
23
+ from pygments.lexers.data import YamlLexer
24
+ from pygments.lexers.textfmts import IrcLogsLexer, GettextLexer, HttpLexer
25
+
26
+ __all__ = []
@@ -0,0 +1,169 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ pygments.lexers.textedit
4
+ ~~~~~~~~~~~~~~~~~~~~~~~~
5
+
6
+ Lexers for languages related to text processing.
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
+ from bisect import bisect
14
+
15
+ from pygments.lexer import RegexLexer, include, default, bygroups, using, this
16
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
17
+ Number, Punctuation
18
+
19
+ from pygments.lexers.python import PythonLexer
20
+
21
+ __all__ = ['AwkLexer', 'VimLexer']
22
+
23
+
24
+ class AwkLexer(RegexLexer):
25
+ """
26
+ For Awk scripts.
27
+
28
+ .. versionadded:: 1.5
29
+ """
30
+
31
+ name = 'Awk'
32
+ aliases = ['awk', 'gawk', 'mawk', 'nawk']
33
+ filenames = ['*.awk']
34
+ mimetypes = ['application/x-awk']
35
+
36
+ tokens = {
37
+ 'commentsandwhitespace': [
38
+ (r'\s+', Text),
39
+ (r'#.*$', Comment.Single)
40
+ ],
41
+ 'slashstartsregex': [
42
+ include('commentsandwhitespace'),
43
+ (r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
44
+ r'\B', String.Regex, '#pop'),
45
+ (r'(?=/)', Text, ('#pop', 'badregex')),
46
+ default('#pop')
47
+ ],
48
+ 'badregex': [
49
+ (r'\n', Text, '#pop')
50
+ ],
51
+ 'root': [
52
+ (r'^(?=\s|/)', Text, 'slashstartsregex'),
53
+ include('commentsandwhitespace'),
54
+ (r'\+\+|--|\|\||&&|in\b|\$|!?~|'
55
+ r'(\*\*|[-<>+*%\^/!=|])=?', Operator, 'slashstartsregex'),
56
+ (r'[{(\[;,]', Punctuation, 'slashstartsregex'),
57
+ (r'[})\].]', Punctuation),
58
+ (r'(break|continue|do|while|exit|for|if|else|'
59
+ r'return)\b', Keyword, 'slashstartsregex'),
60
+ (r'function\b', Keyword.Declaration, 'slashstartsregex'),
61
+ (r'(atan2|cos|exp|int|log|rand|sin|sqrt|srand|gensub|gsub|index|'
62
+ r'length|match|split|sprintf|sub|substr|tolower|toupper|close|'
63
+ r'fflush|getline|next|nextfile|print|printf|strftime|systime|'
64
+ r'delete|system)\b', Keyword.Reserved),
65
+ (r'(ARGC|ARGIND|ARGV|BEGIN|CONVFMT|ENVIRON|END|ERRNO|FIELDWIDTHS|'
66
+ r'FILENAME|FNR|FS|IGNORECASE|NF|NR|OFMT|OFS|ORFS|RLENGTH|RS|'
67
+ r'RSTART|RT|SUBSEP)\b', Name.Builtin),
68
+ (r'[$a-zA-Z_]\w*', Name.Other),
69
+ (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
70
+ (r'0x[0-9a-fA-F]+', Number.Hex),
71
+ (r'[0-9]+', Number.Integer),
72
+ (r'"(\\\\|\\"|[^"])*"', String.Double),
73
+ (r"'(\\\\|\\'|[^'])*'", String.Single),
74
+ ]
75
+ }
76
+
77
+
78
+ class VimLexer(RegexLexer):
79
+ """
80
+ Lexer for VimL script files.
81
+
82
+ .. versionadded:: 0.8
83
+ """
84
+ name = 'VimL'
85
+ aliases = ['vim']
86
+ filenames = ['*.vim', '.vimrc', '.exrc', '.gvimrc',
87
+ '_vimrc', '_exrc', '_gvimrc', 'vimrc', 'gvimrc']
88
+ mimetypes = ['text/x-vim']
89
+ flags = re.MULTILINE
90
+
91
+ _python = r'py(?:t(?:h(?:o(?:n)?)?)?)?'
92
+
93
+ tokens = {
94
+ 'root': [
95
+ (r'^([ \t:]*)(' + _python + r')([ \t]*)(<<)([ \t]*)(.*)((?:\n|.)*)(\6)',
96
+ bygroups(using(this), Keyword, Text, Operator, Text, Text,
97
+ using(PythonLexer), Text)),
98
+ (r'^([ \t:]*)(' + _python + r')([ \t])(.*)',
99
+ bygroups(using(this), Keyword, Text, using(PythonLexer))),
100
+
101
+ (r'^\s*".*', Comment),
102
+
103
+ (r'[ \t]+', Text),
104
+ # TODO: regexes can have other delims
105
+ (r'/[^/\\\n]*(?:\\[\s\S][^/\\\n]*)*/', String.Regex),
106
+ (r'"[^"\\\n]*(?:\\[\s\S][^"\\\n]*)*"', String.Double),
107
+ (r"'[^\n']*(?:''[^\n']*)*'", String.Single),
108
+
109
+ # Who decided that doublequote was a good comment character??
110
+ (r'(?<=\s)"[^\-:.%#=*].*', Comment),
111
+ (r'-?\d+', Number),
112
+ (r'#[0-9a-f]{6}', Number.Hex),
113
+ (r'^:', Punctuation),
114
+ (r'[()<>+=!|,~-]', Punctuation), # Inexact list. Looks decent.
115
+ (r'\b(let|if|else|endif|elseif|fun|function|endfunction)\b',
116
+ Keyword),
117
+ (r'\b(NONE|bold|italic|underline|dark|light)\b', Name.Builtin),
118
+ (r'\b\w+\b', Name.Other), # These are postprocessed below
119
+ (r'.', Text),
120
+ ],
121
+ }
122
+
123
+ def __init__(self, **options):
124
+ from pygments.lexers._vim_builtins import command, option, auto
125
+ self._cmd = command
126
+ self._opt = option
127
+ self._aut = auto
128
+
129
+ RegexLexer.__init__(self, **options)
130
+
131
+ def is_in(self, w, mapping):
132
+ r"""
133
+ It's kind of difficult to decide if something might be a keyword
134
+ in VimL because it allows you to abbreviate them. In fact,
135
+ 'ab[breviate]' is a good example. :ab, :abbre, or :abbreviate are
136
+ valid ways to call it so rather than making really awful regexps
137
+ like::
138
+
139
+ \bab(?:b(?:r(?:e(?:v(?:i(?:a(?:t(?:e)?)?)?)?)?)?)?)?\b
140
+
141
+ we match `\b\w+\b` and then call is_in() on those tokens. See
142
+ `scripts/get_vimkw.py` for how the lists are extracted.
143
+ """
144
+ p = bisect(mapping, (w,))
145
+ if p > 0:
146
+ if mapping[p-1][0] == w[:len(mapping[p-1][0])] and \
147
+ mapping[p-1][1][:len(w)] == w:
148
+ return True
149
+ if p < len(mapping):
150
+ return mapping[p][0] == w[:len(mapping[p][0])] and \
151
+ mapping[p][1][:len(w)] == w
152
+ return False
153
+
154
+ def get_tokens_unprocessed(self, text):
155
+ # TODO: builtins are only subsequent tokens on lines
156
+ # and 'keywords' only happen at the beginning except
157
+ # for :au ones
158
+ for index, token, value in \
159
+ RegexLexer.get_tokens_unprocessed(self, text):
160
+ if token is Name.Other:
161
+ if self.is_in(value, self._cmd):
162
+ yield index, Keyword, value
163
+ elif self.is_in(value, self._opt) or \
164
+ self.is_in(value, self._aut):
165
+ yield index, Name.Builtin, value
166
+ else:
167
+ yield index, Text, value
168
+ else:
169
+ yield index, token, value
@@ -0,0 +1,430 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ pygments.lexers.textfmts
4
+ ~~~~~~~~~~~~~~~~~~~~~~~~
5
+
6
+ Lexers for various text formats.
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.lexers import guess_lexer, get_lexer_by_name
15
+ from pygments.lexer import RegexLexer, bygroups, default, include
16
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
17
+ Number, Generic, Literal, Punctuation
18
+ from pygments.util import ClassNotFound
19
+
20
+ __all__ = ['IrcLogsLexer', 'TodotxtLexer', 'HttpLexer', 'GettextLexer',
21
+ 'NotmuchLexer', 'KernelLogLexer']
22
+
23
+
24
+ class IrcLogsLexer(RegexLexer):
25
+ """
26
+ Lexer for IRC logs in *irssi*, *xchat* or *weechat* style.
27
+ """
28
+
29
+ name = 'IRC logs'
30
+ aliases = ['irc']
31
+ filenames = ['*.weechatlog']
32
+ mimetypes = ['text/x-irclog']
33
+
34
+ flags = re.VERBOSE | re.MULTILINE
35
+ timestamp = r"""
36
+ (
37
+ # irssi / xchat and others
38
+ (?: \[|\()? # Opening bracket or paren for the timestamp
39
+ (?: # Timestamp
40
+ (?: (?:\d{1,4} [-/])* # Date as - or /-separated groups of digits
41
+ (?:\d{1,4})
42
+ [T ])? # Date/time separator: T or space
43
+ (?: \d?\d [:.])* # Time as :/.-separated groups of 1 or 2 digits
44
+ (?: \d?\d)
45
+ )
46
+ (?: \]|\))?\s+ # Closing bracket or paren for the timestamp
47
+ |
48
+ # weechat
49
+ \d{4}\s\w{3}\s\d{2}\s # Date
50
+ \d{2}:\d{2}:\d{2}\s+ # Time + Whitespace
51
+ |
52
+ # xchat
53
+ \w{3}\s\d{2}\s # Date
54
+ \d{2}:\d{2}:\d{2}\s+ # Time + Whitespace
55
+ )?
56
+ """
57
+ tokens = {
58
+ 'root': [
59
+ # log start/end
60
+ (r'^\*\*\*\*(.*)\*\*\*\*$', Comment),
61
+ # hack
62
+ ("^" + timestamp + r'(\s*<[^>]*>\s*)$', bygroups(Comment.Preproc, Name.Tag)),
63
+ # normal msgs
64
+ ("^" + timestamp + r"""
65
+ (\s*<.*?>\s*) # Nick """,
66
+ bygroups(Comment.Preproc, Name.Tag), 'msg'),
67
+ # /me msgs
68
+ ("^" + timestamp + r"""
69
+ (\s*[*]\s+) # Star
70
+ (\S+\s+.*?\n) # Nick + rest of message """,
71
+ bygroups(Comment.Preproc, Keyword, Generic.Inserted)),
72
+ # join/part msgs
73
+ ("^" + timestamp + r"""
74
+ (\s*(?:\*{3}|<?-[!@=P]?->?)\s*) # Star(s) or symbols
75
+ (\S+\s+) # Nick + Space
76
+ (.*?\n) # Rest of message """,
77
+ bygroups(Comment.Preproc, Keyword, String, Comment)),
78
+ (r"^.*?\n", Text),
79
+ ],
80
+ 'msg': [
81
+ (r"\S+:(?!//)", Name.Attribute), # Prefix
82
+ (r".*\n", Text, '#pop'),
83
+ ],
84
+ }
85
+
86
+
87
+ class GettextLexer(RegexLexer):
88
+ """
89
+ Lexer for Gettext catalog files.
90
+
91
+ .. versionadded:: 0.9
92
+ """
93
+ name = 'Gettext Catalog'
94
+ aliases = ['pot', 'po']
95
+ filenames = ['*.pot', '*.po']
96
+ mimetypes = ['application/x-gettext', 'text/x-gettext', 'text/gettext']
97
+
98
+ tokens = {
99
+ 'root': [
100
+ (r'^#,\s.*?$', Keyword.Type),
101
+ (r'^#:\s.*?$', Keyword.Declaration),
102
+ # (r'^#$', Comment),
103
+ (r'^(#|#\.\s|#\|\s|#~\s|#\s).*$', Comment.Single),
104
+ (r'^(")([A-Za-z-]+:)(.*")$',
105
+ bygroups(String, Name.Property, String)),
106
+ (r'^".*"$', String),
107
+ (r'^(msgid|msgid_plural|msgstr|msgctxt)(\s+)(".*")$',
108
+ bygroups(Name.Variable, Text, String)),
109
+ (r'^(msgstr\[)(\d)(\])(\s+)(".*")$',
110
+ bygroups(Name.Variable, Number.Integer, Name.Variable, Text, String)),
111
+ ]
112
+ }
113
+
114
+
115
+ class HttpLexer(RegexLexer):
116
+ """
117
+ Lexer for HTTP sessions.
118
+
119
+ .. versionadded:: 1.5
120
+ """
121
+
122
+ name = 'HTTP'
123
+ aliases = ['http']
124
+
125
+ flags = re.DOTALL
126
+
127
+ def get_tokens_unprocessed(self, text, stack=('root',)):
128
+ """Reset the content-type state."""
129
+ self.content_type = None
130
+ return RegexLexer.get_tokens_unprocessed(self, text, stack)
131
+
132
+ def header_callback(self, match):
133
+ if match.group(1).lower() == 'content-type':
134
+ content_type = match.group(5).strip()
135
+ if ';' in content_type:
136
+ content_type = content_type[:content_type.find(';')].strip()
137
+ self.content_type = content_type
138
+ yield match.start(1), Name.Attribute, match.group(1)
139
+ yield match.start(2), Text, match.group(2)
140
+ yield match.start(3), Operator, match.group(3)
141
+ yield match.start(4), Text, match.group(4)
142
+ yield match.start(5), Literal, match.group(5)
143
+ yield match.start(6), Text, match.group(6)
144
+
145
+ def continuous_header_callback(self, match):
146
+ yield match.start(1), Text, match.group(1)
147
+ yield match.start(2), Literal, match.group(2)
148
+ yield match.start(3), Text, match.group(3)
149
+
150
+ def content_callback(self, match):
151
+ content_type = getattr(self, 'content_type', None)
152
+ content = match.group()
153
+ offset = match.start()
154
+ if content_type:
155
+ from pygments.lexers import get_lexer_for_mimetype
156
+ possible_lexer_mimetypes = [content_type]
157
+ if '+' in content_type:
158
+ # application/calendar+xml can be treated as application/xml
159
+ # if there's not a better match.
160
+ general_type = re.sub(r'^(.*)/.*\+(.*)$', r'\1/\2',
161
+ content_type)
162
+ possible_lexer_mimetypes.append(general_type)
163
+
164
+ for i in possible_lexer_mimetypes:
165
+ try:
166
+ lexer = get_lexer_for_mimetype(i)
167
+ except ClassNotFound:
168
+ pass
169
+ else:
170
+ for idx, token, value in lexer.get_tokens_unprocessed(content):
171
+ yield offset + idx, token, value
172
+ return
173
+ yield offset, Text, content
174
+
175
+ tokens = {
176
+ 'root': [
177
+ (r'(GET|POST|PUT|DELETE|HEAD|OPTIONS|TRACE|PATCH)( +)([^ ]+)( +)'
178
+ r'(HTTP)(/)(1\.[01]|2(?:\.0)?|3)(\r?\n|\Z)',
179
+ bygroups(Name.Function, Text, Name.Namespace, Text,
180
+ Keyword.Reserved, Operator, Number, Text),
181
+ 'headers'),
182
+ (r'(HTTP)(/)(1\.[01]|2(?:\.0)?|3)( +)(\d{3})(?:( +)([^\r\n]*))?(\r?\n|\Z)',
183
+ bygroups(Keyword.Reserved, Operator, Number, Text, Number, Text,
184
+ Name.Exception, Text),
185
+ 'headers'),
186
+ ],
187
+ 'headers': [
188
+ (r'([^\s:]+)( *)(:)( *)([^\r\n]+)(\r?\n|\Z)', header_callback),
189
+ (r'([\t ]+)([^\r\n]+)(\r?\n|\Z)', continuous_header_callback),
190
+ (r'\r?\n', Text, 'content')
191
+ ],
192
+ 'content': [
193
+ (r'.+', content_callback)
194
+ ]
195
+ }
196
+
197
+ def analyse_text(text):
198
+ return text.startswith(('GET /', 'POST /', 'PUT /', 'DELETE /', 'HEAD /',
199
+ 'OPTIONS /', 'TRACE /', 'PATCH /'))
200
+
201
+
202
+ class TodotxtLexer(RegexLexer):
203
+ """
204
+ Lexer for `Todo.txt <http://todotxt.com/>`_ todo list format.
205
+
206
+ .. versionadded:: 2.0
207
+ """
208
+
209
+ name = 'Todotxt'
210
+ aliases = ['todotxt']
211
+ # *.todotxt is not a standard extension for Todo.txt files; including it
212
+ # makes testing easier, and also makes autodetecting file type easier.
213
+ filenames = ['todo.txt', '*.todotxt']
214
+ mimetypes = ['text/x-todo']
215
+
216
+ # Aliases mapping standard token types of Todo.txt format concepts
217
+ CompleteTaskText = Operator # Chosen to de-emphasize complete tasks
218
+ IncompleteTaskText = Text # Incomplete tasks should look like plain text
219
+
220
+ # Priority should have most emphasis to indicate importance of tasks
221
+ Priority = Generic.Heading
222
+ # Dates should have next most emphasis because time is important
223
+ Date = Generic.Subheading
224
+
225
+ # Project and context should have equal weight, and be in different colors
226
+ Project = Generic.Error
227
+ Context = String
228
+
229
+ # If tag functionality is added, it should have the same weight as Project
230
+ # and Context, and a different color. Generic.Traceback would work well.
231
+
232
+ # Regex patterns for building up rules; dates, priorities, projects, and
233
+ # contexts are all atomic
234
+ # TODO: Make date regex more ISO 8601 compliant
235
+ date_regex = r'\d{4,}-\d{2}-\d{2}'
236
+ priority_regex = r'\([A-Z]\)'
237
+ project_regex = r'\+\S+'
238
+ context_regex = r'@\S+'
239
+
240
+ # Compound regex expressions
241
+ complete_one_date_regex = r'(x )(' + date_regex + r')'
242
+ complete_two_date_regex = (complete_one_date_regex + r'( )(' +
243
+ date_regex + r')')
244
+ priority_date_regex = r'(' + priority_regex + r')( )(' + date_regex + r')'
245
+
246
+ tokens = {
247
+ # Should parse starting at beginning of line; each line is a task
248
+ 'root': [
249
+ # Complete task entry points: two total:
250
+ # 1. Complete task with two dates
251
+ (complete_two_date_regex, bygroups(CompleteTaskText, Date,
252
+ CompleteTaskText, Date),
253
+ 'complete'),
254
+ # 2. Complete task with one date
255
+ (complete_one_date_regex, bygroups(CompleteTaskText, Date),
256
+ 'complete'),
257
+
258
+ # Incomplete task entry points: six total:
259
+ # 1. Priority plus date
260
+ (priority_date_regex, bygroups(Priority, IncompleteTaskText, Date),
261
+ 'incomplete'),
262
+ # 2. Priority only
263
+ (priority_regex, Priority, 'incomplete'),
264
+ # 3. Leading date
265
+ (date_regex, Date, 'incomplete'),
266
+ # 4. Leading context
267
+ (context_regex, Context, 'incomplete'),
268
+ # 5. Leading project
269
+ (project_regex, Project, 'incomplete'),
270
+ # 6. Non-whitespace catch-all
271
+ (r'\S+', IncompleteTaskText, 'incomplete'),
272
+ ],
273
+
274
+ # Parse a complete task
275
+ 'complete': [
276
+ # Newline indicates end of task, should return to root
277
+ (r'\s*\n', CompleteTaskText, '#pop'),
278
+ # Tokenize contexts and projects
279
+ (context_regex, Context),
280
+ (project_regex, Project),
281
+ # Tokenize non-whitespace text
282
+ (r'\S+', CompleteTaskText),
283
+ # Tokenize whitespace not containing a newline
284
+ (r'\s+', CompleteTaskText),
285
+ ],
286
+
287
+ # Parse an incomplete task
288
+ 'incomplete': [
289
+ # Newline indicates end of task, should return to root
290
+ (r'\s*\n', IncompleteTaskText, '#pop'),
291
+ # Tokenize contexts and projects
292
+ (context_regex, Context),
293
+ (project_regex, Project),
294
+ # Tokenize non-whitespace text
295
+ (r'\S+', IncompleteTaskText),
296
+ # Tokenize whitespace not containing a newline
297
+ (r'\s+', IncompleteTaskText),
298
+ ],
299
+ }
300
+
301
+
302
+ class NotmuchLexer(RegexLexer):
303
+ """
304
+ For `Notmuch <https://notmuchmail.org/>`_ email text format.
305
+
306
+ .. versionadded:: 2.5
307
+
308
+ Additional options accepted:
309
+
310
+ `body_lexer`
311
+ If given, highlight the contents of the message body with the specified
312
+ lexer, else guess it according to the body content (default: ``None``).
313
+ """
314
+
315
+ name = 'Notmuch'
316
+ aliases = ['notmuch']
317
+
318
+ def _highlight_code(self, match):
319
+ code = match.group(1)
320
+
321
+ try:
322
+ if self.body_lexer:
323
+ lexer = get_lexer_by_name(self.body_lexer)
324
+ else:
325
+ lexer = guess_lexer(code.strip())
326
+ except ClassNotFound:
327
+ lexer = get_lexer_by_name('text')
328
+
329
+ yield from lexer.get_tokens_unprocessed(code)
330
+
331
+ tokens = {
332
+ 'root': [
333
+ (r'\fmessage\{\s*', Keyword, ('message', 'message-attr')),
334
+ ],
335
+ 'message-attr': [
336
+ (r'(\s*id:\s*)(\S+)', bygroups(Name.Attribute, String)),
337
+ (r'(\s*(?:depth|match|excluded):\s*)(\d+)',
338
+ bygroups(Name.Attribute, Number.Integer)),
339
+ (r'(\s*filename:\s*)(.+\n)',
340
+ bygroups(Name.Attribute, String)),
341
+ default('#pop'),
342
+ ],
343
+ 'message': [
344
+ (r'\fmessage\}\n', Keyword, '#pop'),
345
+ (r'\fheader\{\n', Keyword, 'header'),
346
+ (r'\fbody\{\n', Keyword, 'body'),
347
+ ],
348
+ 'header': [
349
+ (r'\fheader\}\n', Keyword, '#pop'),
350
+ (r'((?:Subject|From|To|Cc|Date):\s*)(.*\n)',
351
+ bygroups(Name.Attribute, String)),
352
+ (r'(.*)(\s*\(.*\))(\s*\(.*\)\n)',
353
+ bygroups(Generic.Strong, Literal, Name.Tag)),
354
+ ],
355
+ 'body': [
356
+ (r'\fpart\{\n', Keyword, 'part'),
357
+ (r'\f(part|attachment)\{\s*', Keyword, ('part', 'part-attr')),
358
+ (r'\fbody\}\n', Keyword, '#pop'),
359
+ ],
360
+ 'part-attr': [
361
+ (r'(ID:\s*)(\d+)', bygroups(Name.Attribute, Number.Integer)),
362
+ (r'(,\s*)((?:Filename|Content-id):\s*)([^,]+)',
363
+ bygroups(Punctuation, Name.Attribute, String)),
364
+ (r'(,\s*)(Content-type:\s*)(.+\n)',
365
+ bygroups(Punctuation, Name.Attribute, String)),
366
+ default('#pop'),
367
+ ],
368
+ 'part': [
369
+ (r'\f(?:part|attachment)\}\n', Keyword, '#pop'),
370
+ (r'\f(?:part|attachment)\{\s*', Keyword, ('#push', 'part-attr')),
371
+ (r'^Non-text part: .*\n', Comment),
372
+ (r'(?s)(.*?(?=\f(?:part|attachment)\}\n))', _highlight_code),
373
+ ],
374
+ }
375
+
376
+ def analyse_text(text):
377
+ return 1.0 if text.startswith('\fmessage{') else 0.0
378
+
379
+ def __init__(self, **options):
380
+ self.body_lexer = options.get('body_lexer', None)
381
+ RegexLexer.__init__(self, **options)
382
+
383
+
384
+ class KernelLogLexer(RegexLexer):
385
+ """
386
+ For Linux Kernel log ("dmesg") output.
387
+
388
+ .. versionadded:: 2.6
389
+ """
390
+ name = 'Kernel log'
391
+ aliases = ['kmsg', 'dmesg']
392
+ filenames = ['*.kmsg', '*.dmesg']
393
+
394
+ tokens = {
395
+ 'root': [
396
+ (r'^[^:]+:debug : (?=\[)', Text, 'debug'),
397
+ (r'^[^:]+:info : (?=\[)', Text, 'info'),
398
+ (r'^[^:]+:warn : (?=\[)', Text, 'warn'),
399
+ (r'^[^:]+:notice: (?=\[)', Text, 'warn'),
400
+ (r'^[^:]+:err : (?=\[)', Text, 'error'),
401
+ (r'^[^:]+:crit : (?=\[)', Text, 'error'),
402
+ (r'^(?=\[)', Text, 'unknown'),
403
+ ],
404
+ 'unknown': [
405
+ (r'^(?=.+(warning|notice|audit|deprecated))', Text, 'warn'),
406
+ (r'^(?=.+(error|critical|fail|Bug))', Text, 'error'),
407
+ default('info'),
408
+ ],
409
+ 'base': [
410
+ (r'\[[0-9. ]+\] ', Number),
411
+ (r'(?<=\] ).+?:', Keyword),
412
+ (r'\n', Text, '#pop'),
413
+ ],
414
+ 'debug': [
415
+ include('base'),
416
+ (r'.+\n', Comment, '#pop')
417
+ ],
418
+ 'info': [
419
+ include('base'),
420
+ (r'.+\n', Text, '#pop')
421
+ ],
422
+ 'warn': [
423
+ include('base'),
424
+ (r'.+\n', Generic.Strong, '#pop')
425
+ ],
426
+ 'error': [
427
+ include('base'),
428
+ (r'.+\n', Generic.Error, '#pop')
429
+ ]
430
+ }