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,205 @@
1
+ """
2
+ pygments.lexers.make
3
+ ~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for Makefiles and similar.
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.lexer import Lexer, RegexLexer, include, bygroups, \
14
+ do_insertions, using
15
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
16
+ Punctuation
17
+ from pygments.lexers.shell import BashLexer
18
+
19
+ __all__ = ['MakefileLexer', 'BaseMakefileLexer', 'CMakeLexer']
20
+
21
+
22
+ class MakefileLexer(Lexer):
23
+ """
24
+ Lexer for BSD and GNU make extensions (lenient enough to handle both in
25
+ the same file even).
26
+
27
+ *Rewritten in Pygments 0.10.*
28
+ """
29
+
30
+ name = 'Makefile'
31
+ aliases = ['make', 'makefile', 'mf', 'bsdmake']
32
+ filenames = ['*.mak', '*.mk', 'Makefile', 'makefile', 'Makefile.*', 'GNUmakefile']
33
+ mimetypes = ['text/x-makefile']
34
+
35
+ r_special = re.compile(
36
+ r'^(?:'
37
+ # BSD Make
38
+ r'\.\s*(include|undef|error|warning|if|else|elif|endif|for|endfor)|'
39
+ # GNU Make
40
+ r'\s*(ifeq|ifneq|ifdef|ifndef|else|endif|-?include|define|endef|:|vpath)|'
41
+ # GNU Automake
42
+ r'\s*(if|else|endif))(?=\s)')
43
+ r_comment = re.compile(r'^\s*@?#')
44
+
45
+ def get_tokens_unprocessed(self, text):
46
+ ins = []
47
+ lines = text.splitlines(True)
48
+ done = ''
49
+ lex = BaseMakefileLexer(**self.options)
50
+ backslashflag = False
51
+ for line in lines:
52
+ if self.r_special.match(line) or backslashflag:
53
+ ins.append((len(done), [(0, Comment.Preproc, line)]))
54
+ backslashflag = line.strip().endswith('\\')
55
+ elif self.r_comment.match(line):
56
+ ins.append((len(done), [(0, Comment, line)]))
57
+ else:
58
+ done += line
59
+ yield from do_insertions(ins, lex.get_tokens_unprocessed(done))
60
+
61
+ def analyse_text(text):
62
+ # Many makefiles have $(BIG_CAPS) style variables
63
+ if re.search(r'\$\([A-Z_]+\)', text):
64
+ return 0.1
65
+
66
+
67
+ class BaseMakefileLexer(RegexLexer):
68
+ """
69
+ Lexer for simple Makefiles (no preprocessing).
70
+
71
+ .. versionadded:: 0.10
72
+ """
73
+
74
+ name = 'Base Makefile'
75
+ aliases = ['basemake']
76
+ filenames = []
77
+ mimetypes = []
78
+
79
+ tokens = {
80
+ 'root': [
81
+ # recipes (need to allow spaces because of expandtabs)
82
+ (r'^(?:[\t ]+.*\n|\n)+', using(BashLexer)),
83
+ # special variables
84
+ (r'\$[<@$+%?|*]', Keyword),
85
+ (r'\s+', Text),
86
+ (r'#.*?\n', Comment),
87
+ (r'(export)(\s+)(?=[\w${}\t -]+\n)',
88
+ bygroups(Keyword, Text), 'export'),
89
+ (r'export\s+', Keyword),
90
+ # assignment
91
+ (r'([\w${}().-]+)(\s*)([!?:+]?=)([ \t]*)((?:.*\\\n)+|.*\n)',
92
+ bygroups(Name.Variable, Text, Operator, Text, using(BashLexer))),
93
+ # strings
94
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
95
+ (r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),
96
+ # targets
97
+ (r'([^\n:]+)(:+)([ \t]*)', bygroups(Name.Function, Operator, Text),
98
+ 'block-header'),
99
+ # expansions
100
+ (r'\$\(', Keyword, 'expansion'),
101
+ ],
102
+ 'expansion': [
103
+ (r'[^\w$().-]+', Text),
104
+ (r'[\w.-]+', Name.Variable),
105
+ (r'\$', Keyword),
106
+ (r'\(', Keyword, '#push'),
107
+ (r'\)', Keyword, '#pop'),
108
+ ],
109
+ 'export': [
110
+ (r'[\w${}-]+', Name.Variable),
111
+ (r'\n', Text, '#pop'),
112
+ (r'\s+', Text),
113
+ ],
114
+ 'block-header': [
115
+ (r'[,|]', Punctuation),
116
+ (r'#.*?\n', Comment, '#pop'),
117
+ (r'\\\n', Text), # line continuation
118
+ (r'\$\(', Keyword, 'expansion'),
119
+ (r'[a-zA-Z_]+', Name),
120
+ (r'\n', Text, '#pop'),
121
+ (r'.', Text),
122
+ ],
123
+ }
124
+
125
+
126
+ class CMakeLexer(RegexLexer):
127
+ """
128
+ Lexer for `CMake <http://cmake.org/Wiki/CMake>`_ files.
129
+
130
+ .. versionadded:: 1.2
131
+ """
132
+ name = 'CMake'
133
+ aliases = ['cmake']
134
+ filenames = ['*.cmake', 'CMakeLists.txt']
135
+ mimetypes = ['text/x-cmake']
136
+
137
+ tokens = {
138
+ 'root': [
139
+ # (r'(ADD_CUSTOM_COMMAND|ADD_CUSTOM_TARGET|ADD_DEFINITIONS|'
140
+ # r'ADD_DEPENDENCIES|ADD_EXECUTABLE|ADD_LIBRARY|ADD_SUBDIRECTORY|'
141
+ # r'ADD_TEST|AUX_SOURCE_DIRECTORY|BUILD_COMMAND|BUILD_NAME|'
142
+ # r'CMAKE_MINIMUM_REQUIRED|CONFIGURE_FILE|CREATE_TEST_SOURCELIST|'
143
+ # r'ELSE|ELSEIF|ENABLE_LANGUAGE|ENABLE_TESTING|ENDFOREACH|'
144
+ # r'ENDFUNCTION|ENDIF|ENDMACRO|ENDWHILE|EXEC_PROGRAM|'
145
+ # r'EXECUTE_PROCESS|EXPORT_LIBRARY_DEPENDENCIES|FILE|FIND_FILE|'
146
+ # r'FIND_LIBRARY|FIND_PACKAGE|FIND_PATH|FIND_PROGRAM|FLTK_WRAP_UI|'
147
+ # r'FOREACH|FUNCTION|GET_CMAKE_PROPERTY|GET_DIRECTORY_PROPERTY|'
148
+ # r'GET_FILENAME_COMPONENT|GET_SOURCE_FILE_PROPERTY|'
149
+ # r'GET_TARGET_PROPERTY|GET_TEST_PROPERTY|IF|INCLUDE|'
150
+ # r'INCLUDE_DIRECTORIES|INCLUDE_EXTERNAL_MSPROJECT|'
151
+ # r'INCLUDE_REGULAR_EXPRESSION|INSTALL|INSTALL_FILES|'
152
+ # r'INSTALL_PROGRAMS|INSTALL_TARGETS|LINK_DIRECTORIES|'
153
+ # r'LINK_LIBRARIES|LIST|LOAD_CACHE|LOAD_COMMAND|MACRO|'
154
+ # r'MAKE_DIRECTORY|MARK_AS_ADVANCED|MATH|MESSAGE|OPTION|'
155
+ # r'OUTPUT_REQUIRED_FILES|PROJECT|QT_WRAP_CPP|QT_WRAP_UI|REMOVE|'
156
+ # r'REMOVE_DEFINITIONS|SEPARATE_ARGUMENTS|SET|'
157
+ # r'SET_DIRECTORY_PROPERTIES|SET_SOURCE_FILES_PROPERTIES|'
158
+ # r'SET_TARGET_PROPERTIES|SET_TESTS_PROPERTIES|SITE_NAME|'
159
+ # r'SOURCE_GROUP|STRING|SUBDIR_DEPENDS|SUBDIRS|'
160
+ # r'TARGET_LINK_LIBRARIES|TRY_COMPILE|TRY_RUN|UNSET|'
161
+ # r'USE_MANGLED_MESA|UTILITY_SOURCE|VARIABLE_REQUIRES|'
162
+ # r'VTK_MAKE_INSTANTIATOR|VTK_WRAP_JAVA|VTK_WRAP_PYTHON|'
163
+ # r'VTK_WRAP_TCL|WHILE|WRITE_FILE|'
164
+ # r'COUNTARGS)\b', Name.Builtin, 'args'),
165
+ (r'\b(\w+)([ \t]*)(\()', bygroups(Name.Builtin, Text,
166
+ Punctuation), 'args'),
167
+ include('keywords'),
168
+ include('ws')
169
+ ],
170
+ 'args': [
171
+ (r'\(', Punctuation, '#push'),
172
+ (r'\)', Punctuation, '#pop'),
173
+ (r'(\$\{)(.+?)(\})', bygroups(Operator, Name.Variable, Operator)),
174
+ (r'(\$ENV\{)(.+?)(\})', bygroups(Operator, Name.Variable, Operator)),
175
+ (r'(\$<)(.+?)(>)', bygroups(Operator, Name.Variable, Operator)),
176
+ (r'(?s)".*?"', String.Double),
177
+ (r'\\\S+', String),
178
+ (r'[^)$"# \t\n]+', String),
179
+ (r'\n', Text), # explicitly legal
180
+ include('keywords'),
181
+ include('ws')
182
+ ],
183
+ 'string': [
184
+
185
+ ],
186
+ 'keywords': [
187
+ (r'\b(WIN32|UNIX|APPLE|CYGWIN|BORLAND|MINGW|MSVC|MSVC_IDE|MSVC60|'
188
+ r'MSVC70|MSVC71|MSVC80|MSVC90)\b', Keyword),
189
+ ],
190
+ 'ws': [
191
+ (r'[ \t]+', Text),
192
+ (r'#.*\n', Comment),
193
+ ]
194
+ }
195
+
196
+ def analyse_text(text):
197
+ exp = (
198
+ r'^[ \t]*CMAKE_MINIMUM_REQUIRED[ \t]*'
199
+ r'\([ \t]*VERSION[ \t]*\d+(\.\d+)*[ \t]*'
200
+ r'([ \t]FATAL_ERROR)?[ \t]*\)[ \t]*'
201
+ r'(#[^\n]*)?$'
202
+ )
203
+ if re.search(exp, text, flags=re.MULTILINE | re.IGNORECASE):
204
+ return 0.8
205
+ return 0.0
@@ -0,0 +1,762 @@
1
+ """
2
+ pygments.lexers.markup
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for non-HTML markup languages.
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.html import HtmlLexer, XmlLexer
14
+ from pygments.lexers.javascript import JavascriptLexer
15
+ from pygments.lexers.css import CssLexer
16
+
17
+ from pygments.lexer import RegexLexer, DelegatingLexer, include, bygroups, \
18
+ using, this, do_insertions, default, words
19
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
20
+ Number, Punctuation, Generic, Other
21
+ from pygments.util import get_bool_opt, ClassNotFound
22
+
23
+ __all__ = ['BBCodeLexer', 'MoinWikiLexer', 'RstLexer', 'TexLexer', 'GroffLexer',
24
+ 'MozPreprocHashLexer', 'MozPreprocPercentLexer',
25
+ 'MozPreprocXulLexer', 'MozPreprocJavascriptLexer',
26
+ 'MozPreprocCssLexer', 'MarkdownLexer', 'TiddlyWiki5Lexer']
27
+
28
+
29
+ class BBCodeLexer(RegexLexer):
30
+ """
31
+ A lexer that highlights BBCode(-like) syntax.
32
+
33
+ .. versionadded:: 0.6
34
+ """
35
+
36
+ name = 'BBCode'
37
+ aliases = ['bbcode']
38
+ mimetypes = ['text/x-bbcode']
39
+
40
+ tokens = {
41
+ 'root': [
42
+ (r'[^[]+', Text),
43
+ # tag/end tag begin
44
+ (r'\[/?\w+', Keyword, 'tag'),
45
+ # stray bracket
46
+ (r'\[', Text),
47
+ ],
48
+ 'tag': [
49
+ (r'\s+', Text),
50
+ # attribute with value
51
+ (r'(\w+)(=)("?[^\s"\]]+"?)',
52
+ bygroups(Name.Attribute, Operator, String)),
53
+ # tag argument (a la [color=green])
54
+ (r'(=)("?[^\s"\]]+"?)',
55
+ bygroups(Operator, String)),
56
+ # tag end
57
+ (r'\]', Keyword, '#pop'),
58
+ ],
59
+ }
60
+
61
+
62
+ class MoinWikiLexer(RegexLexer):
63
+ """
64
+ For MoinMoin (and Trac) Wiki markup.
65
+
66
+ .. versionadded:: 0.7
67
+ """
68
+
69
+ name = 'MoinMoin/Trac Wiki markup'
70
+ aliases = ['trac-wiki', 'moin']
71
+ filenames = []
72
+ mimetypes = ['text/x-trac-wiki']
73
+ flags = re.MULTILINE | re.IGNORECASE
74
+
75
+ tokens = {
76
+ 'root': [
77
+ (r'^#.*$', Comment),
78
+ (r'(!)(\S+)', bygroups(Keyword, Text)), # Ignore-next
79
+ # Titles
80
+ (r'^(=+)([^=]+)(=+)(\s*#.+)?$',
81
+ bygroups(Generic.Heading, using(this), Generic.Heading, String)),
82
+ # Literal code blocks, with optional shebang
83
+ (r'(\{\{\{)(\n#!.+)?', bygroups(Name.Builtin, Name.Namespace), 'codeblock'),
84
+ (r'(\'\'\'?|\|\||`|__|~~|\^|,,|::)', Comment), # Formatting
85
+ # Lists
86
+ (r'^( +)([.*-])( )', bygroups(Text, Name.Builtin, Text)),
87
+ (r'^( +)([a-z]{1,5}\.)( )', bygroups(Text, Name.Builtin, Text)),
88
+ # Other Formatting
89
+ (r'\[\[\w+.*?\]\]', Keyword), # Macro
90
+ (r'(\[[^\s\]]+)(\s+[^\]]+?)?(\])',
91
+ bygroups(Keyword, String, Keyword)), # Link
92
+ (r'^----+$', Keyword), # Horizontal rules
93
+ (r'[^\n\'\[{!_~^,|]+', Text),
94
+ (r'\n', Text),
95
+ (r'.', Text),
96
+ ],
97
+ 'codeblock': [
98
+ (r'\}\}\}', Name.Builtin, '#pop'),
99
+ # these blocks are allowed to be nested in Trac, but not MoinMoin
100
+ (r'\{\{\{', Text, '#push'),
101
+ (r'[^{}]+', Comment.Preproc), # slurp boring text
102
+ (r'.', Comment.Preproc), # allow loose { or }
103
+ ],
104
+ }
105
+
106
+
107
+ class RstLexer(RegexLexer):
108
+ """
109
+ For `reStructuredText <http://docutils.sf.net/rst.html>`_ markup.
110
+
111
+ .. versionadded:: 0.7
112
+
113
+ Additional options accepted:
114
+
115
+ `handlecodeblocks`
116
+ Highlight the contents of ``.. sourcecode:: language``,
117
+ ``.. code:: language`` and ``.. code-block:: language``
118
+ directives with a lexer for the given language (default:
119
+ ``True``).
120
+
121
+ .. versionadded:: 0.8
122
+ """
123
+ name = 'reStructuredText'
124
+ aliases = ['rst', 'rest', 'restructuredtext']
125
+ filenames = ['*.rst', '*.rest']
126
+ mimetypes = ["text/x-rst", "text/prs.fallenstein.rst"]
127
+ flags = re.MULTILINE
128
+
129
+ def _handle_sourcecode(self, match):
130
+ from pygments.lexers import get_lexer_by_name
131
+
132
+ # section header
133
+ yield match.start(1), Punctuation, match.group(1)
134
+ yield match.start(2), Text, match.group(2)
135
+ yield match.start(3), Operator.Word, match.group(3)
136
+ yield match.start(4), Punctuation, match.group(4)
137
+ yield match.start(5), Text, match.group(5)
138
+ yield match.start(6), Keyword, match.group(6)
139
+ yield match.start(7), Text, match.group(7)
140
+
141
+ # lookup lexer if wanted and existing
142
+ lexer = None
143
+ if self.handlecodeblocks:
144
+ try:
145
+ lexer = get_lexer_by_name(match.group(6).strip())
146
+ except ClassNotFound:
147
+ pass
148
+ indention = match.group(8)
149
+ indention_size = len(indention)
150
+ code = (indention + match.group(9) + match.group(10) + match.group(11))
151
+
152
+ # no lexer for this language. handle it like it was a code block
153
+ if lexer is None:
154
+ yield match.start(8), String, code
155
+ return
156
+
157
+ # highlight the lines with the lexer.
158
+ ins = []
159
+ codelines = code.splitlines(True)
160
+ code = ''
161
+ for line in codelines:
162
+ if len(line) > indention_size:
163
+ ins.append((len(code), [(0, Text, line[:indention_size])]))
164
+ code += line[indention_size:]
165
+ else:
166
+ code += line
167
+ yield from do_insertions(ins, lexer.get_tokens_unprocessed(code))
168
+
169
+ # from docutils.parsers.rst.states
170
+ closers = '\'")]}>\u2019\u201d\xbb!?'
171
+ unicode_delimiters = '\u2010\u2011\u2012\u2013\u2014\u00a0'
172
+ end_string_suffix = (r'((?=$)|(?=[-/:.,; \n\x00%s%s]))'
173
+ % (re.escape(unicode_delimiters),
174
+ re.escape(closers)))
175
+
176
+ tokens = {
177
+ 'root': [
178
+ # Heading with overline
179
+ (r'^(=+|-+|`+|:+|\.+|\'+|"+|~+|\^+|_+|\*+|\++|#+)([ \t]*\n)'
180
+ r'(.+)(\n)(\1)(\n)',
181
+ bygroups(Generic.Heading, Text, Generic.Heading,
182
+ Text, Generic.Heading, Text)),
183
+ # Plain heading
184
+ (r'^(\S.*)(\n)(={3,}|-{3,}|`{3,}|:{3,}|\.{3,}|\'{3,}|"{3,}|'
185
+ r'~{3,}|\^{3,}|_{3,}|\*{3,}|\+{3,}|#{3,})(\n)',
186
+ bygroups(Generic.Heading, Text, Generic.Heading, Text)),
187
+ # Bulleted lists
188
+ (r'^(\s*)([-*+])( .+\n(?:\1 .+\n)*)',
189
+ bygroups(Text, Number, using(this, state='inline'))),
190
+ # Numbered lists
191
+ (r'^(\s*)([0-9#ivxlcmIVXLCM]+\.)( .+\n(?:\1 .+\n)*)',
192
+ bygroups(Text, Number, using(this, state='inline'))),
193
+ (r'^(\s*)(\(?[0-9#ivxlcmIVXLCM]+\))( .+\n(?:\1 .+\n)*)',
194
+ bygroups(Text, Number, using(this, state='inline'))),
195
+ # Numbered, but keep words at BOL from becoming lists
196
+ (r'^(\s*)([A-Z]+\.)( .+\n(?:\1 .+\n)+)',
197
+ bygroups(Text, Number, using(this, state='inline'))),
198
+ (r'^(\s*)(\(?[A-Za-z]+\))( .+\n(?:\1 .+\n)+)',
199
+ bygroups(Text, Number, using(this, state='inline'))),
200
+ # Line blocks
201
+ (r'^(\s*)(\|)( .+\n(?:\| .+\n)*)',
202
+ bygroups(Text, Operator, using(this, state='inline'))),
203
+ # Sourcecode directives
204
+ (r'^( *\.\.)(\s*)((?:source)?code(?:-block)?)(::)([ \t]*)([^\n]+)'
205
+ r'(\n[ \t]*\n)([ \t]+)(.*)(\n)((?:(?:\8.*)?\n)+)',
206
+ _handle_sourcecode),
207
+ # A directive
208
+ (r'^( *\.\.)(\s*)([\w:-]+?)(::)(?:([ \t]*)(.*))',
209
+ bygroups(Punctuation, Text, Operator.Word, Punctuation, Text,
210
+ using(this, state='inline'))),
211
+ # A reference target
212
+ (r'^( *\.\.)(\s*)(_(?:[^:\\]|\\.)+:)(.*?)$',
213
+ bygroups(Punctuation, Text, Name.Tag, using(this, state='inline'))),
214
+ # A footnote/citation target
215
+ (r'^( *\.\.)(\s*)(\[.+\])(.*?)$',
216
+ bygroups(Punctuation, Text, Name.Tag, using(this, state='inline'))),
217
+ # A substitution def
218
+ (r'^( *\.\.)(\s*)(\|.+\|)(\s*)([\w:-]+?)(::)(?:([ \t]*)(.*))',
219
+ bygroups(Punctuation, Text, Name.Tag, Text, Operator.Word,
220
+ Punctuation, Text, using(this, state='inline'))),
221
+ # Comments
222
+ (r'^ *\.\..*(\n( +.*\n|\n)+)?', Comment.Preproc),
223
+ # Field list marker
224
+ (r'^( *)(:(?:\\\\|\\:|[^:\n])+:(?=\s))([ \t]*)',
225
+ bygroups(Text, Name.Class, Text)),
226
+ # Definition list
227
+ (r'^(\S.*(?<!::)\n)((?:(?: +.*)\n)+)',
228
+ bygroups(using(this, state='inline'), using(this, state='inline'))),
229
+ # Code blocks
230
+ (r'(::)(\n[ \t]*\n)([ \t]+)(.*)(\n)((?:(?:\3.*)?\n)+)',
231
+ bygroups(String.Escape, Text, String, String, Text, String)),
232
+ include('inline'),
233
+ ],
234
+ 'inline': [
235
+ (r'\\.', Text), # escape
236
+ (r'``', String, 'literal'), # code
237
+ (r'(`.+?)(<.+?>)(`__?)', # reference with inline target
238
+ bygroups(String, String.Interpol, String)),
239
+ (r'`.+?`__?', String), # reference
240
+ (r'(`.+?`)(:[a-zA-Z0-9:-]+?:)?',
241
+ bygroups(Name.Variable, Name.Attribute)), # role
242
+ (r'(:[a-zA-Z0-9:-]+?:)(`.+?`)',
243
+ bygroups(Name.Attribute, Name.Variable)), # role (content first)
244
+ (r'\*\*.+?\*\*', Generic.Strong), # Strong emphasis
245
+ (r'\*.+?\*', Generic.Emph), # Emphasis
246
+ (r'\[.*?\]_', String), # Footnote or citation
247
+ (r'<.+?>', Name.Tag), # Hyperlink
248
+ (r'[^\\\n\[*`:]+', Text),
249
+ (r'.', Text),
250
+ ],
251
+ 'literal': [
252
+ (r'[^`]+', String),
253
+ (r'``' + end_string_suffix, String, '#pop'),
254
+ (r'`', String),
255
+ ]
256
+ }
257
+
258
+ def __init__(self, **options):
259
+ self.handlecodeblocks = get_bool_opt(options, 'handlecodeblocks', True)
260
+ RegexLexer.__init__(self, **options)
261
+
262
+ def analyse_text(text):
263
+ if text[:2] == '..' and text[2:3] != '.':
264
+ return 0.3
265
+ p1 = text.find("\n")
266
+ p2 = text.find("\n", p1 + 1)
267
+ if (p2 > -1 and # has two lines
268
+ p1 * 2 + 1 == p2 and # they are the same length
269
+ text[p1+1] in '-=' and # the next line both starts and ends with
270
+ text[p1+1] == text[p2-1]): # ...a sufficiently high header
271
+ return 0.5
272
+
273
+
274
+ class TexLexer(RegexLexer):
275
+ """
276
+ Lexer for the TeX and LaTeX typesetting languages.
277
+ """
278
+
279
+ name = 'TeX'
280
+ aliases = ['tex', 'latex']
281
+ filenames = ['*.tex', '*.aux', '*.toc']
282
+ mimetypes = ['text/x-tex', 'text/x-latex']
283
+
284
+ tokens = {
285
+ 'general': [
286
+ (r'%.*?\n', Comment),
287
+ (r'[{}]', Name.Builtin),
288
+ (r'[&_^]', Name.Builtin),
289
+ ],
290
+ 'root': [
291
+ (r'\\\[', String.Backtick, 'displaymath'),
292
+ (r'\\\(', String, 'inlinemath'),
293
+ (r'\$\$', String.Backtick, 'displaymath'),
294
+ (r'\$', String, 'inlinemath'),
295
+ (r'\\([a-zA-Z]+|.)', Keyword, 'command'),
296
+ (r'\\$', Keyword),
297
+ include('general'),
298
+ (r'[^\\$%&_^{}]+', Text),
299
+ ],
300
+ 'math': [
301
+ (r'\\([a-zA-Z]+|.)', Name.Variable),
302
+ include('general'),
303
+ (r'[0-9]+', Number),
304
+ (r'[-=!+*/()\[\]]', Operator),
305
+ (r'[^=!+*/()\[\]\\$%&_^{}0-9-]+', Name.Builtin),
306
+ ],
307
+ 'inlinemath': [
308
+ (r'\\\)', String, '#pop'),
309
+ (r'\$', String, '#pop'),
310
+ include('math'),
311
+ ],
312
+ 'displaymath': [
313
+ (r'\\\]', String, '#pop'),
314
+ (r'\$\$', String, '#pop'),
315
+ (r'\$', Name.Builtin),
316
+ include('math'),
317
+ ],
318
+ 'command': [
319
+ (r'\[.*?\]', Name.Attribute),
320
+ (r'\*', Keyword),
321
+ default('#pop'),
322
+ ],
323
+ }
324
+
325
+ def analyse_text(text):
326
+ for start in ("\\documentclass", "\\input", "\\documentstyle",
327
+ "\\relax"):
328
+ if text[:len(start)] == start:
329
+ return True
330
+
331
+
332
+ class GroffLexer(RegexLexer):
333
+ """
334
+ Lexer for the (g)roff typesetting language, supporting groff
335
+ extensions. Mainly useful for highlighting manpage sources.
336
+
337
+ .. versionadded:: 0.6
338
+ """
339
+
340
+ name = 'Groff'
341
+ aliases = ['groff', 'nroff', 'man']
342
+ filenames = ['*.[1234567]', '*.man']
343
+ mimetypes = ['application/x-troff', 'text/troff']
344
+
345
+ tokens = {
346
+ 'root': [
347
+ (r'(\.)(\w+)', bygroups(Text, Keyword), 'request'),
348
+ (r'\.', Punctuation, 'request'),
349
+ # Regular characters, slurp till we find a backslash or newline
350
+ (r'[^\\\n]+', Text, 'textline'),
351
+ default('textline'),
352
+ ],
353
+ 'textline': [
354
+ include('escapes'),
355
+ (r'[^\\\n]+', Text),
356
+ (r'\n', Text, '#pop'),
357
+ ],
358
+ 'escapes': [
359
+ # groff has many ways to write escapes.
360
+ (r'\\"[^\n]*', Comment),
361
+ (r'\\[fn]\w', String.Escape),
362
+ (r'\\\(.{2}', String.Escape),
363
+ (r'\\.\[.*\]', String.Escape),
364
+ (r'\\.', String.Escape),
365
+ (r'\\\n', Text, 'request'),
366
+ ],
367
+ 'request': [
368
+ (r'\n', Text, '#pop'),
369
+ include('escapes'),
370
+ (r'"[^\n"]+"', String.Double),
371
+ (r'\d+', Number),
372
+ (r'\S+', String),
373
+ (r'\s+', Text),
374
+ ],
375
+ }
376
+
377
+ def analyse_text(text):
378
+ if text[:1] != '.':
379
+ return False
380
+ if text[:3] == '.\\"':
381
+ return True
382
+ if text[:4] == '.TH ':
383
+ return True
384
+ if text[1:3].isalnum() and text[3].isspace():
385
+ return 0.9
386
+
387
+
388
+ class MozPreprocHashLexer(RegexLexer):
389
+ """
390
+ Lexer for Mozilla Preprocessor files (with '#' as the marker).
391
+
392
+ Other data is left untouched.
393
+
394
+ .. versionadded:: 2.0
395
+ """
396
+ name = 'mozhashpreproc'
397
+ aliases = [name]
398
+ filenames = []
399
+ mimetypes = []
400
+
401
+ tokens = {
402
+ 'root': [
403
+ (r'^#', Comment.Preproc, ('expr', 'exprstart')),
404
+ (r'.+', Other),
405
+ ],
406
+ 'exprstart': [
407
+ (r'(literal)(.*)', bygroups(Comment.Preproc, Text), '#pop:2'),
408
+ (words((
409
+ 'define', 'undef', 'if', 'ifdef', 'ifndef', 'else', 'elif',
410
+ 'elifdef', 'elifndef', 'endif', 'expand', 'filter', 'unfilter',
411
+ 'include', 'includesubst', 'error')),
412
+ Comment.Preproc, '#pop'),
413
+ ],
414
+ 'expr': [
415
+ (words(('!', '!=', '==', '&&', '||')), Operator),
416
+ (r'(defined)(\()', bygroups(Keyword, Punctuation)),
417
+ (r'\)', Punctuation),
418
+ (r'[0-9]+', Number.Decimal),
419
+ (r'__\w+?__', Name.Variable),
420
+ (r'@\w+?@', Name.Class),
421
+ (r'\w+', Name),
422
+ (r'\n', Text, '#pop'),
423
+ (r'\s+', Text),
424
+ (r'\S', Punctuation),
425
+ ],
426
+ }
427
+
428
+
429
+ class MozPreprocPercentLexer(MozPreprocHashLexer):
430
+ """
431
+ Lexer for Mozilla Preprocessor files (with '%' as the marker).
432
+
433
+ Other data is left untouched.
434
+
435
+ .. versionadded:: 2.0
436
+ """
437
+ name = 'mozpercentpreproc'
438
+ aliases = [name]
439
+ filenames = []
440
+ mimetypes = []
441
+
442
+ tokens = {
443
+ 'root': [
444
+ (r'^%', Comment.Preproc, ('expr', 'exprstart')),
445
+ (r'.+', Other),
446
+ ],
447
+ }
448
+
449
+
450
+ class MozPreprocXulLexer(DelegatingLexer):
451
+ """
452
+ Subclass of the `MozPreprocHashLexer` that highlights unlexed data with the
453
+ `XmlLexer`.
454
+
455
+ .. versionadded:: 2.0
456
+ """
457
+ name = "XUL+mozpreproc"
458
+ aliases = ['xul+mozpreproc']
459
+ filenames = ['*.xul.in']
460
+ mimetypes = []
461
+
462
+ def __init__(self, **options):
463
+ super().__init__(XmlLexer, MozPreprocHashLexer, **options)
464
+
465
+
466
+ class MozPreprocJavascriptLexer(DelegatingLexer):
467
+ """
468
+ Subclass of the `MozPreprocHashLexer` that highlights unlexed data with the
469
+ `JavascriptLexer`.
470
+
471
+ .. versionadded:: 2.0
472
+ """
473
+ name = "Javascript+mozpreproc"
474
+ aliases = ['javascript+mozpreproc']
475
+ filenames = ['*.js.in']
476
+ mimetypes = []
477
+
478
+ def __init__(self, **options):
479
+ super().__init__(JavascriptLexer, MozPreprocHashLexer, **options)
480
+
481
+
482
+ class MozPreprocCssLexer(DelegatingLexer):
483
+ """
484
+ Subclass of the `MozPreprocHashLexer` that highlights unlexed data with the
485
+ `CssLexer`.
486
+
487
+ .. versionadded:: 2.0
488
+ """
489
+ name = "CSS+mozpreproc"
490
+ aliases = ['css+mozpreproc']
491
+ filenames = ['*.css.in']
492
+ mimetypes = []
493
+
494
+ def __init__(self, **options):
495
+ super().__init__(CssLexer, MozPreprocPercentLexer, **options)
496
+
497
+
498
+ class MarkdownLexer(RegexLexer):
499
+ """
500
+ For `Markdown <https://help.github.com/categories/writing-on-github/>`_ markup.
501
+
502
+ .. versionadded:: 2.2
503
+ """
504
+ name = 'markdown'
505
+ aliases = ['md', 'markdown']
506
+ filenames = ['*.md', '*.markdown']
507
+ mimetypes = ["text/x-markdown"]
508
+ flags = re.MULTILINE
509
+
510
+ def _handle_codeblock(self, match):
511
+ """
512
+ match args: 1:backticks, 2:lang_name, 3:newline, 4:code, 5:backticks
513
+ """
514
+ from pygments.lexers import get_lexer_by_name
515
+
516
+ # section header
517
+ yield match.start(1), String.Backtick, match.group(1)
518
+ yield match.start(2), String.Backtick, match.group(2)
519
+ yield match.start(3), Text , match.group(3)
520
+
521
+ # lookup lexer if wanted and existing
522
+ lexer = None
523
+ if self.handlecodeblocks:
524
+ try:
525
+ lexer = get_lexer_by_name( match.group(2).strip() )
526
+ except ClassNotFound:
527
+ pass
528
+ code = match.group(4)
529
+
530
+ # no lexer for this language. handle it like it was a code block
531
+ if lexer is None:
532
+ yield match.start(4), String, code
533
+ else:
534
+ yield from do_insertions([], lexer.get_tokens_unprocessed(code))
535
+
536
+ yield match.start(5), String.Backtick, match.group(5)
537
+
538
+ tokens = {
539
+ 'root': [
540
+ # heading with '#' prefix (atx-style)
541
+ (r'(^#[^#].+)(\n)', bygroups(Generic.Heading, Text)),
542
+ # subheading with '#' prefix (atx-style)
543
+ (r'(^#{2,6}[^#].+)(\n)', bygroups(Generic.Subheading, Text)),
544
+ # heading with '=' underlines (Setext-style)
545
+ (r'^(.+)(\n)(=+)(\n)', bygroups(Generic.Heading, Text, Generic.Heading, Text)),
546
+ # subheading with '-' underlines (Setext-style)
547
+ (r'^(.+)(\n)(-+)(\n)', bygroups(Generic.Subheading, Text, Generic.Subheading, Text)),
548
+ # task list
549
+ (r'^(\s*)([*-] )(\[[ xX]\])( .+\n)',
550
+ bygroups(Text, Keyword, Keyword, using(this, state='inline'))),
551
+ # bulleted list
552
+ (r'^(\s*)([*-])(\s)(.+\n)',
553
+ bygroups(Text, Keyword, Text, using(this, state='inline'))),
554
+ # numbered list
555
+ (r'^(\s*)([0-9]+\.)( .+\n)',
556
+ bygroups(Text, Keyword, using(this, state='inline'))),
557
+ # quote
558
+ (r'^(\s*>\s)(.+\n)', bygroups(Keyword, Generic.Emph)),
559
+ # code block fenced by 3 backticks
560
+ (r'^(\s*```\n[\w\W]*?^\s*```$\n)', String.Backtick),
561
+ # code block with language
562
+ (r'^(\s*```)(\w+)(\n)([\w\W]*?)(^\s*```$\n)', _handle_codeblock),
563
+
564
+ include('inline'),
565
+ ],
566
+ 'inline': [
567
+ # escape
568
+ (r'\\.', Text),
569
+ # inline code
570
+ (r'([^`]?)(`[^`\n]+`)', bygroups(Text, String.Backtick)),
571
+ # warning: the following rules eat outer tags.
572
+ # eg. **foo _bar_ baz** => foo and baz are not recognized as bold
573
+ # bold fenced by '**'
574
+ (r'([^\*]?)(\*\*[^* \n][^*\n]*\*\*)', bygroups(Text, Generic.Strong)),
575
+ # bold fenced by '__'
576
+ (r'([^_]?)(__[^_ \n][^_\n]*__)', bygroups(Text, Generic.Strong)),
577
+ # italics fenced by '*'
578
+ (r'([^\*]?)(\*[^* \n][^*\n]*\*)', bygroups(Text, Generic.Emph)),
579
+ # italics fenced by '_'
580
+ (r'([^_]?)(_[^_ \n][^_\n]*_)', bygroups(Text, Generic.Emph)),
581
+ # strikethrough
582
+ (r'([^~]?)(~~[^~ \n][^~\n]*~~)', bygroups(Text, Generic.Deleted)),
583
+ # mentions and topics (twitter and github stuff)
584
+ (r'[@#][\w/:]+', Name.Entity),
585
+ # (image?) links eg: ![Image of Yaktocat](https://octodex.github.com/images/yaktocat.png)
586
+ (r'(!?\[)([^]]+)(\])(\()([^)]+)(\))',
587
+ bygroups(Text, Name.Tag, Text, Text, Name.Attribute, Text)),
588
+ # reference-style links, e.g.:
589
+ # [an example][id]
590
+ # [id]: http://example.com/
591
+ (r'(\[)([^]]+)(\])(\[)([^]]*)(\])',
592
+ bygroups(Text, Name.Tag, Text, Text, Name.Label, Text)),
593
+ (r'^(\s*\[)([^]]*)(\]:\s*)(.+)',
594
+ bygroups(Text, Name.Label, Text, Name.Attribute)),
595
+
596
+ # general text, must come last!
597
+ (r'[^\\\s]+', Text),
598
+ (r'.', Text),
599
+ ],
600
+ }
601
+
602
+ def __init__(self, **options):
603
+ self.handlecodeblocks = get_bool_opt(options, 'handlecodeblocks', True)
604
+ RegexLexer.__init__(self, **options)
605
+
606
+
607
+ class TiddlyWiki5Lexer(RegexLexer):
608
+ """
609
+ For `TiddlyWiki5 <https://tiddlywiki.com/#TiddlerFiles>`_ markup.
610
+
611
+ .. versionadded:: 2.7
612
+ """
613
+ name = 'tiddler'
614
+ aliases = ['tid']
615
+ filenames = ['*.tid']
616
+ mimetypes = ["text/vnd.tiddlywiki"]
617
+ flags = re.MULTILINE
618
+
619
+ def _handle_codeblock(self, match):
620
+ """
621
+ match args: 1:backticks, 2:lang_name, 3:newline, 4:code, 5:backticks
622
+ """
623
+ from pygments.lexers import get_lexer_by_name
624
+
625
+ # section header
626
+ yield match.start(1), String, match.group(1)
627
+ yield match.start(2), String, match.group(2)
628
+ yield match.start(3), Text, match.group(3)
629
+
630
+ # lookup lexer if wanted and existing
631
+ lexer = None
632
+ if self.handlecodeblocks:
633
+ try:
634
+ lexer = get_lexer_by_name(match.group(2).strip())
635
+ except ClassNotFound:
636
+ pass
637
+ code = match.group(4)
638
+
639
+ # no lexer for this language. handle it like it was a code block
640
+ if lexer is None:
641
+ yield match.start(4), String, code
642
+ return
643
+
644
+ yield from do_insertions([], lexer.get_tokens_unprocessed(code))
645
+
646
+ yield match.start(5), String, match.group(5)
647
+
648
+ def _handle_cssblock(self, match):
649
+ """
650
+ match args: 1:style tag 2:newline, 3:code, 4:closing style tag
651
+ """
652
+ from pygments.lexers import get_lexer_by_name
653
+
654
+ # section header
655
+ yield match.start(1), String, match.group(1)
656
+ yield match.start(2), String, match.group(2)
657
+
658
+ lexer = None
659
+ if self.handlecodeblocks:
660
+ try:
661
+ lexer = get_lexer_by_name('css')
662
+ except ClassNotFound:
663
+ pass
664
+ code = match.group(3)
665
+
666
+ # no lexer for this language. handle it like it was a code block
667
+ if lexer is None:
668
+ yield match.start(3), String, code
669
+ return
670
+
671
+ yield from do_insertions([], lexer.get_tokens_unprocessed(code))
672
+
673
+ yield match.start(4), String, match.group(4)
674
+
675
+ tokens = {
676
+ 'root': [
677
+ # title in metadata section
678
+ (r'^(title)(:\s)(.+\n)', bygroups(Keyword, Text, Generic.Heading)),
679
+ # headings
680
+ (r'^(!)([^!].+\n)', bygroups(Generic.Heading, Text)),
681
+ (r'^(!{2,6})(.+\n)', bygroups(Generic.Subheading, Text)),
682
+ # bulleted or numbered lists or single-line block quotes
683
+ # (can be mixed)
684
+ (r'^(\s*)([*#>]+)(\s*)(.+\n)',
685
+ bygroups(Text, Keyword, Text, using(this, state='inline'))),
686
+ # multi-line block quotes
687
+ (r'^(<<<.*\n)([\w\W]*?)(^<<<.*$)', bygroups(String, Text, String)),
688
+ # table header
689
+ (r'^(\|.*?\|h)$', bygroups(Generic.Strong)),
690
+ # table footer or caption
691
+ (r'^(\|.*?\|[cf])$', bygroups(Generic.Emph)),
692
+ # table class
693
+ (r'^(\|.*?\|k)$', bygroups(Name.Tag)),
694
+ # definitions
695
+ (r'^(;.*)$', bygroups(Generic.Strong)),
696
+ # text block
697
+ (r'^(```\n)([\w\W]*?)(^```$)', bygroups(String, Text, String)),
698
+ # code block with language
699
+ (r'^(```)(\w+)(\n)([\w\W]*?)(^```$)', _handle_codeblock),
700
+ # CSS style block
701
+ (r'^(<style>)(\n)([\w\W]*?)(^</style>$)', _handle_cssblock),
702
+
703
+ include('keywords'),
704
+ include('inline'),
705
+ ],
706
+ 'keywords': [
707
+ (words((
708
+ '\\define', '\\end', 'caption', 'created', 'modified', 'tags',
709
+ 'title', 'type'), prefix=r'^', suffix=r'\b'),
710
+ Keyword),
711
+ ],
712
+ 'inline': [
713
+ # escape
714
+ (r'\\.', Text),
715
+ # created or modified date
716
+ (r'\d{17}', Number.Integer),
717
+ # italics
718
+ (r'(\s)(//[^/]+//)((?=\W|\n))',
719
+ bygroups(Text, Generic.Emph, Text)),
720
+ # superscript
721
+ (r'(\s)(\^\^[^\^]+\^\^)', bygroups(Text, Generic.Emph)),
722
+ # subscript
723
+ (r'(\s)(,,[^,]+,,)', bygroups(Text, Generic.Emph)),
724
+ # underscore
725
+ (r'(\s)(__[^_]+__)', bygroups(Text, Generic.Strong)),
726
+ # bold
727
+ (r"(\s)(''[^']+'')((?=\W|\n))",
728
+ bygroups(Text, Generic.Strong, Text)),
729
+ # strikethrough
730
+ (r'(\s)(~~[^~]+~~)((?=\W|\n))',
731
+ bygroups(Text, Generic.Deleted, Text)),
732
+ # TiddlyWiki variables
733
+ (r'<<[^>]+>>', Name.Tag),
734
+ (r'\$\$[^$]+\$\$', Name.Tag),
735
+ (r'\$\([^)]+\)\$', Name.Tag),
736
+ # TiddlyWiki style or class
737
+ (r'^@@.*$', Name.Tag),
738
+ # HTML tags
739
+ (r'</?[^>]+>', Name.Tag),
740
+ # inline code
741
+ (r'`[^`]+`', String.Backtick),
742
+ # HTML escaped symbols
743
+ (r'&\S*?;', String.Regex),
744
+ # Wiki links
745
+ (r'(\[{2})([^]\|]+)(\]{2})', bygroups(Text, Name.Tag, Text)),
746
+ # External links
747
+ (r'(\[{2})([^]\|]+)(\|)([^]\|]+)(\]{2})',
748
+ bygroups(Text, Name.Tag, Text, Name.Attribute, Text)),
749
+ # Transclusion
750
+ (r'(\{{2})([^}]+)(\}{2})', bygroups(Text, Name.Tag, Text)),
751
+ # URLs
752
+ (r'(\b.?.?tps?://[^\s"]+)', bygroups(Name.Attribute)),
753
+
754
+ # general text, must come last!
755
+ (r'[\w]+', Text),
756
+ (r'.', Text)
757
+ ],
758
+ }
759
+
760
+ def __init__(self, **options):
761
+ self.handlecodeblocks = get_bool_opt(options, 'handlecodeblocks', True)
762
+ RegexLexer.__init__(self, **options)