lines-engine 0.6.2 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (572) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.gitignore +1 -0
  5. data/CHANGELOG.md +10 -3
  6. data/Gemfile +1 -0
  7. data/Gemfile.lock +10 -6
  8. data/app/assets/images/favicon.ico +0 -0
  9. data/app/assets/images/gplus.svg +17 -0
  10. data/app/assets/javascripts/lines/admin/admin.js +299 -0
  11. data/app/assets/javascripts/lines/{autosize.min.js → admin/autosize.min.js} +0 -0
  12. data/app/assets/javascripts/lines/admin/navbar.js +51 -0
  13. data/app/assets/javascripts/lines/{pictures.js.coffee → admin/pictures.js.coffee} +2 -1
  14. data/app/assets/javascripts/lines/application.js +3 -0
  15. data/app/assets/javascripts/lines/articles.js.coffee +1 -0
  16. data/app/assets/javascripts/lines/viewer.js.coffee +3 -0
  17. data/app/assets/stylesheets/lines/admin/admin.scss +609 -0
  18. data/app/assets/stylesheets/lines/admin/variables_and_mixins.scss +36 -0
  19. data/app/assets/stylesheets/lines/application.scss +2 -13
  20. data/app/assets/stylesheets/lines/article.scss +165 -69
  21. data/app/assets/stylesheets/lines/fonts.scss +2 -2
  22. data/app/assets/stylesheets/lines/footer.scss +10 -56
  23. data/app/assets/stylesheets/lines/general.scss +18 -13
  24. data/app/assets/stylesheets/lines/media_queries.scss +5 -1
  25. data/app/assets/stylesheets/lines/messages.scss +28 -0
  26. data/app/assets/stylesheets/lines/navbar.scss +199 -122
  27. data/app/assets/stylesheets/lines/pagination.scss +8 -31
  28. data/app/assets/stylesheets/lines/pygments.css.erb +1 -2
  29. data/app/assets/stylesheets/lines/variables_and_mixins.scss +4 -0
  30. data/app/controllers/lines/admin/articles_controller.rb +8 -6
  31. data/app/controllers/lines/admin/authors_controller.rb +2 -2
  32. data/app/controllers/lines/admin/pictures_controller.rb +1 -1
  33. data/app/controllers/lines/application_controller.rb +1 -1
  34. data/app/controllers/lines/articles_controller.rb +3 -1
  35. data/app/controllers/lines/password_resets_controller.rb +4 -7
  36. data/app/controllers/lines/sessions_controller.rb +3 -3
  37. data/app/helpers/lines/application_helper.rb +25 -4
  38. data/app/mailers/lines/user_mailer.rb +1 -1
  39. data/app/models/lines/article.rb +13 -3
  40. data/app/models/lines/user.rb +2 -2
  41. data/app/uploaders/picture_uploader.rb +1 -1
  42. data/app/views/layouts/lines/_markdown_cheatsheet.html.erb +72 -0
  43. data/app/views/layouts/lines/admin.html.erb +15 -4
  44. data/app/views/layouts/lines/application.html.erb +16 -4
  45. data/app/views/layouts/lines/preview.html.erb +30 -2
  46. data/app/views/lines/admin/articles/_form.html.erb +50 -148
  47. data/app/views/lines/admin/articles/_picture_box.html.erb +37 -8
  48. data/app/views/lines/admin/articles/edit.html.erb +2 -12
  49. data/app/views/lines/admin/articles/index.html.erb +40 -28
  50. data/app/views/lines/admin/articles/new.html.erb +3 -10
  51. data/app/views/lines/admin/articles/show.html.erb +6 -4
  52. data/app/views/lines/admin/authors/_form.html.erb +12 -41
  53. data/app/views/lines/admin/authors/index.html.erb +18 -13
  54. data/app/views/lines/admin/authors/show.html.erb +19 -48
  55. data/app/views/lines/admin/pictures/_picture.html.erb +5 -4
  56. data/app/views/lines/admin/pictures/create.js.erb +1 -1
  57. data/app/views/lines/admin/pictures/destroy.js.erb +1 -1
  58. data/app/views/lines/articles/_article.html.erb +10 -6
  59. data/app/views/lines/articles/_article_collection.html.erb +1 -1
  60. data/app/views/lines/articles/_article_small.html.erb +9 -7
  61. data/app/views/lines/articles/index.atom.builder +10 -9
  62. data/app/views/lines/articles/index.html.erb +2 -2
  63. data/app/views/lines/articles/show.html.erb +5 -1
  64. data/app/views/lines/password_resets/edit.html.erb +25 -12
  65. data/app/views/lines/password_resets/new.html.erb +14 -8
  66. data/app/views/lines/sessions/new.html.erb +6 -10
  67. data/app/views/lines/shared/_flash.html.erb +1 -1
  68. data/app/views/lines/shared/_footer.html.erb +5 -28
  69. data/app/views/lines/user_mailer/password_reset.html.erb +6 -5
  70. data/app/views/lines/user_mailer/password_reset.text.erb +8 -4
  71. data/config/lines_config.yml +15 -14
  72. data/config/routes.rb +2 -2
  73. data/db/seeds.rb +5 -5
  74. data/lib/lines/engine.rb +1 -1
  75. data/lib/lines/version.rb +1 -1
  76. data/lines.gemspec +1 -1
  77. data/public/codemirror/.gitattributes +8 -0
  78. data/public/codemirror/.gitignore +8 -0
  79. data/public/codemirror/.npmignore +9 -0
  80. data/public/codemirror/.travis.yml +4 -0
  81. data/public/codemirror/AUTHORS +474 -0
  82. data/public/codemirror/CONTRIBUTING.md +88 -0
  83. data/public/codemirror/LICENSE +19 -0
  84. data/public/codemirror/README.md +27 -0
  85. data/public/codemirror/addon/comment/comment.js +183 -0
  86. data/public/codemirror/addon/comment/continuecomment.js +85 -0
  87. data/public/codemirror/addon/dialog/dialog.css +32 -0
  88. data/public/codemirror/addon/dialog/dialog.js +157 -0
  89. data/public/codemirror/addon/display/fullscreen.css +6 -0
  90. data/public/codemirror/addon/display/fullscreen.js +41 -0
  91. data/public/codemirror/addon/display/panel.js +112 -0
  92. data/public/codemirror/addon/display/placeholder.js +58 -0
  93. data/public/codemirror/addon/display/rulers.js +63 -0
  94. data/public/codemirror/addon/edit/closebrackets.js +185 -0
  95. data/public/codemirror/addon/edit/closetag.js +166 -0
  96. data/public/codemirror/addon/edit/continuelist.js +51 -0
  97. data/public/codemirror/addon/edit/matchbrackets.js +120 -0
  98. data/public/codemirror/addon/edit/matchtags.js +66 -0
  99. data/public/codemirror/addon/edit/trailingspace.js +27 -0
  100. data/public/codemirror/addon/fold/brace-fold.js +105 -0
  101. data/public/codemirror/addon/fold/comment-fold.js +57 -0
  102. data/public/codemirror/addon/fold/foldcode.js +149 -0
  103. data/public/codemirror/addon/fold/foldgutter.css +20 -0
  104. data/public/codemirror/addon/fold/foldgutter.js +146 -0
  105. data/public/codemirror/addon/fold/indent-fold.js +44 -0
  106. data/public/codemirror/addon/fold/markdown-fold.js +49 -0
  107. data/public/codemirror/addon/fold/xml-fold.js +182 -0
  108. data/public/codemirror/addon/hint/anyword-hint.js +41 -0
  109. data/public/codemirror/addon/hint/css-hint.js +60 -0
  110. data/public/codemirror/addon/hint/html-hint.js +348 -0
  111. data/public/codemirror/addon/hint/javascript-hint.js +146 -0
  112. data/public/codemirror/addon/hint/show-hint.css +38 -0
  113. data/public/codemirror/addon/hint/show-hint.js +386 -0
  114. data/public/codemirror/addon/hint/sql-hint.js +254 -0
  115. data/public/codemirror/addon/hint/xml-hint.js +110 -0
  116. data/public/codemirror/addon/lint/coffeescript-lint.js +41 -0
  117. data/public/codemirror/addon/lint/css-lint.js +35 -0
  118. data/public/codemirror/addon/lint/javascript-lint.js +136 -0
  119. data/public/codemirror/addon/lint/json-lint.js +31 -0
  120. data/public/codemirror/addon/lint/lint.css +73 -0
  121. data/public/codemirror/addon/lint/lint.js +207 -0
  122. data/public/codemirror/addon/lint/yaml-lint.js +28 -0
  123. data/public/codemirror/addon/merge/merge.css +112 -0
  124. data/public/codemirror/addon/merge/merge.js +775 -0
  125. data/public/codemirror/addon/mode/loadmode.js +64 -0
  126. data/public/codemirror/addon/mode/multiplex.js +123 -0
  127. data/public/codemirror/addon/mode/multiplex_test.js +33 -0
  128. data/public/codemirror/addon/mode/overlay.js +85 -0
  129. data/public/codemirror/addon/mode/simple.js +213 -0
  130. data/public/codemirror/addon/runmode/colorize.js +40 -0
  131. data/public/codemirror/addon/runmode/runmode-standalone.js +157 -0
  132. data/public/codemirror/addon/runmode/runmode.js +72 -0
  133. data/public/codemirror/addon/runmode/runmode.node.js +178 -0
  134. data/public/codemirror/addon/scroll/annotatescrollbar.js +115 -0
  135. data/public/codemirror/addon/scroll/scrollpastend.js +46 -0
  136. data/public/codemirror/addon/scroll/simplescrollbars.css +66 -0
  137. data/public/codemirror/addon/scroll/simplescrollbars.js +147 -0
  138. data/public/codemirror/addon/search/match-highlighter.js +128 -0
  139. data/public/codemirror/addon/search/matchesonscrollbar.css +8 -0
  140. data/public/codemirror/addon/search/matchesonscrollbar.js +97 -0
  141. data/public/codemirror/addon/search/search.js +202 -0
  142. data/public/codemirror/addon/search/searchcursor.js +189 -0
  143. data/public/codemirror/addon/selection/active-line.js +71 -0
  144. data/public/codemirror/addon/selection/mark-selection.js +118 -0
  145. data/public/codemirror/addon/selection/selection-pointer.js +98 -0
  146. data/public/codemirror/addon/tern/tern.css +87 -0
  147. data/public/codemirror/addon/tern/tern.js +699 -0
  148. data/public/codemirror/addon/tern/worker.js +44 -0
  149. data/public/codemirror/addon/wrap/hardwrap.js +139 -0
  150. data/public/codemirror/bin/authors.sh +6 -0
  151. data/public/codemirror/bin/compress +92 -0
  152. data/public/codemirror/bin/lint +3 -0
  153. data/public/codemirror/bin/release +45 -0
  154. data/public/codemirror/bin/source-highlight +51 -0
  155. data/public/codemirror/bower.json +17 -0
  156. data/public/codemirror/demo/activeline.html +78 -0
  157. data/public/codemirror/demo/anywordhint.html +79 -0
  158. data/public/codemirror/demo/bidi.html +74 -0
  159. data/public/codemirror/demo/btree.html +85 -0
  160. data/public/codemirror/demo/buffers.html +109 -0
  161. data/public/codemirror/demo/changemode.html +58 -0
  162. data/public/codemirror/demo/closebrackets.html +52 -0
  163. data/public/codemirror/demo/closetag.html +41 -0
  164. data/public/codemirror/demo/complete.html +79 -0
  165. data/public/codemirror/demo/emacs.html +75 -0
  166. data/public/codemirror/demo/folding.html +95 -0
  167. data/public/codemirror/demo/fullscreen.html +83 -0
  168. data/public/codemirror/demo/hardwrap.html +72 -0
  169. data/public/codemirror/demo/html5complete.html +56 -0
  170. data/public/codemirror/demo/indentwrap.html +59 -0
  171. data/public/codemirror/demo/lint.html +171 -0
  172. data/public/codemirror/demo/loadmode.html +72 -0
  173. data/public/codemirror/demo/marker.html +52 -0
  174. data/public/codemirror/demo/markselection.html +52 -0
  175. data/public/codemirror/demo/matchhighlighter.html +47 -0
  176. data/public/codemirror/demo/matchtags.html +48 -0
  177. data/public/codemirror/demo/merge.html +122 -0
  178. data/public/codemirror/demo/multiplex.html +75 -0
  179. data/public/codemirror/demo/mustache.html +69 -0
  180. data/public/codemirror/demo/panel.html +136 -0
  181. data/public/codemirror/demo/placeholder.html +45 -0
  182. data/public/codemirror/demo/preview.html +87 -0
  183. data/public/codemirror/demo/requirejs.html +70 -0
  184. data/public/codemirror/demo/resize.html +51 -0
  185. data/public/codemirror/demo/rulers.html +49 -0
  186. data/public/codemirror/demo/runmode.html +62 -0
  187. data/public/codemirror/demo/search.html +95 -0
  188. data/public/codemirror/demo/simplemode.html +186 -0
  189. data/public/codemirror/demo/simplescrollbars.html +82 -0
  190. data/public/codemirror/demo/spanaffectswrapping_shim.html +85 -0
  191. data/public/codemirror/demo/sublime.html +76 -0
  192. data/public/codemirror/demo/tern.html +133 -0
  193. data/public/codemirror/demo/theme.html +152 -0
  194. data/public/codemirror/demo/trailingspace.html +48 -0
  195. data/public/codemirror/demo/variableheight.html +67 -0
  196. data/public/codemirror/demo/vim.html +104 -0
  197. data/public/codemirror/demo/visibletabs.html +62 -0
  198. data/public/codemirror/demo/widget.html +85 -0
  199. data/public/codemirror/demo/xmlcomplete.html +119 -0
  200. data/public/codemirror/doc/activebookmark.js +57 -0
  201. data/public/codemirror/doc/compress.html +329 -0
  202. data/public/codemirror/doc/docs.css +271 -0
  203. data/public/codemirror/doc/internals.html +503 -0
  204. data/public/codemirror/doc/logo.png +0 -0
  205. data/public/codemirror/doc/logo.svg +181 -0
  206. data/public/codemirror/doc/manual.html +3327 -0
  207. data/public/codemirror/doc/realworld.html +174 -0
  208. data/public/codemirror/doc/releases.html +1116 -0
  209. data/public/codemirror/doc/reporting.html +61 -0
  210. data/public/codemirror/doc/upgrade_v2.2.html +96 -0
  211. data/public/codemirror/doc/upgrade_v3.html +230 -0
  212. data/public/codemirror/doc/upgrade_v4.html +144 -0
  213. data/public/codemirror/doc/yinyang.png +0 -0
  214. data/public/codemirror/index.html +199 -0
  215. data/public/codemirror/keymap/emacs.js +412 -0
  216. data/public/codemirror/keymap/sublime.js +555 -0
  217. data/public/codemirror/keymap/vim.js +5060 -0
  218. data/public/codemirror/lib/codemirror.css +332 -0
  219. data/public/codemirror/lib/codemirror.js +8788 -0
  220. data/public/codemirror/mode/apl/apl.js +174 -0
  221. data/public/codemirror/mode/apl/index.html +72 -0
  222. data/public/codemirror/mode/asciiarmor/asciiarmor.js +73 -0
  223. data/public/codemirror/mode/asciiarmor/index.html +46 -0
  224. data/public/codemirror/mode/asn.1/asn.1.js +204 -0
  225. data/public/codemirror/mode/asn.1/index.html +78 -0
  226. data/public/codemirror/mode/asterisk/asterisk.js +196 -0
  227. data/public/codemirror/mode/asterisk/index.html +154 -0
  228. data/public/codemirror/mode/brainfuck/brainfuck.js +85 -0
  229. data/public/codemirror/mode/brainfuck/index.html +85 -0
  230. data/public/codemirror/mode/clike/clike.js +604 -0
  231. data/public/codemirror/mode/clike/index.html +252 -0
  232. data/public/codemirror/mode/clike/scala.html +767 -0
  233. data/public/codemirror/mode/clike/test.js +33 -0
  234. data/public/codemirror/mode/clojure/clojure.js +244 -0
  235. data/public/codemirror/mode/clojure/index.html +88 -0
  236. data/public/codemirror/mode/cmake/cmake.js +97 -0
  237. data/public/codemirror/mode/cmake/index.html +129 -0
  238. data/public/codemirror/mode/cobol/cobol.js +255 -0
  239. data/public/codemirror/mode/cobol/index.html +210 -0
  240. data/public/codemirror/mode/coffeescript/coffeescript.js +369 -0
  241. data/public/codemirror/mode/coffeescript/index.html +740 -0
  242. data/public/codemirror/mode/commonlisp/commonlisp.js +123 -0
  243. data/public/codemirror/mode/commonlisp/index.html +177 -0
  244. data/public/codemirror/mode/css/css.js +756 -0
  245. data/public/codemirror/mode/css/index.html +75 -0
  246. data/public/codemirror/mode/css/less.html +152 -0
  247. data/public/codemirror/mode/css/less_test.js +54 -0
  248. data/public/codemirror/mode/css/scss.html +157 -0
  249. data/public/codemirror/mode/css/scss_test.js +110 -0
  250. data/public/codemirror/mode/css/test.js +188 -0
  251. data/public/codemirror/mode/cypher/cypher.js +146 -0
  252. data/public/codemirror/mode/cypher/index.html +63 -0
  253. data/public/codemirror/mode/d/d.js +218 -0
  254. data/public/codemirror/mode/d/index.html +273 -0
  255. data/public/codemirror/mode/dart/dart.js +50 -0
  256. data/public/codemirror/mode/dart/index.html +71 -0
  257. data/public/codemirror/mode/diff/diff.js +47 -0
  258. data/public/codemirror/mode/diff/index.html +117 -0
  259. data/public/codemirror/mode/django/django.js +350 -0
  260. data/public/codemirror/mode/django/index.html +73 -0
  261. data/public/codemirror/mode/dockerfile/dockerfile.js +76 -0
  262. data/public/codemirror/mode/dockerfile/index.html +73 -0
  263. data/public/codemirror/mode/dtd/dtd.js +142 -0
  264. data/public/codemirror/mode/dtd/index.html +89 -0
  265. data/public/codemirror/mode/dylan/dylan.js +291 -0
  266. data/public/codemirror/mode/dylan/index.html +407 -0
  267. data/public/codemirror/mode/ebnf/ebnf.js +195 -0
  268. data/public/codemirror/mode/ebnf/index.html +102 -0
  269. data/public/codemirror/mode/ecl/ecl.js +206 -0
  270. data/public/codemirror/mode/ecl/index.html +52 -0
  271. data/public/codemirror/mode/eiffel/eiffel.js +160 -0
  272. data/public/codemirror/mode/eiffel/index.html +429 -0
  273. data/public/codemirror/mode/elm/elm.js +205 -0
  274. data/public/codemirror/mode/elm/index.html +61 -0
  275. data/public/codemirror/mode/erlang/erlang.js +618 -0
  276. data/public/codemirror/mode/erlang/index.html +76 -0
  277. data/public/codemirror/mode/factor/factor.js +83 -0
  278. data/public/codemirror/mode/factor/index.html +77 -0
  279. data/public/codemirror/mode/forth/forth.js +180 -0
  280. data/public/codemirror/mode/forth/index.html +75 -0
  281. data/public/codemirror/mode/fortran/fortran.js +188 -0
  282. data/public/codemirror/mode/fortran/index.html +81 -0
  283. data/public/codemirror/mode/gas/gas.js +345 -0
  284. data/public/codemirror/mode/gas/index.html +68 -0
  285. data/public/codemirror/mode/gfm/gfm.js +124 -0
  286. data/public/codemirror/mode/gfm/index.html +93 -0
  287. data/public/codemirror/mode/gfm/test.js +213 -0
  288. data/public/codemirror/mode/gherkin/gherkin.js +178 -0
  289. data/public/codemirror/mode/gherkin/index.html +48 -0
  290. data/public/codemirror/mode/go/go.js +185 -0
  291. data/public/codemirror/mode/go/index.html +85 -0
  292. data/public/codemirror/mode/groovy/groovy.js +230 -0
  293. data/public/codemirror/mode/groovy/index.html +84 -0
  294. data/public/codemirror/mode/haml/haml.js +159 -0
  295. data/public/codemirror/mode/haml/index.html +79 -0
  296. data/public/codemirror/mode/haml/test.js +97 -0
  297. data/public/codemirror/mode/handlebars/handlebars.js +53 -0
  298. data/public/codemirror/mode/handlebars/index.html +83 -0
  299. data/public/codemirror/mode/haskell/haskell.js +267 -0
  300. data/public/codemirror/mode/haskell/index.html +73 -0
  301. data/public/codemirror/mode/haxe/haxe.js +518 -0
  302. data/public/codemirror/mode/haxe/index.html +124 -0
  303. data/public/codemirror/mode/htmlembedded/htmlembedded.js +28 -0
  304. data/public/codemirror/mode/htmlembedded/index.html +59 -0
  305. data/public/codemirror/mode/htmlmixed/htmlmixed.js +121 -0
  306. data/public/codemirror/mode/htmlmixed/index.html +89 -0
  307. data/public/codemirror/mode/http/http.js +113 -0
  308. data/public/codemirror/mode/http/index.html +45 -0
  309. data/public/codemirror/mode/idl/idl.js +290 -0
  310. data/public/codemirror/mode/idl/index.html +64 -0
  311. data/public/codemirror/mode/index.html +149 -0
  312. data/public/codemirror/mode/jade/index.html +70 -0
  313. data/public/codemirror/mode/jade/jade.js +590 -0
  314. data/public/codemirror/mode/javascript/index.html +114 -0
  315. data/public/codemirror/mode/javascript/javascript.js +704 -0
  316. data/public/codemirror/mode/javascript/json-ld.html +72 -0
  317. data/public/codemirror/mode/javascript/test.js +205 -0
  318. data/public/codemirror/mode/javascript/typescript.html +61 -0
  319. data/public/codemirror/mode/jinja2/index.html +54 -0
  320. data/public/codemirror/mode/jinja2/jinja2.js +142 -0
  321. data/public/codemirror/mode/julia/index.html +195 -0
  322. data/public/codemirror/mode/julia/julia.js +299 -0
  323. data/public/codemirror/mode/kotlin/index.html +89 -0
  324. data/public/codemirror/mode/kotlin/kotlin.js +284 -0
  325. data/public/codemirror/mode/livescript/index.html +459 -0
  326. data/public/codemirror/mode/livescript/livescript.js +280 -0
  327. data/public/codemirror/mode/lua/index.html +85 -0
  328. data/public/codemirror/mode/lua/lua.js +159 -0
  329. data/public/codemirror/mode/markdown/index.html +359 -0
  330. data/public/codemirror/mode/markdown/markdown.js +781 -0
  331. data/public/codemirror/mode/markdown/test.js +792 -0
  332. data/public/codemirror/mode/mathematica/index.html +72 -0
  333. data/public/codemirror/mode/mathematica/mathematica.js +175 -0
  334. data/public/codemirror/mode/meta.js +190 -0
  335. data/public/codemirror/mode/mirc/index.html +160 -0
  336. data/public/codemirror/mode/mirc/mirc.js +193 -0
  337. data/public/codemirror/mode/mllike/index.html +179 -0
  338. data/public/codemirror/mode/mllike/mllike.js +205 -0
  339. data/public/codemirror/mode/modelica/index.html +67 -0
  340. data/public/codemirror/mode/modelica/modelica.js +245 -0
  341. data/public/codemirror/mode/mumps/index.html +85 -0
  342. data/public/codemirror/mode/mumps/mumps.js +148 -0
  343. data/public/codemirror/mode/nginx/index.html +181 -0
  344. data/public/codemirror/mode/nginx/nginx.js +178 -0
  345. data/public/codemirror/mode/ntriples/index.html +45 -0
  346. data/public/codemirror/mode/ntriples/ntriples.js +186 -0
  347. data/public/codemirror/mode/octave/index.html +83 -0
  348. data/public/codemirror/mode/octave/octave.js +135 -0
  349. data/public/codemirror/mode/pascal/index.html +61 -0
  350. data/public/codemirror/mode/pascal/pascal.js +109 -0
  351. data/public/codemirror/mode/pegjs/index.html +66 -0
  352. data/public/codemirror/mode/pegjs/pegjs.js +114 -0
  353. data/public/codemirror/mode/perl/index.html +75 -0
  354. data/public/codemirror/mode/perl/perl.js +837 -0
  355. data/public/codemirror/mode/php/index.html +64 -0
  356. data/public/codemirror/mode/php/php.js +230 -0
  357. data/public/codemirror/mode/php/test.js +154 -0
  358. data/public/codemirror/mode/pig/index.html +55 -0
  359. data/public/codemirror/mode/pig/pig.js +178 -0
  360. data/public/codemirror/mode/properties/index.html +53 -0
  361. data/public/codemirror/mode/properties/properties.js +78 -0
  362. data/public/codemirror/mode/puppet/index.html +121 -0
  363. data/public/codemirror/mode/puppet/puppet.js +220 -0
  364. data/public/codemirror/mode/python/index.html +198 -0
  365. data/public/codemirror/mode/python/python.js +358 -0
  366. data/public/codemirror/mode/q/index.html +144 -0
  367. data/public/codemirror/mode/q/q.js +139 -0
  368. data/public/codemirror/mode/r/index.html +85 -0
  369. data/public/codemirror/mode/r/r.js +162 -0
  370. data/public/codemirror/mode/rpm/changes/index.html +66 -0
  371. data/public/codemirror/mode/rpm/index.html +149 -0
  372. data/public/codemirror/mode/rpm/rpm.js +101 -0
  373. data/public/codemirror/mode/rst/index.html +535 -0
  374. data/public/codemirror/mode/rst/rst.js +557 -0
  375. data/public/codemirror/mode/ruby/index.html +183 -0
  376. data/public/codemirror/mode/ruby/ruby.js +285 -0
  377. data/public/codemirror/mode/ruby/test.js +14 -0
  378. data/public/codemirror/mode/rust/index.html +60 -0
  379. data/public/codemirror/mode/rust/rust.js +451 -0
  380. data/public/codemirror/mode/sass/index.html +66 -0
  381. data/public/codemirror/mode/sass/sass.js +414 -0
  382. data/public/codemirror/mode/scheme/index.html +77 -0
  383. data/public/codemirror/mode/scheme/scheme.js +249 -0
  384. data/public/codemirror/mode/shell/index.html +66 -0
  385. data/public/codemirror/mode/shell/shell.js +139 -0
  386. data/public/codemirror/mode/shell/test.js +58 -0
  387. data/public/codemirror/mode/sieve/index.html +93 -0
  388. data/public/codemirror/mode/sieve/sieve.js +193 -0
  389. data/public/codemirror/mode/slim/index.html +96 -0
  390. data/public/codemirror/mode/slim/slim.js +575 -0
  391. data/public/codemirror/mode/slim/test.js +96 -0
  392. data/public/codemirror/mode/smalltalk/index.html +68 -0
  393. data/public/codemirror/mode/smalltalk/smalltalk.js +168 -0
  394. data/public/codemirror/mode/smarty/index.html +138 -0
  395. data/public/codemirror/mode/smarty/smarty.js +225 -0
  396. data/public/codemirror/mode/solr/index.html +57 -0
  397. data/public/codemirror/mode/solr/solr.js +104 -0
  398. data/public/codemirror/mode/soy/index.html +68 -0
  399. data/public/codemirror/mode/soy/soy.js +198 -0
  400. data/public/codemirror/mode/sparql/index.html +61 -0
  401. data/public/codemirror/mode/sparql/sparql.js +174 -0
  402. data/public/codemirror/mode/spreadsheet/index.html +42 -0
  403. data/public/codemirror/mode/spreadsheet/spreadsheet.js +109 -0
  404. data/public/codemirror/mode/sql/index.html +84 -0
  405. data/public/codemirror/mode/sql/sql.js +391 -0
  406. data/public/codemirror/mode/stex/index.html +110 -0
  407. data/public/codemirror/mode/stex/stex.js +251 -0
  408. data/public/codemirror/mode/stex/test.js +123 -0
  409. data/public/codemirror/mode/stylus/index.html +106 -0
  410. data/public/codemirror/mode/stylus/stylus.js +768 -0
  411. data/public/codemirror/mode/swift/index.html +88 -0
  412. data/public/codemirror/mode/swift/swift.js +203 -0
  413. data/public/codemirror/mode/tcl/index.html +142 -0
  414. data/public/codemirror/mode/tcl/tcl.js +147 -0
  415. data/public/codemirror/mode/textile/index.html +191 -0
  416. data/public/codemirror/mode/textile/test.js +417 -0
  417. data/public/codemirror/mode/textile/textile.js +469 -0
  418. data/public/codemirror/mode/tiddlywiki/index.html +154 -0
  419. data/public/codemirror/mode/tiddlywiki/tiddlywiki.css +14 -0
  420. data/public/codemirror/mode/tiddlywiki/tiddlywiki.js +358 -0
  421. data/public/codemirror/mode/tiki/index.html +95 -0
  422. data/public/codemirror/mode/tiki/tiki.css +26 -0
  423. data/public/codemirror/mode/tiki/tiki.js +312 -0
  424. data/public/codemirror/mode/toml/index.html +73 -0
  425. data/public/codemirror/mode/toml/toml.js +88 -0
  426. data/public/codemirror/mode/tornado/index.html +63 -0
  427. data/public/codemirror/mode/tornado/tornado.js +68 -0
  428. data/public/codemirror/mode/troff/index.html +146 -0
  429. data/public/codemirror/mode/troff/troff.js +82 -0
  430. data/public/codemirror/mode/ttcn-cfg/index.html +115 -0
  431. data/public/codemirror/mode/ttcn-cfg/ttcn-cfg.js +214 -0
  432. data/public/codemirror/mode/ttcn/index.html +118 -0
  433. data/public/codemirror/mode/ttcn/ttcn.js +283 -0
  434. data/public/codemirror/mode/turtle/index.html +50 -0
  435. data/public/codemirror/mode/turtle/turtle.js +162 -0
  436. data/public/codemirror/mode/twig/index.html +45 -0
  437. data/public/codemirror/mode/twig/twig.js +132 -0
  438. data/public/codemirror/mode/vb/index.html +102 -0
  439. data/public/codemirror/mode/vb/vb.js +276 -0
  440. data/public/codemirror/mode/vbscript/index.html +55 -0
  441. data/public/codemirror/mode/vbscript/vbscript.js +350 -0
  442. data/public/codemirror/mode/velocity/index.html +118 -0
  443. data/public/codemirror/mode/velocity/velocity.js +201 -0
  444. data/public/codemirror/mode/verilog/index.html +120 -0
  445. data/public/codemirror/mode/verilog/test.js +273 -0
  446. data/public/codemirror/mode/verilog/verilog.js +537 -0
  447. data/public/codemirror/mode/vhdl/index.html +95 -0
  448. data/public/codemirror/mode/vhdl/vhdl.js +189 -0
  449. data/public/codemirror/mode/xml/index.html +57 -0
  450. data/public/codemirror/mode/xml/test.js +51 -0
  451. data/public/codemirror/mode/xml/xml.js +385 -0
  452. data/public/codemirror/mode/xquery/index.html +210 -0
  453. data/public/codemirror/mode/xquery/test.js +67 -0
  454. data/public/codemirror/mode/xquery/xquery.js +437 -0
  455. data/public/codemirror/mode/yaml/index.html +80 -0
  456. data/public/codemirror/mode/yaml/yaml.js +117 -0
  457. data/public/codemirror/mode/z80/index.html +53 -0
  458. data/public/codemirror/mode/z80/z80.js +116 -0
  459. data/public/codemirror/package.json +20 -0
  460. data/public/codemirror/test/comment_test.js +100 -0
  461. data/public/codemirror/test/doc_test.js +371 -0
  462. data/public/codemirror/test/driver.js +138 -0
  463. data/public/codemirror/test/emacs_test.js +147 -0
  464. data/public/codemirror/test/index.html +241 -0
  465. data/public/codemirror/test/lint.js +11 -0
  466. data/public/codemirror/test/mode_test.css +23 -0
  467. data/public/codemirror/test/mode_test.js +192 -0
  468. data/public/codemirror/test/multi_test.js +285 -0
  469. data/public/codemirror/test/phantom_driver.js +31 -0
  470. data/public/codemirror/test/run.js +31 -0
  471. data/public/codemirror/test/scroll_test.js +115 -0
  472. data/public/codemirror/test/search_test.js +62 -0
  473. data/public/codemirror/test/sql-hint-test.js +189 -0
  474. data/public/codemirror/test/sublime_test.js +303 -0
  475. data/public/codemirror/test/test.js +2142 -0
  476. data/public/codemirror/test/vim_test.js +3955 -0
  477. data/public/codemirror/theme/3024-day.css +41 -0
  478. data/public/codemirror/theme/3024-night.css +39 -0
  479. data/public/codemirror/theme/ambiance-mobile.css +5 -0
  480. data/public/codemirror/theme/ambiance.css +76 -0
  481. data/public/codemirror/theme/base16-dark.css +38 -0
  482. data/public/codemirror/theme/base16-light.css +38 -0
  483. data/public/codemirror/theme/blackboard.css +32 -0
  484. data/public/codemirror/theme/cobalt.css +25 -0
  485. data/public/codemirror/theme/colorforth.css +33 -0
  486. data/public/codemirror/theme/dracula.css +87 -0
  487. data/public/codemirror/theme/eclipse.css +23 -0
  488. data/public/codemirror/theme/elegant.css +13 -0
  489. data/public/codemirror/theme/erlang-dark.css +34 -0
  490. data/public/codemirror/theme/icecoder.css +42 -0
  491. data/public/codemirror/theme/lesser-dark.css +47 -0
  492. data/public/codemirror/theme/lines.css +109 -0
  493. data/public/codemirror/theme/liquibyte.css +95 -0
  494. data/public/codemirror/theme/material.css +105 -0
  495. data/public/codemirror/theme/mbo.css +37 -0
  496. data/public/codemirror/theme/mdn-like.css +46 -0
  497. data/public/codemirror/theme/midnight.css +47 -0
  498. data/public/codemirror/theme/monokai.css +35 -0
  499. data/public/codemirror/theme/neat.css +12 -0
  500. data/public/codemirror/theme/neo.css +43 -0
  501. data/public/codemirror/theme/night.css +28 -0
  502. data/public/codemirror/theme/paraiso-dark.css +38 -0
  503. data/public/codemirror/theme/paraiso-light.css +38 -0
  504. data/public/codemirror/theme/pastel-on-dark.css +53 -0
  505. data/public/codemirror/theme/rubyblue.css +25 -0
  506. data/public/codemirror/theme/seti.css +88 -0
  507. data/public/codemirror/theme/solarized.css +165 -0
  508. data/public/codemirror/theme/the-matrix.css +30 -0
  509. data/public/codemirror/theme/tomorrow-night-bright.css +35 -0
  510. data/public/codemirror/theme/tomorrow-night-eighties.css +38 -0
  511. data/public/codemirror/theme/ttcn.css +65 -0
  512. data/public/codemirror/theme/twilight.css +32 -0
  513. data/public/codemirror/theme/vibrant-ink.css +34 -0
  514. data/public/codemirror/theme/xq-dark.css +53 -0
  515. data/public/codemirror/theme/xq-light.css +43 -0
  516. data/public/codemirror/theme/yeti.css +86 -0
  517. data/public/codemirror/theme/zenburn.css +37 -0
  518. data/public/fira-mono/FiraMono-Bold.eot +0 -0
  519. data/public/fira-mono/FiraMono-Bold.otf +0 -0
  520. data/public/fira-mono/FiraMono-Bold.ttf +0 -0
  521. data/public/fira-mono/FiraMono-Bold.woff +0 -0
  522. data/public/fira-mono/FiraMono-Medium.eot +0 -0
  523. data/public/fira-mono/FiraMono-Medium.otf +0 -0
  524. data/public/fira-mono/FiraMono-Medium.ttf +0 -0
  525. data/public/fira-mono/FiraMono-Medium.woff +0 -0
  526. data/public/fira-mono/FiraMono-Regular.eot +0 -0
  527. data/public/fira-mono/FiraMono-Regular.otf +0 -0
  528. data/public/fira-mono/FiraMono-Regular.ttf +0 -0
  529. data/public/fira-mono/FiraMono-Regular.woff +0 -0
  530. data/public/fira-mono/fira-mono.css +32 -0
  531. data/public/heroes/lines_default_01.png +0 -0
  532. data/public/heroes/lines_default_02.png +0 -0
  533. data/public/heroes/lines_default_03.png +0 -0
  534. data/public/iconfont/iconfont.css +48 -0
  535. data/public/iconfont/iconfont.eot +0 -0
  536. data/public/iconfont/iconfont.svg +18 -0
  537. data/public/iconfont/iconfont.ttf +0 -0
  538. data/public/iconfont/iconfont.woff +0 -0
  539. data/spec/dummy/config/environments/test.rb +3 -1
  540. data/spec/dummy/db/migrate/20140505122014_base_migration.rb +84 -0
  541. data/spec/dummy/db/migrate/20140702160602_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb +31 -0
  542. data/spec/dummy/db/migrate/20140702160603_add_missing_unique_indices.acts_as_taggable_on_engine.rb +20 -0
  543. data/spec/dummy/db/migrate/20140702160604_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +15 -0
  544. data/spec/dummy/db/migrate/20141027143656_add_teaser_to_article.rb +5 -0
  545. data/spec/dummy/db/migrate/20150421093311_add_reset_password_fields_to_users.rb +6 -0
  546. data/spec/dummy/db/schema.rb +50 -50
  547. data/spec/dummy/db/seeds.rb +5 -5
  548. data/spec/factories/users.rb +1 -1
  549. data/spec/features/article_spec.rb +4 -4
  550. data/spec/features/password_reset_spec.rb +17 -17
  551. data/spec/features/user_logs_in_spec.rb +6 -8
  552. data/spec/mailers/lines/user_mailer_spec.rb +1 -1
  553. data/spec/models/article_spec.rb +6 -6
  554. data/spec/support/auth_macros.rb +2 -2
  555. metadata +492 -26
  556. metadata.gz.sig +0 -0
  557. data/app/assets/images/ic_gplus.png +0 -0
  558. data/app/assets/images/ic_gplus_hover.png +0 -0
  559. data/app/assets/images/logo.png +0 -0
  560. data/app/assets/images/logo_opoloo.png +0 -0
  561. data/app/assets/images/signet.png +0 -0
  562. data/app/assets/javascripts/lines/admin.js +0 -201
  563. data/app/assets/stylesheets/lines/admin.scss +0 -970
  564. data/app/views/layouts/lines/_messages.html.erb +0 -8
  565. data/app/views/lines/admin/articles/_formatting_guide.html.erb +0 -89
  566. data/public/heroes/001.jpg +0 -0
  567. data/public/heroes/001_dark.jpg +0 -0
  568. data/public/heroes/002.jpg +0 -0
  569. data/public/heroes/002_dark.jpg +0 -0
  570. data/public/heroes/003.jpg +0 -0
  571. data/public/heroes/003_dark.jpg +0 -0
  572. data/spec/dummy/config/lines_config.yml +0 -58
@@ -0,0 +1,359 @@
1
+ <!doctype html>
2
+
3
+ <title>CodeMirror: Markdown mode</title>
4
+ <meta charset="utf-8"/>
5
+ <link rel=stylesheet href="../../doc/docs.css">
6
+
7
+ <link rel="stylesheet" href="../../lib/codemirror.css">
8
+ <script src="../../lib/codemirror.js"></script>
9
+ <script src="../../addon/edit/continuelist.js"></script>
10
+ <script src="../xml/xml.js"></script>
11
+ <script src="markdown.js"></script>
12
+ <style type="text/css">
13
+ .CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}
14
+ .cm-s-default .cm-trailing-space-a:before,
15
+ .cm-s-default .cm-trailing-space-b:before {position: absolute; content: "\00B7"; color: #777;}
16
+ .cm-s-default .cm-trailing-space-new-line:before {position: absolute; content: "\21B5"; color: #777;}
17
+ </style>
18
+ <div id=nav>
19
+ <a href="http://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a>
20
+
21
+ <ul>
22
+ <li><a href="../../index.html">Home</a>
23
+ <li><a href="../../doc/manual.html">Manual</a>
24
+ <li><a href="https://github.com/codemirror/codemirror">Code</a>
25
+ </ul>
26
+ <ul>
27
+ <li><a href="../index.html">Language modes</a>
28
+ <li><a class=active href="#">Markdown</a>
29
+ </ul>
30
+ </div>
31
+
32
+ <article>
33
+ <h2>Markdown mode</h2>
34
+ <form><textarea id="code" name="code">
35
+ Markdown: Basics
36
+ ================
37
+
38
+ &lt;ul id="ProjectSubmenu"&gt;
39
+ &lt;li&gt;&lt;a href="/projects/markdown/" title="Markdown Project Page"&gt;Main&lt;/a&gt;&lt;/li&gt;
40
+ &lt;li&gt;&lt;a class="selected" title="Markdown Basics"&gt;Basics&lt;/a&gt;&lt;/li&gt;
41
+ &lt;li&gt;&lt;a href="/projects/markdown/syntax" title="Markdown Syntax Documentation"&gt;Syntax&lt;/a&gt;&lt;/li&gt;
42
+ &lt;li&gt;&lt;a href="/projects/markdown/license" title="Pricing and License Information"&gt;License&lt;/a&gt;&lt;/li&gt;
43
+ &lt;li&gt;&lt;a href="/projects/markdown/dingus" title="Online Markdown Web Form"&gt;Dingus&lt;/a&gt;&lt;/li&gt;
44
+ &lt;/ul&gt;
45
+
46
+
47
+ Getting the Gist of Markdown's Formatting Syntax
48
+ ------------------------------------------------
49
+
50
+ This page offers a brief overview of what it's like to use Markdown.
51
+ The [syntax page] [s] provides complete, detailed documentation for
52
+ every feature, but Markdown should be very easy to pick up simply by
53
+ looking at a few examples of it in action. The examples on this page
54
+ are written in a before/after style, showing example syntax and the
55
+ HTML output produced by Markdown.
56
+
57
+ It's also helpful to simply try Markdown out; the [Dingus] [d] is a
58
+ web application that allows you type your own Markdown-formatted text
59
+ and translate it to XHTML.
60
+
61
+ **Note:** This document is itself written using Markdown; you
62
+ can [see the source for it by adding '.text' to the URL] [src].
63
+
64
+ [s]: /projects/markdown/syntax "Markdown Syntax"
65
+ [d]: /projects/markdown/dingus "Markdown Dingus"
66
+ [src]: /projects/markdown/basics.text
67
+
68
+
69
+ ## Paragraphs, Headers, Blockquotes ##
70
+
71
+ A paragraph is simply one or more consecutive lines of text, separated
72
+ by one or more blank lines. (A blank line is any line that looks like
73
+ a blank line -- a line containing nothing but spaces or tabs is
74
+ considered blank.) Normal paragraphs should not be indented with
75
+ spaces or tabs.
76
+
77
+ Markdown offers two styles of headers: *Setext* and *atx*.
78
+ Setext-style headers for `&lt;h1&gt;` and `&lt;h2&gt;` are created by
79
+ "underlining" with equal signs (`=`) and hyphens (`-`), respectively.
80
+ To create an atx-style header, you put 1-6 hash marks (`#`) at the
81
+ beginning of the line -- the number of hashes equals the resulting
82
+ HTML header level.
83
+
84
+ Blockquotes are indicated using email-style '`&gt;`' angle brackets.
85
+
86
+ Markdown:
87
+
88
+ A First Level Header
89
+ ====================
90
+
91
+ A Second Level Header
92
+ ---------------------
93
+
94
+ Now is the time for all good men to come to
95
+ the aid of their country. This is just a
96
+ regular paragraph.
97
+
98
+ The quick brown fox jumped over the lazy
99
+ dog's back.
100
+
101
+ ### Header 3
102
+
103
+ &gt; This is a blockquote.
104
+ &gt;
105
+ &gt; This is the second paragraph in the blockquote.
106
+ &gt;
107
+ &gt; ## This is an H2 in a blockquote
108
+
109
+
110
+ Output:
111
+
112
+ &lt;h1&gt;A First Level Header&lt;/h1&gt;
113
+
114
+ &lt;h2&gt;A Second Level Header&lt;/h2&gt;
115
+
116
+ &lt;p&gt;Now is the time for all good men to come to
117
+ the aid of their country. This is just a
118
+ regular paragraph.&lt;/p&gt;
119
+
120
+ &lt;p&gt;The quick brown fox jumped over the lazy
121
+ dog's back.&lt;/p&gt;
122
+
123
+ &lt;h3&gt;Header 3&lt;/h3&gt;
124
+
125
+ &lt;blockquote&gt;
126
+ &lt;p&gt;This is a blockquote.&lt;/p&gt;
127
+
128
+ &lt;p&gt;This is the second paragraph in the blockquote.&lt;/p&gt;
129
+
130
+ &lt;h2&gt;This is an H2 in a blockquote&lt;/h2&gt;
131
+ &lt;/blockquote&gt;
132
+
133
+
134
+
135
+ ### Phrase Emphasis ###
136
+
137
+ Markdown uses asterisks and underscores to indicate spans of emphasis.
138
+
139
+ Markdown:
140
+
141
+ Some of these words *are emphasized*.
142
+ Some of these words _are emphasized also_.
143
+
144
+ Use two asterisks for **strong emphasis**.
145
+ Or, if you prefer, __use two underscores instead__.
146
+
147
+ Output:
148
+
149
+ &lt;p&gt;Some of these words &lt;em&gt;are emphasized&lt;/em&gt;.
150
+ Some of these words &lt;em&gt;are emphasized also&lt;/em&gt;.&lt;/p&gt;
151
+
152
+ &lt;p&gt;Use two asterisks for &lt;strong&gt;strong emphasis&lt;/strong&gt;.
153
+ Or, if you prefer, &lt;strong&gt;use two underscores instead&lt;/strong&gt;.&lt;/p&gt;
154
+
155
+
156
+
157
+ ## Lists ##
158
+
159
+ Unordered (bulleted) lists use asterisks, pluses, and hyphens (`*`,
160
+ `+`, and `-`) as list markers. These three markers are
161
+ interchangable; this:
162
+
163
+ * Candy.
164
+ * Gum.
165
+ * Booze.
166
+
167
+ this:
168
+
169
+ + Candy.
170
+ + Gum.
171
+ + Booze.
172
+
173
+ and this:
174
+
175
+ - Candy.
176
+ - Gum.
177
+ - Booze.
178
+
179
+ all produce the same output:
180
+
181
+ &lt;ul&gt;
182
+ &lt;li&gt;Candy.&lt;/li&gt;
183
+ &lt;li&gt;Gum.&lt;/li&gt;
184
+ &lt;li&gt;Booze.&lt;/li&gt;
185
+ &lt;/ul&gt;
186
+
187
+ Ordered (numbered) lists use regular numbers, followed by periods, as
188
+ list markers:
189
+
190
+ 1. Red
191
+ 2. Green
192
+ 3. Blue
193
+
194
+ Output:
195
+
196
+ &lt;ol&gt;
197
+ &lt;li&gt;Red&lt;/li&gt;
198
+ &lt;li&gt;Green&lt;/li&gt;
199
+ &lt;li&gt;Blue&lt;/li&gt;
200
+ &lt;/ol&gt;
201
+
202
+ If you put blank lines between items, you'll get `&lt;p&gt;` tags for the
203
+ list item text. You can create multi-paragraph list items by indenting
204
+ the paragraphs by 4 spaces or 1 tab:
205
+
206
+ * A list item.
207
+
208
+ With multiple paragraphs.
209
+
210
+ * Another item in the list.
211
+
212
+ Output:
213
+
214
+ &lt;ul&gt;
215
+ &lt;li&gt;&lt;p&gt;A list item.&lt;/p&gt;
216
+ &lt;p&gt;With multiple paragraphs.&lt;/p&gt;&lt;/li&gt;
217
+ &lt;li&gt;&lt;p&gt;Another item in the list.&lt;/p&gt;&lt;/li&gt;
218
+ &lt;/ul&gt;
219
+
220
+
221
+
222
+ ### Links ###
223
+
224
+ Markdown supports two styles for creating links: *inline* and
225
+ *reference*. With both styles, you use square brackets to delimit the
226
+ text you want to turn into a link.
227
+
228
+ Inline-style links use parentheses immediately after the link text.
229
+ For example:
230
+
231
+ This is an [example link](http://example.com/).
232
+
233
+ Output:
234
+
235
+ &lt;p&gt;This is an &lt;a href="http://example.com/"&gt;
236
+ example link&lt;/a&gt;.&lt;/p&gt;
237
+
238
+ Optionally, you may include a title attribute in the parentheses:
239
+
240
+ This is an [example link](http://example.com/ "With a Title").
241
+
242
+ Output:
243
+
244
+ &lt;p&gt;This is an &lt;a href="http://example.com/" title="With a Title"&gt;
245
+ example link&lt;/a&gt;.&lt;/p&gt;
246
+
247
+ Reference-style links allow you to refer to your links by names, which
248
+ you define elsewhere in your document:
249
+
250
+ I get 10 times more traffic from [Google][1] than from
251
+ [Yahoo][2] or [MSN][3].
252
+
253
+ [1]: http://google.com/ "Google"
254
+ [2]: http://search.yahoo.com/ "Yahoo Search"
255
+ [3]: http://search.msn.com/ "MSN Search"
256
+
257
+ Output:
258
+
259
+ &lt;p&gt;I get 10 times more traffic from &lt;a href="http://google.com/"
260
+ title="Google"&gt;Google&lt;/a&gt; than from &lt;a href="http://search.yahoo.com/"
261
+ title="Yahoo Search"&gt;Yahoo&lt;/a&gt; or &lt;a href="http://search.msn.com/"
262
+ title="MSN Search"&gt;MSN&lt;/a&gt;.&lt;/p&gt;
263
+
264
+ The title attribute is optional. Link names may contain letters,
265
+ numbers and spaces, but are *not* case sensitive:
266
+
267
+ I start my morning with a cup of coffee and
268
+ [The New York Times][NY Times].
269
+
270
+ [ny times]: http://www.nytimes.com/
271
+
272
+ Output:
273
+
274
+ &lt;p&gt;I start my morning with a cup of coffee and
275
+ &lt;a href="http://www.nytimes.com/"&gt;The New York Times&lt;/a&gt;.&lt;/p&gt;
276
+
277
+
278
+ ### Images ###
279
+
280
+ Image syntax is very much like link syntax.
281
+
282
+ Inline (titles are optional):
283
+
284
+ ![alt text](/path/to/img.jpg "Title")
285
+
286
+ Reference-style:
287
+
288
+ ![alt text][id]
289
+
290
+ [id]: /path/to/img.jpg "Title"
291
+
292
+ Both of the above examples produce the same output:
293
+
294
+ &lt;img src="/path/to/img.jpg" alt="alt text" title="Title" /&gt;
295
+
296
+
297
+
298
+ ### Code ###
299
+
300
+ In a regular paragraph, you can create code span by wrapping text in
301
+ backtick quotes. Any ampersands (`&amp;`) and angle brackets (`&lt;` or
302
+ `&gt;`) will automatically be translated into HTML entities. This makes
303
+ it easy to use Markdown to write about HTML example code:
304
+
305
+ I strongly recommend against using any `&lt;blink&gt;` tags.
306
+
307
+ I wish SmartyPants used named entities like `&amp;mdash;`
308
+ instead of decimal-encoded entites like `&amp;#8212;`.
309
+
310
+ Output:
311
+
312
+ &lt;p&gt;I strongly recommend against using any
313
+ &lt;code&gt;&amp;lt;blink&amp;gt;&lt;/code&gt; tags.&lt;/p&gt;
314
+
315
+ &lt;p&gt;I wish SmartyPants used named entities like
316
+ &lt;code&gt;&amp;amp;mdash;&lt;/code&gt; instead of decimal-encoded
317
+ entites like &lt;code&gt;&amp;amp;#8212;&lt;/code&gt;.&lt;/p&gt;
318
+
319
+
320
+ To specify an entire block of pre-formatted code, indent every line of
321
+ the block by 4 spaces or 1 tab. Just like with code spans, `&amp;`, `&lt;`,
322
+ and `&gt;` characters will be escaped automatically.
323
+
324
+ Markdown:
325
+
326
+ If you want your page to validate under XHTML 1.0 Strict,
327
+ you've got to put paragraph tags in your blockquotes:
328
+
329
+ &lt;blockquote&gt;
330
+ &lt;p&gt;For example.&lt;/p&gt;
331
+ &lt;/blockquote&gt;
332
+
333
+ Output:
334
+
335
+ &lt;p&gt;If you want your page to validate under XHTML 1.0 Strict,
336
+ you've got to put paragraph tags in your blockquotes:&lt;/p&gt;
337
+
338
+ &lt;pre&gt;&lt;code&gt;&amp;lt;blockquote&amp;gt;
339
+ &amp;lt;p&amp;gt;For example.&amp;lt;/p&amp;gt;
340
+ &amp;lt;/blockquote&amp;gt;
341
+ &lt;/code&gt;&lt;/pre&gt;
342
+ </textarea></form>
343
+
344
+ <script>
345
+ var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
346
+ mode: 'markdown',
347
+ lineNumbers: true,
348
+ theme: "default",
349
+ extraKeys: {"Enter": "newlineAndIndentContinueMarkdownList"}
350
+ });
351
+ </script>
352
+
353
+ <p>Optionally depends on the XML mode for properly highlighted inline XML blocks.</p>
354
+
355
+ <p><strong>MIME types defined:</strong> <code>text/x-markdown</code>.</p>
356
+
357
+ <p><strong>Parsing/Highlighting Tests:</strong> <a href="../../test/index.html#markdown_*">normal</a>, <a href="../../test/index.html#verbose,markdown_*">verbose</a>.</p>
358
+
359
+ </article>
@@ -0,0 +1,781 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
4
+ (function(mod) {
5
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
6
+ mod(require("../../lib/codemirror"), require("../xml/xml"), require("../meta"));
7
+ else if (typeof define == "function" && define.amd) // AMD
8
+ define(["../../lib/codemirror", "../xml/xml", "../meta"], mod);
9
+ else // Plain browser env
10
+ mod(CodeMirror);
11
+ })(function(CodeMirror) {
12
+ "use strict";
13
+
14
+ CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) {
15
+
16
+ var htmlFound = CodeMirror.modes.hasOwnProperty("xml");
17
+ var htmlMode = CodeMirror.getMode(cmCfg, htmlFound ? {name: "xml", htmlMode: true} : "text/plain");
18
+
19
+ function getMode(name) {
20
+ if (CodeMirror.findModeByName) {
21
+ var found = CodeMirror.findModeByName(name);
22
+ if (found) name = found.mime || found.mimes[0];
23
+ }
24
+ var mode = CodeMirror.getMode(cmCfg, name);
25
+ return mode.name == "null" ? null : mode;
26
+ }
27
+
28
+ // Should characters that affect highlighting be highlighted separate?
29
+ // Does not include characters that will be output (such as `1.` and `-` for lists)
30
+ if (modeCfg.highlightFormatting === undefined)
31
+ modeCfg.highlightFormatting = false;
32
+
33
+ // Maximum number of nested blockquotes. Set to 0 for infinite nesting.
34
+ // Excess `>` will emit `error` token.
35
+ if (modeCfg.maxBlockquoteDepth === undefined)
36
+ modeCfg.maxBlockquoteDepth = 0;
37
+
38
+ // Should underscores in words open/close em/strong?
39
+ if (modeCfg.underscoresBreakWords === undefined)
40
+ modeCfg.underscoresBreakWords = true;
41
+
42
+ // Turn on fenced code blocks? ("```" to start/end)
43
+ if (modeCfg.fencedCodeBlocks === undefined) modeCfg.fencedCodeBlocks = false;
44
+
45
+ // Turn on task lists? ("- [ ] " and "- [x] ")
46
+ if (modeCfg.taskLists === undefined) modeCfg.taskLists = false;
47
+
48
+ // Turn on strikethrough syntax
49
+ if (modeCfg.strikethrough === undefined)
50
+ modeCfg.strikethrough = false;
51
+
52
+ var codeDepth = 0;
53
+
54
+ var header = 'header'
55
+ , code = 'comment'
56
+ , quote = 'quote'
57
+ , list1 = 'variable-2'
58
+ , list2 = 'variable-3'
59
+ , list3 = 'keyword'
60
+ , hr = 'hr'
61
+ , image = 'tag'
62
+ , formatting = 'formatting'
63
+ , linkinline = 'link'
64
+ , linkemail = 'link'
65
+ , linktext = 'link'
66
+ , linkhref = 'string'
67
+ , em = 'em'
68
+ , strong = 'strong'
69
+ , strikethrough = 'strikethrough';
70
+
71
+ var hrRE = /^([*\-_])(?:\s*\1){2,}\s*$/
72
+ , ulRE = /^[*\-+]\s+/
73
+ , olRE = /^[0-9]+([.)])\s+/
74
+ , taskListRE = /^\[(x| )\](?=\s)/ // Must follow ulRE or olRE
75
+ , atxHeaderRE = /^(#+)(?: |$)/
76
+ , setextHeaderRE = /^ *(?:\={1,}|-{1,})\s*$/
77
+ , textRE = /^[^#!\[\]*_\\<>` "'(~]+/;
78
+
79
+ function switchInline(stream, state, f) {
80
+ state.f = state.inline = f;
81
+ return f(stream, state);
82
+ }
83
+
84
+ function switchBlock(stream, state, f) {
85
+ state.f = state.block = f;
86
+ return f(stream, state);
87
+ }
88
+
89
+
90
+ // Blocks
91
+
92
+ function blankLine(state) {
93
+ // Reset linkTitle state
94
+ state.linkTitle = false;
95
+ // Reset EM state
96
+ state.em = false;
97
+ // Reset STRONG state
98
+ state.strong = false;
99
+ // Reset strikethrough state
100
+ state.strikethrough = false;
101
+ // Reset state.quote
102
+ state.quote = 0;
103
+ // Reset state.indentedCode
104
+ state.indentedCode = false;
105
+ if (!htmlFound && state.f == htmlBlock) {
106
+ state.f = inlineNormal;
107
+ state.block = blockNormal;
108
+ }
109
+ // Reset state.trailingSpace
110
+ state.trailingSpace = 0;
111
+ state.trailingSpaceNewLine = false;
112
+ // Mark this line as blank
113
+ state.thisLineHasContent = false;
114
+ return null;
115
+ }
116
+
117
+ function blockNormal(stream, state) {
118
+
119
+ var sol = stream.sol();
120
+
121
+ var prevLineIsList = state.list !== false,
122
+ prevLineIsIndentedCode = state.indentedCode;
123
+
124
+ state.indentedCode = false;
125
+
126
+ if (prevLineIsList) {
127
+ if (state.indentationDiff >= 0) { // Continued list
128
+ if (state.indentationDiff < 4) { // Only adjust indentation if *not* a code block
129
+ state.indentation -= state.indentationDiff;
130
+ }
131
+ state.list = null;
132
+ } else if (state.indentation > 0) {
133
+ state.list = null;
134
+ state.listDepth = Math.floor(state.indentation / 4);
135
+ } else { // No longer a list
136
+ state.list = false;
137
+ state.listDepth = 0;
138
+ }
139
+ }
140
+
141
+ var match = null;
142
+ if (state.indentationDiff >= 4) {
143
+ stream.skipToEnd();
144
+ if (prevLineIsIndentedCode || !state.prevLineHasContent) {
145
+ state.indentation -= 4;
146
+ state.indentedCode = true;
147
+ return code;
148
+ } else {
149
+ return null;
150
+ }
151
+ } else if (stream.eatSpace()) {
152
+ return null;
153
+ } else if ((match = stream.match(atxHeaderRE)) && match[1].length <= 6) {
154
+ state.header = match[1].length;
155
+ if (modeCfg.highlightFormatting) state.formatting = "header";
156
+ state.f = state.inline;
157
+ return getType(state);
158
+ } else if (state.prevLineHasContent && !state.quote && !prevLineIsList && !prevLineIsIndentedCode && (match = stream.match(setextHeaderRE))) {
159
+ state.header = match[0].charAt(0) == '=' ? 1 : 2;
160
+ if (modeCfg.highlightFormatting) state.formatting = "header";
161
+ state.f = state.inline;
162
+ return getType(state);
163
+ } else if (stream.eat('>')) {
164
+ state.quote = sol ? 1 : state.quote + 1;
165
+ if (modeCfg.highlightFormatting) state.formatting = "quote";
166
+ stream.eatSpace();
167
+ return getType(state);
168
+ } else if (stream.peek() === '[') {
169
+ return switchInline(stream, state, footnoteLink);
170
+ } else if (stream.match(hrRE, true)) {
171
+ state.hr = true;
172
+ return hr;
173
+ } else if ((!state.prevLineHasContent || prevLineIsList) && (stream.match(ulRE, false) || stream.match(olRE, false))) {
174
+ var listType = null;
175
+ if (stream.match(ulRE, true)) {
176
+ listType = 'ul';
177
+ } else {
178
+ stream.match(olRE, true);
179
+ listType = 'ol';
180
+ }
181
+ state.indentation += 4;
182
+ state.list = true;
183
+ state.listDepth++;
184
+ if (modeCfg.taskLists && stream.match(taskListRE, false)) {
185
+ state.taskList = true;
186
+ }
187
+ state.f = state.inline;
188
+ if (modeCfg.highlightFormatting) state.formatting = ["list", "list-" + listType];
189
+ return getType(state);
190
+ } else if (modeCfg.fencedCodeBlocks && stream.match(/^```[ \t]*([\w+#]*)/, true)) {
191
+ // try switching mode
192
+ state.localMode = getMode(RegExp.$1);
193
+ if (state.localMode) state.localState = state.localMode.startState();
194
+ state.f = state.block = local;
195
+ if (modeCfg.highlightFormatting) state.formatting = "code-block";
196
+ state.code = true;
197
+ return getType(state);
198
+ }
199
+
200
+ return switchInline(stream, state, state.inline);
201
+ }
202
+
203
+ function htmlBlock(stream, state) {
204
+ var style = htmlMode.token(stream, state.htmlState);
205
+ if ((htmlFound && state.htmlState.tagStart === null &&
206
+ (!state.htmlState.context && state.htmlState.tokenize.isInText)) ||
207
+ (state.md_inside && stream.current().indexOf(">") > -1)) {
208
+ state.f = inlineNormal;
209
+ state.block = blockNormal;
210
+ state.htmlState = null;
211
+ }
212
+ return style;
213
+ }
214
+
215
+ function local(stream, state) {
216
+ if (stream.sol() && stream.match("```", false)) {
217
+ state.localMode = state.localState = null;
218
+ state.f = state.block = leavingLocal;
219
+ return null;
220
+ } else if (state.localMode) {
221
+ return state.localMode.token(stream, state.localState);
222
+ } else {
223
+ stream.skipToEnd();
224
+ return code;
225
+ }
226
+ }
227
+
228
+ function leavingLocal(stream, state) {
229
+ stream.match("```");
230
+ state.block = blockNormal;
231
+ state.f = inlineNormal;
232
+ if (modeCfg.highlightFormatting) state.formatting = "code-block";
233
+ state.code = true;
234
+ var returnType = getType(state);
235
+ state.code = false;
236
+ return returnType;
237
+ }
238
+
239
+ // Inline
240
+ function getType(state) {
241
+ var styles = [];
242
+
243
+ if (state.formatting) {
244
+ styles.push(formatting);
245
+
246
+ if (typeof state.formatting === "string") state.formatting = [state.formatting];
247
+
248
+ for (var i = 0; i < state.formatting.length; i++) {
249
+ styles.push(formatting + "-" + state.formatting[i]);
250
+
251
+ if (state.formatting[i] === "header") {
252
+ styles.push(formatting + "-" + state.formatting[i] + "-" + state.header);
253
+ }
254
+
255
+ // Add `formatting-quote` and `formatting-quote-#` for blockquotes
256
+ // Add `error` instead if the maximum blockquote nesting depth is passed
257
+ if (state.formatting[i] === "quote") {
258
+ if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {
259
+ styles.push(formatting + "-" + state.formatting[i] + "-" + state.quote);
260
+ } else {
261
+ styles.push("error");
262
+ }
263
+ }
264
+ }
265
+ }
266
+
267
+ if (state.taskOpen) {
268
+ styles.push("meta");
269
+ return styles.length ? styles.join(' ') : null;
270
+ }
271
+ if (state.taskClosed) {
272
+ styles.push("property");
273
+ return styles.length ? styles.join(' ') : null;
274
+ }
275
+
276
+ if (state.linkHref) {
277
+ styles.push(linkhref, "url");
278
+ } else { // Only apply inline styles to non-url text
279
+ if (state.strong) { styles.push(strong); }
280
+ if (state.em) { styles.push(em); }
281
+ if (state.strikethrough) { styles.push(strikethrough); }
282
+
283
+ if (state.linkText) { styles.push(linktext); }
284
+
285
+ if (state.code) { styles.push(code); }
286
+ }
287
+
288
+ if (state.header) { styles.push(header); styles.push(header + "-" + state.header); }
289
+
290
+ if (state.quote) {
291
+ styles.push(quote);
292
+
293
+ // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth
294
+ if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {
295
+ styles.push(quote + "-" + state.quote);
296
+ } else {
297
+ styles.push(quote + "-" + modeCfg.maxBlockquoteDepth);
298
+ }
299
+ }
300
+
301
+ if (state.list !== false) {
302
+ var listMod = (state.listDepth - 1) % 3;
303
+ if (!listMod) {
304
+ styles.push(list1);
305
+ } else if (listMod === 1) {
306
+ styles.push(list2);
307
+ } else {
308
+ styles.push(list3);
309
+ }
310
+ }
311
+
312
+ if (state.trailingSpaceNewLine) {
313
+ styles.push("trailing-space-new-line");
314
+ } else if (state.trailingSpace) {
315
+ styles.push("trailing-space-" + (state.trailingSpace % 2 ? "a" : "b"));
316
+ }
317
+
318
+ return styles.length ? styles.join(' ') : null;
319
+ }
320
+
321
+ function handleText(stream, state) {
322
+ if (stream.match(textRE, true)) {
323
+ return getType(state);
324
+ }
325
+ return undefined;
326
+ }
327
+
328
+ function inlineNormal(stream, state) {
329
+ var style = state.text(stream, state);
330
+ if (typeof style !== 'undefined')
331
+ return style;
332
+
333
+ if (state.list) { // List marker (*, +, -, 1., etc)
334
+ state.list = null;
335
+ return getType(state);
336
+ }
337
+
338
+ if (state.taskList) {
339
+ var taskOpen = stream.match(taskListRE, true)[1] !== "x";
340
+ if (taskOpen) state.taskOpen = true;
341
+ else state.taskClosed = true;
342
+ if (modeCfg.highlightFormatting) state.formatting = "task";
343
+ state.taskList = false;
344
+ return getType(state);
345
+ }
346
+
347
+ state.taskOpen = false;
348
+ state.taskClosed = false;
349
+
350
+ if (state.header && stream.match(/^#+$/, true)) {
351
+ if (modeCfg.highlightFormatting) state.formatting = "header";
352
+ return getType(state);
353
+ }
354
+
355
+ // Get sol() value now, before character is consumed
356
+ var sol = stream.sol();
357
+
358
+ var ch = stream.next();
359
+
360
+ if (ch === '\\') {
361
+ stream.next();
362
+ if (modeCfg.highlightFormatting) {
363
+ var type = getType(state);
364
+ return type ? type + " formatting-escape" : "formatting-escape";
365
+ }
366
+ }
367
+
368
+ // Matches link titles present on next line
369
+ if (state.linkTitle) {
370
+ state.linkTitle = false;
371
+ var matchCh = ch;
372
+ if (ch === '(') {
373
+ matchCh = ')';
374
+ }
375
+ matchCh = (matchCh+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
376
+ var regex = '^\\s*(?:[^' + matchCh + '\\\\]+|\\\\\\\\|\\\\.)' + matchCh;
377
+ if (stream.match(new RegExp(regex), true)) {
378
+ return linkhref;
379
+ }
380
+ }
381
+
382
+ // If this block is changed, it may need to be updated in GFM mode
383
+ if (ch === '`') {
384
+ var previousFormatting = state.formatting;
385
+ if (modeCfg.highlightFormatting) state.formatting = "code";
386
+ var t = getType(state);
387
+ var before = stream.pos;
388
+ stream.eatWhile('`');
389
+ var difference = 1 + stream.pos - before;
390
+ if (!state.code) {
391
+ codeDepth = difference;
392
+ state.code = true;
393
+ return getType(state);
394
+ } else {
395
+ if (difference === codeDepth) { // Must be exact
396
+ state.code = false;
397
+ return t;
398
+ }
399
+ state.formatting = previousFormatting;
400
+ return getType(state);
401
+ }
402
+ } else if (state.code) {
403
+ return getType(state);
404
+ }
405
+
406
+ if (ch === '!' && stream.match(/\[[^\]]*\] ?(?:\(|\[)/, false)) {
407
+ stream.match(/\[[^\]]*\]/);
408
+ state.inline = state.f = linkHref;
409
+ return image;
410
+ }
411
+
412
+ if (ch === '[' && stream.match(/.*\](\(.*\)| ?\[.*\])/, false)) {
413
+ state.linkText = true;
414
+ if (modeCfg.highlightFormatting) state.formatting = "link";
415
+ return getType(state);
416
+ }
417
+
418
+ if (ch === ']' && state.linkText && stream.match(/\(.*\)| ?\[.*\]/, false)) {
419
+ if (modeCfg.highlightFormatting) state.formatting = "link";
420
+ var type = getType(state);
421
+ state.linkText = false;
422
+ state.inline = state.f = linkHref;
423
+ return type;
424
+ }
425
+
426
+ if (ch === '<' && stream.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/, false)) {
427
+ state.f = state.inline = linkInline;
428
+ if (modeCfg.highlightFormatting) state.formatting = "link";
429
+ var type = getType(state);
430
+ if (type){
431
+ type += " ";
432
+ } else {
433
+ type = "";
434
+ }
435
+ return type + linkinline;
436
+ }
437
+
438
+ if (ch === '<' && stream.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/, false)) {
439
+ state.f = state.inline = linkInline;
440
+ if (modeCfg.highlightFormatting) state.formatting = "link";
441
+ var type = getType(state);
442
+ if (type){
443
+ type += " ";
444
+ } else {
445
+ type = "";
446
+ }
447
+ return type + linkemail;
448
+ }
449
+
450
+ if (ch === '<' && stream.match(/^(!--|\w)/, false)) {
451
+ var end = stream.string.indexOf(">", stream.pos);
452
+ if (end != -1) {
453
+ var atts = stream.string.substring(stream.start, end);
454
+ if (/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(atts)) state.md_inside = true;
455
+ }
456
+ stream.backUp(1);
457
+ state.htmlState = CodeMirror.startState(htmlMode);
458
+ return switchBlock(stream, state, htmlBlock);
459
+ }
460
+
461
+ if (ch === '<' && stream.match(/^\/\w*?>/)) {
462
+ state.md_inside = false;
463
+ return "tag";
464
+ }
465
+
466
+ var ignoreUnderscore = false;
467
+ if (!modeCfg.underscoresBreakWords) {
468
+ if (ch === '_' && stream.peek() !== '_' && stream.match(/(\w)/, false)) {
469
+ var prevPos = stream.pos - 2;
470
+ if (prevPos >= 0) {
471
+ var prevCh = stream.string.charAt(prevPos);
472
+ if (prevCh !== '_' && prevCh.match(/(\w)/, false)) {
473
+ ignoreUnderscore = true;
474
+ }
475
+ }
476
+ }
477
+ }
478
+ if (ch === '*' || (ch === '_' && !ignoreUnderscore)) {
479
+ if (sol && stream.peek() === ' ') {
480
+ // Do nothing, surrounded by newline and space
481
+ } else if (state.strong === ch && stream.eat(ch)) { // Remove STRONG
482
+ if (modeCfg.highlightFormatting) state.formatting = "strong";
483
+ var t = getType(state);
484
+ state.strong = false;
485
+ return t;
486
+ } else if (!state.strong && stream.eat(ch)) { // Add STRONG
487
+ state.strong = ch;
488
+ if (modeCfg.highlightFormatting) state.formatting = "strong";
489
+ return getType(state);
490
+ } else if (state.em === ch) { // Remove EM
491
+ if (modeCfg.highlightFormatting) state.formatting = "em";
492
+ var t = getType(state);
493
+ state.em = false;
494
+ return t;
495
+ } else if (!state.em) { // Add EM
496
+ state.em = ch;
497
+ if (modeCfg.highlightFormatting) state.formatting = "em";
498
+ return getType(state);
499
+ }
500
+ } else if (ch === ' ') {
501
+ if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces
502
+ if (stream.peek() === ' ') { // Surrounded by spaces, ignore
503
+ return getType(state);
504
+ } else { // Not surrounded by spaces, back up pointer
505
+ stream.backUp(1);
506
+ }
507
+ }
508
+ }
509
+
510
+ if (modeCfg.strikethrough) {
511
+ if (ch === '~' && stream.eatWhile(ch)) {
512
+ if (state.strikethrough) {// Remove strikethrough
513
+ if (modeCfg.highlightFormatting) state.formatting = "strikethrough";
514
+ var t = getType(state);
515
+ state.strikethrough = false;
516
+ return t;
517
+ } else if (stream.match(/^[^\s]/, false)) {// Add strikethrough
518
+ state.strikethrough = true;
519
+ if (modeCfg.highlightFormatting) state.formatting = "strikethrough";
520
+ return getType(state);
521
+ }
522
+ } else if (ch === ' ') {
523
+ if (stream.match(/^~~/, true)) { // Probably surrounded by space
524
+ if (stream.peek() === ' ') { // Surrounded by spaces, ignore
525
+ return getType(state);
526
+ } else { // Not surrounded by spaces, back up pointer
527
+ stream.backUp(2);
528
+ }
529
+ }
530
+ }
531
+ }
532
+
533
+ if (ch === ' ') {
534
+ if (stream.match(/ +$/, false)) {
535
+ state.trailingSpace++;
536
+ } else if (state.trailingSpace) {
537
+ state.trailingSpaceNewLine = true;
538
+ }
539
+ }
540
+
541
+ return getType(state);
542
+ }
543
+
544
+ function linkInline(stream, state) {
545
+ var ch = stream.next();
546
+
547
+ if (ch === ">") {
548
+ state.f = state.inline = inlineNormal;
549
+ if (modeCfg.highlightFormatting) state.formatting = "link";
550
+ var type = getType(state);
551
+ if (type){
552
+ type += " ";
553
+ } else {
554
+ type = "";
555
+ }
556
+ return type + linkinline;
557
+ }
558
+
559
+ stream.match(/^[^>]+/, true);
560
+
561
+ return linkinline;
562
+ }
563
+
564
+ function linkHref(stream, state) {
565
+ // Check if space, and return NULL if so (to avoid marking the space)
566
+ if(stream.eatSpace()){
567
+ return null;
568
+ }
569
+ var ch = stream.next();
570
+ if (ch === '(' || ch === '[') {
571
+ state.f = state.inline = getLinkHrefInside(ch === "(" ? ")" : "]");
572
+ if (modeCfg.highlightFormatting) state.formatting = "link-string";
573
+ state.linkHref = true;
574
+ return getType(state);
575
+ }
576
+ return 'error';
577
+ }
578
+
579
+ function getLinkHrefInside(endChar) {
580
+ return function(stream, state) {
581
+ var ch = stream.next();
582
+
583
+ if (ch === endChar) {
584
+ state.f = state.inline = inlineNormal;
585
+ if (modeCfg.highlightFormatting) state.formatting = "link-string";
586
+ var returnState = getType(state);
587
+ state.linkHref = false;
588
+ return returnState;
589
+ }
590
+
591
+ if (stream.match(inlineRE(endChar), true)) {
592
+ stream.backUp(1);
593
+ }
594
+
595
+ state.linkHref = true;
596
+ return getType(state);
597
+ };
598
+ }
599
+
600
+ function footnoteLink(stream, state) {
601
+ if (stream.match(/^[^\]]*\]:/, false)) {
602
+ state.f = footnoteLinkInside;
603
+ stream.next(); // Consume [
604
+ if (modeCfg.highlightFormatting) state.formatting = "link";
605
+ state.linkText = true;
606
+ return getType(state);
607
+ }
608
+ return switchInline(stream, state, inlineNormal);
609
+ }
610
+
611
+ function footnoteLinkInside(stream, state) {
612
+ if (stream.match(/^\]:/, true)) {
613
+ state.f = state.inline = footnoteUrl;
614
+ if (modeCfg.highlightFormatting) state.formatting = "link";
615
+ var returnType = getType(state);
616
+ state.linkText = false;
617
+ return returnType;
618
+ }
619
+
620
+ stream.match(/^[^\]]+/, true);
621
+
622
+ return linktext;
623
+ }
624
+
625
+ function footnoteUrl(stream, state) {
626
+ // Check if space, and return NULL if so (to avoid marking the space)
627
+ if(stream.eatSpace()){
628
+ return null;
629
+ }
630
+ // Match URL
631
+ stream.match(/^[^\s]+/, true);
632
+ // Check for link title
633
+ if (stream.peek() === undefined) { // End of line, set flag to check next line
634
+ state.linkTitle = true;
635
+ } else { // More content on line, check if link title
636
+ stream.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/, true);
637
+ }
638
+ state.f = state.inline = inlineNormal;
639
+ return linkhref + " url";
640
+ }
641
+
642
+ var savedInlineRE = [];
643
+ function inlineRE(endChar) {
644
+ if (!savedInlineRE[endChar]) {
645
+ // Escape endChar for RegExp (taken from http://stackoverflow.com/a/494122/526741)
646
+ endChar = (endChar+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
647
+ // Match any non-endChar, escaped character, as well as the closing
648
+ // endChar.
649
+ savedInlineRE[endChar] = new RegExp('^(?:[^\\\\]|\\\\.)*?(' + endChar + ')');
650
+ }
651
+ return savedInlineRE[endChar];
652
+ }
653
+
654
+ var mode = {
655
+ startState: function() {
656
+ return {
657
+ f: blockNormal,
658
+
659
+ prevLineHasContent: false,
660
+ thisLineHasContent: false,
661
+
662
+ block: blockNormal,
663
+ htmlState: null,
664
+ indentation: 0,
665
+
666
+ inline: inlineNormal,
667
+ text: handleText,
668
+
669
+ formatting: false,
670
+ linkText: false,
671
+ linkHref: false,
672
+ linkTitle: false,
673
+ em: false,
674
+ strong: false,
675
+ header: 0,
676
+ hr: false,
677
+ taskList: false,
678
+ list: false,
679
+ listDepth: 0,
680
+ quote: 0,
681
+ trailingSpace: 0,
682
+ trailingSpaceNewLine: false,
683
+ strikethrough: false
684
+ };
685
+ },
686
+
687
+ copyState: function(s) {
688
+ return {
689
+ f: s.f,
690
+
691
+ prevLineHasContent: s.prevLineHasContent,
692
+ thisLineHasContent: s.thisLineHasContent,
693
+
694
+ block: s.block,
695
+ htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),
696
+ indentation: s.indentation,
697
+
698
+ localMode: s.localMode,
699
+ localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,
700
+
701
+ inline: s.inline,
702
+ text: s.text,
703
+ formatting: false,
704
+ linkTitle: s.linkTitle,
705
+ em: s.em,
706
+ strong: s.strong,
707
+ strikethrough: s.strikethrough,
708
+ header: s.header,
709
+ hr: s.hr,
710
+ taskList: s.taskList,
711
+ list: s.list,
712
+ listDepth: s.listDepth,
713
+ quote: s.quote,
714
+ indentedCode: s.indentedCode,
715
+ trailingSpace: s.trailingSpace,
716
+ trailingSpaceNewLine: s.trailingSpaceNewLine,
717
+ md_inside: s.md_inside
718
+ };
719
+ },
720
+
721
+ token: function(stream, state) {
722
+
723
+ // Reset state.formatting
724
+ state.formatting = false;
725
+
726
+ if (stream.sol()) {
727
+ var forceBlankLine = !!state.header || state.hr;
728
+
729
+ // Reset state.header and state.hr
730
+ state.header = 0;
731
+ state.hr = false;
732
+
733
+ if (stream.match(/^\s*$/, true) || forceBlankLine) {
734
+ state.prevLineHasContent = false;
735
+ blankLine(state);
736
+ return forceBlankLine ? this.token(stream, state) : null;
737
+ } else {
738
+ state.prevLineHasContent = state.thisLineHasContent;
739
+ state.thisLineHasContent = true;
740
+ }
741
+
742
+ // Reset state.taskList
743
+ state.taskList = false;
744
+
745
+ // Reset state.code
746
+ state.code = false;
747
+
748
+ // Reset state.trailingSpace
749
+ state.trailingSpace = 0;
750
+ state.trailingSpaceNewLine = false;
751
+
752
+ state.f = state.block;
753
+ var indentation = stream.match(/^\s*/, true)[0].replace(/\t/g, ' ').length;
754
+ var difference = Math.floor((indentation - state.indentation) / 4) * 4;
755
+ if (difference > 4) difference = 4;
756
+ var adjustedIndentation = state.indentation + difference;
757
+ state.indentationDiff = adjustedIndentation - state.indentation;
758
+ state.indentation = adjustedIndentation;
759
+ if (indentation > 0) return null;
760
+ }
761
+ return state.f(stream, state);
762
+ },
763
+
764
+ innerMode: function(state) {
765
+ if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode};
766
+ if (state.localState) return {state: state.localState, mode: state.localMode};
767
+ return {state: state, mode: mode};
768
+ },
769
+
770
+ blankLine: blankLine,
771
+
772
+ getType: getType,
773
+
774
+ fold: "markdown"
775
+ };
776
+ return mode;
777
+ }, "xml");
778
+
779
+ CodeMirror.defineMIME("text/x-markdown", "markdown");
780
+
781
+ });