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,33 @@
1
+ """
2
+ pygments.lexers.compiled
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Just export lexer classes previously contained in this module.
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.jvm import JavaLexer, ScalaLexer
12
+ from pygments.lexers.c_cpp import CLexer, CppLexer
13
+ from pygments.lexers.d import DLexer
14
+ from pygments.lexers.objective import ObjectiveCLexer, \
15
+ ObjectiveCppLexer, LogosLexer
16
+ from pygments.lexers.go import GoLexer
17
+ from pygments.lexers.rust import RustLexer
18
+ from pygments.lexers.c_like import ECLexer, ValaLexer, CudaLexer
19
+ from pygments.lexers.pascal import DelphiLexer, Modula2Lexer, AdaLexer
20
+ from pygments.lexers.business import CobolLexer, CobolFreeformatLexer
21
+ from pygments.lexers.fortran import FortranLexer
22
+ from pygments.lexers.prolog import PrologLexer
23
+ from pygments.lexers.python import CythonLexer
24
+ from pygments.lexers.graphics import GLShaderLexer
25
+ from pygments.lexers.ml import OcamlLexer
26
+ from pygments.lexers.basic import BlitzBasicLexer, BlitzMaxLexer, MonkeyLexer
27
+ from pygments.lexers.dylan import DylanLexer, DylanLidLexer, DylanConsoleLexer
28
+ from pygments.lexers.ooc import OocLexer
29
+ from pygments.lexers.felix import FelixLexer
30
+ from pygments.lexers.nimrod import NimrodLexer
31
+ from pygments.lexers.crystal import CrystalLexer
32
+
33
+ __all__ = []
@@ -0,0 +1,985 @@
1
+ """
2
+ pygments.lexers.configs
3
+ ~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for configuration file 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.lexer import RegexLexer, default, words, bygroups, include, using
14
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
15
+ Number, Punctuation, Whitespace, Literal, Generic
16
+ from pygments.lexers.shell import BashLexer
17
+ from pygments.lexers.data import JsonLexer
18
+
19
+ __all__ = ['IniLexer', 'RegeditLexer', 'PropertiesLexer', 'KconfigLexer',
20
+ 'Cfengine3Lexer', 'ApacheConfLexer', 'SquidConfLexer',
21
+ 'NginxConfLexer', 'LighttpdConfLexer', 'DockerLexer',
22
+ 'TerraformLexer', 'TermcapLexer', 'TerminfoLexer',
23
+ 'PkgConfigLexer', 'PacmanConfLexer', 'AugeasLexer', 'TOMLLexer',
24
+ 'SingularityLexer']
25
+
26
+
27
+ class IniLexer(RegexLexer):
28
+ """
29
+ Lexer for configuration files in INI style.
30
+ """
31
+
32
+ name = 'INI'
33
+ aliases = ['ini', 'cfg', 'dosini']
34
+ filenames = ['*.ini', '*.cfg', '*.inf']
35
+ mimetypes = ['text/x-ini', 'text/inf']
36
+
37
+ tokens = {
38
+ 'root': [
39
+ (r'\s+', Text),
40
+ (r'[;#].*', Comment.Single),
41
+ (r'\[.*?\]$', Keyword),
42
+ (r'(.*?)([ \t]*)(=)([ \t]*)([^\t\n]*)',
43
+ bygroups(Name.Attribute, Text, Operator, Text, String)),
44
+ # standalone option, supported by some INI parsers
45
+ (r'(.+?)$', Name.Attribute),
46
+ ],
47
+ }
48
+
49
+ def analyse_text(text):
50
+ npos = text.find('\n')
51
+ if npos < 3:
52
+ return False
53
+ return text[0] == '[' and text[npos-1] == ']'
54
+
55
+
56
+ class RegeditLexer(RegexLexer):
57
+ """
58
+ Lexer for `Windows Registry
59
+ <http://en.wikipedia.org/wiki/Windows_Registry#.REG_files>`_ files produced
60
+ by regedit.
61
+
62
+ .. versionadded:: 1.6
63
+ """
64
+
65
+ name = 'reg'
66
+ aliases = ['registry']
67
+ filenames = ['*.reg']
68
+ mimetypes = ['text/x-windows-registry']
69
+
70
+ tokens = {
71
+ 'root': [
72
+ (r'Windows Registry Editor.*', Text),
73
+ (r'\s+', Text),
74
+ (r'[;#].*', Comment.Single),
75
+ (r'(\[)(-?)(HKEY_[A-Z_]+)(.*?\])$',
76
+ bygroups(Keyword, Operator, Name.Builtin, Keyword)),
77
+ # String keys, which obey somewhat normal escaping
78
+ (r'("(?:\\"|\\\\|[^"])+")([ \t]*)(=)([ \t]*)',
79
+ bygroups(Name.Attribute, Text, Operator, Text),
80
+ 'value'),
81
+ # Bare keys (includes @)
82
+ (r'(.*?)([ \t]*)(=)([ \t]*)',
83
+ bygroups(Name.Attribute, Text, Operator, Text),
84
+ 'value'),
85
+ ],
86
+ 'value': [
87
+ (r'-', Operator, '#pop'), # delete value
88
+ (r'(dword|hex(?:\([0-9a-fA-F]\))?)(:)([0-9a-fA-F,]+)',
89
+ bygroups(Name.Variable, Punctuation, Number), '#pop'),
90
+ # As far as I know, .reg files do not support line continuation.
91
+ (r'.+', String, '#pop'),
92
+ default('#pop'),
93
+ ]
94
+ }
95
+
96
+ def analyse_text(text):
97
+ return text.startswith('Windows Registry Editor')
98
+
99
+
100
+ class PropertiesLexer(RegexLexer):
101
+ """
102
+ Lexer for configuration files in Java's properties format.
103
+
104
+ Note: trailing whitespace counts as part of the value as per spec
105
+
106
+ .. versionadded:: 1.4
107
+ """
108
+
109
+ name = 'Properties'
110
+ aliases = ['properties', 'jproperties']
111
+ filenames = ['*.properties']
112
+ mimetypes = ['text/x-java-properties']
113
+
114
+ tokens = {
115
+ 'root': [
116
+ (r'^(\w+)([ \t])(\w+\s*)$', bygroups(Name.Attribute, Text, String)),
117
+ (r'^\w+(\\[ \t]\w*)*$', Name.Attribute),
118
+ (r'(^ *)([#!].*)', bygroups(Text, Comment)),
119
+ # More controversial comments
120
+ (r'(^ *)((?:;|//).*)', bygroups(Text, Comment)),
121
+ (r'(.*?)([ \t]*)([=:])([ \t]*)(.*(?:(?<=\\)\n.*)*)',
122
+ bygroups(Name.Attribute, Text, Operator, Text, String)),
123
+ (r'\s', Text),
124
+ ],
125
+ }
126
+
127
+
128
+ def _rx_indent(level):
129
+ # Kconfig *always* interprets a tab as 8 spaces, so this is the default.
130
+ # Edit this if you are in an environment where KconfigLexer gets expanded
131
+ # input (tabs expanded to spaces) and the expansion tab width is != 8,
132
+ # e.g. in connection with Trac (trac.ini, [mimeviewer], tab_width).
133
+ # Value range here is 2 <= {tab_width} <= 8.
134
+ tab_width = 8
135
+ # Regex matching a given indentation {level}, assuming that indentation is
136
+ # a multiple of {tab_width}. In other cases there might be problems.
137
+ if tab_width == 2:
138
+ space_repeat = '+'
139
+ else:
140
+ space_repeat = '{1,%d}' % (tab_width - 1)
141
+ if level == 1:
142
+ level_repeat = ''
143
+ else:
144
+ level_repeat = '{%s}' % level
145
+ return r'(?:\t| %s\t| {%s})%s.*\n' % (space_repeat, tab_width, level_repeat)
146
+
147
+
148
+ class KconfigLexer(RegexLexer):
149
+ """
150
+ For Linux-style Kconfig files.
151
+
152
+ .. versionadded:: 1.6
153
+ """
154
+
155
+ name = 'Kconfig'
156
+ aliases = ['kconfig', 'menuconfig', 'linux-config', 'kernel-config']
157
+ # Adjust this if new kconfig file names appear in your environment
158
+ filenames = ['Kconfig*', '*Config.in*', 'external.in*',
159
+ 'standard-modules.in']
160
+ mimetypes = ['text/x-kconfig']
161
+ # No re.MULTILINE, indentation-aware help text needs line-by-line handling
162
+ flags = 0
163
+
164
+ def call_indent(level):
165
+ # If indentation >= {level} is detected, enter state 'indent{level}'
166
+ return (_rx_indent(level), String.Doc, 'indent%s' % level)
167
+
168
+ def do_indent(level):
169
+ # Print paragraphs of indentation level >= {level} as String.Doc,
170
+ # ignoring blank lines. Then return to 'root' state.
171
+ return [
172
+ (_rx_indent(level), String.Doc),
173
+ (r'\s*\n', Text),
174
+ default('#pop:2')
175
+ ]
176
+
177
+ tokens = {
178
+ 'root': [
179
+ (r'\s+', Text),
180
+ (r'#.*?\n', Comment.Single),
181
+ (words((
182
+ 'mainmenu', 'config', 'menuconfig', 'choice', 'endchoice',
183
+ 'comment', 'menu', 'endmenu', 'visible if', 'if', 'endif',
184
+ 'source', 'prompt', 'select', 'depends on', 'default',
185
+ 'range', 'option'), suffix=r'\b'),
186
+ Keyword),
187
+ (r'(---help---|help)[\t ]*\n', Keyword, 'help'),
188
+ (r'(bool|tristate|string|hex|int|defconfig_list|modules|env)\b',
189
+ Name.Builtin),
190
+ (r'[!=&|]', Operator),
191
+ (r'[()]', Punctuation),
192
+ (r'[0-9]+', Number.Integer),
193
+ (r"'(''|[^'])*'", String.Single),
194
+ (r'"(""|[^"])*"', String.Double),
195
+ (r'\S+', Text),
196
+ ],
197
+ # Help text is indented, multi-line and ends when a lower indentation
198
+ # level is detected.
199
+ 'help': [
200
+ # Skip blank lines after help token, if any
201
+ (r'\s*\n', Text),
202
+ # Determine the first help line's indentation level heuristically(!).
203
+ # Attention: this is not perfect, but works for 99% of "normal"
204
+ # indentation schemes up to a max. indentation level of 7.
205
+ call_indent(7),
206
+ call_indent(6),
207
+ call_indent(5),
208
+ call_indent(4),
209
+ call_indent(3),
210
+ call_indent(2),
211
+ call_indent(1),
212
+ default('#pop'), # for incomplete help sections without text
213
+ ],
214
+ # Handle text for indentation levels 7 to 1
215
+ 'indent7': do_indent(7),
216
+ 'indent6': do_indent(6),
217
+ 'indent5': do_indent(5),
218
+ 'indent4': do_indent(4),
219
+ 'indent3': do_indent(3),
220
+ 'indent2': do_indent(2),
221
+ 'indent1': do_indent(1),
222
+ }
223
+
224
+
225
+ class Cfengine3Lexer(RegexLexer):
226
+ """
227
+ Lexer for `CFEngine3 <http://cfengine.org>`_ policy files.
228
+
229
+ .. versionadded:: 1.5
230
+ """
231
+
232
+ name = 'CFEngine3'
233
+ aliases = ['cfengine3', 'cf3']
234
+ filenames = ['*.cf']
235
+ mimetypes = []
236
+
237
+ tokens = {
238
+ 'root': [
239
+ (r'#.*?\n', Comment),
240
+ (r'(body)(\s+)(\S+)(\s+)(control)',
241
+ bygroups(Keyword, Text, Keyword, Text, Keyword)),
242
+ (r'(body|bundle)(\s+)(\S+)(\s+)(\w+)(\()',
243
+ bygroups(Keyword, Text, Keyword, Text, Name.Function, Punctuation),
244
+ 'arglist'),
245
+ (r'(body|bundle)(\s+)(\S+)(\s+)(\w+)',
246
+ bygroups(Keyword, Text, Keyword, Text, Name.Function)),
247
+ (r'(")([^"]+)(")(\s+)(string|slist|int|real)(\s*)(=>)(\s*)',
248
+ bygroups(Punctuation, Name.Variable, Punctuation,
249
+ Text, Keyword.Type, Text, Operator, Text)),
250
+ (r'(\S+)(\s*)(=>)(\s*)',
251
+ bygroups(Keyword.Reserved, Text, Operator, Text)),
252
+ (r'"', String, 'string'),
253
+ (r'(\w+)(\()', bygroups(Name.Function, Punctuation)),
254
+ (r'([\w.!&|()]+)(::)', bygroups(Name.Class, Punctuation)),
255
+ (r'(\w+)(:)', bygroups(Keyword.Declaration, Punctuation)),
256
+ (r'@[{(][^)}]+[})]', Name.Variable),
257
+ (r'[(){},;]', Punctuation),
258
+ (r'=>', Operator),
259
+ (r'->', Operator),
260
+ (r'\d+\.\d+', Number.Float),
261
+ (r'\d+', Number.Integer),
262
+ (r'\w+', Name.Function),
263
+ (r'\s+', Text),
264
+ ],
265
+ 'string': [
266
+ (r'\$[{(]', String.Interpol, 'interpol'),
267
+ (r'\\.', String.Escape),
268
+ (r'"', String, '#pop'),
269
+ (r'\n', String),
270
+ (r'.', String),
271
+ ],
272
+ 'interpol': [
273
+ (r'\$[{(]', String.Interpol, '#push'),
274
+ (r'[})]', String.Interpol, '#pop'),
275
+ (r'[^${()}]+', String.Interpol),
276
+ ],
277
+ 'arglist': [
278
+ (r'\)', Punctuation, '#pop'),
279
+ (r',', Punctuation),
280
+ (r'\w+', Name.Variable),
281
+ (r'\s+', Text),
282
+ ],
283
+ }
284
+
285
+
286
+ class ApacheConfLexer(RegexLexer):
287
+ """
288
+ Lexer for configuration files following the Apache config file
289
+ format.
290
+
291
+ .. versionadded:: 0.6
292
+ """
293
+
294
+ name = 'ApacheConf'
295
+ aliases = ['apacheconf', 'aconf', 'apache']
296
+ filenames = ['.htaccess', 'apache.conf', 'apache2.conf']
297
+ mimetypes = ['text/x-apacheconf']
298
+ flags = re.MULTILINE | re.IGNORECASE
299
+
300
+ tokens = {
301
+ 'root': [
302
+ (r'\s+', Text),
303
+ (r'#(.*\\\n)+.*$|(#.*?)$', Comment),
304
+ (r'(<[^\s>/][^\s>]*)(?:(\s+)(.*))?(>)',
305
+ bygroups(Name.Tag, Text, String, Name.Tag)),
306
+ (r'(</[^\s>]+)(>)',
307
+ bygroups(Name.Tag, Name.Tag)),
308
+ (r'[a-z]\w*', Name.Builtin, 'value'),
309
+ (r'\.+', Text),
310
+ ],
311
+ 'value': [
312
+ (r'\\\n', Text),
313
+ (r'$', Text, '#pop'),
314
+ (r'\\', Text),
315
+ (r'[^\S\n]+', Text),
316
+ (r'\d+\.\d+\.\d+\.\d+(?:/\d+)?', Number),
317
+ (r'\d+', Number),
318
+ (r'/([*a-z0-9][*\w./-]+)', String.Other),
319
+ (r'(on|off|none|any|all|double|email|dns|min|minimal|'
320
+ r'os|productonly|full|emerg|alert|crit|error|warn|'
321
+ r'notice|info|debug|registry|script|inetd|standalone|'
322
+ r'user|group)\b', Keyword),
323
+ (r'"([^"\\]*(?:\\(.|\n)[^"\\]*)*)"', String.Double),
324
+ (r'[^\s"\\]+', Text)
325
+ ],
326
+ }
327
+
328
+
329
+ class SquidConfLexer(RegexLexer):
330
+ """
331
+ Lexer for `squid <http://www.squid-cache.org/>`_ configuration files.
332
+
333
+ .. versionadded:: 0.9
334
+ """
335
+
336
+ name = 'SquidConf'
337
+ aliases = ['squidconf', 'squid.conf', 'squid']
338
+ filenames = ['squid.conf']
339
+ mimetypes = ['text/x-squidconf']
340
+ flags = re.IGNORECASE
341
+
342
+ keywords = (
343
+ "access_log", "acl", "always_direct", "announce_host",
344
+ "announce_period", "announce_port", "announce_to", "anonymize_headers",
345
+ "append_domain", "as_whois_server", "auth_param_basic",
346
+ "authenticate_children", "authenticate_program", "authenticate_ttl",
347
+ "broken_posts", "buffered_logs", "cache_access_log", "cache_announce",
348
+ "cache_dir", "cache_dns_program", "cache_effective_group",
349
+ "cache_effective_user", "cache_host", "cache_host_acl",
350
+ "cache_host_domain", "cache_log", "cache_mem", "cache_mem_high",
351
+ "cache_mem_low", "cache_mgr", "cachemgr_passwd", "cache_peer",
352
+ "cache_peer_access", "cahce_replacement_policy", "cache_stoplist",
353
+ "cache_stoplist_pattern", "cache_store_log", "cache_swap",
354
+ "cache_swap_high", "cache_swap_log", "cache_swap_low", "client_db",
355
+ "client_lifetime", "client_netmask", "connect_timeout", "coredump_dir",
356
+ "dead_peer_timeout", "debug_options", "delay_access", "delay_class",
357
+ "delay_initial_bucket_level", "delay_parameters", "delay_pools",
358
+ "deny_info", "dns_children", "dns_defnames", "dns_nameservers",
359
+ "dns_testnames", "emulate_httpd_log", "err_html_text",
360
+ "fake_user_agent", "firewall_ip", "forwarded_for", "forward_snmpd_port",
361
+ "fqdncache_size", "ftpget_options", "ftpget_program", "ftp_list_width",
362
+ "ftp_passive", "ftp_user", "half_closed_clients", "header_access",
363
+ "header_replace", "hierarchy_stoplist", "high_response_time_warning",
364
+ "high_page_fault_warning", "hosts_file", "htcp_port", "http_access",
365
+ "http_anonymizer", "httpd_accel", "httpd_accel_host",
366
+ "httpd_accel_port", "httpd_accel_uses_host_header",
367
+ "httpd_accel_with_proxy", "http_port", "http_reply_access",
368
+ "icp_access", "icp_hit_stale", "icp_port", "icp_query_timeout",
369
+ "ident_lookup", "ident_lookup_access", "ident_timeout",
370
+ "incoming_http_average", "incoming_icp_average", "inside_firewall",
371
+ "ipcache_high", "ipcache_low", "ipcache_size", "local_domain",
372
+ "local_ip", "logfile_rotate", "log_fqdn", "log_icp_queries",
373
+ "log_mime_hdrs", "maximum_object_size", "maximum_single_addr_tries",
374
+ "mcast_groups", "mcast_icp_query_timeout", "mcast_miss_addr",
375
+ "mcast_miss_encode_key", "mcast_miss_port", "memory_pools",
376
+ "memory_pools_limit", "memory_replacement_policy", "mime_table",
377
+ "min_http_poll_cnt", "min_icp_poll_cnt", "minimum_direct_hops",
378
+ "minimum_object_size", "minimum_retry_timeout", "miss_access",
379
+ "negative_dns_ttl", "negative_ttl", "neighbor_timeout",
380
+ "neighbor_type_domain", "netdb_high", "netdb_low", "netdb_ping_period",
381
+ "netdb_ping_rate", "never_direct", "no_cache", "passthrough_proxy",
382
+ "pconn_timeout", "pid_filename", "pinger_program", "positive_dns_ttl",
383
+ "prefer_direct", "proxy_auth", "proxy_auth_realm", "query_icmp",
384
+ "quick_abort", "quick_abort_max", "quick_abort_min",
385
+ "quick_abort_pct", "range_offset_limit", "read_timeout",
386
+ "redirect_children", "redirect_program",
387
+ "redirect_rewrites_host_header", "reference_age",
388
+ "refresh_pattern", "reload_into_ims", "request_body_max_size",
389
+ "request_size", "request_timeout", "shutdown_lifetime",
390
+ "single_parent_bypass", "siteselect_timeout", "snmp_access",
391
+ "snmp_incoming_address", "snmp_port", "source_ping", "ssl_proxy",
392
+ "store_avg_object_size", "store_objects_per_bucket",
393
+ "strip_query_terms", "swap_level1_dirs", "swap_level2_dirs",
394
+ "tcp_incoming_address", "tcp_outgoing_address", "tcp_recv_bufsize",
395
+ "test_reachability", "udp_hit_obj", "udp_hit_obj_size",
396
+ "udp_incoming_address", "udp_outgoing_address", "unique_hostname",
397
+ "unlinkd_program", "uri_whitespace", "useragent_log",
398
+ "visible_hostname", "wais_relay", "wais_relay_host", "wais_relay_port",
399
+ )
400
+
401
+ opts = (
402
+ "proxy-only", "weight", "ttl", "no-query", "default", "round-robin",
403
+ "multicast-responder", "on", "off", "all", "deny", "allow", "via",
404
+ "parent", "no-digest", "heap", "lru", "realm", "children", "q1", "q2",
405
+ "credentialsttl", "none", "disable", "offline_toggle", "diskd",
406
+ )
407
+
408
+ actions = (
409
+ "shutdown", "info", "parameter", "server_list", "client_list",
410
+ r'squid.conf',
411
+ )
412
+
413
+ actions_stats = (
414
+ "objects", "vm_objects", "utilization", "ipcache", "fqdncache", "dns",
415
+ "redirector", "io", "reply_headers", "filedescriptors", "netdb",
416
+ )
417
+
418
+ actions_log = ("status", "enable", "disable", "clear")
419
+
420
+ acls = (
421
+ "url_regex", "urlpath_regex", "referer_regex", "port", "proto",
422
+ "req_mime_type", "rep_mime_type", "method", "browser", "user", "src",
423
+ "dst", "time", "dstdomain", "ident", "snmp_community",
424
+ )
425
+
426
+ ip_re = (
427
+ r'(?:(?:(?:[3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}|0x0*[0-9a-f]{1,2}|'
428
+ r'0+[1-3]?[0-7]{0,2})(?:\.(?:[3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}|'
429
+ r'0x0*[0-9a-f]{1,2}|0+[1-3]?[0-7]{0,2})){3})|(?!.*::.*::)(?:(?!:)|'
430
+ r':(?=:))(?:[0-9a-f]{0,4}(?:(?<=::)|(?<!::):)){6}(?:[0-9a-f]{0,4}'
431
+ r'(?:(?<=::)|(?<!::):)[0-9a-f]{0,4}(?:(?<=::)|(?<!:)|(?<=:)(?<!::):)|'
432
+ r'(?:25[0-4]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-4]|2[0-4]\d|1\d\d|'
433
+ r'[1-9]?\d)){3}))'
434
+ )
435
+
436
+ tokens = {
437
+ 'root': [
438
+ (r'\s+', Whitespace),
439
+ (r'#', Comment, 'comment'),
440
+ (words(keywords, prefix=r'\b', suffix=r'\b'), Keyword),
441
+ (words(opts, prefix=r'\b', suffix=r'\b'), Name.Constant),
442
+ # Actions
443
+ (words(actions, prefix=r'\b', suffix=r'\b'), String),
444
+ (words(actions_stats, prefix=r'stats/', suffix=r'\b'), String),
445
+ (words(actions_log, prefix=r'log/', suffix=r'='), String),
446
+ (words(acls, prefix=r'\b', suffix=r'\b'), Keyword),
447
+ (ip_re + r'(?:/(?:' + ip_re + r'|\b\d+\b))?', Number.Float),
448
+ (r'(?:\b\d+\b(?:-\b\d+|%)?)', Number),
449
+ (r'\S+', Text),
450
+ ],
451
+ 'comment': [
452
+ (r'\s*TAG:.*', String.Escape, '#pop'),
453
+ (r'.+', Comment, '#pop'),
454
+ default('#pop'),
455
+ ],
456
+ }
457
+
458
+
459
+ class NginxConfLexer(RegexLexer):
460
+ """
461
+ Lexer for `Nginx <http://nginx.net/>`_ configuration files.
462
+
463
+ .. versionadded:: 0.11
464
+ """
465
+ name = 'Nginx configuration file'
466
+ aliases = ['nginx']
467
+ filenames = ['nginx.conf']
468
+ mimetypes = ['text/x-nginx-conf']
469
+
470
+ tokens = {
471
+ 'root': [
472
+ (r'(include)(\s+)([^\s;]+)', bygroups(Keyword, Text, Name)),
473
+ (r'[^\s;#]+', Keyword, 'stmt'),
474
+ include('base'),
475
+ ],
476
+ 'block': [
477
+ (r'\}', Punctuation, '#pop:2'),
478
+ (r'[^\s;#]+', Keyword.Namespace, 'stmt'),
479
+ include('base'),
480
+ ],
481
+ 'stmt': [
482
+ (r'\{', Punctuation, 'block'),
483
+ (r';', Punctuation, '#pop'),
484
+ include('base'),
485
+ ],
486
+ 'base': [
487
+ (r'#.*\n', Comment.Single),
488
+ (r'on|off', Name.Constant),
489
+ (r'\$[^\s;#()]+', Name.Variable),
490
+ (r'([a-z0-9.-]+)(:)([0-9]+)',
491
+ bygroups(Name, Punctuation, Number.Integer)),
492
+ (r'[a-z-]+/[a-z-+]+', String), # mimetype
493
+ # (r'[a-zA-Z._-]+', Keyword),
494
+ (r'[0-9]+[km]?\b', Number.Integer),
495
+ (r'(~)(\s*)([^\s{]+)', bygroups(Punctuation, Text, String.Regex)),
496
+ (r'[:=~]', Punctuation),
497
+ (r'[^\s;#{}$]+', String), # catch all
498
+ (r'/[^\s;#]*', Name), # pathname
499
+ (r'\s+', Text),
500
+ (r'[$;]', Text), # leftover characters
501
+ ],
502
+ }
503
+
504
+
505
+ class LighttpdConfLexer(RegexLexer):
506
+ """
507
+ Lexer for `Lighttpd <http://lighttpd.net/>`_ configuration files.
508
+
509
+ .. versionadded:: 0.11
510
+ """
511
+ name = 'Lighttpd configuration file'
512
+ aliases = ['lighty', 'lighttpd']
513
+ filenames = []
514
+ mimetypes = ['text/x-lighttpd-conf']
515
+
516
+ tokens = {
517
+ 'root': [
518
+ (r'#.*\n', Comment.Single),
519
+ (r'/\S*', Name), # pathname
520
+ (r'[a-zA-Z._-]+', Keyword),
521
+ (r'\d+\.\d+\.\d+\.\d+(?:/\d+)?', Number),
522
+ (r'[0-9]+', Number),
523
+ (r'=>|=~|\+=|==|=|\+', Operator),
524
+ (r'\$[A-Z]+', Name.Builtin),
525
+ (r'[(){}\[\],]', Punctuation),
526
+ (r'"([^"\\]*(?:\\.[^"\\]*)*)"', String.Double),
527
+ (r'\s+', Text),
528
+ ],
529
+
530
+ }
531
+
532
+
533
+ class DockerLexer(RegexLexer):
534
+ """
535
+ Lexer for `Docker <http://docker.io>`_ configuration files.
536
+
537
+ .. versionadded:: 2.0
538
+ """
539
+ name = 'Docker'
540
+ aliases = ['docker', 'dockerfile']
541
+ filenames = ['Dockerfile', '*.docker']
542
+ mimetypes = ['text/x-dockerfile-config']
543
+
544
+ _keywords = (r'(?:MAINTAINER|EXPOSE|WORKDIR|USER|STOPSIGNAL)')
545
+ _bash_keywords = (r'(?:RUN|CMD|ENTRYPOINT|ENV|ARG|LABEL|ADD|COPY)')
546
+ _lb = r'(?:\s*\\?\s*)' # dockerfile line break regex
547
+ flags = re.IGNORECASE | re.MULTILINE
548
+
549
+ tokens = {
550
+ 'root': [
551
+ (r'#.*', Comment),
552
+ (r'(FROM)([ \t]*)(\S*)([ \t]*)(?:(AS)([ \t]*)(\S*))?',
553
+ bygroups(Keyword, Text, String, Text, Keyword, Text, String)),
554
+ (r'(ONBUILD)(%s)' % (_lb,), bygroups(Keyword, using(BashLexer))),
555
+ (r'(HEALTHCHECK)((%s--\w+=\w+%s)*)' % (_lb, _lb),
556
+ bygroups(Keyword, using(BashLexer))),
557
+ (r'(VOLUME|ENTRYPOINT|CMD|SHELL)(%s)(\[.*?\])' % (_lb,),
558
+ bygroups(Keyword, using(BashLexer), using(JsonLexer))),
559
+ (r'(LABEL|ENV|ARG)((%s\w+=\w+%s)*)' % (_lb, _lb),
560
+ bygroups(Keyword, using(BashLexer))),
561
+ (r'(%s|VOLUME)\b(.*)' % (_keywords), bygroups(Keyword, String)),
562
+ (r'(%s)' % (_bash_keywords,), Keyword),
563
+ (r'(.*\\\n)*.+', using(BashLexer)),
564
+ ]
565
+ }
566
+
567
+
568
+ class TerraformLexer(RegexLexer):
569
+ """
570
+ Lexer for `terraformi .tf files <https://www.terraform.io/>`_.
571
+
572
+ .. versionadded:: 2.1
573
+ """
574
+
575
+ name = 'Terraform'
576
+ aliases = ['terraform', 'tf']
577
+ filenames = ['*.tf']
578
+ mimetypes = ['application/x-tf', 'application/x-terraform']
579
+
580
+ embedded_keywords = ('ingress', 'egress', 'listener', 'default',
581
+ 'connection', 'alias', 'terraform', 'tags', 'vars',
582
+ 'config', 'lifecycle', 'timeouts')
583
+
584
+ tokens = {
585
+ 'root': [
586
+ include('string'),
587
+ include('punctuation'),
588
+ include('curly'),
589
+ include('basic'),
590
+ include('whitespace'),
591
+ (r'[0-9]+', Number),
592
+ ],
593
+ 'basic': [
594
+ (words(('true', 'false'), prefix=r'\b', suffix=r'\b'), Keyword.Type),
595
+ (r'\s*/\*', Comment.Multiline, 'comment'),
596
+ (r'\s*#.*\n', Comment.Single),
597
+ (r'(.*?)(\s*)(=)', bygroups(Name.Attribute, Text, Operator)),
598
+ (words(('variable', 'resource', 'provider', 'provisioner', 'module',
599
+ 'backend', 'data', 'output'), prefix=r'\b', suffix=r'\b'),
600
+ Keyword.Reserved, 'function'),
601
+ (words(embedded_keywords, prefix=r'\b', suffix=r'\b'),
602
+ Keyword.Declaration),
603
+ (r'\$\{', String.Interpol, 'var_builtin'),
604
+ ],
605
+ 'function': [
606
+ (r'(\s+)(".*")(\s+)', bygroups(Text, String, Text)),
607
+ include('punctuation'),
608
+ include('curly'),
609
+ ],
610
+ 'var_builtin': [
611
+ (r'\$\{', String.Interpol, '#push'),
612
+ (words(('concat', 'file', 'join', 'lookup', 'element'),
613
+ prefix=r'\b', suffix=r'\b'), Name.Builtin),
614
+ include('string'),
615
+ include('punctuation'),
616
+ (r'\s+', Text),
617
+ (r'\}', String.Interpol, '#pop'),
618
+ ],
619
+ 'string': [
620
+ (r'(".*")', bygroups(String.Double)),
621
+ ],
622
+ 'punctuation': [
623
+ (r'[\[\](),.]', Punctuation),
624
+ ],
625
+ # Keep this seperate from punctuation - we sometimes want to use different
626
+ # Tokens for { }
627
+ 'curly': [
628
+ (r'\{', Text.Punctuation),
629
+ (r'\}', Text.Punctuation),
630
+ ],
631
+ 'comment': [
632
+ (r'[^*/]', Comment.Multiline),
633
+ (r'/\*', Comment.Multiline, '#push'),
634
+ (r'\*/', Comment.Multiline, '#pop'),
635
+ (r'[*/]', Comment.Multiline)
636
+ ],
637
+ 'whitespace': [
638
+ (r'\n', Text),
639
+ (r'\s+', Text),
640
+ (r'\\\n', Text),
641
+ ],
642
+ }
643
+
644
+
645
+ class TermcapLexer(RegexLexer):
646
+ """
647
+ Lexer for termcap database source.
648
+
649
+ This is very simple and minimal.
650
+
651
+ .. versionadded:: 2.1
652
+ """
653
+ name = 'Termcap'
654
+ aliases = ['termcap']
655
+ filenames = ['termcap', 'termcap.src']
656
+ mimetypes = []
657
+
658
+ # NOTE:
659
+ # * multiline with trailing backslash
660
+ # * separator is ':'
661
+ # * to embed colon as data, we must use \072
662
+ # * space after separator is not allowed (mayve)
663
+ tokens = {
664
+ 'root': [
665
+ (r'^#.*$', Comment),
666
+ (r'^[^\s#:|]+', Name.Tag, 'names'),
667
+ ],
668
+ 'names': [
669
+ (r'\n', Text, '#pop'),
670
+ (r':', Punctuation, 'defs'),
671
+ (r'\|', Punctuation),
672
+ (r'[^:|]+', Name.Attribute),
673
+ ],
674
+ 'defs': [
675
+ (r'\\\n[ \t]*', Text),
676
+ (r'\n[ \t]*', Text, '#pop:2'),
677
+ (r'(#)([0-9]+)', bygroups(Operator, Number)),
678
+ (r'=', Operator, 'data'),
679
+ (r':', Punctuation),
680
+ (r'[^\s:=#]+', Name.Class),
681
+ ],
682
+ 'data': [
683
+ (r'\\072', Literal),
684
+ (r':', Punctuation, '#pop'),
685
+ (r'[^:\\]+', Literal), # for performance
686
+ (r'.', Literal),
687
+ ],
688
+ }
689
+
690
+
691
+ class TerminfoLexer(RegexLexer):
692
+ """
693
+ Lexer for terminfo database source.
694
+
695
+ This is very simple and minimal.
696
+
697
+ .. versionadded:: 2.1
698
+ """
699
+ name = 'Terminfo'
700
+ aliases = ['terminfo']
701
+ filenames = ['terminfo', 'terminfo.src']
702
+ mimetypes = []
703
+
704
+ # NOTE:
705
+ # * multiline with leading whitespace
706
+ # * separator is ','
707
+ # * to embed comma as data, we can use \,
708
+ # * space after separator is allowed
709
+ tokens = {
710
+ 'root': [
711
+ (r'^#.*$', Comment),
712
+ (r'^[^\s#,|]+', Name.Tag, 'names'),
713
+ ],
714
+ 'names': [
715
+ (r'\n', Text, '#pop'),
716
+ (r'(,)([ \t]*)', bygroups(Punctuation, Text), 'defs'),
717
+ (r'\|', Punctuation),
718
+ (r'[^,|]+', Name.Attribute),
719
+ ],
720
+ 'defs': [
721
+ (r'\n[ \t]+', Text),
722
+ (r'\n', Text, '#pop:2'),
723
+ (r'(#)([0-9]+)', bygroups(Operator, Number)),
724
+ (r'=', Operator, 'data'),
725
+ (r'(,)([ \t]*)', bygroups(Punctuation, Text)),
726
+ (r'[^\s,=#]+', Name.Class),
727
+ ],
728
+ 'data': [
729
+ (r'\\[,\\]', Literal),
730
+ (r'(,)([ \t]*)', bygroups(Punctuation, Text), '#pop'),
731
+ (r'[^\\,]+', Literal), # for performance
732
+ (r'.', Literal),
733
+ ],
734
+ }
735
+
736
+
737
+ class PkgConfigLexer(RegexLexer):
738
+ """
739
+ Lexer for `pkg-config
740
+ <http://www.freedesktop.org/wiki/Software/pkg-config/>`_
741
+ (see also `manual page <http://linux.die.net/man/1/pkg-config>`_).
742
+
743
+ .. versionadded:: 2.1
744
+ """
745
+
746
+ name = 'PkgConfig'
747
+ aliases = ['pkgconfig']
748
+ filenames = ['*.pc']
749
+ mimetypes = []
750
+
751
+ tokens = {
752
+ 'root': [
753
+ (r'#.*$', Comment.Single),
754
+
755
+ # variable definitions
756
+ (r'^(\w+)(=)', bygroups(Name.Attribute, Operator)),
757
+
758
+ # keyword lines
759
+ (r'^([\w.]+)(:)',
760
+ bygroups(Name.Tag, Punctuation), 'spvalue'),
761
+
762
+ # variable references
763
+ include('interp'),
764
+
765
+ # fallback
766
+ (r'[^${}#=:\n.]+', Text),
767
+ (r'.', Text),
768
+ ],
769
+ 'interp': [
770
+ # you can escape literal "$" as "$$"
771
+ (r'\$\$', Text),
772
+
773
+ # variable references
774
+ (r'\$\{', String.Interpol, 'curly'),
775
+ ],
776
+ 'curly': [
777
+ (r'\}', String.Interpol, '#pop'),
778
+ (r'\w+', Name.Attribute),
779
+ ],
780
+ 'spvalue': [
781
+ include('interp'),
782
+
783
+ (r'#.*$', Comment.Single, '#pop'),
784
+ (r'\n', Text, '#pop'),
785
+
786
+ # fallback
787
+ (r'[^${}#\n]+', Text),
788
+ (r'.', Text),
789
+ ],
790
+ }
791
+
792
+
793
+ class PacmanConfLexer(RegexLexer):
794
+ """
795
+ Lexer for `pacman.conf
796
+ <https://www.archlinux.org/pacman/pacman.conf.5.html>`_.
797
+
798
+ Actually, IniLexer works almost fine for this format,
799
+ but it yield error token. It is because pacman.conf has
800
+ a form without assignment like:
801
+
802
+ UseSyslog
803
+ Color
804
+ TotalDownload
805
+ CheckSpace
806
+ VerbosePkgLists
807
+
808
+ These are flags to switch on.
809
+
810
+ .. versionadded:: 2.1
811
+ """
812
+
813
+ name = 'PacmanConf'
814
+ aliases = ['pacmanconf']
815
+ filenames = ['pacman.conf']
816
+ mimetypes = []
817
+
818
+ tokens = {
819
+ 'root': [
820
+ # comment
821
+ (r'#.*$', Comment.Single),
822
+
823
+ # section header
824
+ (r'^\s*\[.*?\]\s*$', Keyword),
825
+
826
+ # variable definitions
827
+ # (Leading space is allowed...)
828
+ (r'(\w+)(\s*)(=)',
829
+ bygroups(Name.Attribute, Text, Operator)),
830
+
831
+ # flags to on
832
+ (r'^(\s*)(\w+)(\s*)$',
833
+ bygroups(Text, Name.Attribute, Text)),
834
+
835
+ # built-in special values
836
+ (words((
837
+ '$repo', # repository
838
+ '$arch', # architecture
839
+ '%o', # outfile
840
+ '%u', # url
841
+ ), suffix=r'\b'),
842
+ Name.Variable),
843
+
844
+ # fallback
845
+ (r'.', Text),
846
+ ],
847
+ }
848
+
849
+
850
+ class AugeasLexer(RegexLexer):
851
+ """
852
+ Lexer for `Augeas <http://augeas.net>`_.
853
+
854
+ .. versionadded:: 2.4
855
+ """
856
+ name = 'Augeas'
857
+ aliases = ['augeas']
858
+ filenames = ['*.aug']
859
+
860
+ tokens = {
861
+ 'root': [
862
+ (r'(module)(\s*)([^\s=]+)', bygroups(Keyword.Namespace, Text, Name.Namespace)),
863
+ (r'(let)(\s*)([^\s=]+)', bygroups(Keyword.Declaration, Text, Name.Variable)),
864
+ (r'(del|store|value|counter|seq|key|label|autoload|incl|excl|transform|test|get|put)(\s+)', bygroups(Name.Builtin, Text)),
865
+ (r'(\()([^:]+)(\:)(unit|string|regexp|lens|tree|filter)(\))', bygroups(Punctuation, Name.Variable, Punctuation, Keyword.Type, Punctuation)),
866
+ (r'\(\*', Comment.Multiline, 'comment'),
867
+ (r'[*+\-.;=?|]', Operator),
868
+ (r'[()\[\]{}]', Operator),
869
+ (r'"', String.Double, 'string'),
870
+ (r'\/', String.Regex, 'regex'),
871
+ (r'([A-Z]\w*)(\.)(\w+)', bygroups(Name.Namespace, Punctuation, Name.Variable)),
872
+ (r'.', Name.Variable),
873
+ (r'\s', Text),
874
+ ],
875
+ 'string': [
876
+ (r'\\.', String.Escape),
877
+ (r'[^"]', String.Double),
878
+ (r'"', String.Double, '#pop'),
879
+ ],
880
+ 'regex': [
881
+ (r'\\.', String.Escape),
882
+ (r'[^/]', String.Regex),
883
+ (r'\/', String.Regex, '#pop'),
884
+ ],
885
+ 'comment': [
886
+ (r'[^*)]', Comment.Multiline),
887
+ (r'\(\*', Comment.Multiline, '#push'),
888
+ (r'\*\)', Comment.Multiline, '#pop'),
889
+ (r'[)*]', Comment.Multiline)
890
+ ],
891
+ }
892
+
893
+
894
+ class TOMLLexer(RegexLexer):
895
+ """
896
+ Lexer for `TOML <https://github.com/toml-lang/toml>`_, a simple language
897
+ for config files.
898
+
899
+ .. versionadded:: 2.4
900
+ """
901
+
902
+ name = 'TOML'
903
+ aliases = ['toml']
904
+ filenames = ['*.toml', 'Pipfile', 'poetry.lock']
905
+
906
+ tokens = {
907
+ 'root': [
908
+
909
+ # Basics, comments, strings
910
+ (r'\s+', Text),
911
+ (r'#.*?$', Comment.Single),
912
+ # Basic string
913
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String),
914
+ # Literal string
915
+ (r'\'\'\'(.*)\'\'\'', String),
916
+ (r'\'[^\']*\'', String),
917
+ (r'(true|false)$', Keyword.Constant),
918
+ (r'[a-zA-Z_][\w\-]*', Name),
919
+
920
+ (r'\[.*?\]$', Keyword),
921
+ # Datetime
922
+ # TODO this needs to be expanded, as TOML is rather flexible:
923
+ # https://github.com/toml-lang/toml#offset-date-time
924
+ (r'\d{4}-\d{2}-\d{2}(?:T| )\d{2}:\d{2}:\d{2}(?:Z|[-+]\d{2}:\d{2})', Number.Integer),
925
+
926
+ # Numbers
927
+ (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?', Number.Float),
928
+ (r'\d+[eE][+-]?[0-9]+j?', Number.Float),
929
+ # Handle +-inf, +-infinity, +-nan
930
+ (r'[+-]?(?:(inf(?:inity)?)|nan)', Number.Float),
931
+ (r'[+-]?\d+', Number.Integer),
932
+
933
+ # Punctuation
934
+ (r'[]{}:(),;[]', Punctuation),
935
+ (r'\.', Punctuation),
936
+
937
+ # Operators
938
+ (r'=', Operator)
939
+
940
+ ]
941
+ }
942
+
943
+
944
+ class SingularityLexer(RegexLexer):
945
+ """
946
+ Lexer for `Singularity definition files
947
+ <https://www.sylabs.io/guides/3.0/user-guide/definition_files.html>`_.
948
+
949
+ .. versionadded:: 2.6
950
+ """
951
+
952
+ name = 'Singularity'
953
+ aliases = ['singularity']
954
+ filenames = ['*.def', 'Singularity']
955
+ flags = re.IGNORECASE | re.MULTILINE | re.DOTALL
956
+
957
+ _headers = r'^(\s*)(bootstrap|from|osversion|mirrorurl|include|registry|namespace|includecmd)(:)'
958
+ _section = r'^%(?:pre|post|setup|environment|help|labels|test|runscript|files|startscript)\b'
959
+ _appsect = r'^%app(?:install|help|run|labels|env|test|files)\b'
960
+
961
+ tokens = {
962
+ 'root': [
963
+ (_section, Generic.Heading, 'script'),
964
+ (_appsect, Generic.Heading, 'script'),
965
+ (_headers, bygroups(Text, Keyword, Text)),
966
+ (r'\s*#.*?\n', Comment),
967
+ (r'\b(([0-9]+\.?[0-9]*)|(\.[0-9]+))\b', Number),
968
+ (r'(?!^\s*%).', Text),
969
+ ],
970
+ 'script': [
971
+ (r'(.+?(?=^\s*%))|(.*)', using(BashLexer), '#pop'),
972
+ ],
973
+ }
974
+
975
+ def analyse_text(text):
976
+ """This is a quite simple script file, but there are a few keywords
977
+ which seem unique to this language."""
978
+ result = 0
979
+ if re.search(r'\b(?:osversion|includecmd|mirrorurl)\b', text, re.IGNORECASE):
980
+ result += 0.5
981
+
982
+ if re.search(SingularityLexer._section[1:], text):
983
+ result += 0.49
984
+
985
+ return result