pygments.rb-jruby 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/CHANGELOG.md +71 -0
  4. data/Gemfile +2 -0
  5. data/LICENSE +17 -0
  6. data/README.md +118 -0
  7. data/Rakefile +66 -0
  8. data/bench.rb +22 -0
  9. data/cache-lexers.rb +8 -0
  10. data/lexers +0 -0
  11. data/lib/pygments.rb +8 -0
  12. data/lib/pygments/lexer.rb +148 -0
  13. data/lib/pygments/mentos.py +351 -0
  14. data/lib/pygments/popen.rb +404 -0
  15. data/lib/pygments/version.rb +3 -0
  16. data/pygments.rb.gemspec +24 -0
  17. data/test/test_data.c +2581 -0
  18. data/test/test_data.py +514 -0
  19. data/test/test_data_generated +2582 -0
  20. data/test/test_pygments.rb +287 -0
  21. data/vendor/custom_lexers/github.py +565 -0
  22. data/vendor/pygments-main/AUTHORS +153 -0
  23. data/vendor/pygments-main/CHANGES +889 -0
  24. data/vendor/pygments-main/LICENSE +25 -0
  25. data/vendor/pygments-main/MANIFEST.in +6 -0
  26. data/vendor/pygments-main/Makefile +59 -0
  27. data/vendor/pygments-main/REVISION +1 -0
  28. data/vendor/pygments-main/TODO +15 -0
  29. data/vendor/pygments-main/docs/generate.py +472 -0
  30. data/vendor/pygments-main/docs/pygmentize.1 +94 -0
  31. data/vendor/pygments-main/docs/src/api.txt +270 -0
  32. data/vendor/pygments-main/docs/src/authors.txt +5 -0
  33. data/vendor/pygments-main/docs/src/changelog.txt +5 -0
  34. data/vendor/pygments-main/docs/src/cmdline.txt +147 -0
  35. data/vendor/pygments-main/docs/src/filterdevelopment.txt +70 -0
  36. data/vendor/pygments-main/docs/src/filters.txt +42 -0
  37. data/vendor/pygments-main/docs/src/formatterdevelopment.txt +169 -0
  38. data/vendor/pygments-main/docs/src/formatters.txt +48 -0
  39. data/vendor/pygments-main/docs/src/index.txt +69 -0
  40. data/vendor/pygments-main/docs/src/installation.txt +71 -0
  41. data/vendor/pygments-main/docs/src/integrate.txt +48 -0
  42. data/vendor/pygments-main/docs/src/java.txt +70 -0
  43. data/vendor/pygments-main/docs/src/lexerdevelopment.txt +603 -0
  44. data/vendor/pygments-main/docs/src/lexers.txt +67 -0
  45. data/vendor/pygments-main/docs/src/moinmoin.txt +39 -0
  46. data/vendor/pygments-main/docs/src/plugins.txt +93 -0
  47. data/vendor/pygments-main/docs/src/quickstart.txt +202 -0
  48. data/vendor/pygments-main/docs/src/rstdirective.txt +22 -0
  49. data/vendor/pygments-main/docs/src/styles.txt +143 -0
  50. data/vendor/pygments-main/docs/src/tokens.txt +349 -0
  51. data/vendor/pygments-main/docs/src/unicode.txt +49 -0
  52. data/vendor/pygments-main/external/autopygmentize +64 -0
  53. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +144 -0
  54. data/vendor/pygments-main/external/markdown-processor.py +67 -0
  55. data/vendor/pygments-main/external/moin-parser.py +112 -0
  56. data/vendor/pygments-main/external/pygments.bashcomp +38 -0
  57. data/vendor/pygments-main/external/rst-directive-old.py +77 -0
  58. data/vendor/pygments-main/external/rst-directive.py +83 -0
  59. data/vendor/pygments-main/ez_setup.py +276 -0
  60. data/vendor/pygments-main/pygmentize +7 -0
  61. data/vendor/pygments-main/pygments/__init__.py +91 -0
  62. data/vendor/pygments-main/pygments/cmdline.py +441 -0
  63. data/vendor/pygments-main/pygments/console.py +74 -0
  64. data/vendor/pygments-main/pygments/filter.py +74 -0
  65. data/vendor/pygments-main/pygments/filters/__init__.py +356 -0
  66. data/vendor/pygments-main/pygments/formatter.py +95 -0
  67. data/vendor/pygments-main/pygments/formatters/__init__.py +68 -0
  68. data/vendor/pygments-main/pygments/formatters/_mapping.py +92 -0
  69. data/vendor/pygments-main/pygments/formatters/bbcode.py +109 -0
  70. data/vendor/pygments-main/pygments/formatters/html.py +821 -0
  71. data/vendor/pygments-main/pygments/formatters/img.py +553 -0
  72. data/vendor/pygments-main/pygments/formatters/latex.py +378 -0
  73. data/vendor/pygments-main/pygments/formatters/other.py +115 -0
  74. data/vendor/pygments-main/pygments/formatters/rtf.py +136 -0
  75. data/vendor/pygments-main/pygments/formatters/svg.py +154 -0
  76. data/vendor/pygments-main/pygments/formatters/terminal.py +112 -0
  77. data/vendor/pygments-main/pygments/formatters/terminal256.py +222 -0
  78. data/vendor/pygments-main/pygments/lexer.py +765 -0
  79. data/vendor/pygments-main/pygments/lexers/__init__.py +240 -0
  80. data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1645 -0
  81. data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +232 -0
  82. data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +5172 -0
  83. data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +249 -0
  84. data/vendor/pygments-main/pygments/lexers/_mapping.py +354 -0
  85. data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +562 -0
  86. data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +3787 -0
  87. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +233 -0
  88. data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +557 -0
  89. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +40 -0
  90. data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +1072 -0
  91. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +360 -0
  92. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +13 -0
  93. data/vendor/pygments-main/pygments/lexers/agile.py +2290 -0
  94. data/vendor/pygments-main/pygments/lexers/asm.py +398 -0
  95. data/vendor/pygments-main/pygments/lexers/compiled.py +3723 -0
  96. data/vendor/pygments-main/pygments/lexers/dalvik.py +104 -0
  97. data/vendor/pygments-main/pygments/lexers/dotnet.py +671 -0
  98. data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
  99. data/vendor/pygments-main/pygments/lexers/functional.py +2731 -0
  100. data/vendor/pygments-main/pygments/lexers/github.py +565 -0
  101. data/vendor/pygments-main/pygments/lexers/hdl.py +356 -0
  102. data/vendor/pygments-main/pygments/lexers/jvm.py +1112 -0
  103. data/vendor/pygments-main/pygments/lexers/math.py +1918 -0
  104. data/vendor/pygments-main/pygments/lexers/other.py +3778 -0
  105. data/vendor/pygments-main/pygments/lexers/parsers.py +778 -0
  106. data/vendor/pygments-main/pygments/lexers/shell.py +424 -0
  107. data/vendor/pygments-main/pygments/lexers/special.py +100 -0
  108. data/vendor/pygments-main/pygments/lexers/sql.py +559 -0
  109. data/vendor/pygments-main/pygments/lexers/templates.py +1742 -0
  110. data/vendor/pygments-main/pygments/lexers/text.py +1893 -0
  111. data/vendor/pygments-main/pygments/lexers/web.py +4045 -0
  112. data/vendor/pygments-main/pygments/modeline.py +40 -0
  113. data/vendor/pygments-main/pygments/plugin.py +74 -0
  114. data/vendor/pygments-main/pygments/scanner.py +104 -0
  115. data/vendor/pygments-main/pygments/style.py +117 -0
  116. data/vendor/pygments-main/pygments/styles/__init__.py +70 -0
  117. data/vendor/pygments-main/pygments/styles/autumn.py +65 -0
  118. data/vendor/pygments-main/pygments/styles/borland.py +51 -0
  119. data/vendor/pygments-main/pygments/styles/bw.py +49 -0
  120. data/vendor/pygments-main/pygments/styles/colorful.py +81 -0
  121. data/vendor/pygments-main/pygments/styles/default.py +73 -0
  122. data/vendor/pygments-main/pygments/styles/emacs.py +72 -0
  123. data/vendor/pygments-main/pygments/styles/friendly.py +72 -0
  124. data/vendor/pygments-main/pygments/styles/fruity.py +42 -0
  125. data/vendor/pygments-main/pygments/styles/manni.py +75 -0
  126. data/vendor/pygments-main/pygments/styles/monokai.py +106 -0
  127. data/vendor/pygments-main/pygments/styles/murphy.py +80 -0
  128. data/vendor/pygments-main/pygments/styles/native.py +65 -0
  129. data/vendor/pygments-main/pygments/styles/pastie.py +75 -0
  130. data/vendor/pygments-main/pygments/styles/perldoc.py +69 -0
  131. data/vendor/pygments-main/pygments/styles/rrt.py +33 -0
  132. data/vendor/pygments-main/pygments/styles/tango.py +141 -0
  133. data/vendor/pygments-main/pygments/styles/trac.py +63 -0
  134. data/vendor/pygments-main/pygments/styles/vim.py +63 -0
  135. data/vendor/pygments-main/pygments/styles/vs.py +38 -0
  136. data/vendor/pygments-main/pygments/token.py +195 -0
  137. data/vendor/pygments-main/pygments/unistring.py +140 -0
  138. data/vendor/pygments-main/pygments/util.py +277 -0
  139. data/vendor/pygments-main/scripts/check_sources.py +242 -0
  140. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +32 -0
  141. data/vendor/pygments-main/scripts/epydoc.css +280 -0
  142. data/vendor/pygments-main/scripts/find_codetags.py +205 -0
  143. data/vendor/pygments-main/scripts/find_error.py +170 -0
  144. data/vendor/pygments-main/scripts/get_vimkw.py +43 -0
  145. data/vendor/pygments-main/scripts/pylintrc +301 -0
  146. data/vendor/pygments-main/scripts/reindent.py +291 -0
  147. data/vendor/pygments-main/scripts/vim2pygments.py +933 -0
  148. data/vendor/pygments-main/setup.cfg +7 -0
  149. data/vendor/pygments-main/setup.py +90 -0
  150. data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +37 -0
  151. data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +869 -0
  152. data/vendor/pygments-main/tests/dtds/HTML4.dcl +88 -0
  153. data/vendor/pygments-main/tests/dtds/HTML4.dtd +1092 -0
  154. data/vendor/pygments-main/tests/dtds/HTML4.soc +9 -0
  155. data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +195 -0
  156. data/vendor/pygments-main/tests/dtds/HTMLspec.ent +77 -0
  157. data/vendor/pygments-main/tests/dtds/HTMLsym.ent +241 -0
  158. data/vendor/pygments-main/tests/examplefiles/ANTLRv3.g +608 -0
  159. data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +209 -0
  160. data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +102 -0
  161. data/vendor/pygments-main/tests/examplefiles/BOM.js +1 -0
  162. data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +611 -0
  163. data/vendor/pygments-main/tests/examplefiles/Config.in.cache +1973 -0
  164. data/vendor/pygments-main/tests/examplefiles/Constants.mo +158 -0
  165. data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +411 -0
  166. data/vendor/pygments-main/tests/examplefiles/Deflate.fs +578 -0
  167. data/vendor/pygments-main/tests/examplefiles/Errors.scala +18 -0
  168. data/vendor/pygments-main/tests/examplefiles/File.hy +174 -0
  169. data/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +66 -0
  170. data/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +104 -0
  171. data/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +671 -0
  172. data/vendor/pygments-main/tests/examplefiles/Intro.java +1660 -0
  173. data/vendor/pygments-main/tests/examplefiles/Makefile +1131 -0
  174. data/vendor/pygments-main/tests/examplefiles/Object.st +4394 -0
  175. data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +584 -0
  176. data/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +23 -0
  177. data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +378 -0
  178. data/vendor/pygments-main/tests/examplefiles/Sorting.mod +470 -0
  179. data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +382 -0
  180. data/vendor/pygments-main/tests/examplefiles/addressbook.proto +30 -0
  181. data/vendor/pygments-main/tests/examplefiles/antlr_throws +1 -0
  182. data/vendor/pygments-main/tests/examplefiles/apache2.conf +393 -0
  183. data/vendor/pygments-main/tests/examplefiles/as3_test.as +143 -0
  184. data/vendor/pygments-main/tests/examplefiles/as3_test2.as +46 -0
  185. data/vendor/pygments-main/tests/examplefiles/as3_test3.as +3 -0
  186. data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +27 -0
  187. data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +25 -0
  188. data/vendor/pygments-main/tests/examplefiles/badcase.java +2 -0
  189. data/vendor/pygments-main/tests/examplefiles/batchfile.bat +49 -0
  190. data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +308 -0
  191. data/vendor/pygments-main/tests/examplefiles/boot-9.scm +1557 -0
  192. data/vendor/pygments-main/tests/examplefiles/ca65_example +284 -0
  193. data/vendor/pygments-main/tests/examplefiles/cbmbas_example +9 -0
  194. data/vendor/pygments-main/tests/examplefiles/cells.ps +515 -0
  195. data/vendor/pygments-main/tests/examplefiles/ceval.c +2604 -0
  196. data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +13 -0
  197. data/vendor/pygments-main/tests/examplefiles/classes.dylan +125 -0
  198. data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +10 -0
  199. data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +447 -0
  200. data/vendor/pygments-main/tests/examplefiles/database.pytb +20 -0
  201. data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +2461 -0
  202. data/vendor/pygments-main/tests/examplefiles/demo.ahk +181 -0
  203. data/vendor/pygments-main/tests/examplefiles/demo.cfm +38 -0
  204. data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +68 -0
  205. data/vendor/pygments-main/tests/examplefiles/dwarf.cw +17 -0
  206. data/vendor/pygments-main/tests/examplefiles/erl_session +10 -0
  207. data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +1 -0
  208. data/vendor/pygments-main/tests/examplefiles/evil_regex.js +48 -0
  209. data/vendor/pygments-main/tests/examplefiles/example.Rd +78 -0
  210. data/vendor/pygments-main/tests/examplefiles/example.bug +54 -0
  211. data/vendor/pygments-main/tests/examplefiles/example.c +2080 -0
  212. data/vendor/pygments-main/tests/examplefiles/example.ceylon +52 -0
  213. data/vendor/pygments-main/tests/examplefiles/example.clay +33 -0
  214. data/vendor/pygments-main/tests/examplefiles/example.cls +15 -0
  215. data/vendor/pygments-main/tests/examplefiles/example.cob +3556 -0
  216. data/vendor/pygments-main/tests/examplefiles/example.cpp +2363 -0
  217. data/vendor/pygments-main/tests/examplefiles/example.gs +106 -0
  218. data/vendor/pygments-main/tests/examplefiles/example.gst +7 -0
  219. data/vendor/pygments-main/tests/examplefiles/example.hx +142 -0
  220. data/vendor/pygments-main/tests/examplefiles/example.jag +48 -0
  221. data/vendor/pygments-main/tests/examplefiles/example.kt +47 -0
  222. data/vendor/pygments-main/tests/examplefiles/example.lagda +19 -0
  223. data/vendor/pygments-main/tests/examplefiles/example.lua +250 -0
  224. data/vendor/pygments-main/tests/examplefiles/example.monkey +152 -0
  225. data/vendor/pygments-main/tests/examplefiles/example.moo +26 -0
  226. data/vendor/pygments-main/tests/examplefiles/example.moon +629 -0
  227. data/vendor/pygments-main/tests/examplefiles/example.msc +43 -0
  228. data/vendor/pygments-main/tests/examplefiles/example.nim +1010 -0
  229. data/vendor/pygments-main/tests/examplefiles/example.ns2 +69 -0
  230. data/vendor/pygments-main/tests/examplefiles/example.p +34 -0
  231. data/vendor/pygments-main/tests/examplefiles/example.pas +2708 -0
  232. data/vendor/pygments-main/tests/examplefiles/example.prg +161 -0
  233. data/vendor/pygments-main/tests/examplefiles/example.rb +1852 -0
  234. data/vendor/pygments-main/tests/examplefiles/example.reg +19 -0
  235. data/vendor/pygments-main/tests/examplefiles/example.rexx +50 -0
  236. data/vendor/pygments-main/tests/examplefiles/example.rhtml +561 -0
  237. data/vendor/pygments-main/tests/examplefiles/example.rkt +95 -0
  238. data/vendor/pygments-main/tests/examplefiles/example.rpf +4 -0
  239. data/vendor/pygments-main/tests/examplefiles/example.sh-session +19 -0
  240. data/vendor/pygments-main/tests/examplefiles/example.shell-session +45 -0
  241. data/vendor/pygments-main/tests/examplefiles/example.sml +156 -0
  242. data/vendor/pygments-main/tests/examplefiles/example.snobol +15 -0
  243. data/vendor/pygments-main/tests/examplefiles/example.stan +108 -0
  244. data/vendor/pygments-main/tests/examplefiles/example.tea +34 -0
  245. data/vendor/pygments-main/tests/examplefiles/example.ts +28 -0
  246. data/vendor/pygments-main/tests/examplefiles/example.u +548 -0
  247. data/vendor/pygments-main/tests/examplefiles/example.weechatlog +9 -0
  248. data/vendor/pygments-main/tests/examplefiles/example.xhtml +376 -0
  249. data/vendor/pygments-main/tests/examplefiles/example.xtend +34 -0
  250. data/vendor/pygments-main/tests/examplefiles/example.yaml +302 -0
  251. data/vendor/pygments-main/tests/examplefiles/example2.aspx +29 -0
  252. data/vendor/pygments-main/tests/examplefiles/example2.msc +79 -0
  253. data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +363 -0
  254. data/vendor/pygments-main/tests/examplefiles/example_file.fy +128 -0
  255. data/vendor/pygments-main/tests/examplefiles/firefox.mak +586 -0
  256. data/vendor/pygments-main/tests/examplefiles/flipflop.sv +19 -0
  257. data/vendor/pygments-main/tests/examplefiles/foo.sce +6 -0
  258. data/vendor/pygments-main/tests/examplefiles/format.ml +1213 -0
  259. data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +77 -0
  260. data/vendor/pygments-main/tests/examplefiles/function.mu +1 -0
  261. data/vendor/pygments-main/tests/examplefiles/functional.rst +1472 -0
  262. data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +133 -0
  263. data/vendor/pygments-main/tests/examplefiles/genclass.clj +510 -0
  264. data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +193 -0
  265. data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +33 -0
  266. data/vendor/pygments-main/tests/examplefiles/glsl.frag +7 -0
  267. data/vendor/pygments-main/tests/examplefiles/glsl.vert +13 -0
  268. data/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +22 -0
  269. data/vendor/pygments-main/tests/examplefiles/hello.smali +40 -0
  270. data/vendor/pygments-main/tests/examplefiles/hello.sp +9 -0
  271. data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +1 -0
  272. data/vendor/pygments-main/tests/examplefiles/http_request_example +15 -0
  273. data/vendor/pygments-main/tests/examplefiles/http_response_example +29 -0
  274. data/vendor/pygments-main/tests/examplefiles/import.hs +4 -0
  275. data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +71 -0
  276. data/vendor/pygments-main/tests/examplefiles/intro.ik +24 -0
  277. data/vendor/pygments-main/tests/examplefiles/ints.php +10 -0
  278. data/vendor/pygments-main/tests/examplefiles/intsyn.fun +675 -0
  279. data/vendor/pygments-main/tests/examplefiles/intsyn.sig +286 -0
  280. data/vendor/pygments-main/tests/examplefiles/irb_heredoc +8 -0
  281. data/vendor/pygments-main/tests/examplefiles/irc.lsp +214 -0
  282. data/vendor/pygments-main/tests/examplefiles/java.properties +16 -0
  283. data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +28 -0
  284. data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +45 -0
  285. data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +713 -0
  286. data/vendor/pygments-main/tests/examplefiles/json.lasso +301 -0
  287. data/vendor/pygments-main/tests/examplefiles/json.lasso9 +213 -0
  288. data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +13 -0
  289. data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +47 -0
  290. data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +41 -0
  291. data/vendor/pygments-main/tests/examplefiles/logos_example.xm +28 -0
  292. data/vendor/pygments-main/tests/examplefiles/ltmain.sh +2849 -0
  293. data/vendor/pygments-main/tests/examplefiles/main.cmake +42 -0
  294. data/vendor/pygments-main/tests/examplefiles/markdown.lsp +679 -0
  295. data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +3 -0
  296. data/vendor/pygments-main/tests/examplefiles/matlab_sample +30 -0
  297. data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +37 -0
  298. data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +455 -0
  299. data/vendor/pygments-main/tests/examplefiles/mg_sample.pro +73 -0
  300. data/vendor/pygments-main/tests/examplefiles/minehunt.qml +112 -0
  301. data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +4 -0
  302. data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +340 -0
  303. data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +38 -0
  304. data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +95 -0
  305. data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +96 -0
  306. data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +30 -0
  307. data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +87 -0
  308. data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +118 -0
  309. data/vendor/pygments-main/tests/examplefiles/numbers.c +12 -0
  310. data/vendor/pygments-main/tests/examplefiles/objc_example.m +32 -0
  311. data/vendor/pygments-main/tests/examplefiles/objc_example2.m +24 -0
  312. data/vendor/pygments-main/tests/examplefiles/perl_misc +62 -0
  313. data/vendor/pygments-main/tests/examplefiles/perl_perl5db +998 -0
  314. data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +120 -0
  315. data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +856 -0
  316. data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +163 -0
  317. data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +567 -0
  318. data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +1223 -0
  319. data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +47 -0
  320. data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +10 -0
  321. data/vendor/pygments-main/tests/examplefiles/psql_session.txt +122 -0
  322. data/vendor/pygments-main/tests/examplefiles/py3_test.txt +2 -0
  323. data/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +4 -0
  324. data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +14 -0
  325. data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +2 -0
  326. data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +4 -0
  327. data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +234 -0
  328. data/vendor/pygments-main/tests/examplefiles/qsort.prolog +13 -0
  329. data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +38 -0
  330. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +280 -0
  331. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +2 -0
  332. data/vendor/pygments-main/tests/examplefiles/regex.js +22 -0
  333. data/vendor/pygments-main/tests/examplefiles/reversi.lsp +427 -0
  334. data/vendor/pygments-main/tests/examplefiles/robotframework.txt +39 -0
  335. data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +11 -0
  336. data/vendor/pygments-main/tests/examplefiles/rust_example.rs +233 -0
  337. data/vendor/pygments-main/tests/examplefiles/scilab.sci +30 -0
  338. data/vendor/pygments-main/tests/examplefiles/session.dylan-console +9 -0
  339. data/vendor/pygments-main/tests/examplefiles/sibling.prolog +19 -0
  340. data/vendor/pygments-main/tests/examplefiles/simple.md +747 -0
  341. data/vendor/pygments-main/tests/examplefiles/smarty_example.html +209 -0
  342. data/vendor/pygments-main/tests/examplefiles/source.lgt +343 -0
  343. data/vendor/pygments-main/tests/examplefiles/sources.list +62 -0
  344. data/vendor/pygments-main/tests/examplefiles/sphere.pov +18 -0
  345. data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +27 -0
  346. data/vendor/pygments-main/tests/examplefiles/squid.conf +30 -0
  347. data/vendor/pygments-main/tests/examplefiles/string.jl +1031 -0
  348. data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +21 -0
  349. data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +3 -0
  350. data/vendor/pygments-main/tests/examplefiles/swig_java.swg +1329 -0
  351. data/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +225 -0
  352. data/vendor/pygments-main/tests/examplefiles/test.R +153 -0
  353. data/vendor/pygments-main/tests/examplefiles/test.adb +211 -0
  354. data/vendor/pygments-main/tests/examplefiles/test.agda +102 -0
  355. data/vendor/pygments-main/tests/examplefiles/test.asy +131 -0
  356. data/vendor/pygments-main/tests/examplefiles/test.awk +121 -0
  357. data/vendor/pygments-main/tests/examplefiles/test.bas +29 -0
  358. data/vendor/pygments-main/tests/examplefiles/test.bb +95 -0
  359. data/vendor/pygments-main/tests/examplefiles/test.bmx +145 -0
  360. data/vendor/pygments-main/tests/examplefiles/test.boo +39 -0
  361. data/vendor/pygments-main/tests/examplefiles/test.bro +250 -0
  362. data/vendor/pygments-main/tests/examplefiles/test.cs +374 -0
  363. data/vendor/pygments-main/tests/examplefiles/test.css +54 -0
  364. data/vendor/pygments-main/tests/examplefiles/test.cu +36 -0
  365. data/vendor/pygments-main/tests/examplefiles/test.d +135 -0
  366. data/vendor/pygments-main/tests/examplefiles/test.dart +23 -0
  367. data/vendor/pygments-main/tests/examplefiles/test.dtd +89 -0
  368. data/vendor/pygments-main/tests/examplefiles/test.ebnf +31 -0
  369. data/vendor/pygments-main/tests/examplefiles/test.ec +605 -0
  370. data/vendor/pygments-main/tests/examplefiles/test.ecl +58 -0
  371. data/vendor/pygments-main/tests/examplefiles/test.eh +315 -0
  372. data/vendor/pygments-main/tests/examplefiles/test.erl +169 -0
  373. data/vendor/pygments-main/tests/examplefiles/test.evoque +33 -0
  374. data/vendor/pygments-main/tests/examplefiles/test.fan +818 -0
  375. data/vendor/pygments-main/tests/examplefiles/test.flx +57 -0
  376. data/vendor/pygments-main/tests/examplefiles/test.gdc +13 -0
  377. data/vendor/pygments-main/tests/examplefiles/test.groovy +97 -0
  378. data/vendor/pygments-main/tests/examplefiles/test.html +339 -0
  379. data/vendor/pygments-main/tests/examplefiles/test.ini +10 -0
  380. data/vendor/pygments-main/tests/examplefiles/test.java +653 -0
  381. data/vendor/pygments-main/tests/examplefiles/test.jsp +24 -0
  382. data/vendor/pygments-main/tests/examplefiles/test.maql +45 -0
  383. data/vendor/pygments-main/tests/examplefiles/test.mod +374 -0
  384. data/vendor/pygments-main/tests/examplefiles/test.moo +51 -0
  385. data/vendor/pygments-main/tests/examplefiles/test.myt +166 -0
  386. data/vendor/pygments-main/tests/examplefiles/test.nim +93 -0
  387. data/vendor/pygments-main/tests/examplefiles/test.opa +10 -0
  388. data/vendor/pygments-main/tests/examplefiles/test.p6 +252 -0
  389. data/vendor/pygments-main/tests/examplefiles/test.pas +743 -0
  390. data/vendor/pygments-main/tests/examplefiles/test.php +505 -0
  391. data/vendor/pygments-main/tests/examplefiles/test.plot +333 -0
  392. data/vendor/pygments-main/tests/examplefiles/test.ps1 +108 -0
  393. data/vendor/pygments-main/tests/examplefiles/test.pypylog +1839 -0
  394. data/vendor/pygments-main/tests/examplefiles/test.r3 +94 -0
  395. data/vendor/pygments-main/tests/examplefiles/test.rb +177 -0
  396. data/vendor/pygments-main/tests/examplefiles/test.rhtml +43 -0
  397. data/vendor/pygments-main/tests/examplefiles/test.scaml +8 -0
  398. data/vendor/pygments-main/tests/examplefiles/test.ssp +12 -0
  399. data/vendor/pygments-main/tests/examplefiles/test.tcsh +830 -0
  400. data/vendor/pygments-main/tests/examplefiles/test.vb +407 -0
  401. data/vendor/pygments-main/tests/examplefiles/test.vhdl +161 -0
  402. data/vendor/pygments-main/tests/examplefiles/test.xqy +138 -0
  403. data/vendor/pygments-main/tests/examplefiles/test.xsl +23 -0
  404. data/vendor/pygments-main/tests/examplefiles/test2.pypylog +120 -0
  405. data/vendor/pygments-main/tests/examplefiles/truncated.pytb +15 -0
  406. data/vendor/pygments-main/tests/examplefiles/type.lisp +1218 -0
  407. data/vendor/pygments-main/tests/examplefiles/underscore.coffee +603 -0
  408. data/vendor/pygments-main/tests/examplefiles/unicode.applescript +5 -0
  409. data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +11 -0
  410. data/vendor/pygments-main/tests/examplefiles/unix-io.lid +37 -0
  411. data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +3 -0
  412. data/vendor/pygments-main/tests/examplefiles/while.pov +13 -0
  413. data/vendor/pygments-main/tests/examplefiles/wiki.factor +384 -0
  414. data/vendor/pygments-main/tests/examplefiles/xml_example +1897 -0
  415. data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +798 -0
  416. data/vendor/pygments-main/tests/old_run.py +138 -0
  417. data/vendor/pygments-main/tests/run.py +49 -0
  418. data/vendor/pygments-main/tests/support.py +15 -0
  419. data/vendor/pygments-main/tests/support/tags +36 -0
  420. data/vendor/pygments-main/tests/test_basic_api.py +295 -0
  421. data/vendor/pygments-main/tests/test_clexer.py +31 -0
  422. data/vendor/pygments-main/tests/test_cmdline.py +105 -0
  423. data/vendor/pygments-main/tests/test_examplefiles.py +99 -0
  424. data/vendor/pygments-main/tests/test_html_formatter.py +178 -0
  425. data/vendor/pygments-main/tests/test_latex_formatter.py +55 -0
  426. data/vendor/pygments-main/tests/test_lexers_other.py +68 -0
  427. data/vendor/pygments-main/tests/test_perllexer.py +137 -0
  428. data/vendor/pygments-main/tests/test_regexlexer.py +47 -0
  429. data/vendor/pygments-main/tests/test_token.py +46 -0
  430. data/vendor/pygments-main/tests/test_using_api.py +40 -0
  431. data/vendor/pygments-main/tests/test_util.py +135 -0
  432. data/vendor/simplejson/.gitignore +10 -0
  433. data/vendor/simplejson/.travis.yml +5 -0
  434. data/vendor/simplejson/CHANGES.txt +291 -0
  435. data/vendor/simplejson/LICENSE.txt +19 -0
  436. data/vendor/simplejson/MANIFEST.in +5 -0
  437. data/vendor/simplejson/README.rst +19 -0
  438. data/vendor/simplejson/conf.py +179 -0
  439. data/vendor/simplejson/index.rst +628 -0
  440. data/vendor/simplejson/scripts/make_docs.py +18 -0
  441. data/vendor/simplejson/setup.py +104 -0
  442. data/vendor/simplejson/simplejson/__init__.py +510 -0
  443. data/vendor/simplejson/simplejson/_speedups.c +2745 -0
  444. data/vendor/simplejson/simplejson/decoder.py +425 -0
  445. data/vendor/simplejson/simplejson/encoder.py +567 -0
  446. data/vendor/simplejson/simplejson/ordered_dict.py +119 -0
  447. data/vendor/simplejson/simplejson/scanner.py +77 -0
  448. data/vendor/simplejson/simplejson/tests/__init__.py +67 -0
  449. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +55 -0
  450. data/vendor/simplejson/simplejson/tests/test_check_circular.py +30 -0
  451. data/vendor/simplejson/simplejson/tests/test_decimal.py +66 -0
  452. data/vendor/simplejson/simplejson/tests/test_decode.py +83 -0
  453. data/vendor/simplejson/simplejson/tests/test_default.py +9 -0
  454. data/vendor/simplejson/simplejson/tests/test_dump.py +67 -0
  455. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +46 -0
  456. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +32 -0
  457. data/vendor/simplejson/simplejson/tests/test_errors.py +34 -0
  458. data/vendor/simplejson/simplejson/tests/test_fail.py +91 -0
  459. data/vendor/simplejson/simplejson/tests/test_float.py +19 -0
  460. data/vendor/simplejson/simplejson/tests/test_indent.py +86 -0
  461. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +20 -0
  462. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +121 -0
  463. data/vendor/simplejson/simplejson/tests/test_pass1.py +76 -0
  464. data/vendor/simplejson/simplejson/tests/test_pass2.py +14 -0
  465. data/vendor/simplejson/simplejson/tests/test_pass3.py +20 -0
  466. data/vendor/simplejson/simplejson/tests/test_recursion.py +67 -0
  467. data/vendor/simplejson/simplejson/tests/test_scanstring.py +117 -0
  468. data/vendor/simplejson/simplejson/tests/test_separators.py +42 -0
  469. data/vendor/simplejson/simplejson/tests/test_speedups.py +20 -0
  470. data/vendor/simplejson/simplejson/tests/test_tuple.py +49 -0
  471. data/vendor/simplejson/simplejson/tests/test_unicode.py +109 -0
  472. data/vendor/simplejson/simplejson/tool.py +39 -0
  473. metadata +557 -0
@@ -0,0 +1,62 @@
1
+ ## CD ROM
2
+ deb cdrom:[Xubuntu 6.06.1 _Dapper Drake_ - Release i386 (20060807)]/ dapper main restricted
3
+
4
+ deb http://archive.ubuntu.com/ubuntu/ dapper main restricted
5
+ deb-src http://archive.ubuntu.com/ubuntu/ dapper main restricted
6
+
7
+ deb http://foo.com/$(ARCH)/ main foo
8
+
9
+ ## Major bug fix updates produced after the final release of the
10
+ ## distribution.
11
+ deb http://archive.ubuntu.com/ubuntu/ dapper-updates main restricted
12
+ deb-src http://archive.ubuntu.com/ubuntu/ dapper-updates main restricted
13
+
14
+ ## Uncomment the following two lines to add software from the 'universe'
15
+ ## repository.
16
+ ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
17
+ ## team, and may not be under a free licence. Please satisfy yourself as to
18
+ ## your rights to use the software. Also, please note that software in
19
+ ## universe WILL NOT receive any review or updates from the Ubuntu security
20
+ ## team.
21
+ deb http://archive.ubuntu.com/ubuntu/ dapper universe multiverse
22
+ deb-src http://archive.ubuntu.com/ubuntu/ dapper universe multiverse
23
+
24
+ ## Uncomment the following two lines to add software from the 'backports'
25
+ ## repository.
26
+ ## N.B. software from this repository may not have been tested as
27
+ ## extensively as that contained in the main release, although it includes
28
+ ## newer versions of some applications which may provide useful features.
29
+ ## Also, please note that software in backports WILL NOT receive any review
30
+ ## or updates from the Ubuntu security team.
31
+ deb http://archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse
32
+ deb-src http://archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse
33
+
34
+ deb http://security.ubuntu.com/ubuntu dapper-security main restricted
35
+ deb-src http://security.ubuntu.com/ubuntu dapper-security main restricted
36
+ deb http://security.ubuntu.com/ubuntu dapper-security universe multiverse
37
+ deb-src http://security.ubuntu.com/ubuntu dapper-security universe multiverse
38
+
39
+ ## dapper-commercial by canonical
40
+ ## currently has realplay (realplayer 10) and opera (opera 9)
41
+ deb http://archive.canonical.com/ubuntu dapper-commercial main
42
+
43
+ ## Bleeding edge wine repository for Dapper
44
+ ## only uncomment it if you need it
45
+ ## deb http://wine.budgetdedicated.com/apt dapper main
46
+ ## deb-src http://wine.budgetdedicated.com/apt dapper main
47
+
48
+ ## skype
49
+ ## only uncomment it if you need it
50
+ ## deb http://download.skype.com/linux/repos/debian/ stable non-free
51
+
52
+ deb http://de.archive.ubuntu.com/ubuntu/ edgy main restricted multiverse universe
53
+
54
+ deb http://de.archive.ubuntu.com/ubuntu/ edgy-updates main restricted multiverse universe
55
+
56
+ deb http://de.archive.ubuntu.com/ubuntu/ edgy-backports main restricted universe multiverse
57
+
58
+ deb http://security.ubuntu.com/ubuntu edgy-security main restricted universe multiverse
59
+
60
+ deb http://wine.budgetdedicated.com/apt edgy main
61
+
62
+ deb http://archive.czessi.net/ubuntu edgy main restricted universe multiverse i18n-de
@@ -0,0 +1,18 @@
1
+ #include "colors.inc"
2
+
3
+ background { color Cyan }
4
+
5
+ camera {
6
+ location <0, 2, -3>
7
+ look_at <0, 1, 2>
8
+ }
9
+
10
+ sphere {
11
+ <0, 1, 2>, 2
12
+ texture {
13
+ pigment { color Yellow }
14
+ }
15
+ }
16
+
17
+ light_source { <2, 4, -3> color White}
18
+
@@ -0,0 +1,27 @@
1
+ SQLite version 3.4.2
2
+ Enter ".help" for instructions
3
+ sqlite> .schema
4
+ CREATE TABLE paste (paste_id integer, code text, parsed_code text, pub_date
5
+ varchar(24), language varchar(64), parent_id integer, url varchar(128));
6
+ CREATE TABLE vars (key varchar(24), value varchar(128));
7
+ sqlite> a '
8
+ ...> '
9
+ ...> ;
10
+ SQL error: near "a": syntax error
11
+ sqlite> %;
12
+ SQL error: near "%": syntax error
13
+ sqlite> select count(language), language from paste group by language order
14
+ ...> by count(language) desc;
15
+ 144|python
16
+ 76|text
17
+ 22|pycon
18
+ 9|ruby
19
+ 7|c
20
+ 7|js
21
+ 6|html+django
22
+ 4|html
23
+ 4|tex
24
+ 2|html+php
25
+ 1|cpp
26
+ 1|scheme
27
+ sqlite>
@@ -0,0 +1,30 @@
1
+ # Some multiline comments
2
+
3
+ acl manager proto cache_object
4
+ acl localhost src 127.0.0.1/32 ::1
5
+ acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
6
+ acl SSL_ports port 443
7
+ acl Safe_ports port 80 # http
8
+ acl Safe_ports port 21 # ftp
9
+ acl Safe_ports port 443 # https
10
+ acl Safe_ports port 70 # gopher
11
+ acl Safe_ports port 210 # wais
12
+ acl Safe_ports port 1025-65535 # unregistered ports
13
+ acl Safe_ports port 280 # http-mgmt
14
+ acl Safe_ports port 488 # gss-http
15
+ acl Safe_ports port 591 # filemaker
16
+ acl Safe_ports port 777 # multiling http
17
+ acl CONNECT method CONNECT
18
+ http_access allow manager localhost
19
+ http_access deny manager
20
+ http_access deny !Safe_ports
21
+ http_access deny CONNECT !SSL_ports
22
+ http_access allow localhost
23
+ http_access deny all
24
+ http_port 3128
25
+ hierarchy_stoplist cgi-bin ?
26
+ coredump_dir /var/spool/squid3
27
+ refresh_pattern ^ftp: 1440 20% 10080
28
+ refresh_pattern ^gopher: 1440 0% 1440
29
+ refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
30
+ refresh_pattern . 0 20% 4320
@@ -0,0 +1,1031 @@
1
+ ## core string functions ##
2
+
3
+ length(s::String) = error("you must implement length(",typeof(s),")")
4
+ next(s::String, i::Int) = error("you must implement next(",typeof(s),",Int)")
5
+ next(s::DirectIndexString, i::Int) = (s[i],i+1)
6
+ next(s::String, i::Integer) = next(s,int(i))
7
+
8
+ ## generic supplied functions ##
9
+
10
+ start(s::String) = 1
11
+ done(s::String,i) = (i > length(s))
12
+ isempty(s::String) = done(s,start(s))
13
+ ref(s::String, i::Int) = next(s,i)[1]
14
+ ref(s::String, i::Integer) = s[int(i)]
15
+ ref(s::String, x::Real) = s[iround(x)]
16
+ ref{T<:Integer}(s::String, r::Range1{T}) = s[int(first(r)):int(last(r))]
17
+
18
+ symbol(s::String) = symbol(cstring(s))
19
+ string(s::String) = s
20
+
21
+ print(s::String) = for c=s; print(c); end
22
+ print(x...) = for i=x; print(i); end
23
+ println(args...) = print(args..., '\n')
24
+
25
+ show(s::String) = print_quoted(s)
26
+
27
+ (*)(s::String...) = strcat(s...)
28
+ (^)(s::String, r::Integer) = repeat(s,r)
29
+
30
+ size(s::String) = (length(s),)
31
+ size(s::String, d::Integer) = d==1 ? length(s) :
32
+ error("in size: dimension ",d," out of range")
33
+
34
+ strlen(s::DirectIndexString) = length(s)
35
+ function strlen(s::String)
36
+ i = start(s)
37
+ if done(s,i)
38
+ return 0
39
+ end
40
+ n = 1
41
+ while true
42
+ c, j = next(s,i)
43
+ if done(s,j)
44
+ return n
45
+ end
46
+ n += 1
47
+ i = j
48
+ end
49
+ end
50
+
51
+ isvalid(s::DirectIndexString, i::Integer) = (start(s) <= i <= length(s))
52
+ function isvalid(s::String, i::Integer)
53
+ try
54
+ next(s,i)
55
+ true
56
+ catch
57
+ false
58
+ end
59
+ end
60
+
61
+ prevind(s::DirectIndexString, i::Integer) = i-1
62
+ thisind(s::DirectIndexString, i::Integer) = i
63
+ nextind(s::DirectIndexString, i::Integer) = i+1
64
+
65
+ prevind(s::String, i::Integer) = thisind(s,thisind(s,i)-1)
66
+
67
+ function thisind(s::String, i::Integer)
68
+ for j = i:-1:1
69
+ if isvalid(s,j)
70
+ return j
71
+ end
72
+ end
73
+ return 0 # out of range
74
+ end
75
+
76
+ function nextind(s::String, i::Integer)
77
+ for j = i+1:length(s)
78
+ if isvalid(s,j)
79
+ return j
80
+ end
81
+ end
82
+ length(s)+1 # out of range
83
+ end
84
+
85
+ ind2chr(s::DirectIndexString, i::Integer) = i
86
+ chr2ind(s::DirectIndexString, i::Integer) = i
87
+
88
+ function ind2chr(s::String, i::Integer)
89
+ s[i] # throws error if invalid
90
+ j = 1
91
+ k = start(s)
92
+ while true
93
+ c, l = next(s,k)
94
+ if i <= k
95
+ return j
96
+ end
97
+ j += 1
98
+ k = l
99
+ end
100
+ end
101
+
102
+ function chr2ind(s::String, i::Integer)
103
+ if i < 1
104
+ return i
105
+ end
106
+ j = 1
107
+ k = start(s)
108
+ while true
109
+ c, l = next(s,k)
110
+ if i == j
111
+ return k
112
+ end
113
+ j += 1
114
+ k = l
115
+ end
116
+ end
117
+
118
+ function strchr(s::String, c::Char, i::Integer)
119
+ i = nextind(s,i)
120
+ while !done(s,i)
121
+ d, j = next(s,i)
122
+ if c == d
123
+ return i
124
+ end
125
+ i = j
126
+ end
127
+ return 0
128
+ end
129
+ strchr(s::String, c::Char) = strchr(s, c, start(s))
130
+ contains(s::String, c::Char) = (strchr(s,c)!=0)
131
+
132
+ function chars(s::String)
133
+ cx = Array(Char,strlen(s))
134
+ i = 0
135
+ for c in s
136
+ cx[i += 1] = c
137
+ end
138
+ return cx
139
+ end
140
+
141
+ function cmp(a::String, b::String)
142
+ i = start(a)
143
+ j = start(b)
144
+ while !done(a,i) && !done(b,i)
145
+ c, i = next(a,i)
146
+ d, j = next(b,j)
147
+ if c != d
148
+ return c < d ? -1 : +1
149
+ end
150
+ end
151
+ done(a,i) && !done(b,j) ? -1 :
152
+ !done(a,i) && done(b,j) ? +1 : 0
153
+ end
154
+
155
+ isequal(a::String, b::String) = cmp(a,b) == 0
156
+ isless(a::String, b::String) = cmp(a,b) < 0
157
+
158
+ # faster comparisons for byte strings
159
+
160
+ cmp(a::ByteString, b::ByteString) = lexcmp(a.data, b.data)
161
+ isequal(a::ByteString, b::ByteString) = length(a)==length(b) && cmp(a,b)==0
162
+
163
+ ## character column width function ##
164
+
165
+ charwidth(c::Char) = max(0,int(ccall(:wcwidth, Int32, (Char,), c)))
166
+ strwidth(s::String) = (w=0; for c in s; w += charwidth(c); end; w)
167
+ strwidth(s::ByteString) = ccall(:u8_strwidth, Int, (Ptr{Uint8},), s.data)
168
+ # TODO: implement and use u8_strnwidth that takes a length argument
169
+
170
+ ## generic string uses only length and next ##
171
+
172
+ type GenericString <: String
173
+ string::String
174
+ end
175
+
176
+ length(s::GenericString) = length(s.string)
177
+ next(s::GenericString, i::Int) = next(s.string, i)
178
+
179
+ ## plain old character arrays ##
180
+
181
+ type CharString <: String
182
+ chars::Array{Char,1}
183
+
184
+ CharString(a::Array{Char,1}) = new(a)
185
+ CharString(c::Char...) = new([ c[i] | i=1:length(c) ])
186
+ end
187
+ CharString(x...) = CharString(map(char,x)...)
188
+
189
+ next(s::CharString, i::Int) = (s.chars[i], i+1)
190
+ length(s::CharString) = length(s.chars)
191
+ strlen(s::CharString) = length(s)
192
+
193
+ string(c::Char) = CharString(c)
194
+ string(c::Char, x::Char...) = CharString(c, x...)
195
+
196
+ ## substrings reference original strings ##
197
+
198
+ type SubString <: String
199
+ string::String
200
+ offset::Int
201
+ length::Int
202
+
203
+ SubString(s::String, i::Int, j::Int) = new(s, i-1, j-i+1)
204
+ SubString(s::SubString, i::Int, j::Int) =
205
+ new(s.string, i-1+s.offset, j-i+1)
206
+ end
207
+ SubString(s::String, i::Integer, j::Integer) = SubString(s, int(i), int(j))
208
+
209
+ function next(s::SubString, i::Int)
210
+ if i < 1 || i > s.length
211
+ error("string index out of bounds")
212
+ end
213
+ c, i = next(s.string, i+s.offset)
214
+ c, i-s.offset
215
+ end
216
+
217
+ length(s::SubString) = s.length
218
+ # TODO: strlen(s::SubString) = ??
219
+ # default implementation will work but it's slow
220
+ # can this be delegated efficiently somehow?
221
+ # that may require additional string interfaces
222
+
223
+ function ref(s::String, r::Range1{Int})
224
+ if first(r) < 1 || length(s) < last(r)
225
+ error("in substring slice: index out of range")
226
+ end
227
+ SubString(s, first(r), last(r))
228
+ end
229
+
230
+ ## efficient representation of repeated strings ##
231
+
232
+ type RepString <: String
233
+ string::String
234
+ repeat::Integer
235
+ end
236
+
237
+ length(s::RepString) = length(s.string)*s.repeat
238
+ strlen(s::RepString) = strlen(s.string)*s.repeat
239
+
240
+ function next(s::RepString, i::Int)
241
+ if i < 1 || i > length(s)
242
+ error("string index out of bounds")
243
+ end
244
+ j = mod1(i,length(s.string))
245
+ c, k = next(s.string, j)
246
+ c, k-j+i
247
+ end
248
+
249
+ function repeat(s::String, r::Integer)
250
+ r < 0 ? error("can't repeat a string ",r," times") :
251
+ r == 0 ? "" :
252
+ r == 1 ? s :
253
+ RepString(s,r)
254
+ end
255
+
256
+ ## reversed strings without data movement ##
257
+
258
+ type RevString <: String
259
+ string::String
260
+ end
261
+
262
+ length(s::RevString) = length(s.string)
263
+ strlen(s::RevString) = strlen(s.string)
264
+
265
+ start(s::RevString) = (n=length(s); n-thisind(s.string,n)+1)
266
+ function next(s::RevString, i::Int)
267
+ n = length(s); j = n-i+1
268
+ (s.string[j], n-thisind(s.string,j-1)+1)
269
+ end
270
+
271
+ reverse(s::String) = RevString(s)
272
+ reverse(s::RevString) = s.string
273
+
274
+ ## ropes for efficient concatenation, etc. ##
275
+
276
+ # Idea: instead of this standard binary tree structure,
277
+ # how about we keep an array of substrings, with an
278
+ # offset array. We can do binary search on the offset
279
+ # array so we get O(log(n)) indexing time still, but we
280
+ # can compute the offsets lazily and avoid all the
281
+ # futzing around while the string is being constructed.
282
+
283
+ type RopeString <: String
284
+ head::String
285
+ tail::String
286
+ depth::Int32
287
+ length::Int
288
+
289
+ RopeString(h::RopeString, t::RopeString) =
290
+ depth(h.tail) + depth(t) < depth(h.head) ?
291
+ RopeString(h.head, RopeString(h.tail, t)) :
292
+ new(h, t, max(h.depth,t.depth)+1, length(h)+length(t))
293
+
294
+ RopeString(h::RopeString, t::String) =
295
+ depth(h.tail) < depth(h.head) ?
296
+ RopeString(h.head, RopeString(h.tail, t)) :
297
+ new(h, t, h.depth+1, length(h)+length(t))
298
+
299
+ RopeString(h::String, t::RopeString) =
300
+ depth(t.head) < depth(t.tail) ?
301
+ RopeString(RopeString(h, t.head), t.tail) :
302
+ new(h, t, t.depth+1, length(h)+length(t))
303
+
304
+ RopeString(h::String, t::String) =
305
+ new(h, t, 1, length(h)+length(t))
306
+ end
307
+
308
+ depth(s::String) = 0
309
+ depth(s::RopeString) = s.depth
310
+
311
+ function next(s::RopeString, i::Int)
312
+ if i <= length(s.head)
313
+ return next(s.head, i)
314
+ else
315
+ c, j = next(s.tail, i-length(s.head))
316
+ return c, j+length(s.head)
317
+ end
318
+ end
319
+
320
+ length(s::RopeString) = s.length
321
+ strlen(s::RopeString) = strlen(s.head) + strlen(s.tail)
322
+
323
+ strcat() = ""
324
+ strcat(s::String) = s
325
+ strcat(x...) = strcat(map(string,x)...)
326
+ strcat(s::String, t::String...) =
327
+ (t = strcat(t...); isempty(s) ? t : isempty(t) ? s : RopeString(s, t))
328
+
329
+ print(s::RopeString) = print(s.head, s.tail)
330
+
331
+ ## transformed strings ##
332
+
333
+ type TransformedString <: String
334
+ transform::Function
335
+ string::String
336
+ end
337
+
338
+ length(s::TransformedString) = length(s.string)
339
+ strlen(s::TransformedString) = strlen(s.string)
340
+
341
+ function next(s::TransformedString, i::Int)
342
+ c, j = next(s.string,i)
343
+ c = s.transform(c, i)
344
+ return c, j
345
+ end
346
+
347
+ ## uppercase and lowercase transformations ##
348
+
349
+ uppercase(c::Char) = ccall(:towupper, Char, (Char,), c)
350
+ lowercase(c::Char) = ccall(:towlower, Char, (Char,), c)
351
+
352
+ uppercase(s::String) = TransformedString((c,i)->uppercase(c), s)
353
+ lowercase(s::String) = TransformedString((c,i)->lowercase(c), s)
354
+
355
+ ucfirst(s::String) = TransformedString((c,i)->i==1 ? uppercase(c) : c, s)
356
+ lcfirst(s::String) = TransformedString((c,i)->i==1 ? lowercase(c) : c, s)
357
+
358
+ const uc = uppercase
359
+ const lc = lowercase
360
+
361
+ ## string map ##
362
+
363
+ function map(f::Function, s::String)
364
+ out = memio(length(s))
365
+ for c in s
366
+ write(out, f(c)::Char)
367
+ end
368
+ takebuf_string(out)
369
+ end
370
+
371
+ ## conversion of general objects to strings ##
372
+
373
+ string(x) = print_to_string(show, x)
374
+ cstring(x...) = print_to_string(print, x...)
375
+
376
+ function cstring(p::Ptr{Uint8})
377
+ p == C_NULL ? error("cannot convert NULL to string") :
378
+ ccall(:jl_cstr_to_string, Any, (Ptr{Uint8},), p)::ByteString
379
+ end
380
+
381
+ ## string promotion rules ##
382
+
383
+ promote_rule(::Type{UTF8String} , ::Type{ASCIIString}) = UTF8String
384
+ promote_rule(::Type{UTF8String} , ::Type{CharString} ) = UTF8String
385
+ promote_rule(::Type{ASCIIString}, ::Type{CharString} ) = UTF8String
386
+
387
+ ## printing literal quoted string data ##
388
+
389
+ # TODO: this is really the inverse of print_unbackslashed
390
+
391
+ function print_quoted_literal(s::String)
392
+ print('"')
393
+ for c = s; c == '"' ? print("\\\"") : print(c); end
394
+ print('"')
395
+ end
396
+
397
+ ## string escaping & unescaping ##
398
+
399
+ escape_nul(s::String, i::Int) =
400
+ !done(s,i) && '0' <= next(s,i)[1] <= '7' ? L"\x00" : L"\0"
401
+
402
+ is_hex_digit(c::Char) = '0'<=c<='9' || 'a'<=c<='f' || 'A'<=c<='F'
403
+ need_full_hex(s::String, i::Int) = !done(s,i) && is_hex_digit(next(s,i)[1])
404
+
405
+ function print_escaped(s::String, esc::String)
406
+ i = start(s)
407
+ while !done(s,i)
408
+ c, j = next(s,i)
409
+ c == '\0' ? print(escape_nul(s,j)) :
410
+ c == '\e' ? print(L"\e") :
411
+ c == '\\' ? print("\\\\") :
412
+ contains(esc,c) ? print('\\', c) :
413
+ iswprint(c) ? print(c) :
414
+ 7 <= c <= 13 ? print('\\', "abtnvfr"[c-6]) :
415
+ c <= '\x7f' ? print(L"\x", hex(c, 2)) :
416
+ c <= '\uffff' ? print(L"\u", hex(c, need_full_hex(s,j) ? 4 : 2)) :
417
+ print(L"\U", hex(c, need_full_hex(s,j) ? 8 : 4))
418
+ i = j
419
+ end
420
+ end
421
+
422
+ escape_string(s::String) = print_to_string(length(s), print_escaped, s, "\"")
423
+ print_quoted(s::String) = (print('"'); print_escaped(s, "\"\$"); print('"'))
424
+ #" # work around syntax highlighting problem
425
+ quote_string(s::String) = print_to_string(length(s)+2, print_quoted, s)
426
+
427
+ # bare minimum unescaping function unescapes only given characters
428
+
429
+ function print_unescaped_chars(s::String, esc::String)
430
+ if !contains(esc,'\\')
431
+ esc = strcat("\\", esc)
432
+ end
433
+ i = start(s)
434
+ while !done(s,i)
435
+ c, i = next(s,i)
436
+ if c == '\\' && !done(s,i) && contains(esc,s[i])
437
+ c, i = next(s,i)
438
+ end
439
+ print(c)
440
+ end
441
+ end
442
+
443
+ unescape_chars(s::String, esc::String) =
444
+ print_to_string(length(s), print_unescaped_chars, s, esc)
445
+
446
+ # general unescaping of traditional C and Unicode escape sequences
447
+
448
+ function print_unescaped(s::String)
449
+ i = start(s)
450
+ while !done(s,i)
451
+ c, i = next(s,i)
452
+ if !done(s,i) && c == '\\'
453
+ c, i = next(s,i)
454
+ if c == 'x' || c == 'u' || c == 'U'
455
+ n = k = 0
456
+ m = c == 'x' ? 2 :
457
+ c == 'u' ? 4 : 8
458
+ while (k+=1) <= m && !done(s,i)
459
+ c, j = next(s,i)
460
+ n = '0' <= c <= '9' ? n<<4 + c-'0' :
461
+ 'a' <= c <= 'f' ? n<<4 + c-'a'+10 :
462
+ 'A' <= c <= 'F' ? n<<4 + c-'A'+10 : break
463
+ i = j
464
+ end
465
+ if k == 1
466
+ error("\\x used with no following hex digits")
467
+ end
468
+ if m == 2 # \x escape sequence
469
+ write(uint8(n))
470
+ else
471
+ print(char(n))
472
+ end
473
+ elseif '0' <= c <= '7'
474
+ k = 1
475
+ n = c-'0'
476
+ while (k+=1) <= 3 && !done(s,i)
477
+ c, j = next(s,i)
478
+ n = '0' <= c <= '7' ? n<<3 + c-'0' : break
479
+ i = j
480
+ end
481
+ if n > 255
482
+ error("octal escape sequence out of range")
483
+ end
484
+ write(uint8(n))
485
+ else
486
+ print(c == 'a' ? '\a' :
487
+ c == 'b' ? '\b' :
488
+ c == 't' ? '\t' :
489
+ c == 'n' ? '\n' :
490
+ c == 'v' ? '\v' :
491
+ c == 'f' ? '\f' :
492
+ c == 'r' ? '\r' :
493
+ c == 'e' ? '\e' : c)
494
+ end
495
+ else
496
+ print(c)
497
+ end
498
+ end
499
+ end
500
+
501
+ unescape_string(s::String) = print_to_string(length(s), print_unescaped, s)
502
+
503
+ ## checking UTF-8 & ACSII validity ##
504
+
505
+ byte_string_classify(s::ByteString) =
506
+ ccall(:u8_isvalid, Int32, (Ptr{Uint8}, Int), s.data, length(s))
507
+ # 0: neither valid ASCII nor UTF-8
508
+ # 1: valid ASCII
509
+ # 2: valid UTF-8
510
+
511
+ is_valid_ascii(s::ByteString) = byte_string_classify(s) == 1
512
+ is_valid_utf8 (s::ByteString) = byte_string_classify(s) != 0
513
+
514
+ check_ascii(s::ByteString) = is_valid_ascii(s) ? s : error("invalid ASCII sequence")
515
+ check_utf8 (s::ByteString) = is_valid_utf8(s) ? s : error("invalid UTF-8 sequence")
516
+
517
+ ## string interpolation parsing ##
518
+
519
+ function _jl_interp_parse(s::String, unescape::Function, printer::Function)
520
+ sx = {}
521
+ i = j = start(s)
522
+ while !done(s,j)
523
+ c, k = next(s,j)
524
+ if c == '$'
525
+ if !isempty(s[i:j-1])
526
+ push(sx, unescape(s[i:j-1]))
527
+ end
528
+ ex, j = parseatom(s,k)
529
+ push(sx, ex)
530
+ i = j
531
+ elseif c == '\\' && !done(s,k)
532
+ if s[k] == '$'
533
+ if !isempty(s[i:j-1])
534
+ push(sx, unescape(s[i:j-1]))
535
+ end
536
+ i = k
537
+ end
538
+ c, j = next(s,k)
539
+ else
540
+ j = k
541
+ end
542
+ end
543
+ if !isempty(s[i:])
544
+ push(sx, unescape(s[i:j-1]))
545
+ end
546
+ length(sx) == 1 && isa(sx[1],ByteString) ? sx[1] :
547
+ expr(:call, :print_to_string, printer, sx...)
548
+ end
549
+
550
+ _jl_interp_parse(s::String, u::Function) = _jl_interp_parse(s, u, print)
551
+ _jl_interp_parse(s::String) = _jl_interp_parse(s, x->check_utf8(unescape_string(x)))
552
+
553
+ function _jl_interp_parse_bytes(s::String)
554
+ writer(x...) = for w=x; write(w); end
555
+ _jl_interp_parse(s, unescape_string, writer)
556
+ end
557
+
558
+ ## core string macros ##
559
+
560
+ macro str(s); _jl_interp_parse(s); end
561
+ macro S_str(s); _jl_interp_parse(s); end
562
+ macro I_str(s); _jl_interp_parse(s, x->unescape_chars(x,"\"")); end
563
+ macro E_str(s); check_utf8(unescape_string(s)); end
564
+ macro B_str(s); _jl_interp_parse_bytes(s); end
565
+ macro b_str(s); ex = _jl_interp_parse_bytes(s); :(($ex).data); end
566
+
567
+ ## shell-like command parsing ##
568
+
569
+ function _jl_shell_parse(s::String, interp::Bool)
570
+
571
+ in_single_quotes = false
572
+ in_double_quotes = false
573
+
574
+ args = {}
575
+ arg = {}
576
+ i = start(s)
577
+ j = i
578
+
579
+ function update_arg(x)
580
+ if !isa(x,String) || !isempty(x)
581
+ push(arg, x)
582
+ end
583
+ end
584
+ function append_arg()
585
+ if isempty(arg); arg = {"",}; end
586
+ push(args, arg)
587
+ arg = {}
588
+ end
589
+
590
+ while !done(s,j)
591
+ c, k = next(s,j)
592
+ if !in_single_quotes && !in_double_quotes && iswspace(c)
593
+ update_arg(s[i:j-1])
594
+ append_arg()
595
+ j = k
596
+ while !done(s,j)
597
+ c, k = next(s,j)
598
+ if !iswspace(c)
599
+ i = j
600
+ break
601
+ end
602
+ j = k
603
+ end
604
+ elseif interp && !in_single_quotes && c == '$'
605
+ update_arg(s[i:j-1]); i = k; j = k
606
+ if done(s,k)
607
+ error("\$ right before end of command")
608
+ end
609
+ if iswspace(s[k])
610
+ error("space not allowed right after \$")
611
+ end
612
+ ex, j = parseatom(s,j)
613
+ update_arg(ex); i = j
614
+ else
615
+ if !in_double_quotes && c == '\''
616
+ in_single_quotes = !in_single_quotes
617
+ update_arg(s[i:j-1]); i = k
618
+ elseif !in_single_quotes && c == '"'
619
+ in_double_quotes = !in_double_quotes
620
+ update_arg(s[i:j-1]); i = k
621
+ elseif c == '\\'
622
+ if in_double_quotes
623
+ if done(s,k)
624
+ error("unterminated double quote")
625
+ end
626
+ if s[k] == '"' || s[k] == '$'
627
+ update_arg(s[i:j-1]); i = k
628
+ c, k = next(s,k)
629
+ end
630
+ elseif !in_single_quotes
631
+ if done(s,k)
632
+ error("dangling backslash")
633
+ end
634
+ update_arg(s[i:j-1]); i = k
635
+ c, k = next(s,k)
636
+ end
637
+ end
638
+ j = k
639
+ end
640
+ end
641
+
642
+ if in_single_quotes; error("unterminated single quote"); end
643
+ if in_double_quotes; error("unterminated double quote"); end
644
+
645
+ update_arg(s[i:])
646
+ append_arg()
647
+
648
+ if !interp
649
+ return args
650
+ end
651
+
652
+ # construct an expression
653
+ exprs = {}
654
+ for arg in args
655
+ push(exprs, expr(:tuple, arg))
656
+ end
657
+ expr(:tuple,exprs)
658
+ end
659
+ _jl_shell_parse(s::String) = _jl_shell_parse(s,true)
660
+
661
+ function shell_split(s::String)
662
+ parsed = _jl_shell_parse(s,false)
663
+ args = String[]
664
+ for arg in parsed
665
+ push(args, strcat(arg...))
666
+ end
667
+ args
668
+ end
669
+
670
+ function print_shell_word(word::String)
671
+ if isempty(word)
672
+ print("''")
673
+ end
674
+ has_single = false
675
+ has_special = false
676
+ for c in word
677
+ if iswspace(c) || c=='\\' || c=='\'' || c=='"' || c=='$'
678
+ has_special = true
679
+ if c == '\''
680
+ has_single = true
681
+ end
682
+ end
683
+ end
684
+ if !has_special
685
+ print(word)
686
+ elseif !has_single
687
+ print('\'', word, '\'')
688
+ else
689
+ print('"')
690
+ for c in word
691
+ if c == '"' || c == '$'
692
+ print('\\')
693
+ end
694
+ print(c)
695
+ end
696
+ print('"')
697
+ end
698
+ end
699
+
700
+ function print_shell_escaped(cmd::String, args::String...)
701
+ print_shell_word(cmd)
702
+ for arg in args
703
+ print(' ')
704
+ print_shell_word(arg)
705
+ end
706
+ end
707
+
708
+ shell_escape(cmd::String, args::String...) =
709
+ print_to_string(print_shell_escaped, cmd, args...)
710
+
711
+ ## interface to parser ##
712
+
713
+ function parse(s::String, pos, greedy)
714
+ # returns (expr, end_pos). expr is () in case of parse error.
715
+ ex, pos = ccall(:jl_parse_string, Any,
716
+ (Ptr{Uint8}, Int32, Int32),
717
+ cstring(s), pos-1, greedy ? 1:0)
718
+ if isa(ex,Expr) && is(ex.head,:error)
719
+ throw(ParseError(ex.args[1]))
720
+ end
721
+ if ex == (); throw(ParseError("end of input")); end
722
+ ex, pos+1 # C is zero-based, Julia is 1-based
723
+ end
724
+
725
+ parse(s::String) = parse(s, 1, true)
726
+ parse(s::String, pos) = parse(s, pos, true)
727
+ parseatom(s::String) = parse(s, 1, false)
728
+ parseatom(s::String, pos) = parse(s, pos, false)
729
+
730
+ ## miscellaneous string functions ##
731
+
732
+ function lpad(s::String, n::Integer, p::String)
733
+ m = n - strlen(s)
734
+ if m <= 0; return s; end
735
+ l = strlen(p)
736
+ if l==1
737
+ return p^m * s
738
+ end
739
+ q = div(m,l)
740
+ r = m - q*l
741
+ cstring(p^q*p[1:chr2ind(p,r)]*s)
742
+ end
743
+
744
+ function rpad(s::String, n::Integer, p::String)
745
+ m = n - strlen(s)
746
+ if m <= 0; return s; end
747
+ l = strlen(p)
748
+ if l==1
749
+ return s * p^m
750
+ end
751
+ q = div(m,l)
752
+ r = m - q*l
753
+ cstring(s*p^q*p[1:chr2ind(p,r)])
754
+ end
755
+
756
+ lpad(s, n::Integer, p) = lpad(string(s), n, string(p))
757
+ rpad(s, n::Integer, p) = rpad(string(s), n, string(p))
758
+
759
+ lpad(s, n::Integer) = lpad(string(s), n, " ")
760
+ rpad(s, n::Integer) = rpad(string(s), n, " ")
761
+
762
+ function split(s::String, delims, include_empty::Bool)
763
+ i = 1
764
+ strs = String[]
765
+ len = length(s)
766
+ while true
767
+ tokstart = tokend = i
768
+ while !done(s,i)
769
+ (c,i) = next(s,i)
770
+ if contains(delims, c)
771
+ break
772
+ end
773
+ tokend = i
774
+ end
775
+ tok = s[tokstart:(tokend-1)]
776
+ if include_empty || !isempty(tok)
777
+ push(strs, tok)
778
+ end
779
+ if !((i <= len) || (i==len+1 && tokend!=i))
780
+ break
781
+ end
782
+ end
783
+ strs
784
+ end
785
+
786
+ split(s::String) = split(s, (' ','\t','\n','\v','\f','\r'), false)
787
+ split(s::String, x) = split(s, x, true)
788
+ split(s::String, x::Char, incl::Bool) = split(s, (x,), incl)
789
+
790
+ function print_joined(strings, delim, last)
791
+ i = start(strings)
792
+ if done(strings,i)
793
+ return
794
+ end
795
+ str, i = next(strings,i)
796
+ print(str)
797
+ while !done(strings,i)
798
+ str, i = next(strings,i)
799
+ print(done(strings,i) ? last : delim)
800
+ print(str)
801
+ end
802
+ end
803
+
804
+ function print_joined(strings, delim)
805
+ i = start(strings)
806
+ while !done(strings,i)
807
+ str, i = next(strings,i)
808
+ print(str)
809
+ if !done(strings,i)
810
+ print(delim)
811
+ end
812
+ end
813
+ end
814
+ print_joined(strings) = print_joined(strings, "")
815
+
816
+ join(args...) = print_to_string(print_joined, args...)
817
+
818
+ chop(s::String) = s[1:thisind(s,length(s))-1]
819
+ chomp(s::String) = (i=thisind(s,length(s)); s[i]=='\n' ? s[1:i-1] : s)
820
+ chomp(s::ByteString) = s.data[end]==0x0a ? s[1:end-1] : s
821
+
822
+ function lstrip(s::String)
823
+ i = start(s)
824
+ while !done(s,i)
825
+ c, j = next(s,i)
826
+ if !iswspace(c)
827
+ return s[i:end]
828
+ end
829
+ i = j
830
+ end
831
+ ""
832
+ end
833
+
834
+ function rstrip(s::String)
835
+ r = reverse(s)
836
+ i = start(r)
837
+ while !done(r,i)
838
+ c, j = next(r,i)
839
+ if !iswspace(c)
840
+ return s[1:end-i+1]
841
+ end
842
+ i = j
843
+ end
844
+ ""
845
+ end
846
+
847
+ strip(s::String) = lstrip(rstrip(s))
848
+
849
+ ## string to integer functions ##
850
+
851
+ function parse_int{T<:Integer}(::Type{T}, s::String, base::Integer)
852
+ if !(2 <= base <= 36); error("invalid base: ",base); end
853
+ i = start(s)
854
+ if done(s,i)
855
+ error("premature end of integer (in ",show_to_string(s),")")
856
+ end
857
+ c,i = next(s,i)
858
+ sgn = one(T)
859
+ if T <: Signed && c == '-'
860
+ sgn = -sgn
861
+ if done(s,i)
862
+ error("premature end of integer (in ",show_to_string(s),")")
863
+ end
864
+ c,i = next(s,i)
865
+ end
866
+ base = convert(T,base)
867
+ n::T = 0
868
+ while true
869
+ d = '0' <= c <= '9' ? c-'0' :
870
+ 'A' <= c <= 'Z' ? c-'A'+10 :
871
+ 'a' <= c <= 'z' ? c-'a'+10 : typemax(Int)
872
+ if d >= base
873
+ error(show_to_string(c)," is not a valid digit (in ",show_to_string(s),")")
874
+ end
875
+ # TODO: overflow detection?
876
+ n = n*base + d
877
+ if done(s,i)
878
+ break
879
+ end
880
+ c,i = next(s,i)
881
+ end
882
+ return flipsign(n,sgn)
883
+ end
884
+
885
+ parse_int(s::String, base::Integer) = parse_int(Int,s,base)
886
+ parse_int(T::Type, s::String) = parse_int(T,s,10)
887
+ parse_int(s::String) = parse_int(Int,s,10)
888
+
889
+ parse_bin(T::Type, s::String) = parse_int(T,s,2)
890
+ parse_oct(T::Type, s::String) = parse_int(T,s,8)
891
+ parse_hex(T::Type, s::String) = parse_int(T,s,16)
892
+
893
+ parse_bin(s::String) = parse_int(Int,s,2)
894
+ parse_oct(s::String) = parse_int(Int,s,8)
895
+ parse_hex(s::String) = parse_int(Int,s,16)
896
+
897
+ integer (s::String) = int(s)
898
+ unsigned(s::String) = uint(s)
899
+ int (s::String) = parse_int(Int,s)
900
+ uint (s::String) = parse_int(Uint,s)
901
+ int8 (s::String) = parse_int(Int8,s)
902
+ uint8 (s::String) = parse_int(Uint8,s)
903
+ int16 (s::String) = parse_int(Int16,s)
904
+ uint16 (s::String) = parse_int(Uint16,s)
905
+ int32 (s::String) = parse_int(Int32,s)
906
+ uint32 (s::String) = parse_int(Uint32,s)
907
+ int64 (s::String) = parse_int(Int64,s)
908
+ uint64 (s::String) = parse_int(Uint64,s)
909
+
910
+ ## integer to string functions ##
911
+
912
+ const _jl_dig_syms = "0123456789abcdefghijklmnopqrstuvwxyz".data
913
+
914
+ function int2str(n::Union(Int64,Uint64), b::Integer, l::Int)
915
+ if b < 2 || b > 36; error("int2str: invalid base ", b); end
916
+ neg = n < 0
917
+ n = unsigned(abs(n))
918
+ b = convert(typeof(n), b)
919
+ ndig = ndigits(n, b)
920
+ sz = max(convert(Int, ndig), l) + neg
921
+ data = Array(Uint8, sz)
922
+ i = sz
923
+ if ispow2(b)
924
+ digmask = b-1
925
+ shift = trailing_zeros(b)
926
+ while i > neg
927
+ ch = n & digmask
928
+ data[i] = _jl_dig_syms[int(ch)+1]
929
+ n >>= shift
930
+ i -= 1
931
+ end
932
+ else
933
+ while i > neg
934
+ ch = n % b
935
+ data[i] = _jl_dig_syms[int(ch)+1]
936
+ n = div(n,b)
937
+ i -= 1
938
+ end
939
+ end
940
+ if neg
941
+ data[1] = '-'
942
+ end
943
+ ASCIIString(data)
944
+ end
945
+ int2str(n::Integer, b::Integer) = int2str(n, b, 0)
946
+ int2str(n::Integer, b::Integer, l::Int) = int2str(int64(n), b, l)
947
+
948
+ string(x::Signed) = dec(int64(x))
949
+ cstring(x::Signed) = dec(int64(x))
950
+
951
+ ## string to float functions ##
952
+
953
+ function float64_isvalid(s::String, out::Array{Float64,1})
954
+ s = cstring(s)
955
+ return (ccall(:jl_strtod, Int32, (Ptr{Uint8},Ptr{Float64}), s, out)==0)
956
+ end
957
+
958
+ function float32_isvalid(s::String, out::Array{Float32,1})
959
+ s = cstring(s)
960
+ return (ccall(:jl_strtof, Int32, (Ptr{Uint8},Ptr{Float32}), s, out)==0)
961
+ end
962
+
963
+ begin
964
+ local tmp::Array{Float64,1} = Array(Float64,1)
965
+ local tmpf::Array{Float32,1} = Array(Float32,1)
966
+ global float64, float32
967
+ function float64(s::String)
968
+ if !float64_isvalid(s, tmp)
969
+ throw(ArgumentError("float64(String): invalid number format"))
970
+ end
971
+ return tmp[1]
972
+ end
973
+
974
+ function float32(s::String)
975
+ if !float32_isvalid(s, tmpf)
976
+ throw(ArgumentError("float32(String): invalid number format"))
977
+ end
978
+ return tmpf[1]
979
+ end
980
+ end
981
+
982
+ float(x::String) = float64(x)
983
+ parse_float(x::String) = float64(x)
984
+ parse_float(::Type{Float64}, x::String) = float64(x)
985
+ parse_float(::Type{Float32}, x::String) = float32(x)
986
+
987
+ # copying a byte string (generally not needed due to "immutability")
988
+
989
+ strcpy{T<:ByteString}(s::T) = T(copy(s.data))
990
+
991
+ # lexicographically compare byte arrays (used by Latin-1 and UTF-8)
992
+
993
+ function lexcmp(a::Array{Uint8,1}, b::Array{Uint8,1})
994
+ c = ccall(:memcmp, Int32, (Ptr{Uint8}, Ptr{Uint8}, Uint),
995
+ a, b, min(length(a),length(b)))
996
+ c < 0 ? -1 : c > 0 ? +1 : cmp(length(a),length(b))
997
+ end
998
+
999
+ # find the index of the first occurrence of a byte value in a byte array
1000
+
1001
+ function memchr(a::Array{Uint8,1}, b::Integer)
1002
+ p = pointer(a)
1003
+ q = ccall(:memchr, Ptr{Uint8}, (Ptr{Uint8}, Int32, Uint), p, b, length(a))
1004
+ q == C_NULL ? 0 : q - p + 1
1005
+ end
1006
+
1007
+ # concatenate byte arrays into a single array
1008
+
1009
+ memcat() = Array(Uint8,0)
1010
+ memcat(a::Array{Uint8,1}) = copy(a)
1011
+
1012
+ function memcat(arrays::Array{Uint8,1}...)
1013
+ n = 0
1014
+ for a in arrays
1015
+ n += length(a)
1016
+ end
1017
+ arr = Array(Uint8, n)
1018
+ ptr = pointer(arr)
1019
+ offset = 0
1020
+ for a in arrays
1021
+ ccall(:memcpy, Ptr{Uint8}, (Ptr{Uint8}, Ptr{Uint8}, Uint),
1022
+ ptr+offset, a, length(a))
1023
+ offset += length(a)
1024
+ end
1025
+ return arr
1026
+ end
1027
+
1028
+ # concatenate the data fields of byte strings
1029
+
1030
+ memcat(s::ByteString) = memcat(s.data)
1031
+ memcat(sx::ByteString...) = memcat(map(s->s.data, sx)...)