lines-engine 0.6.2 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
+ });