mortar-pygments.rb 0.5.5

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 (472) hide show
  1. data/.gitignore +6 -0
  2. data/CHANGELOG.md +71 -0
  3. data/Gemfile +2 -0
  4. data/LICENSE +17 -0
  5. data/README.md +121 -0
  6. data/Rakefile +66 -0
  7. data/bench.rb +22 -0
  8. data/cache-lexers.rb +8 -0
  9. data/lexers +0 -0
  10. data/lib/pygments/lexer.rb +148 -0
  11. data/lib/pygments/mentos.py +351 -0
  12. data/lib/pygments/popen.rb +406 -0
  13. data/lib/pygments/version.rb +3 -0
  14. data/lib/pygments.rb +8 -0
  15. data/pygments.rb.gemspec +25 -0
  16. data/test/test_data.c +2581 -0
  17. data/test/test_data.py +514 -0
  18. data/test/test_data_generated +2582 -0
  19. data/test/test_pygments.rb +287 -0
  20. data/vendor/custom_lexers/github.py +565 -0
  21. data/vendor/pygments-main/AUTHORS +153 -0
  22. data/vendor/pygments-main/CHANGES +889 -0
  23. data/vendor/pygments-main/LICENSE +25 -0
  24. data/vendor/pygments-main/MANIFEST.in +6 -0
  25. data/vendor/pygments-main/Makefile +59 -0
  26. data/vendor/pygments-main/REVISION +1 -0
  27. data/vendor/pygments-main/TODO +15 -0
  28. data/vendor/pygments-main/docs/generate.py +472 -0
  29. data/vendor/pygments-main/docs/pygmentize.1 +94 -0
  30. data/vendor/pygments-main/docs/src/api.txt +270 -0
  31. data/vendor/pygments-main/docs/src/authors.txt +5 -0
  32. data/vendor/pygments-main/docs/src/changelog.txt +5 -0
  33. data/vendor/pygments-main/docs/src/cmdline.txt +147 -0
  34. data/vendor/pygments-main/docs/src/filterdevelopment.txt +70 -0
  35. data/vendor/pygments-main/docs/src/filters.txt +42 -0
  36. data/vendor/pygments-main/docs/src/formatterdevelopment.txt +169 -0
  37. data/vendor/pygments-main/docs/src/formatters.txt +48 -0
  38. data/vendor/pygments-main/docs/src/index.txt +69 -0
  39. data/vendor/pygments-main/docs/src/installation.txt +71 -0
  40. data/vendor/pygments-main/docs/src/integrate.txt +48 -0
  41. data/vendor/pygments-main/docs/src/java.txt +70 -0
  42. data/vendor/pygments-main/docs/src/lexerdevelopment.txt +603 -0
  43. data/vendor/pygments-main/docs/src/lexers.txt +67 -0
  44. data/vendor/pygments-main/docs/src/moinmoin.txt +39 -0
  45. data/vendor/pygments-main/docs/src/plugins.txt +93 -0
  46. data/vendor/pygments-main/docs/src/quickstart.txt +202 -0
  47. data/vendor/pygments-main/docs/src/rstdirective.txt +22 -0
  48. data/vendor/pygments-main/docs/src/styles.txt +143 -0
  49. data/vendor/pygments-main/docs/src/tokens.txt +349 -0
  50. data/vendor/pygments-main/docs/src/unicode.txt +49 -0
  51. data/vendor/pygments-main/external/autopygmentize +64 -0
  52. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +144 -0
  53. data/vendor/pygments-main/external/markdown-processor.py +67 -0
  54. data/vendor/pygments-main/external/moin-parser.py +112 -0
  55. data/vendor/pygments-main/external/pygments.bashcomp +38 -0
  56. data/vendor/pygments-main/external/rst-directive-old.py +77 -0
  57. data/vendor/pygments-main/external/rst-directive.py +83 -0
  58. data/vendor/pygments-main/ez_setup.py +276 -0
  59. data/vendor/pygments-main/pygmentize +7 -0
  60. data/vendor/pygments-main/pygments/__init__.py +91 -0
  61. data/vendor/pygments-main/pygments/cmdline.py +441 -0
  62. data/vendor/pygments-main/pygments/console.py +74 -0
  63. data/vendor/pygments-main/pygments/filter.py +74 -0
  64. data/vendor/pygments-main/pygments/filters/__init__.py +356 -0
  65. data/vendor/pygments-main/pygments/formatter.py +95 -0
  66. data/vendor/pygments-main/pygments/formatters/__init__.py +68 -0
  67. data/vendor/pygments-main/pygments/formatters/_mapping.py +92 -0
  68. data/vendor/pygments-main/pygments/formatters/bbcode.py +109 -0
  69. data/vendor/pygments-main/pygments/formatters/html.py +821 -0
  70. data/vendor/pygments-main/pygments/formatters/img.py +553 -0
  71. data/vendor/pygments-main/pygments/formatters/latex.py +378 -0
  72. data/vendor/pygments-main/pygments/formatters/other.py +115 -0
  73. data/vendor/pygments-main/pygments/formatters/rtf.py +136 -0
  74. data/vendor/pygments-main/pygments/formatters/svg.py +154 -0
  75. data/vendor/pygments-main/pygments/formatters/terminal.py +112 -0
  76. data/vendor/pygments-main/pygments/formatters/terminal256.py +222 -0
  77. data/vendor/pygments-main/pygments/lexer.py +765 -0
  78. data/vendor/pygments-main/pygments/lexers/__init__.py +240 -0
  79. data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1645 -0
  80. data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +232 -0
  81. data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +5172 -0
  82. data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +249 -0
  83. data/vendor/pygments-main/pygments/lexers/_mapping.py +355 -0
  84. data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +562 -0
  85. data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +3787 -0
  86. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +233 -0
  87. data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +557 -0
  88. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +40 -0
  89. data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +1072 -0
  90. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +360 -0
  91. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +13 -0
  92. data/vendor/pygments-main/pygments/lexers/agile.py +2290 -0
  93. data/vendor/pygments-main/pygments/lexers/asm.py +398 -0
  94. data/vendor/pygments-main/pygments/lexers/compiled.py +3723 -0
  95. data/vendor/pygments-main/pygments/lexers/dalvik.py +104 -0
  96. data/vendor/pygments-main/pygments/lexers/dotnet.py +671 -0
  97. data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
  98. data/vendor/pygments-main/pygments/lexers/functional.py +2731 -0
  99. data/vendor/pygments-main/pygments/lexers/github.py +565 -0
  100. data/vendor/pygments-main/pygments/lexers/hdl.py +356 -0
  101. data/vendor/pygments-main/pygments/lexers/jvm.py +1112 -0
  102. data/vendor/pygments-main/pygments/lexers/math.py +1918 -0
  103. data/vendor/pygments-main/pygments/lexers/other.py +3778 -0
  104. data/vendor/pygments-main/pygments/lexers/parsers.py +778 -0
  105. data/vendor/pygments-main/pygments/lexers/shell.py +424 -0
  106. data/vendor/pygments-main/pygments/lexers/special.py +100 -0
  107. data/vendor/pygments-main/pygments/lexers/sql.py +609 -0
  108. data/vendor/pygments-main/pygments/lexers/templates.py +1742 -0
  109. data/vendor/pygments-main/pygments/lexers/text.py +1893 -0
  110. data/vendor/pygments-main/pygments/lexers/web.py +4045 -0
  111. data/vendor/pygments-main/pygments/modeline.py +40 -0
  112. data/vendor/pygments-main/pygments/plugin.py +74 -0
  113. data/vendor/pygments-main/pygments/scanner.py +104 -0
  114. data/vendor/pygments-main/pygments/style.py +117 -0
  115. data/vendor/pygments-main/pygments/styles/__init__.py +70 -0
  116. data/vendor/pygments-main/pygments/styles/autumn.py +65 -0
  117. data/vendor/pygments-main/pygments/styles/borland.py +51 -0
  118. data/vendor/pygments-main/pygments/styles/bw.py +49 -0
  119. data/vendor/pygments-main/pygments/styles/colorful.py +81 -0
  120. data/vendor/pygments-main/pygments/styles/default.py +73 -0
  121. data/vendor/pygments-main/pygments/styles/emacs.py +72 -0
  122. data/vendor/pygments-main/pygments/styles/friendly.py +72 -0
  123. data/vendor/pygments-main/pygments/styles/fruity.py +42 -0
  124. data/vendor/pygments-main/pygments/styles/manni.py +75 -0
  125. data/vendor/pygments-main/pygments/styles/monokai.py +106 -0
  126. data/vendor/pygments-main/pygments/styles/murphy.py +80 -0
  127. data/vendor/pygments-main/pygments/styles/native.py +65 -0
  128. data/vendor/pygments-main/pygments/styles/pastie.py +75 -0
  129. data/vendor/pygments-main/pygments/styles/perldoc.py +69 -0
  130. data/vendor/pygments-main/pygments/styles/rrt.py +33 -0
  131. data/vendor/pygments-main/pygments/styles/tango.py +141 -0
  132. data/vendor/pygments-main/pygments/styles/trac.py +63 -0
  133. data/vendor/pygments-main/pygments/styles/vim.py +63 -0
  134. data/vendor/pygments-main/pygments/styles/vs.py +38 -0
  135. data/vendor/pygments-main/pygments/token.py +195 -0
  136. data/vendor/pygments-main/pygments/unistring.py +140 -0
  137. data/vendor/pygments-main/pygments/util.py +277 -0
  138. data/vendor/pygments-main/scripts/check_sources.py +242 -0
  139. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +32 -0
  140. data/vendor/pygments-main/scripts/epydoc.css +280 -0
  141. data/vendor/pygments-main/scripts/find_codetags.py +205 -0
  142. data/vendor/pygments-main/scripts/find_error.py +170 -0
  143. data/vendor/pygments-main/scripts/get_vimkw.py +43 -0
  144. data/vendor/pygments-main/scripts/pylintrc +301 -0
  145. data/vendor/pygments-main/scripts/reindent.py +291 -0
  146. data/vendor/pygments-main/scripts/vim2pygments.py +933 -0
  147. data/vendor/pygments-main/setup.cfg +7 -0
  148. data/vendor/pygments-main/setup.py +90 -0
  149. data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +37 -0
  150. data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +869 -0
  151. data/vendor/pygments-main/tests/dtds/HTML4.dcl +88 -0
  152. data/vendor/pygments-main/tests/dtds/HTML4.dtd +1092 -0
  153. data/vendor/pygments-main/tests/dtds/HTML4.soc +9 -0
  154. data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +195 -0
  155. data/vendor/pygments-main/tests/dtds/HTMLspec.ent +77 -0
  156. data/vendor/pygments-main/tests/dtds/HTMLsym.ent +241 -0
  157. data/vendor/pygments-main/tests/examplefiles/ANTLRv3.g +608 -0
  158. data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +209 -0
  159. data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +102 -0
  160. data/vendor/pygments-main/tests/examplefiles/BOM.js +1 -0
  161. data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +611 -0
  162. data/vendor/pygments-main/tests/examplefiles/Config.in.cache +1973 -0
  163. data/vendor/pygments-main/tests/examplefiles/Constants.mo +158 -0
  164. data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +411 -0
  165. data/vendor/pygments-main/tests/examplefiles/Deflate.fs +578 -0
  166. data/vendor/pygments-main/tests/examplefiles/Errors.scala +18 -0
  167. data/vendor/pygments-main/tests/examplefiles/File.hy +174 -0
  168. data/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +66 -0
  169. data/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +104 -0
  170. data/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +671 -0
  171. data/vendor/pygments-main/tests/examplefiles/Intro.java +1660 -0
  172. data/vendor/pygments-main/tests/examplefiles/Makefile +1131 -0
  173. data/vendor/pygments-main/tests/examplefiles/Object.st +4394 -0
  174. data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +584 -0
  175. data/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +23 -0
  176. data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +378 -0
  177. data/vendor/pygments-main/tests/examplefiles/Sorting.mod +470 -0
  178. data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +382 -0
  179. data/vendor/pygments-main/tests/examplefiles/addressbook.proto +30 -0
  180. data/vendor/pygments-main/tests/examplefiles/antlr_throws +1 -0
  181. data/vendor/pygments-main/tests/examplefiles/apache2.conf +393 -0
  182. data/vendor/pygments-main/tests/examplefiles/as3_test.as +143 -0
  183. data/vendor/pygments-main/tests/examplefiles/as3_test2.as +46 -0
  184. data/vendor/pygments-main/tests/examplefiles/as3_test3.as +3 -0
  185. data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +27 -0
  186. data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +25 -0
  187. data/vendor/pygments-main/tests/examplefiles/badcase.java +2 -0
  188. data/vendor/pygments-main/tests/examplefiles/batchfile.bat +49 -0
  189. data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +308 -0
  190. data/vendor/pygments-main/tests/examplefiles/boot-9.scm +1557 -0
  191. data/vendor/pygments-main/tests/examplefiles/ca65_example +284 -0
  192. data/vendor/pygments-main/tests/examplefiles/cbmbas_example +9 -0
  193. data/vendor/pygments-main/tests/examplefiles/cells.ps +515 -0
  194. data/vendor/pygments-main/tests/examplefiles/ceval.c +2604 -0
  195. data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +13 -0
  196. data/vendor/pygments-main/tests/examplefiles/classes.dylan +125 -0
  197. data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +10 -0
  198. data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +447 -0
  199. data/vendor/pygments-main/tests/examplefiles/database.pytb +20 -0
  200. data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +2461 -0
  201. data/vendor/pygments-main/tests/examplefiles/demo.ahk +181 -0
  202. data/vendor/pygments-main/tests/examplefiles/demo.cfm +38 -0
  203. data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +68 -0
  204. data/vendor/pygments-main/tests/examplefiles/dwarf.cw +17 -0
  205. data/vendor/pygments-main/tests/examplefiles/erl_session +10 -0
  206. data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +1 -0
  207. data/vendor/pygments-main/tests/examplefiles/evil_regex.js +48 -0
  208. data/vendor/pygments-main/tests/examplefiles/example.Rd +78 -0
  209. data/vendor/pygments-main/tests/examplefiles/example.bug +54 -0
  210. data/vendor/pygments-main/tests/examplefiles/example.c +2080 -0
  211. data/vendor/pygments-main/tests/examplefiles/example.ceylon +52 -0
  212. data/vendor/pygments-main/tests/examplefiles/example.clay +33 -0
  213. data/vendor/pygments-main/tests/examplefiles/example.cls +15 -0
  214. data/vendor/pygments-main/tests/examplefiles/example.cob +3556 -0
  215. data/vendor/pygments-main/tests/examplefiles/example.cpp +2363 -0
  216. data/vendor/pygments-main/tests/examplefiles/example.gs +106 -0
  217. data/vendor/pygments-main/tests/examplefiles/example.gst +7 -0
  218. data/vendor/pygments-main/tests/examplefiles/example.hx +142 -0
  219. data/vendor/pygments-main/tests/examplefiles/example.jag +48 -0
  220. data/vendor/pygments-main/tests/examplefiles/example.kt +47 -0
  221. data/vendor/pygments-main/tests/examplefiles/example.lagda +19 -0
  222. data/vendor/pygments-main/tests/examplefiles/example.lua +250 -0
  223. data/vendor/pygments-main/tests/examplefiles/example.monkey +152 -0
  224. data/vendor/pygments-main/tests/examplefiles/example.moo +26 -0
  225. data/vendor/pygments-main/tests/examplefiles/example.moon +629 -0
  226. data/vendor/pygments-main/tests/examplefiles/example.msc +43 -0
  227. data/vendor/pygments-main/tests/examplefiles/example.nim +1010 -0
  228. data/vendor/pygments-main/tests/examplefiles/example.ns2 +69 -0
  229. data/vendor/pygments-main/tests/examplefiles/example.p +34 -0
  230. data/vendor/pygments-main/tests/examplefiles/example.pas +2708 -0
  231. data/vendor/pygments-main/tests/examplefiles/example.prg +161 -0
  232. data/vendor/pygments-main/tests/examplefiles/example.rb +1852 -0
  233. data/vendor/pygments-main/tests/examplefiles/example.reg +19 -0
  234. data/vendor/pygments-main/tests/examplefiles/example.rexx +50 -0
  235. data/vendor/pygments-main/tests/examplefiles/example.rhtml +561 -0
  236. data/vendor/pygments-main/tests/examplefiles/example.rkt +95 -0
  237. data/vendor/pygments-main/tests/examplefiles/example.rpf +4 -0
  238. data/vendor/pygments-main/tests/examplefiles/example.sh-session +19 -0
  239. data/vendor/pygments-main/tests/examplefiles/example.shell-session +45 -0
  240. data/vendor/pygments-main/tests/examplefiles/example.sml +156 -0
  241. data/vendor/pygments-main/tests/examplefiles/example.snobol +15 -0
  242. data/vendor/pygments-main/tests/examplefiles/example.stan +108 -0
  243. data/vendor/pygments-main/tests/examplefiles/example.tea +34 -0
  244. data/vendor/pygments-main/tests/examplefiles/example.ts +28 -0
  245. data/vendor/pygments-main/tests/examplefiles/example.u +548 -0
  246. data/vendor/pygments-main/tests/examplefiles/example.weechatlog +9 -0
  247. data/vendor/pygments-main/tests/examplefiles/example.xhtml +376 -0
  248. data/vendor/pygments-main/tests/examplefiles/example.xtend +34 -0
  249. data/vendor/pygments-main/tests/examplefiles/example.yaml +302 -0
  250. data/vendor/pygments-main/tests/examplefiles/example2.aspx +29 -0
  251. data/vendor/pygments-main/tests/examplefiles/example2.msc +79 -0
  252. data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +363 -0
  253. data/vendor/pygments-main/tests/examplefiles/example_file.fy +128 -0
  254. data/vendor/pygments-main/tests/examplefiles/firefox.mak +586 -0
  255. data/vendor/pygments-main/tests/examplefiles/flipflop.sv +19 -0
  256. data/vendor/pygments-main/tests/examplefiles/foo.sce +6 -0
  257. data/vendor/pygments-main/tests/examplefiles/format.ml +1213 -0
  258. data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +77 -0
  259. data/vendor/pygments-main/tests/examplefiles/function.mu +1 -0
  260. data/vendor/pygments-main/tests/examplefiles/functional.rst +1472 -0
  261. data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +133 -0
  262. data/vendor/pygments-main/tests/examplefiles/genclass.clj +510 -0
  263. data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +193 -0
  264. data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +33 -0
  265. data/vendor/pygments-main/tests/examplefiles/glsl.frag +7 -0
  266. data/vendor/pygments-main/tests/examplefiles/glsl.vert +13 -0
  267. data/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +22 -0
  268. data/vendor/pygments-main/tests/examplefiles/hello.smali +40 -0
  269. data/vendor/pygments-main/tests/examplefiles/hello.sp +9 -0
  270. data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +1 -0
  271. data/vendor/pygments-main/tests/examplefiles/http_request_example +15 -0
  272. data/vendor/pygments-main/tests/examplefiles/http_response_example +29 -0
  273. data/vendor/pygments-main/tests/examplefiles/import.hs +4 -0
  274. data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +71 -0
  275. data/vendor/pygments-main/tests/examplefiles/intro.ik +24 -0
  276. data/vendor/pygments-main/tests/examplefiles/ints.php +10 -0
  277. data/vendor/pygments-main/tests/examplefiles/intsyn.fun +675 -0
  278. data/vendor/pygments-main/tests/examplefiles/intsyn.sig +286 -0
  279. data/vendor/pygments-main/tests/examplefiles/irb_heredoc +8 -0
  280. data/vendor/pygments-main/tests/examplefiles/irc.lsp +214 -0
  281. data/vendor/pygments-main/tests/examplefiles/java.properties +16 -0
  282. data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +28 -0
  283. data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +45 -0
  284. data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +713 -0
  285. data/vendor/pygments-main/tests/examplefiles/json.lasso +301 -0
  286. data/vendor/pygments-main/tests/examplefiles/json.lasso9 +213 -0
  287. data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +13 -0
  288. data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +47 -0
  289. data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +41 -0
  290. data/vendor/pygments-main/tests/examplefiles/logos_example.xm +28 -0
  291. data/vendor/pygments-main/tests/examplefiles/ltmain.sh +2849 -0
  292. data/vendor/pygments-main/tests/examplefiles/main.cmake +42 -0
  293. data/vendor/pygments-main/tests/examplefiles/markdown.lsp +679 -0
  294. data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +3 -0
  295. data/vendor/pygments-main/tests/examplefiles/matlab_sample +30 -0
  296. data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +37 -0
  297. data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +455 -0
  298. data/vendor/pygments-main/tests/examplefiles/mg_sample.pro +73 -0
  299. data/vendor/pygments-main/tests/examplefiles/minehunt.qml +112 -0
  300. data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +4 -0
  301. data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +340 -0
  302. data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +38 -0
  303. data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +95 -0
  304. data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +96 -0
  305. data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +30 -0
  306. data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +87 -0
  307. data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +118 -0
  308. data/vendor/pygments-main/tests/examplefiles/numbers.c +12 -0
  309. data/vendor/pygments-main/tests/examplefiles/objc_example.m +32 -0
  310. data/vendor/pygments-main/tests/examplefiles/objc_example2.m +24 -0
  311. data/vendor/pygments-main/tests/examplefiles/perl_misc +62 -0
  312. data/vendor/pygments-main/tests/examplefiles/perl_perl5db +998 -0
  313. data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +120 -0
  314. data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +856 -0
  315. data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +163 -0
  316. data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +567 -0
  317. data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +1223 -0
  318. data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +47 -0
  319. data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +10 -0
  320. data/vendor/pygments-main/tests/examplefiles/psql_session.txt +122 -0
  321. data/vendor/pygments-main/tests/examplefiles/py3_test.txt +2 -0
  322. data/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +4 -0
  323. data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +14 -0
  324. data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +2 -0
  325. data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +4 -0
  326. data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +234 -0
  327. data/vendor/pygments-main/tests/examplefiles/qsort.prolog +13 -0
  328. data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +38 -0
  329. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +280 -0
  330. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +2 -0
  331. data/vendor/pygments-main/tests/examplefiles/regex.js +22 -0
  332. data/vendor/pygments-main/tests/examplefiles/reversi.lsp +427 -0
  333. data/vendor/pygments-main/tests/examplefiles/robotframework.txt +39 -0
  334. data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +11 -0
  335. data/vendor/pygments-main/tests/examplefiles/rust_example.rs +233 -0
  336. data/vendor/pygments-main/tests/examplefiles/scilab.sci +30 -0
  337. data/vendor/pygments-main/tests/examplefiles/session.dylan-console +9 -0
  338. data/vendor/pygments-main/tests/examplefiles/sibling.prolog +19 -0
  339. data/vendor/pygments-main/tests/examplefiles/simple.md +747 -0
  340. data/vendor/pygments-main/tests/examplefiles/smarty_example.html +209 -0
  341. data/vendor/pygments-main/tests/examplefiles/source.lgt +343 -0
  342. data/vendor/pygments-main/tests/examplefiles/sources.list +62 -0
  343. data/vendor/pygments-main/tests/examplefiles/sphere.pov +18 -0
  344. data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +27 -0
  345. data/vendor/pygments-main/tests/examplefiles/squid.conf +30 -0
  346. data/vendor/pygments-main/tests/examplefiles/string.jl +1031 -0
  347. data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +21 -0
  348. data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +3 -0
  349. data/vendor/pygments-main/tests/examplefiles/swig_java.swg +1329 -0
  350. data/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +225 -0
  351. data/vendor/pygments-main/tests/examplefiles/test.R +153 -0
  352. data/vendor/pygments-main/tests/examplefiles/test.adb +211 -0
  353. data/vendor/pygments-main/tests/examplefiles/test.agda +102 -0
  354. data/vendor/pygments-main/tests/examplefiles/test.asy +131 -0
  355. data/vendor/pygments-main/tests/examplefiles/test.awk +121 -0
  356. data/vendor/pygments-main/tests/examplefiles/test.bas +29 -0
  357. data/vendor/pygments-main/tests/examplefiles/test.bb +95 -0
  358. data/vendor/pygments-main/tests/examplefiles/test.bmx +145 -0
  359. data/vendor/pygments-main/tests/examplefiles/test.boo +39 -0
  360. data/vendor/pygments-main/tests/examplefiles/test.bro +250 -0
  361. data/vendor/pygments-main/tests/examplefiles/test.cs +374 -0
  362. data/vendor/pygments-main/tests/examplefiles/test.css +54 -0
  363. data/vendor/pygments-main/tests/examplefiles/test.cu +36 -0
  364. data/vendor/pygments-main/tests/examplefiles/test.d +135 -0
  365. data/vendor/pygments-main/tests/examplefiles/test.dart +23 -0
  366. data/vendor/pygments-main/tests/examplefiles/test.dtd +89 -0
  367. data/vendor/pygments-main/tests/examplefiles/test.ebnf +31 -0
  368. data/vendor/pygments-main/tests/examplefiles/test.ec +605 -0
  369. data/vendor/pygments-main/tests/examplefiles/test.ecl +58 -0
  370. data/vendor/pygments-main/tests/examplefiles/test.eh +315 -0
  371. data/vendor/pygments-main/tests/examplefiles/test.erl +169 -0
  372. data/vendor/pygments-main/tests/examplefiles/test.evoque +33 -0
  373. data/vendor/pygments-main/tests/examplefiles/test.fan +818 -0
  374. data/vendor/pygments-main/tests/examplefiles/test.flx +57 -0
  375. data/vendor/pygments-main/tests/examplefiles/test.gdc +13 -0
  376. data/vendor/pygments-main/tests/examplefiles/test.groovy +97 -0
  377. data/vendor/pygments-main/tests/examplefiles/test.html +339 -0
  378. data/vendor/pygments-main/tests/examplefiles/test.ini +10 -0
  379. data/vendor/pygments-main/tests/examplefiles/test.java +653 -0
  380. data/vendor/pygments-main/tests/examplefiles/test.jsp +24 -0
  381. data/vendor/pygments-main/tests/examplefiles/test.maql +45 -0
  382. data/vendor/pygments-main/tests/examplefiles/test.mod +374 -0
  383. data/vendor/pygments-main/tests/examplefiles/test.moo +51 -0
  384. data/vendor/pygments-main/tests/examplefiles/test.myt +166 -0
  385. data/vendor/pygments-main/tests/examplefiles/test.nim +93 -0
  386. data/vendor/pygments-main/tests/examplefiles/test.opa +10 -0
  387. data/vendor/pygments-main/tests/examplefiles/test.p6 +252 -0
  388. data/vendor/pygments-main/tests/examplefiles/test.pas +743 -0
  389. data/vendor/pygments-main/tests/examplefiles/test.php +505 -0
  390. data/vendor/pygments-main/tests/examplefiles/test.plot +333 -0
  391. data/vendor/pygments-main/tests/examplefiles/test.ps1 +108 -0
  392. data/vendor/pygments-main/tests/examplefiles/test.pypylog +1839 -0
  393. data/vendor/pygments-main/tests/examplefiles/test.r3 +94 -0
  394. data/vendor/pygments-main/tests/examplefiles/test.rb +177 -0
  395. data/vendor/pygments-main/tests/examplefiles/test.rhtml +43 -0
  396. data/vendor/pygments-main/tests/examplefiles/test.scaml +8 -0
  397. data/vendor/pygments-main/tests/examplefiles/test.ssp +12 -0
  398. data/vendor/pygments-main/tests/examplefiles/test.tcsh +830 -0
  399. data/vendor/pygments-main/tests/examplefiles/test.vb +407 -0
  400. data/vendor/pygments-main/tests/examplefiles/test.vhdl +161 -0
  401. data/vendor/pygments-main/tests/examplefiles/test.xqy +138 -0
  402. data/vendor/pygments-main/tests/examplefiles/test.xsl +23 -0
  403. data/vendor/pygments-main/tests/examplefiles/test2.pypylog +120 -0
  404. data/vendor/pygments-main/tests/examplefiles/truncated.pytb +15 -0
  405. data/vendor/pygments-main/tests/examplefiles/type.lisp +1218 -0
  406. data/vendor/pygments-main/tests/examplefiles/underscore.coffee +603 -0
  407. data/vendor/pygments-main/tests/examplefiles/unicode.applescript +5 -0
  408. data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +11 -0
  409. data/vendor/pygments-main/tests/examplefiles/unix-io.lid +37 -0
  410. data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +3 -0
  411. data/vendor/pygments-main/tests/examplefiles/while.pov +13 -0
  412. data/vendor/pygments-main/tests/examplefiles/wiki.factor +384 -0
  413. data/vendor/pygments-main/tests/examplefiles/xml_example +1897 -0
  414. data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +798 -0
  415. data/vendor/pygments-main/tests/old_run.py +138 -0
  416. data/vendor/pygments-main/tests/run.py +49 -0
  417. data/vendor/pygments-main/tests/support/tags +36 -0
  418. data/vendor/pygments-main/tests/support.py +15 -0
  419. data/vendor/pygments-main/tests/test_basic_api.py +295 -0
  420. data/vendor/pygments-main/tests/test_clexer.py +31 -0
  421. data/vendor/pygments-main/tests/test_cmdline.py +105 -0
  422. data/vendor/pygments-main/tests/test_examplefiles.py +99 -0
  423. data/vendor/pygments-main/tests/test_html_formatter.py +178 -0
  424. data/vendor/pygments-main/tests/test_latex_formatter.py +55 -0
  425. data/vendor/pygments-main/tests/test_lexers_other.py +68 -0
  426. data/vendor/pygments-main/tests/test_perllexer.py +137 -0
  427. data/vendor/pygments-main/tests/test_regexlexer.py +47 -0
  428. data/vendor/pygments-main/tests/test_token.py +46 -0
  429. data/vendor/pygments-main/tests/test_using_api.py +40 -0
  430. data/vendor/pygments-main/tests/test_util.py +135 -0
  431. data/vendor/simplejson/.gitignore +10 -0
  432. data/vendor/simplejson/.travis.yml +5 -0
  433. data/vendor/simplejson/CHANGES.txt +291 -0
  434. data/vendor/simplejson/LICENSE.txt +19 -0
  435. data/vendor/simplejson/MANIFEST.in +5 -0
  436. data/vendor/simplejson/README.rst +19 -0
  437. data/vendor/simplejson/conf.py +179 -0
  438. data/vendor/simplejson/index.rst +628 -0
  439. data/vendor/simplejson/scripts/make_docs.py +18 -0
  440. data/vendor/simplejson/setup.py +104 -0
  441. data/vendor/simplejson/simplejson/__init__.py +510 -0
  442. data/vendor/simplejson/simplejson/_speedups.c +2745 -0
  443. data/vendor/simplejson/simplejson/decoder.py +425 -0
  444. data/vendor/simplejson/simplejson/encoder.py +567 -0
  445. data/vendor/simplejson/simplejson/ordered_dict.py +119 -0
  446. data/vendor/simplejson/simplejson/scanner.py +77 -0
  447. data/vendor/simplejson/simplejson/tests/__init__.py +67 -0
  448. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +55 -0
  449. data/vendor/simplejson/simplejson/tests/test_check_circular.py +30 -0
  450. data/vendor/simplejson/simplejson/tests/test_decimal.py +66 -0
  451. data/vendor/simplejson/simplejson/tests/test_decode.py +83 -0
  452. data/vendor/simplejson/simplejson/tests/test_default.py +9 -0
  453. data/vendor/simplejson/simplejson/tests/test_dump.py +67 -0
  454. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +46 -0
  455. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +32 -0
  456. data/vendor/simplejson/simplejson/tests/test_errors.py +34 -0
  457. data/vendor/simplejson/simplejson/tests/test_fail.py +91 -0
  458. data/vendor/simplejson/simplejson/tests/test_float.py +19 -0
  459. data/vendor/simplejson/simplejson/tests/test_indent.py +86 -0
  460. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +20 -0
  461. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +121 -0
  462. data/vendor/simplejson/simplejson/tests/test_pass1.py +76 -0
  463. data/vendor/simplejson/simplejson/tests/test_pass2.py +14 -0
  464. data/vendor/simplejson/simplejson/tests/test_pass3.py +20 -0
  465. data/vendor/simplejson/simplejson/tests/test_recursion.py +67 -0
  466. data/vendor/simplejson/simplejson/tests/test_scanstring.py +117 -0
  467. data/vendor/simplejson/simplejson/tests/test_separators.py +42 -0
  468. data/vendor/simplejson/simplejson/tests/test_speedups.py +20 -0
  469. data/vendor/simplejson/simplejson/tests/test_tuple.py +49 -0
  470. data/vendor/simplejson/simplejson/tests/test_unicode.py +109 -0
  471. data/vendor/simplejson/simplejson/tool.py +39 -0
  472. metadata +566 -0
@@ -0,0 +1,277 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ pygments.util
4
+ ~~~~~~~~~~~~~
5
+
6
+ Utility functions.
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 sys
14
+ import codecs
15
+
16
+
17
+ split_path_re = re.compile(r'[/\\ ]')
18
+ doctype_lookup_re = re.compile(r'''(?smx)
19
+ (<\?.*?\?>)?\s*
20
+ <!DOCTYPE\s+(
21
+ [a-zA-Z_][a-zA-Z0-9]*\s+
22
+ [a-zA-Z_][a-zA-Z0-9]*\s+
23
+ "[^"]*")
24
+ [^>]*>
25
+ ''')
26
+ tag_re = re.compile(r'<(.+?)(\s.*?)?>.*?</.+?>(?uism)')
27
+
28
+
29
+ class ClassNotFound(ValueError):
30
+ """
31
+ If one of the get_*_by_* functions didn't find a matching class.
32
+ """
33
+
34
+
35
+ class OptionError(Exception):
36
+ pass
37
+
38
+
39
+ def get_choice_opt(options, optname, allowed, default=None, normcase=False):
40
+ string = options.get(optname, default)
41
+ if normcase:
42
+ string = string.lower()
43
+ if string not in allowed:
44
+ raise OptionError('Value for option %s must be one of %s' %
45
+ (optname, ', '.join(map(str, allowed))))
46
+ return string
47
+
48
+
49
+ def get_bool_opt(options, optname, default=None):
50
+ string = options.get(optname, default)
51
+ if isinstance(string, bool):
52
+ return string
53
+ elif isinstance(string, int):
54
+ return bool(string)
55
+ elif not isinstance(string, basestring):
56
+ raise OptionError('Invalid type %r for option %s; use '
57
+ '1/0, yes/no, true/false, on/off' % (
58
+ string, optname))
59
+ elif string.lower() in ('1', 'yes', 'true', 'on'):
60
+ return True
61
+ elif string.lower() in ('0', 'no', 'false', 'off'):
62
+ return False
63
+ else:
64
+ raise OptionError('Invalid value %r for option %s; use '
65
+ '1/0, yes/no, true/false, on/off' % (
66
+ string, optname))
67
+
68
+
69
+ def get_int_opt(options, optname, default=None):
70
+ string = options.get(optname, default)
71
+ try:
72
+ return int(string)
73
+ except TypeError:
74
+ raise OptionError('Invalid type %r for option %s; you '
75
+ 'must give an integer value' % (
76
+ string, optname))
77
+ except ValueError:
78
+ raise OptionError('Invalid value %r for option %s; you '
79
+ 'must give an integer value' % (
80
+ string, optname))
81
+
82
+
83
+ def get_list_opt(options, optname, default=None):
84
+ val = options.get(optname, default)
85
+ if isinstance(val, basestring):
86
+ return val.split()
87
+ elif isinstance(val, (list, tuple)):
88
+ return list(val)
89
+ else:
90
+ raise OptionError('Invalid type %r for option %s; you '
91
+ 'must give a list value' % (
92
+ val, optname))
93
+
94
+
95
+ def docstring_headline(obj):
96
+ if not obj.__doc__:
97
+ return ''
98
+ res = []
99
+ for line in obj.__doc__.strip().splitlines():
100
+ if line.strip():
101
+ res.append(" " + line.strip())
102
+ else:
103
+ break
104
+ return ''.join(res).lstrip()
105
+
106
+
107
+ def make_analysator(f):
108
+ """
109
+ Return a static text analysation function that
110
+ returns float values.
111
+ """
112
+ def text_analyse(text):
113
+ try:
114
+ rv = f(text)
115
+ except Exception:
116
+ return 0.0
117
+ if not rv:
118
+ return 0.0
119
+ try:
120
+ return min(1.0, max(0.0, float(rv)))
121
+ except (ValueError, TypeError):
122
+ return 0.0
123
+ text_analyse.__doc__ = f.__doc__
124
+ return staticmethod(text_analyse)
125
+
126
+
127
+ def shebang_matches(text, regex):
128
+ """
129
+ Check if the given regular expression matches the last part of the
130
+ shebang if one exists.
131
+
132
+ >>> from pygments.util import shebang_matches
133
+ >>> shebang_matches('#!/usr/bin/env python', r'python(2\.\d)?')
134
+ True
135
+ >>> shebang_matches('#!/usr/bin/python2.4', r'python(2\.\d)?')
136
+ True
137
+ >>> shebang_matches('#!/usr/bin/python-ruby', r'python(2\.\d)?')
138
+ False
139
+ >>> shebang_matches('#!/usr/bin/python/ruby', r'python(2\.\d)?')
140
+ False
141
+ >>> shebang_matches('#!/usr/bin/startsomethingwith python',
142
+ ... r'python(2\.\d)?')
143
+ True
144
+
145
+ It also checks for common windows executable file extensions::
146
+
147
+ >>> shebang_matches('#!C:\\Python2.4\\Python.exe', r'python(2\.\d)?')
148
+ True
149
+
150
+ Parameters (``'-f'`` or ``'--foo'`` are ignored so ``'perl'`` does
151
+ the same as ``'perl -e'``)
152
+
153
+ Note that this method automatically searches the whole string (eg:
154
+ the regular expression is wrapped in ``'^$'``)
155
+ """
156
+ index = text.find('\n')
157
+ if index >= 0:
158
+ first_line = text[:index].lower()
159
+ else:
160
+ first_line = text.lower()
161
+ if first_line.startswith('#!'):
162
+ try:
163
+ found = [x for x in split_path_re.split(first_line[2:].strip())
164
+ if x and not x.startswith('-')][-1]
165
+ except IndexError:
166
+ return False
167
+ regex = re.compile('^%s(\.(exe|cmd|bat|bin))?$' % regex, re.IGNORECASE)
168
+ if regex.search(found) is not None:
169
+ return True
170
+ return False
171
+
172
+
173
+ def doctype_matches(text, regex):
174
+ """
175
+ Check if the doctype matches a regular expression (if present).
176
+ Note that this method only checks the first part of a DOCTYPE.
177
+ eg: 'html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
178
+ """
179
+ m = doctype_lookup_re.match(text)
180
+ if m is None:
181
+ return False
182
+ doctype = m.group(2)
183
+ return re.compile(regex).match(doctype.strip()) is not None
184
+
185
+
186
+ def html_doctype_matches(text):
187
+ """
188
+ Check if the file looks like it has a html doctype.
189
+ """
190
+ return doctype_matches(text, r'html\s+PUBLIC\s+"-//W3C//DTD X?HTML.*')
191
+
192
+
193
+ _looks_like_xml_cache = {}
194
+ def looks_like_xml(text):
195
+ """
196
+ Check if a doctype exists or if we have some tags.
197
+ """
198
+ key = hash(text)
199
+ try:
200
+ return _looks_like_xml_cache[key]
201
+ except KeyError:
202
+ m = doctype_lookup_re.match(text)
203
+ if m is not None:
204
+ return True
205
+ rv = tag_re.search(text[:1000]) is not None
206
+ _looks_like_xml_cache[key] = rv
207
+ return rv
208
+
209
+ # Python narrow build compatibility
210
+
211
+ def _surrogatepair(c):
212
+ return (0xd7c0 + (c >> 10), (0xdc00 + (c & 0x3ff)))
213
+
214
+ def unirange(a, b):
215
+ """
216
+ Returns a regular expression string to match the given non-BMP range.
217
+ """
218
+ if b < a:
219
+ raise ValueError("Bad character range")
220
+ if a < 0x10000 or b < 0x10000:
221
+ raise ValueError("unirange is only defined for non-BMP ranges")
222
+
223
+ if sys.maxunicode > 0xffff:
224
+ # wide build
225
+ return u'[%s-%s]' % (unichr(a), unichr(b))
226
+ else:
227
+ # narrow build stores surrogates, and the 're' module handles them
228
+ # (incorrectly) as characters. Since there is still ordering among
229
+ # these characters, expand the range to one that it understands. Some
230
+ # background in http://bugs.python.org/issue3665 and
231
+ # http://bugs.python.org/issue12749
232
+ #
233
+ # Additionally, the lower constants are using unichr rather than
234
+ # literals because jython [which uses the wide path] can't load this
235
+ # file if they are literals.
236
+ ah, al = _surrogatepair(a)
237
+ bh, bl = _surrogatepair(b)
238
+ if ah == bh:
239
+ return u'(?:%s[%s-%s])' % (unichr(ah), unichr(al), unichr(bl))
240
+ else:
241
+ buf = []
242
+ buf.append(u'%s[%s-%s]' %
243
+ (unichr(ah), unichr(al),
244
+ ah == bh and unichr(bl) or unichr(0xdfff)))
245
+ if ah - bh > 1:
246
+ buf.append(u'[%s-%s][%s-%s]' %
247
+ unichr(ah+1), unichr(bh-1), unichr(0xdc00), unichr(0xdfff))
248
+ if ah != bh:
249
+ buf.append(u'%s[%s-%s]' %
250
+ (unichr(bh), unichr(0xdc00), unichr(bl)))
251
+
252
+ return u'(?:' + u'|'.join(buf) + u')'
253
+
254
+ # Python 2/3 compatibility
255
+
256
+ if sys.version_info < (3,0):
257
+ b = bytes = str
258
+ u_prefix = 'u'
259
+ import StringIO, cStringIO
260
+ BytesIO = cStringIO.StringIO
261
+ StringIO = StringIO.StringIO
262
+ uni_open = codecs.open
263
+ else:
264
+ import builtins
265
+ bytes = builtins.bytes
266
+ u_prefix = ''
267
+ def b(s):
268
+ if isinstance(s, str):
269
+ return bytes(map(ord, s))
270
+ elif isinstance(s, bytes):
271
+ return s
272
+ else:
273
+ raise TypeError("Invalid argument %r for b()" % (s,))
274
+ import io
275
+ BytesIO = io.BytesIO
276
+ StringIO = io.StringIO
277
+ uni_open = builtins.open
@@ -0,0 +1,242 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Checker for file headers
5
+ ~~~~~~~~~~~~~~~~~~~~~~~~
6
+
7
+ Make sure each Python file has a correct file header
8
+ including copyright and license information.
9
+
10
+ :copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
11
+ :license: BSD, see LICENSE for details.
12
+ """
13
+
14
+ import sys, os, re
15
+ import getopt
16
+ import cStringIO
17
+ from os.path import join, splitext, abspath
18
+
19
+
20
+ checkers = {}
21
+
22
+ def checker(*suffixes, **kwds):
23
+ only_pkg = kwds.pop('only_pkg', False)
24
+ def deco(func):
25
+ for suffix in suffixes:
26
+ checkers.setdefault(suffix, []).append(func)
27
+ func.only_pkg = only_pkg
28
+ return func
29
+ return deco
30
+
31
+
32
+ name_mail_re = r'[\w ]+(<.*?>)?'
33
+ copyright_re = re.compile(r'^ :copyright: Copyright 2006-2013 by '
34
+ r'the Pygments team, see AUTHORS\.$', re.UNICODE)
35
+ copyright_2_re = re.compile(r'^ %s(, %s)*[,.]$' %
36
+ (name_mail_re, name_mail_re), re.UNICODE)
37
+ coding_re = re.compile(r'coding[:=]\s*([-\w.]+)')
38
+ not_ix_re = re.compile(r'\bnot\s+\S+?\s+i[sn]\s\S+')
39
+ is_const_re = re.compile(r'if.*?==\s+(None|False|True)\b')
40
+
41
+ misspellings = ["developement", "adress", "verificate", # ALLOW-MISSPELLING
42
+ "informations"] # ALLOW-MISSPELLING
43
+
44
+
45
+ @checker('.py')
46
+ def check_syntax(fn, lines):
47
+ try:
48
+ compile(''.join(lines), fn, "exec")
49
+ except SyntaxError, err:
50
+ yield 0, "not compilable: %s" % err
51
+
52
+
53
+ @checker('.py')
54
+ def check_style_and_encoding(fn, lines):
55
+ encoding = 'ascii'
56
+ for lno, line in enumerate(lines):
57
+ if len(line) > 90:
58
+ yield lno+1, "line too long"
59
+ m = not_ix_re.search(line)
60
+ if m:
61
+ yield lno+1, '"' + m.group() + '"'
62
+ if is_const_re.search(line):
63
+ yield lno+1, 'using == None/True/False'
64
+ if lno < 2:
65
+ co = coding_re.search(line)
66
+ if co:
67
+ encoding = co.group(1)
68
+ try:
69
+ line.decode(encoding)
70
+ except UnicodeDecodeError, err:
71
+ yield lno+1, "not decodable: %s\n Line: %r" % (err, line)
72
+ except LookupError, err:
73
+ yield 0, "unknown encoding: %s" % encoding
74
+ encoding = 'latin1'
75
+
76
+
77
+ @checker('.py', only_pkg=True)
78
+ def check_fileheader(fn, lines):
79
+ # line number correction
80
+ c = 1
81
+ if lines[0:1] == ['#!/usr/bin/env python\n']:
82
+ lines = lines[1:]
83
+ c = 2
84
+
85
+ llist = []
86
+ docopen = False
87
+ for lno, l in enumerate(lines):
88
+ llist.append(l)
89
+ if lno == 0:
90
+ if l == '# -*- coding: rot13 -*-\n':
91
+ # special-case pony package
92
+ return
93
+ elif l != '# -*- coding: utf-8 -*-\n':
94
+ yield 1, "missing coding declaration"
95
+ elif lno == 1:
96
+ if l != '"""\n' and l != 'r"""\n':
97
+ yield 2, 'missing docstring begin (""")'
98
+ else:
99
+ docopen = True
100
+ elif docopen:
101
+ if l == '"""\n':
102
+ # end of docstring
103
+ if lno <= 4:
104
+ yield lno+c, "missing module name in docstring"
105
+ break
106
+
107
+ if l != "\n" and l[:4] != ' ' and docopen:
108
+ yield lno+c, "missing correct docstring indentation"
109
+
110
+ if lno == 2:
111
+ # if not in package, don't check the module name
112
+ modname = fn[:-3].replace('/', '.').replace('.__init__', '')
113
+ while modname:
114
+ if l.lower()[4:-1] == modname:
115
+ break
116
+ modname = '.'.join(modname.split('.')[1:])
117
+ else:
118
+ yield 3, "wrong module name in docstring heading"
119
+ modnamelen = len(l.strip())
120
+ elif lno == 3:
121
+ if l.strip() != modnamelen * "~":
122
+ yield 4, "wrong module name underline, should be ~~~...~"
123
+
124
+ else:
125
+ yield 0, "missing end and/or start of docstring..."
126
+
127
+ # check for copyright and license fields
128
+ license = llist[-2:-1]
129
+ if license != [" :license: BSD, see LICENSE for details.\n"]:
130
+ yield 0, "no correct license info"
131
+
132
+ ci = -3
133
+ copyright = [s.decode('utf-8') for s in llist[ci:ci+1]]
134
+ while copyright and copyright_2_re.match(copyright[0]):
135
+ ci -= 1
136
+ copyright = llist[ci:ci+1]
137
+ if not copyright or not copyright_re.match(copyright[0]):
138
+ yield 0, "no correct copyright info"
139
+
140
+
141
+ @checker('.py', '.html', '.js')
142
+ def check_whitespace_and_spelling(fn, lines):
143
+ for lno, line in enumerate(lines):
144
+ if "\t" in line:
145
+ yield lno+1, "OMG TABS!!!1 "
146
+ if line[:-1].rstrip(' \t') != line[:-1]:
147
+ yield lno+1, "trailing whitespace"
148
+ for word in misspellings:
149
+ if word in line and 'ALLOW-MISSPELLING' not in line:
150
+ yield lno+1, '"%s" used' % word
151
+
152
+
153
+ bad_tags = ('<b>', '<i>', '<u>', '<s>', '<strike>'
154
+ '<center>', '<big>', '<small>', '<font')
155
+
156
+ @checker('.html')
157
+ def check_xhtml(fn, lines):
158
+ for lno, line in enumerate(lines):
159
+ for bad_tag in bad_tags:
160
+ if bad_tag in line:
161
+ yield lno+1, "used " + bad_tag
162
+
163
+
164
+ def main(argv):
165
+ try:
166
+ gopts, args = getopt.getopt(argv[1:], "vi:")
167
+ except getopt.GetoptError:
168
+ print "Usage: %s [-v] [-i ignorepath]* [path]" % argv[0]
169
+ return 2
170
+ opts = {}
171
+ for opt, val in gopts:
172
+ if opt == '-i':
173
+ val = abspath(val)
174
+ opts.setdefault(opt, []).append(val)
175
+
176
+ if len(args) == 0:
177
+ path = '.'
178
+ elif len(args) == 1:
179
+ path = args[0]
180
+ else:
181
+ print "Usage: %s [-v] [-i ignorepath]* [path]" % argv[0]
182
+ return 2
183
+
184
+ verbose = '-v' in opts
185
+
186
+ num = 0
187
+ out = cStringIO.StringIO()
188
+
189
+ # TODO: replace os.walk run with iteration over output of
190
+ # `svn list -R`.
191
+
192
+ for root, dirs, files in os.walk(path):
193
+ if '.svn' in dirs:
194
+ dirs.remove('.svn')
195
+ if '-i' in opts and abspath(root) in opts['-i']:
196
+ del dirs[:]
197
+ continue
198
+ # XXX: awkward: for the Makefile call: don't check non-package
199
+ # files for file headers
200
+ in_pocoo_pkg = root.startswith('./pygments')
201
+ for fn in files:
202
+
203
+ fn = join(root, fn)
204
+ if fn[:2] == './': fn = fn[2:]
205
+
206
+ if '-i' in opts and abspath(fn) in opts['-i']:
207
+ continue
208
+
209
+ ext = splitext(fn)[1]
210
+ checkerlist = checkers.get(ext, None)
211
+ if not checkerlist:
212
+ continue
213
+
214
+ if verbose:
215
+ print "Checking %s..." % fn
216
+
217
+ try:
218
+ f = open(fn, 'r')
219
+ lines = list(f)
220
+ except (IOError, OSError), err:
221
+ print "%s: cannot open: %s" % (fn, err)
222
+ num += 1
223
+ continue
224
+
225
+ for checker in checkerlist:
226
+ if not in_pocoo_pkg and checker.only_pkg:
227
+ continue
228
+ for lno, msg in checker(fn, lines):
229
+ print >>out, "%s:%d: %s" % (fn, lno, msg)
230
+ num += 1
231
+ if verbose:
232
+ print
233
+ if num == 0:
234
+ print "No errors found."
235
+ else:
236
+ print out.getvalue().rstrip('\n')
237
+ print "%d error%s found." % (num, num > 1 and "s" or "")
238
+ return int(num > 0)
239
+
240
+
241
+ if __name__ == '__main__':
242
+ sys.exit(main(sys.argv))
@@ -0,0 +1,32 @@
1
+ import sys
2
+
3
+ from pygments.lexers import get_all_lexers, find_lexer_class
4
+ from pygments.lexer import Lexer
5
+
6
+ def main():
7
+ uses = {}
8
+
9
+ for name, aliases, filenames, mimetypes in get_all_lexers():
10
+ cls = find_lexer_class(name)
11
+ if not cls.aliases:
12
+ print cls, "has no aliases"
13
+ for f in filenames:
14
+ if f not in uses:
15
+ uses[f] = []
16
+ uses[f].append(cls)
17
+
18
+ ret = 0
19
+ for k, v in uses.iteritems():
20
+ if len(v) > 1:
21
+ #print "Multiple for", k, v
22
+ for i in v:
23
+ if i.analyse_text is None:
24
+ print i, "has a None analyse_text"
25
+ ret |= 1
26
+ elif Lexer.analyse_text.__doc__ == i.analyse_text.__doc__:
27
+ print i, "needs analyse_text, multiple lexers for", k
28
+ ret |= 2
29
+ return ret
30
+
31
+ if __name__ == '__main__':
32
+ sys.exit(main())