kalei 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +34 -0
  3. data/Rakefile +39 -0
  4. data/lib/kalei.rb +3 -0
  5. data/lib/kalei/app.rb +9 -0
  6. data/lib/kalei/engine.rb +7 -0
  7. data/lib/kalei/public/css/buttons.css +251 -0
  8. data/lib/kalei/public/css/demo-styleDoccos.css +360 -0
  9. data/lib/kalei/public/css/fixie-demo.css +39 -0
  10. data/lib/kalei/public/css/highlight/LICENSE +24 -0
  11. data/lib/kalei/public/css/highlight/README.md +120 -0
  12. data/lib/kalei/public/css/highlight/README.ru.md +125 -0
  13. data/lib/kalei/public/css/highlight/classref.txt +544 -0
  14. data/lib/kalei/public/css/highlight/default.min.css +1 -0
  15. data/lib/kalei/public/css/highlight/highlight.pack.js +1 -0
  16. data/lib/kalei/public/css/highlight/styles/arta.css +153 -0
  17. data/lib/kalei/public/css/highlight/styles/ascetic.css +49 -0
  18. data/lib/kalei/public/css/highlight/styles/brown_paper.css +104 -0
  19. data/lib/kalei/public/css/highlight/styles/brown_papersq.png +0 -0
  20. data/lib/kalei/public/css/highlight/styles/dark.css +103 -0
  21. data/lib/kalei/public/css/highlight/styles/default.css +133 -0
  22. data/lib/kalei/public/css/highlight/styles/far.css +110 -0
  23. data/lib/kalei/public/css/highlight/styles/github.css +133 -0
  24. data/lib/kalei/public/css/highlight/styles/googlecode.css +143 -0
  25. data/lib/kalei/public/css/highlight/styles/idea.css +122 -0
  26. data/lib/kalei/public/css/highlight/styles/ir_black.css +99 -0
  27. data/lib/kalei/public/css/highlight/styles/magula.css +120 -0
  28. data/lib/kalei/public/css/highlight/styles/monokai.css +116 -0
  29. data/lib/kalei/public/css/highlight/styles/pojoaque.css +106 -0
  30. data/lib/kalei/public/css/highlight/styles/pojoaque.jpg +0 -0
  31. data/lib/kalei/public/css/highlight/styles/school_book.css +111 -0
  32. data/lib/kalei/public/css/highlight/styles/school_book.png +0 -0
  33. data/lib/kalei/public/css/highlight/styles/solarized_dark.css +90 -0
  34. data/lib/kalei/public/css/highlight/styles/solarized_light.css +90 -0
  35. data/lib/kalei/public/css/highlight/styles/sunburst.css +149 -0
  36. data/lib/kalei/public/css/highlight/styles/vs.css +85 -0
  37. data/lib/kalei/public/css/highlight/styles/xcode.css +153 -0
  38. data/lib/kalei/public/css/highlight/styles/zenburn.css +115 -0
  39. data/lib/kalei/public/css/styles.css +95 -0
  40. data/lib/kalei/public/css/theme.css +259 -0
  41. data/lib/kalei/public/css/theme2.css +51 -0
  42. data/lib/kalei/public/js/boilerplate.js +9 -0
  43. data/lib/kalei/public/js/config.js +8 -0
  44. data/lib/kalei/public/js/events.js +8 -0
  45. data/lib/kalei/public/js/libs/backbone/backbone-min.js +37 -0
  46. data/lib/kalei/public/js/libs/backbone/backbone-optamd3-min.js +37 -0
  47. data/lib/kalei/public/js/libs/cssbeautify/cssbeautify.js +198 -0
  48. data/lib/kalei/public/js/libs/fixie/fixie.js +1 -0
  49. data/lib/kalei/public/js/libs/highlight/highlight.js +1 -0
  50. data/lib/kalei/public/js/libs/highlight/highlight.pack.js +1 -0
  51. data/lib/kalei/public/js/libs/highlighter/shBrushCss.js +90 -0
  52. data/lib/kalei/public/js/libs/highlighter/shCore.js +2371 -0
  53. data/lib/kalei/public/js/libs/jquery/jquery-min.js +4 -0
  54. data/lib/kalei/public/js/libs/jscssp/jscssp.js +5431 -0
  55. data/lib/kalei/public/js/libs/marked/marked.js +793 -0
  56. data/lib/kalei/public/js/libs/pagedown/converter.js +1335 -0
  57. data/lib/kalei/public/js/libs/pagedown/pagedown +1332 -0
  58. data/lib/kalei/public/js/libs/pagedown/sanitizer.js +108 -0
  59. data/lib/kalei/public/js/libs/parseuri/parseuri.js +32 -0
  60. data/lib/kalei/public/js/libs/require/order.js +1 -0
  61. data/lib/kalei/public/js/libs/require/require.js +31 -0
  62. data/lib/kalei/public/js/libs/require/text.js +11 -0
  63. data/lib/kalei/public/js/libs/showdown/showdown.js +1344 -0
  64. data/lib/kalei/public/js/libs/underscore/underscore-min.js +31 -0
  65. data/lib/kalei/public/js/main.js +39 -0
  66. data/lib/kalei/public/js/router.js +39 -0
  67. data/lib/kalei/public/js/views/app.js +24 -0
  68. data/lib/kalei/public/js/views/style/menu.js +77 -0
  69. data/lib/kalei/public/js/views/style/page.js +100 -0
  70. data/lib/kalei/public/js/vm.js +33 -0
  71. data/lib/kalei/public/templates/layout.html +4 -0
  72. data/lib/kalei/public/templates/style/menu.html +22 -0
  73. data/lib/kalei/public/templates/style/page.html +15 -0
  74. data/lib/kalei/views/index.erb +18 -0
  75. data/test/dummy/README.rdoc +261 -0
  76. data/test/dummy/Rakefile +7 -0
  77. data/test/dummy/app/assets/javascripts/application.js +15 -0
  78. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  79. data/test/dummy/app/assets/stylesheets/example.css +251 -0
  80. data/test/dummy/app/controllers/application_controller.rb +3 -0
  81. data/test/dummy/app/helpers/application_helper.rb +2 -0
  82. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  83. data/test/dummy/config.ru +4 -0
  84. data/test/dummy/config/application.rb +65 -0
  85. data/test/dummy/config/boot.rb +10 -0
  86. data/test/dummy/config/environment.rb +5 -0
  87. data/test/dummy/config/environments/development.rb +31 -0
  88. data/test/dummy/config/environments/production.rb +64 -0
  89. data/test/dummy/config/environments/test.rb +35 -0
  90. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  91. data/test/dummy/config/initializers/inflections.rb +15 -0
  92. data/test/dummy/config/initializers/mime_types.rb +5 -0
  93. data/test/dummy/config/initializers/secret_token.rb +7 -0
  94. data/test/dummy/config/initializers/session_store.rb +8 -0
  95. data/test/dummy/config/initializers/wrap_parameters.rb +10 -0
  96. data/test/dummy/config/locales/en.yml +5 -0
  97. data/test/dummy/config/routes.rb +4 -0
  98. data/test/dummy/log/development (MacBook Air's conflicted copy 2012-11-07).log +12900 -0
  99. data/test/dummy/log/development (Work iMac's conflicted copy 2012-11-06).log +12539 -0
  100. data/test/dummy/log/development.log +16426 -0
  101. data/test/dummy/public/404.html +26 -0
  102. data/test/dummy/public/422.html +26 -0
  103. data/test/dummy/public/500.html +25 -0
  104. data/test/dummy/public/favicon.ico +0 -0
  105. data/test/dummy/script/rails +6 -0
  106. data/test/dummy/tmp/cache/assets/BBF/D60/sprockets%2Fc81500801e644b9c5335793957200428 +0 -0
  107. data/test/dummy/tmp/cache/assets/BE2/9B0/sprockets%2F4097e8869406a33602004190d03272ad +0 -0
  108. data/test/dummy/tmp/cache/assets/C59/B10/sprockets%2Fc6a54e0f5352e41a92c1451976584894 +0 -0
  109. data/test/dummy/tmp/cache/assets/C5F/F60/sprockets%2F661d2795e99d0034ce6873925e0256c4 +0 -0
  110. data/test/dummy/tmp/cache/assets/C64/8C0/sprockets%2F8996c378630075350fb258019546feef +0 -0
  111. data/test/dummy/tmp/cache/assets/C94/F80/sprockets%2F5169b582f529b8d582a59c77c247405f +0 -0
  112. data/test/dummy/tmp/cache/assets/CA2/420/sprockets%2Fd6a388375c983c17d367a676398f8c19 +0 -0
  113. data/test/dummy/tmp/cache/assets/CB0/0B0/sprockets%2F79332476368821ab45ad05e0ae798ad1 +0 -0
  114. data/test/dummy/tmp/cache/assets/CB1/C70/sprockets%2F7022bb23d88717cc1625b47988f0af61 +0 -0
  115. data/test/dummy/tmp/cache/assets/CB5/DB0/sprockets%2F3c20130f1945e66bbc9726cb8925f647 +0 -0
  116. data/test/dummy/tmp/cache/assets/CB6/DF0/sprockets%2F3d4ce8bf5883f171628c030851a5a669 +0 -0
  117. data/test/dummy/tmp/cache/assets/CC1/B70/sprockets%2F2451c355722fdc5979cd365f9f9705a3 +0 -0
  118. data/test/dummy/tmp/cache/assets/CC2/550/sprockets%2F07be9de6d83634f4e056ba2982578725 +0 -0
  119. data/test/dummy/tmp/cache/assets/CC5/8D0/sprockets%2F31f92d93c1650884a626e941c949bff8 +0 -0
  120. data/test/dummy/tmp/cache/assets/CC5/D90/sprockets%2F1b9f99d72878209259dce90e419a04d5 +0 -0
  121. data/test/dummy/tmp/cache/assets/CC8/780/sprockets%2F8578d679f76df60299b502a4c762a62f +0 -0
  122. data/test/dummy/tmp/cache/assets/CC8/C10/sprockets%2F69e29270f13a4c8cd925ac79608878d6 +0 -0
  123. data/test/dummy/tmp/cache/assets/CD1/700/sprockets%2F4a8e02ffcb8924669105305f0b107c1b +0 -0
  124. data/test/dummy/tmp/cache/assets/CD5/DC0/sprockets%2F92fa0519b445f0f1027d42bd9a4165e4 +0 -0
  125. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  126. data/test/dummy/tmp/cache/assets/CDB/DC0/sprockets%2F58518572a25128ada56ed9156aac53c4 +0 -0
  127. data/test/dummy/tmp/cache/assets/CDE/C90/sprockets%2F2b20d9775c811fdb6a466e86711d15c3 +0 -0
  128. data/test/dummy/tmp/cache/assets/CE3/2A0/sprockets%2F334b4fc16f7e765755c1be56c9010e28 +0 -0
  129. data/test/dummy/tmp/cache/assets/CE5/FF0/sprockets%2F6113d3e443309efb13b899b3a94b578e +0 -0
  130. data/test/dummy/tmp/cache/assets/CF2/7D0/sprockets%2F7c50d8877e9a4ee1553dc6626c373d38 +0 -0
  131. data/test/dummy/tmp/cache/assets/CF3/C60/sprockets%2Fdfc0395a5019a0a24b34c170a36424de +0 -0
  132. data/test/dummy/tmp/cache/assets/CFC/480/sprockets%2F9d5ab28532957b83f7f9fcbd78021699 +0 -0
  133. data/test/dummy/tmp/cache/assets/CFF/C60/sprockets%2F4ed7a36bde489e10f97698475493ae57 +0 -0
  134. data/test/dummy/tmp/cache/assets/D00/B00/sprockets%2Fd670c548ea2643bd95a65504c11cc13b +0 -0
  135. data/test/dummy/tmp/cache/assets/D0A/CB0/sprockets%2Fed8ba102e7d5015265f1e51a89b8d355 +0 -0
  136. data/test/dummy/tmp/cache/assets/D10/2B0/sprockets%2F1941a534f48d6fa7b22e23b4ca397b69 +0 -0
  137. data/test/dummy/tmp/cache/assets/D17/2A0/sprockets%2Fc094a0ad0b3abb1b92850a86f2000b61 +0 -0
  138. data/test/dummy/tmp/cache/assets/D17/920/sprockets%2Fa6ea2beb942f969acce6231944871652 +0 -0
  139. data/test/dummy/tmp/cache/assets/D19/7C0/sprockets%2F6bd121745f94b781ed36dd0ffa473856 +0 -0
  140. data/test/dummy/tmp/cache/assets/D1A/6F0/sprockets%2F41dd836dc3f691e237833bc1b6f76d93 +0 -0
  141. data/test/dummy/tmp/cache/assets/D1A/770/sprockets%2Fcfad959e3f5eb529a1310d85483b9419 +0 -0
  142. data/test/dummy/tmp/cache/assets/D1F/000/sprockets%2Fdecbf7d6343c0d9638d301c9982298c6 +0 -0
  143. data/test/dummy/tmp/cache/assets/D1F/4D0/sprockets%2F860075c377f26472f83ef56a7bb89aad +0 -0
  144. data/test/dummy/tmp/cache/assets/D20/7D0/sprockets%2F1f7e984b4c793c57d666af84ab414d53 +0 -0
  145. data/test/dummy/tmp/cache/assets/D23/D20/sprockets%2F746c5fb7c744dd87e61f34c8644183fb +0 -0
  146. data/test/dummy/tmp/cache/assets/D29/080/sprockets%2F6b81d746679c6151bc66da896aa97de9 +0 -0
  147. data/test/dummy/tmp/cache/assets/D29/890/sprockets%2Fb5d9c167884139e0f6b8d53816de6e9d +0 -0
  148. data/test/dummy/tmp/cache/assets/D2B/2D0/sprockets%2Fbaf7beb2c3603cfa100b276923a86543 +0 -0
  149. data/test/dummy/tmp/cache/assets/D2B/3F0/sprockets%2Fd6c1fabe78df17a601309081130ca90d +0 -0
  150. data/test/dummy/tmp/cache/assets/D2E/700/sprockets%2F9d6beb99735c03f375e19c5857ccf955 +0 -0
  151. data/test/dummy/tmp/cache/assets/D31/DF0/sprockets%2Fb9ca3ac15e18a4d032f61278565b7bd0 +0 -0
  152. data/test/dummy/tmp/cache/assets/D32/980/sprockets%2F65a361c15a5ff036ce119cb1d2296e4c +0 -0
  153. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  154. data/test/dummy/tmp/cache/assets/D32/CA0/sprockets%2F05becf082d0b555622d944ac6e7202cf +0 -0
  155. data/test/dummy/tmp/cache/assets/D36/570/sprockets%2Fadfccb7c2436e006496eae16d6901523 +0 -0
  156. data/test/dummy/tmp/cache/assets/D3F/080/sprockets%2Fb5d1e36ac49d4c9e11728239ecf104e6 +0 -0
  157. data/test/dummy/tmp/cache/assets/D3F/630/sprockets%2F9093e471e526d13234feda4a9cc80fc5 +0 -0
  158. data/test/dummy/tmp/cache/assets/D41/3D0/sprockets%2Fd570b46455f776a30cbb729b442fbbf8 +0 -0
  159. data/test/dummy/tmp/cache/assets/D43/500/sprockets%2F91261e8d0df721df2c19e7c8cc6872b0 +0 -0
  160. data/test/dummy/tmp/cache/assets/D44/2F0/sprockets%2F8abebce08d92187dd84464b40264fc73 +0 -0
  161. data/test/dummy/tmp/cache/assets/D46/350/sprockets%2Fd8bcb0686002ee32c4bf49887f09be36 +0 -0
  162. data/test/dummy/tmp/cache/assets/D4A/F50/sprockets%2F99df6af7ff98150e1255d6d9110b80ea +0 -0
  163. data/test/dummy/tmp/cache/assets/D50/480/sprockets%2F6e151e3dec739c7a338a877ef65fc174 +0 -0
  164. data/test/dummy/tmp/cache/assets/D56/AE0/sprockets%2F68f98777bb22b8e8a78097ba0c86be0f +0 -0
  165. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  166. data/test/dummy/tmp/cache/assets/D5B/E00/sprockets%2Ffea8965ad9d35e43675fc5b948e0e934 +0 -0
  167. data/test/dummy/tmp/cache/assets/D68/860/sprockets%2Fafacb887390255dae680441eaf00ff52 +0 -0
  168. data/test/dummy/tmp/cache/assets/D6A/BD0/sprockets%2Fada1b7fa3ff025849aec28559a500c76 +0 -0
  169. data/test/dummy/tmp/cache/assets/D6D/F20/sprockets%2F3c1e635c4ba90a4512849be74fcfee07 +0 -0
  170. data/test/dummy/tmp/cache/assets/D6E/540/sprockets%2F4ea3314d23fc25fc9beec6262272f7f5 +0 -0
  171. data/test/dummy/tmp/cache/assets/D73/690/sprockets%2F356bd79cadb47fd8d6836c17d21318ab +0 -0
  172. data/test/dummy/tmp/cache/assets/D73/7D0/sprockets%2Ff89249a45e22e86c35f227bd340adedd +0 -0
  173. data/test/dummy/tmp/cache/assets/D75/000/sprockets%2Fdfae73207596c9fcc854a2aa1e4f7661 +0 -0
  174. data/test/dummy/tmp/cache/assets/D7A/340/sprockets%2Fc880ec2dd9f7c964cf13a12b9674c63d +0 -0
  175. data/test/dummy/tmp/cache/assets/D7B/6F0/sprockets%2Fc16bfd961e80bb761c67cd760179df8c +0 -0
  176. data/test/dummy/tmp/cache/assets/D7F/D20/sprockets%2Fe4293aa867945ef5c6eb5b26e69c6aa5 +0 -0
  177. data/test/dummy/tmp/cache/assets/D81/180/sprockets%2Fd666d9ef622f0e8cb708f5d8a6b2077f +0 -0
  178. data/test/dummy/tmp/cache/assets/D81/240/sprockets%2F1d0f3cd232c07902529b25abd0bd4ccd +0 -0
  179. data/test/dummy/tmp/cache/assets/D83/560/sprockets%2F9d807a49bc60df8ffb65e99292f3c0a6 +0 -0
  180. data/test/dummy/tmp/cache/assets/D85/D50/sprockets%2Feb82054976bcf4d46c573eafed819f58 +0 -0
  181. data/test/dummy/tmp/cache/assets/D8F/870/sprockets%2F696f6648b2fcbceb8e2686875e6cd6b6 +0 -0
  182. data/test/dummy/tmp/cache/assets/D94/9D0/sprockets%2Ff1c6747b2a961ab3ef92a5a1abe635c4 +0 -0
  183. data/test/dummy/tmp/cache/assets/D96/E00/sprockets%2F7f345bc6ada58cac0203458fc076f1ed +0 -0
  184. data/test/dummy/tmp/cache/assets/D98/DE0/sprockets%2Fbeac47000d16b66f5757aa626f5e8bda +0 -0
  185. data/test/dummy/tmp/cache/assets/D9D/BD0/sprockets%2F1f338b9df8d5a3ffe0b85591db253ab0 +0 -0
  186. data/test/dummy/tmp/cache/assets/DA0/0A0/sprockets%2F61e5c9d0b209a8ce5c8a9aa719ad564d +0 -0
  187. data/test/dummy/tmp/cache/assets/DB1/A10/sprockets%2Fde67190aff966baf9a57f6641fda292e +0 -0
  188. data/test/dummy/tmp/cache/assets/DBE/950/sprockets%2Fa3fbb592cacd368796899f89b95cde1d +0 -0
  189. data/test/dummy/tmp/cache/assets/DC3/950/sprockets%2F12be1e5b8e749be4b42e4ccbb24e1a84 +0 -0
  190. data/test/dummy/tmp/cache/assets/DC5/E10/sprockets%2Fd10332dee1b2ee73913f7f01e6bffc2f +0 -0
  191. data/test/dummy/tmp/cache/assets/DC7/FF0/sprockets%2F4d3d0db28baaafb745e1b4c5f564d891 +0 -0
  192. data/test/dummy/tmp/cache/assets/DCC/810/sprockets%2F8d18398a60db7e9e61ae42bea18b2aeb +0 -0
  193. data/test/dummy/tmp/cache/assets/DE5/A10/sprockets%2F1aa8db45a4cf7ab09d460c22ed063adb +0 -0
  194. data/test/dummy/tmp/cache/assets/DEB/9E0/sprockets%2F1afb4b1d001bc3c1b7cf8cc548bd73e7 +0 -0
  195. data/test/dummy/tmp/cache/assets/DF3/AB0/sprockets%2Fa2fbea7b8e275e2e4b610cd1d8fed006 +0 -0
  196. data/test/dummy/tmp/cache/assets/DF4/A90/sprockets%2Fc6d9482adadab4569aacdf12a224af49 +0 -0
  197. data/test/dummy/tmp/cache/assets/DF5/520/sprockets%2F0cb7052285cefb59b10efc3ed1c6f5cd +0 -0
  198. data/test/dummy/tmp/cache/assets/DF8/000/sprockets%2Fb2bc6fbabfb2c270896a8a44da66fa47 +0 -0
  199. data/test/dummy/tmp/cache/assets/DFB/2D0/sprockets%2F0e88b08c47faeae40d7682dc28b1fbad +0 -0
  200. data/test/dummy/tmp/cache/assets/DFB/9A0/sprockets%2Fb9a29f57d1ebf045452ed6cbd62eae1d +0 -0
  201. data/test/dummy/tmp/cache/assets/E02/D20/sprockets%2Fbd7f5fd245b9c9fc534cad60ef038d4a +0 -0
  202. data/test/dummy/tmp/cache/assets/E35/0A0/sprockets%2F9e0f5c61a97a72fc952a7dbbcefb7cb6 +0 -0
  203. data/test/dummy/tmp/cache/assets/E38/BA0/sprockets%2Fbee7ee5afe77332bcc53bc4e29c77a7f +0 -0
  204. data/test/dummy/tmp/cache/assets/E55/740/sprockets%2Fd51ee7ad0adc4b323ce1a9b88ed4a9af +0 -0
  205. data/test/dummy/tmp/cache/assets/E5C/410/sprockets%2F1bec976eb7fc54612519dcaccae6ccbe +0 -0
  206. data/test/dummy/tmp/cache/assets/EC5/D20/sprockets%2Fc1cf4676f1d3ab9dc9fcbaae59fbe9da +0 -0
  207. data/test/functional/kalei/index_controller_test.rb +11 -0
  208. data/test/integration/navigation_test.rb +9 -0
  209. data/test/kalei_test.rb +7 -0
  210. data/test/test_helper.rb +15 -0
  211. metadata +414 -0
@@ -0,0 +1,793 @@
1
+ /**
2
+ * marked - A markdown parser (https://github.com/chjj/marked)
3
+ * Copyright (c) 2011-2012, Christopher Jeffrey. (MIT Licensed)
4
+ */
5
+ define(function (){
6
+ ;(function() {
7
+
8
+ /**
9
+ * Block-Level Grammar
10
+ */
11
+
12
+ var block = {
13
+ newline: /^\n+/,
14
+ code: /^( {4}[^\n]+\n*)+/,
15
+ fences: noop,
16
+ hr: /^( *[-*_]){3,} *(?:\n+|$)/,
17
+ heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,
18
+ lheading: /^([^\n]+)\n *(=|-){3,} *\n*/,
19
+ blockquote: /^( *>[^\n]+(\n[^\n]+)*\n*)+/,
20
+ list: /^( *)(bull) [^\0]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
21
+ html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,
22
+ def: /^ *\[([^\]]+)\]: *([^\s]+)(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,
23
+ paragraph: /^([^\n]+\n?(?!body))+\n*/,
24
+ text: /^[^\n]+/
25
+ };
26
+
27
+ block.bullet = /(?:[*+-]|\d+\.)/;
28
+ block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;
29
+ block.item = replace(block.item, 'gm')
30
+ (/bull/g, block.bullet)
31
+ ();
32
+
33
+ block.list = replace(block.list)
34
+ (/bull/g, block.bullet)
35
+ ('hr', /\n+(?=(?: *[-*_]){3,} *(?:\n+|$))/)
36
+ ();
37
+
38
+ block.html = replace(block.html)
39
+ ('comment', /<!--[^\0]*?-->/)
40
+ ('closed', /<(tag)[^\0]+?<\/\1>/)
41
+ ('closing', /<tag(?!:\/|@)\b(?:"[^"]*"|'[^']*'|[^'">])*?>/)
42
+ (/tag/g, tag())
43
+ ();
44
+
45
+ block.paragraph = (function() {
46
+ var paragraph = block.paragraph.source
47
+ , body = [];
48
+
49
+ (function push(rule) {
50
+ rule = block[rule] ? block[rule].source : rule;
51
+ body.push(rule.replace(/(^|[^\[])\^/g, '$1'));
52
+ return push;
53
+ })
54
+ ('hr')
55
+ ('heading')
56
+ ('lheading')
57
+ ('blockquote')
58
+ ('<' + tag())
59
+ ('def');
60
+
61
+ return new
62
+ RegExp(paragraph.replace('body', body.join('|')));
63
+ })();
64
+
65
+ block.normal = {
66
+ fences: block.fences,
67
+ paragraph: block.paragraph
68
+ };
69
+
70
+ block.gfm = {
71
+ fences: /^ *``` *(\w+)? *\n([^\0]+?)\s*``` *(?:\n+|$)/,
72
+ paragraph: /^/
73
+ };
74
+
75
+ block.gfm.paragraph = replace(block.paragraph)
76
+ ('(?!', '(?!' + block.gfm.fences.source.replace(/(^|[^\[])\^/g, '$1') + '|')
77
+ ();
78
+
79
+ /**
80
+ * Block Lexer
81
+ */
82
+
83
+ block.lexer = function(src) {
84
+ var tokens = [];
85
+
86
+ tokens.links = {};
87
+
88
+ src = src
89
+ .replace(/\r\n|\r/g, '\n')
90
+ .replace(/\t/g, ' ');
91
+
92
+ return block.token(src, tokens, true);
93
+ };
94
+
95
+ block.token = function(src, tokens, top) {
96
+ var src = src.replace(/^ +$/gm, '')
97
+ , next
98
+ , loose
99
+ , cap
100
+ , item
101
+ , space
102
+ , i
103
+ , l;
104
+
105
+ while (src) {
106
+ // newline
107
+ if (cap = block.newline.exec(src)) {
108
+ src = src.substring(cap[0].length);
109
+ if (cap[0].length > 1) {
110
+ tokens.push({
111
+ type: 'space'
112
+ });
113
+ }
114
+ }
115
+
116
+ // code
117
+ if (cap = block.code.exec(src)) {
118
+ src = src.substring(cap[0].length);
119
+ cap = cap[0].replace(/^ {4}/gm, '');
120
+ tokens.push({
121
+ type: 'code',
122
+ text: !options.pedantic
123
+ ? cap.replace(/\n+$/, '')
124
+ : cap
125
+ });
126
+ continue;
127
+ }
128
+
129
+ // fences (gfm)
130
+ if (cap = block.fences.exec(src)) {
131
+ src = src.substring(cap[0].length);
132
+ tokens.push({
133
+ type: 'code',
134
+ lang: cap[1],
135
+ text: cap[2]
136
+ });
137
+ continue;
138
+ }
139
+
140
+ // heading
141
+ if (cap = block.heading.exec(src)) {
142
+ src = src.substring(cap[0].length);
143
+ tokens.push({
144
+ type: 'heading',
145
+ depth: cap[1].length,
146
+ text: cap[2]
147
+ });
148
+ continue;
149
+ }
150
+
151
+ // lheading
152
+ if (cap = block.lheading.exec(src)) {
153
+ src = src.substring(cap[0].length);
154
+ tokens.push({
155
+ type: 'heading',
156
+ depth: cap[2] === '=' ? 1 : 2,
157
+ text: cap[1]
158
+ });
159
+ continue;
160
+ }
161
+
162
+ // hr
163
+ if (cap = block.hr.exec(src)) {
164
+ src = src.substring(cap[0].length);
165
+ tokens.push({
166
+ type: 'hr'
167
+ });
168
+ continue;
169
+ }
170
+
171
+ // blockquote
172
+ if (cap = block.blockquote.exec(src)) {
173
+ src = src.substring(cap[0].length);
174
+
175
+ tokens.push({
176
+ type: 'blockquote_start'
177
+ });
178
+
179
+ cap = cap[0].replace(/^ *> ?/gm, '');
180
+
181
+ // Pass `top` to keep the current
182
+ // "toplevel" state. This is exactly
183
+ // how markdown.pl works.
184
+ block.token(cap, tokens, top);
185
+
186
+ tokens.push({
187
+ type: 'blockquote_end'
188
+ });
189
+
190
+ continue;
191
+ }
192
+
193
+ // list
194
+ if (cap = block.list.exec(src)) {
195
+ src = src.substring(cap[0].length);
196
+
197
+ tokens.push({
198
+ type: 'list_start',
199
+ ordered: isFinite(cap[2])
200
+ });
201
+
202
+ // Get each top-level item.
203
+ cap = cap[0].match(block.item);
204
+
205
+ next = false;
206
+ l = cap.length;
207
+ i = 0;
208
+
209
+ for (; i < l; i++) {
210
+ item = cap[i];
211
+
212
+ // Remove the list item's bullet
213
+ // so it is seen as the next token.
214
+ space = item.length;
215
+ item = item.replace(/^ *([*+-]|\d+\.) +/, '');
216
+
217
+ // Outdent whatever the
218
+ // list item contains. Hacky.
219
+ if (~item.indexOf('\n ')) {
220
+ space -= item.length;
221
+ item = !options.pedantic
222
+ ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
223
+ : item.replace(/^ {1,4}/gm, '');
224
+ }
225
+
226
+ // Determine whether item is loose or not.
227
+ // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
228
+ // for discount behavior.
229
+ loose = next || /\n\n(?!\s*$)/.test(item);
230
+ if (i !== l - 1) {
231
+ next = item[item.length-1] === '\n';
232
+ if (!loose) loose = next;
233
+ }
234
+
235
+ tokens.push({
236
+ type: loose
237
+ ? 'loose_item_start'
238
+ : 'list_item_start'
239
+ });
240
+
241
+ // Recurse.
242
+ block.token(item, tokens);
243
+
244
+ tokens.push({
245
+ type: 'list_item_end'
246
+ });
247
+ }
248
+
249
+ tokens.push({
250
+ type: 'list_end'
251
+ });
252
+
253
+ continue;
254
+ }
255
+
256
+ // html
257
+ if (cap = block.html.exec(src)) {
258
+ src = src.substring(cap[0].length);
259
+ tokens.push({
260
+ type: 'html',
261
+ pre: cap[1] === 'pre',
262
+ text: cap[0]
263
+ });
264
+ continue;
265
+ }
266
+
267
+ // def
268
+ if (top && (cap = block.def.exec(src))) {
269
+ src = src.substring(cap[0].length);
270
+ tokens.links[cap[1].toLowerCase()] = {
271
+ href: cap[2],
272
+ title: cap[3]
273
+ };
274
+ continue;
275
+ }
276
+
277
+ // top-level paragraph
278
+ if (top && (cap = block.paragraph.exec(src))) {
279
+ src = src.substring(cap[0].length);
280
+ tokens.push({
281
+ type: 'paragraph',
282
+ text: cap[0]
283
+ });
284
+ continue;
285
+ }
286
+
287
+ // text
288
+ if (cap = block.text.exec(src)) {
289
+ // Top-level should never reach here.
290
+ src = src.substring(cap[0].length);
291
+ tokens.push({
292
+ type: 'text',
293
+ text: cap[0]
294
+ });
295
+ continue;
296
+ }
297
+ }
298
+
299
+ return tokens;
300
+ };
301
+
302
+ /**
303
+ * Inline Processing
304
+ */
305
+
306
+ var inline = {
307
+ escape: /^\\([\\`*{}\[\]()#+\-.!_>])/,
308
+ autolink: /^<([^ >]+(@|:\/)[^ >]+)>/,
309
+ url: noop,
310
+ tag: /^<!--[^\0]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,
311
+ link: /^!?\[(inside)\]\(href\)/,
312
+ reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/,
313
+ nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,
314
+ strong: /^__([^\0]+?)__(?!_)|^\*\*([^\0]+?)\*\*(?!\*)/,
315
+ em: /^\b_((?:__|[^\0])+?)_\b|^\*((?:\*\*|[^\0])+?)\*(?!\*)/,
316
+ code: /^(`+)([^\0]*?[^`])\1(?!`)/,
317
+ br: /^ {2,}\n(?!\s*$)/,
318
+ text: /^[^\0]+?(?=[\\<!\[_*`]| {2,}\n|$)/
319
+ };
320
+
321
+ inline._linkInside = /(?:\[[^\]]*\]|[^\]]|\](?=[^\[]*\]))*/;
322
+ inline._linkHref = /\s*<?([^\s]*?)>?(?:\s+['"]([^\0]*?)['"])?\s*/;
323
+
324
+ inline.link = replace(inline.link)
325
+ ('inside', inline._linkInside)
326
+ ('href', inline._linkHref)
327
+ ();
328
+
329
+ inline.reflink = replace(inline.reflink)
330
+ ('inside', inline._linkInside)
331
+ ();
332
+
333
+ inline.normal = {
334
+ url: inline.url,
335
+ strong: inline.strong,
336
+ em: inline.em,
337
+ text: inline.text
338
+ };
339
+
340
+ inline.pedantic = {
341
+ strong: /^__(?=\S)([^\0]*?\S)__(?!_)|^\*\*(?=\S)([^\0]*?\S)\*\*(?!\*)/,
342
+ em: /^_(?=\S)([^\0]*?\S)_(?!_)|^\*(?=\S)([^\0]*?\S)\*(?!\*)/
343
+ };
344
+
345
+ inline.gfm = {
346
+ url: /^(https?:\/\/[^\s]+[^.,:;"')\]\s])/,
347
+ text: /^[^\0]+?(?=[\\<!\[_*`]|https?:\/\/| {2,}\n|$)/
348
+ };
349
+
350
+ /**
351
+ * Inline Lexer
352
+ */
353
+
354
+ inline.lexer = function(src) {
355
+ var out = ''
356
+ , links = tokens.links
357
+ , link
358
+ , text
359
+ , href
360
+ , cap;
361
+
362
+ while (src) {
363
+ // escape
364
+ if (cap = inline.escape.exec(src)) {
365
+ src = src.substring(cap[0].length);
366
+ out += cap[1];
367
+ continue;
368
+ }
369
+
370
+ // autolink
371
+ if (cap = inline.autolink.exec(src)) {
372
+ src = src.substring(cap[0].length);
373
+ if (cap[2] === '@') {
374
+ text = cap[1][6] === ':'
375
+ ? mangle(cap[1].substring(7))
376
+ : mangle(cap[1]);
377
+ href = mangle('mailto:') + text;
378
+ } else {
379
+ text = escape(cap[1]);
380
+ href = text;
381
+ }
382
+ out += '<a href="'
383
+ + href
384
+ + '">'
385
+ + text
386
+ + '</a>';
387
+ continue;
388
+ }
389
+
390
+ // url (gfm)
391
+ if (cap = inline.url.exec(src)) {
392
+ src = src.substring(cap[0].length);
393
+ text = escape(cap[1]);
394
+ href = text;
395
+ out += '<a href="'
396
+ + href
397
+ + '">'
398
+ + text
399
+ + '</a>';
400
+ continue;
401
+ }
402
+
403
+ // tag
404
+ if (cap = inline.tag.exec(src)) {
405
+ src = src.substring(cap[0].length);
406
+ out += options.sanitize
407
+ ? escape(cap[0])
408
+ : cap[0];
409
+ continue;
410
+ }
411
+
412
+ // link
413
+ if (cap = inline.link.exec(src)) {
414
+ src = src.substring(cap[0].length);
415
+ out += outputLink(cap, {
416
+ href: cap[2],
417
+ title: cap[3]
418
+ });
419
+ continue;
420
+ }
421
+
422
+ // reflink, nolink
423
+ if ((cap = inline.reflink.exec(src))
424
+ || (cap = inline.nolink.exec(src))) {
425
+ src = src.substring(cap[0].length);
426
+ link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
427
+ link = links[link.toLowerCase()];
428
+ if (!link || !link.href) {
429
+ out += cap[0][0];
430
+ src = cap[0].substring(1) + src;
431
+ continue;
432
+ }
433
+ out += outputLink(cap, link);
434
+ continue;
435
+ }
436
+
437
+ // strong
438
+ if (cap = inline.strong.exec(src)) {
439
+ src = src.substring(cap[0].length);
440
+ out += '<strong>'
441
+ + inline.lexer(cap[2] || cap[1])
442
+ + '</strong>';
443
+ continue;
444
+ }
445
+
446
+ // em
447
+ if (cap = inline.em.exec(src)) {
448
+ src = src.substring(cap[0].length);
449
+ out += '<em>'
450
+ + inline.lexer(cap[2] || cap[1])
451
+ + '</em>';
452
+ continue;
453
+ }
454
+
455
+ // code
456
+ if (cap = inline.code.exec(src)) {
457
+ src = src.substring(cap[0].length);
458
+ out += '<code>'
459
+ + escape(cap[2], true)
460
+ + '</code>';
461
+ continue;
462
+ }
463
+
464
+ // br
465
+ if (cap = inline.br.exec(src)) {
466
+ src = src.substring(cap[0].length);
467
+ out += '<br>';
468
+ continue;
469
+ }
470
+
471
+ // text
472
+ if (cap = inline.text.exec(src)) {
473
+ src = src.substring(cap[0].length);
474
+ out += escape(cap[0]);
475
+ continue;
476
+ }
477
+ }
478
+
479
+ return out;
480
+ };
481
+
482
+ function outputLink(cap, link) {
483
+ if (cap[0][0] !== '!') {
484
+ return '<a href="'
485
+ + escape(link.href)
486
+ + '"'
487
+ + (link.title
488
+ ? ' title="'
489
+ + escape(link.title)
490
+ + '"'
491
+ : '')
492
+ + '>'
493
+ + inline.lexer(cap[1])
494
+ + '</a>';
495
+ } else {
496
+ return '<img src="'
497
+ + escape(link.href)
498
+ + '" alt="'
499
+ + escape(cap[1])
500
+ + '"'
501
+ + (link.title
502
+ ? ' title="'
503
+ + escape(link.title)
504
+ + '"'
505
+ : '')
506
+ + '>';
507
+ }
508
+ }
509
+
510
+ /**
511
+ * Parsing
512
+ */
513
+
514
+ var tokens
515
+ , token;
516
+
517
+ function next() {
518
+ return token = tokens.pop();
519
+ }
520
+
521
+ function tok() {
522
+
523
+ switch (token.type) {
524
+ case 'space': {
525
+ return '';
526
+ }
527
+ case 'hr': {
528
+ return '<hr>\n';
529
+ }
530
+ case 'heading': {
531
+ return '<h'
532
+ + token.depth
533
+ + '>'
534
+ + inline.lexer(token.text)
535
+ + '</h'
536
+ + token.depth
537
+ + '>\n';
538
+ }
539
+ case 'code': {
540
+ if (options.highlight) {
541
+ token.code = options.highlight(token.text, token.lang);
542
+ if (token.code != null && token.code !== token.text) {
543
+ token.escaped = true;
544
+ token.text = token.code;
545
+ }
546
+ }
547
+
548
+ if (!token.escaped) {
549
+ token.text = escape(token.text, true);
550
+ }
551
+
552
+ return '<pre><code'
553
+ + (token.lang
554
+ ? ' class="lang-'
555
+ + token.lang
556
+ + '"'
557
+ : '')
558
+ + '>'
559
+ + token.text
560
+ + '</code></pre>\n';
561
+ }
562
+ case 'blockquote_start': {
563
+ var body = '';
564
+
565
+ while (next().type !== 'blockquote_end') {
566
+ body += tok();
567
+ }
568
+
569
+ return '<blockquote>\n'
570
+ + body
571
+ + '</blockquote>\n';
572
+ }
573
+ case 'list_start': {
574
+ var type = token.ordered ? 'ol' : 'ul'
575
+ , body = '';
576
+ while (next().type !== 'list_end') {
577
+ body += tok();
578
+ }
579
+
580
+ return '<'
581
+ + type
582
+ + '>\n'
583
+ + body
584
+ + '</'
585
+ + type
586
+ + '>\n';
587
+ }
588
+ case 'list_item_start': {
589
+ var body = '';
590
+
591
+ while (next().type !== 'list_item_end') {
592
+ body += token.type === 'text'
593
+ ? parseText()
594
+ : tok();
595
+ }
596
+
597
+ return '<li>'
598
+ + body
599
+ + '</li>\n';
600
+ }
601
+ case 'loose_item_start': {
602
+ var body = '';
603
+
604
+ while (next().type !== 'list_item_end') {
605
+ body += tok();
606
+ }
607
+
608
+ return '<li>'
609
+ + body
610
+ + '</li>\n';
611
+ }
612
+ case 'html': {
613
+ if (options.sanitize) {
614
+ return inline.lexer(token.text);
615
+ }
616
+ return !token.pre && !options.pedantic
617
+ ? inline.lexer(token.text)
618
+ : token.text;
619
+ }
620
+ case 'paragraph': {
621
+ return '<p>'
622
+ + inline.lexer(token.text)
623
+ + '</p>\n';
624
+ }
625
+ case 'text': {
626
+ return '<p>'
627
+ + parseText()
628
+ + '</p>\n';
629
+ }
630
+ }
631
+ }
632
+
633
+ function parseText() {
634
+ var body = token.text
635
+ , top;
636
+
637
+ while ((top = tokens[tokens.length-1])
638
+ && top.type === 'text') {
639
+ body += '\n' + next().text;
640
+ }
641
+
642
+ return inline.lexer(body);
643
+ }
644
+
645
+ function parse(src) {
646
+ tokens = src.reverse();
647
+
648
+ var out = '';
649
+ while (next()) {
650
+ out += tok();
651
+ }
652
+
653
+ tokens = null;
654
+ token = null;
655
+
656
+ return out;
657
+ }
658
+
659
+ /**
660
+ * Helpers
661
+ */
662
+
663
+ function escape(html, encode) {
664
+ return html
665
+ .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&amp;')
666
+ .replace(/</g, '&lt;')
667
+ .replace(/>/g, '&gt;')
668
+ .replace(/"/g, '&quot;')
669
+ .replace(/'/g, '&#39;');
670
+ }
671
+
672
+ function mangle(text) {
673
+ var out = ''
674
+ , l = text.length
675
+ , i = 0
676
+ , ch;
677
+
678
+ for (; i < l; i++) {
679
+ ch = text.charCodeAt(i);
680
+ if (Math.random() > 0.5) {
681
+ ch = 'x' + ch.toString(16);
682
+ }
683
+ out += '&#' + ch + ';';
684
+ }
685
+
686
+ return out;
687
+ }
688
+
689
+ function tag() {
690
+ var tag = '(?!(?:'
691
+ + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'
692
+ + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'
693
+ + '|span|br|wbr|ins|del|img)\\b)\\w+';
694
+
695
+ return tag;
696
+ }
697
+
698
+ function replace(regex, opt) {
699
+ regex = regex.source;
700
+ opt = opt || '';
701
+ return function self(name, val) {
702
+ if (!name) return new RegExp(regex, opt);
703
+ regex = regex.replace(name, val.source || val);
704
+ return self;
705
+ };
706
+ }
707
+
708
+ function noop() {}
709
+ noop.exec = noop;
710
+
711
+ /**
712
+ * Marked
713
+ */
714
+
715
+ function marked(src, opt) {
716
+ setOptions(opt);
717
+ return parse(block.lexer(src));
718
+ }
719
+
720
+ /**
721
+ * Options
722
+ */
723
+
724
+ var options
725
+ , defaults;
726
+
727
+ function setOptions(opt) {
728
+ if (!opt) opt = defaults;
729
+ if (options === opt) return;
730
+ options = opt;
731
+
732
+ if (options.gfm) {
733
+ block.fences = block.gfm.fences;
734
+ block.paragraph = block.gfm.paragraph;
735
+ inline.text = inline.gfm.text;
736
+ inline.url = inline.gfm.url;
737
+ } else {
738
+ block.fences = block.normal.fences;
739
+ block.paragraph = block.normal.paragraph;
740
+ inline.text = inline.normal.text;
741
+ inline.url = inline.normal.url;
742
+ }
743
+
744
+ if (options.pedantic) {
745
+ inline.em = inline.pedantic.em;
746
+ inline.strong = inline.pedantic.strong;
747
+ } else {
748
+ inline.em = inline.normal.em;
749
+ inline.strong = inline.normal.strong;
750
+ }
751
+ }
752
+
753
+ marked.options =
754
+ marked.setOptions = function(opt) {
755
+ defaults = opt;
756
+ setOptions(opt);
757
+ return marked;
758
+ };
759
+
760
+ marked.setOptions({
761
+ gfm: true,
762
+ pedantic: false,
763
+ sanitize: false,
764
+ highlight: null
765
+ });
766
+
767
+ /**
768
+ * Expose
769
+ */
770
+
771
+ marked.parser = function(src, opt) {
772
+ setOptions(opt);
773
+ return parse(src);
774
+ };
775
+
776
+ marked.lexer = function(src, opt) {
777
+ setOptions(opt);
778
+ return block.lexer(src);
779
+ };
780
+
781
+ marked.parse = marked;
782
+
783
+ if (typeof module !== 'undefined') {
784
+ module.exports = marked;
785
+ } else {
786
+ this.marked = marked;
787
+ }
788
+
789
+ }).call(function() {
790
+ return this || (typeof window !== 'undefined' ? window : global);
791
+ }());
792
+ return marked;
793
+ });