fluentd-ui 0.3.12 → 0.3.13

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 (234) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +4 -0
  3. data/Gemfile.lock +1 -1
  4. data/app/assets/javascripts/application.js +2 -0
  5. data/app/assets/javascripts/codemirror.js +29 -0
  6. data/app/assets/javascripts/codemirror_fluentd.js +59 -0
  7. data/app/assets/stylesheets/application.css +6 -0
  8. data/app/views/fluentd/settings/edit.html.haml +1 -1
  9. data/app/views/shared/vue/_setting.html.erb +1 -1
  10. data/bower.json +2 -1
  11. data/lib/fluentd-ui/version.rb +1 -1
  12. data/spec/features/source_and_output_spec.rb +16 -6
  13. data/vendor/assets/javascripts/bower/codemirror/.bower.json +29 -0
  14. data/vendor/assets/javascripts/bower/codemirror/AUTHORS +423 -0
  15. data/vendor/assets/javascripts/bower/codemirror/CONTRIBUTING.md +76 -0
  16. data/vendor/assets/javascripts/bower/codemirror/LICENSE +19 -0
  17. data/vendor/assets/javascripts/bower/codemirror/README.md +11 -0
  18. data/vendor/assets/javascripts/bower/codemirror/addon/comment/comment.js +183 -0
  19. data/vendor/assets/javascripts/bower/codemirror/addon/comment/continuecomment.js +85 -0
  20. data/vendor/assets/javascripts/bower/codemirror/addon/dialog/dialog.css +32 -0
  21. data/vendor/assets/javascripts/bower/codemirror/addon/dialog/dialog.js +155 -0
  22. data/vendor/assets/javascripts/bower/codemirror/addon/display/fullscreen.css +6 -0
  23. data/vendor/assets/javascripts/bower/codemirror/addon/display/fullscreen.js +41 -0
  24. data/vendor/assets/javascripts/bower/codemirror/addon/display/panel.js +94 -0
  25. data/vendor/assets/javascripts/bower/codemirror/addon/display/placeholder.js +58 -0
  26. data/vendor/assets/javascripts/bower/codemirror/addon/display/rulers.js +64 -0
  27. data/vendor/assets/javascripts/bower/codemirror/addon/edit/closebrackets.js +159 -0
  28. data/vendor/assets/javascripts/bower/codemirror/addon/edit/closetag.js +159 -0
  29. data/vendor/assets/javascripts/bower/codemirror/addon/edit/continuelist.js +51 -0
  30. data/vendor/assets/javascripts/bower/codemirror/addon/edit/matchbrackets.js +120 -0
  31. data/vendor/assets/javascripts/bower/codemirror/addon/edit/matchtags.js +66 -0
  32. data/vendor/assets/javascripts/bower/codemirror/addon/edit/trailingspace.js +27 -0
  33. data/vendor/assets/javascripts/bower/codemirror/addon/fold/brace-fold.js +105 -0
  34. data/vendor/assets/javascripts/bower/codemirror/addon/fold/comment-fold.js +57 -0
  35. data/vendor/assets/javascripts/bower/codemirror/addon/fold/foldcode.js +145 -0
  36. data/vendor/assets/javascripts/bower/codemirror/addon/fold/foldgutter.css +20 -0
  37. data/vendor/assets/javascripts/bower/codemirror/addon/fold/foldgutter.js +134 -0
  38. data/vendor/assets/javascripts/bower/codemirror/addon/fold/indent-fold.js +44 -0
  39. data/vendor/assets/javascripts/bower/codemirror/addon/fold/markdown-fold.js +49 -0
  40. data/vendor/assets/javascripts/bower/codemirror/addon/fold/xml-fold.js +182 -0
  41. data/vendor/assets/javascripts/bower/codemirror/addon/hint/anyword-hint.js +41 -0
  42. data/vendor/assets/javascripts/bower/codemirror/addon/hint/css-hint.js +56 -0
  43. data/vendor/assets/javascripts/bower/codemirror/addon/hint/html-hint.js +348 -0
  44. data/vendor/assets/javascripts/bower/codemirror/addon/hint/javascript-hint.js +146 -0
  45. data/vendor/assets/javascripts/bower/codemirror/addon/hint/show-hint.css +38 -0
  46. data/vendor/assets/javascripts/bower/codemirror/addon/hint/show-hint.js +389 -0
  47. data/vendor/assets/javascripts/bower/codemirror/addon/hint/sql-hint.js +197 -0
  48. data/vendor/assets/javascripts/bower/codemirror/addon/hint/xml-hint.js +110 -0
  49. data/vendor/assets/javascripts/bower/codemirror/addon/lint/coffeescript-lint.js +41 -0
  50. data/vendor/assets/javascripts/bower/codemirror/addon/lint/css-lint.js +35 -0
  51. data/vendor/assets/javascripts/bower/codemirror/addon/lint/javascript-lint.js +136 -0
  52. data/vendor/assets/javascripts/bower/codemirror/addon/lint/json-lint.js +31 -0
  53. data/vendor/assets/javascripts/bower/codemirror/addon/lint/lint.css +73 -0
  54. data/vendor/assets/javascripts/bower/codemirror/addon/lint/lint.js +204 -0
  55. data/vendor/assets/javascripts/bower/codemirror/addon/lint/yaml-lint.js +28 -0
  56. data/vendor/assets/javascripts/bower/codemirror/addon/merge/merge.css +112 -0
  57. data/vendor/assets/javascripts/bower/codemirror/addon/merge/merge.js +643 -0
  58. data/vendor/assets/javascripts/bower/codemirror/addon/mode/loadmode.js +64 -0
  59. data/vendor/assets/javascripts/bower/codemirror/addon/mode/multiplex.js +118 -0
  60. data/vendor/assets/javascripts/bower/codemirror/addon/mode/multiplex_test.js +33 -0
  61. data/vendor/assets/javascripts/bower/codemirror/addon/mode/overlay.js +85 -0
  62. data/vendor/assets/javascripts/bower/codemirror/addon/mode/simple.js +213 -0
  63. data/vendor/assets/javascripts/bower/codemirror/addon/runmode/colorize.js +40 -0
  64. data/vendor/assets/javascripts/bower/codemirror/addon/runmode/runmode-standalone.js +157 -0
  65. data/vendor/assets/javascripts/bower/codemirror/addon/runmode/runmode.js +72 -0
  66. data/vendor/assets/javascripts/bower/codemirror/addon/runmode/runmode.node.js +120 -0
  67. data/vendor/assets/javascripts/bower/codemirror/addon/scroll/annotatescrollbar.js +76 -0
  68. data/vendor/assets/javascripts/bower/codemirror/addon/scroll/scrollpastend.js +46 -0
  69. data/vendor/assets/javascripts/bower/codemirror/addon/scroll/simplescrollbars.css +66 -0
  70. data/vendor/assets/javascripts/bower/codemirror/addon/scroll/simplescrollbars.js +139 -0
  71. data/vendor/assets/javascripts/bower/codemirror/addon/search/match-highlighter.js +128 -0
  72. data/vendor/assets/javascripts/bower/codemirror/addon/search/matchesonscrollbar.css +8 -0
  73. data/vendor/assets/javascripts/bower/codemirror/addon/search/matchesonscrollbar.js +90 -0
  74. data/vendor/assets/javascripts/bower/codemirror/addon/search/search.js +164 -0
  75. data/vendor/assets/javascripts/bower/codemirror/addon/search/searchcursor.js +189 -0
  76. data/vendor/assets/javascripts/bower/codemirror/addon/selection/active-line.js +71 -0
  77. data/vendor/assets/javascripts/bower/codemirror/addon/selection/mark-selection.js +118 -0
  78. data/vendor/assets/javascripts/bower/codemirror/addon/tern/tern.css +86 -0
  79. data/vendor/assets/javascripts/bower/codemirror/addon/tern/tern.js +670 -0
  80. data/vendor/assets/javascripts/bower/codemirror/addon/tern/worker.js +44 -0
  81. data/vendor/assets/javascripts/bower/codemirror/addon/wrap/hardwrap.js +139 -0
  82. data/vendor/assets/javascripts/bower/codemirror/bower.json +16 -0
  83. data/vendor/assets/javascripts/bower/codemirror/keymap/emacs.js +411 -0
  84. data/vendor/assets/javascripts/bower/codemirror/keymap/sublime.js +540 -0
  85. data/vendor/assets/javascripts/bower/codemirror/keymap/vim.js +4901 -0
  86. data/vendor/assets/javascripts/bower/codemirror/lib/codemirror.css +309 -0
  87. data/vendor/assets/javascripts/bower/codemirror/lib/codemirror.js +8029 -0
  88. data/vendor/assets/javascripts/bower/codemirror/mode/apl/apl.js +175 -0
  89. data/vendor/assets/javascripts/bower/codemirror/mode/asterisk/asterisk.js +198 -0
  90. data/vendor/assets/javascripts/bower/codemirror/mode/clike/clike.js +489 -0
  91. data/vendor/assets/javascripts/bower/codemirror/mode/clike/scala.html +767 -0
  92. data/vendor/assets/javascripts/bower/codemirror/mode/clojure/clojure.js +243 -0
  93. data/vendor/assets/javascripts/bower/codemirror/mode/cobol/cobol.js +255 -0
  94. data/vendor/assets/javascripts/bower/codemirror/mode/coffeescript/coffeescript.js +369 -0
  95. data/vendor/assets/javascripts/bower/codemirror/mode/commonlisp/commonlisp.js +122 -0
  96. data/vendor/assets/javascripts/bower/codemirror/mode/css/css.js +717 -0
  97. data/vendor/assets/javascripts/bower/codemirror/mode/css/less.html +152 -0
  98. data/vendor/assets/javascripts/bower/codemirror/mode/css/less_test.js +51 -0
  99. data/vendor/assets/javascripts/bower/codemirror/mode/css/scss.html +157 -0
  100. data/vendor/assets/javascripts/bower/codemirror/mode/css/scss_test.js +110 -0
  101. data/vendor/assets/javascripts/bower/codemirror/mode/css/test.js +135 -0
  102. data/vendor/assets/javascripts/bower/codemirror/mode/cypher/cypher.js +146 -0
  103. data/vendor/assets/javascripts/bower/codemirror/mode/d/d.js +218 -0
  104. data/vendor/assets/javascripts/bower/codemirror/mode/dart/dart.js +50 -0
  105. data/vendor/assets/javascripts/bower/codemirror/mode/diff/diff.js +47 -0
  106. data/vendor/assets/javascripts/bower/codemirror/mode/django/django.js +67 -0
  107. data/vendor/assets/javascripts/bower/codemirror/mode/dockerfile/dockerfile.js +76 -0
  108. data/vendor/assets/javascripts/bower/codemirror/mode/dtd/dtd.js +142 -0
  109. data/vendor/assets/javascripts/bower/codemirror/mode/dylan/dylan.js +299 -0
  110. data/vendor/assets/javascripts/bower/codemirror/mode/ebnf/ebnf.js +195 -0
  111. data/vendor/assets/javascripts/bower/codemirror/mode/ecl/ecl.js +207 -0
  112. data/vendor/assets/javascripts/bower/codemirror/mode/eiffel/eiffel.js +162 -0
  113. data/vendor/assets/javascripts/bower/codemirror/mode/erlang/erlang.js +622 -0
  114. data/vendor/assets/javascripts/bower/codemirror/mode/fortran/fortran.js +188 -0
  115. data/vendor/assets/javascripts/bower/codemirror/mode/gas/gas.js +345 -0
  116. data/vendor/assets/javascripts/bower/codemirror/mode/gfm/gfm.js +123 -0
  117. data/vendor/assets/javascripts/bower/codemirror/mode/gfm/test.js +213 -0
  118. data/vendor/assets/javascripts/bower/codemirror/mode/gherkin/gherkin.js +178 -0
  119. data/vendor/assets/javascripts/bower/codemirror/mode/go/go.js +184 -0
  120. data/vendor/assets/javascripts/bower/codemirror/mode/groovy/groovy.js +226 -0
  121. data/vendor/assets/javascripts/bower/codemirror/mode/haml/haml.js +159 -0
  122. data/vendor/assets/javascripts/bower/codemirror/mode/haml/test.js +97 -0
  123. data/vendor/assets/javascripts/bower/codemirror/mode/haskell/haskell.js +267 -0
  124. data/vendor/assets/javascripts/bower/codemirror/mode/haxe/haxe.js +518 -0
  125. data/vendor/assets/javascripts/bower/codemirror/mode/htmlembedded/htmlembedded.js +86 -0
  126. data/vendor/assets/javascripts/bower/codemirror/mode/htmlmixed/htmlmixed.js +121 -0
  127. data/vendor/assets/javascripts/bower/codemirror/mode/http/http.js +113 -0
  128. data/vendor/assets/javascripts/bower/codemirror/mode/idl/idl.js +290 -0
  129. data/vendor/assets/javascripts/bower/codemirror/mode/jade/jade.js +590 -0
  130. data/vendor/assets/javascripts/bower/codemirror/mode/javascript/javascript.js +686 -0
  131. data/vendor/assets/javascripts/bower/codemirror/mode/javascript/json-ld.html +72 -0
  132. data/vendor/assets/javascripts/bower/codemirror/mode/javascript/test.js +200 -0
  133. data/vendor/assets/javascripts/bower/codemirror/mode/javascript/typescript.html +61 -0
  134. data/vendor/assets/javascripts/bower/codemirror/mode/jinja2/jinja2.js +142 -0
  135. data/vendor/assets/javascripts/bower/codemirror/mode/julia/julia.js +301 -0
  136. data/vendor/assets/javascripts/bower/codemirror/mode/kotlin/kotlin.js +280 -0
  137. data/vendor/assets/javascripts/bower/codemirror/mode/livescript/livescript.js +280 -0
  138. data/vendor/assets/javascripts/bower/codemirror/mode/lua/lua.js +159 -0
  139. data/vendor/assets/javascripts/bower/codemirror/mode/markdown/markdown.js +765 -0
  140. data/vendor/assets/javascripts/bower/codemirror/mode/markdown/test.js +754 -0
  141. data/vendor/assets/javascripts/bower/codemirror/mode/meta.js +165 -0
  142. data/vendor/assets/javascripts/bower/codemirror/mode/mirc/mirc.js +193 -0
  143. data/vendor/assets/javascripts/bower/codemirror/mode/mllike/mllike.js +205 -0
  144. data/vendor/assets/javascripts/bower/codemirror/mode/modelica/modelica.js +245 -0
  145. data/vendor/assets/javascripts/bower/codemirror/mode/nginx/nginx.js +178 -0
  146. data/vendor/assets/javascripts/bower/codemirror/mode/ntriples/ntriples.js +186 -0
  147. data/vendor/assets/javascripts/bower/codemirror/mode/octave/octave.js +135 -0
  148. data/vendor/assets/javascripts/bower/codemirror/mode/pascal/pascal.js +109 -0
  149. data/vendor/assets/javascripts/bower/codemirror/mode/pegjs/pegjs.js +114 -0
  150. data/vendor/assets/javascripts/bower/codemirror/mode/perl/perl.js +832 -0
  151. data/vendor/assets/javascripts/bower/codemirror/mode/php/php.js +226 -0
  152. data/vendor/assets/javascripts/bower/codemirror/mode/php/test.js +154 -0
  153. data/vendor/assets/javascripts/bower/codemirror/mode/pig/pig.js +188 -0
  154. data/vendor/assets/javascripts/bower/codemirror/mode/properties/properties.js +78 -0
  155. data/vendor/assets/javascripts/bower/codemirror/mode/puppet/puppet.js +220 -0
  156. data/vendor/assets/javascripts/bower/codemirror/mode/python/python.js +359 -0
  157. data/vendor/assets/javascripts/bower/codemirror/mode/q/q.js +139 -0
  158. data/vendor/assets/javascripts/bower/codemirror/mode/r/r.js +162 -0
  159. data/vendor/assets/javascripts/bower/codemirror/mode/rpm/rpm.js +101 -0
  160. data/vendor/assets/javascripts/bower/codemirror/mode/rst/rst.js +557 -0
  161. data/vendor/assets/javascripts/bower/codemirror/mode/ruby/ruby.js +285 -0
  162. data/vendor/assets/javascripts/bower/codemirror/mode/ruby/test.js +14 -0
  163. data/vendor/assets/javascripts/bower/codemirror/mode/rust/rust.js +451 -0
  164. data/vendor/assets/javascripts/bower/codemirror/mode/sass/sass.js +327 -0
  165. data/vendor/assets/javascripts/bower/codemirror/mode/scheme/scheme.js +248 -0
  166. data/vendor/assets/javascripts/bower/codemirror/mode/shell/shell.js +139 -0
  167. data/vendor/assets/javascripts/bower/codemirror/mode/shell/test.js +58 -0
  168. data/vendor/assets/javascripts/bower/codemirror/mode/sieve/sieve.js +193 -0
  169. data/vendor/assets/javascripts/bower/codemirror/mode/slim/slim.js +575 -0
  170. data/vendor/assets/javascripts/bower/codemirror/mode/slim/test.js +96 -0
  171. data/vendor/assets/javascripts/bower/codemirror/mode/smalltalk/smalltalk.js +168 -0
  172. data/vendor/assets/javascripts/bower/codemirror/mode/smarty/smarty.js +221 -0
  173. data/vendor/assets/javascripts/bower/codemirror/mode/smartymixed/smartymixed.js +197 -0
  174. data/vendor/assets/javascripts/bower/codemirror/mode/solr/solr.js +104 -0
  175. data/vendor/assets/javascripts/bower/codemirror/mode/soy/soy.js +198 -0
  176. data/vendor/assets/javascripts/bower/codemirror/mode/sparql/sparql.js +174 -0
  177. data/vendor/assets/javascripts/bower/codemirror/mode/spreadsheet/spreadsheet.js +109 -0
  178. data/vendor/assets/javascripts/bower/codemirror/mode/sql/sql.js +391 -0
  179. data/vendor/assets/javascripts/bower/codemirror/mode/stex/stex.js +251 -0
  180. data/vendor/assets/javascripts/bower/codemirror/mode/stex/test.js +123 -0
  181. data/vendor/assets/javascripts/bower/codemirror/mode/tcl/tcl.js +147 -0
  182. data/vendor/assets/javascripts/bower/codemirror/mode/textile/test.js +417 -0
  183. data/vendor/assets/javascripts/bower/codemirror/mode/textile/textile.js +469 -0
  184. data/vendor/assets/javascripts/bower/codemirror/mode/tiddlywiki/tiddlywiki.css +14 -0
  185. data/vendor/assets/javascripts/bower/codemirror/mode/tiddlywiki/tiddlywiki.js +369 -0
  186. data/vendor/assets/javascripts/bower/codemirror/mode/tiki/tiki.css +26 -0
  187. data/vendor/assets/javascripts/bower/codemirror/mode/tiki/tiki.js +323 -0
  188. data/vendor/assets/javascripts/bower/codemirror/mode/toml/toml.js +88 -0
  189. data/vendor/assets/javascripts/bower/codemirror/mode/tornado/tornado.js +68 -0
  190. data/vendor/assets/javascripts/bower/codemirror/mode/turtle/turtle.js +162 -0
  191. data/vendor/assets/javascripts/bower/codemirror/mode/vb/vb.js +274 -0
  192. data/vendor/assets/javascripts/bower/codemirror/mode/vbscript/vbscript.js +350 -0
  193. data/vendor/assets/javascripts/bower/codemirror/mode/velocity/velocity.js +201 -0
  194. data/vendor/assets/javascripts/bower/codemirror/mode/verilog/test.js +273 -0
  195. data/vendor/assets/javascripts/bower/codemirror/mode/verilog/verilog.js +364 -0
  196. data/vendor/assets/javascripts/bower/codemirror/mode/xml/test.js +51 -0
  197. data/vendor/assets/javascripts/bower/codemirror/mode/xml/xml.js +384 -0
  198. data/vendor/assets/javascripts/bower/codemirror/mode/xquery/test.js +67 -0
  199. data/vendor/assets/javascripts/bower/codemirror/mode/xquery/xquery.js +447 -0
  200. data/vendor/assets/javascripts/bower/codemirror/mode/yaml/yaml.js +117 -0
  201. data/vendor/assets/javascripts/bower/codemirror/mode/z80/z80.js +100 -0
  202. data/vendor/assets/javascripts/bower/codemirror/theme/3024-day.css +38 -0
  203. data/vendor/assets/javascripts/bower/codemirror/theme/3024-night.css +37 -0
  204. data/vendor/assets/javascripts/bower/codemirror/theme/ambiance-mobile.css +5 -0
  205. data/vendor/assets/javascripts/bower/codemirror/theme/ambiance.css +77 -0
  206. data/vendor/assets/javascripts/bower/codemirror/theme/base16-dark.css +36 -0
  207. data/vendor/assets/javascripts/bower/codemirror/theme/base16-light.css +36 -0
  208. data/vendor/assets/javascripts/bower/codemirror/theme/blackboard.css +30 -0
  209. data/vendor/assets/javascripts/bower/codemirror/theme/cobalt.css +23 -0
  210. data/vendor/assets/javascripts/bower/codemirror/theme/eclipse.css +23 -0
  211. data/vendor/assets/javascripts/bower/codemirror/theme/elegant.css +13 -0
  212. data/vendor/assets/javascripts/bower/codemirror/theme/erlang-dark.css +32 -0
  213. data/vendor/assets/javascripts/bower/codemirror/theme/lesser-dark.css +45 -0
  214. data/vendor/assets/javascripts/bower/codemirror/theme/mbo.css +35 -0
  215. data/vendor/assets/javascripts/bower/codemirror/theme/mdn-like.css +44 -0
  216. data/vendor/assets/javascripts/bower/codemirror/theme/midnight.css +45 -0
  217. data/vendor/assets/javascripts/bower/codemirror/theme/monokai.css +31 -0
  218. data/vendor/assets/javascripts/bower/codemirror/theme/neat.css +12 -0
  219. data/vendor/assets/javascripts/bower/codemirror/theme/neo.css +43 -0
  220. data/vendor/assets/javascripts/bower/codemirror/theme/night.css +26 -0
  221. data/vendor/assets/javascripts/bower/codemirror/theme/paraiso-dark.css +36 -0
  222. data/vendor/assets/javascripts/bower/codemirror/theme/paraiso-light.css +36 -0
  223. data/vendor/assets/javascripts/bower/codemirror/theme/pastel-on-dark.css +50 -0
  224. data/vendor/assets/javascripts/bower/codemirror/theme/rubyblue.css +23 -0
  225. data/vendor/assets/javascripts/bower/codemirror/theme/solarized.css +165 -0
  226. data/vendor/assets/javascripts/bower/codemirror/theme/the-matrix.css +28 -0
  227. data/vendor/assets/javascripts/bower/codemirror/theme/tomorrow-night-bright.css +35 -0
  228. data/vendor/assets/javascripts/bower/codemirror/theme/tomorrow-night-eighties.css +36 -0
  229. data/vendor/assets/javascripts/bower/codemirror/theme/twilight.css +30 -0
  230. data/vendor/assets/javascripts/bower/codemirror/theme/vibrant-ink.css +32 -0
  231. data/vendor/assets/javascripts/bower/codemirror/theme/xq-dark.css +51 -0
  232. data/vendor/assets/javascripts/bower/codemirror/theme/xq-light.css +43 -0
  233. data/vendor/assets/javascripts/bower/codemirror/theme/zenburn.css +37 -0
  234. metadata +225 -2
@@ -0,0 +1,754 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
4
+ (function() {
5
+ var mode = CodeMirror.getMode({tabSize: 4}, "markdown");
6
+ function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); }
7
+ var modeHighlightFormatting = CodeMirror.getMode({tabSize: 4}, {name: "markdown", highlightFormatting: true});
8
+ function FT(name) { test.mode(name, modeHighlightFormatting, Array.prototype.slice.call(arguments, 1)); }
9
+
10
+ FT("formatting_emAsterisk",
11
+ "[em&formatting&formatting-em *][em foo][em&formatting&formatting-em *]");
12
+
13
+ FT("formatting_emUnderscore",
14
+ "[em&formatting&formatting-em _][em foo][em&formatting&formatting-em _]");
15
+
16
+ FT("formatting_strongAsterisk",
17
+ "[strong&formatting&formatting-strong **][strong foo][strong&formatting&formatting-strong **]");
18
+
19
+ FT("formatting_strongUnderscore",
20
+ "[strong&formatting&formatting-strong __][strong foo][strong&formatting&formatting-strong __]");
21
+
22
+ FT("formatting_codeBackticks",
23
+ "[comment&formatting&formatting-code `][comment foo][comment&formatting&formatting-code `]");
24
+
25
+ FT("formatting_doubleBackticks",
26
+ "[comment&formatting&formatting-code ``][comment foo ` bar][comment&formatting&formatting-code ``]");
27
+
28
+ FT("formatting_atxHeader",
29
+ "[header&header-1&formatting&formatting-header&formatting-header-1 #][header&header-1 foo # bar ][header&header-1&formatting&formatting-header&formatting-header-1 #]");
30
+
31
+ FT("formatting_setextHeader",
32
+ "foo",
33
+ "[header&header-1&formatting&formatting-header&formatting-header-1 =]");
34
+
35
+ FT("formatting_blockquote",
36
+ "[quote&quote-1&formatting&formatting-quote&formatting-quote-1 > ][quote&quote-1 foo]");
37
+
38
+ FT("formatting_list",
39
+ "[variable-2&formatting&formatting-list&formatting-list-ul - ][variable-2 foo]");
40
+ FT("formatting_list",
41
+ "[variable-2&formatting&formatting-list&formatting-list-ol 1. ][variable-2 foo]");
42
+
43
+ FT("formatting_link",
44
+ "[link&formatting&formatting-link [][link foo][link&formatting&formatting-link ]]][string&formatting&formatting-link-string (][string http://example.com/][string&formatting&formatting-link-string )]");
45
+
46
+ FT("formatting_linkReference",
47
+ "[link&formatting&formatting-link [][link foo][link&formatting&formatting-link ]]][string&formatting&formatting-link-string [][string bar][string&formatting&formatting-link-string ]]]",
48
+ "[link&formatting&formatting-link [][link bar][link&formatting&formatting-link ]]:] [string http://example.com/]");
49
+
50
+ FT("formatting_linkWeb",
51
+ "[link&formatting&formatting-link <][link http://example.com/][link&formatting&formatting-link >]");
52
+
53
+ FT("formatting_linkEmail",
54
+ "[link&formatting&formatting-link <][link user@example.com][link&formatting&formatting-link >]");
55
+
56
+ FT("formatting_escape",
57
+ "[formatting-escape \\*]");
58
+
59
+ MT("plainText",
60
+ "foo");
61
+
62
+ // Don't style single trailing space
63
+ MT("trailingSpace1",
64
+ "foo ");
65
+
66
+ // Two or more trailing spaces should be styled with line break character
67
+ MT("trailingSpace2",
68
+ "foo[trailing-space-a ][trailing-space-new-line ]");
69
+
70
+ MT("trailingSpace3",
71
+ "foo[trailing-space-a ][trailing-space-b ][trailing-space-new-line ]");
72
+
73
+ MT("trailingSpace4",
74
+ "foo[trailing-space-a ][trailing-space-b ][trailing-space-a ][trailing-space-new-line ]");
75
+
76
+ // Code blocks using 4 spaces (regardless of CodeMirror.tabSize value)
77
+ MT("codeBlocksUsing4Spaces",
78
+ " [comment foo]");
79
+
80
+ // Code blocks using 4 spaces with internal indentation
81
+ MT("codeBlocksUsing4SpacesIndentation",
82
+ " [comment bar]",
83
+ " [comment hello]",
84
+ " [comment world]",
85
+ " [comment foo]",
86
+ "bar");
87
+
88
+ // Code blocks using 4 spaces with internal indentation
89
+ MT("codeBlocksUsing4SpacesIndentation",
90
+ " foo",
91
+ " [comment bar]",
92
+ " [comment hello]",
93
+ " [comment world]");
94
+
95
+ // Code blocks should end even after extra indented lines
96
+ MT("codeBlocksWithTrailingIndentedLine",
97
+ " [comment foo]",
98
+ " [comment bar]",
99
+ " [comment baz]",
100
+ " ",
101
+ "hello");
102
+
103
+ // Code blocks using 1 tab (regardless of CodeMirror.indentWithTabs value)
104
+ MT("codeBlocksUsing1Tab",
105
+ "\t[comment foo]");
106
+
107
+ // Inline code using backticks
108
+ MT("inlineCodeUsingBackticks",
109
+ "foo [comment `bar`]");
110
+
111
+ // Block code using single backtick (shouldn't work)
112
+ MT("blockCodeSingleBacktick",
113
+ "[comment `]",
114
+ "foo",
115
+ "[comment `]");
116
+
117
+ // Unclosed backticks
118
+ // Instead of simply marking as CODE, it would be nice to have an
119
+ // incomplete flag for CODE, that is styled slightly different.
120
+ MT("unclosedBackticks",
121
+ "foo [comment `bar]");
122
+
123
+ // Per documentation: "To include a literal backtick character within a
124
+ // code span, you can use multiple backticks as the opening and closing
125
+ // delimiters"
126
+ MT("doubleBackticks",
127
+ "[comment ``foo ` bar``]");
128
+
129
+ // Tests based on Dingus
130
+ // http://daringfireball.net/projects/markdown/dingus
131
+ //
132
+ // Multiple backticks within an inline code block
133
+ MT("consecutiveBackticks",
134
+ "[comment `foo```bar`]");
135
+
136
+ // Multiple backticks within an inline code block with a second code block
137
+ MT("consecutiveBackticks",
138
+ "[comment `foo```bar`] hello [comment `world`]");
139
+
140
+ // Unclosed with several different groups of backticks
141
+ MT("unclosedBackticks",
142
+ "[comment ``foo ``` bar` hello]");
143
+
144
+ // Closed with several different groups of backticks
145
+ MT("closedBackticks",
146
+ "[comment ``foo ``` bar` hello``] world");
147
+
148
+ // atx headers
149
+ // http://daringfireball.net/projects/markdown/syntax#header
150
+
151
+ MT("atxH1",
152
+ "[header&header-1 # foo]");
153
+
154
+ MT("atxH2",
155
+ "[header&header-2 ## foo]");
156
+
157
+ MT("atxH3",
158
+ "[header&header-3 ### foo]");
159
+
160
+ MT("atxH4",
161
+ "[header&header-4 #### foo]");
162
+
163
+ MT("atxH5",
164
+ "[header&header-5 ##### foo]");
165
+
166
+ MT("atxH6",
167
+ "[header&header-6 ###### foo]");
168
+
169
+ // H6 - 7x '#' should still be H6, per Dingus
170
+ // http://daringfireball.net/projects/markdown/dingus
171
+ MT("atxH6NotH7",
172
+ "[header&header-6 ####### foo]");
173
+
174
+ // Inline styles should be parsed inside headers
175
+ MT("atxH1inline",
176
+ "[header&header-1 # foo ][header&header-1&em *bar*]");
177
+
178
+ // Setext headers - H1, H2
179
+ // Per documentation, "Any number of underlining =’s or -’s will work."
180
+ // http://daringfireball.net/projects/markdown/syntax#header
181
+ // Ideally, the text would be marked as `header` as well, but this is
182
+ // not really feasible at the moment. So, instead, we're testing against
183
+ // what works today, to avoid any regressions.
184
+ //
185
+ // Check if single underlining = works
186
+ MT("setextH1",
187
+ "foo",
188
+ "[header&header-1 =]");
189
+
190
+ // Check if 3+ ='s work
191
+ MT("setextH1",
192
+ "foo",
193
+ "[header&header-1 ===]");
194
+
195
+ // Check if single underlining - works
196
+ MT("setextH2",
197
+ "foo",
198
+ "[header&header-2 -]");
199
+
200
+ // Check if 3+ -'s work
201
+ MT("setextH2",
202
+ "foo",
203
+ "[header&header-2 ---]");
204
+
205
+ // Single-line blockquote with trailing space
206
+ MT("blockquoteSpace",
207
+ "[quote&quote-1 > foo]");
208
+
209
+ // Single-line blockquote
210
+ MT("blockquoteNoSpace",
211
+ "[quote&quote-1 >foo]");
212
+
213
+ // No blank line before blockquote
214
+ MT("blockquoteNoBlankLine",
215
+ "foo",
216
+ "[quote&quote-1 > bar]");
217
+
218
+ // Nested blockquote
219
+ MT("blockquoteSpace",
220
+ "[quote&quote-1 > foo]",
221
+ "[quote&quote-1 >][quote&quote-2 > foo]",
222
+ "[quote&quote-1 >][quote&quote-2 >][quote&quote-3 > foo]");
223
+
224
+ // Single-line blockquote followed by normal paragraph
225
+ MT("blockquoteThenParagraph",
226
+ "[quote&quote-1 >foo]",
227
+ "",
228
+ "bar");
229
+
230
+ // Multi-line blockquote (lazy mode)
231
+ MT("multiBlockquoteLazy",
232
+ "[quote&quote-1 >foo]",
233
+ "[quote&quote-1 bar]");
234
+
235
+ // Multi-line blockquote followed by normal paragraph (lazy mode)
236
+ MT("multiBlockquoteLazyThenParagraph",
237
+ "[quote&quote-1 >foo]",
238
+ "[quote&quote-1 bar]",
239
+ "",
240
+ "hello");
241
+
242
+ // Multi-line blockquote (non-lazy mode)
243
+ MT("multiBlockquote",
244
+ "[quote&quote-1 >foo]",
245
+ "[quote&quote-1 >bar]");
246
+
247
+ // Multi-line blockquote followed by normal paragraph (non-lazy mode)
248
+ MT("multiBlockquoteThenParagraph",
249
+ "[quote&quote-1 >foo]",
250
+ "[quote&quote-1 >bar]",
251
+ "",
252
+ "hello");
253
+
254
+ // Check list types
255
+
256
+ MT("listAsterisk",
257
+ "foo",
258
+ "bar",
259
+ "",
260
+ "[variable-2 * foo]",
261
+ "[variable-2 * bar]");
262
+
263
+ MT("listPlus",
264
+ "foo",
265
+ "bar",
266
+ "",
267
+ "[variable-2 + foo]",
268
+ "[variable-2 + bar]");
269
+
270
+ MT("listDash",
271
+ "foo",
272
+ "bar",
273
+ "",
274
+ "[variable-2 - foo]",
275
+ "[variable-2 - bar]");
276
+
277
+ MT("listNumber",
278
+ "foo",
279
+ "bar",
280
+ "",
281
+ "[variable-2 1. foo]",
282
+ "[variable-2 2. bar]");
283
+
284
+ // Lists require a preceding blank line (per Dingus)
285
+ MT("listBogus",
286
+ "foo",
287
+ "1. bar",
288
+ "2. hello");
289
+
290
+ // List after header
291
+ MT("listAfterHeader",
292
+ "[header&header-1 # foo]",
293
+ "[variable-2 - bar]");
294
+
295
+ // Formatting in lists (*)
296
+ MT("listAsteriskFormatting",
297
+ "[variable-2 * ][variable-2&em *foo*][variable-2 bar]",
298
+ "[variable-2 * ][variable-2&strong **foo**][variable-2 bar]",
299
+ "[variable-2 * ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]",
300
+ "[variable-2 * ][variable-2&comment `foo`][variable-2 bar]");
301
+
302
+ // Formatting in lists (+)
303
+ MT("listPlusFormatting",
304
+ "[variable-2 + ][variable-2&em *foo*][variable-2 bar]",
305
+ "[variable-2 + ][variable-2&strong **foo**][variable-2 bar]",
306
+ "[variable-2 + ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]",
307
+ "[variable-2 + ][variable-2&comment `foo`][variable-2 bar]");
308
+
309
+ // Formatting in lists (-)
310
+ MT("listDashFormatting",
311
+ "[variable-2 - ][variable-2&em *foo*][variable-2 bar]",
312
+ "[variable-2 - ][variable-2&strong **foo**][variable-2 bar]",
313
+ "[variable-2 - ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]",
314
+ "[variable-2 - ][variable-2&comment `foo`][variable-2 bar]");
315
+
316
+ // Formatting in lists (1.)
317
+ MT("listNumberFormatting",
318
+ "[variable-2 1. ][variable-2&em *foo*][variable-2 bar]",
319
+ "[variable-2 2. ][variable-2&strong **foo**][variable-2 bar]",
320
+ "[variable-2 3. ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]",
321
+ "[variable-2 4. ][variable-2&comment `foo`][variable-2 bar]");
322
+
323
+ // Paragraph lists
324
+ MT("listParagraph",
325
+ "[variable-2 * foo]",
326
+ "",
327
+ "[variable-2 * bar]");
328
+
329
+ // Multi-paragraph lists
330
+ //
331
+ // 4 spaces
332
+ MT("listMultiParagraph",
333
+ "[variable-2 * foo]",
334
+ "",
335
+ "[variable-2 * bar]",
336
+ "",
337
+ " [variable-2 hello]");
338
+
339
+ // 4 spaces, extra blank lines (should still be list, per Dingus)
340
+ MT("listMultiParagraphExtra",
341
+ "[variable-2 * foo]",
342
+ "",
343
+ "[variable-2 * bar]",
344
+ "",
345
+ "",
346
+ " [variable-2 hello]");
347
+
348
+ // 4 spaces, plus 1 space (should still be list, per Dingus)
349
+ MT("listMultiParagraphExtraSpace",
350
+ "[variable-2 * foo]",
351
+ "",
352
+ "[variable-2 * bar]",
353
+ "",
354
+ " [variable-2 hello]",
355
+ "",
356
+ " [variable-2 world]");
357
+
358
+ // 1 tab
359
+ MT("listTab",
360
+ "[variable-2 * foo]",
361
+ "",
362
+ "[variable-2 * bar]",
363
+ "",
364
+ "\t[variable-2 hello]");
365
+
366
+ // No indent
367
+ MT("listNoIndent",
368
+ "[variable-2 * foo]",
369
+ "",
370
+ "[variable-2 * bar]",
371
+ "",
372
+ "hello");
373
+
374
+ // Blockquote
375
+ MT("blockquote",
376
+ "[variable-2 * foo]",
377
+ "",
378
+ "[variable-2 * bar]",
379
+ "",
380
+ " [variable-2&quote&quote-1 > hello]");
381
+
382
+ // Code block
383
+ MT("blockquoteCode",
384
+ "[variable-2 * foo]",
385
+ "",
386
+ "[variable-2 * bar]",
387
+ "",
388
+ " [comment > hello]",
389
+ "",
390
+ " [variable-2 world]");
391
+
392
+ // Code block followed by text
393
+ MT("blockquoteCodeText",
394
+ "[variable-2 * foo]",
395
+ "",
396
+ " [variable-2 bar]",
397
+ "",
398
+ " [comment hello]",
399
+ "",
400
+ " [variable-2 world]");
401
+
402
+ // Nested list
403
+
404
+ MT("listAsteriskNested",
405
+ "[variable-2 * foo]",
406
+ "",
407
+ " [variable-3 * bar]");
408
+
409
+ MT("listPlusNested",
410
+ "[variable-2 + foo]",
411
+ "",
412
+ " [variable-3 + bar]");
413
+
414
+ MT("listDashNested",
415
+ "[variable-2 - foo]",
416
+ "",
417
+ " [variable-3 - bar]");
418
+
419
+ MT("listNumberNested",
420
+ "[variable-2 1. foo]",
421
+ "",
422
+ " [variable-3 2. bar]");
423
+
424
+ MT("listMixed",
425
+ "[variable-2 * foo]",
426
+ "",
427
+ " [variable-3 + bar]",
428
+ "",
429
+ " [keyword - hello]",
430
+ "",
431
+ " [variable-2 1. world]");
432
+
433
+ MT("listBlockquote",
434
+ "[variable-2 * foo]",
435
+ "",
436
+ " [variable-3 + bar]",
437
+ "",
438
+ " [quote&quote-1&variable-3 > hello]");
439
+
440
+ MT("listCode",
441
+ "[variable-2 * foo]",
442
+ "",
443
+ " [variable-3 + bar]",
444
+ "",
445
+ " [comment hello]");
446
+
447
+ // Code with internal indentation
448
+ MT("listCodeIndentation",
449
+ "[variable-2 * foo]",
450
+ "",
451
+ " [comment bar]",
452
+ " [comment hello]",
453
+ " [comment world]",
454
+ " [comment foo]",
455
+ " [variable-2 bar]");
456
+
457
+ // List nesting edge cases
458
+ MT("listNested",
459
+ "[variable-2 * foo]",
460
+ "",
461
+ " [variable-3 * bar]",
462
+ "",
463
+ " [variable-2 hello]"
464
+ );
465
+ MT("listNested",
466
+ "[variable-2 * foo]",
467
+ "",
468
+ " [variable-3 * bar]",
469
+ "",
470
+ " [variable-3 * foo]"
471
+ );
472
+
473
+ // Code followed by text
474
+ MT("listCodeText",
475
+ "[variable-2 * foo]",
476
+ "",
477
+ " [comment bar]",
478
+ "",
479
+ "hello");
480
+
481
+ // Following tests directly from official Markdown documentation
482
+ // http://daringfireball.net/projects/markdown/syntax#hr
483
+
484
+ MT("hrSpace",
485
+ "[hr * * *]");
486
+
487
+ MT("hr",
488
+ "[hr ***]");
489
+
490
+ MT("hrLong",
491
+ "[hr *****]");
492
+
493
+ MT("hrSpaceDash",
494
+ "[hr - - -]");
495
+
496
+ MT("hrDashLong",
497
+ "[hr ---------------------------------------]");
498
+
499
+ // Inline link with title
500
+ MT("linkTitle",
501
+ "[link [[foo]]][string (http://example.com/ \"bar\")] hello");
502
+
503
+ // Inline link without title
504
+ MT("linkNoTitle",
505
+ "[link [[foo]]][string (http://example.com/)] bar");
506
+
507
+ // Inline link with image
508
+ MT("linkImage",
509
+ "[link [[][tag ![[foo]]][string (http://example.com/)][link ]]][string (http://example.com/)] bar");
510
+
511
+ // Inline link with Em
512
+ MT("linkEm",
513
+ "[link [[][link&em *foo*][link ]]][string (http://example.com/)] bar");
514
+
515
+ // Inline link with Strong
516
+ MT("linkStrong",
517
+ "[link [[][link&strong **foo**][link ]]][string (http://example.com/)] bar");
518
+
519
+ // Inline link with EmStrong
520
+ MT("linkEmStrong",
521
+ "[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string (http://example.com/)] bar");
522
+
523
+ // Image with title
524
+ MT("imageTitle",
525
+ "[tag ![[foo]]][string (http://example.com/ \"bar\")] hello");
526
+
527
+ // Image without title
528
+ MT("imageNoTitle",
529
+ "[tag ![[foo]]][string (http://example.com/)] bar");
530
+
531
+ // Image with asterisks
532
+ MT("imageAsterisks",
533
+ "[tag ![[*foo*]]][string (http://example.com/)] bar");
534
+
535
+ // Not a link. Should be normal text due to square brackets being used
536
+ // regularly in text, especially in quoted material, and no space is allowed
537
+ // between square brackets and parentheses (per Dingus).
538
+ MT("notALink",
539
+ "[[foo]] (bar)");
540
+
541
+ // Reference-style links
542
+ MT("linkReference",
543
+ "[link [[foo]]][string [[bar]]] hello");
544
+
545
+ // Reference-style links with Em
546
+ MT("linkReferenceEm",
547
+ "[link [[][link&em *foo*][link ]]][string [[bar]]] hello");
548
+
549
+ // Reference-style links with Strong
550
+ MT("linkReferenceStrong",
551
+ "[link [[][link&strong **foo**][link ]]][string [[bar]]] hello");
552
+
553
+ // Reference-style links with EmStrong
554
+ MT("linkReferenceEmStrong",
555
+ "[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string [[bar]]] hello");
556
+
557
+ // Reference-style links with optional space separator (per docuentation)
558
+ // "You can optionally use a space to separate the sets of brackets"
559
+ MT("linkReferenceSpace",
560
+ "[link [[foo]]] [string [[bar]]] hello");
561
+
562
+ // Should only allow a single space ("...use *a* space...")
563
+ MT("linkReferenceDoubleSpace",
564
+ "[[foo]] [[bar]] hello");
565
+
566
+ // Reference-style links with implicit link name
567
+ MT("linkImplicit",
568
+ "[link [[foo]]][string [[]]] hello");
569
+
570
+ // @todo It would be nice if, at some point, the document was actually
571
+ // checked to see if the referenced link exists
572
+
573
+ // Link label, for reference-style links (taken from documentation)
574
+
575
+ MT("labelNoTitle",
576
+ "[link [[foo]]:] [string http://example.com/]");
577
+
578
+ MT("labelIndented",
579
+ " [link [[foo]]:] [string http://example.com/]");
580
+
581
+ MT("labelSpaceTitle",
582
+ "[link [[foo bar]]:] [string http://example.com/ \"hello\"]");
583
+
584
+ MT("labelDoubleTitle",
585
+ "[link [[foo bar]]:] [string http://example.com/ \"hello\"] \"world\"");
586
+
587
+ MT("labelTitleDoubleQuotes",
588
+ "[link [[foo]]:] [string http://example.com/ \"bar\"]");
589
+
590
+ MT("labelTitleSingleQuotes",
591
+ "[link [[foo]]:] [string http://example.com/ 'bar']");
592
+
593
+ MT("labelTitleParenthese",
594
+ "[link [[foo]]:] [string http://example.com/ (bar)]");
595
+
596
+ MT("labelTitleInvalid",
597
+ "[link [[foo]]:] [string http://example.com/] bar");
598
+
599
+ MT("labelLinkAngleBrackets",
600
+ "[link [[foo]]:] [string <http://example.com/> \"bar\"]");
601
+
602
+ MT("labelTitleNextDoubleQuotes",
603
+ "[link [[foo]]:] [string http://example.com/]",
604
+ "[string \"bar\"] hello");
605
+
606
+ MT("labelTitleNextSingleQuotes",
607
+ "[link [[foo]]:] [string http://example.com/]",
608
+ "[string 'bar'] hello");
609
+
610
+ MT("labelTitleNextParenthese",
611
+ "[link [[foo]]:] [string http://example.com/]",
612
+ "[string (bar)] hello");
613
+
614
+ MT("labelTitleNextMixed",
615
+ "[link [[foo]]:] [string http://example.com/]",
616
+ "(bar\" hello");
617
+
618
+ MT("linkWeb",
619
+ "[link <http://example.com/>] foo");
620
+
621
+ MT("linkWebDouble",
622
+ "[link <http://example.com/>] foo [link <http://example.com/>]");
623
+
624
+ MT("linkEmail",
625
+ "[link <user@example.com>] foo");
626
+
627
+ MT("linkEmailDouble",
628
+ "[link <user@example.com>] foo [link <user@example.com>]");
629
+
630
+ MT("emAsterisk",
631
+ "[em *foo*] bar");
632
+
633
+ MT("emUnderscore",
634
+ "[em _foo_] bar");
635
+
636
+ MT("emInWordAsterisk",
637
+ "foo[em *bar*]hello");
638
+
639
+ MT("emInWordUnderscore",
640
+ "foo[em _bar_]hello");
641
+
642
+ // Per documentation: "...surround an * or _ with spaces, it’ll be
643
+ // treated as a literal asterisk or underscore."
644
+
645
+ MT("emEscapedBySpaceIn",
646
+ "foo [em _bar _ hello_] world");
647
+
648
+ MT("emEscapedBySpaceOut",
649
+ "foo _ bar[em _hello_]world");
650
+
651
+ MT("emEscapedByNewline",
652
+ "foo",
653
+ "_ bar[em _hello_]world");
654
+
655
+ // Unclosed emphasis characters
656
+ // Instead of simply marking as EM / STRONG, it would be nice to have an
657
+ // incomplete flag for EM and STRONG, that is styled slightly different.
658
+ MT("emIncompleteAsterisk",
659
+ "foo [em *bar]");
660
+
661
+ MT("emIncompleteUnderscore",
662
+ "foo [em _bar]");
663
+
664
+ MT("strongAsterisk",
665
+ "[strong **foo**] bar");
666
+
667
+ MT("strongUnderscore",
668
+ "[strong __foo__] bar");
669
+
670
+ MT("emStrongAsterisk",
671
+ "[em *foo][em&strong **bar*][strong hello**] world");
672
+
673
+ MT("emStrongUnderscore",
674
+ "[em _foo][em&strong __bar_][strong hello__] world");
675
+
676
+ // "...same character must be used to open and close an emphasis span.""
677
+ MT("emStrongMixed",
678
+ "[em _foo][em&strong **bar*hello__ world]");
679
+
680
+ MT("emStrongMixed",
681
+ "[em *foo][em&strong __bar_hello** world]");
682
+
683
+ // These characters should be escaped:
684
+ // \ backslash
685
+ // ` backtick
686
+ // * asterisk
687
+ // _ underscore
688
+ // {} curly braces
689
+ // [] square brackets
690
+ // () parentheses
691
+ // # hash mark
692
+ // + plus sign
693
+ // - minus sign (hyphen)
694
+ // . dot
695
+ // ! exclamation mark
696
+
697
+ MT("escapeBacktick",
698
+ "foo \\`bar\\`");
699
+
700
+ MT("doubleEscapeBacktick",
701
+ "foo \\\\[comment `bar\\\\`]");
702
+
703
+ MT("escapeAsterisk",
704
+ "foo \\*bar\\*");
705
+
706
+ MT("doubleEscapeAsterisk",
707
+ "foo \\\\[em *bar\\\\*]");
708
+
709
+ MT("escapeUnderscore",
710
+ "foo \\_bar\\_");
711
+
712
+ MT("doubleEscapeUnderscore",
713
+ "foo \\\\[em _bar\\\\_]");
714
+
715
+ MT("escapeHash",
716
+ "\\# foo");
717
+
718
+ MT("doubleEscapeHash",
719
+ "\\\\# foo");
720
+
721
+ MT("escapeNewline",
722
+ "\\",
723
+ "[em *foo*]");
724
+
725
+
726
+ // Tests to make sure GFM-specific things aren't getting through
727
+
728
+ MT("taskList",
729
+ "[variable-2 * [ ]] bar]");
730
+
731
+ MT("fencedCodeBlocks",
732
+ "[comment ```]",
733
+ "foo",
734
+ "[comment ```]");
735
+
736
+ // Tests that require XML mode
737
+
738
+ MT("xmlMode",
739
+ "[tag&bracket <][tag div][tag&bracket >]",
740
+ "*foo*",
741
+ "[tag&bracket <][tag http://github.com][tag&bracket />]",
742
+ "[tag&bracket </][tag div][tag&bracket >]",
743
+ "[link <http://github.com/>]");
744
+
745
+ MT("xmlModeWithMarkdownInside",
746
+ "[tag&bracket <][tag div] [attribute markdown]=[string 1][tag&bracket >]",
747
+ "[em *foo*]",
748
+ "[link <http://github.com/>]",
749
+ "[tag </div>]",
750
+ "[link <http://github.com/>]",
751
+ "[tag&bracket <][tag div][tag&bracket >]",
752
+ "[tag&bracket </][tag div][tag&bracket >]");
753
+
754
+ })();