gitlab-pygments.rb 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (399) hide show
  1. data/.gitignore +6 -0
  2. data/Gemfile +2 -0
  3. data/README.md +91 -0
  4. data/Rakefile +78 -0
  5. data/bench.rb +22 -0
  6. data/cache-lexers.rb +8 -0
  7. data/lexers +0 -0
  8. data/lib/pygments/lexer.rb +148 -0
  9. data/lib/pygments/mentos.py +344 -0
  10. data/lib/pygments/popen.rb +389 -0
  11. data/lib/pygments/version.rb +3 -0
  12. data/lib/pygments.rb +8 -0
  13. data/pygments.rb.gemspec +24 -0
  14. data/test/test_data.c +2581 -0
  15. data/test/test_data.py +514 -0
  16. data/test/test_data_generated +2582 -0
  17. data/test/test_pygments.rb +276 -0
  18. data/vendor/custom_formatters/gitlab.py +171 -0
  19. data/vendor/custom_lexers/github.py +362 -0
  20. data/vendor/pygments-main/AUTHORS +115 -0
  21. data/vendor/pygments-main/CHANGES +762 -0
  22. data/vendor/pygments-main/LICENSE +25 -0
  23. data/vendor/pygments-main/MANIFEST.in +6 -0
  24. data/vendor/pygments-main/Makefile +59 -0
  25. data/vendor/pygments-main/REVISION +1 -0
  26. data/vendor/pygments-main/TODO +15 -0
  27. data/vendor/pygments-main/docs/generate.py +472 -0
  28. data/vendor/pygments-main/docs/pygmentize.1 +94 -0
  29. data/vendor/pygments-main/docs/src/api.txt +270 -0
  30. data/vendor/pygments-main/docs/src/authors.txt +5 -0
  31. data/vendor/pygments-main/docs/src/changelog.txt +5 -0
  32. data/vendor/pygments-main/docs/src/cmdline.txt +147 -0
  33. data/vendor/pygments-main/docs/src/filterdevelopment.txt +70 -0
  34. data/vendor/pygments-main/docs/src/filters.txt +42 -0
  35. data/vendor/pygments-main/docs/src/formatterdevelopment.txt +169 -0
  36. data/vendor/pygments-main/docs/src/formatters.txt +48 -0
  37. data/vendor/pygments-main/docs/src/index.txt +69 -0
  38. data/vendor/pygments-main/docs/src/installation.txt +71 -0
  39. data/vendor/pygments-main/docs/src/integrate.txt +43 -0
  40. data/vendor/pygments-main/docs/src/lexerdevelopment.txt +551 -0
  41. data/vendor/pygments-main/docs/src/lexers.txt +67 -0
  42. data/vendor/pygments-main/docs/src/moinmoin.txt +39 -0
  43. data/vendor/pygments-main/docs/src/plugins.txt +93 -0
  44. data/vendor/pygments-main/docs/src/quickstart.txt +202 -0
  45. data/vendor/pygments-main/docs/src/rstdirective.txt +22 -0
  46. data/vendor/pygments-main/docs/src/styles.txt +143 -0
  47. data/vendor/pygments-main/docs/src/tokens.txt +349 -0
  48. data/vendor/pygments-main/docs/src/unicode.txt +49 -0
  49. data/vendor/pygments-main/external/markdown-processor.py +67 -0
  50. data/vendor/pygments-main/external/moin-parser.py +112 -0
  51. data/vendor/pygments-main/external/pygments.bashcomp +38 -0
  52. data/vendor/pygments-main/external/rst-directive-old.py +77 -0
  53. data/vendor/pygments-main/external/rst-directive.py +83 -0
  54. data/vendor/pygments-main/ez_setup.py +276 -0
  55. data/vendor/pygments-main/pygmentize +7 -0
  56. data/vendor/pygments-main/pygments/__init__.py +91 -0
  57. data/vendor/pygments-main/pygments/cmdline.py +433 -0
  58. data/vendor/pygments-main/pygments/console.py +74 -0
  59. data/vendor/pygments-main/pygments/filter.py +74 -0
  60. data/vendor/pygments-main/pygments/filters/__init__.py +357 -0
  61. data/vendor/pygments-main/pygments/formatter.py +92 -0
  62. data/vendor/pygments-main/pygments/formatters/__init__.py +68 -0
  63. data/vendor/pygments-main/pygments/formatters/_mapping.py +94 -0
  64. data/vendor/pygments-main/pygments/formatters/bbcode.py +109 -0
  65. data/vendor/pygments-main/pygments/formatters/gitlab.py +171 -0
  66. data/vendor/pygments-main/pygments/formatters/html.py +750 -0
  67. data/vendor/pygments-main/pygments/formatters/img.py +553 -0
  68. data/vendor/pygments-main/pygments/formatters/latex.py +378 -0
  69. data/vendor/pygments-main/pygments/formatters/other.py +117 -0
  70. data/vendor/pygments-main/pygments/formatters/rtf.py +136 -0
  71. data/vendor/pygments-main/pygments/formatters/svg.py +154 -0
  72. data/vendor/pygments-main/pygments/formatters/terminal.py +112 -0
  73. data/vendor/pygments-main/pygments/formatters/terminal256.py +222 -0
  74. data/vendor/pygments-main/pygments/lexer.py +697 -0
  75. data/vendor/pygments-main/pygments/lexers/__init__.py +229 -0
  76. data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1645 -0
  77. data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +232 -0
  78. data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +249 -0
  79. data/vendor/pygments-main/pygments/lexers/_mapping.py +298 -0
  80. data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +3787 -0
  81. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +232 -0
  82. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +29 -0
  83. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +3 -0
  84. data/vendor/pygments-main/pygments/lexers/agile.py +1803 -0
  85. data/vendor/pygments-main/pygments/lexers/asm.py +360 -0
  86. data/vendor/pygments-main/pygments/lexers/compiled.py +2891 -0
  87. data/vendor/pygments-main/pygments/lexers/dotnet.py +636 -0
  88. data/vendor/pygments-main/pygments/lexers/functional.py +1832 -0
  89. data/vendor/pygments-main/pygments/lexers/github.py +362 -0
  90. data/vendor/pygments-main/pygments/lexers/hdl.py +356 -0
  91. data/vendor/pygments-main/pygments/lexers/jvm.py +847 -0
  92. data/vendor/pygments-main/pygments/lexers/math.py +1072 -0
  93. data/vendor/pygments-main/pygments/lexers/other.py +3339 -0
  94. data/vendor/pygments-main/pygments/lexers/parsers.py +695 -0
  95. data/vendor/pygments-main/pygments/lexers/shell.py +361 -0
  96. data/vendor/pygments-main/pygments/lexers/special.py +100 -0
  97. data/vendor/pygments-main/pygments/lexers/sql.py +559 -0
  98. data/vendor/pygments-main/pygments/lexers/templates.py +1631 -0
  99. data/vendor/pygments-main/pygments/lexers/text.py +1753 -0
  100. data/vendor/pygments-main/pygments/lexers/web.py +2864 -0
  101. data/vendor/pygments-main/pygments/plugin.py +74 -0
  102. data/vendor/pygments-main/pygments/scanner.py +104 -0
  103. data/vendor/pygments-main/pygments/style.py +117 -0
  104. data/vendor/pygments-main/pygments/styles/__init__.py +70 -0
  105. data/vendor/pygments-main/pygments/styles/autumn.py +65 -0
  106. data/vendor/pygments-main/pygments/styles/borland.py +51 -0
  107. data/vendor/pygments-main/pygments/styles/bw.py +49 -0
  108. data/vendor/pygments-main/pygments/styles/colorful.py +81 -0
  109. data/vendor/pygments-main/pygments/styles/default.py +73 -0
  110. data/vendor/pygments-main/pygments/styles/emacs.py +72 -0
  111. data/vendor/pygments-main/pygments/styles/friendly.py +72 -0
  112. data/vendor/pygments-main/pygments/styles/fruity.py +42 -0
  113. data/vendor/pygments-main/pygments/styles/manni.py +75 -0
  114. data/vendor/pygments-main/pygments/styles/monokai.py +106 -0
  115. data/vendor/pygments-main/pygments/styles/murphy.py +80 -0
  116. data/vendor/pygments-main/pygments/styles/native.py +65 -0
  117. data/vendor/pygments-main/pygments/styles/pastie.py +75 -0
  118. data/vendor/pygments-main/pygments/styles/perldoc.py +69 -0
  119. data/vendor/pygments-main/pygments/styles/rrt.py +33 -0
  120. data/vendor/pygments-main/pygments/styles/tango.py +141 -0
  121. data/vendor/pygments-main/pygments/styles/trac.py +63 -0
  122. data/vendor/pygments-main/pygments/styles/vim.py +63 -0
  123. data/vendor/pygments-main/pygments/styles/vs.py +38 -0
  124. data/vendor/pygments-main/pygments/token.py +195 -0
  125. data/vendor/pygments-main/pygments/unistring.py +130 -0
  126. data/vendor/pygments-main/pygments/util.py +232 -0
  127. data/vendor/pygments-main/scripts/check_sources.py +242 -0
  128. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +30 -0
  129. data/vendor/pygments-main/scripts/epydoc.css +280 -0
  130. data/vendor/pygments-main/scripts/find_codetags.py +205 -0
  131. data/vendor/pygments-main/scripts/find_error.py +171 -0
  132. data/vendor/pygments-main/scripts/get_vimkw.py +43 -0
  133. data/vendor/pygments-main/scripts/pylintrc +301 -0
  134. data/vendor/pygments-main/scripts/reindent.py +291 -0
  135. data/vendor/pygments-main/scripts/vim2pygments.py +933 -0
  136. data/vendor/pygments-main/setup.cfg +6 -0
  137. data/vendor/pygments-main/setup.py +88 -0
  138. data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +37 -0
  139. data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +869 -0
  140. data/vendor/pygments-main/tests/dtds/HTML4.dcl +88 -0
  141. data/vendor/pygments-main/tests/dtds/HTML4.dtd +1092 -0
  142. data/vendor/pygments-main/tests/dtds/HTML4.soc +9 -0
  143. data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +195 -0
  144. data/vendor/pygments-main/tests/dtds/HTMLspec.ent +77 -0
  145. data/vendor/pygments-main/tests/dtds/HTMLsym.ent +241 -0
  146. data/vendor/pygments-main/tests/examplefiles/ANTLRv3.g +608 -0
  147. data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +209 -0
  148. data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +102 -0
  149. data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +611 -0
  150. data/vendor/pygments-main/tests/examplefiles/Constants.mo +158 -0
  151. data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +411 -0
  152. data/vendor/pygments-main/tests/examplefiles/Errors.scala +18 -0
  153. data/vendor/pygments-main/tests/examplefiles/File.hy +174 -0
  154. data/vendor/pygments-main/tests/examplefiles/Intro.java +1660 -0
  155. data/vendor/pygments-main/tests/examplefiles/Makefile +1131 -0
  156. data/vendor/pygments-main/tests/examplefiles/Object.st +4394 -0
  157. data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +584 -0
  158. data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +378 -0
  159. data/vendor/pygments-main/tests/examplefiles/Sorting.mod +470 -0
  160. data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +382 -0
  161. data/vendor/pygments-main/tests/examplefiles/addressbook.proto +30 -0
  162. data/vendor/pygments-main/tests/examplefiles/antlr_throws +1 -0
  163. data/vendor/pygments-main/tests/examplefiles/apache2.conf +393 -0
  164. data/vendor/pygments-main/tests/examplefiles/as3_test.as +143 -0
  165. data/vendor/pygments-main/tests/examplefiles/as3_test2.as +46 -0
  166. data/vendor/pygments-main/tests/examplefiles/as3_test3.as +3 -0
  167. data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +27 -0
  168. data/vendor/pygments-main/tests/examplefiles/badcase.java +2 -0
  169. data/vendor/pygments-main/tests/examplefiles/batchfile.bat +49 -0
  170. data/vendor/pygments-main/tests/examplefiles/boot-9.scm +1557 -0
  171. data/vendor/pygments-main/tests/examplefiles/cells.ps +515 -0
  172. data/vendor/pygments-main/tests/examplefiles/ceval.c +2604 -0
  173. data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +13 -0
  174. data/vendor/pygments-main/tests/examplefiles/classes.dylan +40 -0
  175. data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +10 -0
  176. data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +447 -0
  177. data/vendor/pygments-main/tests/examplefiles/database.pytb +20 -0
  178. data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +2461 -0
  179. data/vendor/pygments-main/tests/examplefiles/demo.ahk +181 -0
  180. data/vendor/pygments-main/tests/examplefiles/demo.cfm +38 -0
  181. data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +68 -0
  182. data/vendor/pygments-main/tests/examplefiles/dwarf.cw +17 -0
  183. data/vendor/pygments-main/tests/examplefiles/erl_session +10 -0
  184. data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +1 -0
  185. data/vendor/pygments-main/tests/examplefiles/evil_regex.js +48 -0
  186. data/vendor/pygments-main/tests/examplefiles/example.c +2080 -0
  187. data/vendor/pygments-main/tests/examplefiles/example.cls +15 -0
  188. data/vendor/pygments-main/tests/examplefiles/example.cpp +2363 -0
  189. data/vendor/pygments-main/tests/examplefiles/example.gs +106 -0
  190. data/vendor/pygments-main/tests/examplefiles/example.gst +7 -0
  191. data/vendor/pygments-main/tests/examplefiles/example.kt +47 -0
  192. data/vendor/pygments-main/tests/examplefiles/example.lua +250 -0
  193. data/vendor/pygments-main/tests/examplefiles/example.moo +26 -0
  194. data/vendor/pygments-main/tests/examplefiles/example.moon +629 -0
  195. data/vendor/pygments-main/tests/examplefiles/example.nim +1010 -0
  196. data/vendor/pygments-main/tests/examplefiles/example.ns2 +69 -0
  197. data/vendor/pygments-main/tests/examplefiles/example.p +34 -0
  198. data/vendor/pygments-main/tests/examplefiles/example.pas +2708 -0
  199. data/vendor/pygments-main/tests/examplefiles/example.rb +1852 -0
  200. data/vendor/pygments-main/tests/examplefiles/example.rhtml +561 -0
  201. data/vendor/pygments-main/tests/examplefiles/example.sh-session +19 -0
  202. data/vendor/pygments-main/tests/examplefiles/example.sml +156 -0
  203. data/vendor/pygments-main/tests/examplefiles/example.snobol +15 -0
  204. data/vendor/pygments-main/tests/examplefiles/example.tea +34 -0
  205. data/vendor/pygments-main/tests/examplefiles/example.u +548 -0
  206. data/vendor/pygments-main/tests/examplefiles/example.weechatlog +9 -0
  207. data/vendor/pygments-main/tests/examplefiles/example.xhtml +376 -0
  208. data/vendor/pygments-main/tests/examplefiles/example.yaml +302 -0
  209. data/vendor/pygments-main/tests/examplefiles/example2.aspx +29 -0
  210. data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +363 -0
  211. data/vendor/pygments-main/tests/examplefiles/example_file.fy +128 -0
  212. data/vendor/pygments-main/tests/examplefiles/firefox.mak +586 -0
  213. data/vendor/pygments-main/tests/examplefiles/flipflop.sv +19 -0
  214. data/vendor/pygments-main/tests/examplefiles/foo.sce +6 -0
  215. data/vendor/pygments-main/tests/examplefiles/format.ml +1213 -0
  216. data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +77 -0
  217. data/vendor/pygments-main/tests/examplefiles/function.mu +1 -0
  218. data/vendor/pygments-main/tests/examplefiles/functional.rst +1472 -0
  219. data/vendor/pygments-main/tests/examplefiles/genclass.clj +510 -0
  220. data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +193 -0
  221. data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +33 -0
  222. data/vendor/pygments-main/tests/examplefiles/glsl.frag +7 -0
  223. data/vendor/pygments-main/tests/examplefiles/glsl.vert +13 -0
  224. data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +1 -0
  225. data/vendor/pygments-main/tests/examplefiles/http_request_example +14 -0
  226. data/vendor/pygments-main/tests/examplefiles/http_response_example +27 -0
  227. data/vendor/pygments-main/tests/examplefiles/import.hs +4 -0
  228. data/vendor/pygments-main/tests/examplefiles/intro.ik +24 -0
  229. data/vendor/pygments-main/tests/examplefiles/ints.php +10 -0
  230. data/vendor/pygments-main/tests/examplefiles/intsyn.fun +675 -0
  231. data/vendor/pygments-main/tests/examplefiles/intsyn.sig +286 -0
  232. data/vendor/pygments-main/tests/examplefiles/irb_heredoc +8 -0
  233. data/vendor/pygments-main/tests/examplefiles/irc.lsp +214 -0
  234. data/vendor/pygments-main/tests/examplefiles/java.properties +16 -0
  235. data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +28 -0
  236. data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +45 -0
  237. data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +713 -0
  238. data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +13 -0
  239. data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +47 -0
  240. data/vendor/pygments-main/tests/examplefiles/ltmain.sh +2849 -0
  241. data/vendor/pygments-main/tests/examplefiles/main.cmake +42 -0
  242. data/vendor/pygments-main/tests/examplefiles/markdown.lsp +679 -0
  243. data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +3 -0
  244. data/vendor/pygments-main/tests/examplefiles/matlab_sample +27 -0
  245. data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +37 -0
  246. data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +4 -0
  247. data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +340 -0
  248. data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +38 -0
  249. data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +96 -0
  250. data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +30 -0
  251. data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +87 -0
  252. data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +118 -0
  253. data/vendor/pygments-main/tests/examplefiles/numbers.c +12 -0
  254. data/vendor/pygments-main/tests/examplefiles/objc_example.m +25 -0
  255. data/vendor/pygments-main/tests/examplefiles/objc_example2.m +24 -0
  256. data/vendor/pygments-main/tests/examplefiles/perl_misc +62 -0
  257. data/vendor/pygments-main/tests/examplefiles/perl_perl5db +998 -0
  258. data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +120 -0
  259. data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +856 -0
  260. data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +567 -0
  261. data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +1223 -0
  262. data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +47 -0
  263. data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +10 -0
  264. data/vendor/pygments-main/tests/examplefiles/psql_session.txt +122 -0
  265. data/vendor/pygments-main/tests/examplefiles/py3_test.txt +2 -0
  266. data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +14 -0
  267. data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +2 -0
  268. data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +234 -0
  269. data/vendor/pygments-main/tests/examplefiles/qsort.prolog +13 -0
  270. data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +38 -0
  271. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +280 -0
  272. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +2 -0
  273. data/vendor/pygments-main/tests/examplefiles/regex.js +22 -0
  274. data/vendor/pygments-main/tests/examplefiles/reversi.lsp +427 -0
  275. data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +11 -0
  276. data/vendor/pygments-main/tests/examplefiles/scilab.sci +30 -0
  277. data/vendor/pygments-main/tests/examplefiles/sibling.prolog +19 -0
  278. data/vendor/pygments-main/tests/examplefiles/simple.md +747 -0
  279. data/vendor/pygments-main/tests/examplefiles/smarty_example.html +209 -0
  280. data/vendor/pygments-main/tests/examplefiles/source.lgt +343 -0
  281. data/vendor/pygments-main/tests/examplefiles/sources.list +62 -0
  282. data/vendor/pygments-main/tests/examplefiles/sphere.pov +18 -0
  283. data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +27 -0
  284. data/vendor/pygments-main/tests/examplefiles/squid.conf +30 -0
  285. data/vendor/pygments-main/tests/examplefiles/string.jl +1031 -0
  286. data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +21 -0
  287. data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +3 -0
  288. data/vendor/pygments-main/tests/examplefiles/test.R +119 -0
  289. data/vendor/pygments-main/tests/examplefiles/test.adb +211 -0
  290. data/vendor/pygments-main/tests/examplefiles/test.asy +131 -0
  291. data/vendor/pygments-main/tests/examplefiles/test.awk +121 -0
  292. data/vendor/pygments-main/tests/examplefiles/test.bas +29 -0
  293. data/vendor/pygments-main/tests/examplefiles/test.bmx +145 -0
  294. data/vendor/pygments-main/tests/examplefiles/test.boo +39 -0
  295. data/vendor/pygments-main/tests/examplefiles/test.bro +250 -0
  296. data/vendor/pygments-main/tests/examplefiles/test.cs +374 -0
  297. data/vendor/pygments-main/tests/examplefiles/test.css +54 -0
  298. data/vendor/pygments-main/tests/examplefiles/test.d +135 -0
  299. data/vendor/pygments-main/tests/examplefiles/test.dart +23 -0
  300. data/vendor/pygments-main/tests/examplefiles/test.dtd +89 -0
  301. data/vendor/pygments-main/tests/examplefiles/test.ec +605 -0
  302. data/vendor/pygments-main/tests/examplefiles/test.ecl +58 -0
  303. data/vendor/pygments-main/tests/examplefiles/test.eh +315 -0
  304. data/vendor/pygments-main/tests/examplefiles/test.erl +169 -0
  305. data/vendor/pygments-main/tests/examplefiles/test.evoque +33 -0
  306. data/vendor/pygments-main/tests/examplefiles/test.fan +818 -0
  307. data/vendor/pygments-main/tests/examplefiles/test.flx +57 -0
  308. data/vendor/pygments-main/tests/examplefiles/test.gdc +13 -0
  309. data/vendor/pygments-main/tests/examplefiles/test.groovy +97 -0
  310. data/vendor/pygments-main/tests/examplefiles/test.html +339 -0
  311. data/vendor/pygments-main/tests/examplefiles/test.ini +10 -0
  312. data/vendor/pygments-main/tests/examplefiles/test.java +653 -0
  313. data/vendor/pygments-main/tests/examplefiles/test.jsp +24 -0
  314. data/vendor/pygments-main/tests/examplefiles/test.maql +45 -0
  315. data/vendor/pygments-main/tests/examplefiles/test.mod +374 -0
  316. data/vendor/pygments-main/tests/examplefiles/test.moo +51 -0
  317. data/vendor/pygments-main/tests/examplefiles/test.myt +166 -0
  318. data/vendor/pygments-main/tests/examplefiles/test.nim +93 -0
  319. data/vendor/pygments-main/tests/examplefiles/test.pas +743 -0
  320. data/vendor/pygments-main/tests/examplefiles/test.php +505 -0
  321. data/vendor/pygments-main/tests/examplefiles/test.plot +333 -0
  322. data/vendor/pygments-main/tests/examplefiles/test.ps1 +108 -0
  323. data/vendor/pygments-main/tests/examplefiles/test.pypylog +1839 -0
  324. data/vendor/pygments-main/tests/examplefiles/test.r3 +94 -0
  325. data/vendor/pygments-main/tests/examplefiles/test.rb +177 -0
  326. data/vendor/pygments-main/tests/examplefiles/test.rhtml +43 -0
  327. data/vendor/pygments-main/tests/examplefiles/test.scaml +8 -0
  328. data/vendor/pygments-main/tests/examplefiles/test.ssp +12 -0
  329. data/vendor/pygments-main/tests/examplefiles/test.tcsh +830 -0
  330. data/vendor/pygments-main/tests/examplefiles/test.vb +407 -0
  331. data/vendor/pygments-main/tests/examplefiles/test.vhdl +161 -0
  332. data/vendor/pygments-main/tests/examplefiles/test.xqy +138 -0
  333. data/vendor/pygments-main/tests/examplefiles/test.xsl +23 -0
  334. data/vendor/pygments-main/tests/examplefiles/truncated.pytb +15 -0
  335. data/vendor/pygments-main/tests/examplefiles/type.lisp +1202 -0
  336. data/vendor/pygments-main/tests/examplefiles/underscore.coffee +603 -0
  337. data/vendor/pygments-main/tests/examplefiles/unicode.applescript +5 -0
  338. data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +11 -0
  339. data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +3 -0
  340. data/vendor/pygments-main/tests/examplefiles/while.pov +13 -0
  341. data/vendor/pygments-main/tests/examplefiles/wiki.factor +384 -0
  342. data/vendor/pygments-main/tests/examplefiles/xml_example +1897 -0
  343. data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +798 -0
  344. data/vendor/pygments-main/tests/old_run.py +138 -0
  345. data/vendor/pygments-main/tests/run.py +48 -0
  346. data/vendor/pygments-main/tests/support.py +15 -0
  347. data/vendor/pygments-main/tests/test_basic_api.py +294 -0
  348. data/vendor/pygments-main/tests/test_clexer.py +31 -0
  349. data/vendor/pygments-main/tests/test_cmdline.py +105 -0
  350. data/vendor/pygments-main/tests/test_examplefiles.py +97 -0
  351. data/vendor/pygments-main/tests/test_html_formatter.py +162 -0
  352. data/vendor/pygments-main/tests/test_latex_formatter.py +55 -0
  353. data/vendor/pygments-main/tests/test_perllexer.py +137 -0
  354. data/vendor/pygments-main/tests/test_regexlexer.py +47 -0
  355. data/vendor/pygments-main/tests/test_token.py +46 -0
  356. data/vendor/pygments-main/tests/test_using_api.py +40 -0
  357. data/vendor/pygments-main/tests/test_util.py +116 -0
  358. data/vendor/simplejson/.gitignore +10 -0
  359. data/vendor/simplejson/.travis.yml +5 -0
  360. data/vendor/simplejson/CHANGES.txt +291 -0
  361. data/vendor/simplejson/LICENSE.txt +19 -0
  362. data/vendor/simplejson/MANIFEST.in +5 -0
  363. data/vendor/simplejson/README.rst +19 -0
  364. data/vendor/simplejson/conf.py +179 -0
  365. data/vendor/simplejson/index.rst +628 -0
  366. data/vendor/simplejson/scripts/make_docs.py +18 -0
  367. data/vendor/simplejson/setup.py +104 -0
  368. data/vendor/simplejson/simplejson/__init__.py +510 -0
  369. data/vendor/simplejson/simplejson/_speedups.c +2745 -0
  370. data/vendor/simplejson/simplejson/decoder.py +425 -0
  371. data/vendor/simplejson/simplejson/encoder.py +567 -0
  372. data/vendor/simplejson/simplejson/ordered_dict.py +119 -0
  373. data/vendor/simplejson/simplejson/scanner.py +77 -0
  374. data/vendor/simplejson/simplejson/tests/__init__.py +67 -0
  375. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +55 -0
  376. data/vendor/simplejson/simplejson/tests/test_check_circular.py +30 -0
  377. data/vendor/simplejson/simplejson/tests/test_decimal.py +66 -0
  378. data/vendor/simplejson/simplejson/tests/test_decode.py +83 -0
  379. data/vendor/simplejson/simplejson/tests/test_default.py +9 -0
  380. data/vendor/simplejson/simplejson/tests/test_dump.py +67 -0
  381. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +46 -0
  382. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +32 -0
  383. data/vendor/simplejson/simplejson/tests/test_errors.py +34 -0
  384. data/vendor/simplejson/simplejson/tests/test_fail.py +91 -0
  385. data/vendor/simplejson/simplejson/tests/test_float.py +19 -0
  386. data/vendor/simplejson/simplejson/tests/test_indent.py +86 -0
  387. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +20 -0
  388. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +121 -0
  389. data/vendor/simplejson/simplejson/tests/test_pass1.py +76 -0
  390. data/vendor/simplejson/simplejson/tests/test_pass2.py +14 -0
  391. data/vendor/simplejson/simplejson/tests/test_pass3.py +20 -0
  392. data/vendor/simplejson/simplejson/tests/test_recursion.py +67 -0
  393. data/vendor/simplejson/simplejson/tests/test_scanstring.py +117 -0
  394. data/vendor/simplejson/simplejson/tests/test_separators.py +42 -0
  395. data/vendor/simplejson/simplejson/tests/test_speedups.py +20 -0
  396. data/vendor/simplejson/simplejson/tests/test_tuple.py +49 -0
  397. data/vendor/simplejson/simplejson/tests/test_unicode.py +109 -0
  398. data/vendor/simplejson/simplejson/tool.py +39 -0
  399. metadata +492 -0
@@ -0,0 +1,42 @@
1
+ SET( SOURCES back.c io.c main.c )
2
+ MESSAGE( ${SOURCES} ) # three arguments, prints "back.cio.cmain.c"
3
+ MESSAGE( "${SOURCES}" ) # one argument, prints "back.c;io.c;main.c"
4
+ MESSAGE( "" ) # one argument, prints "" an empty line
5
+ MESSAGE( "${EMPTY_STRING}" ) # one argument, prints "" an empty line
6
+ MESSAGE( ${EMPTY_STRING} ) # zero arguments, causes CMake Error
7
+ # "MESSAGE called with incorrect number of arguments"
8
+ MESSAGE( \\\"\ \(\)\#\$\^ ) # this message contains literal characters
9
+
10
+ MESSAGE( "This is practice." ) # prints "This is practice."
11
+ MESSAGE( "This;is;practice." ) # prints "This;is;practice."
12
+ MESSAGE( "Hi. ) MESSAGE( x )" ) # prints "Hi. ) MESSAGE( x )"
13
+
14
+ MESSAGE( "Welc"ome ) # rule 1
15
+ MESSAGE( Welc"ome" ) # rule 3
16
+ MESSAGE( Welc"ome)" ) # rule 2
17
+ MESSAGE( ""Thanks ) # rule 1
18
+ MESSAGE( Thanks"" ) # rule 3
19
+
20
+ SET( x y A B C ) # stores "y;A;B;C" in x (without quote)
21
+ SET( ${x} ) # => SET( y;A;B;C ) => SET( y A B C)
22
+ MESSAGE( ${y} ) # prints "ABC" to stdout (without quotes)
23
+ SET( y x ) # stores "x" in y (without quotes)
24
+ SET( ${y} y = x ) # => SET( x y )
25
+ MESSAGE( "\${x} = '${x}'" ) # prints "${x} = 'y;=;x'" to stdout (without quotes)
26
+ SET( y ${x} ) # => SET( y y = x ) => stores "y;=;x" in y (without quotes)
27
+ MESSAGE( ${y} ) # prints "y=x" to stdout (without quotes)
28
+
29
+ SET( x a b c ) # stores "a;b;c" in x (without quotes)
30
+ SET( y "a b c" ) # stores "a b c" in y (without quotes)
31
+ MESSAGE( a b c ) # prints "abc" to stdout (without quotes)
32
+ MESSAGE( ${x} ) # prints "abc" to stdout (without quotes)
33
+ MESSAGE("${x}") # prints "a;b;c" to stdout (without quotes)
34
+ MESSAGE( ${y} ) # prints "a b c" to stdout (without quotes)
35
+ MESSAGE("${y}") # prints "a b c" to stdout (without quotes)
36
+
37
+ # This is a comment.
38
+ COMMAND( arguments go here )
39
+ ANOTHER_COMMAND() # this command has no arguments
40
+ YET_ANOTHER_COMMAND( these
41
+ arguments are spread # another comment
42
+ over several lines )
@@ -0,0 +1,679 @@
1
+ #!/usr/bin/env newlisp
2
+
3
+ ;; @module markdown
4
+ ;; @author cormullion
5
+ ;; @description a port of John Gruber's Markdown to newLISP
6
+ ;; @location http://unbalanced-parentheses.nfshost.com/
7
+ ;; @version of date 2011-10-02 22:36:02
8
+ ;; version history: at the end
9
+ ;; a port of John Gruber's Markdown.pl (http://daringfireball.net/markdown) script to newLISP...
10
+ ;; see his original Perl script for explanations of the fearsome regexen and
11
+ ;; byzantine logic, etc...
12
+ ;; TODO:
13
+ ;; the following Markdown tests fail:
14
+ ;; Inline HTML (Advanced) ... FAILED
15
+ ;; Links, reference style ... FAILED -- nested brackets
16
+ ;; Links, shortcut references ... FAILED
17
+ ;; Markdown Documentation - Syntax ... FAILED
18
+ ;; Ordered and unordered lists ... FAILED -- a nested ordered list error
19
+ ;; parens in url : ![this is a stupid URL](http://example.com/(parens).jpg) see (Images.text)
20
+ ;; Add: email address scrambling
21
+
22
+ (context 'Hash)
23
+ (define HashTable:HashTable)
24
+
25
+ (define (build-escape-table)
26
+ (set '*escape-chars* [text]\`*_{}[]()>#+-.![/text])
27
+ (dolist (c (explode *escape-chars*))
28
+ (HashTable c (hash c))))
29
+
30
+ (define (init-hash txt)
31
+ ; finds a hash identifier that doesn't occur anywhere in the text
32
+ (set 'counter 0)
33
+ (set 'hash-prefix "HASH")
34
+ (set 'hash-id (string hash-prefix counter))
35
+ (do-while (find hash-id txt)
36
+ (set 'hash-id (string hash-prefix (inc counter))))
37
+ (Hash:build-escape-table))
38
+
39
+ (define (hash s)
40
+ (HashTable s (string hash-id (inc counter))))
41
+
42
+ (context 'markdown)
43
+
44
+ (define (markdown:markdown txt)
45
+ (initialize)
46
+ (Hash:init-hash txt)
47
+ (unescape-special-chars
48
+ (block-transforms
49
+ (strip-link-definitions
50
+ (protect
51
+ (cleanup txt))))))
52
+
53
+ (define (initialize)
54
+ (set '*escape-pairs* '(
55
+ ({\\\\} {\})
56
+ ({\\`} {`})
57
+ ({\\\*} {*})
58
+ ({\\_} {_})
59
+ ([text]\\\{[/text] [text]{[/text])
60
+ ([text]\\\}[/text] [text]}[/text])
61
+ ({\\\[} {[})
62
+ ({\\\]} {]})
63
+ ({\\\(} {(})
64
+ ({\\\)} {)})
65
+ ({\\>} {>})
66
+ ({\\\#} {#})
67
+ ({\\\+} {+})
68
+ ({\\\-} {-})
69
+ ({\\\.} {.})
70
+ ({\\!} {!})))
71
+ (set '*hashed-html-blocks* '())
72
+ (set '*list-level* 0))
73
+
74
+ (define (block-transforms txt)
75
+ (form-paragraphs
76
+ (protect
77
+ (block-quotes
78
+ (code-blocks
79
+ (lists
80
+ (horizontal-rules
81
+ (headers txt))))))))
82
+
83
+ (define (span-transforms txt)
84
+ (line-breaks
85
+ (emphasis
86
+ (amps-and-angles
87
+ (auto-links
88
+ (anchors
89
+ (images
90
+ (escape-special-chars
91
+ (escape-special-chars (code-spans txt) 'inside-attributes)))))))))
92
+
93
+ (define (tokenize-html xhtml)
94
+ ; return list of tag/text portions of xhtml text
95
+ (letn (
96
+ (tag-match [text]((?s:<!(-- .*? -- \s*)+>)|
97
+ (?s:<\?.*?\?>)|
98
+ (?:<[a-z/!$](?:[^<>]|
99
+ (?:<[a-z/!$](?:[^<>]|
100
+ (?:<[a-z/!$](?:[^<>]|
101
+ (?:<[a-z/!$](?:[^<>]|
102
+ (?:<[a-z/!$](?:[^<>]|
103
+ (?:<[a-z/!$](?:[^<>])*>))*>))*>))*>))*>))*>))[/text]) ; yeah, well...
104
+ (str xhtml)
105
+ (len (length str))
106
+ (pos 0)
107
+ (tokens '()))
108
+ (while (set 'tag-start (find tag-match str 8))
109
+ (if (< pos tag-start)
110
+ (push (list 'text (slice str pos (- tag-start pos))) tokens -1))
111
+ (push (list 'tag $0) tokens -1)
112
+ (set 'str (slice str (+ tag-start (length $0))))
113
+ (set 'pos 0))
114
+ ; leftovers
115
+ (if (< pos len)
116
+ (push (list 'text (slice str pos (- len pos))) tokens -1))
117
+ tokens))
118
+
119
+ (define (escape-special-chars txt (within-tag-attributes nil))
120
+ (let ((temp (tokenize-html txt))
121
+ (new-text {}))
122
+ (dolist (pair temp)
123
+ (if (= (first pair) 'tag)
124
+ ; 'tag
125
+ (begin
126
+ (set 'new-text (replace {\\} (last pair) (HashTable {\\}) 0))
127
+ (replace [text](?<=.)</?code>(?=.)[/text] new-text (HashTable {`}) 0)
128
+ (replace {\*} new-text (HashTable {*}) 0)
129
+ (replace {_} new-text (HashTable {_} ) 0))
130
+ ; 'text
131
+ (if within-tag-attributes
132
+ (set 'new-text (last pair))
133
+ (set 'new-text (encode-backslash-escapes (last pair)))))
134
+ (setf (temp $idx) (list (first pair) new-text)))
135
+ ; return as text
136
+ (join (map last temp))))
137
+
138
+ (define (encode-backslash-escapes t)
139
+ (dolist (pair *escape-pairs*)
140
+ (replace (first pair) t (HashTable (last pair)) 14)))
141
+
142
+ (define (encode-code s)
143
+ ; encode/escape certain characters inside Markdown code runs
144
+ (replace {&} s "&amp;" 0)
145
+ (replace {<} s "&lt;" 0)
146
+ (replace {>} s "&gt;" 0)
147
+ (replace {\*} s (HashTable {\\}) 0)
148
+ (replace {_} s (HashTable {_}) 0)
149
+ (replace "{" s (HashTable "{") 0)
150
+ (replace {\[} s (HashTable {[}) 0)
151
+ (replace {\]} s (HashTable {]}) 0)
152
+ (replace {\\} s (HashTable "\\") 0))
153
+
154
+ (define (code-spans s)
155
+ (replace
156
+ {(?<!\\)(`+)(.+?)(?<!`)\1(?!`)}
157
+ s
158
+ (string {<code>} (encode-code (trim $2)) {</code>})
159
+ 2))
160
+
161
+ (define (encode-alt s)
162
+ (replace {&} s "&amp;" 0)
163
+ (replace {"} s "&quot;" 0))
164
+
165
+ (define (images txt)
166
+ (let ((alt-text {})
167
+ (url {})
168
+ (title {})
169
+ (ref-regex {(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])})
170
+ (inline-regex {(!\[(.*?)\]\([ \t]*<?(\S+?)>?[ \t]*((['"])(.*?)\5[ \t]*)?\))})
171
+ (whole-match {})
172
+ (result {})
173
+ (id-ref {})
174
+ (url {}))
175
+ ; reference links ![alt text][id]
176
+ (replace
177
+ ref-regex
178
+ txt
179
+ (begin
180
+ (set 'whole-match $1 'alt-text $2 'id-ref $3)
181
+ (if alt-text
182
+ (replace {"} alt-text {&quot;} 0))
183
+ (if (empty? id-ref)
184
+ (set 'id-ref (lower-case alt-text)))
185
+ (if (lookup id-ref *link-database*)
186
+ (set 'url (first (lookup id-ref *link-database*)))
187
+ (set 'url nil))
188
+ (if url
189
+ (begin
190
+ (replace {\*} url (HashTable {*}) 0)
191
+ (replace {_} url (HashTable {_}) 0)
192
+ ))
193
+ (if (last (lookup id-ref *link-database*))
194
+ ; title
195
+ (begin
196
+ (set 'title (last (lookup id-ref *link-database*)))
197
+ (replace {"} title {&quot;} 0)
198
+ (replace {\*} title (HashTable {*}) 0)
199
+ (replace {_} title (HashTable {_}) 0))
200
+ ; no title
201
+ (set 'title {})
202
+ )
203
+ (if url
204
+ (set 'result (string
205
+ {<img src="}
206
+ (trim url)
207
+ {" alt="}
208
+ alt-text {" }
209
+ (if (not (empty? title))
210
+ (string { title="} title {"}) {})
211
+ { />}))
212
+ (set 'result whole-match))
213
+ )
214
+ 0
215
+ )
216
+ ; inline image refs: ![alt text](url "optional title")
217
+ (replace
218
+ inline-regex
219
+ txt
220
+ (begin
221
+ (set 'whole-match $1)
222
+ (set 'alt-text $2)
223
+ (set 'url $3)
224
+ (set 'title $6)
225
+ (if alt-text
226
+ (replace {"} alt-text {&quot;} 0)
227
+ (set 'alt-text {}))
228
+ (if title
229
+ (begin
230
+ (replace {"} title {&quot;} 0)
231
+ (replace {\*} title (HashTable {*}) 0)
232
+ (replace {_} title (HashTable {_}) 0))
233
+ (set 'title {}))
234
+ (replace {\*} url (HashTable {*}) 0)
235
+ (replace {_} url (HashTable {_}) 0)
236
+ (string
237
+ {<img src="}
238
+ (trim url)
239
+ {" alt="}
240
+ alt-text {" }
241
+ (if title (string {title="} title {"}) {}) { />})
242
+ )
243
+ 0
244
+ )
245
+ ; empty ones are possible
246
+ (set '$1 {})
247
+ (replace {!\[(.*?)\]\([ \t]*\)}
248
+ txt
249
+ (string {<img src="" alt="} $1 {" title="" />})
250
+ 0)))
251
+
252
+ (define (make-anchor link-text id-ref )
253
+ ; Link defs are in the form: ^[id]: url "optional title"
254
+ ; stored in link db list as (id (url title))
255
+ ; params are text to be linked and the id of the link in the db
256
+ ; eg bar 1 for [bar][1]
257
+
258
+ (let ((title {})
259
+ (id id-ref)
260
+ (url nil))
261
+ (if link-text
262
+ (begin
263
+ (replace {"} link-text {&quot;} 0)
264
+ (replace {\n} link-text { } 0)
265
+ (replace {[ ]?\n} link-text { } 0)))
266
+ (if (null? id ) (set 'id (lower-case link-text)))
267
+ (if (not (nil? (lookup id *link-database*)))
268
+ (begin
269
+ (set 'url (first (lookup id *link-database*)))
270
+ (replace {\*} url (HashTable {*}) 0)
271
+ (replace {_} url (HashTable {_}) 0)
272
+ (if (set 'title (last (lookup id *link-database*)))
273
+ (begin
274
+ (replace {"} title {&quot;} 0)
275
+ (replace {\*} title (HashTable {*}) 0)
276
+ (replace {_} title (HashTable {_}) 0))
277
+ (set 'title {})))
278
+ (set 'url nil))
279
+ (if url
280
+ (string {<a href="} (trim url)
281
+ {"}
282
+ (if (not (= title {})) (string { title="} (trim title) {"}) {})
283
+ {>} link-text {</a>})
284
+ (string {[} link-text {][} id-ref {]}))))
285
+
286
+ (define (anchors txt)
287
+ (letn ((nested-brackets {(?>[^\[\]]+)*})
288
+ (ref-link-regex (string {(\[(} nested-brackets {)\][ ]?(?:\n[ ]*)?\[(.*?)\])}))
289
+ (inline-regex {(\[(.*?)\]\([ ]*<?(.*?\)?)>?[ ]*((['"])(.*?)\5[ \t]*)?\))})
290
+ (link-text {})
291
+ (url {})
292
+ (title {}))
293
+ ; reference-style links: [link text] [id]
294
+ (set '$1 {} '$2 {} '$3 {} '$4 {} '$5 {} '$6 {}) ; i still don't think I should have to do this...
295
+
296
+ ; what about this regex instead?
297
+ (set 'ref-link-regex {(\[(.*?)\][ ]?\[(.*?)\])})
298
+
299
+ (replace ref-link-regex txt (make-anchor $2 $3) 8) ; $2 is link text, $3 is id
300
+ ; inline links: [link text](url "optional title")
301
+ (set '$1 {} '$2 {} '$3 {} '$4 {} '$5 {} '$6 {})
302
+ (replace
303
+ inline-regex
304
+ txt
305
+ (begin
306
+ (set 'link-text $2)
307
+ (set 'url $3)
308
+ (set 'title $6)
309
+ (if link-text (replace {"} link-text {&quot;} 0))
310
+ (if title
311
+ (begin
312
+ (replace {"} title {&quot;} 0)
313
+ (replace {\*} title (HashTable {*}) 0)
314
+ (replace {_} title (HashTable {_}) 0))
315
+ (set 'title {}))
316
+ (replace {\*} url (HashTable {*}) 0)
317
+ (replace {_} url (HashTable {_}) 0)
318
+ (replace {^<(.*)>$} url $1 0)
319
+ (string
320
+ {<a href="}
321
+ (trim url)
322
+ {"}
323
+ (if (not (= title {}))
324
+ (string { title="} (trim title) {"})
325
+ {})
326
+ {>} link-text {</a>}
327
+ ))
328
+ 8
329
+ ) ; replace
330
+ ) txt)
331
+
332
+ (define (auto-links txt)
333
+ (replace
334
+ [text]<((https?|ftp):[^'">\s]+)>[/text]
335
+ txt
336
+ (string {<a href="} $1 {">} $1 {</a>})
337
+ 0
338
+ )
339
+ ; to-do: email ...
340
+ )
341
+
342
+ (define (amps-and-angles txt)
343
+ ; Smart processing for ampersands and angle brackets
344
+ (replace
345
+ [text]&(?!\#?[xX]?(?:[0-9a-fA-F]+|\w+);)[/text]
346
+ txt
347
+ {&amp;}
348
+ 10
349
+ )
350
+ (replace
351
+ [text]<(?![a-z/?\$!])[/text]
352
+ txt
353
+ {&lt;}
354
+ 10))
355
+
356
+ (define (emphasis txt)
357
+ ; italics/bold: strong first
358
+ (replace
359
+ [text] (\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) \1 [/text]
360
+ txt
361
+ (string {<strong>} $2 {</strong>})
362
+ 8
363
+ )
364
+ (replace
365
+ [text] (\*|_) (?=\S) (.+?) (?<=\S) \1 [/text]
366
+ txt
367
+ (string {<em>} $2 {</em>})
368
+ 8
369
+ ))
370
+
371
+ (define (line-breaks txt)
372
+ ; handles line break markers
373
+ (replace " {2,}\n" txt " <br/>\n" 0))
374
+
375
+ (define (hex-str-to-unicode-char strng)
376
+ ; given a five character string, assume it's "U" + 4 hex chars and convert
377
+ ; return the character...
378
+ (char (int (string "0x" (1 strng)) 0 16)))
379
+
380
+ (define (ustring s)
381
+ ; any four digit string preceded by U
382
+ (replace "U[0-9a-f]{4,}" s (hex-str-to-unicode-char $0) 0))
383
+
384
+ (define (cleanup txt)
385
+ ; cleanup the text by normalizing some possible variations
386
+ (replace "\r\n|\r" txt "\n" 0) ; standardize line ends
387
+ (push "\n\n" txt -1) ; end with two returns
388
+ (set 'txt (detab txt)) ; convert tabs to spaces
389
+
390
+ ; convert inline Unicode:
391
+ (set 'txt (ustring txt))
392
+ (replace "\n[ \t]+\n" txt "\n\n" 0) ; lines with only spaces and tabs
393
+ )
394
+
395
+ (define (protect txt)
396
+ ; protect or "hash html blocks"
397
+ (letn ((nested-block-regex [text](^<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b(.*\n)*?</\2>[ \t]*(?=\n+|\Z))[/text])
398
+ (liberal-tag-regex [text](^<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b(.*\n)*?.*</\2>[ \t]*(?=\n+|\Z))[/text])
399
+ (hr-regex [text](?:(?<=\n\n)|\A\n?)([ ]{0,3}<(hr)\b([^<>])*?/?>[ \t]*(?=\n{2,}|\Z))[/text])
400
+ (html-comment-regex [text](?:(?<=\n\n)|\A\n?)([ ]{0,3}(?s:<!(--.*?--\s*)+>)[ \t]*(?=\n{2,}|\Z))[/text])
401
+ (results '())
402
+ (chunk-count (length (set 'chunks (parse txt "\n\n"))))
403
+ (chunk-size 500))
404
+
405
+ ; due to a limitation in PCRE, long sections have to be divided up otherwise we'll crash
406
+ ; so divide up long texts into chunks, then do the regex on each chunk
407
+ ; not an ideal solution, but it works ok :(
408
+
409
+ (for (i 0 chunk-count chunk-size)
410
+ ; do a chunk
411
+ (set 'text-chunk (join (i (- (min chunk-count (- (+ i chunk-size) 1)) i) chunks) "\n\n"))
412
+ (dolist (rgx (list nested-block-regex liberal-tag-regex hr-regex html-comment-regex))
413
+ (replace
414
+ rgx
415
+ text-chunk
416
+ (begin
417
+ (set 'key (Hash:hash $1))
418
+ (push (list key $1 ) *hashed-html-blocks* -1)
419
+ (string "\n\n" key "\n\n"))
420
+ 2))
421
+ ; save this partial result
422
+ (push text-chunk results -1)
423
+ ) ; for
424
+ ; return string result
425
+ (join results "\n\n")))
426
+
427
+ (define (unescape-special-chars t)
428
+ ; Swap back in all the special characters we've hidden.
429
+ (dolist (pair (HashTable))
430
+ (replace (last pair) t (first pair) 10)) t)
431
+
432
+ (define (strip-link-definitions txt)
433
+ ; strip link definitions from the text and store them
434
+ ; Link defs are in the form: ^[id]: url "optional title"
435
+ ; stored in link db list as (id (url title))
436
+ (let ((link-db '())
437
+ (url {})
438
+ (id {})
439
+ (title {}))
440
+ (replace
441
+ [text]^[ ]{0,3}\[(.+)\]:[ \t]*\n?[ \t]*<?(\S+?)>?[ \t]*\n?[ \t]*(?:(?<=\s)["(](.+?)[")][ \t]*)?(?:\n+|\Z)[/text]
442
+ txt
443
+ (begin
444
+ (set 'id (lower-case $1) 'url (amps-and-angles $2) 'title $3)
445
+ (if title (replace {"} title {&quot;} 0))
446
+ (push (list id (list url title)) link-db)
447
+ (set '$3 {}) ; necessary?
448
+ (string {}) ; remove from text
449
+ )
450
+ 10)
451
+ (set '*link-database* link-db)
452
+ txt))
453
+
454
+ (define (horizontal-rules txt)
455
+ (replace
456
+ [text]^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$[/text]
457
+ txt
458
+ "\n<hr />"
459
+ 14)
460
+ (replace
461
+ [text]^[ ]{0,2}([ ]? -[ ]?){3,}[ \t]*$[/text]
462
+ txt
463
+ "\n<hr />"
464
+ 14)
465
+ (replace
466
+ [text]^[ ]{0,2}([ ]? _[ ]?){3,}[ \t]*$[/text]
467
+ txt
468
+ "\n<hr />"
469
+ 14))
470
+
471
+ (define (headers txt)
472
+ ; setext headers
473
+ (let ((level 1))
474
+ (replace
475
+ [text]^(.+)[ \t]*\n=+[ \t]*\n+[/text]
476
+ txt
477
+ (string "<h1>" (span-transforms $1) "</h1>\n\n")
478
+ 2)
479
+
480
+ (replace
481
+ [text]^(.+)[ \t]*\n-+[ \t]*\n+[/text]
482
+ txt
483
+ (string "<h2>" (span-transforms $1) "</h2>\n\n")
484
+ 2)
485
+ ; atx headers
486
+ (replace
487
+ [text]^(\#{1,6})\s*(.+?)[ ]*\#*(\n+)[/text]
488
+ txt
489
+ (begin
490
+ (set 'level (length $1))
491
+ (string "<h" level ">" (span-transforms $2) "</h" level ">\n\n")
492
+ )
493
+ 2)))
494
+
495
+ (define (lists txt)
496
+ (letn ((marker-ul {[*+-]})
497
+ (marker-ol {\d+[.]})
498
+ (marker-any (string {(?:} marker-ul {|} marker-ol {)}))
499
+ (whole-list-regex (string [text](([ ]{0,3}([/text] marker-any [text])[ \t]+)(?s:.+?)(\z|\n{2,}(?=\S)(?![ \t]*[/text] marker-any [text][ \t]+)))[/text]))
500
+ (my-list {})
501
+ (list-type {})
502
+ (my-result {}))
503
+ (replace
504
+ (if (> *list-level* 0)
505
+ (string {^} whole-list-regex)
506
+ (string {(?:(?<=\n\n)|\A\n?)} whole-list-regex))
507
+ txt
508
+ (begin
509
+ (set 'my-list $1)
510
+ (if (find $3 marker-ul)
511
+ (set 'list-type "ul" 'marker-type marker-ul)
512
+ (set 'list-type "ol" 'marker-type marker-ol))
513
+ (replace [text]\n{2,}[/text] my-list "\n\n\n" 0)
514
+ (set 'my-result (process-list-items my-list marker-any))
515
+ (replace {\s+$} my-result {} 0)
516
+ (string {<} list-type {>} "\n" my-result "\n" {</} list-type {>} "\n"))
517
+ 10 ; must be multiline
518
+ )))
519
+
520
+ (define (process-list-items list-text marker-any)
521
+ (let ((list-regex (string [text](\n)?(^[ \t]*)([/text] marker-any [text])[ \t]+((?s:.+?)(\n{1,2}))(?=\n*(\z|\2([/text] marker-any [text])[ \t]+))[/text]))
522
+ (item {})
523
+ (leading-line {})
524
+ (leading-space {})
525
+ (result {}))
526
+ (inc *list-level*)
527
+ (replace [text]\n{2,}\z[/text] list-text "\n" 0)
528
+ (set '$1 {} '$2 {} '$3 {} '$4 {} '$5 {})
529
+ (replace
530
+ list-regex
531
+ list-text
532
+ (begin
533
+ (set 'item $4)
534
+ (set 'leading-line $1)
535
+ (set 'leading-space $2)
536
+ (if (or (not (empty? leading-line)) (ends-with item "\n{2,}" 0))
537
+ (set 'item (block-transforms (outdent item)))
538
+ ; recurse for sub lists
539
+ (begin
540
+ (set 'item (lists (outdent item)))
541
+ (set 'item (span-transforms (trim item "\n")))
542
+ ))
543
+ (string {<li>} item {</li>} "\n"))
544
+ 10)
545
+ (dec *list-level*)
546
+ list-text))
547
+
548
+ (define (code-blocks txt)
549
+ (let ((code-block {})
550
+ (token-list '()))
551
+ (replace
552
+ [text](?:\n\n|\A)((?:(?:[ ]{4}|\t).*\n+)+)((?=^[ ]{0,3}\S)|\Z)[/text]
553
+ txt
554
+ (begin
555
+ (set 'code-block $1)
556
+ ; format if Nestor module is loaded and it's not marked as plain
557
+ (if (and (not (starts-with code-block " ;plain\n")) (context? Nestor))
558
+ ; format newlisp
559
+ (begin
560
+ ; remove flag if present
561
+ (replace "[ ]{4};newlisp\n" code-block {} 0)
562
+ (set 'code-block (protect (Nestor:nlx-to-html (Nestor:my-read (trim (detab (outdent code-block)) "\n")))))
563
+ code-block)
564
+ ; don't format
565
+ (begin
566
+ ; trim leading and trailing newlines
567
+ (replace "[ ]{4};plain\n" code-block {} 0)
568
+ (set 'code-block (trim (detab (encode-code (outdent code-block))) "\n"))
569
+ (set '$1 {})
570
+ (set 'code-block (string "\n\n<pre><code>" code-block "\n</code></pre>\n\n")))))
571
+ 10)))
572
+
573
+ (define (block-quotes txt)
574
+ (let ((block-quote {}))
575
+ (replace
576
+ [text]((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)[/text]
577
+ txt
578
+ (begin
579
+ (set 'block-quote $1)
580
+ (replace {^[ ]*>[ ]?} block-quote {} 2)
581
+ (replace {^[ ]+$} block-quote {} 2)
582
+ (set 'block-quote (block-transforms block-quote)) ; recurse
583
+ ; remove leading spaces
584
+ (replace
585
+ {(\s*<pre>.+?</pre>)}
586
+ block-quote
587
+ (trim $1)
588
+ 2)
589
+ (string "<blockquote>\n" block-quote "\n</blockquote>\n\n"))
590
+ 2)))
591
+
592
+ (define (outdent s)
593
+ (replace [text]^(\t|[ ]{1,4})[/text] s {} 2))
594
+
595
+ (define (detab s)
596
+ (replace [text](.*?)\t[/text]
597
+ s
598
+ (string $1 (dup { } (- 4 (% (length $1) 4))))
599
+ 2))
600
+
601
+ (define (form-paragraphs txt)
602
+ (let ((grafs '())
603
+ (original nil))
604
+ (set 'txt (trim txt "\n")) ; strip blank lines before and after
605
+ (set 'grafs (parse txt "\n{2,}" 0)) ; split
606
+ (dolist (p grafs)
607
+ (if (set 'original (lookup p *hashed-html-blocks*))
608
+ ; html blocks
609
+ (setf (grafs $idx) original)
610
+ ; wrap <p> tags round everything else
611
+ (setf (grafs $idx) (string {<p>} (replace {^[ ]*} (span-transforms p) {} (+ 4 8 16)) {</p>}))))
612
+ (join grafs "\n\n")))
613
+
614
+ [text]
615
+ ; three command line arguments: let's hope last one is a file
616
+ (when (= 3 (length (main-args)))
617
+ (println (markdown (read-file (main-args 2))))
618
+ (exit))
619
+
620
+ ; hack for command-line and module loading
621
+ (set 'level (sys-info 3))
622
+
623
+ ; if level is 2, then we're probably invoking markdown.lsp directly
624
+ ; if level is > 3, then we're probably loading it into another script...
625
+
626
+ (when (= level 2)
627
+ ; running on command line, read STDIN and execute:
628
+ (while (read-line)
629
+ (push (current-line) *stdin* -1))
630
+ (println (markdown (join *stdin* "\n")))
631
+ (exit))
632
+ [/text]
633
+
634
+ ;; version 2011-09-16 16:31:29
635
+ ;; Changed to different hash routine. Profiling shows that hashing takes 40% of the execution time.
636
+ ;; Unfortunately this new version is only very slightly faster.
637
+ ;; Command-line arguments hack in previous version doesn't work.
638
+ ;;
639
+ ;; version 2011-08-18 15:04:40
640
+ ;; various fixes, and added hack for running this from the command-line:
641
+ ;; echo "hi there" | newlisp markdown.lsp
642
+ ;; echo "hello world" | markdown.lsp
643
+ ;; cat file.text | newlisp markdown.lsp
644
+ ;;
645
+ ;; version 2010-11-14 17:34:52
646
+ ;; some problems in ustring. Probably remove it one day, as it's non standard...
647
+ ;;
648
+ ;; version 2010-10-14 18:41:38
649
+ ;; added code to work round PCRE crash in (protect ...
650
+ ;;
651
+ ;; version date 2010-07-10 22:20:25
652
+ ;; modified call to 'read' since lutz has changed it
653
+ ;;
654
+ ;; version date 2009-11-16 22:10:10
655
+ ;; fixed bug in tokenize.html
656
+ ;;
657
+ ;; version date 2008-10-08 18:44:46
658
+ ;; changed nth-set to setf to be version-10 ready.
659
+ ;; This means that now this script will NOT work with
660
+ ;; earlier versions of newLISP!!!!!!!!!!!
661
+ ;; requires Nestor if you want source code colouring...
662
+ ;;
663
+ ;; version date 2008-08-08 16:54:56
664
+ ;; changed (unless to (if (not ... :(
665
+ ;;
666
+ ;; version date 2008-07-20 14:!2:29
667
+ ;; added hex-str-to-unicode-char ustring
668
+ ;;
669
+ ;; version date 2008-03-07 15:36:09
670
+ ;; fixed load error
671
+ ;;
672
+ ;; version date 2007-11-17 16:20:57
673
+ ;; added syntax colouring module
674
+ ;;
675
+ ;; version date 2007-11-14 09:19:42
676
+ ;; removed reliance on dostring for compatibility with 9.1
677
+
678
+
679
+ ; eof