gitlab-pygments.rb 0.3.2

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 (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,374 @@
1
+ ////////////////////////////////////////////////////////////////////////////////
2
+ // //
3
+ // MIT X11 license, Copyright (c) 2005-2006 by: //
4
+ // //
5
+ // Authors: //
6
+ // Michael Dominic K. <michaldominik@gmail.com> //
7
+ // //
8
+ // Permission is hereby granted, free of charge, to any person obtaining a //
9
+ // copy of this software and associated documentation files (the "Software"), //
10
+ // to deal in the Software without restriction, including without limitation //
11
+ // the rights to use, copy, modify, merge, publish, distribute, sublicense, //
12
+ // and/or sell copies of the Software, and to permit persons to whom the //
13
+ // Software is furnished to do so, subject to the following conditions: //
14
+ // //
15
+ // The above copyright notice and this permission notice shall be included //
16
+ // in all copies or substantial portions of the Software. //
17
+ // //
18
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS //
19
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF //
20
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN //
21
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, //
22
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR //
23
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE //
24
+ // USE OR OTHER DEALINGS IN THE SOFTWARE. //
25
+ // //
26
+ ////////////////////////////////////////////////////////////////////////////////
27
+
28
+ namespace Diva.Core {
29
+
30
+ using System;
31
+ using Widgets;
32
+ using System.Xml;
33
+ using Util;
34
+ using System.Collections.Generic;
35
+ using System.Collections;
36
+ using Basics;
37
+
38
+ public class OpenerTask : Task, IBoilProvider {
39
+
40
+ // Private structs ////////////////////////////////////////////
41
+
42
+ struct ObjectInfo {
43
+
44
+ public ObjectContainer Container;
45
+ public int[] Depends;
46
+ public string SystemType;
47
+ public int RefId;
48
+
49
+ /* CONSTRUCTOR */
50
+ public ObjectInfo (ObjectContainer container)
51
+ {
52
+ Container = container;
53
+ Depends = container.Depends.ToArray ();
54
+ SystemType = container.SystemType;
55
+ RefId = container.RefId;
56
+ }
57
+
58
+ public override string ToString ()
59
+ {
60
+ return String.Format ("Type: {0} Deps count: {1} Id: {2}",
61
+ SystemType, Depends.Length, RefId);
62
+ }
63
+
64
+ public bool IsUnBoilable (IBoilProvider provider)
65
+ {
66
+ if (Depends.Length == 0)
67
+ return true;
68
+
69
+ foreach (int id in Depends)
70
+ if (! (provider.Contains (id)))
71
+ return false;
72
+
73
+ return true;
74
+ }
75
+
76
+ }
77
+
78
+ // Enums //////////////////////////////////////////////////////
79
+
80
+ enum OpenerTaskStep { Init, Header, ProjectInfoRead, ObjectListRead,
81
+ ObjectListParse, ObjectListUnBoil, FindRoots,
82
+ Finished };
83
+
84
+ // Fields /////////////////////////////////////////////////////
85
+
86
+ string fileName; // Filename we're reading
87
+ XmlDocument xmlDocument; // Our document
88
+ //XmlNode projectInfoNode; // <projectinfo> node
89
+ IEnumerator objectsEnumerator; // Enumerator
90
+ List <ObjectInfo> objectsList; // Objects list
91
+ ObjectListContainer objectListContainer;
92
+ OpenerTaskStep currentStep; // Our current step
93
+
94
+ Dictionary <int, object> idToObject; // Id -> object
95
+ Dictionary <object, int> objectToId; // Object -> Id
96
+
97
+ string projectName = String.Empty;
98
+ string projectDirectory = String.Empty;
99
+ TagList projectTagList;
100
+ StuffList projectStuffList;
101
+ TrackList projectTrackList;
102
+ ClipList projectClipList;
103
+ MediaItemList projectMediaItemList;
104
+ Commander projectCommander;
105
+ Gdv.Pipeline projectPipeline;
106
+ Gdv.ProjectFormat projectFormat;
107
+
108
+ // Properties /////////////////////////////////////////////////
109
+
110
+ public string ProjectName {
111
+ get { return projectName; }
112
+ }
113
+
114
+ public string ProjectDirectory {
115
+ get { return projectDirectory; }
116
+ }
117
+
118
+ public TagList ProjectTagList {
119
+ get { return projectTagList; }
120
+ }
121
+
122
+ public StuffList ProjectStuffList {
123
+ get { return projectStuffList; }
124
+ }
125
+
126
+ public TrackList ProjectTrackList {
127
+ get { return projectTrackList; }
128
+ }
129
+
130
+ public ClipList ProjectClipList {
131
+ get { return projectClipList; }
132
+ }
133
+
134
+ public MediaItemList ProjectMediaItemList {
135
+ get { return projectMediaItemList; }
136
+ }
137
+
138
+ public Commander ProjectCommander {
139
+ get { return projectCommander; }
140
+ }
141
+
142
+ public Gdv.Pipeline ProjectPipeline {
143
+ get { return projectPipeline; }
144
+ }
145
+
146
+ public Gdv.ProjectFormat ProjectFormat {
147
+ get { return projectFormat; }
148
+ }
149
+
150
+ // Public methods /////////////////////////////////////////////
151
+
152
+ /* CONSTRUCTOR */
153
+ public OpenerTask (string fileName)
154
+ {
155
+ this.fileName = fileName;
156
+ var verbatimString = @"c:\test\";
157
+
158
+ var verbatimStringWithNewline = @"test \\ \n \t \r
159
+ a
160
+ b
161
+ c";
162
+ var verbatimStringWithEscapedQuotes = @"He said
163
+ ""she says \"" is not an escaped character in verbatimstrings""
164
+ ";
165
+
166
+ int[] numbers = { 5,6,4,2,4,6,8,9,7,0 };
167
+ var linqExample = from n in numbers
168
+ where n > 5
169
+ select n;
170
+
171
+ var anotherlinqExample = from n in numbers
172
+ orderby n descending
173
+ select n;
174
+
175
+ int[] someMoreNumbers = { 8,2,17,34,8,9,9,5,3,4,2,1,5 };
176
+ var moreLinq = from n in numbers
177
+ join mn in moreNumbers on n equals mn + 2
178
+ select new {n, mn};
179
+ }
180
+
181
+ public override void Reset ()
182
+ {
183
+ objectToId = new Dictionary <object, int> ();
184
+ idToObject = new Dictionary <int, object> ();
185
+
186
+ xmlDocument = null;
187
+ //projectInfoNode = null;
188
+
189
+ currentStep = OpenerTaskStep.Init;
190
+
191
+ base.Reset ();
192
+ }
193
+
194
+ public int GetIdForObject (object o)
195
+ {
196
+ return objectToId [o];
197
+ }
198
+
199
+ public object GetObjectForId (int id)
200
+ {
201
+ return idToObject [id];
202
+ }
203
+
204
+ public bool Contains (int id)
205
+ {
206
+ return idToObject.ContainsKey (id);
207
+ }
208
+
209
+ // Private methods ////////////////////////////////////////////
210
+
211
+ protected override TaskStatus ExecuteStep (int s)
212
+ {
213
+ bool cont = true;
214
+
215
+ // Main
216
+ switch (currentStep) {
217
+
218
+ case OpenerTaskStep.Init:
219
+ objectsList = new List <ObjectInfo> ();
220
+ xmlDocument = new XmlDocument ();
221
+ xmlDocument.Load (fileName);
222
+ currentStep = OpenerTaskStep.Header;
223
+ break;
224
+
225
+ case OpenerTaskStep.Header:
226
+ //ReadHeader ();
227
+ currentStep = OpenerTaskStep.ProjectInfoRead;
228
+ break;
229
+
230
+ case OpenerTaskStep.ProjectInfoRead:
231
+ foreach (XmlNode node in xmlDocument.DocumentElement.ChildNodes)
232
+ if (node.Name == "projectinfo")
233
+ ResolveProjectInfoNode (node);
234
+
235
+ // FIXME: Fail if not found/not resolved
236
+ currentStep = OpenerTaskStep.ObjectListRead;
237
+ break;
238
+
239
+ case OpenerTaskStep.ObjectListRead:
240
+ foreach (XmlNode node in xmlDocument.DocumentElement.ChildNodes)
241
+ if (node.Name == "objectlist")
242
+ objectListContainer = (ObjectListContainer)
243
+ DataFactory.MakeDataElement (node as XmlElement);
244
+
245
+ if (objectListContainer == null)
246
+ throw new Exception ("ObjectListContainer not found!");
247
+
248
+ currentStep = OpenerTaskStep.ObjectListParse;
249
+ break;
250
+
251
+ case OpenerTaskStep.ObjectListParse:
252
+ bool flush = EnumerateSomeObjects ();
253
+ if (flush)
254
+ currentStep = OpenerTaskStep.ObjectListUnBoil;
255
+ break;
256
+
257
+ case OpenerTaskStep.ObjectListUnBoil:
258
+ bool done = UnBoilSomeObjects ();
259
+ if (done)
260
+ currentStep = OpenerTaskStep.FindRoots;
261
+ break;
262
+
263
+
264
+ case OpenerTaskStep.FindRoots:
265
+ projectTrackList = (TrackList) FindRoot ("tracklist");
266
+ projectTagList = (TagList) FindRoot ("taglist");
267
+ projectStuffList = (StuffList) FindRoot ("stufflist");
268
+ projectClipList = (ClipList) FindRoot ("cliplist");
269
+ projectMediaItemList = (MediaItemList) FindRoot ("mediaitemlist");
270
+ projectPipeline = (Gdv.Pipeline) FindRoot ("pipeline");
271
+ projectCommander = (Commander) FindRoot ("commander");
272
+ projectFormat = (Gdv.ProjectFormat) FindRoot ("projectformat");
273
+
274
+ currentStep = OpenerTaskStep.Finished;
275
+ break;
276
+
277
+ case OpenerTaskStep.Finished:
278
+ cont = false;
279
+ break;
280
+
281
+ default:
282
+ break;
283
+ }
284
+
285
+ // Post
286
+ if (cont)
287
+ return TaskStatus.Running;
288
+ else
289
+ return TaskStatus.Done;
290
+ }
291
+
292
+ /*
293
+ void ReadHeader ()
294
+ {
295
+ // FIXME: Read all the attributes from the <divaproject> element
296
+ }*/
297
+
298
+ void ResolveProjectInfoNode (XmlNode node)
299
+ {
300
+ foreach (XmlNode childNode in node) {
301
+
302
+ switch (childNode.Name) {
303
+
304
+ case "name":
305
+ projectName = childNode.FirstChild.Value;
306
+ break;
307
+
308
+ case "directory":
309
+ projectDirectory = childNode.FirstChild.Value;
310
+ break;
311
+
312
+ // FIXME: Duration etc.
313
+ }
314
+ }
315
+ }
316
+
317
+ bool EnumerateSomeObjects ()
318
+ {
319
+ if (objectsEnumerator == null)
320
+ objectsEnumerator = objectListContainer.FindAllObjects ().GetEnumerator ();
321
+
322
+ for (int i = 0; i < 10; i++) {
323
+ if (objectsEnumerator.MoveNext () == false)
324
+ return true;
325
+
326
+ ObjectContainer container = (ObjectContainer)
327
+ objectsEnumerator.Current;
328
+
329
+ ObjectInfo newInfo = new ObjectInfo (container);
330
+ objectsList.Add (newInfo);
331
+ }
332
+
333
+ return false;
334
+ }
335
+
336
+ ObjectInfo GetNextCandidate ()
337
+ {
338
+ foreach (ObjectInfo objInfo in objectsList)
339
+ if (objInfo.IsUnBoilable (this))
340
+ return objInfo;
341
+
342
+ throw new Exception ("FIXME: No more unboilable objects found. Recursive?");
343
+ }
344
+
345
+ bool UnBoilSomeObjects ()
346
+ {
347
+ for (int i = 0; i < 5; i++) {
348
+ // All unboiled
349
+ if (objectsList.Count == 0)
350
+ return true;
351
+
352
+ ObjectInfo objInfo = GetNextCandidate ();
353
+
354
+ object o = BoilFactory.UnBoil (objInfo.Container, this);
355
+ objectsList.Remove (objInfo);
356
+
357
+ // Add
358
+ idToObject [objInfo.RefId] = o;
359
+ objectToId [o] = objInfo.RefId;
360
+
361
+ }
362
+
363
+ return false;
364
+ }
365
+
366
+ object FindRoot (string rootString)
367
+ {
368
+ ObjectContainer container = objectListContainer.FindObjectContainer (rootString);
369
+ return idToObject [container.RefId];
370
+ }
371
+
372
+ }
373
+
374
+ }
@@ -0,0 +1,54 @@
1
+ body {
2
+ font-size: 12pt;
3
+ background: #fff url(temp.png) top left no-repeat;
4
+ }
5
+
6
+ * html body {
7
+ font-size: 14pt;
8
+ }
9
+
10
+ #nav .new {
11
+ display: block;
12
+ -webkit-border-radius: 5px;
13
+ -moz-border-radius: 5px;
14
+ -ms-border-radius: 5px;
15
+ -o-border-radius: 5px;
16
+ border-radius: 5px;
17
+ }
18
+
19
+ ul#nav li.new {
20
+ font-weight: bold;
21
+ }
22
+
23
+ :link {
24
+ color: #f00;
25
+ }
26
+
27
+ :link:hover {
28
+ color: #0f0;
29
+ }
30
+
31
+ @media screen {
32
+ body {
33
+ background: #ccc;
34
+ }
35
+ }
36
+
37
+ @namespace "http://www.w3.org/1999/xhtml";
38
+
39
+ @import url("mystyle.css");
40
+
41
+ @charset "ISO-8859-1";
42
+
43
+ @font-face { font-family: "Example Font"; src: url("http://www.example.com/fonts/example"); }
44
+
45
+ @media screen { body { font-size: 16px } } @media print { body { font-size: 12pt } }
46
+
47
+
48
+ @page { body { margin: 1in 1.5in; } }
49
+
50
+ @page linke-seite:left { body { margin:20mm; margin-right:25mm; } }
51
+
52
+ @-moz-document url-prefix(http://pygments.org) { a {font-style: normal !important;} }
53
+
54
+
@@ -0,0 +1,135 @@
1
+ // Created by Lionello Lunesu and placed in the public domain.
2
+ // This file has been modified from its original version.
3
+ // It has been formatted to fit your screen.
4
+ module phoneno; // optional
5
+ import std.stdio; // writefln
6
+ import std.ctype; // isdigit
7
+ import std.stream; // BufferedFile
8
+
9
+ // Just for readability (imagine char[][][char[]])
10
+ alias char[] string;
11
+ alias string[] stringarray;
12
+
13
+ /// Strips non-digit characters from the string (COW)
14
+ string stripNonDigit( in string line )
15
+ {
16
+ string ret;
17
+ foreach(uint i, c; line) {
18
+ // Error: std.ctype.isdigit at C:\dmd\src\phobos\std\ctype.d(37)
19
+ // conflicts with std.stream.isdigit at C:\dmd\src\phobos\std\stream.d(2924)
20
+ if (!std.ctype.isdigit(c)) {
21
+ if (!ret)
22
+ ret = line[0..i];
23
+ }
24
+ else if (ret)
25
+ ret ~= c;
26
+ }
27
+ return ret?ret:line;
28
+ }
29
+
30
+ unittest {
31
+ assert( stripNonDigit("asdf") == "" );
32
+ assert( stripNonDigit("\'13-=2 4kop") == "1324" );
33
+ }
34
+
35
+ /// Converts a word into a number, ignoring all non alpha characters
36
+ string wordToNum( in string word )
37
+ {
38
+ // translation table for the task at hand
39
+ const char[256] TRANSLATE =
40
+ " " // 0
41
+ " 0123456789 " // 32
42
+ " 57630499617851881234762239 " // 64
43
+ " 57630499617851881234762239 "
44
+ " "
45
+ " "
46
+ " "
47
+ " ";
48
+ string ret;
49
+ foreach(c; cast(ubyte[])word)
50
+ if (TRANSLATE[c] != ' ')
51
+ ret ~= TRANSLATE[c];
52
+ return ret;
53
+ }
54
+
55
+ unittest {
56
+ // Test wordToNum using the table from the task description.
57
+ assert( "01112223334455666777888999" ==
58
+ wordToNum("E | J N Q | R W X | D S Y | F T | A M | C I V | B K U | L O P | G H Z"));
59
+ assert( "01112223334455666777888999" ==
60
+ wordToNum("e | j n q | r w x | d s y | f t | a m | c i v | b k u | l o p | g h z"));
61
+ assert( "0123456789" ==
62
+ wordToNum("0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9"));
63
+ }
64
+
65
+ void main( string[] args )
66
+ {
67
+ // This associative array maps a number to an array of words.
68
+ stringarray[string] num2words;
69
+
70
+ foreach(string word; new BufferedFile("dictionary.txt" ) )
71
+ num2words[ wordToNum(word) ] ~= word.dup; // must dup
72
+
73
+ /// Finds all alternatives for the given number
74
+ /// (should have been stripped from non-digit characters)
75
+ stringarray _FindWords( string numbers, bool digitok )
76
+ in {
77
+ assert(numbers.length > 0);
78
+ }
79
+ out(result) {
80
+ foreach (a; result)
81
+ assert( wordToNum(a) == numbers );
82
+ }
83
+ body {
84
+ stringarray ret;
85
+ bool foundword = false;
86
+ for (uint t=1; t<=numbers.length; ++t) {
87
+ auto alternatives = numbers[0..t] in num2words;
88
+ if (!alternatives)
89
+ continue;
90
+ foundword = true;
91
+ if (numbers.length > t) {
92
+ // Combine all current alternatives with all alternatives
93
+ // of the rest (next piece can start with a digit)
94
+ foreach (a2; _FindWords( numbers[t..$], true ) )
95
+ foreach(a1; *alternatives)
96
+ ret ~= a1 ~ " " ~ a2;
97
+ }
98
+ else
99
+ ret ~= *alternatives; // append these alternatives
100
+ }
101
+ // Try to keep 1 digit, only if we're allowed and no other
102
+ // alternatives were found
103
+ // Testing "ret.length" makes more sense than testing "foundword",
104
+ // but the other implementations seem to do just this.
105
+ if (digitok && !foundword) { //ret.length == 0
106
+ if(numbers.length > 1) {
107
+ // Combine 1 digit with all altenatives from the rest
108
+ // (next piece can not start with a digit)
109
+ foreach (a; _FindWords( numbers[1..$], false ) )
110
+ ret ~= numbers[0..1] ~ " " ~ a;
111
+ }
112
+ else
113
+ ret ~= numbers[0..1]; // just append this digit
114
+ }
115
+ return ret;
116
+ }
117
+
118
+ /// (This function was inlined in the original program)
119
+ /// Finds all alternatives for the given phone number
120
+ /// Returns: array of strings
121
+ stringarray FindWords( string phone_number )
122
+ {
123
+ if (!phone_number.length)
124
+ return null;
125
+ // Strip the non-digit characters from the phone number, and
126
+ // pass it to the recursive function (leading digit is allowed)
127
+ return _FindWords( stripNonDigit(phone_number), true );
128
+ }
129
+
130
+ // Read the phone numbers
131
+ foreach(string phone; new BufferedFile("input.txt" ) )
132
+ foreach(alternative; FindWords( phone ) )
133
+ writefln(phone, ": ", alternative );
134
+ }
135
+