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