pygments.rb 1.2.1 → 2.0.0.rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +13 -0
  3. data/.github/workflows/ci.yml +28 -0
  4. data/.github/workflows/release.yml +24 -0
  5. data/.gitignore +5 -6
  6. data/CHANGELOG.adoc +119 -0
  7. data/Gemfile +3 -1
  8. data/LICENSE +1 -1
  9. data/README.adoc +161 -0
  10. data/Rakefile +10 -21
  11. data/bench.rb +8 -7
  12. data/cache-lexers.rb +3 -2
  13. data/lib/pygments.rb +10 -11
  14. data/lib/pygments/lexer.rb +5 -5
  15. data/lib/pygments/mentos.py +23 -66
  16. data/lib/pygments/popen.rb +152 -204
  17. data/lib/pygments/version.rb +2 -2
  18. data/pygments.rb.gemspec +11 -9
  19. data/test/test_pygments.rb +51 -84
  20. data/vendor/pygments-main/{AUTHORS → Pygments-2.7.3.dist-info/AUTHORS} +21 -3
  21. data/vendor/pygments-main/Pygments-2.7.3.dist-info/INSTALLER +1 -0
  22. data/vendor/pygments-main/{LICENSE → Pygments-2.7.3.dist-info/LICENSE} +1 -1
  23. data/vendor/pygments-main/Pygments-2.7.3.dist-info/METADATA +49 -0
  24. data/vendor/pygments-main/Pygments-2.7.3.dist-info/RECORD +482 -0
  25. data/vendor/pygments-main/Pygments-2.7.3.dist-info/REQUESTED +0 -0
  26. data/vendor/pygments-main/Pygments-2.7.3.dist-info/WHEEL +5 -0
  27. data/vendor/pygments-main/Pygments-2.7.3.dist-info/entry_points.txt +3 -0
  28. data/vendor/pygments-main/Pygments-2.7.3.dist-info/top_level.txt +1 -0
  29. data/vendor/pygments-main/bin/pygmentize +8 -0
  30. data/vendor/pygments-main/pygments/__init__.py +6 -11
  31. data/vendor/pygments-main/pygments/__main__.py +18 -0
  32. data/vendor/pygments-main/pygments/cmdline.py +38 -29
  33. data/vendor/pygments-main/pygments/console.py +6 -9
  34. data/vendor/pygments-main/pygments/filter.py +4 -6
  35. data/vendor/pygments-main/pygments/filters/__init__.py +609 -21
  36. data/vendor/pygments-main/pygments/formatter.py +4 -4
  37. data/vendor/pygments-main/pygments/formatters/__init__.py +9 -8
  38. data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -3
  39. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
  40. data/vendor/pygments-main/pygments/formatters/html.py +223 -135
  41. data/vendor/pygments-main/pygments/formatters/img.py +68 -41
  42. data/vendor/pygments-main/pygments/formatters/irc.py +39 -39
  43. data/vendor/pygments-main/pygments/formatters/latex.py +56 -26
  44. data/vendor/pygments-main/pygments/formatters/other.py +12 -8
  45. data/vendor/pygments-main/pygments/formatters/rtf.py +29 -29
  46. data/vendor/pygments-main/pygments/formatters/svg.py +38 -4
  47. data/vendor/pygments-main/pygments/formatters/terminal.py +25 -31
  48. data/vendor/pygments-main/pygments/formatters/terminal256.py +22 -12
  49. data/vendor/pygments-main/pygments/lexer.py +41 -39
  50. data/vendor/pygments-main/pygments/lexers/__init__.py +342 -0
  51. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1645 -0
  52. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +232 -0
  53. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +71 -0
  54. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1725 -0
  55. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +5327 -0
  56. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +293 -0
  57. data/vendor/pygments-main/pygments/lexers/_mapping.py +551 -0
  58. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1172 -0
  59. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1282 -0
  60. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +2547 -0
  61. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +4753 -0
  62. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +678 -0
  63. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +3094 -0
  64. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1161 -0
  65. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +558 -0
  66. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +421 -0
  67. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1004 -0
  68. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +113 -0
  69. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +280 -0
  70. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1939 -0
  71. data/vendor/pygments-main/pygments/lexers/actionscript.py +245 -0
  72. data/vendor/pygments-main/pygments/lexers/agile.py +24 -0
  73. data/vendor/pygments-main/pygments/lexers/algebra.py +240 -0
  74. data/vendor/pygments-main/pygments/lexers/ambient.py +76 -0
  75. data/vendor/pygments-main/pygments/lexers/ampl.py +87 -0
  76. data/vendor/pygments-main/pygments/lexers/apl.py +101 -0
  77. data/vendor/pygments-main/pygments/lexers/archetype.py +318 -0
  78. data/vendor/pygments-main/pygments/lexers/arrow.py +117 -0
  79. data/vendor/pygments-main/pygments/lexers/asm.py +1005 -0
  80. data/vendor/pygments-main/pygments/lexers/automation.py +374 -0
  81. data/vendor/pygments-main/pygments/lexers/bare.py +104 -0
  82. data/vendor/pygments-main/pygments/lexers/basic.py +662 -0
  83. data/vendor/pygments-main/pygments/lexers/bibtex.py +160 -0
  84. data/vendor/pygments-main/pygments/lexers/boa.py +102 -0
  85. data/vendor/pygments-main/pygments/lexers/business.py +627 -0
  86. data/vendor/pygments-main/pygments/lexers/c_cpp.py +344 -0
  87. data/vendor/pygments-main/pygments/lexers/c_like.py +566 -0
  88. data/vendor/pygments-main/pygments/lexers/capnproto.py +78 -0
  89. data/vendor/pygments-main/pygments/lexers/chapel.py +112 -0
  90. data/vendor/pygments-main/pygments/lexers/clean.py +179 -0
  91. data/vendor/pygments-main/pygments/lexers/compiled.py +34 -0
  92. data/vendor/pygments-main/pygments/lexers/configs.py +984 -0
  93. data/vendor/pygments-main/pygments/lexers/console.py +114 -0
  94. data/vendor/pygments-main/pygments/lexers/crystal.py +392 -0
  95. data/vendor/pygments-main/pygments/lexers/csound.py +467 -0
  96. data/vendor/pygments-main/pygments/lexers/css.py +691 -0
  97. data/vendor/pygments-main/pygments/lexers/d.py +256 -0
  98. data/vendor/pygments-main/pygments/lexers/dalvik.py +125 -0
  99. data/vendor/pygments-main/pygments/lexers/data.py +698 -0
  100. data/vendor/pygments-main/pygments/lexers/devicetree.py +109 -0
  101. data/vendor/pygments-main/pygments/lexers/diff.py +165 -0
  102. data/vendor/pygments-main/pygments/lexers/dotnet.py +707 -0
  103. data/vendor/pygments-main/pygments/lexers/dsls.py +960 -0
  104. data/vendor/pygments-main/pygments/lexers/dylan.py +287 -0
  105. data/vendor/pygments-main/pygments/lexers/ecl.py +139 -0
  106. data/vendor/pygments-main/pygments/lexers/eiffel.py +65 -0
  107. data/vendor/pygments-main/pygments/lexers/elm.py +121 -0
  108. data/vendor/pygments-main/pygments/lexers/email.py +151 -0
  109. data/vendor/pygments-main/pygments/lexers/erlang.py +530 -0
  110. data/vendor/pygments-main/pygments/lexers/esoteric.py +304 -0
  111. data/vendor/pygments-main/pygments/lexers/ezhil.py +77 -0
  112. data/vendor/pygments-main/pygments/lexers/factor.py +344 -0
  113. data/vendor/pygments-main/pygments/lexers/fantom.py +250 -0
  114. data/vendor/pygments-main/pygments/lexers/felix.py +273 -0
  115. data/vendor/pygments-main/pygments/lexers/floscript.py +83 -0
  116. data/vendor/pygments-main/pygments/lexers/forth.py +178 -0
  117. data/vendor/pygments-main/pygments/lexers/fortran.py +206 -0
  118. data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
  119. data/vendor/pygments-main/pygments/lexers/freefem.py +898 -0
  120. data/vendor/pygments-main/pygments/lexers/functional.py +21 -0
  121. data/vendor/pygments-main/pygments/lexers/gdscript.py +346 -0
  122. data/vendor/pygments-main/pygments/lexers/go.py +101 -0
  123. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +270 -0
  124. data/vendor/pygments-main/pygments/lexers/graph.py +85 -0
  125. data/vendor/pygments-main/pygments/lexers/graphics.py +800 -0
  126. data/vendor/pygments-main/pygments/lexers/haskell.py +870 -0
  127. data/vendor/pygments-main/pygments/lexers/haxe.py +936 -0
  128. data/vendor/pygments-main/pygments/lexers/hdl.py +472 -0
  129. data/vendor/pygments-main/pygments/lexers/hexdump.py +103 -0
  130. data/vendor/pygments-main/pygments/lexers/html.py +614 -0
  131. data/vendor/pygments-main/pygments/lexers/idl.py +281 -0
  132. data/vendor/pygments-main/pygments/lexers/igor.py +420 -0
  133. data/vendor/pygments-main/pygments/lexers/inferno.py +96 -0
  134. data/vendor/pygments-main/pygments/lexers/installers.py +322 -0
  135. data/vendor/pygments-main/pygments/lexers/int_fiction.py +1368 -0
  136. data/vendor/pygments-main/pygments/lexers/iolang.py +63 -0
  137. data/vendor/pygments-main/pygments/lexers/j.py +146 -0
  138. data/vendor/pygments-main/pygments/lexers/javascript.py +1540 -0
  139. data/vendor/pygments-main/pygments/lexers/julia.py +331 -0
  140. data/vendor/pygments-main/pygments/lexers/jvm.py +1673 -0
  141. data/vendor/pygments-main/pygments/lexers/lisp.py +2699 -0
  142. data/vendor/pygments-main/pygments/lexers/make.py +206 -0
  143. data/vendor/pygments-main/pygments/lexers/markup.py +765 -0
  144. data/vendor/pygments-main/pygments/lexers/math.py +21 -0
  145. data/vendor/pygments-main/pygments/lexers/matlab.py +720 -0
  146. data/vendor/pygments-main/pygments/lexers/mime.py +226 -0
  147. data/vendor/pygments-main/pygments/lexers/ml.py +958 -0
  148. data/vendor/pygments-main/pygments/lexers/modeling.py +366 -0
  149. data/vendor/pygments-main/pygments/lexers/modula2.py +1580 -0
  150. data/vendor/pygments-main/pygments/lexers/monte.py +204 -0
  151. data/vendor/pygments-main/pygments/lexers/mosel.py +448 -0
  152. data/vendor/pygments-main/pygments/lexers/ncl.py +894 -0
  153. data/vendor/pygments-main/pygments/lexers/nimrod.py +159 -0
  154. data/vendor/pygments-main/pygments/lexers/nit.py +64 -0
  155. data/vendor/pygments-main/pygments/lexers/nix.py +136 -0
  156. data/vendor/pygments-main/pygments/lexers/oberon.py +121 -0
  157. data/vendor/pygments-main/pygments/lexers/objective.py +504 -0
  158. data/vendor/pygments-main/pygments/lexers/ooc.py +85 -0
  159. data/vendor/pygments-main/pygments/lexers/other.py +41 -0
  160. data/vendor/pygments-main/pygments/lexers/parasail.py +79 -0
  161. data/vendor/pygments-main/pygments/lexers/parsers.py +800 -0
  162. data/vendor/pygments-main/pygments/lexers/pascal.py +644 -0
  163. data/vendor/pygments-main/pygments/lexers/pawn.py +205 -0
  164. data/vendor/pygments-main/pygments/lexers/perl.py +732 -0
  165. data/vendor/pygments-main/pygments/lexers/php.py +321 -0
  166. data/vendor/pygments-main/pygments/lexers/pointless.py +71 -0
  167. data/vendor/pygments-main/pygments/lexers/pony.py +94 -0
  168. data/vendor/pygments-main/pygments/lexers/praat.py +302 -0
  169. data/vendor/pygments-main/pygments/lexers/prolog.py +306 -0
  170. data/vendor/pygments-main/pygments/lexers/promql.py +183 -0
  171. data/vendor/pygments-main/pygments/lexers/python.py +1151 -0
  172. data/vendor/pygments-main/pygments/lexers/qvt.py +152 -0
  173. data/vendor/pygments-main/pygments/lexers/r.py +191 -0
  174. data/vendor/pygments-main/pygments/lexers/rdf.py +463 -0
  175. data/vendor/pygments-main/pygments/lexers/rebol.py +431 -0
  176. data/vendor/pygments-main/pygments/lexers/resource.py +85 -0
  177. data/vendor/pygments-main/pygments/lexers/ride.py +139 -0
  178. data/vendor/pygments-main/pygments/lexers/rnc.py +67 -0
  179. data/vendor/pygments-main/pygments/lexers/roboconf.py +82 -0
  180. data/vendor/pygments-main/pygments/lexers/robotframework.py +552 -0
  181. data/vendor/pygments-main/pygments/lexers/ruby.py +517 -0
  182. data/vendor/pygments-main/pygments/lexers/rust.py +224 -0
  183. data/vendor/pygments-main/pygments/lexers/sas.py +228 -0
  184. data/vendor/pygments-main/pygments/lexers/scdoc.py +83 -0
  185. data/vendor/pygments-main/pygments/lexers/scripting.py +1284 -0
  186. data/vendor/pygments-main/pygments/lexers/sgf.py +61 -0
  187. data/vendor/pygments-main/pygments/lexers/shell.py +914 -0
  188. data/vendor/pygments-main/pygments/lexers/sieve.py +69 -0
  189. data/vendor/pygments-main/pygments/lexers/slash.py +185 -0
  190. data/vendor/pygments-main/pygments/lexers/smalltalk.py +195 -0
  191. data/vendor/pygments-main/pygments/lexers/smv.py +79 -0
  192. data/vendor/pygments-main/pygments/lexers/snobol.py +83 -0
  193. data/vendor/pygments-main/pygments/lexers/solidity.py +92 -0
  194. data/vendor/pygments-main/pygments/lexers/special.py +105 -0
  195. data/vendor/pygments-main/pygments/lexers/sql.py +837 -0
  196. data/vendor/pygments-main/pygments/lexers/stata.py +171 -0
  197. data/vendor/pygments-main/pygments/lexers/supercollider.py +95 -0
  198. data/vendor/pygments-main/pygments/lexers/tcl.py +145 -0
  199. data/vendor/pygments-main/pygments/lexers/templates.py +2264 -0
  200. data/vendor/pygments-main/pygments/lexers/teraterm.py +335 -0
  201. data/vendor/pygments-main/pygments/lexers/testing.py +207 -0
  202. data/vendor/pygments-main/pygments/lexers/text.py +26 -0
  203. data/vendor/pygments-main/pygments/lexers/textedit.py +169 -0
  204. data/vendor/pygments-main/pygments/lexers/textfmts.py +430 -0
  205. data/vendor/pygments-main/pygments/lexers/theorem.py +474 -0
  206. data/vendor/pygments-main/pygments/lexers/tnt.py +263 -0
  207. data/vendor/pygments-main/pygments/lexers/trafficscript.py +54 -0
  208. data/vendor/pygments-main/pygments/lexers/typoscript.py +219 -0
  209. data/vendor/pygments-main/pygments/lexers/unicon.py +412 -0
  210. data/vendor/pygments-main/pygments/lexers/urbi.py +146 -0
  211. data/vendor/pygments-main/pygments/lexers/usd.py +90 -0
  212. data/vendor/pygments-main/pygments/lexers/varnish.py +190 -0
  213. data/vendor/pygments-main/pygments/lexers/verification.py +114 -0
  214. data/vendor/pygments-main/pygments/lexers/web.py +24 -0
  215. data/vendor/pygments-main/pygments/lexers/webidl.py +299 -0
  216. data/vendor/pygments-main/pygments/lexers/webmisc.py +991 -0
  217. data/vendor/pygments-main/pygments/lexers/whiley.py +116 -0
  218. data/vendor/pygments-main/pygments/lexers/x10.py +69 -0
  219. data/vendor/pygments-main/pygments/lexers/xorg.py +37 -0
  220. data/vendor/pygments-main/pygments/lexers/yang.py +104 -0
  221. data/vendor/pygments-main/pygments/lexers/zig.py +124 -0
  222. data/vendor/pygments-main/pygments/modeline.py +1 -1
  223. data/vendor/pygments-main/pygments/plugin.py +4 -2
  224. data/vendor/pygments-main/pygments/regexopt.py +1 -1
  225. data/vendor/pygments-main/pygments/scanner.py +2 -2
  226. data/vendor/pygments-main/pygments/sphinxext.py +2 -4
  227. data/vendor/pygments-main/pygments/style.py +61 -24
  228. data/vendor/pygments-main/pygments/styles/__init__.py +10 -4
  229. data/vendor/pygments-main/pygments/styles/abap.py +1 -1
  230. data/vendor/pygments-main/pygments/styles/algol.py +1 -1
  231. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -1
  232. data/vendor/pygments-main/pygments/styles/arduino.py +2 -2
  233. data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
  234. data/vendor/pygments-main/pygments/styles/borland.py +1 -1
  235. data/vendor/pygments-main/pygments/styles/bw.py +1 -1
  236. data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
  237. data/vendor/pygments-main/pygments/styles/default.py +1 -1
  238. data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
  239. data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
  240. data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
  241. data/vendor/pygments-main/pygments/styles/igor.py +1 -1
  242. data/vendor/pygments-main/pygments/styles/inkpot.py +67 -0
  243. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -1
  244. data/vendor/pygments-main/pygments/styles/manni.py +1 -1
  245. data/vendor/pygments-main/pygments/styles/monokai.py +4 -3
  246. data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
  247. data/vendor/pygments-main/pygments/styles/native.py +1 -1
  248. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -1
  249. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -1
  250. data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
  251. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
  252. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -1
  253. data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
  254. data/vendor/pygments-main/pygments/styles/sas.py +1 -1
  255. data/vendor/pygments-main/pygments/styles/solarized.py +134 -0
  256. data/vendor/pygments-main/pygments/styles/stata_dark.py +41 -0
  257. data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -15
  258. data/vendor/pygments-main/pygments/styles/tango.py +1 -1
  259. data/vendor/pygments-main/pygments/styles/trac.py +1 -1
  260. data/vendor/pygments-main/pygments/styles/vim.py +1 -1
  261. data/vendor/pygments-main/pygments/styles/vs.py +1 -1
  262. data/vendor/pygments-main/pygments/styles/xcode.py +1 -1
  263. data/vendor/pygments-main/pygments/token.py +1 -1
  264. data/vendor/pygments-main/pygments/unistring.py +47 -108
  265. data/vendor/pygments-main/pygments/util.py +15 -92
  266. metadata +69 -136
  267. data/CHANGELOG.md +0 -111
  268. data/README.md +0 -121
  269. data/circle.yml +0 -20
  270. data/test/test_data.py +0 -514
  271. data/test/test_data_generated +0 -2582
  272. data/vendor/custom_lexers/github.py +0 -565
  273. data/vendor/pygments-main/CHANGES +0 -1186
  274. data/vendor/pygments-main/MANIFEST.in +0 -6
  275. data/vendor/pygments-main/Makefile +0 -65
  276. data/vendor/pygments-main/README.rst +0 -39
  277. data/vendor/pygments-main/REVISION +0 -1
  278. data/vendor/pygments-main/TODO +0 -12
  279. data/vendor/pygments-main/doc/Makefile +0 -153
  280. data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
  281. data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
  282. data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
  283. data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
  284. data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
  285. data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
  286. data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
  287. data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
  288. data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
  289. data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
  290. data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
  291. data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
  292. data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
  293. data/vendor/pygments-main/doc/conf.py +0 -241
  294. data/vendor/pygments-main/doc/docs/api.rst +0 -354
  295. data/vendor/pygments-main/doc/docs/authors.rst +0 -4
  296. data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
  297. data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
  298. data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
  299. data/vendor/pygments-main/doc/docs/filters.rst +0 -41
  300. data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
  301. data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
  302. data/vendor/pygments-main/doc/docs/index.rst +0 -66
  303. data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
  304. data/vendor/pygments-main/doc/docs/java.rst +0 -70
  305. data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
  306. data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
  307. data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
  308. data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
  309. data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
  310. data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
  311. data/vendor/pygments-main/doc/docs/styles.rst +0 -201
  312. data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
  313. data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
  314. data/vendor/pygments-main/doc/download.rst +0 -41
  315. data/vendor/pygments-main/doc/faq.rst +0 -139
  316. data/vendor/pygments-main/doc/index.rst +0 -54
  317. data/vendor/pygments-main/doc/languages.rst +0 -154
  318. data/vendor/pygments-main/doc/make.bat +0 -190
  319. data/vendor/pygments-main/doc/pygmentize.1 +0 -94
  320. data/vendor/pygments-main/external/autopygmentize +0 -101
  321. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
  322. data/vendor/pygments-main/external/markdown-processor.py +0 -67
  323. data/vendor/pygments-main/external/moin-parser.py +0 -112
  324. data/vendor/pygments-main/external/pygments.bashcomp +0 -38
  325. data/vendor/pygments-main/external/rst-directive.py +0 -82
  326. data/vendor/pygments-main/pygmentize +0 -8
  327. data/vendor/pygments-main/requirements.txt +0 -5
  328. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  329. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  330. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  331. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  332. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  333. data/vendor/pygments-main/scripts/pylintrc +0 -301
  334. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  335. data/vendor/pygments-main/setup.cfg +0 -10
  336. data/vendor/pygments-main/setup.py +0 -77
  337. data/vendor/pygments-main/tox.ini +0 -7
  338. data/vendor/simplejson/.gitignore +0 -10
  339. data/vendor/simplejson/.travis.yml +0 -5
  340. data/vendor/simplejson/CHANGES.txt +0 -291
  341. data/vendor/simplejson/LICENSE.txt +0 -19
  342. data/vendor/simplejson/MANIFEST.in +0 -5
  343. data/vendor/simplejson/README.rst +0 -19
  344. data/vendor/simplejson/conf.py +0 -179
  345. data/vendor/simplejson/index.rst +0 -628
  346. data/vendor/simplejson/scripts/make_docs.py +0 -18
  347. data/vendor/simplejson/setup.py +0 -104
  348. data/vendor/simplejson/simplejson/__init__.py +0 -510
  349. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  350. data/vendor/simplejson/simplejson/decoder.py +0 -425
  351. data/vendor/simplejson/simplejson/encoder.py +0 -567
  352. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  353. data/vendor/simplejson/simplejson/scanner.py +0 -77
  354. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  355. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  356. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  357. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  358. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  359. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  360. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  361. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  362. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  363. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  364. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  365. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  366. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  367. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  368. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  369. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  370. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  371. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  372. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  373. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  374. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  375. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  376. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  377. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  378. data/vendor/simplejson/simplejson/tool.py +0 -39
@@ -0,0 +1,139 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ pygments.lexers.ride
4
+ ~~~~~~~~~~~~~~~~~~~~
5
+
6
+ Lexer for the Ride programming language.
7
+
8
+ :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
9
+ :license: BSD, see LICENSE for details.
10
+ """
11
+
12
+ from pygments.lexer import RegexLexer, words, include
13
+ from pygments.token import Comment, Keyword, Name, Number, Punctuation, String, Text
14
+
15
+ __all__ = ['RideLexer']
16
+
17
+
18
+ class RideLexer(RegexLexer):
19
+ """
20
+ For `Ride <https://docs.wavesplatform.com/en/ride/about-ride.html>`_
21
+ source code.
22
+
23
+ .. versionadded:: 2.6
24
+ """
25
+
26
+ name = 'Ride'
27
+ aliases = ['ride']
28
+ filenames = ['*.ride']
29
+ mimetypes = ['text/x-ride']
30
+
31
+ validName = r'[a-zA-Z_][a-zA-Z0-9_\']*'
32
+
33
+ builtinOps = (
34
+ '||', '|', '>=', '>', '==', '!',
35
+ '=', '<=', '<', '::', ':+', ':', '!=', '/',
36
+ '.', '=>', '-', '+', '*', '&&', '%', '++',
37
+ )
38
+
39
+ globalVariablesName = (
40
+ 'NOALG', 'MD5', 'SHA1', 'SHA224', 'SHA256', 'SHA384', 'SHA512',
41
+ 'SHA3224', 'SHA3256', 'SHA3384', 'SHA3512', 'nil', 'this', 'unit',
42
+ 'height', 'lastBlock', 'Buy', 'Sell', 'CEILING', 'FLOOR', 'DOWN',
43
+ 'HALFDOWN', 'HALFEVEN', 'HALFUP', 'UP',
44
+ )
45
+
46
+ typesName = (
47
+ 'Unit', 'Int', 'Boolean', 'ByteVector', 'String', 'Address', 'Alias',
48
+ 'Transfer', 'AssetPair', 'DataEntry', 'Order', 'Transaction',
49
+ 'GenesisTransaction', 'PaymentTransaction', 'ReissueTransaction',
50
+ 'BurnTransaction', 'MassTransferTransaction', 'ExchangeTransaction',
51
+ 'TransferTransaction', 'SetAssetScriptTransaction',
52
+ 'InvokeScriptTransaction', 'IssueTransaction', 'LeaseTransaction',
53
+ 'LeaseCancelTransaction', 'CreateAliasTransaction',
54
+ 'SetScriptTransaction', 'SponsorFeeTransaction', 'DataTransaction',
55
+ 'WriteSet', 'AttachedPayment', 'ScriptTransfer', 'TransferSet',
56
+ 'ScriptResult', 'Invocation', 'Asset', 'BlockInfo', 'Issue', 'Reissue',
57
+ 'Burn', 'NoAlg', 'Md5', 'Sha1', 'Sha224', 'Sha256', 'Sha384', 'Sha512',
58
+ 'Sha3224', 'Sha3256', 'Sha3384', 'Sha3512', 'BinaryEntry',
59
+ 'BooleanEntry', 'IntegerEntry', 'StringEntry', 'List', 'Ceiling',
60
+ 'Down', 'Floor', 'HalfDown', 'HalfEven', 'HalfUp', 'Up',
61
+ )
62
+
63
+ functionsName = (
64
+ 'fraction', 'size', 'toBytes', 'take', 'drop', 'takeRight', 'dropRight',
65
+ 'toString', 'isDefined', 'extract', 'throw', 'getElement', 'value',
66
+ 'cons', 'toUtf8String', 'toInt', 'indexOf', 'lastIndexOf', 'split',
67
+ 'parseInt', 'parseIntValue', 'keccak256', 'blake2b256', 'sha256',
68
+ 'sigVerify', 'toBase58String', 'fromBase58String', 'toBase64String',
69
+ 'fromBase64String', 'transactionById', 'transactionHeightById',
70
+ 'getInteger', 'getBoolean', 'getBinary', 'getString',
71
+ 'addressFromPublicKey', 'addressFromString', 'addressFromRecipient',
72
+ 'assetBalance', 'wavesBalance', 'getIntegerValue', 'getBooleanValue',
73
+ 'getBinaryValue', 'getStringValue', 'addressFromStringValue',
74
+ 'assetInfo', 'rsaVerify', 'checkMerkleProof', 'median',
75
+ 'valueOrElse', 'valueOrErrorMessage', 'contains', 'log', 'pow',
76
+ 'toBase16String', 'fromBase16String', 'blockInfoByHeight',
77
+ 'transferTransactionById',
78
+ )
79
+
80
+ reservedWords = words((
81
+ 'match', 'case', 'else', 'func', 'if',
82
+ 'let', 'then', '@Callable', '@Verifier',
83
+ ), suffix=r'\b')
84
+
85
+ tokens = {
86
+ 'root': [
87
+ # Comments
88
+ (r'#.*', Comment.Single),
89
+ # Whitespace
90
+ (r'\s+', Text),
91
+ # Strings
92
+ (r'"', String, 'doublequote'),
93
+ (r'utf8\'', String, 'utf8quote'),
94
+ (r'base(58|64|16)\'', String, 'singlequote'),
95
+ # Keywords
96
+ (reservedWords, Keyword.Reserved),
97
+ (r'\{-#.*?#-\}', Keyword.Reserved),
98
+ (r'FOLD<\d+>', Keyword.Reserved),
99
+ # Types
100
+ (words(typesName), Keyword.Type),
101
+ # Main
102
+ # (specialName, Keyword.Reserved),
103
+ # Prefix Operators
104
+ (words(builtinOps, prefix=r'\(', suffix=r'\)'), Name.Function),
105
+ # Infix Operators
106
+ (words(builtinOps), Name.Function),
107
+ (words(globalVariablesName), Name.Function),
108
+ (words(functionsName), Name.Function),
109
+ # Numbers
110
+ include('numbers'),
111
+ # Variable Names
112
+ (validName, Name.Variable),
113
+ # Parens
114
+ (r'[,()\[\]{}]', Punctuation),
115
+ ],
116
+
117
+ 'doublequote': [
118
+ (r'\\u[0-9a-fA-F]{4}', String.Escape),
119
+ (r'\\[nrfvb\\"]', String.Escape),
120
+ (r'[^"]', String),
121
+ (r'"', String, '#pop'),
122
+ ],
123
+
124
+ 'utf8quote': [
125
+ (r'\\u[0-9a-fA-F]{4}', String.Escape),
126
+ (r'\\[nrfvb\\\']', String.Escape),
127
+ (r'[^\']', String),
128
+ (r'\'', String, '#pop'),
129
+ ],
130
+
131
+ 'singlequote': [
132
+ (r'[^\']', String),
133
+ (r'\'', String, '#pop'),
134
+ ],
135
+
136
+ 'numbers': [
137
+ (r'_?\d+', Number.Integer),
138
+ ],
139
+ }
@@ -0,0 +1,67 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ pygments.lexers.rnc
4
+ ~~~~~~~~~~~~~~~~~~~
5
+
6
+ Lexer for Relax-NG Compact syntax
7
+
8
+ :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
9
+ :license: BSD, see LICENSE for details.
10
+ """
11
+
12
+ from pygments.lexer import RegexLexer
13
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
14
+ Punctuation
15
+
16
+ __all__ = ['RNCCompactLexer']
17
+
18
+
19
+ class RNCCompactLexer(RegexLexer):
20
+ """
21
+ For `RelaxNG-compact <http://relaxng.org>`_ syntax.
22
+
23
+ .. versionadded:: 2.2
24
+ """
25
+
26
+ name = 'Relax-NG Compact'
27
+ aliases = ['rnc', 'rng-compact']
28
+ filenames = ['*.rnc']
29
+
30
+ tokens = {
31
+ 'root': [
32
+ (r'namespace\b', Keyword.Namespace),
33
+ (r'(?:default|datatypes)\b', Keyword.Declaration),
34
+ (r'##.*$', Comment.Preproc),
35
+ (r'#.*$', Comment.Single),
36
+ (r'"[^"]*"', String.Double),
37
+ # TODO single quoted strings and escape sequences outside of
38
+ # double-quoted strings
39
+ (r'(?:element|attribute|mixed)\b', Keyword.Declaration, 'variable'),
40
+ (r'(text\b|xsd:[^ ]+)', Keyword.Type, 'maybe_xsdattributes'),
41
+ (r'[,?&*=|~]|>>', Operator),
42
+ (r'[(){}]', Punctuation),
43
+ (r'.', Text),
44
+ ],
45
+
46
+ # a variable has been declared using `element` or `attribute`
47
+ 'variable': [
48
+ (r'[^{]+', Name.Variable),
49
+ (r'\{', Punctuation, '#pop'),
50
+ ],
51
+
52
+ # after an xsd:<datatype> declaration there may be attributes
53
+ 'maybe_xsdattributes': [
54
+ (r'\{', Punctuation, 'xsdattributes'),
55
+ (r'\}', Punctuation, '#pop'),
56
+ (r'.', Text),
57
+ ],
58
+
59
+ # attributes take the form { key1 = value1 key2 = value2 ... }
60
+ 'xsdattributes': [
61
+ (r'[^ =}]', Name.Attribute),
62
+ (r'=', Operator),
63
+ (r'"[^"]*"', String.Double),
64
+ (r'\}', Punctuation, '#pop'),
65
+ (r'.', Text),
66
+ ],
67
+ }
@@ -0,0 +1,82 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ pygments.lexers.roboconf
4
+ ~~~~~~~~~~~~~~~~~~~~~~~~
5
+
6
+ Lexers for Roboconf DSL.
7
+
8
+ :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
9
+ :license: BSD, see LICENSE for details.
10
+ """
11
+
12
+ from pygments.lexer import RegexLexer, words, re
13
+ from pygments.token import Text, Operator, Keyword, Name, Comment
14
+
15
+ __all__ = ['RoboconfGraphLexer', 'RoboconfInstancesLexer']
16
+
17
+
18
+ class RoboconfGraphLexer(RegexLexer):
19
+ """
20
+ Lexer for `Roboconf <http://roboconf.net/en/roboconf.html>`_ graph files.
21
+
22
+ .. versionadded:: 2.1
23
+ """
24
+ name = 'Roboconf Graph'
25
+ aliases = ['roboconf-graph']
26
+ filenames = ['*.graph']
27
+
28
+ flags = re.IGNORECASE | re.MULTILINE
29
+ tokens = {
30
+ 'root': [
31
+ # Skip white spaces
32
+ (r'\s+', Text),
33
+
34
+ # There is one operator
35
+ (r'=', Operator),
36
+
37
+ # Keywords
38
+ (words(('facet', 'import'), suffix=r'\s*\b', prefix=r'\b'), Keyword),
39
+ (words((
40
+ 'installer', 'extends', 'exports', 'imports', 'facets',
41
+ 'children'), suffix=r'\s*:?', prefix=r'\b'), Name),
42
+
43
+ # Comments
44
+ (r'#.*\n', Comment),
45
+
46
+ # Default
47
+ (r'[^#]', Text),
48
+ (r'.*\n', Text)
49
+ ]
50
+ }
51
+
52
+
53
+ class RoboconfInstancesLexer(RegexLexer):
54
+ """
55
+ Lexer for `Roboconf <http://roboconf.net/en/roboconf.html>`_ instances files.
56
+
57
+ .. versionadded:: 2.1
58
+ """
59
+ name = 'Roboconf Instances'
60
+ aliases = ['roboconf-instances']
61
+ filenames = ['*.instances']
62
+
63
+ flags = re.IGNORECASE | re.MULTILINE
64
+ tokens = {
65
+ 'root': [
66
+
67
+ # Skip white spaces
68
+ (r'\s+', Text),
69
+
70
+ # Keywords
71
+ (words(('instance of', 'import'), suffix=r'\s*\b', prefix=r'\b'), Keyword),
72
+ (words(('name', 'count'), suffix=r's*:?', prefix=r'\b'), Name),
73
+ (r'\s*[\w.-]+\s*:', Name),
74
+
75
+ # Comments
76
+ (r'#.*\n', Comment),
77
+
78
+ # Default
79
+ (r'[^#]', Text),
80
+ (r'.*\n', Text)
81
+ ]
82
+ }
@@ -0,0 +1,552 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ pygments.lexers.robotframework
4
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
+
6
+ Lexer for Robot Framework.
7
+
8
+ :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
9
+ :license: BSD, see LICENSE for details.
10
+ """
11
+
12
+ # Copyright 2012 Nokia Siemens Networks Oyj
13
+ #
14
+ # Licensed under the Apache License, Version 2.0 (the "License");
15
+ # you may not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing, software
21
+ # distributed under the License is distributed on an "AS IS" BASIS,
22
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
+ # See the License for the specific language governing permissions and
24
+ # limitations under the License.
25
+
26
+ import re
27
+
28
+ from pygments.lexer import Lexer
29
+ from pygments.token import Token
30
+
31
+ __all__ = ['RobotFrameworkLexer']
32
+
33
+
34
+ HEADING = Token.Generic.Heading
35
+ SETTING = Token.Keyword.Namespace
36
+ IMPORT = Token.Name.Namespace
37
+ TC_KW_NAME = Token.Generic.Subheading
38
+ KEYWORD = Token.Name.Function
39
+ ARGUMENT = Token.String
40
+ VARIABLE = Token.Name.Variable
41
+ COMMENT = Token.Comment
42
+ SEPARATOR = Token.Punctuation
43
+ SYNTAX = Token.Punctuation
44
+ GHERKIN = Token.Generic.Emph
45
+ ERROR = Token.Error
46
+
47
+
48
+ def normalize(string, remove=''):
49
+ string = string.lower()
50
+ for char in remove + ' ':
51
+ if char in string:
52
+ string = string.replace(char, '')
53
+ return string
54
+
55
+
56
+ class RobotFrameworkLexer(Lexer):
57
+ """
58
+ For `Robot Framework <http://robotframework.org>`_ test data.
59
+
60
+ Supports both space and pipe separated plain text formats.
61
+
62
+ .. versionadded:: 1.6
63
+ """
64
+ name = 'RobotFramework'
65
+ aliases = ['robotframework']
66
+ filenames = ['*.robot']
67
+ mimetypes = ['text/x-robotframework']
68
+
69
+ def __init__(self, **options):
70
+ options['tabsize'] = 2
71
+ options['encoding'] = 'UTF-8'
72
+ Lexer.__init__(self, **options)
73
+
74
+ def get_tokens_unprocessed(self, text):
75
+ row_tokenizer = RowTokenizer()
76
+ var_tokenizer = VariableTokenizer()
77
+ index = 0
78
+ for row in text.splitlines():
79
+ for value, token in row_tokenizer.tokenize(row):
80
+ for value, token in var_tokenizer.tokenize(value, token):
81
+ if value:
82
+ yield index, token, str(value)
83
+ index += len(value)
84
+
85
+
86
+ class VariableTokenizer:
87
+
88
+ def tokenize(self, string, token):
89
+ var = VariableSplitter(string, identifiers='$@%&')
90
+ if var.start < 0 or token in (COMMENT, ERROR):
91
+ yield string, token
92
+ return
93
+ for value, token in self._tokenize(var, string, token):
94
+ if value:
95
+ yield value, token
96
+
97
+ def _tokenize(self, var, string, orig_token):
98
+ before = string[:var.start]
99
+ yield before, orig_token
100
+ yield var.identifier + '{', SYNTAX
101
+ yield from self.tokenize(var.base, VARIABLE)
102
+ yield '}', SYNTAX
103
+ if var.index:
104
+ yield '[', SYNTAX
105
+ yield from self.tokenize(var.index, VARIABLE)
106
+ yield ']', SYNTAX
107
+ yield from self.tokenize(string[var.end:], orig_token)
108
+
109
+
110
+ class RowTokenizer:
111
+
112
+ def __init__(self):
113
+ self._table = UnknownTable()
114
+ self._splitter = RowSplitter()
115
+ testcases = TestCaseTable()
116
+ settings = SettingTable(testcases.set_default_template)
117
+ variables = VariableTable()
118
+ keywords = KeywordTable()
119
+ self._tables = {'settings': settings, 'setting': settings,
120
+ 'metadata': settings,
121
+ 'variables': variables, 'variable': variables,
122
+ 'testcases': testcases, 'testcase': testcases,
123
+ 'tasks': testcases, 'task': testcases,
124
+ 'keywords': keywords, 'keyword': keywords,
125
+ 'userkeywords': keywords, 'userkeyword': keywords}
126
+
127
+ def tokenize(self, row):
128
+ commented = False
129
+ heading = False
130
+ for index, value in enumerate(self._splitter.split(row)):
131
+ # First value, and every second after that, is a separator.
132
+ index, separator = divmod(index-1, 2)
133
+ if value.startswith('#'):
134
+ commented = True
135
+ elif index == 0 and value.startswith('*'):
136
+ self._table = self._start_table(value)
137
+ heading = True
138
+ yield from self._tokenize(value, index, commented,
139
+ separator, heading)
140
+ self._table.end_row()
141
+
142
+ def _start_table(self, header):
143
+ name = normalize(header, remove='*')
144
+ return self._tables.get(name, UnknownTable())
145
+
146
+ def _tokenize(self, value, index, commented, separator, heading):
147
+ if commented:
148
+ yield value, COMMENT
149
+ elif separator:
150
+ yield value, SEPARATOR
151
+ elif heading:
152
+ yield value, HEADING
153
+ else:
154
+ yield from self._table.tokenize(value, index)
155
+
156
+
157
+ class RowSplitter:
158
+ _space_splitter = re.compile('( {2,})')
159
+ _pipe_splitter = re.compile(r'((?:^| +)\|(?: +|$))')
160
+
161
+ def split(self, row):
162
+ splitter = (row.startswith('| ') and self._split_from_pipes
163
+ or self._split_from_spaces)
164
+ yield from splitter(row)
165
+ yield '\n'
166
+
167
+ def _split_from_spaces(self, row):
168
+ yield '' # Start with (pseudo)separator similarly as with pipes
169
+ yield from self._space_splitter.split(row)
170
+
171
+ def _split_from_pipes(self, row):
172
+ _, separator, rest = self._pipe_splitter.split(row, 1)
173
+ yield separator
174
+ while self._pipe_splitter.search(rest):
175
+ cell, separator, rest = self._pipe_splitter.split(rest, 1)
176
+ yield cell
177
+ yield separator
178
+ yield rest
179
+
180
+
181
+ class Tokenizer:
182
+ _tokens = None
183
+
184
+ def __init__(self):
185
+ self._index = 0
186
+
187
+ def tokenize(self, value):
188
+ values_and_tokens = self._tokenize(value, self._index)
189
+ self._index += 1
190
+ if isinstance(values_and_tokens, type(Token)):
191
+ values_and_tokens = [(value, values_and_tokens)]
192
+ return values_and_tokens
193
+
194
+ def _tokenize(self, value, index):
195
+ index = min(index, len(self._tokens) - 1)
196
+ return self._tokens[index]
197
+
198
+ def _is_assign(self, value):
199
+ if value.endswith('='):
200
+ value = value[:-1].strip()
201
+ var = VariableSplitter(value, identifiers='$@&')
202
+ return var.start == 0 and var.end == len(value)
203
+
204
+
205
+ class Comment(Tokenizer):
206
+ _tokens = (COMMENT,)
207
+
208
+
209
+ class Setting(Tokenizer):
210
+ _tokens = (SETTING, ARGUMENT)
211
+ _keyword_settings = ('suitesetup', 'suiteprecondition', 'suiteteardown',
212
+ 'suitepostcondition', 'testsetup', 'tasksetup', 'testprecondition',
213
+ 'testteardown','taskteardown', 'testpostcondition', 'testtemplate', 'tasktemplate')
214
+ _import_settings = ('library', 'resource', 'variables')
215
+ _other_settings = ('documentation', 'metadata', 'forcetags', 'defaulttags',
216
+ 'testtimeout','tasktimeout')
217
+ _custom_tokenizer = None
218
+
219
+ def __init__(self, template_setter=None):
220
+ Tokenizer.__init__(self)
221
+ self._template_setter = template_setter
222
+
223
+ def _tokenize(self, value, index):
224
+ if index == 1 and self._template_setter:
225
+ self._template_setter(value)
226
+ if index == 0:
227
+ normalized = normalize(value)
228
+ if normalized in self._keyword_settings:
229
+ self._custom_tokenizer = KeywordCall(support_assign=False)
230
+ elif normalized in self._import_settings:
231
+ self._custom_tokenizer = ImportSetting()
232
+ elif normalized not in self._other_settings:
233
+ return ERROR
234
+ elif self._custom_tokenizer:
235
+ return self._custom_tokenizer.tokenize(value)
236
+ return Tokenizer._tokenize(self, value, index)
237
+
238
+
239
+ class ImportSetting(Tokenizer):
240
+ _tokens = (IMPORT, ARGUMENT)
241
+
242
+
243
+ class TestCaseSetting(Setting):
244
+ _keyword_settings = ('setup', 'precondition', 'teardown', 'postcondition',
245
+ 'template')
246
+ _import_settings = ()
247
+ _other_settings = ('documentation', 'tags', 'timeout')
248
+
249
+ def _tokenize(self, value, index):
250
+ if index == 0:
251
+ type = Setting._tokenize(self, value[1:-1], index)
252
+ return [('[', SYNTAX), (value[1:-1], type), (']', SYNTAX)]
253
+ return Setting._tokenize(self, value, index)
254
+
255
+
256
+ class KeywordSetting(TestCaseSetting):
257
+ _keyword_settings = ('teardown',)
258
+ _other_settings = ('documentation', 'arguments', 'return', 'timeout', 'tags')
259
+
260
+
261
+ class Variable(Tokenizer):
262
+ _tokens = (SYNTAX, ARGUMENT)
263
+
264
+ def _tokenize(self, value, index):
265
+ if index == 0 and not self._is_assign(value):
266
+ return ERROR
267
+ return Tokenizer._tokenize(self, value, index)
268
+
269
+
270
+ class KeywordCall(Tokenizer):
271
+ _tokens = (KEYWORD, ARGUMENT)
272
+
273
+ def __init__(self, support_assign=True):
274
+ Tokenizer.__init__(self)
275
+ self._keyword_found = not support_assign
276
+ self._assigns = 0
277
+
278
+ def _tokenize(self, value, index):
279
+ if not self._keyword_found and self._is_assign(value):
280
+ self._assigns += 1
281
+ return SYNTAX # VariableTokenizer tokenizes this later.
282
+ if self._keyword_found:
283
+ return Tokenizer._tokenize(self, value, index - self._assigns)
284
+ self._keyword_found = True
285
+ return GherkinTokenizer().tokenize(value, KEYWORD)
286
+
287
+
288
+ class GherkinTokenizer:
289
+ _gherkin_prefix = re.compile('^(Given|When|Then|And) ', re.IGNORECASE)
290
+
291
+ def tokenize(self, value, token):
292
+ match = self._gherkin_prefix.match(value)
293
+ if not match:
294
+ return [(value, token)]
295
+ end = match.end()
296
+ return [(value[:end], GHERKIN), (value[end:], token)]
297
+
298
+
299
+ class TemplatedKeywordCall(Tokenizer):
300
+ _tokens = (ARGUMENT,)
301
+
302
+
303
+ class ForLoop(Tokenizer):
304
+
305
+ def __init__(self):
306
+ Tokenizer.__init__(self)
307
+ self._in_arguments = False
308
+
309
+ def _tokenize(self, value, index):
310
+ token = self._in_arguments and ARGUMENT or SYNTAX
311
+ if value.upper() in ('IN', 'IN RANGE'):
312
+ self._in_arguments = True
313
+ return token
314
+
315
+
316
+ class _Table:
317
+ _tokenizer_class = None
318
+
319
+ def __init__(self, prev_tokenizer=None):
320
+ self._tokenizer = self._tokenizer_class()
321
+ self._prev_tokenizer = prev_tokenizer
322
+ self._prev_values_on_row = []
323
+
324
+ def tokenize(self, value, index):
325
+ if self._continues(value, index):
326
+ self._tokenizer = self._prev_tokenizer
327
+ yield value, SYNTAX
328
+ else:
329
+ yield from self._tokenize(value, index)
330
+ self._prev_values_on_row.append(value)
331
+
332
+ def _continues(self, value, index):
333
+ return value == '...' and all(self._is_empty(t)
334
+ for t in self._prev_values_on_row)
335
+
336
+ def _is_empty(self, value):
337
+ return value in ('', '\\')
338
+
339
+ def _tokenize(self, value, index):
340
+ return self._tokenizer.tokenize(value)
341
+
342
+ def end_row(self):
343
+ self.__init__(prev_tokenizer=self._tokenizer)
344
+
345
+
346
+ class UnknownTable(_Table):
347
+ _tokenizer_class = Comment
348
+
349
+ def _continues(self, value, index):
350
+ return False
351
+
352
+
353
+ class VariableTable(_Table):
354
+ _tokenizer_class = Variable
355
+
356
+
357
+ class SettingTable(_Table):
358
+ _tokenizer_class = Setting
359
+
360
+ def __init__(self, template_setter, prev_tokenizer=None):
361
+ _Table.__init__(self, prev_tokenizer)
362
+ self._template_setter = template_setter
363
+
364
+ def _tokenize(self, value, index):
365
+ if index == 0 and normalize(value) == 'testtemplate':
366
+ self._tokenizer = Setting(self._template_setter)
367
+ return _Table._tokenize(self, value, index)
368
+
369
+ def end_row(self):
370
+ self.__init__(self._template_setter, prev_tokenizer=self._tokenizer)
371
+
372
+
373
+ class TestCaseTable(_Table):
374
+ _setting_class = TestCaseSetting
375
+ _test_template = None
376
+ _default_template = None
377
+
378
+ @property
379
+ def _tokenizer_class(self):
380
+ if self._test_template or (self._default_template and
381
+ self._test_template is not False):
382
+ return TemplatedKeywordCall
383
+ return KeywordCall
384
+
385
+ def _continues(self, value, index):
386
+ return index > 0 and _Table._continues(self, value, index)
387
+
388
+ def _tokenize(self, value, index):
389
+ if index == 0:
390
+ if value:
391
+ self._test_template = None
392
+ return GherkinTokenizer().tokenize(value, TC_KW_NAME)
393
+ if index == 1 and self._is_setting(value):
394
+ if self._is_template(value):
395
+ self._test_template = False
396
+ self._tokenizer = self._setting_class(self.set_test_template)
397
+ else:
398
+ self._tokenizer = self._setting_class()
399
+ if index == 1 and self._is_for_loop(value):
400
+ self._tokenizer = ForLoop()
401
+ if index == 1 and self._is_empty(value):
402
+ return [(value, SYNTAX)]
403
+ return _Table._tokenize(self, value, index)
404
+
405
+ def _is_setting(self, value):
406
+ return value.startswith('[') and value.endswith(']')
407
+
408
+ def _is_template(self, value):
409
+ return normalize(value) == '[template]'
410
+
411
+ def _is_for_loop(self, value):
412
+ return value.startswith(':') and normalize(value, remove=':') == 'for'
413
+
414
+ def set_test_template(self, template):
415
+ self._test_template = self._is_template_set(template)
416
+
417
+ def set_default_template(self, template):
418
+ self._default_template = self._is_template_set(template)
419
+
420
+ def _is_template_set(self, template):
421
+ return normalize(template) not in ('', '\\', 'none', '${empty}')
422
+
423
+
424
+ class KeywordTable(TestCaseTable):
425
+ _tokenizer_class = KeywordCall
426
+ _setting_class = KeywordSetting
427
+
428
+ def _is_template(self, value):
429
+ return False
430
+
431
+
432
+ # Following code copied directly from Robot Framework 2.7.5.
433
+
434
+ class VariableSplitter:
435
+
436
+ def __init__(self, string, identifiers):
437
+ self.identifier = None
438
+ self.base = None
439
+ self.index = None
440
+ self.start = -1
441
+ self.end = -1
442
+ self._identifiers = identifiers
443
+ self._may_have_internal_variables = False
444
+ try:
445
+ self._split(string)
446
+ except ValueError:
447
+ pass
448
+ else:
449
+ self._finalize()
450
+
451
+ def get_replaced_base(self, variables):
452
+ if self._may_have_internal_variables:
453
+ return variables.replace_string(self.base)
454
+ return self.base
455
+
456
+ def _finalize(self):
457
+ self.identifier = self._variable_chars[0]
458
+ self.base = ''.join(self._variable_chars[2:-1])
459
+ self.end = self.start + len(self._variable_chars)
460
+ if self._has_list_or_dict_variable_index():
461
+ self.index = ''.join(self._list_and_dict_variable_index_chars[1:-1])
462
+ self.end += len(self._list_and_dict_variable_index_chars)
463
+
464
+ def _has_list_or_dict_variable_index(self):
465
+ return self._list_and_dict_variable_index_chars\
466
+ and self._list_and_dict_variable_index_chars[-1] == ']'
467
+
468
+ def _split(self, string):
469
+ start_index, max_index = self._find_variable(string)
470
+ self.start = start_index
471
+ self._open_curly = 1
472
+ self._state = self._variable_state
473
+ self._variable_chars = [string[start_index], '{']
474
+ self._list_and_dict_variable_index_chars = []
475
+ self._string = string
476
+ start_index += 2
477
+ for index, char in enumerate(string[start_index:]):
478
+ index += start_index # Giving start to enumerate only in Py 2.6+
479
+ try:
480
+ self._state(char, index)
481
+ except StopIteration:
482
+ return
483
+ if index == max_index and not self._scanning_list_variable_index():
484
+ return
485
+
486
+ def _scanning_list_variable_index(self):
487
+ return self._state in [self._waiting_list_variable_index_state,
488
+ self._list_variable_index_state]
489
+
490
+ def _find_variable(self, string):
491
+ max_end_index = string.rfind('}')
492
+ if max_end_index == -1:
493
+ raise ValueError('No variable end found')
494
+ if self._is_escaped(string, max_end_index):
495
+ return self._find_variable(string[:max_end_index])
496
+ start_index = self._find_start_index(string, 1, max_end_index)
497
+ if start_index == -1:
498
+ raise ValueError('No variable start found')
499
+ return start_index, max_end_index
500
+
501
+ def _find_start_index(self, string, start, end):
502
+ index = string.find('{', start, end) - 1
503
+ if index < 0:
504
+ return -1
505
+ if self._start_index_is_ok(string, index):
506
+ return index
507
+ return self._find_start_index(string, index+2, end)
508
+
509
+ def _start_index_is_ok(self, string, index):
510
+ return string[index] in self._identifiers\
511
+ and not self._is_escaped(string, index)
512
+
513
+ def _is_escaped(self, string, index):
514
+ escaped = False
515
+ while index > 0 and string[index-1] == '\\':
516
+ index -= 1
517
+ escaped = not escaped
518
+ return escaped
519
+
520
+ def _variable_state(self, char, index):
521
+ self._variable_chars.append(char)
522
+ if char == '}' and not self._is_escaped(self._string, index):
523
+ self._open_curly -= 1
524
+ if self._open_curly == 0:
525
+ if not self._is_list_or_dict_variable():
526
+ raise StopIteration
527
+ self._state = self._waiting_list_variable_index_state
528
+ elif char in self._identifiers:
529
+ self._state = self._internal_variable_start_state
530
+
531
+ def _is_list_or_dict_variable(self):
532
+ return self._variable_chars[0] in ('@','&')
533
+
534
+ def _internal_variable_start_state(self, char, index):
535
+ self._state = self._variable_state
536
+ if char == '{':
537
+ self._variable_chars.append(char)
538
+ self._open_curly += 1
539
+ self._may_have_internal_variables = True
540
+ else:
541
+ self._variable_state(char, index)
542
+
543
+ def _waiting_list_variable_index_state(self, char, index):
544
+ if char != '[':
545
+ raise StopIteration
546
+ self._list_and_dict_variable_index_chars.append(char)
547
+ self._state = self._list_variable_index_state
548
+
549
+ def _list_variable_index_state(self, char, index):
550
+ self._list_and_dict_variable_index_chars.append(char)
551
+ if char == ']':
552
+ raise StopIteration