kramdown 0.7.0 → 0.8.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 (93) hide show
  1. data/CONTRIBUTERS +4 -0
  2. data/ChangeLog +671 -0
  3. data/README +10 -0
  4. data/Rakefile +40 -23
  5. data/VERSION +1 -1
  6. data/data/kramdown/document.html +1 -1
  7. data/data/kramdown/document.latex +10 -5
  8. data/doc/default.less.css +52 -10
  9. data/doc/default.template +4 -0
  10. data/doc/documentation.page +72 -0
  11. data/doc/index.page +8 -41
  12. data/doc/installation.page +6 -6
  13. data/doc/links.markdown +2 -0
  14. data/doc/quickref.page +6 -2
  15. data/doc/syntax.page +8 -7
  16. data/doc/tests.page +1 -2
  17. data/lib/kramdown.rb +1 -1
  18. data/lib/kramdown/compatibility.rb +1 -1
  19. data/lib/kramdown/converter.rb +8 -3
  20. data/lib/kramdown/converter/base.rb +27 -5
  21. data/lib/kramdown/converter/html.rb +26 -28
  22. data/lib/kramdown/converter/latex.rb +29 -15
  23. data/lib/kramdown/document.rb +15 -8
  24. data/lib/kramdown/error.rb +1 -1
  25. data/lib/kramdown/options.rb +21 -13
  26. data/lib/kramdown/parser.rb +9 -3
  27. data/lib/kramdown/parser/base.rb +95 -0
  28. data/lib/kramdown/parser/html.rb +387 -0
  29. data/lib/kramdown/parser/kramdown.rb +11 -56
  30. data/lib/kramdown/parser/kramdown/attribute_list.rb +1 -1
  31. data/lib/kramdown/parser/kramdown/autolink.rb +1 -1
  32. data/lib/kramdown/parser/kramdown/blank_line.rb +1 -1
  33. data/lib/kramdown/parser/kramdown/blockquote.rb +1 -1
  34. data/lib/kramdown/parser/kramdown/codeblock.rb +1 -1
  35. data/lib/kramdown/parser/kramdown/codespan.rb +1 -1
  36. data/lib/kramdown/parser/kramdown/emphasis.rb +1 -1
  37. data/lib/kramdown/parser/kramdown/eob.rb +1 -1
  38. data/lib/kramdown/parser/kramdown/escaped_chars.rb +1 -1
  39. data/lib/kramdown/parser/kramdown/extension.rb +2 -90
  40. data/lib/kramdown/parser/kramdown/footnote.rb +1 -1
  41. data/lib/kramdown/parser/kramdown/header.rb +1 -1
  42. data/lib/kramdown/parser/kramdown/horizontal_rule.rb +1 -1
  43. data/lib/kramdown/parser/kramdown/html.rb +69 -149
  44. data/lib/kramdown/parser/kramdown/html_entity.rb +4 -4
  45. data/lib/kramdown/parser/kramdown/line_break.rb +1 -1
  46. data/lib/kramdown/parser/kramdown/link.rb +2 -2
  47. data/lib/kramdown/parser/kramdown/list.rb +2 -6
  48. data/lib/kramdown/parser/kramdown/math.rb +3 -3
  49. data/lib/kramdown/parser/kramdown/paragraph.rb +1 -1
  50. data/lib/kramdown/parser/kramdown/smart_quotes.rb +3 -2
  51. data/lib/kramdown/parser/kramdown/table.rb +3 -2
  52. data/lib/kramdown/parser/kramdown/typographic_symbol.rb +7 -3
  53. data/lib/kramdown/version.rb +2 -2
  54. data/man/man1/kramdown.1 +19 -0
  55. data/test/run_tests.rb +1 -0
  56. data/test/test_files.rb +68 -7
  57. data/test/testcases/block/09_html/comment.html +5 -0
  58. data/test/testcases/block/09_html/comment.text +3 -0
  59. data/test/testcases/block/09_html/content_model/tables.html +2 -2
  60. data/test/testcases/block/09_html/html_to_native/code.html +10 -0
  61. data/test/testcases/block/09_html/html_to_native/code.text +9 -0
  62. data/test/testcases/block/09_html/html_to_native/comment.html +7 -0
  63. data/test/testcases/block/09_html/html_to_native/comment.text +8 -0
  64. data/test/testcases/block/09_html/html_to_native/emphasis.html +1 -0
  65. data/test/testcases/block/09_html/html_to_native/emphasis.text +1 -0
  66. data/test/testcases/block/09_html/html_to_native/entity.html +1 -0
  67. data/test/testcases/block/09_html/html_to_native/entity.text +1 -0
  68. data/test/testcases/block/09_html/html_to_native/header.html +6 -0
  69. data/test/testcases/block/09_html/html_to_native/header.options +2 -0
  70. data/test/testcases/block/09_html/html_to_native/header.text +6 -0
  71. data/test/testcases/block/09_html/html_to_native/list_dl.html +8 -0
  72. data/test/testcases/block/09_html/html_to_native/list_dl.text +8 -0
  73. data/test/testcases/block/09_html/html_to_native/list_ol.html +15 -0
  74. data/test/testcases/block/09_html/html_to_native/list_ol.text +17 -0
  75. data/test/testcases/block/09_html/html_to_native/list_ul.html +19 -0
  76. data/test/testcases/block/09_html/html_to_native/list_ul.text +22 -0
  77. data/test/testcases/block/09_html/html_to_native/options +1 -0
  78. data/test/testcases/block/09_html/html_to_native/paragraph.html +3 -0
  79. data/test/testcases/block/09_html/html_to_native/paragraph.text +4 -0
  80. data/test/testcases/block/09_html/html_to_native/table_normal.html +13 -0
  81. data/test/testcases/block/09_html/html_to_native/table_normal.text +12 -0
  82. data/test/testcases/block/09_html/html_to_native/table_simple.html +10 -0
  83. data/test/testcases/block/09_html/html_to_native/table_simple.text +14 -0
  84. data/test/testcases/block/09_html/html_to_native/typography.html +1 -0
  85. data/test/testcases/block/09_html/html_to_native/typography.text +1 -0
  86. data/test/testcases/block/09_html/parse_as_raw.html +3 -5
  87. data/test/testcases/block/09_html/parse_as_raw.text +0 -1
  88. data/test/testcases/span/04_footnote/definitions.latex +18 -0
  89. data/test/testcases/span/04_footnote/footnote_nr.latex +6 -0
  90. data/test/testcases/span/04_footnote/markers.latex +32 -0
  91. data/test/testcases/span/05_html/invalid.html +1 -0
  92. data/test/testcases/span/05_html/invalid.text +1 -0
  93. metadata +52 -5
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown.
7
7
  #
@@ -20,18 +20,18 @@
20
20
  #++
21
21
  #
22
22
 
23
+ require 'kramdown/parser/html'
24
+
23
25
  module Kramdown
24
26
  module Parser
25
27
  class Kramdown
26
28
 
27
- HTML_ENTITY_RE = /&([\w:][\-\w\d\.:]*);|&#(\d+);|&\#x([0-9a-fA-F]+);/
28
-
29
29
  # Parse the HTML entity at the current location.
30
30
  def parse_html_entity
31
31
  @src.pos += @src.matched_size
32
32
  @tree.children << Element.new(:entity, @src[1] || (@src[2] && @src[2].to_i) || @src[3].hex)
33
33
  end
34
- define_parser(:html_entity, HTML_ENTITY_RE, '&')
34
+ define_parser(:html_entity, Kramdown::Parser::Html::Constants::HTML_ENTITY_RE, '&')
35
35
 
36
36
  end
37
37
  end
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown.
7
7
  #
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown.
7
7
  #
@@ -91,7 +91,7 @@ module Kramdown
91
91
  add_text(result)
92
92
  return
93
93
  end
94
- alt_text = extract_string(reset_pos...@src.pos)
94
+ alt_text = extract_string(reset_pos...@src.pos, @src)
95
95
  conv_link_id = alt_text.gsub(/(\s|\n)+/m, ' ').gsub(LINK_ID_NON_CHARS, '').downcase
96
96
  @src.scan(stop_re)
97
97
 
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown.
7
7
  #
@@ -123,8 +123,6 @@ module Kramdown
123
123
  text = it.children.shift.children.first
124
124
  text.value += "\n" if !it.children.empty? && it.children[0].type != :blank
125
125
  it.children.unshift(text)
126
- else
127
- it.options[:first_is_block] = true
128
126
  end
129
127
 
130
128
  if it.children.last.type == :blank
@@ -160,7 +158,7 @@ module Kramdown
160
158
  end
161
159
  para.children.first.value.split("\n").each do |term|
162
160
  el = Element.new(:dt)
163
- el.children << Element.new(:text, term)
161
+ el.children << Element.new(:raw_text, term)
164
162
  deflist.children << el
165
163
  end
166
164
 
@@ -207,8 +205,6 @@ module Kramdown
207
205
  text = it.children.shift.children.first
208
206
  text.value += "\n" if !it.children.empty?
209
207
  it.children.unshift(text)
210
- else
211
- it.options[:first_is_block] = true
212
208
  end
213
209
  end
214
210
 
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown.
7
7
  #
@@ -33,7 +33,7 @@ module Kramdown
33
33
  return false
34
34
  end
35
35
  @src.pos += @src.matched_size
36
- @tree.children << new_block_el(:math, @src[2], :type => :block)
36
+ @tree.children << new_block_el(:math, @src[2], :category => :block)
37
37
  true
38
38
  end
39
39
  define_parser(:block_math, BLOCK_MATH_START)
@@ -44,7 +44,7 @@ module Kramdown
44
44
  # Parse the inline math at the current location.
45
45
  def parse_inline_math
46
46
  @src.pos += @src.matched_size
47
- @tree.children << Element.new(:math, @src[1], :type => :inline)
47
+ @tree.children << Element.new(:math, @src[1], :category => :inline)
48
48
  end
49
49
  define_parser(:inline_math, INLINE_MATH_START, '\$')
50
50
 
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown.
7
7
  #
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown.
7
7
  #
@@ -17,8 +17,9 @@
17
17
  #
18
18
  # You should have received a copy of the GNU General Public License
19
19
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #++
20
21
  #
21
- #
22
+ #--
22
23
  # Parts of this file are based on code from Maruku by Andrea Censi.
23
24
  # The needed license statements follow:
24
25
  #
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2010 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown.
7
7
  #
@@ -82,7 +82,7 @@ module Kramdown
82
82
  cells.pop if cells.last.strip.empty?
83
83
  cells.each do |cell_text|
84
84
  tcell = Element.new(:td)
85
- tcell.children << Element.new(:text, cell_text.strip)
85
+ tcell.children << Element.new(:raw_text, cell_text.strip)
86
86
  trow.children << tcell
87
87
  end
88
88
  columns = [columns, cells.length].max
@@ -106,6 +106,7 @@ module Kramdown
106
106
  (columns - row.children.length).times do
107
107
  row.children << Element.new(:td)
108
108
  end
109
+ row.children.each {|el| el.type = :th} if kind.type == :thead
109
110
  end
110
111
  end
111
112
  if table.options[:alignment].length > columns
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown.
7
7
  #
@@ -24,7 +24,7 @@ module Kramdown
24
24
  module Parser
25
25
  class Kramdown
26
26
 
27
- TYPOGRAPHIC_SYMS = [['---', :mdash], ['--', :ndash], ['...', :ellipsis],
27
+ TYPOGRAPHIC_SYMS = [['---', :mdash], ['--', :ndash], ['...', :hellip],
28
28
  ['\\<<', '&lt;&lt;'], ['\\>>', '&gt;&gt;'],
29
29
  ['<< ', :laquo_space], [' >>', :raquo_space],
30
30
  ['<<', :laquo], ['>>', :raquo]]
@@ -37,8 +37,12 @@ module Kramdown
37
37
  val = TYPOGRAPHIC_SYMS_SUBST[@src.matched]
38
38
  if val.kind_of?(Symbol)
39
39
  @tree.children << Element.new(:typographic_sym, val)
40
+ elsif @src.matched == '\\<<'
41
+ @tree.children << Element.new(:entity, 'lt')
42
+ @tree.children << Element.new(:entity, 'lt')
40
43
  else
41
- add_text(val.dup)
44
+ @tree.children << Element.new(:entity, 'gt')
45
+ @tree.children << Element.new(:entity, 'gt')
42
46
  end
43
47
  end
44
48
  define_parser(:typographic_syms, TYPOGRAPHIC_SYMS_RE, '--|\\.\\.\\.|(?:\\\\| )?(?:<<|>>)')
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown.
7
7
  #
@@ -23,6 +23,6 @@
23
23
  module Kramdown
24
24
 
25
25
  # The kramdown version.
26
- VERSION = '0.7.0'
26
+ VERSION = '0.8.0'
27
27
 
28
28
  end
@@ -104,6 +104,23 @@ Default: true
104
104
  Used by: kramdown parser
105
105
 
106
106
 
107
+ .TP
108
+ .B \-\-[no\-]html_to_native
109
+
110
+ Convert HTML elements to native elements
111
+
112
+ If this option is `true`, the parser converts HTML elements to native
113
+ elements. For example, when parsing `<em>hallo</em>` the emphasis tag
114
+ would normally be converted to an `:html` element with tag type `:em`.
115
+ If `html_to_native` is `true`, then the emphasis would be converted to a
116
+ native `:em` element.
117
+
118
+ This is useful for converters that cannot deal with HTML elements.
119
+
120
+ Default: false
121
+ Used by: kramdown parser
122
+
123
+
107
124
  .TP
108
125
  .B \-\-footnote_nr ARG
109
126
 
@@ -119,6 +136,8 @@ Used by: HTML converter
119
136
  .TP
120
137
  .B \-\-filter_html ARG
121
138
 
139
+ NOTE: This option is deprecated and will be removed in a future release!
140
+
122
141
  An array of HTML tags that should be filtered from the output
123
142
 
124
143
  The value can either be specified as array or as a space separated
@@ -44,6 +44,7 @@ Dir[arg].each {|f| fwidth = [fwidth, f.length + 10].max }.each do |file|
44
44
 
45
45
  html_file = file.sub('.text', '.html')
46
46
  opts_file = file.sub('.text', '.options')
47
+ opts_file = File.join(File.dirname(file), 'options') if !File.exist?(opts_file)
47
48
  options = File.exist?(opts_file) ? YAML::load(File.read(opts_file)) : {:auto_ids => false, :filter_html => [], :footnote_nr => 1}
48
49
  doc = Kramdown::Document.new(File.read(file), options)
49
50
  begin
@@ -23,16 +23,77 @@
23
23
  require 'test/unit'
24
24
  require 'kramdown'
25
25
  require 'yaml'
26
+ require 'tmpdir'
26
27
 
27
28
  class TestFiles < Test::Unit::TestCase
28
29
 
29
- Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |file|
30
- define_method('test_' + file.tr('.', '_')) do
31
- html_file = file.sub('.text', '.html')
32
- opts_file = file.sub('.text', '.options')
33
- options = File.exist?(opts_file) ? YAML::load(File.read(opts_file)) : {:auto_ids => false, :filter_html => [], :footnote_nr => 1}
34
- doc = Kramdown::Document.new(File.read(file), options)
35
- assert_equal(File.read(html_file), doc.to_html, "Failed test #{file}")
30
+ # Generate test methods for kramdown-to-xxx conversion
31
+ Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |text_file|
32
+ basename = text_file.sub(/\.text$/, '')
33
+ opts_file = text_file.sub(/\.text$/, '.options')
34
+ (Dir[basename + ".*"] - [text_file, opts_file]).each do |output_file|
35
+ output_format = File.extname(output_file)[1..-1]
36
+ next if !Kramdown::Converter.const_defined?(output_format[0..0].upcase + output_format[1..-1])
37
+ define_method('test_' + text_file.tr('.', '_') + "_to_#{output_format}") do
38
+ opts_file = File.join(File.dirname(text_file), 'options') if !File.exist?(opts_file)
39
+ options = File.exist?(opts_file) ? YAML::load(File.read(opts_file)) : {:auto_ids => false, :filter_html => [], :footnote_nr => 1}
40
+ doc = Kramdown::Document.new(File.read(text_file), options)
41
+ assert_equal(File.read(output_file), doc.send("to_#{output_format}"))
42
+ end
43
+ end
44
+ end
45
+
46
+ # Generate test methods for html-to-html conversion
47
+ `tidy -v 2>&1`
48
+ if $?.exitstatus != 0
49
+ warn("Skipping html-to-html tests because tidy executable is missing")
50
+ else
51
+ EXCLUDE_HTML_FILES = ['test/testcases/block/06_codeblock/whitespace.html', # bc of span inside pre
52
+ 'test/testcases/block/09_html/simple.html' # bc of xml elements
53
+ ]
54
+ Dir[File.dirname(__FILE__) + '/testcases/**/*.html'].each do |html_file|
55
+ next if EXCLUDE_HTML_FILES.any? {|f| html_file =~ /#{f}$/}
56
+ define_method('test_' + html_file.tr('.', '_') + "_to_html") do
57
+ doc = Kramdown::Document.new(File.read(html_file), :input => 'html', :auto_ids => false, :footnote_nr => 1)
58
+ assert_equal(tidy_output(File.read(html_file)), tidy_output(doc.to_html))
59
+ end
60
+ end
61
+ end
62
+
63
+ def tidy_output(out)
64
+ result = IO.popen("tidy -q -raw 2>/dev/null", 'r+') do |io|
65
+ io.write(out)
66
+ io.close_write
67
+ io.read
68
+ end
69
+ if $?.exitstatus == 2
70
+ raise "Problem using tidy"
71
+ end
72
+ result
73
+ end
74
+
75
+ # Generate test methods for text-to-latex conversion and compilation
76
+ `latex -v 2>&1`
77
+ if $?.exitstatus != 0
78
+ warn("Skipping latex compilation tests because latex executable is missing")
79
+ else
80
+ EXCLUDE_LATEX_FILES = ['test/testcases/span/01_link/image_in_a.text', # bc of image link
81
+ 'test/testcases/span/01_link/imagelinks.text', # bc of image links
82
+ 'test/testcases/span/04_footnote/markers.text', # bc of footnote in header
83
+ ]
84
+ Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |text_file|
85
+ next if EXCLUDE_LATEX_FILES.any? {|f| text_file =~ /#{f}$/}
86
+ define_method('test_' + text_file.tr('.', '_') + "_to_latex_compilation") do
87
+ latex = Kramdown::Document.new(File.read(text_file),
88
+ :auto_ids => false, :footnote_nr => 1,
89
+ :template => 'document').to_latex
90
+ result = IO.popen("latex -output-directory='#{Dir.tmpdir}' 2>/dev/null", 'r+') do |io|
91
+ io.write(latex)
92
+ io.close_write
93
+ io.read
94
+ end
95
+ assert($?.exitstatus == 0, result.scan(/^!(.*\n.*)/).join("\n"))
96
+ end
36
97
  end
37
98
  end
38
99
 
@@ -11,3 +11,8 @@ Blah
11
11
  Blah
12
12
  -->
13
13
  <p>para</p>
14
+
15
+ <blockquote>
16
+ <p>This is</p>
17
+ <!-- a comment -->
18
+ </blockquote>
@@ -10,3 +10,6 @@ para2
10
10
  Blah
11
11
  Blah
12
12
  --> para
13
+
14
+ > This is
15
+ > <!-- a comment -->
@@ -2,8 +2,8 @@
2
2
  <tr>
3
3
  <th><em>Usage</em></th>
4
4
  <th>
5
- <p>Output</p>
6
- </th>
5
+ Output
6
+ </th>
7
7
  </tr>
8
8
  <tr>
9
9
  <td>Some <em>data</em></td>
@@ -0,0 +1,10 @@
1
+ <p>This is a <code>code span with &lt;entities&gt; that should be preserved</code>.
2
+ This is a <code>simple code</code> span.</p>
3
+
4
+ <p>Some <code>&lt;</code></p>
5
+
6
+ <pre><code>Some very important &lt; thing
7
+ </code></pre>
8
+
9
+ <pre><code>Some code&sdot;&sdot;
10
+ </code></pre>
@@ -0,0 +1,9 @@
1
+ This is a <code>code span <b>with</b> &lt;entities&gt; that should be preserved</code>.
2
+ This is a <code>simple code</code> span.
3
+
4
+ <p>Some <code>&lt;</code></p>
5
+
6
+ <pre>Some very important <b>&lt;</b> thing</pre>
7
+
8
+ <pre><code>Some code<span>&sdot;</span>&sdot;
9
+ </code></pre>
@@ -0,0 +1,7 @@
1
+ <div>
2
+ <!--comment-->
3
+ <!--
4
+ Blah
5
+ Blah
6
+ -->
7
+ </div>
@@ -0,0 +1,8 @@
1
+ <div>
2
+ <!--comment-->
3
+
4
+ <!--
5
+ Blah
6
+ Blah
7
+ -->
8
+ </div>
@@ -0,0 +1 @@
1
+ <p>This is <em>sized<strong>hallo</strong></em>.</p>
@@ -0,0 +1 @@
1
+ This is <em>sized<strong>hallo</strong></em>.
@@ -0,0 +1 @@
1
+ <p>This is *raw* HTML text containing &lt; entities!</p>
@@ -0,0 +1 @@
1
+ <p>This is *raw* HTML text containing &lt; entities!</p>
@@ -0,0 +1,6 @@
1
+ <h1 id="some-headerhere">Some <em class="cls">header</em>here!</h1>
2
+ <h2 id="test">hallo</h2>
3
+ <h3 id="hallo">hallo</h3>
4
+ <h4 id="hallo-1">hallo</h4>
5
+ <h5 id="hallo-2">hallo</h5>
6
+ <h6 id="hallo-3">hallo</h6>
@@ -0,0 +1,2 @@
1
+ :auto_ids: true
2
+ :html_to_native: true