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.
- data/CONTRIBUTERS +4 -0
- data/ChangeLog +671 -0
- data/README +10 -0
- data/Rakefile +40 -23
- data/VERSION +1 -1
- data/data/kramdown/document.html +1 -1
- data/data/kramdown/document.latex +10 -5
- data/doc/default.less.css +52 -10
- data/doc/default.template +4 -0
- data/doc/documentation.page +72 -0
- data/doc/index.page +8 -41
- data/doc/installation.page +6 -6
- data/doc/links.markdown +2 -0
- data/doc/quickref.page +6 -2
- data/doc/syntax.page +8 -7
- data/doc/tests.page +1 -2
- data/lib/kramdown.rb +1 -1
- data/lib/kramdown/compatibility.rb +1 -1
- data/lib/kramdown/converter.rb +8 -3
- data/lib/kramdown/converter/base.rb +27 -5
- data/lib/kramdown/converter/html.rb +26 -28
- data/lib/kramdown/converter/latex.rb +29 -15
- data/lib/kramdown/document.rb +15 -8
- data/lib/kramdown/error.rb +1 -1
- data/lib/kramdown/options.rb +21 -13
- data/lib/kramdown/parser.rb +9 -3
- data/lib/kramdown/parser/base.rb +95 -0
- data/lib/kramdown/parser/html.rb +387 -0
- data/lib/kramdown/parser/kramdown.rb +11 -56
- data/lib/kramdown/parser/kramdown/attribute_list.rb +1 -1
- data/lib/kramdown/parser/kramdown/autolink.rb +1 -1
- data/lib/kramdown/parser/kramdown/blank_line.rb +1 -1
- data/lib/kramdown/parser/kramdown/blockquote.rb +1 -1
- data/lib/kramdown/parser/kramdown/codeblock.rb +1 -1
- data/lib/kramdown/parser/kramdown/codespan.rb +1 -1
- data/lib/kramdown/parser/kramdown/emphasis.rb +1 -1
- data/lib/kramdown/parser/kramdown/eob.rb +1 -1
- data/lib/kramdown/parser/kramdown/escaped_chars.rb +1 -1
- data/lib/kramdown/parser/kramdown/extension.rb +2 -90
- data/lib/kramdown/parser/kramdown/footnote.rb +1 -1
- data/lib/kramdown/parser/kramdown/header.rb +1 -1
- data/lib/kramdown/parser/kramdown/horizontal_rule.rb +1 -1
- data/lib/kramdown/parser/kramdown/html.rb +69 -149
- data/lib/kramdown/parser/kramdown/html_entity.rb +4 -4
- data/lib/kramdown/parser/kramdown/line_break.rb +1 -1
- data/lib/kramdown/parser/kramdown/link.rb +2 -2
- data/lib/kramdown/parser/kramdown/list.rb +2 -6
- data/lib/kramdown/parser/kramdown/math.rb +3 -3
- data/lib/kramdown/parser/kramdown/paragraph.rb +1 -1
- data/lib/kramdown/parser/kramdown/smart_quotes.rb +3 -2
- data/lib/kramdown/parser/kramdown/table.rb +3 -2
- data/lib/kramdown/parser/kramdown/typographic_symbol.rb +7 -3
- data/lib/kramdown/version.rb +2 -2
- data/man/man1/kramdown.1 +19 -0
- data/test/run_tests.rb +1 -0
- data/test/test_files.rb +68 -7
- data/test/testcases/block/09_html/comment.html +5 -0
- data/test/testcases/block/09_html/comment.text +3 -0
- data/test/testcases/block/09_html/content_model/tables.html +2 -2
- data/test/testcases/block/09_html/html_to_native/code.html +10 -0
- data/test/testcases/block/09_html/html_to_native/code.text +9 -0
- data/test/testcases/block/09_html/html_to_native/comment.html +7 -0
- data/test/testcases/block/09_html/html_to_native/comment.text +8 -0
- data/test/testcases/block/09_html/html_to_native/emphasis.html +1 -0
- data/test/testcases/block/09_html/html_to_native/emphasis.text +1 -0
- data/test/testcases/block/09_html/html_to_native/entity.html +1 -0
- data/test/testcases/block/09_html/html_to_native/entity.text +1 -0
- data/test/testcases/block/09_html/html_to_native/header.html +6 -0
- data/test/testcases/block/09_html/html_to_native/header.options +2 -0
- data/test/testcases/block/09_html/html_to_native/header.text +6 -0
- data/test/testcases/block/09_html/html_to_native/list_dl.html +8 -0
- data/test/testcases/block/09_html/html_to_native/list_dl.text +8 -0
- data/test/testcases/block/09_html/html_to_native/list_ol.html +15 -0
- data/test/testcases/block/09_html/html_to_native/list_ol.text +17 -0
- data/test/testcases/block/09_html/html_to_native/list_ul.html +19 -0
- data/test/testcases/block/09_html/html_to_native/list_ul.text +22 -0
- data/test/testcases/block/09_html/html_to_native/options +1 -0
- data/test/testcases/block/09_html/html_to_native/paragraph.html +3 -0
- data/test/testcases/block/09_html/html_to_native/paragraph.text +4 -0
- data/test/testcases/block/09_html/html_to_native/table_normal.html +13 -0
- data/test/testcases/block/09_html/html_to_native/table_normal.text +12 -0
- data/test/testcases/block/09_html/html_to_native/table_simple.html +10 -0
- data/test/testcases/block/09_html/html_to_native/table_simple.text +14 -0
- data/test/testcases/block/09_html/html_to_native/typography.html +1 -0
- data/test/testcases/block/09_html/html_to_native/typography.text +1 -0
- data/test/testcases/block/09_html/parse_as_raw.html +3 -5
- data/test/testcases/block/09_html/parse_as_raw.text +0 -1
- data/test/testcases/span/04_footnote/definitions.latex +18 -0
- data/test/testcases/span/04_footnote/footnote_nr.latex +6 -0
- data/test/testcases/span/04_footnote/markers.latex +32 -0
- data/test/testcases/span/05_html/invalid.html +1 -0
- data/test/testcases/span/05_html/invalid.text +1 -0
- 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
|
#
|
@@ -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(:
|
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], :
|
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], :
|
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
|
#
|
@@ -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(:
|
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], ['...', :
|
27
|
+
TYPOGRAPHIC_SYMS = [['---', :mdash], ['--', :ndash], ['...', :hellip],
|
28
28
|
['\\<<', '<<'], ['\\>>', '>>'],
|
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
|
-
|
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, '--|\\.\\.\\.|(?:\\\\| )?(?:<<|>>)')
|
data/lib/kramdown/version.rb
CHANGED
@@ -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.
|
26
|
+
VERSION = '0.8.0'
|
27
27
|
|
28
28
|
end
|
data/man/man1/kramdown.1
CHANGED
@@ -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
|
data/test/run_tests.rb
CHANGED
@@ -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
|
data/test/test_files.rb
CHANGED
@@ -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
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
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
|
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<p>This is a <code>code span with <entities> that should be preserved</code>.
|
2
|
+
This is a <code>simple code</code> span.</p>
|
3
|
+
|
4
|
+
<p>Some <code><</code></p>
|
5
|
+
|
6
|
+
<pre><code>Some very important < thing
|
7
|
+
</code></pre>
|
8
|
+
|
9
|
+
<pre><code>Some code⋅⋅
|
10
|
+
</code></pre>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
This is a <code>code span <b>with</b> <entities> that should be preserved</code>.
|
2
|
+
This is a <code>simple code</code> span.
|
3
|
+
|
4
|
+
<p>Some <code><</code></p>
|
5
|
+
|
6
|
+
<pre>Some very important <b><</b> thing</pre>
|
7
|
+
|
8
|
+
<pre><code>Some code<span>⋅</span>⋅
|
9
|
+
</code></pre>
|
@@ -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 < entities!</p>
|
@@ -0,0 +1 @@
|
|
1
|
+
<p>This is *raw* HTML text containing < entities!</p>
|