pygments.rb-jruby 0.5.4

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 (473) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/CHANGELOG.md +71 -0
  4. data/Gemfile +2 -0
  5. data/LICENSE +17 -0
  6. data/README.md +118 -0
  7. data/Rakefile +66 -0
  8. data/bench.rb +22 -0
  9. data/cache-lexers.rb +8 -0
  10. data/lexers +0 -0
  11. data/lib/pygments.rb +8 -0
  12. data/lib/pygments/lexer.rb +148 -0
  13. data/lib/pygments/mentos.py +351 -0
  14. data/lib/pygments/popen.rb +404 -0
  15. data/lib/pygments/version.rb +3 -0
  16. data/pygments.rb.gemspec +24 -0
  17. data/test/test_data.c +2581 -0
  18. data/test/test_data.py +514 -0
  19. data/test/test_data_generated +2582 -0
  20. data/test/test_pygments.rb +287 -0
  21. data/vendor/custom_lexers/github.py +565 -0
  22. data/vendor/pygments-main/AUTHORS +153 -0
  23. data/vendor/pygments-main/CHANGES +889 -0
  24. data/vendor/pygments-main/LICENSE +25 -0
  25. data/vendor/pygments-main/MANIFEST.in +6 -0
  26. data/vendor/pygments-main/Makefile +59 -0
  27. data/vendor/pygments-main/REVISION +1 -0
  28. data/vendor/pygments-main/TODO +15 -0
  29. data/vendor/pygments-main/docs/generate.py +472 -0
  30. data/vendor/pygments-main/docs/pygmentize.1 +94 -0
  31. data/vendor/pygments-main/docs/src/api.txt +270 -0
  32. data/vendor/pygments-main/docs/src/authors.txt +5 -0
  33. data/vendor/pygments-main/docs/src/changelog.txt +5 -0
  34. data/vendor/pygments-main/docs/src/cmdline.txt +147 -0
  35. data/vendor/pygments-main/docs/src/filterdevelopment.txt +70 -0
  36. data/vendor/pygments-main/docs/src/filters.txt +42 -0
  37. data/vendor/pygments-main/docs/src/formatterdevelopment.txt +169 -0
  38. data/vendor/pygments-main/docs/src/formatters.txt +48 -0
  39. data/vendor/pygments-main/docs/src/index.txt +69 -0
  40. data/vendor/pygments-main/docs/src/installation.txt +71 -0
  41. data/vendor/pygments-main/docs/src/integrate.txt +48 -0
  42. data/vendor/pygments-main/docs/src/java.txt +70 -0
  43. data/vendor/pygments-main/docs/src/lexerdevelopment.txt +603 -0
  44. data/vendor/pygments-main/docs/src/lexers.txt +67 -0
  45. data/vendor/pygments-main/docs/src/moinmoin.txt +39 -0
  46. data/vendor/pygments-main/docs/src/plugins.txt +93 -0
  47. data/vendor/pygments-main/docs/src/quickstart.txt +202 -0
  48. data/vendor/pygments-main/docs/src/rstdirective.txt +22 -0
  49. data/vendor/pygments-main/docs/src/styles.txt +143 -0
  50. data/vendor/pygments-main/docs/src/tokens.txt +349 -0
  51. data/vendor/pygments-main/docs/src/unicode.txt +49 -0
  52. data/vendor/pygments-main/external/autopygmentize +64 -0
  53. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +144 -0
  54. data/vendor/pygments-main/external/markdown-processor.py +67 -0
  55. data/vendor/pygments-main/external/moin-parser.py +112 -0
  56. data/vendor/pygments-main/external/pygments.bashcomp +38 -0
  57. data/vendor/pygments-main/external/rst-directive-old.py +77 -0
  58. data/vendor/pygments-main/external/rst-directive.py +83 -0
  59. data/vendor/pygments-main/ez_setup.py +276 -0
  60. data/vendor/pygments-main/pygmentize +7 -0
  61. data/vendor/pygments-main/pygments/__init__.py +91 -0
  62. data/vendor/pygments-main/pygments/cmdline.py +441 -0
  63. data/vendor/pygments-main/pygments/console.py +74 -0
  64. data/vendor/pygments-main/pygments/filter.py +74 -0
  65. data/vendor/pygments-main/pygments/filters/__init__.py +356 -0
  66. data/vendor/pygments-main/pygments/formatter.py +95 -0
  67. data/vendor/pygments-main/pygments/formatters/__init__.py +68 -0
  68. data/vendor/pygments-main/pygments/formatters/_mapping.py +92 -0
  69. data/vendor/pygments-main/pygments/formatters/bbcode.py +109 -0
  70. data/vendor/pygments-main/pygments/formatters/html.py +821 -0
  71. data/vendor/pygments-main/pygments/formatters/img.py +553 -0
  72. data/vendor/pygments-main/pygments/formatters/latex.py +378 -0
  73. data/vendor/pygments-main/pygments/formatters/other.py +115 -0
  74. data/vendor/pygments-main/pygments/formatters/rtf.py +136 -0
  75. data/vendor/pygments-main/pygments/formatters/svg.py +154 -0
  76. data/vendor/pygments-main/pygments/formatters/terminal.py +112 -0
  77. data/vendor/pygments-main/pygments/formatters/terminal256.py +222 -0
  78. data/vendor/pygments-main/pygments/lexer.py +765 -0
  79. data/vendor/pygments-main/pygments/lexers/__init__.py +240 -0
  80. data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1645 -0
  81. data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +232 -0
  82. data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +5172 -0
  83. data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +249 -0
  84. data/vendor/pygments-main/pygments/lexers/_mapping.py +354 -0
  85. data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +562 -0
  86. data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +3787 -0
  87. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +233 -0
  88. data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +557 -0
  89. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +40 -0
  90. data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +1072 -0
  91. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +360 -0
  92. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +13 -0
  93. data/vendor/pygments-main/pygments/lexers/agile.py +2290 -0
  94. data/vendor/pygments-main/pygments/lexers/asm.py +398 -0
  95. data/vendor/pygments-main/pygments/lexers/compiled.py +3723 -0
  96. data/vendor/pygments-main/pygments/lexers/dalvik.py +104 -0
  97. data/vendor/pygments-main/pygments/lexers/dotnet.py +671 -0
  98. data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
  99. data/vendor/pygments-main/pygments/lexers/functional.py +2731 -0
  100. data/vendor/pygments-main/pygments/lexers/github.py +565 -0
  101. data/vendor/pygments-main/pygments/lexers/hdl.py +356 -0
  102. data/vendor/pygments-main/pygments/lexers/jvm.py +1112 -0
  103. data/vendor/pygments-main/pygments/lexers/math.py +1918 -0
  104. data/vendor/pygments-main/pygments/lexers/other.py +3778 -0
  105. data/vendor/pygments-main/pygments/lexers/parsers.py +778 -0
  106. data/vendor/pygments-main/pygments/lexers/shell.py +424 -0
  107. data/vendor/pygments-main/pygments/lexers/special.py +100 -0
  108. data/vendor/pygments-main/pygments/lexers/sql.py +559 -0
  109. data/vendor/pygments-main/pygments/lexers/templates.py +1742 -0
  110. data/vendor/pygments-main/pygments/lexers/text.py +1893 -0
  111. data/vendor/pygments-main/pygments/lexers/web.py +4045 -0
  112. data/vendor/pygments-main/pygments/modeline.py +40 -0
  113. data/vendor/pygments-main/pygments/plugin.py +74 -0
  114. data/vendor/pygments-main/pygments/scanner.py +104 -0
  115. data/vendor/pygments-main/pygments/style.py +117 -0
  116. data/vendor/pygments-main/pygments/styles/__init__.py +70 -0
  117. data/vendor/pygments-main/pygments/styles/autumn.py +65 -0
  118. data/vendor/pygments-main/pygments/styles/borland.py +51 -0
  119. data/vendor/pygments-main/pygments/styles/bw.py +49 -0
  120. data/vendor/pygments-main/pygments/styles/colorful.py +81 -0
  121. data/vendor/pygments-main/pygments/styles/default.py +73 -0
  122. data/vendor/pygments-main/pygments/styles/emacs.py +72 -0
  123. data/vendor/pygments-main/pygments/styles/friendly.py +72 -0
  124. data/vendor/pygments-main/pygments/styles/fruity.py +42 -0
  125. data/vendor/pygments-main/pygments/styles/manni.py +75 -0
  126. data/vendor/pygments-main/pygments/styles/monokai.py +106 -0
  127. data/vendor/pygments-main/pygments/styles/murphy.py +80 -0
  128. data/vendor/pygments-main/pygments/styles/native.py +65 -0
  129. data/vendor/pygments-main/pygments/styles/pastie.py +75 -0
  130. data/vendor/pygments-main/pygments/styles/perldoc.py +69 -0
  131. data/vendor/pygments-main/pygments/styles/rrt.py +33 -0
  132. data/vendor/pygments-main/pygments/styles/tango.py +141 -0
  133. data/vendor/pygments-main/pygments/styles/trac.py +63 -0
  134. data/vendor/pygments-main/pygments/styles/vim.py +63 -0
  135. data/vendor/pygments-main/pygments/styles/vs.py +38 -0
  136. data/vendor/pygments-main/pygments/token.py +195 -0
  137. data/vendor/pygments-main/pygments/unistring.py +140 -0
  138. data/vendor/pygments-main/pygments/util.py +277 -0
  139. data/vendor/pygments-main/scripts/check_sources.py +242 -0
  140. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +32 -0
  141. data/vendor/pygments-main/scripts/epydoc.css +280 -0
  142. data/vendor/pygments-main/scripts/find_codetags.py +205 -0
  143. data/vendor/pygments-main/scripts/find_error.py +170 -0
  144. data/vendor/pygments-main/scripts/get_vimkw.py +43 -0
  145. data/vendor/pygments-main/scripts/pylintrc +301 -0
  146. data/vendor/pygments-main/scripts/reindent.py +291 -0
  147. data/vendor/pygments-main/scripts/vim2pygments.py +933 -0
  148. data/vendor/pygments-main/setup.cfg +7 -0
  149. data/vendor/pygments-main/setup.py +90 -0
  150. data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +37 -0
  151. data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +869 -0
  152. data/vendor/pygments-main/tests/dtds/HTML4.dcl +88 -0
  153. data/vendor/pygments-main/tests/dtds/HTML4.dtd +1092 -0
  154. data/vendor/pygments-main/tests/dtds/HTML4.soc +9 -0
  155. data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +195 -0
  156. data/vendor/pygments-main/tests/dtds/HTMLspec.ent +77 -0
  157. data/vendor/pygments-main/tests/dtds/HTMLsym.ent +241 -0
  158. data/vendor/pygments-main/tests/examplefiles/ANTLRv3.g +608 -0
  159. data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +209 -0
  160. data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +102 -0
  161. data/vendor/pygments-main/tests/examplefiles/BOM.js +1 -0
  162. data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +611 -0
  163. data/vendor/pygments-main/tests/examplefiles/Config.in.cache +1973 -0
  164. data/vendor/pygments-main/tests/examplefiles/Constants.mo +158 -0
  165. data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +411 -0
  166. data/vendor/pygments-main/tests/examplefiles/Deflate.fs +578 -0
  167. data/vendor/pygments-main/tests/examplefiles/Errors.scala +18 -0
  168. data/vendor/pygments-main/tests/examplefiles/File.hy +174 -0
  169. data/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +66 -0
  170. data/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +104 -0
  171. data/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +671 -0
  172. data/vendor/pygments-main/tests/examplefiles/Intro.java +1660 -0
  173. data/vendor/pygments-main/tests/examplefiles/Makefile +1131 -0
  174. data/vendor/pygments-main/tests/examplefiles/Object.st +4394 -0
  175. data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +584 -0
  176. data/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +23 -0
  177. data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +378 -0
  178. data/vendor/pygments-main/tests/examplefiles/Sorting.mod +470 -0
  179. data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +382 -0
  180. data/vendor/pygments-main/tests/examplefiles/addressbook.proto +30 -0
  181. data/vendor/pygments-main/tests/examplefiles/antlr_throws +1 -0
  182. data/vendor/pygments-main/tests/examplefiles/apache2.conf +393 -0
  183. data/vendor/pygments-main/tests/examplefiles/as3_test.as +143 -0
  184. data/vendor/pygments-main/tests/examplefiles/as3_test2.as +46 -0
  185. data/vendor/pygments-main/tests/examplefiles/as3_test3.as +3 -0
  186. data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +27 -0
  187. data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +25 -0
  188. data/vendor/pygments-main/tests/examplefiles/badcase.java +2 -0
  189. data/vendor/pygments-main/tests/examplefiles/batchfile.bat +49 -0
  190. data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +308 -0
  191. data/vendor/pygments-main/tests/examplefiles/boot-9.scm +1557 -0
  192. data/vendor/pygments-main/tests/examplefiles/ca65_example +284 -0
  193. data/vendor/pygments-main/tests/examplefiles/cbmbas_example +9 -0
  194. data/vendor/pygments-main/tests/examplefiles/cells.ps +515 -0
  195. data/vendor/pygments-main/tests/examplefiles/ceval.c +2604 -0
  196. data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +13 -0
  197. data/vendor/pygments-main/tests/examplefiles/classes.dylan +125 -0
  198. data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +10 -0
  199. data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +447 -0
  200. data/vendor/pygments-main/tests/examplefiles/database.pytb +20 -0
  201. data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +2461 -0
  202. data/vendor/pygments-main/tests/examplefiles/demo.ahk +181 -0
  203. data/vendor/pygments-main/tests/examplefiles/demo.cfm +38 -0
  204. data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +68 -0
  205. data/vendor/pygments-main/tests/examplefiles/dwarf.cw +17 -0
  206. data/vendor/pygments-main/tests/examplefiles/erl_session +10 -0
  207. data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +1 -0
  208. data/vendor/pygments-main/tests/examplefiles/evil_regex.js +48 -0
  209. data/vendor/pygments-main/tests/examplefiles/example.Rd +78 -0
  210. data/vendor/pygments-main/tests/examplefiles/example.bug +54 -0
  211. data/vendor/pygments-main/tests/examplefiles/example.c +2080 -0
  212. data/vendor/pygments-main/tests/examplefiles/example.ceylon +52 -0
  213. data/vendor/pygments-main/tests/examplefiles/example.clay +33 -0
  214. data/vendor/pygments-main/tests/examplefiles/example.cls +15 -0
  215. data/vendor/pygments-main/tests/examplefiles/example.cob +3556 -0
  216. data/vendor/pygments-main/tests/examplefiles/example.cpp +2363 -0
  217. data/vendor/pygments-main/tests/examplefiles/example.gs +106 -0
  218. data/vendor/pygments-main/tests/examplefiles/example.gst +7 -0
  219. data/vendor/pygments-main/tests/examplefiles/example.hx +142 -0
  220. data/vendor/pygments-main/tests/examplefiles/example.jag +48 -0
  221. data/vendor/pygments-main/tests/examplefiles/example.kt +47 -0
  222. data/vendor/pygments-main/tests/examplefiles/example.lagda +19 -0
  223. data/vendor/pygments-main/tests/examplefiles/example.lua +250 -0
  224. data/vendor/pygments-main/tests/examplefiles/example.monkey +152 -0
  225. data/vendor/pygments-main/tests/examplefiles/example.moo +26 -0
  226. data/vendor/pygments-main/tests/examplefiles/example.moon +629 -0
  227. data/vendor/pygments-main/tests/examplefiles/example.msc +43 -0
  228. data/vendor/pygments-main/tests/examplefiles/example.nim +1010 -0
  229. data/vendor/pygments-main/tests/examplefiles/example.ns2 +69 -0
  230. data/vendor/pygments-main/tests/examplefiles/example.p +34 -0
  231. data/vendor/pygments-main/tests/examplefiles/example.pas +2708 -0
  232. data/vendor/pygments-main/tests/examplefiles/example.prg +161 -0
  233. data/vendor/pygments-main/tests/examplefiles/example.rb +1852 -0
  234. data/vendor/pygments-main/tests/examplefiles/example.reg +19 -0
  235. data/vendor/pygments-main/tests/examplefiles/example.rexx +50 -0
  236. data/vendor/pygments-main/tests/examplefiles/example.rhtml +561 -0
  237. data/vendor/pygments-main/tests/examplefiles/example.rkt +95 -0
  238. data/vendor/pygments-main/tests/examplefiles/example.rpf +4 -0
  239. data/vendor/pygments-main/tests/examplefiles/example.sh-session +19 -0
  240. data/vendor/pygments-main/tests/examplefiles/example.shell-session +45 -0
  241. data/vendor/pygments-main/tests/examplefiles/example.sml +156 -0
  242. data/vendor/pygments-main/tests/examplefiles/example.snobol +15 -0
  243. data/vendor/pygments-main/tests/examplefiles/example.stan +108 -0
  244. data/vendor/pygments-main/tests/examplefiles/example.tea +34 -0
  245. data/vendor/pygments-main/tests/examplefiles/example.ts +28 -0
  246. data/vendor/pygments-main/tests/examplefiles/example.u +548 -0
  247. data/vendor/pygments-main/tests/examplefiles/example.weechatlog +9 -0
  248. data/vendor/pygments-main/tests/examplefiles/example.xhtml +376 -0
  249. data/vendor/pygments-main/tests/examplefiles/example.xtend +34 -0
  250. data/vendor/pygments-main/tests/examplefiles/example.yaml +302 -0
  251. data/vendor/pygments-main/tests/examplefiles/example2.aspx +29 -0
  252. data/vendor/pygments-main/tests/examplefiles/example2.msc +79 -0
  253. data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +363 -0
  254. data/vendor/pygments-main/tests/examplefiles/example_file.fy +128 -0
  255. data/vendor/pygments-main/tests/examplefiles/firefox.mak +586 -0
  256. data/vendor/pygments-main/tests/examplefiles/flipflop.sv +19 -0
  257. data/vendor/pygments-main/tests/examplefiles/foo.sce +6 -0
  258. data/vendor/pygments-main/tests/examplefiles/format.ml +1213 -0
  259. data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +77 -0
  260. data/vendor/pygments-main/tests/examplefiles/function.mu +1 -0
  261. data/vendor/pygments-main/tests/examplefiles/functional.rst +1472 -0
  262. data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +133 -0
  263. data/vendor/pygments-main/tests/examplefiles/genclass.clj +510 -0
  264. data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +193 -0
  265. data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +33 -0
  266. data/vendor/pygments-main/tests/examplefiles/glsl.frag +7 -0
  267. data/vendor/pygments-main/tests/examplefiles/glsl.vert +13 -0
  268. data/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +22 -0
  269. data/vendor/pygments-main/tests/examplefiles/hello.smali +40 -0
  270. data/vendor/pygments-main/tests/examplefiles/hello.sp +9 -0
  271. data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +1 -0
  272. data/vendor/pygments-main/tests/examplefiles/http_request_example +15 -0
  273. data/vendor/pygments-main/tests/examplefiles/http_response_example +29 -0
  274. data/vendor/pygments-main/tests/examplefiles/import.hs +4 -0
  275. data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +71 -0
  276. data/vendor/pygments-main/tests/examplefiles/intro.ik +24 -0
  277. data/vendor/pygments-main/tests/examplefiles/ints.php +10 -0
  278. data/vendor/pygments-main/tests/examplefiles/intsyn.fun +675 -0
  279. data/vendor/pygments-main/tests/examplefiles/intsyn.sig +286 -0
  280. data/vendor/pygments-main/tests/examplefiles/irb_heredoc +8 -0
  281. data/vendor/pygments-main/tests/examplefiles/irc.lsp +214 -0
  282. data/vendor/pygments-main/tests/examplefiles/java.properties +16 -0
  283. data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +28 -0
  284. data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +45 -0
  285. data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +713 -0
  286. data/vendor/pygments-main/tests/examplefiles/json.lasso +301 -0
  287. data/vendor/pygments-main/tests/examplefiles/json.lasso9 +213 -0
  288. data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +13 -0
  289. data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +47 -0
  290. data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +41 -0
  291. data/vendor/pygments-main/tests/examplefiles/logos_example.xm +28 -0
  292. data/vendor/pygments-main/tests/examplefiles/ltmain.sh +2849 -0
  293. data/vendor/pygments-main/tests/examplefiles/main.cmake +42 -0
  294. data/vendor/pygments-main/tests/examplefiles/markdown.lsp +679 -0
  295. data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +3 -0
  296. data/vendor/pygments-main/tests/examplefiles/matlab_sample +30 -0
  297. data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +37 -0
  298. data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +455 -0
  299. data/vendor/pygments-main/tests/examplefiles/mg_sample.pro +73 -0
  300. data/vendor/pygments-main/tests/examplefiles/minehunt.qml +112 -0
  301. data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +4 -0
  302. data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +340 -0
  303. data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +38 -0
  304. data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +95 -0
  305. data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +96 -0
  306. data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +30 -0
  307. data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +87 -0
  308. data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +118 -0
  309. data/vendor/pygments-main/tests/examplefiles/numbers.c +12 -0
  310. data/vendor/pygments-main/tests/examplefiles/objc_example.m +32 -0
  311. data/vendor/pygments-main/tests/examplefiles/objc_example2.m +24 -0
  312. data/vendor/pygments-main/tests/examplefiles/perl_misc +62 -0
  313. data/vendor/pygments-main/tests/examplefiles/perl_perl5db +998 -0
  314. data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +120 -0
  315. data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +856 -0
  316. data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +163 -0
  317. data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +567 -0
  318. data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +1223 -0
  319. data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +47 -0
  320. data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +10 -0
  321. data/vendor/pygments-main/tests/examplefiles/psql_session.txt +122 -0
  322. data/vendor/pygments-main/tests/examplefiles/py3_test.txt +2 -0
  323. data/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +4 -0
  324. data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +14 -0
  325. data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +2 -0
  326. data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +4 -0
  327. data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +234 -0
  328. data/vendor/pygments-main/tests/examplefiles/qsort.prolog +13 -0
  329. data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +38 -0
  330. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +280 -0
  331. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +2 -0
  332. data/vendor/pygments-main/tests/examplefiles/regex.js +22 -0
  333. data/vendor/pygments-main/tests/examplefiles/reversi.lsp +427 -0
  334. data/vendor/pygments-main/tests/examplefiles/robotframework.txt +39 -0
  335. data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +11 -0
  336. data/vendor/pygments-main/tests/examplefiles/rust_example.rs +233 -0
  337. data/vendor/pygments-main/tests/examplefiles/scilab.sci +30 -0
  338. data/vendor/pygments-main/tests/examplefiles/session.dylan-console +9 -0
  339. data/vendor/pygments-main/tests/examplefiles/sibling.prolog +19 -0
  340. data/vendor/pygments-main/tests/examplefiles/simple.md +747 -0
  341. data/vendor/pygments-main/tests/examplefiles/smarty_example.html +209 -0
  342. data/vendor/pygments-main/tests/examplefiles/source.lgt +343 -0
  343. data/vendor/pygments-main/tests/examplefiles/sources.list +62 -0
  344. data/vendor/pygments-main/tests/examplefiles/sphere.pov +18 -0
  345. data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +27 -0
  346. data/vendor/pygments-main/tests/examplefiles/squid.conf +30 -0
  347. data/vendor/pygments-main/tests/examplefiles/string.jl +1031 -0
  348. data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +21 -0
  349. data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +3 -0
  350. data/vendor/pygments-main/tests/examplefiles/swig_java.swg +1329 -0
  351. data/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +225 -0
  352. data/vendor/pygments-main/tests/examplefiles/test.R +153 -0
  353. data/vendor/pygments-main/tests/examplefiles/test.adb +211 -0
  354. data/vendor/pygments-main/tests/examplefiles/test.agda +102 -0
  355. data/vendor/pygments-main/tests/examplefiles/test.asy +131 -0
  356. data/vendor/pygments-main/tests/examplefiles/test.awk +121 -0
  357. data/vendor/pygments-main/tests/examplefiles/test.bas +29 -0
  358. data/vendor/pygments-main/tests/examplefiles/test.bb +95 -0
  359. data/vendor/pygments-main/tests/examplefiles/test.bmx +145 -0
  360. data/vendor/pygments-main/tests/examplefiles/test.boo +39 -0
  361. data/vendor/pygments-main/tests/examplefiles/test.bro +250 -0
  362. data/vendor/pygments-main/tests/examplefiles/test.cs +374 -0
  363. data/vendor/pygments-main/tests/examplefiles/test.css +54 -0
  364. data/vendor/pygments-main/tests/examplefiles/test.cu +36 -0
  365. data/vendor/pygments-main/tests/examplefiles/test.d +135 -0
  366. data/vendor/pygments-main/tests/examplefiles/test.dart +23 -0
  367. data/vendor/pygments-main/tests/examplefiles/test.dtd +89 -0
  368. data/vendor/pygments-main/tests/examplefiles/test.ebnf +31 -0
  369. data/vendor/pygments-main/tests/examplefiles/test.ec +605 -0
  370. data/vendor/pygments-main/tests/examplefiles/test.ecl +58 -0
  371. data/vendor/pygments-main/tests/examplefiles/test.eh +315 -0
  372. data/vendor/pygments-main/tests/examplefiles/test.erl +169 -0
  373. data/vendor/pygments-main/tests/examplefiles/test.evoque +33 -0
  374. data/vendor/pygments-main/tests/examplefiles/test.fan +818 -0
  375. data/vendor/pygments-main/tests/examplefiles/test.flx +57 -0
  376. data/vendor/pygments-main/tests/examplefiles/test.gdc +13 -0
  377. data/vendor/pygments-main/tests/examplefiles/test.groovy +97 -0
  378. data/vendor/pygments-main/tests/examplefiles/test.html +339 -0
  379. data/vendor/pygments-main/tests/examplefiles/test.ini +10 -0
  380. data/vendor/pygments-main/tests/examplefiles/test.java +653 -0
  381. data/vendor/pygments-main/tests/examplefiles/test.jsp +24 -0
  382. data/vendor/pygments-main/tests/examplefiles/test.maql +45 -0
  383. data/vendor/pygments-main/tests/examplefiles/test.mod +374 -0
  384. data/vendor/pygments-main/tests/examplefiles/test.moo +51 -0
  385. data/vendor/pygments-main/tests/examplefiles/test.myt +166 -0
  386. data/vendor/pygments-main/tests/examplefiles/test.nim +93 -0
  387. data/vendor/pygments-main/tests/examplefiles/test.opa +10 -0
  388. data/vendor/pygments-main/tests/examplefiles/test.p6 +252 -0
  389. data/vendor/pygments-main/tests/examplefiles/test.pas +743 -0
  390. data/vendor/pygments-main/tests/examplefiles/test.php +505 -0
  391. data/vendor/pygments-main/tests/examplefiles/test.plot +333 -0
  392. data/vendor/pygments-main/tests/examplefiles/test.ps1 +108 -0
  393. data/vendor/pygments-main/tests/examplefiles/test.pypylog +1839 -0
  394. data/vendor/pygments-main/tests/examplefiles/test.r3 +94 -0
  395. data/vendor/pygments-main/tests/examplefiles/test.rb +177 -0
  396. data/vendor/pygments-main/tests/examplefiles/test.rhtml +43 -0
  397. data/vendor/pygments-main/tests/examplefiles/test.scaml +8 -0
  398. data/vendor/pygments-main/tests/examplefiles/test.ssp +12 -0
  399. data/vendor/pygments-main/tests/examplefiles/test.tcsh +830 -0
  400. data/vendor/pygments-main/tests/examplefiles/test.vb +407 -0
  401. data/vendor/pygments-main/tests/examplefiles/test.vhdl +161 -0
  402. data/vendor/pygments-main/tests/examplefiles/test.xqy +138 -0
  403. data/vendor/pygments-main/tests/examplefiles/test.xsl +23 -0
  404. data/vendor/pygments-main/tests/examplefiles/test2.pypylog +120 -0
  405. data/vendor/pygments-main/tests/examplefiles/truncated.pytb +15 -0
  406. data/vendor/pygments-main/tests/examplefiles/type.lisp +1218 -0
  407. data/vendor/pygments-main/tests/examplefiles/underscore.coffee +603 -0
  408. data/vendor/pygments-main/tests/examplefiles/unicode.applescript +5 -0
  409. data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +11 -0
  410. data/vendor/pygments-main/tests/examplefiles/unix-io.lid +37 -0
  411. data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +3 -0
  412. data/vendor/pygments-main/tests/examplefiles/while.pov +13 -0
  413. data/vendor/pygments-main/tests/examplefiles/wiki.factor +384 -0
  414. data/vendor/pygments-main/tests/examplefiles/xml_example +1897 -0
  415. data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +798 -0
  416. data/vendor/pygments-main/tests/old_run.py +138 -0
  417. data/vendor/pygments-main/tests/run.py +49 -0
  418. data/vendor/pygments-main/tests/support.py +15 -0
  419. data/vendor/pygments-main/tests/support/tags +36 -0
  420. data/vendor/pygments-main/tests/test_basic_api.py +295 -0
  421. data/vendor/pygments-main/tests/test_clexer.py +31 -0
  422. data/vendor/pygments-main/tests/test_cmdline.py +105 -0
  423. data/vendor/pygments-main/tests/test_examplefiles.py +99 -0
  424. data/vendor/pygments-main/tests/test_html_formatter.py +178 -0
  425. data/vendor/pygments-main/tests/test_latex_formatter.py +55 -0
  426. data/vendor/pygments-main/tests/test_lexers_other.py +68 -0
  427. data/vendor/pygments-main/tests/test_perllexer.py +137 -0
  428. data/vendor/pygments-main/tests/test_regexlexer.py +47 -0
  429. data/vendor/pygments-main/tests/test_token.py +46 -0
  430. data/vendor/pygments-main/tests/test_using_api.py +40 -0
  431. data/vendor/pygments-main/tests/test_util.py +135 -0
  432. data/vendor/simplejson/.gitignore +10 -0
  433. data/vendor/simplejson/.travis.yml +5 -0
  434. data/vendor/simplejson/CHANGES.txt +291 -0
  435. data/vendor/simplejson/LICENSE.txt +19 -0
  436. data/vendor/simplejson/MANIFEST.in +5 -0
  437. data/vendor/simplejson/README.rst +19 -0
  438. data/vendor/simplejson/conf.py +179 -0
  439. data/vendor/simplejson/index.rst +628 -0
  440. data/vendor/simplejson/scripts/make_docs.py +18 -0
  441. data/vendor/simplejson/setup.py +104 -0
  442. data/vendor/simplejson/simplejson/__init__.py +510 -0
  443. data/vendor/simplejson/simplejson/_speedups.c +2745 -0
  444. data/vendor/simplejson/simplejson/decoder.py +425 -0
  445. data/vendor/simplejson/simplejson/encoder.py +567 -0
  446. data/vendor/simplejson/simplejson/ordered_dict.py +119 -0
  447. data/vendor/simplejson/simplejson/scanner.py +77 -0
  448. data/vendor/simplejson/simplejson/tests/__init__.py +67 -0
  449. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +55 -0
  450. data/vendor/simplejson/simplejson/tests/test_check_circular.py +30 -0
  451. data/vendor/simplejson/simplejson/tests/test_decimal.py +66 -0
  452. data/vendor/simplejson/simplejson/tests/test_decode.py +83 -0
  453. data/vendor/simplejson/simplejson/tests/test_default.py +9 -0
  454. data/vendor/simplejson/simplejson/tests/test_dump.py +67 -0
  455. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +46 -0
  456. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +32 -0
  457. data/vendor/simplejson/simplejson/tests/test_errors.py +34 -0
  458. data/vendor/simplejson/simplejson/tests/test_fail.py +91 -0
  459. data/vendor/simplejson/simplejson/tests/test_float.py +19 -0
  460. data/vendor/simplejson/simplejson/tests/test_indent.py +86 -0
  461. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +20 -0
  462. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +121 -0
  463. data/vendor/simplejson/simplejson/tests/test_pass1.py +76 -0
  464. data/vendor/simplejson/simplejson/tests/test_pass2.py +14 -0
  465. data/vendor/simplejson/simplejson/tests/test_pass3.py +20 -0
  466. data/vendor/simplejson/simplejson/tests/test_recursion.py +67 -0
  467. data/vendor/simplejson/simplejson/tests/test_scanstring.py +117 -0
  468. data/vendor/simplejson/simplejson/tests/test_separators.py +42 -0
  469. data/vendor/simplejson/simplejson/tests/test_speedups.py +20 -0
  470. data/vendor/simplejson/simplejson/tests/test_tuple.py +49 -0
  471. data/vendor/simplejson/simplejson/tests/test_unicode.py +109 -0
  472. data/vendor/simplejson/simplejson/tool.py +39 -0
  473. metadata +557 -0
@@ -0,0 +1,233 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ pygments.lexers._postgres_builtins
4
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
+
6
+ Self-updating data files for PostgreSQL lexer.
7
+
8
+ :copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
9
+ :license: BSD, see LICENSE for details.
10
+ """
11
+
12
+ import re
13
+ import urllib
14
+
15
+ # One man's constant is another man's variable.
16
+ SOURCE_URL = 'https://github.com/postgres/postgres/raw/master'
17
+ KEYWORDS_URL = SOURCE_URL + '/doc/src/sgml/keywords.sgml'
18
+ DATATYPES_URL = SOURCE_URL + '/doc/src/sgml/datatype.sgml'
19
+
20
+ def update_myself():
21
+ data_file = list(fetch(DATATYPES_URL))
22
+ datatypes = parse_datatypes(data_file)
23
+ pseudos = parse_pseudos(data_file)
24
+
25
+ keywords = parse_keywords(fetch(KEYWORDS_URL))
26
+ update_consts(__file__, 'DATATYPES', datatypes)
27
+ update_consts(__file__, 'PSEUDO_TYPES', pseudos)
28
+ update_consts(__file__, 'KEYWORDS', keywords)
29
+
30
+ def parse_keywords(f):
31
+ kw = []
32
+ for m in re.finditer(
33
+ r'\s*<entry><token>([^<]+)</token></entry>\s*'
34
+ r'<entry>([^<]+)</entry>', f.read()):
35
+ kw.append(m.group(1))
36
+
37
+ if not kw:
38
+ raise ValueError('no keyword found')
39
+
40
+ kw.sort()
41
+ return kw
42
+
43
+ def parse_datatypes(f):
44
+ dt = set()
45
+ for line in f:
46
+ if '<sect1' in line:
47
+ break
48
+ if '<entry><type>' not in line:
49
+ continue
50
+
51
+ # Parse a string such as
52
+ # time [ (<replaceable>p</replaceable>) ] [ without time zone ]
53
+ # into types "time" and "without time zone"
54
+
55
+ # remove all the tags
56
+ line = re.sub("<replaceable>[^<]+</replaceable>", "", line)
57
+ line = re.sub("<[^>]+>", "", line)
58
+
59
+ # Drop the parts containing braces
60
+ for tmp in [t for tmp in line.split('[')
61
+ for t in tmp.split(']') if "(" not in t]:
62
+ for t in tmp.split(','):
63
+ t = t.strip()
64
+ if not t: continue
65
+ dt.add(" ".join(t.split()))
66
+
67
+ dt = list(dt)
68
+ dt.sort()
69
+ return dt
70
+
71
+ def parse_pseudos(f):
72
+ dt = []
73
+ re_start = re.compile(r'\s*<table id="datatype-pseudotypes-table">')
74
+ re_entry = re.compile(r'\s*<entry><type>([^<]+)</></entry>')
75
+ re_end = re.compile(r'\s*</table>')
76
+
77
+ f = iter(f)
78
+ for line in f:
79
+ if re_start.match(line) is not None:
80
+ break
81
+ else:
82
+ raise ValueError('pseudo datatypes table not found')
83
+
84
+ for line in f:
85
+ m = re_entry.match(line)
86
+ if m is not None:
87
+ dt.append(m.group(1))
88
+
89
+ if re_end.match(line) is not None:
90
+ break
91
+ else:
92
+ raise ValueError('end of pseudo datatypes table not found')
93
+
94
+ if not dt:
95
+ raise ValueError('pseudo datatypes not found')
96
+
97
+ return dt
98
+
99
+ def fetch(url):
100
+ return urllib.urlopen(url)
101
+
102
+ def update_consts(filename, constname, content):
103
+ f = open(filename)
104
+ lines = f.readlines()
105
+ f.close()
106
+
107
+ # Line to start/end inserting
108
+ re_start = re.compile(r'^%s\s*=\s*\[\s*$' % constname)
109
+ re_end = re.compile(r'^\s*\]\s*$')
110
+ start = [ n for n, l in enumerate(lines) if re_start.match(l) ]
111
+ if not start:
112
+ raise ValueError("couldn't find line containing '%s = ['" % constname)
113
+ if len(start) > 1:
114
+ raise ValueError("too many lines containing '%s = ['" % constname)
115
+ start = start[0] + 1
116
+
117
+ end = [ n for n, l in enumerate(lines) if n >= start and re_end.match(l) ]
118
+ if not end:
119
+ raise ValueError("couldn't find line containing ']' after %s " % constname)
120
+ end = end[0]
121
+
122
+ # Pack the new content in lines not too long
123
+ content = [repr(item) for item in content ]
124
+ new_lines = [[]]
125
+ for item in content:
126
+ if sum(map(len, new_lines[-1])) + 2 * len(new_lines[-1]) + len(item) + 4 > 75:
127
+ new_lines.append([])
128
+ new_lines[-1].append(item)
129
+
130
+ lines[start:end] = [ " %s,\n" % ", ".join(items) for items in new_lines ]
131
+
132
+ f = open(filename, 'w')
133
+ f.write(''.join(lines))
134
+ f.close()
135
+
136
+
137
+ # Autogenerated: please edit them if you like wasting your time.
138
+
139
+ KEYWORDS = [
140
+ 'ABORT', 'ABSOLUTE', 'ACCESS', 'ACTION', 'ADD', 'ADMIN', 'AFTER',
141
+ 'AGGREGATE', 'ALL', 'ALSO', 'ALTER', 'ALWAYS', 'ANALYSE', 'ANALYZE',
142
+ 'AND', 'ANY', 'ARRAY', 'AS', 'ASC', 'ASSERTION', 'ASSIGNMENT',
143
+ 'ASYMMETRIC', 'AT', 'ATTRIBUTE', 'AUTHORIZATION', 'BACKWARD', 'BEFORE',
144
+ 'BEGIN', 'BETWEEN', 'BIGINT', 'BINARY', 'BIT', 'BOOLEAN', 'BOTH', 'BY',
145
+ 'CACHE', 'CALLED', 'CASCADE', 'CASCADED', 'CASE', 'CAST', 'CATALOG',
146
+ 'CHAIN', 'CHAR', 'CHARACTER', 'CHARACTERISTICS', 'CHECK', 'CHECKPOINT',
147
+ 'CLASS', 'CLOSE', 'CLUSTER', 'COALESCE', 'COLLATE', 'COLLATION',
148
+ 'COLUMN', 'COMMENT', 'COMMENTS', 'COMMIT', 'COMMITTED', 'CONCURRENTLY',
149
+ 'CONFIGURATION', 'CONNECTION', 'CONSTRAINT', 'CONSTRAINTS', 'CONTENT',
150
+ 'CONTINUE', 'CONVERSION', 'COPY', 'COST', 'CREATE', 'CROSS', 'CSV',
151
+ 'CURRENT', 'CURRENT_CATALOG', 'CURRENT_DATE', 'CURRENT_ROLE',
152
+ 'CURRENT_SCHEMA', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER',
153
+ 'CURSOR', 'CYCLE', 'DATA', 'DATABASE', 'DAY', 'DEALLOCATE', 'DEC',
154
+ 'DECIMAL', 'DECLARE', 'DEFAULT', 'DEFAULTS', 'DEFERRABLE', 'DEFERRED',
155
+ 'DEFINER', 'DELETE', 'DELIMITER', 'DELIMITERS', 'DESC', 'DICTIONARY',
156
+ 'DISABLE', 'DISCARD', 'DISTINCT', 'DO', 'DOCUMENT', 'DOMAIN', 'DOUBLE',
157
+ 'DROP', 'EACH', 'ELSE', 'ENABLE', 'ENCODING', 'ENCRYPTED', 'END',
158
+ 'ENUM', 'ESCAPE', 'EXCEPT', 'EXCLUDE', 'EXCLUDING', 'EXCLUSIVE',
159
+ 'EXECUTE', 'EXISTS', 'EXPLAIN', 'EXTENSION', 'EXTERNAL', 'EXTRACT',
160
+ 'FALSE', 'FAMILY', 'FETCH', 'FIRST', 'FLOAT', 'FOLLOWING', 'FOR',
161
+ 'FORCE', 'FOREIGN', 'FORWARD', 'FREEZE', 'FROM', 'FULL', 'FUNCTION',
162
+ 'FUNCTIONS', 'GLOBAL', 'GRANT', 'GRANTED', 'GREATEST', 'GROUP',
163
+ 'HANDLER', 'HAVING', 'HEADER', 'HOLD', 'HOUR', 'IDENTITY', 'IF',
164
+ 'ILIKE', 'IMMEDIATE', 'IMMUTABLE', 'IMPLICIT', 'IN', 'INCLUDING',
165
+ 'INCREMENT', 'INDEX', 'INDEXES', 'INHERIT', 'INHERITS', 'INITIALLY',
166
+ 'INLINE', 'INNER', 'INOUT', 'INPUT', 'INSENSITIVE', 'INSERT', 'INSTEAD',
167
+ 'INT', 'INTEGER', 'INTERSECT', 'INTERVAL', 'INTO', 'INVOKER', 'IS',
168
+ 'ISNULL', 'ISOLATION', 'JOIN', 'KEY', 'LABEL', 'LANGUAGE', 'LARGE',
169
+ 'LAST', 'LC_COLLATE', 'LC_CTYPE', 'LEADING', 'LEAST', 'LEFT', 'LEVEL',
170
+ 'LIKE', 'LIMIT', 'LISTEN', 'LOAD', 'LOCAL', 'LOCALTIME',
171
+ 'LOCALTIMESTAMP', 'LOCATION', 'LOCK', 'MAPPING', 'MATCH', 'MAXVALUE',
172
+ 'MINUTE', 'MINVALUE', 'MODE', 'MONTH', 'MOVE', 'NAME', 'NAMES',
173
+ 'NATIONAL', 'NATURAL', 'NCHAR', 'NEXT', 'NO', 'NONE', 'NOT', 'NOTHING',
174
+ 'NOTIFY', 'NOTNULL', 'NOWAIT', 'NULL', 'NULLIF', 'NULLS', 'NUMERIC',
175
+ 'OBJECT', 'OF', 'OFF', 'OFFSET', 'OIDS', 'ON', 'ONLY', 'OPERATOR',
176
+ 'OPTION', 'OPTIONS', 'OR', 'ORDER', 'OUT', 'OUTER', 'OVER', 'OVERLAPS',
177
+ 'OVERLAY', 'OWNED', 'OWNER', 'PARSER', 'PARTIAL', 'PARTITION',
178
+ 'PASSING', 'PASSWORD', 'PLACING', 'PLANS', 'POSITION', 'PRECEDING',
179
+ 'PRECISION', 'PREPARE', 'PREPARED', 'PRESERVE', 'PRIMARY', 'PRIOR',
180
+ 'PRIVILEGES', 'PROCEDURAL', 'PROCEDURE', 'QUOTE', 'RANGE', 'READ',
181
+ 'REAL', 'REASSIGN', 'RECHECK', 'RECURSIVE', 'REF', 'REFERENCES',
182
+ 'REINDEX', 'RELATIVE', 'RELEASE', 'RENAME', 'REPEATABLE', 'REPLACE',
183
+ 'REPLICA', 'RESET', 'RESTART', 'RESTRICT', 'RETURNING', 'RETURNS',
184
+ 'REVOKE', 'RIGHT', 'ROLE', 'ROLLBACK', 'ROW', 'ROWS', 'RULE',
185
+ 'SAVEPOINT', 'SCHEMA', 'SCROLL', 'SEARCH', 'SECOND', 'SECURITY',
186
+ 'SELECT', 'SEQUENCE', 'SEQUENCES', 'SERIALIZABLE', 'SERVER', 'SESSION',
187
+ 'SESSION_USER', 'SET', 'SETOF', 'SHARE', 'SHOW', 'SIMILAR', 'SIMPLE',
188
+ 'SMALLINT', 'SOME', 'STABLE', 'STANDALONE', 'START', 'STATEMENT',
189
+ 'STATISTICS', 'STDIN', 'STDOUT', 'STORAGE', 'STRICT', 'STRIP',
190
+ 'SUBSTRING', 'SYMMETRIC', 'SYSID', 'SYSTEM', 'TABLE', 'TABLES',
191
+ 'TABLESPACE', 'TEMP', 'TEMPLATE', 'TEMPORARY', 'TEXT', 'THEN', 'TIME',
192
+ 'TIMESTAMP', 'TO', 'TRAILING', 'TRANSACTION', 'TREAT', 'TRIGGER',
193
+ 'TRIM', 'TRUE', 'TRUNCATE', 'TRUSTED', 'TYPE', 'UNBOUNDED',
194
+ 'UNCOMMITTED', 'UNENCRYPTED', 'UNION', 'UNIQUE', 'UNKNOWN', 'UNLISTEN',
195
+ 'UNLOGGED', 'UNTIL', 'UPDATE', 'USER', 'USING', 'VACUUM', 'VALID',
196
+ 'VALIDATE', 'VALIDATOR', 'VALUE', 'VALUES', 'VARCHAR', 'VARIADIC',
197
+ 'VARYING', 'VERBOSE', 'VERSION', 'VIEW', 'VOLATILE', 'WHEN', 'WHERE',
198
+ 'WHITESPACE', 'WINDOW', 'WITH', 'WITHOUT', 'WORK', 'WRAPPER', 'WRITE',
199
+ 'XML', 'XMLATTRIBUTES', 'XMLCONCAT', 'XMLELEMENT', 'XMLEXISTS',
200
+ 'XMLFOREST', 'XMLPARSE', 'XMLPI', 'XMLROOT', 'XMLSERIALIZE', 'YEAR',
201
+ 'YES', 'ZONE',
202
+ ]
203
+
204
+ DATATYPES = [
205
+ 'bigint', 'bigserial', 'bit', 'bit varying', 'bool', 'boolean', 'box',
206
+ 'bytea', 'char', 'character', 'character varying', 'cidr', 'circle',
207
+ 'date', 'decimal', 'double precision', 'float4', 'float8', 'inet',
208
+ 'int', 'int2', 'int4', 'int8', 'integer', 'interval', 'json', 'line',
209
+ 'lseg', 'macaddr', 'money', 'numeric', 'path', 'point', 'polygon',
210
+ 'real', 'serial', 'serial2', 'serial4', 'serial8', 'smallint',
211
+ 'smallserial', 'text', 'time', 'timestamp', 'timestamptz', 'timetz',
212
+ 'tsquery', 'tsvector', 'txid_snapshot', 'uuid', 'varbit', 'varchar',
213
+ 'with time zone', 'without time zone', 'xml',
214
+ ]
215
+
216
+ PSEUDO_TYPES = [
217
+ 'any', 'anyelement', 'anyarray', 'anynonarray', 'anyenum', 'anyrange',
218
+ 'cstring', 'internal', 'language_handler', 'fdw_handler', 'record',
219
+ 'trigger', 'void', 'opaque',
220
+ ]
221
+
222
+ # Remove 'trigger' from types
223
+ PSEUDO_TYPES = sorted(set(PSEUDO_TYPES) - set(map(str.lower, KEYWORDS)))
224
+
225
+ PLPGSQL_KEYWORDS = [
226
+ 'ALIAS', 'CONSTANT', 'DIAGNOSTICS', 'ELSIF', 'EXCEPTION', 'EXIT',
227
+ 'FOREACH', 'GET', 'LOOP', 'NOTICE', 'OPEN', 'PERFORM', 'QUERY', 'RAISE',
228
+ 'RETURN', 'REVERSE', 'SQLSTATE', 'WHILE',
229
+ ]
230
+
231
+ if __name__ == '__main__':
232
+ update_myself()
233
+
@@ -0,0 +1,557 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ pygments.lexers._robotframeworklexer
4
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
+
6
+ Lexer for Robot Framework.
7
+
8
+ :copyright: Copyright 2006-2013 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
+
32
+ HEADING = Token.Generic.Heading
33
+ SETTING = Token.Keyword.Namespace
34
+ IMPORT = Token.Name.Namespace
35
+ TC_KW_NAME = Token.Generic.Subheading
36
+ KEYWORD = Token.Name.Function
37
+ ARGUMENT = Token.String
38
+ VARIABLE = Token.Name.Variable
39
+ COMMENT = Token.Comment
40
+ SEPARATOR = Token.Punctuation
41
+ SYNTAX = Token.Punctuation
42
+ GHERKIN = Token.Generic.Emph
43
+ ERROR = Token.Error
44
+
45
+
46
+ def normalize(string, remove=''):
47
+ string = string.lower()
48
+ for char in remove + ' ':
49
+ if char in string:
50
+ string = string.replace(char, '')
51
+ return string
52
+
53
+
54
+ class RobotFrameworkLexer(Lexer):
55
+ """
56
+ For `Robot Framework <http://robotframework.org>`_ test data.
57
+
58
+ Supports both space and pipe separated plain text formats.
59
+
60
+ *New in Pygments 1.6.*
61
+ """
62
+ name = 'RobotFramework'
63
+ aliases = ['RobotFramework', 'robotframework']
64
+ filenames = ['*.txt', '*.robot']
65
+ mimetypes = ['text/x-robotframework']
66
+
67
+ def __init__(self, **options):
68
+ options['tabsize'] = 2
69
+ options['encoding'] = 'UTF-8'
70
+ Lexer.__init__(self, **options)
71
+
72
+ def get_tokens_unprocessed(self, text):
73
+ row_tokenizer = RowTokenizer()
74
+ var_tokenizer = VariableTokenizer()
75
+ index = 0
76
+ for row in text.splitlines():
77
+ for value, token in row_tokenizer.tokenize(row):
78
+ for value, token in var_tokenizer.tokenize(value, token):
79
+ if value:
80
+ yield index, token, unicode(value)
81
+ index += len(value)
82
+
83
+
84
+ class VariableTokenizer(object):
85
+
86
+ def tokenize(self, string, token):
87
+ var = VariableSplitter(string, identifiers='$@%')
88
+ if var.start < 0 or token in (COMMENT, ERROR):
89
+ yield string, token
90
+ return
91
+ for value, token in self._tokenize(var, string, token):
92
+ if value:
93
+ yield value, token
94
+
95
+ def _tokenize(self, var, string, orig_token):
96
+ before = string[:var.start]
97
+ yield before, orig_token
98
+ yield var.identifier + '{', SYNTAX
99
+ for value, token in self.tokenize(var.base, VARIABLE):
100
+ yield value, token
101
+ yield '}', SYNTAX
102
+ if var.index:
103
+ yield '[', SYNTAX
104
+ for value, token in self.tokenize(var.index, VARIABLE):
105
+ yield value, token
106
+ yield ']', SYNTAX
107
+ for value, token in self.tokenize(string[var.end:], orig_token):
108
+ yield value, token
109
+
110
+
111
+ class RowTokenizer(object):
112
+
113
+ def __init__(self):
114
+ self._table = UnknownTable()
115
+ self._splitter = RowSplitter()
116
+ testcases = TestCaseTable()
117
+ settings = SettingTable(testcases.set_default_template)
118
+ variables = VariableTable()
119
+ keywords = KeywordTable()
120
+ self._tables = {'settings': settings, 'setting': settings,
121
+ 'metadata': settings,
122
+ 'variables': variables, 'variable': variables,
123
+ 'testcases': testcases, 'testcase': 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
+ for value, token in self._tokenize(value, index, commented,
139
+ separator, heading):
140
+ yield value, token
141
+ self._table.end_row()
142
+
143
+ def _start_table(self, header):
144
+ name = normalize(header, remove='*')
145
+ return self._tables.get(name, UnknownTable())
146
+
147
+ def _tokenize(self, value, index, commented, separator, heading):
148
+ if commented:
149
+ yield value, COMMENT
150
+ elif separator:
151
+ yield value, SEPARATOR
152
+ elif heading:
153
+ yield value, HEADING
154
+ else:
155
+ for value, token in self._table.tokenize(value, index):
156
+ yield value, token
157
+
158
+
159
+ class RowSplitter(object):
160
+ _space_splitter = re.compile('( {2,})')
161
+ _pipe_splitter = re.compile('((?:^| +)\|(?: +|$))')
162
+
163
+ def split(self, row):
164
+ splitter = (row.startswith('| ') and self._split_from_pipes
165
+ or self._split_from_spaces)
166
+ for value in splitter(row):
167
+ yield value
168
+ yield '\n'
169
+
170
+ def _split_from_spaces(self, row):
171
+ yield '' # Start with (pseudo)separator similarly as with pipes
172
+ for value in self._space_splitter.split(row):
173
+ yield value
174
+
175
+ def _split_from_pipes(self, row):
176
+ _, separator, rest = self._pipe_splitter.split(row, 1)
177
+ yield separator
178
+ while self._pipe_splitter.search(rest):
179
+ cell, separator, rest = self._pipe_splitter.split(rest, 1)
180
+ yield cell
181
+ yield separator
182
+ yield rest
183
+
184
+
185
+ class Tokenizer(object):
186
+ _tokens = None
187
+
188
+ def __init__(self):
189
+ self._index = 0
190
+
191
+ def tokenize(self, value):
192
+ values_and_tokens = self._tokenize(value, self._index)
193
+ self._index += 1
194
+ if isinstance(values_and_tokens, type(Token)):
195
+ values_and_tokens = [(value, values_and_tokens)]
196
+ return values_and_tokens
197
+
198
+ def _tokenize(self, value, index):
199
+ index = min(index, len(self._tokens) - 1)
200
+ return self._tokens[index]
201
+
202
+ def _is_assign(self, value):
203
+ if value.endswith('='):
204
+ value = value[:-1].strip()
205
+ var = VariableSplitter(value, identifiers='$@')
206
+ return var.start == 0 and var.end == len(value)
207
+
208
+
209
+ class Comment(Tokenizer):
210
+ _tokens = (COMMENT,)
211
+
212
+
213
+ class Setting(Tokenizer):
214
+ _tokens = (SETTING, ARGUMENT)
215
+ _keyword_settings = ('suitesetup', 'suiteprecondition', 'suiteteardown',
216
+ 'suitepostcondition', 'testsetup', 'testprecondition',
217
+ 'testteardown', 'testpostcondition', 'testtemplate')
218
+ _import_settings = ('library', 'resource', 'variables')
219
+ _other_settings = ('documentation', 'metadata', 'forcetags', 'defaulttags',
220
+ 'testtimeout')
221
+ _custom_tokenizer = None
222
+
223
+ def __init__(self, template_setter=None):
224
+ Tokenizer.__init__(self)
225
+ self._template_setter = template_setter
226
+
227
+ def _tokenize(self, value, index):
228
+ if index == 1 and self._template_setter:
229
+ self._template_setter(value)
230
+ if index == 0:
231
+ normalized = normalize(value)
232
+ if normalized in self._keyword_settings:
233
+ self._custom_tokenizer = KeywordCall(support_assign=False)
234
+ elif normalized in self._import_settings:
235
+ self._custom_tokenizer = ImportSetting()
236
+ elif normalized not in self._other_settings:
237
+ return ERROR
238
+ elif self._custom_tokenizer:
239
+ return self._custom_tokenizer.tokenize(value)
240
+ return Tokenizer._tokenize(self, value, index)
241
+
242
+
243
+ class ImportSetting(Tokenizer):
244
+ _tokens = (IMPORT, ARGUMENT)
245
+
246
+
247
+ class TestCaseSetting(Setting):
248
+ _keyword_settings = ('setup', 'precondition', 'teardown', 'postcondition',
249
+ 'template')
250
+ _import_settings = ()
251
+ _other_settings = ('documentation', 'tags', 'timeout')
252
+
253
+ def _tokenize(self, value, index):
254
+ if index == 0:
255
+ type = Setting._tokenize(self, value[1:-1], index)
256
+ return [('[', SYNTAX), (value[1:-1], type), (']', SYNTAX)]
257
+ return Setting._tokenize(self, value, index)
258
+
259
+
260
+ class KeywordSetting(TestCaseSetting):
261
+ _keyword_settings = ('teardown',)
262
+ _other_settings = ('documentation', 'arguments', 'return', 'timeout')
263
+
264
+
265
+ class Variable(Tokenizer):
266
+ _tokens = (SYNTAX, ARGUMENT)
267
+
268
+ def _tokenize(self, value, index):
269
+ if index == 0 and not self._is_assign(value):
270
+ return ERROR
271
+ return Tokenizer._tokenize(self, value, index)
272
+
273
+
274
+ class KeywordCall(Tokenizer):
275
+ _tokens = (KEYWORD, ARGUMENT)
276
+
277
+ def __init__(self, support_assign=True):
278
+ Tokenizer.__init__(self)
279
+ self._keyword_found = not support_assign
280
+ self._assigns = 0
281
+
282
+ def _tokenize(self, value, index):
283
+ if not self._keyword_found and self._is_assign(value):
284
+ self._assigns += 1
285
+ return SYNTAX # VariableTokenizer tokenizes this later.
286
+ if self._keyword_found:
287
+ return Tokenizer._tokenize(self, value, index - self._assigns)
288
+ self._keyword_found = True
289
+ return GherkinTokenizer().tokenize(value, KEYWORD)
290
+
291
+
292
+ class GherkinTokenizer(object):
293
+ _gherkin_prefix = re.compile('^(Given|When|Then|And) ', re.IGNORECASE)
294
+
295
+ def tokenize(self, value, token):
296
+ match = self._gherkin_prefix.match(value)
297
+ if not match:
298
+ return [(value, token)]
299
+ end = match.end()
300
+ return [(value[:end], GHERKIN), (value[end:], token)]
301
+
302
+
303
+ class TemplatedKeywordCall(Tokenizer):
304
+ _tokens = (ARGUMENT,)
305
+
306
+
307
+ class ForLoop(Tokenizer):
308
+
309
+ def __init__(self):
310
+ Tokenizer.__init__(self)
311
+ self._in_arguments = False
312
+
313
+ def _tokenize(self, value, index):
314
+ token = self._in_arguments and ARGUMENT or SYNTAX
315
+ if value.upper() in ('IN', 'IN RANGE'):
316
+ self._in_arguments = True
317
+ return token
318
+
319
+
320
+ class _Table(object):
321
+ _tokenizer_class = None
322
+
323
+ def __init__(self, prev_tokenizer=None):
324
+ self._tokenizer = self._tokenizer_class()
325
+ self._prev_tokenizer = prev_tokenizer
326
+ self._prev_values_on_row = []
327
+
328
+ def tokenize(self, value, index):
329
+ if self._continues(value, index):
330
+ self._tokenizer = self._prev_tokenizer
331
+ yield value, SYNTAX
332
+ else:
333
+ for value_and_token in self._tokenize(value, index):
334
+ yield value_and_token
335
+ self._prev_values_on_row.append(value)
336
+
337
+ def _continues(self, value, index):
338
+ return value == '...' and all(self._is_empty(t)
339
+ for t in self._prev_values_on_row)
340
+
341
+ def _is_empty(self, value):
342
+ return value in ('', '\\')
343
+
344
+ def _tokenize(self, value, index):
345
+ return self._tokenizer.tokenize(value)
346
+
347
+ def end_row(self):
348
+ self.__init__(prev_tokenizer=self._tokenizer)
349
+
350
+
351
+ class UnknownTable(_Table):
352
+ _tokenizer_class = Comment
353
+
354
+ def _continues(self, value, index):
355
+ return False
356
+
357
+
358
+ class VariableTable(_Table):
359
+ _tokenizer_class = Variable
360
+
361
+
362
+ class SettingTable(_Table):
363
+ _tokenizer_class = Setting
364
+
365
+ def __init__(self, template_setter, prev_tokenizer=None):
366
+ _Table.__init__(self, prev_tokenizer)
367
+ self._template_setter = template_setter
368
+
369
+ def _tokenize(self, value, index):
370
+ if index == 0 and normalize(value) == 'testtemplate':
371
+ self._tokenizer = Setting(self._template_setter)
372
+ return _Table._tokenize(self, value, index)
373
+
374
+ def end_row(self):
375
+ self.__init__(self._template_setter, prev_tokenizer=self._tokenizer)
376
+
377
+
378
+ class TestCaseTable(_Table):
379
+ _setting_class = TestCaseSetting
380
+ _test_template = None
381
+ _default_template = None
382
+
383
+ @property
384
+ def _tokenizer_class(self):
385
+ if self._test_template or (self._default_template and
386
+ self._test_template is not False):
387
+ return TemplatedKeywordCall
388
+ return KeywordCall
389
+
390
+ def _continues(self, value, index):
391
+ return index > 0 and _Table._continues(self, value, index)
392
+
393
+ def _tokenize(self, value, index):
394
+ if index == 0:
395
+ if value:
396
+ self._test_template = None
397
+ return GherkinTokenizer().tokenize(value, TC_KW_NAME)
398
+ if index == 1 and self._is_setting(value):
399
+ if self._is_template(value):
400
+ self._test_template = False
401
+ self._tokenizer = self._setting_class(self.set_test_template)
402
+ else:
403
+ self._tokenizer = self._setting_class()
404
+ if index == 1 and self._is_for_loop(value):
405
+ self._tokenizer = ForLoop()
406
+ if index == 1 and self._is_empty(value):
407
+ return [(value, SYNTAX)]
408
+ return _Table._tokenize(self, value, index)
409
+
410
+ def _is_setting(self, value):
411
+ return value.startswith('[') and value.endswith(']')
412
+
413
+ def _is_template(self, value):
414
+ return normalize(value) == '[template]'
415
+
416
+ def _is_for_loop(self, value):
417
+ return value.startswith(':') and normalize(value, remove=':') == 'for'
418
+
419
+ def set_test_template(self, template):
420
+ self._test_template = self._is_template_set(template)
421
+
422
+ def set_default_template(self, template):
423
+ self._default_template = self._is_template_set(template)
424
+
425
+ def _is_template_set(self, template):
426
+ return normalize(template) not in ('', '\\', 'none', '${empty}')
427
+
428
+
429
+ class KeywordTable(TestCaseTable):
430
+ _tokenizer_class = KeywordCall
431
+ _setting_class = KeywordSetting
432
+
433
+ def _is_template(self, value):
434
+ return False
435
+
436
+
437
+ # Following code copied directly from Robot Framework 2.7.5.
438
+
439
+ class VariableSplitter:
440
+
441
+ def __init__(self, string, identifiers):
442
+ self.identifier = None
443
+ self.base = None
444
+ self.index = None
445
+ self.start = -1
446
+ self.end = -1
447
+ self._identifiers = identifiers
448
+ self._may_have_internal_variables = False
449
+ try:
450
+ self._split(string)
451
+ except ValueError:
452
+ pass
453
+ else:
454
+ self._finalize()
455
+
456
+ def get_replaced_base(self, variables):
457
+ if self._may_have_internal_variables:
458
+ return variables.replace_string(self.base)
459
+ return self.base
460
+
461
+ def _finalize(self):
462
+ self.identifier = self._variable_chars[0]
463
+ self.base = ''.join(self._variable_chars[2:-1])
464
+ self.end = self.start + len(self._variable_chars)
465
+ if self._has_list_variable_index():
466
+ self.index = ''.join(self._list_variable_index_chars[1:-1])
467
+ self.end += len(self._list_variable_index_chars)
468
+
469
+ def _has_list_variable_index(self):
470
+ return self._list_variable_index_chars\
471
+ and self._list_variable_index_chars[-1] == ']'
472
+
473
+ def _split(self, string):
474
+ start_index, max_index = self._find_variable(string)
475
+ self.start = start_index
476
+ self._open_curly = 1
477
+ self._state = self._variable_state
478
+ self._variable_chars = [string[start_index], '{']
479
+ self._list_variable_index_chars = []
480
+ self._string = string
481
+ start_index += 2
482
+ for index, char in enumerate(string[start_index:]):
483
+ index += start_index # Giving start to enumerate only in Py 2.6+
484
+ try:
485
+ self._state(char, index)
486
+ except StopIteration:
487
+ return
488
+ if index == max_index and not self._scanning_list_variable_index():
489
+ return
490
+
491
+ def _scanning_list_variable_index(self):
492
+ return self._state in [self._waiting_list_variable_index_state,
493
+ self._list_variable_index_state]
494
+
495
+ def _find_variable(self, string):
496
+ max_end_index = string.rfind('}')
497
+ if max_end_index == -1:
498
+ raise ValueError('No variable end found')
499
+ if self._is_escaped(string, max_end_index):
500
+ return self._find_variable(string[:max_end_index])
501
+ start_index = self._find_start_index(string, 1, max_end_index)
502
+ if start_index == -1:
503
+ raise ValueError('No variable start found')
504
+ return start_index, max_end_index
505
+
506
+ def _find_start_index(self, string, start, end):
507
+ index = string.find('{', start, end) - 1
508
+ if index < 0:
509
+ return -1
510
+ if self._start_index_is_ok(string, index):
511
+ return index
512
+ return self._find_start_index(string, index+2, end)
513
+
514
+ def _start_index_is_ok(self, string, index):
515
+ return string[index] in self._identifiers\
516
+ and not self._is_escaped(string, index)
517
+
518
+ def _is_escaped(self, string, index):
519
+ escaped = False
520
+ while index > 0 and string[index-1] == '\\':
521
+ index -= 1
522
+ escaped = not escaped
523
+ return escaped
524
+
525
+ def _variable_state(self, char, index):
526
+ self._variable_chars.append(char)
527
+ if char == '}' and not self._is_escaped(self._string, index):
528
+ self._open_curly -= 1
529
+ if self._open_curly == 0:
530
+ if not self._is_list_variable():
531
+ raise StopIteration
532
+ self._state = self._waiting_list_variable_index_state
533
+ elif char in self._identifiers:
534
+ self._state = self._internal_variable_start_state
535
+
536
+ def _is_list_variable(self):
537
+ return self._variable_chars[0] == '@'
538
+
539
+ def _internal_variable_start_state(self, char, index):
540
+ self._state = self._variable_state
541
+ if char == '{':
542
+ self._variable_chars.append(char)
543
+ self._open_curly += 1
544
+ self._may_have_internal_variables = True
545
+ else:
546
+ self._variable_state(char, index)
547
+
548
+ def _waiting_list_variable_index_state(self, char, index):
549
+ if char != '[':
550
+ raise StopIteration
551
+ self._list_variable_index_chars.append(char)
552
+ self._state = self._list_variable_index_state
553
+
554
+ def _list_variable_index_state(self, char, index):
555
+ self._list_variable_index_chars.append(char)
556
+ if char == ']':
557
+ raise StopIteration