kramdown 1.16.2 → 1.17.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of kramdown might be problematic. Click here for more details.

Files changed (42) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTERS +7 -2
  3. data/Rakefile +40 -7
  4. data/VERSION +1 -1
  5. data/bin/kramdown +20 -6
  6. data/doc/_design.scss +1 -1
  7. data/doc/default.template +6 -6
  8. data/doc/documentation.template +5 -4
  9. data/doc/index.page +2 -2
  10. data/doc/metainfo +10 -0
  11. data/doc/news.feed +1 -1
  12. data/doc/sidebar.template +2 -5
  13. data/lib/kramdown/converter.rb +1 -1
  14. data/lib/kramdown/converter/latex.rb +2 -2
  15. data/lib/kramdown/converter/math_engine/katex.rb +35 -0
  16. data/lib/kramdown/parser/gfm.rb +5 -11
  17. data/lib/kramdown/parser/kramdown/codeblock.rb +1 -1
  18. data/lib/kramdown/parser/kramdown/header.rb +31 -21
  19. data/lib/kramdown/parser/kramdown/link.rb +4 -1
  20. data/lib/kramdown/parser/kramdown/table.rb +2 -1
  21. data/lib/kramdown/utils.rb +2 -15
  22. data/lib/kramdown/utils/entities.rb +2 -2
  23. data/lib/kramdown/version.rb +1 -1
  24. data/man/man1/kramdown.1 +7 -1
  25. data/test/test_files.rb +30 -13
  26. data/test/test_location.rb +9 -0
  27. data/test/testcases/block/14_table/empty_tag_in_cell.html +8 -0
  28. data/test/testcases/block/14_table/empty_tag_in_cell.options +1 -0
  29. data/test/testcases/block/14_table/empty_tag_in_cell.text +1 -0
  30. data/test/testcases/block/15_math/katex.html.19 +2 -0
  31. data/test/testcases/block/15_math/katex.options +1 -0
  32. data/test/testcases/block/15_math/katex.text +2 -0
  33. data/test/testcases/block/15_math/mathjaxnode.html.19 +1 -1
  34. data/test/testcases/block/15_math/mathjaxnode_notexhints.html.19 +1 -1
  35. data/test/testcases/block/15_math/mathjaxnode_semantics.html.19 +1 -1
  36. data/test/testcases/block/15_math/sskatex.html.19 +1 -1
  37. data/test/testcases/span/math/katex.html.19 +1 -0
  38. data/test/testcases/span/math/katex.options +1 -0
  39. data/test/testcases/span/math/katex.text +1 -0
  40. data/test/testcases/span/math/mathjaxnode.html.19 +1 -1
  41. data/test/testcases/span/math/sskatex.html.19 +1 -1
  42. metadata +29 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 73b9186869bd9f494b0f909793e11fd6e9ed1a80
4
- data.tar.gz: 92807577126e096ecb4820683f32a28375c98076
2
+ SHA256:
3
+ metadata.gz: d55901c3c77f65f0c910d6a500fb7aad1f4f1d0f7ac06c3bdb9b6dde621fb4af
4
+ data.tar.gz: 510414df93e71258d08b88e53070a1290800e98a75c821bf673a154a12e10fa9
5
5
  SHA512:
6
- metadata.gz: 89517739509da5e665b01476a769443048b575c2b1e0dd925a998c311278ff2ab08215e1af8f4d7f5d1f27a5cf83c1ac9c43bc8ec78a4fbe0ca1b419a48e112f
7
- data.tar.gz: f68909322664c37c841f9559efd75e3f610c9a7e08a8e3468875231665959508054c2eabfcbda300edc5ef68907bb96c75add777754d868ffa5e0b33c8a795a6
6
+ metadata.gz: 90b87fa1dc1dd8a9b1eb683b69f2b2dfe05837d16732b20dc73e71ad4b77baa28be7e0a3980d82d67b61e104ab33311e49bc9e305e8aa849461db022697d3d0f
7
+ data.tar.gz: 5eab1933ed1bd0c5615291e52e915aad27da34347b3f1a25891417fd6c3f3ec2676c26ccee68b47fc0302f05b683641595a4b77c3ca0be9a7d1d08886c794b00
@@ -1,9 +1,11 @@
1
1
  Count Name
2
2
  ======= ====
3
- 876 Thomas Leitner <t_leitner@gmx.at>
3
+ 887 Thomas Leitner <t_leitner@gmx.at>
4
+ 7 Christian Cornelssen <ccorn@1tein.de>
4
5
  6 Gioele Barabucci <gioele@svario.it>
5
6
  4 Ted Pak <powerpak006@gmail.com>
6
7
  4 Shuanglei Tao <tsl0922@gmail.com>
8
+ 4 Gleb Mazovetskiy <glex.spb@gmail.com>
7
9
  4 Arne Brasseur <arne@arnebrasseur.net>
8
10
  3 Henning Perl <perl@fast-sicher.de>
9
11
  3 gettalong <t_leitner@gmx.at>
@@ -15,7 +17,7 @@
15
17
  2 Nathanael Jones <nathanael.jones@gmail.com>
16
18
  2 Max Meyer <dev@fedux.org>
17
19
  2 Jo Hund <jhund@clearcove.ca>
18
- 2 Christian Cornelssen <ccorn@1tein.de>
20
+ 2 Dan Allen <dan.j.allen@gmail.com>
19
21
  2 Bran <m.versum@gmail.com>
20
22
  1 winniehell <git@winniehell.de>
21
23
  1 William <suttonwilliamd@gmail.com>
@@ -34,6 +36,7 @@
34
36
  1 Postmodern <postmodern.mod3@gmail.com>
35
37
  1 Pete Michaud <michaudp@gmail.com>
36
38
  1 myqlarson <myqlarson@gmail.com>
39
+ 1 milo.simpson <milo.simpson@bazaarvoice.com>
37
40
  1 Michal Till <michal.till@gmail.com>
38
41
  1 Matt Hickford <matt.hickford@gmail.com>
39
42
  1 Martyn Chamberlin <martyn@perfectioncoding.com>
@@ -54,6 +57,8 @@
54
57
  1 Damien Pollet <damien.pollet@gmail.com>
55
58
  1 Christopher Jefferson <caj21@st-andrews.ac.uk>
56
59
  1 Cédric Boutillier <cedric.boutillier@gmail.com>
60
+ 1 Ashwin Maroli <ashmaroli@gmail.com>
61
+ 1 Ashe Connor <ashe@kivikakk.ee>
57
62
  1 Andrew <andrew.dale.wylie@gmail.com>
58
63
  1 Alpha Chen <alpha.chen@gmail.com>
59
64
  1 Alex Tomlins <alex.tomlins@digital.cabinet-office.gov.uk>
data/Rakefile CHANGED
@@ -186,7 +186,8 @@ EOF
186
186
  s.add_development_dependency 'ritex', '~> 1.0'
187
187
  s.add_development_dependency 'itextomml', '~> 1.5'
188
188
  s.add_development_dependency 'execjs', '~> 2.7'
189
- s.add_development_dependency 'sskatex', '>= 0.9.23'
189
+ s.add_development_dependency 'sskatex', '>= 0.9.37'
190
+ s.add_development_dependency 'katex', '~> 0.4.3'
190
191
 
191
192
  #### Documentation
192
193
 
@@ -268,6 +269,29 @@ EOF
268
269
  puts "Look through the above mentioned files and correct all problems" if inserted
269
270
  end
270
271
 
272
+ desc "Check for MathjaxNode availability"
273
+ task :test_mathjaxnode_deps do
274
+ html = %x{echo '$$a$$' | \
275
+ #{RbConfig.ruby} -Ilib bin/kramdown --no-config-file --math-engine mathjaxnode}
276
+ raise (<<MJC) unless $?.success?
277
+ Some requirement by the mathjax-node-cli package has not been satisfied.
278
+ Cf. the above error messages.
279
+ MJC
280
+ raise (<<MJN) unless %r{\A<math xmlns="http://www.w3.org/\d+/Math/MathML".*</math>\Z}m === html
281
+ The MathjaxNode engine is not available. Try "npm install mathjax-node-cli".
282
+ MJN
283
+ puts "MathjaxNode is available, and its default configuration works."
284
+ end
285
+
286
+ desc "Update kramdown MathjaxNode test reference outputs"
287
+ task update_mathjaxnode_tests: [:test_mathjaxnode_deps] do
288
+ # Not framed in terms of rake file tasks to prevent accidental overwrites.
289
+ Dir['test/testcases/**/mathjaxnode*.text'].each do |f|
290
+ stem = f[0..-6] # Remove .text
291
+ ruby "-Ilib bin/kramdown --config-file #{stem}.options #{f} >#{stem}.html.19"
292
+ end
293
+ end
294
+
271
295
  desc "Check for SsKaTeX availability"
272
296
  task :test_sskatex_deps do
273
297
  katexjs = 'katex/katex.min.js'
@@ -278,7 +302,8 @@ and extract at least '#{katexjs}'.
278
302
  Alternatively, if you have a copy of KaTeX unpacked somewhere else,
279
303
  you can create a symbolic link 'katex' pointing to that KaTeX directory.
280
304
  TKJ
281
- html = %x{echo '$$a$$' | #{RbConfig.ruby} -Ilib bin/kramdown --math-engine sskatex}
305
+ html = %x{echo '$$a$$' | \
306
+ #{RbConfig.ruby} -Ilib bin/kramdown --no-config-file --math-engine sskatex}
282
307
  raise (<<KTC) unless $?.success?
283
308
  Some requirement by SsKaTeX or the employed JS engine has not been satisfied.
284
309
  Cf. the above error messages.
@@ -293,12 +318,20 @@ XJS
293
318
  end
294
319
 
295
320
  desc "Update kramdown SsKaTeX test reference outputs"
296
- task update_katex_tests: [:test_sskatex_deps] do
321
+ task update_sskatex_tests: [:test_sskatex_deps] do
322
+ # Not framed in terms of rake file tasks to prevent accidental overwrites.
323
+ Dir['test/testcases/**/sskatex*.text'].each do |f|
324
+ stem = f[0..-6] # Remove .text
325
+ ruby "-Ilib bin/kramdown --config-file #{stem}.options #{f} >#{stem}.html.19"
326
+ end
327
+ end
328
+
329
+ desc "Update kramdown KaTeX test reference outputs"
330
+ task :update_katex_tests do
297
331
  # Not framed in terms of rake file tasks to prevent accidental overwrites.
298
- stems = ['test/testcases/block/15_math/sskatex',
299
- 'test/testcases/span/math/sskatex']
300
- stems.each do |stem|
301
- ruby "-Ilib bin/kramdown --math-engine sskatex #{stem}.text >#{stem}.html.19"
332
+ Dir['test/testcases/**/katex*.text'].each do |f|
333
+ stem = f[0..-6] # Remove .text
334
+ ruby "-Ilib bin/kramdown --config-file #{stem}.options #{f} >#{stem}.html.19"
302
335
  end
303
336
  end
304
337
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.16.2
1
+ 1.17.0
@@ -27,11 +27,7 @@ begin
27
27
  rescue
28
28
  end
29
29
 
30
- options = if config_file && File.exist?(config_file)
31
- YAML.safe_load(File.read(config_file), [Symbol])
32
- else
33
- {}
34
- end
30
+ options = {}
35
31
  format = ['html']
36
32
 
37
33
  OptionParser.new do |opts|
@@ -46,7 +42,14 @@ OptionParser.new do |opts|
46
42
  "html, GFM or markdown") {|v| options[:input] = v}
47
43
  opts.on("-o", "--output ARG", Array, "Specify one or more output formats separated by commas: " \
48
44
  "html (default),", "kramdown, latex, pdf, man or remove_html_tags") {|v| format = v}
49
-
45
+ opts.separator ""
46
+ opts.on("--no-config-file", "Do not read any configuration file. Default behavior is to check " \
47
+ "for a", "configuration file and read it if it exists.") {config_file = nil}
48
+ opts.on("--config-file FILE", "Specify the name of a configuration file with kramdown options " \
49
+ "in YAML", "format, e.g. \"auto_id_prefix: ARG\" instead of \"--auto-id-prefix ARG\"",
50
+ "and \"auto_ids: false\" instead of \"--no-auto-ids\".",
51
+ "Default: #{config_file}") {|v| config_file = v}
52
+ opts.separator ""
50
53
  opts.on("-v", "--version", "Show the version of kramdown") do
51
54
  puts Kramdown::VERSION
52
55
  exit
@@ -79,6 +82,17 @@ OptionParser.new do |opts|
79
82
  end.parse!
80
83
 
81
84
  begin
85
+ if config_file && File.exist?(config_file)
86
+ config_file_options = YAML.safe_load(File.read(config_file), [Symbol])
87
+ case config_file_options
88
+ when nil # empty configuration file except perhaps YAML header and comments
89
+ # Nothing to do
90
+ when Hash
91
+ options = config_file_options.merge(options)
92
+ else
93
+ raise Kramdown::Error, "No YAML map in configuration file \"#{config_file}\""
94
+ end
95
+ end
82
96
  doc = Kramdown::Document.new(ARGF.read, options)
83
97
  result = ''
84
98
  format.each {|f| result = doc.send("to_#{f}")}
@@ -163,7 +163,7 @@ body {
163
163
  }
164
164
 
165
165
  a:hover, a:link {
166
- color: $link-color / 2;
166
+ color: scale-color($link-color, $lightness: -50%);
167
167
  }
168
168
  }
169
169
 
@@ -8,7 +8,6 @@
8
8
  <meta name="keywords" content="ruby, kramdown, markdown, text markup" />
9
9
  <link href="{relocatable: default.css}" type="text/css" rel="stylesheet" media="screen,projection" />
10
10
  <link href="{relocatable: news.atom}" type="application/atom+xml" rel="alternate" />
11
- <script src="//kramdown.gettalong.org/MathJax/MathJax.js?config=default.js" type="text/javascript"></script>
12
11
  <title>{title:} | kramdown</title>
13
12
  </head>
14
13
  <body>
@@ -44,18 +43,19 @@
44
43
 
45
44
  <footer>
46
45
  <div class="float-left">Copyright © 2009-2016 Thomas Leitner</div>
47
- <div class="float-right">Generated by <a href="http://webgen.gettalong.org">webgen</a></div>
46
+ <div class="float-right">Generated by <a href="https://webgen.gettalong.org">webgen</a></div>
48
47
  </footer>
49
48
 
49
+ <script src="//static.gettalong.org/MathJax/MathJax.js?config=default.js" type="text/javascript"></script>
50
50
  <!-- Start of StatCounter Code for Default Guide -->
51
51
  <script type="text/javascript">
52
52
  var sc_project=4267845;
53
53
  var sc_invisible=1;
54
54
  var sc_security="41321455";
55
- var scJsHost = (("https:" == document.location.protocol) ? "https://secure." : "http://www.");
56
- document.write("<sc"+"ript type='text/javascript' src='" + scJsHost + "statcounter.com/counter/counter.js'></" + "script>");
57
- </script>
58
- <noscript><div class="statcounter"><a title="website statistics" href="http://statcounter.com/" target="_blank"><img class="statcounter" src="//c.statcounter.com/4267845/0/41321455/1/" alt="website statistics" /></a></div></noscript>
55
+ var sc_client_storage="disabled";
56
+ </script>
57
+ <script type="text/javascript" src="https://www.statcounter.com/counter/counter.js" async="async"></script>
58
+ <noscript><div class="statcounter"><a title="website statistics" href="http://statcounter.com/" target="_blank"><img class="statcounter" src="//c.statcounter.com/4267845/0/41321455/1/" alt="website statistics" /></a></div></noscript>
59
59
  <!-- End of StatCounter Code for Default Guide -->
60
60
 
61
61
  </body>
@@ -7,8 +7,8 @@
7
7
 
8
8
  * Parsers
9
9
  * [kramdown](parser/kramdown.html)
10
- * [Markdown](parser/markdown.html)
11
10
  * [GFM](parser/gfm.html)
11
+ * [Markdown](parser/markdown.html)
12
12
  * [HTML](parser/html.html)
13
13
  * Converters
14
14
  * [HTML](converter/html.html)
@@ -17,14 +17,15 @@
17
17
  * [kramdown](converter/kramdown.html)
18
18
  * [RemoveHtmlTags](converter/remove_html_tags.html)
19
19
  * Syntax Highlighters
20
- * [Coderay](syntax_highlighter/coderay.html)
21
20
  * [Rouge](syntax_highlighter/rouge.html)
21
+ * [Coderay](syntax_highlighter/coderay.html)
22
22
  * Math Engines
23
23
  * [MathJax](math_engine/mathjax.html)
24
+ * [KaTeX](math_engine/katex.html)
25
+ * [SsKaTeX](math_engine/sskatex.html)
26
+ * [Mathjax-Node](math_engine/mathjaxnode.html)
24
27
  * [Ritex](math_engine/ritex.html)
25
28
  * [itex2MML](math_engine/itex2mml.html)
26
- * [Mathjax-Node](math_engine/mathjaxnode.html)
27
- * [SsKaTeX](math_engine/sskatex.html)
28
29
  * [Configuration Options](options.html)
29
30
  * [Tests](tests.html)
30
31
 
@@ -97,8 +97,8 @@ extensions that have been made popular by the [PHP Markdown Extra] package and [
97
97
  It is probably the fastest pure-Ruby Markdown converter available (September 2014), being about 3x
98
98
  faster than [Maruku] and about 4.5x faster than [BlueFeather].
99
99
 
100
- Version **1.16.2**{:itemprop="softwareVersion"} released on
101
- **2017-11-29**{:itemprop="datePublished"}, [more news](news.html)
100
+ Version **1.17.0**{:itemprop="softwareVersion"} released on
101
+ **2018-05-31**{:itemprop="datePublished"}, [more news](news.html)
102
102
  {: style="text-align: center; font-size: 80%"}
103
103
 
104
104
  </div>
@@ -1,3 +1,13 @@
1
+ --- paths
2
+ [/**/*.js, /**/*.css]:
3
+ modified_at_in_dest_path: true
4
+
5
+ /**/*.scss:
6
+ modified_at_in_dest_path: true
7
+
1
8
  --- alcn
2
9
  [converter/*.html, parser/*.html, documentation.en.html, options.en.html, tests.en.html]:
3
10
  template: ../documentation.template
11
+
12
+ /**/*.css:
13
+ pipeline: scss,cssminify
@@ -2,7 +2,7 @@
2
2
  title: kramdown News
3
3
  description: kramdown - a fast, pure Ruby Markdown-superset converter
4
4
  author: Thomas Leitner
5
- author_url: http://kramdown.gettalong.org
5
+ author_url: https://kramdown.gettalong.org
6
6
  entries: {alcn: news/*.html, sort: sort_info, reverse: true, limit: 10}
7
7
  versions:
8
8
  atom:
@@ -1,7 +1,7 @@
1
1
  <h2>Support kramdown</h2>
2
2
 
3
3
  <p>If you like kramdown and would like to support it, you are welcome to make a small
4
- donation (Patreon, PayPal or Pledgie) -- it will surely be appreciated! Thanks!</p>
4
+ donation (Patreon or PayPal) -- it will surely be appreciated! Thanks!</p>
5
5
 
6
6
  <div style="text-align: center">
7
7
 
@@ -10,12 +10,9 @@ donation (Patreon, PayPal or Pledgie) -- it will surely be appreciated! Thanks!<
10
10
  <form style="margin-top: 15px" action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
11
11
  <input type="hidden" name="cmd" value="_s-xclick">
12
12
  <input type="hidden" name="hosted_button_id" value="99HUWKWPMUHWG">
13
- <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
14
- <img alt="" border="0" src="https://www.paypalobjects.com/de_DE/i/scr/pixel.gif" width="1" height="1">
13
+ <input type="image" src="//static.gettalong.org/images/paypal_small.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
15
14
  </form>
16
15
 
17
- <a href='https://pledgie.com/campaigns/16657'><img alt='Click here to lend your support to: kramdown and make a donation at pledgie.com !' src='https://pledgie.com/campaigns/16657.png?skin_name=chrome' border='0' ></a>
18
-
19
16
  </div>
20
17
 
21
18
  <h2>Sponsors</h2>
@@ -50,7 +50,7 @@ module Kramdown
50
50
 
51
51
  configurable(:math_engine)
52
52
 
53
- ['Mathjax', "MathjaxNode", "SsKaTeX", "Ritex", "Itex2MML"].each do |klass_name|
53
+ ["Mathjax", "MathjaxNode", "Katex", "SsKaTeX", "Ritex", "Itex2MML"].each do |klass_name|
54
54
  kn_down = klass_name.downcase.intern
55
55
  add_math_engine(kn_down) do |converter, el, opts|
56
56
  require "kramdown/converter/math_engine/#{kn_down}"
@@ -355,8 +355,8 @@ module Kramdown
355
355
  8736 => ['$\angle$'],
356
356
  8743 => ['$\wedge$'],
357
357
  8744 => ['$\vee$'],
358
- 8745 => ['$\cup$'],
359
- 8746 => ['$\cap$'],
358
+ 8745 => ['$\cap$'],
359
+ 8746 => ['$\cup$'],
360
360
  8747 => ['$\int$'],
361
361
  8756 => ['$\therefore$', 'amssymb'],
362
362
  8764 => ['$\sim$'],
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2018 Gleb Mazovetskiy <glex.spb@gmail.com>
5
+ #
6
+ # This file is part of kramdown which is licensed under the MIT.
7
+ #++
8
+
9
+ module Kramdown::Converter::MathEngine
10
+ # Uses the KaTeX gem for converting math formulas to KaTeX HTML.
11
+ module Katex
12
+ AVAILABLE = begin
13
+ require 'katex'
14
+ true
15
+ rescue LoadError
16
+ false
17
+ end
18
+
19
+ def self.call(converter, el, opts)
20
+ display_mode = el.options[:category] == :block
21
+ result = ::Katex.render(
22
+ el.value,
23
+ display_mode: display_mode,
24
+ throw_on_error: false,
25
+ **converter.options[:math_engine_opts]
26
+ )
27
+ attr = el.attr.dup
28
+ attr.delete('xmlns')
29
+ attr.delete('display')
30
+ result.insert(result =~ /[[:space:]>]/, converter.html_attributes(attr))
31
+ result = "#{' ' * opts[:indent]}#{result}\n" if display_mode
32
+ result
33
+ end
34
+ end
35
+ end
@@ -101,7 +101,7 @@ module Kramdown
101
101
  item.options[:raw_text] = raw_text
102
102
  end
103
103
 
104
- NON_WORD_RE = (RUBY_VERSION > "1.9" ? /[^\p{Word}\- \t]/ : /[^\w\- \t]/)
104
+ NON_WORD_RE = /[^\p{Word}\- \t]/
105
105
 
106
106
  def generate_gfm_header_id(text)
107
107
  result = text.downcase
@@ -112,22 +112,16 @@ module Kramdown
112
112
  @options[:auto_id_prefix] + result
113
113
  end
114
114
 
115
- ATX_HEADER_START = /^\#{1,6}\s/
115
+ ATX_HEADER_START = /^(?<level>\#{1,6})[\t ]+(?<contents>.*)\n/
116
116
  define_parser(:atx_header_gfm, ATX_HEADER_START, nil, 'parse_atx_header')
117
117
  define_parser(:atx_header_gfm_quirk, ATX_HEADER_START)
118
118
 
119
119
  # Copied from kramdown/parser/kramdown/header.rb, removed the first line
120
120
  def parse_atx_header_gfm_quirk
121
- start_line_number = @src.current_line_number
122
- @src.check(ATX_HEADER_MATCH)
123
- level, text, id = @src[1], @src[2].to_s.strip, @src[3]
121
+ text, id = parse_header_contents
122
+ text.sub!(/[\t ]#+\z/, '') && text.rstrip!
124
123
  return false if text.empty?
125
-
126
- @src.pos += @src.matched_size
127
- el = new_block_el(:header, nil, nil, :level => level.length, :raw_text => text, :location => start_line_number)
128
- add_text(text, el)
129
- el.attr['id'] = id if id
130
- @tree.children << el
124
+ add_header(@src["level"].length, text, id)
131
125
  true
132
126
  end
133
127
 
@@ -39,7 +39,7 @@ module Kramdown
39
39
  if @src.check(self.class::FENCED_CODEBLOCK_MATCH)
40
40
  start_line_number = @src.current_line_number
41
41
  @src.pos += @src.matched_size
42
- el = new_block_el(:codeblock, @src[5], nil, :location => start_line_number)
42
+ el = new_block_el(:codeblock, @src[5], nil, :location => start_line_number, :fenced => true)
43
43
  lang = @src[3].to_s.strip
44
44
  unless lang.empty?
45
45
  el.options[:lang] = lang
@@ -13,47 +13,57 @@ module Kramdown
13
13
  module Parser
14
14
  class Kramdown
15
15
 
16
- HEADER_ID=/(?:[ \t]+\{#([A-Za-z][\w:-]*)\})?/
17
- SETEXT_HEADER_START = /^(#{OPT_SPACE}[^ \t].*?)#{HEADER_ID}[ \t]*?\n(-|=)+\s*?\n/
16
+ SETEXT_HEADER_START = /^#{OPT_SPACE}(?<contents>[^ \t].*)\n(?<level>[-=])[-=]*[ \t\r\f\v]*\n/
18
17
 
19
18
  # Parse the Setext header at the current location.
20
19
  def parse_setext_header
21
20
  return false if !after_block_boundary?
22
-
23
- start_line_number = @src.current_line_number
24
- @src.pos += @src.matched_size
25
- text, id, level = @src[1], @src[2], @src[3]
26
- text.strip!
27
- el = new_block_el(:header, nil, nil, :level => (level == '-' ? 2 : 1), :raw_text => text, :location => start_line_number)
28
- add_text(text, el)
29
- el.attr['id'] = id if id
30
- @tree.children << el
21
+ text, id = parse_header_contents
22
+ return false if text.empty?
23
+ add_header(@src["level"] == '-' ? 2 : 1, text, id)
31
24
  true
32
25
  end
33
26
  define_parser(:setext_header, SETEXT_HEADER_START)
34
27
 
35
28
 
36
- ATX_HEADER_START = /^\#{1,6}/
37
- ATX_HEADER_MATCH = /^(\#{1,6})(.+?(?:\\#)?)\s*?#*#{HEADER_ID}\s*?\n/
29
+ ATX_HEADER_START = /^(?<level>\#{1,6})[\t ]*(?<contents>[^ \t].*)\n/
38
30
 
39
31
  # Parse the Atx header at the current location.
40
32
  def parse_atx_header
41
33
  return false if !after_block_boundary?
42
-
43
- start_line_number = @src.current_line_number
44
- @src.check(ATX_HEADER_MATCH)
45
- level, text, id = @src[1], @src[2].to_s.strip, @src[3]
34
+ text, id = parse_header_contents
35
+ text.sub!(/[\t ]#+\z/, '') && text.rstrip!
46
36
  return false if text.empty?
37
+ add_header(@src["level"].length, text, id)
38
+ true
39
+ end
40
+ define_parser(:atx_header, ATX_HEADER_START)
41
+
42
+ protected
43
+
44
+ HEADER_ID = /[\t ]{#(?<id>[A-Za-z][\w:-]*)}\z/
45
+
46
+ # Returns header text and optional ID.
47
+ def parse_header_contents
48
+ text = @src["contents"]
49
+ text.rstrip!
50
+ id_match = HEADER_ID.match(text)
51
+ if id_match
52
+ id = id_match["id"]
53
+ text = text[0...-id_match[0].length]
54
+ text.rstrip!
55
+ end
56
+ [text, id]
57
+ end
47
58
 
59
+ def add_header(level, text, id)
60
+ start_line_number = @src.current_line_number
48
61
  @src.pos += @src.matched_size
49
- el = new_block_el(:header, nil, nil, :level => level.length, :raw_text => text, :location => start_line_number)
62
+ el = new_block_el(:header, nil, nil, :level => level, :raw_text => text, :location => start_line_number)
50
63
  add_text(text, el)
51
64
  el.attr['id'] = id if id
52
65
  @tree.children << el
53
- true
54
66
  end
55
- define_parser(:atx_header, ATX_HEADER_START)
56
-
57
67
  end
58
68
  end
59
69
  end
@@ -87,12 +87,15 @@ module Kramdown
87
87
 
88
88
  # reference style link or no link url
89
89
  if @src.scan(LINK_INLINE_ID_RE) || !@src.check(/\(/)
90
+ emit_warning = !@src[1]
90
91
  link_id = normalize_link_id(@src[1] || alt_text)
91
92
  if @link_defs.has_key?(link_id)
92
93
  add_link(el, @link_defs[link_id][0], @link_defs[link_id][1], alt_text,
93
94
  @link_defs[link_id][2] && @link_defs[link_id][2].options[:ial])
94
95
  else
95
- warning("No link definition for link ID '#{link_id}' found on line #{start_line_number}")
96
+ if emit_warning
97
+ warning("No link definition for link ID '#{link_id}' found on line #{start_line_number}")
98
+ end
96
99
  @src.revert_pos(saved_pos)
97
100
  add_text(result)
98
101
  end
@@ -122,7 +122,8 @@ module Kramdown
122
122
  # algorithm above only takes <code> elements into account!
123
123
  pipe_on_line = false
124
124
  while (c = root.children.shift)
125
- lines = c.value.split(/\n/)
125
+ next unless (lines = c.value)
126
+ lines = lines.split("\n")
126
127
  if c.type == :codespan
127
128
  if lines.size > 2 || (lines.size == 2 && !pipe_on_line)
128
129
  break
@@ -37,21 +37,8 @@ module Kramdown
37
37
  name
38
38
  end
39
39
 
40
- if RUBY_VERSION < '2.0'
41
-
42
- # Resolve the recursive constant +str+.
43
- def self.deep_const_get(str)
44
- names = str.split(/::/)
45
- names.shift if names.first.empty?
46
- names.inject(::Object) {|mod, s| mod.const_get(s)}
47
- end
48
-
49
- else
50
-
51
- def self.deep_const_get(str)
52
- ::Object.const_get(str)
53
- end
54
-
40
+ def self.deep_const_get(str)
41
+ ::Object.const_get(str)
55
42
  end
56
43
 
57
44
  end
@@ -125,8 +125,8 @@ module Kramdown
125
125
  [8736, 'ang'],
126
126
  [8743, 'and'],
127
127
  [8744, 'or'],
128
- [8745, 'cup'],
129
- [8746, 'cap'],
128
+ [8745, 'cap'],
129
+ [8746, 'cup'],
130
130
  [8747, 'int'],
131
131
  [8756, 'there4'],
132
132
  [8764, 'sim'],
@@ -10,6 +10,6 @@
10
10
  module Kramdown
11
11
 
12
12
  # The kramdown version.
13
- VERSION = '1.16.2'
13
+ VERSION = '1.17.0'
14
14
 
15
15
  end
@@ -11,7 +11,7 @@ If \fIFILE\fP is not specified, kramdown reads from the standard input\. The res
11
11
  .P
12
12
  There are two sets of options that kramdown accepts: The first one includes the options that are used directly by the kramdown binary\. The second set of options controls how kramdown parses and converts its input\.
13
13
  .P
14
- Default values for this second set can be set using YAML via the configuration file \fBkramdownrc\fP\&\. This file has to be in XDG_CONFIG_HOME on Linux/Unix, ~/Library/Preferences on macOS and ~/AppData/Local on Windows\.
14
+ Default values for this second set can be set using YAML via the configuration file \fBkramdownrc\fP\&\. Note that configuration option names use underscores, not dashes (dashes are just used in the CLI options names), and boolean options do not have a \fBno\fP variant but a value of \fBtrue\fP or \fBfalse\fP\&\. This file has to be in XDG_CONFIG_HOME on Linux/Unix, ~/Library/Preferences on macOS and ~/AppData/Local on Windows\.
15
15
  .SH "CLI\-ONLY OPTIONS"
16
16
  .TP
17
17
  \fB\-i\fP \fIFORMAT\fP, \fB\-\-input\fP \fIFORMAT\fP
@@ -20,6 +20,12 @@ Specify the input format\. Available input formats: \fIkramdown\fP (this is the
20
20
  \fB\-o\fP \fIFORMAT\fP, \fB\-\-output\fP \fIFORMAT\fP
21
21
  Specify one or more output formats separated by commas: \fIhtml\fP (default), \fIkramdown\fP, \fIlatex\fP, \fIpdf\fP, \fIman\fP or \fIremove_html_tags\fP\&\.
22
22
  .TP
23
+ \fB\-\-no\-config\-file\fP
24
+ Do not read any configuration file\. Default behavior is to check for a configuration file and read it if it exists\.
25
+ .TP
26
+ \fB\-\-config\-file\fP \fIFILE\fP
27
+ Override the default path and name of the configuration file\.
28
+ .TP
23
29
  \fB\-v\fP, \fB\-\-version\fP
24
30
  Show the version of kramdown\.
25
31
  .TP
@@ -42,13 +42,15 @@ class TestFiles < Minitest::Test
42
42
  warn("Skipping MathjaxNode tests as MathjaxNode is not available")
43
43
  end
44
44
 
45
- KATEX_AVAILABLE = begin
46
- / class="katex"/ === Kramdown::Document.
47
- new('$$a$$', {:math_engine => :sskatex}).to_html or
48
- warn("Skipping SsKaTeX tests as SsKaTeX is not available.")
49
- rescue
50
- warn("Skipping SsKaTeX tests as default SsKaTeX config does not work.")
51
- end or warn("Run \"rake dev:test_sskatex_deps\" to see why.")
45
+ SSKATEX_AVAILABLE = begin
46
+ / class="katex"/ === Kramdown::Document.
47
+ new('$$a$$', {:math_engine => :sskatex}).to_html or
48
+ warn("Skipping SsKaTeX tests as SsKaTeX is not available.")
49
+ rescue
50
+ warn("Skipping SsKaTeX tests as default SsKaTeX config does not work.")
51
+ end or warn("Run \"rake dev:test_sskatex_deps\" to see why.")
52
+
53
+ KATEX_AVAILABLE = RUBY_VERSION >= '2.3'
52
54
 
53
55
  EXCLUDE_KD_FILES = [('test/testcases/block/04_header/with_auto_ids.text' if RUBY_VERSION <= '1.8.6'), # bc of dep stringex not working
54
56
  ('test/testcases/span/03_codespan/rouge/' if RUBY_VERSION < '2.0'), #bc of rouge
@@ -59,8 +61,10 @@ class TestFiles < Minitest::Test
59
61
  ('test/testcases/block/15_math/mathjaxnode_notexhints.text' unless MATHJAX_NODE_AVAILABLE),
60
62
  ('test/testcases/block/15_math/mathjaxnode_semantics.text' unless MATHJAX_NODE_AVAILABLE),
61
63
  ('test/testcases/span/math/mathjaxnode.text' unless MATHJAX_NODE_AVAILABLE),
62
- ('test/testcases/block/15_math/sskatex.text' unless KATEX_AVAILABLE),
63
- ('test/testcases/span/math/sskatex.text' unless KATEX_AVAILABLE),
64
+ ('test/testcases/block/15_math/sskatex.text' unless SSKATEX_AVAILABLE),
65
+ ('test/testcases/span/math/sskatex.text' unless SSKATEX_AVAILABLE),
66
+ ('test/testcases/block/15_math/katex.text' unless KATEX_AVAILABLE),
67
+ ('test/testcases/span/math/katex.text' unless KATEX_AVAILABLE),
64
68
  ].compact
65
69
 
66
70
  # Generate test methods for kramdown-to-xxx conversion
@@ -96,6 +100,7 @@ class TestFiles < Minitest::Test
96
100
  'test/testcases/block/06_codeblock/rouge/multiple.html', # bc of double surrounding <div>
97
101
  ('test/testcases/span/03_codespan/rouge/simple.html' if RUBY_VERSION < '2.0'),
98
102
  ('test/testcases/span/03_codespan/rouge/disabled.html' if RUBY_VERSION < '2.0'),
103
+ 'test/testcases/block/14_table/empty_tag_in_cell.html', # bc of tidy
99
104
  'test/testcases/block/15_math/ritex.html', # bc of tidy
100
105
  'test/testcases/span/math/ritex.html', # bc of tidy
101
106
  'test/testcases/block/15_math/itex2mml.html', # bc of tidy
@@ -109,6 +114,8 @@ class TestFiles < Minitest::Test
109
114
  'test/testcases/block/15_math/mathjax_preview_as_code.html', # bc of mathjax preview
110
115
  'test/testcases/span/math/sskatex.html', # bc of tidy
111
116
  'test/testcases/block/15_math/sskatex.html', # bc of tidy
117
+ 'test/testcases/span/math/katex.html', # bc of tidy
118
+ 'test/testcases/block/15_math/katex.html', # bc of tidy
112
119
  'test/testcases/span/05_html/mark_element.html', # bc of tidy
113
120
  'test/testcases/block/09_html/xml.html', # bc of tidy
114
121
  'test/testcases/span/05_html/xml.html', # bc of tidy
@@ -207,6 +214,7 @@ class TestFiles < Minitest::Test
207
214
  ('test/testcases/span/03_codespan/rouge/disabled.text' if RUBY_VERSION < '2.0'), #bc of rouge
208
215
  'test/testcases/block/06_codeblock/rouge/simple.text',
209
216
  'test/testcases/block/06_codeblock/rouge/multiple.text', # check, what document contain more, than one code block
217
+ 'test/testcases/block/14_table/empty_tag_in_cell.text', # bc of tidy
210
218
  'test/testcases/block/15_math/ritex.text', # bc of tidy
211
219
  'test/testcases/span/math/ritex.text', # bc of tidy
212
220
  'test/testcases/block/15_math/itex2mml.text', # bc of tidy
@@ -217,6 +225,8 @@ class TestFiles < Minitest::Test
217
225
  'test/testcases/span/math/mathjaxnode.text', # bc of tidy
218
226
  'test/testcases/block/15_math/sskatex.text', # bc of tidy
219
227
  'test/testcases/span/math/sskatex.text', # bc of tidy
228
+ 'test/testcases/block/15_math/katex.text', # bc of tidy
229
+ 'test/testcases/span/math/katex.text', # bc of tidy
220
230
  'test/testcases/span/01_link/link_defs_with_ial.text', # bc of attribute ordering
221
231
  'test/testcases/span/05_html/mark_element.text', # bc of tidy
222
232
  'test/testcases/block/09_html/xml.text', # bc of tidy
@@ -260,6 +270,7 @@ class TestFiles < Minitest::Test
260
270
  'test/testcases/span/autolinks/url_links.html', # bc of quot entity being converted to char
261
271
  ('test/testcases/span/03_codespan/rouge/simple.html' if RUBY_VERSION < '2.0'),
262
272
  ('test/testcases/span/03_codespan/rouge/disabled.html' if RUBY_VERSION < '2.0'),
273
+ 'test/testcases/block/14_table/empty_tag_in_cell.html', # bc of tidy
263
274
  'test/testcases/block/15_math/ritex.html', # bc of tidy
264
275
  'test/testcases/span/math/ritex.html', # bc of tidy
265
276
  'test/testcases/block/15_math/itex2mml.html', # bc of tidy
@@ -270,6 +281,8 @@ class TestFiles < Minitest::Test
270
281
  'test/testcases/span/math/mathjaxnode.html', # bc of tidy
271
282
  'test/testcases/block/15_math/sskatex.html', # bc of tidy
272
283
  'test/testcases/span/math/sskatex.html', # bc of tidy
284
+ 'test/testcases/block/15_math/katex.html', # bc of tidy
285
+ 'test/testcases/span/math/katex.html', # bc of tidy
273
286
  'test/testcases/block/15_math/mathjax_preview.html', # bc of mathjax preview
274
287
  'test/testcases/block/15_math/mathjax_preview_simple.html', # bc of mathjax preview
275
288
  'test/testcases/block/15_math/mathjax_preview_as_code.html', # bc of mathjax preview
@@ -375,8 +388,10 @@ class TestFiles < Minitest::Test
375
388
  ('test/testcases/block/15_math/mathjaxnode_notexhints.text' unless MATHJAX_NODE_AVAILABLE),
376
389
  ('test/testcases/block/15_math/mathjaxnode_semantics.text' unless MATHJAX_NODE_AVAILABLE),
377
390
  ('test/testcases/span/math/mathjaxnode.text' unless MATHJAX_NODE_AVAILABLE),
378
- ('test/testcases/block/15_math/sskatex.text' unless KATEX_AVAILABLE),
379
- ('test/testcases/span/math/sskatex.text' unless KATEX_AVAILABLE),
391
+ ('test/testcases/block/15_math/sskatex.text' unless SSKATEX_AVAILABLE),
392
+ ('test/testcases/span/math/sskatex.text' unless SSKATEX_AVAILABLE),
393
+ ('test/testcases/block/15_math/katex.text' unless KATEX_AVAILABLE),
394
+ ('test/testcases/span/math/katex.text' unless KATEX_AVAILABLE),
380
395
  ].compact
381
396
 
382
397
  # Generate test methods for gfm-to-html conversion
@@ -408,8 +423,10 @@ class TestFiles < Minitest::Test
408
423
  ].compact
409
424
 
410
425
  EXCLUDE_MODIFY = ['test/testcases/block/06_codeblock/rouge/multiple.text', # bc of HTMLFormater in options
411
- ('test/testcases/block/15_math/sskatex.text' unless KATEX_AVAILABLE),
412
- ('test/testcases/span/math/sskatex.text' unless KATEX_AVAILABLE),
426
+ ('test/testcases/block/15_math/sskatex.text' unless SSKATEX_AVAILABLE),
427
+ ('test/testcases/span/math/sskatex.text' unless SSKATEX_AVAILABLE),
428
+ ('test/testcases/block/15_math/katex.text' unless KATEX_AVAILABLE),
429
+ ('test/testcases/span/math/katex.text' unless KATEX_AVAILABLE),
413
430
  ].compact
414
431
 
415
432
  # Generate test methods for asserting that converters don't modify the document tree.
@@ -226,4 +226,13 @@ describe 'location' do
226
226
  end
227
227
  end
228
228
  end
229
+
230
+ it 'marks fenced code block as fenced with the GFM parser' do
231
+ str = %(```\nfenced code\n```\n\n indented code\n)
232
+ doc = Kramdown::Document.new(str, :input => 'GFM')
233
+ fenced_cb = doc.root.children.first
234
+ indented_cb = doc.root.children.last
235
+ assert fenced_cb.options[:fenced]
236
+ refute indented_cb.options[:fenced]
237
+ end
229
238
  end
@@ -0,0 +1,8 @@
1
+ <table>
2
+ <tbody>
3
+ <tr>
4
+ <td>first line of cell<br />second line of cell</td>
5
+ <td>another cell</td>
6
+ </tr>
7
+ </tbody>
8
+ </table>
@@ -0,0 +1 @@
1
+ :html_to_native: true
@@ -0,0 +1 @@
1
+ | first line of cell<br>second line of cell | another cell |
@@ -0,0 +1,2 @@
1
+ <span class="katex-display"><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi mathvariant="normal">Δ</mi><mo>=</mo><mfrac><mrow><mn>1</mn></mrow><mrow><mn>2</mn></mrow></mfrac><mrow><mo fence="true">∣</mo><mtable><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>a</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>b</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>c</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>d</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>e</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>f</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>g</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>h</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>i</mi></mrow></mstyle></mtd></mtr></mtable><mo fence="true">∣</mo></mrow></mrow><annotation encoding="application/x-tex">\Delta = \frac{1}{2}
2
+ \begin{vmatrix}a &amp; b &amp; c \\ d &amp; e &amp; f \\ g &amp; h &amp; i\end{vmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:2.08597em;"></span><span class="strut bottom" style="height:3.636em;vertical-align:-1.5500299999999998em;"></span><span class="base"><span class="mord">Δ</span><span class="mord rule" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mord rule" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.32144em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.15em;"><span class="pstrut" style="height:3em;"></span><span class="stretchy" style="height:0.2em;"><svg width='400em' height='0.2em' viewBox='0 0 400000 200' preserveAspectRatio='xMinYMin slice'><path d='M0 80H400000 v40H0z M0 80H400000 v40H0z'/></svg></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord rule" style="margin-right:0.16666666666666666em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.08597em;"><span style="top:-1.05597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-1.6619700000000002em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.26797em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.87397em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.47997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-4.08597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500299999999998em;"></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">a</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">d</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit" style="margin-right:0.03588em;">g</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">b</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">e</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">h</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">c</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit" style="margin-right:0.10764em;">f</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.08597em;"><span style="top:-1.05597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-1.6619700000000002em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.26797em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.87397em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.47997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-4.08597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500299999999998em;"></span></span></span></span></span></span></span></span></span></span>
@@ -0,0 +1 @@
1
+ :math_engine: :katex
@@ -0,0 +1,2 @@
1
+ $$\Delta = \frac{1}{2}
2
+ \begin{vmatrix}a & b & c \\ d & e & f \\ g & h & i\end{vmatrix}$$
@@ -1,4 +1,4 @@
1
- <math xmlns="http://www.w3.org/1998/Math/MathML" display="block" alttext="f(x) = a{x^3} + b{x^2} + cx + d">
1
+ <math xmlns="http://www.w3.org/1998/Math/MathML" display="block" alttext="f left-parenthesis x right-parenthesis equals a x cubed plus b x squared plus c x plus d">
2
2
  <mi>f</mi>
3
3
  <mo stretchy="false">(</mo>
4
4
  <mi>x</mi>
@@ -1,4 +1,4 @@
1
- <math xmlns="http://www.w3.org/1998/Math/MathML" display="block" alttext="f(x) = a{x^3} + b{x^2} + cx + d">
1
+ <math xmlns="http://www.w3.org/1998/Math/MathML" display="block" alttext="f left-parenthesis x right-parenthesis equals a x cubed plus b x squared plus c x plus d">
2
2
  <mi>f</mi>
3
3
  <mo stretchy="false">(</mo>
4
4
  <mi>x</mi>
@@ -1,4 +1,4 @@
1
- <math xmlns="http://www.w3.org/1998/Math/MathML" display="block" alttext="f(x) = a{x^3} + b{x^2} + cx + d">
1
+ <math xmlns="http://www.w3.org/1998/Math/MathML" display="block" alttext="f left-parenthesis x right-parenthesis equals a x cubed plus b x squared plus c x plus d">
2
2
  <semantics>
3
3
  <mrow>
4
4
  <mi>f</mi>
@@ -1,2 +1,2 @@
1
1
  <span class="katex-display"><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi mathvariant="normal">&#x394;</mi><mo>=</mo><mfrac><mrow><mn>1</mn></mrow><mrow><mn>2</mn></mrow></mfrac><mrow><mo fence="true">&#x2223;</mo><mtable><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>a</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>b</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>c</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>d</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>e</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>f</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>g</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>h</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>i</mi></mrow></mstyle></mtd></mtr></mtable><mo fence="true">&#x2223;</mo></mrow></mrow><annotation encoding="application/x-tex">\Delta = \frac{1}{2}
2
- \begin{vmatrix}a &amp; b &amp; c \\ d &amp; e &amp; f \\ g &amp; h &amp; i\end{vmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:2.08597em;"></span><span class="strut bottom" style="height:3.636em;vertical-align:-1.5500299999999998em;"></span><span class="base"><span class="mord mathrm">&#x394;</span><span class="mrel">=</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.32144em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathrm">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathrm">1</span></span></span></span><span class="vlist-s">&#x200b;</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.08597em;"><span style="top:-1.05597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-1.6619700000000002em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-2.26797em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-2.87397em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-3.47997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-4.08597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span></span><span class="vlist-s">&#x200b;</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500299999999998em;"></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">a</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">d</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit" style="margin-right:0.03588em;">g</span></span></span></span><span class="vlist-s">&#x200b;</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">b</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">e</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">h</span></span></span></span><span class="vlist-s">&#x200b;</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">c</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit" style="margin-right:0.10764em;">f</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">i</span></span></span></span><span class="vlist-s">&#x200b;</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.08597em;"><span style="top:-1.05597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-1.6619700000000002em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-2.26797em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-2.87397em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-3.47997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-4.08597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span></span><span class="vlist-s">&#x200b;</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500299999999998em;"></span></span></span></span></span></span></span></span></span></span>
2
+ \begin{vmatrix}a &amp; b &amp; c \\ d &amp; e &amp; f \\ g &amp; h &amp; i\end{vmatrix}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:2.08597em;"></span><span class="strut bottom" style="height:3.636em;vertical-align:-1.5500299999999998em;"></span><span class="base"><span class="mord">&#x394;</span><span class="mord rule" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mord rule" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.32144em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.15em;"><span class="pstrut" style="height:3em;"></span><span class="stretchy" style="height:0.2em;"><svg width='400em' height='0.2em' viewBox='0 0 400000 200' preserveAspectRatio='xMinYMin slice'><path d='M0 80H400000 v40H0z M0 80H400000 v40H0z'/></svg></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">&#x200b;</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord rule" style="margin-right:0.16666666666666666em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.08597em;"><span style="top:-1.05597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-1.6619700000000002em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-2.26797em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-2.87397em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-3.47997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-4.08597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span></span><span class="vlist-s">&#x200b;</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500299999999998em;"></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">a</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">d</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit" style="margin-right:0.03588em;">g</span></span></span></span><span class="vlist-s">&#x200b;</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">b</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">e</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">h</span></span></span></span><span class="vlist-s">&#x200b;</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05em;"><span style="top:-4.21em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">c</span></span></span><span style="top:-3.0099999999999993em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit" style="margin-right:0.10764em;">f</span></span></span><span style="top:-1.8099999999999994em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathit">i</span></span></span></span><span class="vlist-s">&#x200b;</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500000000000007em;"></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.08597em;"><span style="top:-1.05597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-1.6619700000000002em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-2.26797em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-2.87397em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-3.47997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span><span style="top:-4.08597em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>&#x2223;</span></span></span></span><span class="vlist-s">&#x200b;</span></span><span class="vlist-r"><span class="vlist" style="height:1.5500299999999998em;"></span></span></span></span></span></span></span></span></span></span>
@@ -0,0 +1 @@
1
+ <p>Erst einmal eine Formel wie <span class="katex"><span class="katex-mathml"><math><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>=</mo><msup><mi>c</mi><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">a^2+b^2=c^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.8141079999999999em;"></span><span class="strut bottom" style="height:0.897438em;vertical-align:-0.08333em;"></span><span class="base"><span class="mord"><span class="mord mathit">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mord rule" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mord rule" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord mathit">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mord rule" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mord rule" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mord mathit">c</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span> innerhalb eines Satzes.</p>
@@ -0,0 +1 @@
1
+ :math_engine: :katex
@@ -0,0 +1 @@
1
+ Erst einmal eine Formel wie $$a^2+b^2=c^2$$ innerhalb eines Satzes.
@@ -1,4 +1,4 @@
1
- <p>This is <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="f(x) = a{x^3} + b{x^2} + cx + d">
1
+ <p>This is <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="f left-parenthesis x right-parenthesis equals a x cubed plus b x squared plus c x plus d">
2
2
  <mi>f</mi>
3
3
  <mo stretchy="false">(</mo>
4
4
  <mi>x</mi>
@@ -1 +1 @@
1
- <p>Erst einmal eine Formel wie <span class="katex"><span class="katex-mathml"><math><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>=</mo><msup><mi>c</mi><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">a^2+b^2=c^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.8141079999999999em;"></span><span class="strut bottom" style="height:0.897438em;vertical-align:-0.08333em;"></span><span class="base"><span class="mord"><span class="mord mathit">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathrm mtight">2</span></span></span></span></span></span></span></span><span class="mbin">+</span><span class="mord"><span class="mord mathit">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathrm mtight">2</span></span></span></span></span></span></span></span><span class="mrel">=</span><span class="mord"><span class="mord mathit">c</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathrm mtight">2</span></span></span></span></span></span></span></span></span></span></span> innerhalb eines Satzes.</p>
1
+ <p>Erst einmal eine Formel wie <span class="katex"><span class="katex-mathml"><math><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>=</mo><msup><mi>c</mi><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">a^2+b^2=c^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.8141079999999999em;"></span><span class="strut bottom" style="height:0.897438em;vertical-align:-0.08333em;"></span><span class="base"><span class="mord"><span class="mord mathit">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mord rule" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mord rule" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord mathit">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mord rule" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mord rule" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mord mathit">c</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span> innerhalb eines Satzes.</p>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kramdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.16.2
4
+ version: 1.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Leitner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-29 00:00:00.000000000 Z
11
+ date: 2018-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -142,14 +142,28 @@ dependencies:
142
142
  requirements:
143
143
  - - ">="
144
144
  - !ruby/object:Gem::Version
145
- version: 0.9.23
145
+ version: 0.9.37
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
- version: 0.9.23
152
+ version: 0.9.37
153
+ - !ruby/object:Gem::Dependency
154
+ name: katex
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 0.4.3
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 0.4.3
153
167
  description: |
154
168
  kramdown is yet-another-markdown-parser but fast, pure Ruby,
155
169
  using a strict syntax definition and supporting several common extensions.
@@ -203,6 +217,7 @@ files:
203
217
  - lib/kramdown/converter/latex.rb
204
218
  - lib/kramdown/converter/man.rb
205
219
  - lib/kramdown/converter/math_engine/itex2mml.rb
220
+ - lib/kramdown/converter/math_engine/katex.rb
206
221
  - lib/kramdown/converter/math_engine/mathjax.rb
207
222
  - lib/kramdown/converter/math_engine/mathjaxnode.rb
208
223
  - lib/kramdown/converter/math_engine/ritex.rb
@@ -533,6 +548,9 @@ files:
533
548
  - test/testcases/block/13_definition_list/too_much_space.text
534
549
  - test/testcases/block/13_definition_list/with_blocks.html
535
550
  - test/testcases/block/13_definition_list/with_blocks.text
551
+ - test/testcases/block/14_table/empty_tag_in_cell.html
552
+ - test/testcases/block/14_table/empty_tag_in_cell.options
553
+ - test/testcases/block/14_table/empty_tag_in_cell.text
536
554
  - test/testcases/block/14_table/errors.html
537
555
  - test/testcases/block/14_table/errors.text
538
556
  - test/testcases/block/14_table/escaping.html
@@ -553,6 +571,9 @@ files:
553
571
  - test/testcases/block/15_math/itex2mml.html
554
572
  - test/testcases/block/15_math/itex2mml.options
555
573
  - test/testcases/block/15_math/itex2mml.text
574
+ - test/testcases/block/15_math/katex.html.19
575
+ - test/testcases/block/15_math/katex.options
576
+ - test/testcases/block/15_math/katex.text
556
577
  - test/testcases/block/15_math/mathjax_preview.html
557
578
  - test/testcases/block/15_math/mathjax_preview.options
558
579
  - test/testcases/block/15_math/mathjax_preview.text
@@ -735,6 +756,9 @@ files:
735
756
  - test/testcases/span/math/itex2mml.html
736
757
  - test/testcases/span/math/itex2mml.options
737
758
  - test/testcases/span/math/itex2mml.text
759
+ - test/testcases/span/math/katex.html.19
760
+ - test/testcases/span/math/katex.options
761
+ - test/testcases/span/math/katex.text
738
762
  - test/testcases/span/math/mathjaxnode.html.19
739
763
  - test/testcases/span/math/mathjaxnode.options
740
764
  - test/testcases/span/math/mathjaxnode.text
@@ -836,7 +860,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
836
860
  version: '0'
837
861
  requirements: []
838
862
  rubyforge_project:
839
- rubygems_version: 2.6.14
863
+ rubygems_version: 2.7.3
840
864
  signing_key:
841
865
  specification_version: 4
842
866
  summary: kramdown is a fast, pure-Ruby Markdown-superset converter.