kramdown 2.1.0 → 2.2.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.
- checksums.yaml +4 -4
- data/CONTRIBUTERS +11 -3
- data/VERSION +1 -1
- data/lib/kramdown/converter/base.rb +2 -1
- data/lib/kramdown/converter/html.rb +22 -14
- data/lib/kramdown/converter/kramdown.rb +9 -4
- data/lib/kramdown/converter/math_engine/mathjax.rb +7 -33
- data/lib/kramdown/converter/syntax_highlighter.rb +1 -1
- data/lib/kramdown/element.rb +16 -0
- data/lib/kramdown/options.rb +35 -8
- data/lib/kramdown/parser/base.rb +3 -1
- data/lib/kramdown/parser/html.rb +8 -8
- data/lib/kramdown/parser/kramdown.rb +8 -1
- data/lib/kramdown/parser/kramdown/autolink.rb +2 -2
- data/lib/kramdown/parser/kramdown/codespan.rb +12 -2
- data/lib/kramdown/parser/kramdown/emphasis.rb +1 -1
- data/lib/kramdown/parser/kramdown/header.rb +1 -1
- data/lib/kramdown/parser/kramdown/html.rb +2 -2
- data/lib/kramdown/parser/kramdown/list.rb +36 -9
- data/lib/kramdown/parser/kramdown/math.rb +1 -1
- data/lib/kramdown/parser/kramdown/table.rb +2 -2
- data/lib/kramdown/utils/html.rb +7 -0
- data/lib/kramdown/version.rb +1 -1
- data/man/man1/kramdown.1 +7 -0
- data/test/test_files.rb +12 -11
- data/test/testcases/block/04_header/atx_header.html +6 -0
- data/test/testcases/block/04_header/atx_header.text +6 -0
- data/test/testcases/block/09_html/standalone_image_in_div.htmlinput +7 -0
- data/test/testcases/block/09_html/standalone_image_in_div.text +8 -0
- data/test/testcases/block/12_extension/options.html +4 -4
- data/test/testcases/block/12_extension/options2.html +4 -4
- data/test/testcases/block/14_table/table_with_footnote.html +4 -4
- data/test/testcases/block/15_math/gh_128.html +1 -2
- data/test/testcases/block/15_math/normal.html +16 -15
- data/test/testcases/block/16_toc/toc_exclude.html +1 -1
- data/test/testcases/block/16_toc/toc_levels.html +1 -1
- data/test/testcases/block/16_toc/toc_with_footnotes.html +5 -5
- data/test/testcases/block/16_toc/toc_with_links.html +1 -1
- data/test/testcases/cjk-line-break.html +4 -0
- data/test/testcases/cjk-line-break.options +1 -0
- data/test/testcases/cjk-line-break.text +12 -0
- data/test/testcases/span/02_emphasis/normal.html +4 -0
- data/test/testcases/span/02_emphasis/normal.text +4 -0
- data/test/testcases/span/04_footnote/backlink_inline.html +21 -21
- data/test/testcases/span/04_footnote/backlink_text.html +4 -4
- data/test/testcases/span/04_footnote/footnote_nr.html +6 -6
- data/test/testcases/span/04_footnote/footnote_prefix.html +6 -6
- data/test/testcases/span/04_footnote/inside_footnote.html +9 -9
- data/test/testcases/span/04_footnote/markers.html +16 -16
- data/test/testcases/span/04_footnote/placement.html +4 -4
- data/test/testcases/span/04_footnote/regexp_problem.html +4 -4
- data/test/testcases/span/04_footnote/without_backlink.html +3 -3
- data/test/testcases/span/abbreviations/in_footnote.html +4 -4
- data/test/testcases/span/math/normal.html +4 -4
- metadata +22 -13
- data/test/testcases/block/15_math/mathjax_preview.html +0 -4
- data/test/testcases/block/15_math/mathjax_preview.options +0 -2
- data/test/testcases/block/15_math/mathjax_preview.text +0 -5
- data/test/testcases/block/15_math/mathjax_preview_as_code.html +0 -4
- data/test/testcases/block/15_math/mathjax_preview_as_code.options +0 -3
- data/test/testcases/block/15_math/mathjax_preview_as_code.text +0 -5
- data/test/testcases/block/15_math/mathjax_preview_simple.html +0 -4
- data/test/testcases/block/15_math/mathjax_preview_simple.options +0 -2
- data/test/testcases/block/15_math/mathjax_preview_simple.text +0 -5
@@ -79,6 +79,8 @@ module Kramdown
|
|
79
79
|
@span_parsers = [:emphasis, :codespan, :autolink, :span_html, :footnote_marker, :link,
|
80
80
|
:smart_quotes, :inline_math, :span_extensions, :html_entity,
|
81
81
|
:typographic_syms, :line_break, :escaped_chars]
|
82
|
+
|
83
|
+
@span_pattern_cache ||= Hash.new { |h, k| h[k] = {} }
|
82
84
|
end
|
83
85
|
private_class_method(:new, :allocate)
|
84
86
|
|
@@ -195,6 +197,11 @@ module Kramdown
|
|
195
197
|
end.flatten!
|
196
198
|
end
|
197
199
|
|
200
|
+
def span_pattern_cache(stop_re, span_start)
|
201
|
+
@span_pattern_cache[stop_re][span_start] ||= /(?=#{Regexp.union(stop_re, span_start)})/
|
202
|
+
end
|
203
|
+
private :span_pattern_cache
|
204
|
+
|
198
205
|
# Parse all span-level elements in the source string of @src into +el+.
|
199
206
|
#
|
200
207
|
# If the parameter +stop_re+ (a regexp) is used, parsing is immediately stopped if the regexp
|
@@ -213,7 +220,7 @@ module Kramdown
|
|
213
220
|
span_start, span_start_re = span_parser_regexps(parsers) if parsers
|
214
221
|
parsers ||= @span_parsers
|
215
222
|
|
216
|
-
used_re = (stop_re.nil? ? span_start_re :
|
223
|
+
used_re = (stop_re.nil? ? span_start_re : span_pattern_cache(stop_re, span_start))
|
217
224
|
stop_re_found = false
|
218
225
|
while !@src.eos? && !stop_re_found
|
219
226
|
if (result = @src.scan_until(used_re))
|
@@ -11,8 +11,8 @@ module Kramdown
|
|
11
11
|
module Parser
|
12
12
|
class Kramdown
|
13
13
|
|
14
|
-
ACHARS = '[[:alnum:]]_'
|
15
|
-
AUTOLINK_START_STR = "<((mailto|https?|ftps?):.+?|[
|
14
|
+
ACHARS = '[[:alnum:]]-_.'
|
15
|
+
AUTOLINK_START_STR = "<((mailto|https?|ftps?):.+?|[#{ACHARS}]+?@[#{ACHARS}]+?)>"
|
16
16
|
AUTOLINK_START = /#{AUTOLINK_START_STR}/u
|
17
17
|
|
18
18
|
# Parse the autolink at the current location.
|
@@ -25,8 +25,18 @@ module Kramdown
|
|
25
25
|
return
|
26
26
|
end
|
27
27
|
|
28
|
-
|
29
|
-
|
28
|
+
# assign static regex to avoid allocating the same on every instance
|
29
|
+
# where +result+ equals a single-backtick. Interpolate otherwise.
|
30
|
+
if result == '`'
|
31
|
+
scan_pattern = /`/
|
32
|
+
str_sub_pattern = /`\Z/
|
33
|
+
else
|
34
|
+
scan_pattern = /#{result}/
|
35
|
+
str_sub_pattern = /#{result}\Z/
|
36
|
+
end
|
37
|
+
|
38
|
+
if (text = @src.scan_until(scan_pattern))
|
39
|
+
text.sub!(str_sub_pattern, '')
|
30
40
|
unless simple
|
31
41
|
text = text[1..-1] if text[0..0] == ' '
|
32
42
|
text = text[0..-2] if text[-1..-1] == ' '
|
@@ -22,7 +22,7 @@ module Kramdown
|
|
22
22
|
element = (result.length == 2 ? :strong : :em)
|
23
23
|
type = result[0..0]
|
24
24
|
|
25
|
-
if (type == '_' && @src.pre_match =~ /[[:alpha:]
|
25
|
+
if (type == '_' && @src.pre_match =~ /[[:alpha:]]-?[[:alpha:]]*\z/) || @src.check(/\s/) ||
|
26
26
|
@tree.type == element || @stack.any? {|el, _| el.type == element }
|
27
27
|
add_text(result)
|
28
28
|
return
|
@@ -31,7 +31,7 @@ module Kramdown
|
|
31
31
|
def parse_atx_header
|
32
32
|
return false unless after_block_boundary?
|
33
33
|
text, id = parse_header_contents
|
34
|
-
text.sub!(/
|
34
|
+
text.sub!(/(?<!\\)#+\z/, '') && text.rstrip!
|
35
35
|
return false if text.empty?
|
36
36
|
add_header(@src["level"].length, text, id)
|
37
37
|
true
|
@@ -79,12 +79,12 @@ module Kramdown
|
|
79
79
|
@src.scan(TRAILING_WHITESPACE)
|
80
80
|
true
|
81
81
|
else
|
82
|
-
if @src.check(/^#{OPT_SPACE}#{HTML_TAG_RE}/) && !HTML_SPAN_ELEMENTS.include?(@src[1].downcase)
|
82
|
+
if @src.check(/^#{OPT_SPACE}#{HTML_TAG_RE}/o) && !HTML_SPAN_ELEMENTS.include?(@src[1].downcase)
|
83
83
|
@src.pos += @src.matched_size
|
84
84
|
handle_html_start_tag(line, &method(:handle_kramdown_html_tag))
|
85
85
|
Kramdown::Parser::Html::ElementConverter.convert(@root, @tree.children.last) if @options[:html_to_native]
|
86
86
|
true
|
87
|
-
elsif @src.check(/^#{OPT_SPACE}#{HTML_TAG_CLOSE_RE}/) && !HTML_SPAN_ELEMENTS.include?(@src[1].downcase)
|
87
|
+
elsif @src.check(/^#{OPT_SPACE}#{HTML_TAG_CLOSE_RE}/o) && !HTML_SPAN_ELEMENTS.include?(@src[1].downcase)
|
88
88
|
name = @src[1].downcase
|
89
89
|
|
90
90
|
if @tree.type == :html_element && @tree.value == name
|
@@ -44,8 +44,10 @@ module Kramdown
|
|
44
44
|
[content, indentation, *PARSE_FIRST_LIST_LINE_REGEXP_CACHE[indentation]]
|
45
45
|
end
|
46
46
|
|
47
|
-
|
48
|
-
|
47
|
+
PATTERN_TAIL = /[\t| ].*?\n/
|
48
|
+
|
49
|
+
LIST_START_UL = /^(#{OPT_SPACE}[+*-])(#{PATTERN_TAIL})/
|
50
|
+
LIST_START_OL = /^(#{OPT_SPACE}\d+\.)(#{PATTERN_TAIL})/
|
49
51
|
LIST_START = /#{LIST_START_UL}|#{LIST_START_OL}/
|
50
52
|
|
51
53
|
# Parse the ordered or unordered list at the current location.
|
@@ -77,11 +79,7 @@ module Kramdown
|
|
77
79
|
''
|
78
80
|
end
|
79
81
|
|
80
|
-
list_start_re =
|
81
|
-
/^( {0,#{[3, indentation - 1].min}}[+*-])([\t| ].*?\n)/
|
82
|
-
else
|
83
|
-
/^( {0,#{[3, indentation - 1].min}}\d+\.)([\t| ].*?\n)/
|
84
|
-
end
|
82
|
+
list_start_re = fetch_pattern(type, indentation)
|
85
83
|
nested_list_found = (item.value =~ LIST_START)
|
86
84
|
last_is_blank = false
|
87
85
|
item.value = [item.value]
|
@@ -148,7 +146,7 @@ module Kramdown
|
|
148
146
|
end
|
149
147
|
define_parser(:list, LIST_START)
|
150
148
|
|
151
|
-
DEFINITION_LIST_START = /^(#{OPT_SPACE}:)(
|
149
|
+
DEFINITION_LIST_START = /^(#{OPT_SPACE}:)(#{PATTERN_TAIL})/
|
152
150
|
|
153
151
|
# Parse the ordered or unordered list at the current location.
|
154
152
|
def parse_definition_list
|
@@ -198,7 +196,7 @@ module Kramdown
|
|
198
196
|
''
|
199
197
|
end
|
200
198
|
|
201
|
-
def_start_re =
|
199
|
+
def_start_re = fetch_pattern(:dl, indentation)
|
202
200
|
first_as_para = false
|
203
201
|
last_is_blank = false
|
204
202
|
elsif @src.check(EOB_MARKER)
|
@@ -252,6 +250,35 @@ module Kramdown
|
|
252
250
|
end
|
253
251
|
define_parser(:definition_list, DEFINITION_LIST_START)
|
254
252
|
|
253
|
+
private
|
254
|
+
|
255
|
+
# precomputed patterns for indentations 1..4 and fallback expression
|
256
|
+
# to compute pattern when indentation is outside the 1..4 range.
|
257
|
+
def fetch_pattern(type, indentation)
|
258
|
+
if type == :ul
|
259
|
+
case indentation
|
260
|
+
when 1 then %r/^( {0}[+*-])(#{PATTERN_TAIL})/o
|
261
|
+
when 2 then %r/^( {0,1}[+*-])(#{PATTERN_TAIL})/o
|
262
|
+
when 3 then %r/^( {0,2}[+*-])(#{PATTERN_TAIL})/o
|
263
|
+
else %r/^( {0,3}[+*-])(#{PATTERN_TAIL})/o
|
264
|
+
end
|
265
|
+
elsif type == :ol
|
266
|
+
case indentation
|
267
|
+
when 1 then %r/^( {0}\d+\.)(#{PATTERN_TAIL})/o
|
268
|
+
when 2 then %r/^( {0,1}\d+\.)(#{PATTERN_TAIL})/o
|
269
|
+
when 3 then %r/^( {0,2}\d+\.)(#{PATTERN_TAIL})/o
|
270
|
+
else %r/^( {0,3}\d+\.)(#{PATTERN_TAIL})/o
|
271
|
+
end
|
272
|
+
elsif type == :dl
|
273
|
+
case indentation
|
274
|
+
when 1 then %r/^( {0}:)(#{PATTERN_TAIL})/o
|
275
|
+
when 2 then %r/^( {0,1}:)(#{PATTERN_TAIL})/o
|
276
|
+
when 3 then %r/^( {0,2}:)(#{PATTERN_TAIL})/o
|
277
|
+
else %r/^( {0,3}:)(#{PATTERN_TAIL})/o
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
255
282
|
end
|
256
283
|
end
|
257
284
|
end
|
@@ -132,8 +132,8 @@ module Kramdown
|
|
132
132
|
pipe_on_line = false
|
133
133
|
end
|
134
134
|
else
|
135
|
-
break if lines.size > 1 && !pipe_on_line && lines.first !~ /^#{TABLE_PIPE_CHECK}/
|
136
|
-
pipe_on_line = (lines.size > 1 ? false : pipe_on_line) || (lines.last =~ /^#{TABLE_PIPE_CHECK}/)
|
135
|
+
break if lines.size > 1 && !pipe_on_line && lines.first !~ /^#{TABLE_PIPE_CHECK}/o
|
136
|
+
pipe_on_line = (lines.size > 1 ? false : pipe_on_line) || (lines.last =~ /^#{TABLE_PIPE_CHECK}/o)
|
137
137
|
end
|
138
138
|
end
|
139
139
|
@src.revert_pos(saved_pos) and return false unless pipe_on_line
|
data/lib/kramdown/utils/html.rb
CHANGED
@@ -68,6 +68,13 @@ module Kramdown
|
|
68
68
|
str.gsub(ESCAPE_RE_FROM_TYPE[type]) {|m| ESCAPE_MAP[m] || m }
|
69
69
|
end
|
70
70
|
|
71
|
+
REDUNDANT_LINE_BREAK_REGEX = /([\p{Han}\p{Hiragana}\p{Katakana}]+)\n([\p{Han}\p{Hiragana}\p{Katakana}]+)/u
|
72
|
+
def fix_cjk_line_break(str)
|
73
|
+
while str.gsub!(REDUNDANT_LINE_BREAK_REGEX, '\1\2')
|
74
|
+
end
|
75
|
+
str
|
76
|
+
end
|
77
|
+
|
71
78
|
end
|
72
79
|
|
73
80
|
end
|
data/lib/kramdown/version.rb
CHANGED
data/man/man1/kramdown.1
CHANGED
@@ -214,6 +214,13 @@ If this option is \fBtrue\fP, the RemoveHtmlTags converter removes block HTML ta
|
|
214
214
|
Default: true Used by: RemoveHtmlTags converter
|
215
215
|
.RE
|
216
216
|
.TP
|
217
|
+
\fB\-\-[no\-]remove\-line\-breaks\-for\-cjk\fP
|
218
|
+
Specifies whether line breaks should be removed between CJK characters
|
219
|
+
.RS
|
220
|
+
.P
|
221
|
+
Default: false Used by: HTML converter
|
222
|
+
.RE
|
223
|
+
.TP
|
217
224
|
\fB\-\-[no\-]remove\-span\-html\-tags\fP
|
218
225
|
Remove span HTML tags
|
219
226
|
.RS
|
data/test/test_files.rb
CHANGED
@@ -11,6 +11,7 @@ require 'minitest/autorun'
|
|
11
11
|
require 'kramdown'
|
12
12
|
require 'yaml'
|
13
13
|
require 'tmpdir'
|
14
|
+
require 'open3'
|
14
15
|
|
15
16
|
begin
|
16
17
|
require 'kramdown/converter/syntax_highlighter/rouge'
|
@@ -111,14 +112,10 @@ class TestFiles < Minitest::Test
|
|
111
112
|
end
|
112
113
|
|
113
114
|
def tidy_output(out)
|
114
|
-
cmd = "tidy -q --doctype omit
|
115
|
-
result =
|
116
|
-
|
117
|
-
|
118
|
-
io.read
|
119
|
-
end
|
120
|
-
if $?.exitstatus == 2
|
121
|
-
raise "Problem using tidy"
|
115
|
+
cmd = "tidy -q --doctype omit -utf8"
|
116
|
+
result, error, status = Open3.capture3(cmd, stdin_data: out)
|
117
|
+
if status.exitstatus == 2
|
118
|
+
raise "Problem using tidy: #{error}"
|
122
119
|
end
|
123
120
|
result
|
124
121
|
end
|
@@ -136,6 +133,7 @@ class TestFiles < Minitest::Test
|
|
136
133
|
'test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.text',
|
137
134
|
'test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.text',
|
138
135
|
'test/testcases/block/03_paragraph/standalone_image.text', # bc of standalone image
|
136
|
+
'test/testcases/cjk-line-break.text', # latex unicode support
|
139
137
|
].compact
|
140
138
|
Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |text_file|
|
141
139
|
next if EXCLUDE_LATEX_FILES.any? {|f| text_file =~ /#{f}$/ }
|
@@ -180,6 +178,8 @@ class TestFiles < Minitest::Test
|
|
180
178
|
'test/testcases/block/09_html/xml.text', # bc of tidy
|
181
179
|
'test/testcases/span/05_html/xml.text', # bc of tidy
|
182
180
|
'test/testcases/block/03_paragraph/standalone_image.text', # bc of standalone image
|
181
|
+
'test/testcases/cjk-line-break.text',
|
182
|
+
'test/testcases/block/09_html/standalone_image_in_div.html', # bc of standalone image
|
183
183
|
].compact
|
184
184
|
Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |text_file|
|
185
185
|
next if EXCLUDE_TEXT_FILES.any? {|f| text_file =~ /#{f}$/ }
|
@@ -222,14 +222,15 @@ class TestFiles < Minitest::Test
|
|
222
222
|
'test/testcases/block/16_toc/toc_exclude.html', # bc of different attribute ordering
|
223
223
|
'test/testcases/span/autolinks/url_links.html', # bc of quot entity being converted to char
|
224
224
|
'test/testcases/block/14_table/empty_tag_in_cell.html', # bc of tidy
|
225
|
-
'test/testcases/block/15_math/mathjax_preview.html', # bc of mathjax preview
|
226
|
-
'test/testcases/block/15_math/mathjax_preview_simple.html', # bc of mathjax preview
|
227
|
-
'test/testcases/block/15_math/mathjax_preview_as_code.html', # bc of mathjax preview
|
228
225
|
'test/testcases/span/01_link/link_defs_with_ial.html', # bc of attribute ordering
|
229
226
|
'test/testcases/span/05_html/mark_element.html', # bc of tidy
|
230
227
|
'test/testcases/block/09_html/xml.html', # bc of tidy
|
231
228
|
'test/testcases/span/05_html/xml.html', # bc of tidy
|
232
229
|
'test/testcases/block/03_paragraph/standalone_image.html', # bc of standalone image
|
230
|
+
'test/testcases/block/15_math/normal.html', # bc of mathjax and HTML parser
|
231
|
+
'test/testcases/block/15_math/gh_128.html', # bc of mathjax and HTML parser
|
232
|
+
'test/testcases/span/04_footnote/backlink_inline.html', # bc of mathjax
|
233
|
+
'test/testcases/block/09_html/standalone_image_in_div.html', # bc of standalone image
|
233
234
|
].compact
|
234
235
|
Dir[File.dirname(__FILE__) + '/testcases/**/*.html'].each do |html_file|
|
235
236
|
next if EXCLUDE_HTML_KD_FILES.any? {|f| html_file =~ /#{f}$/ }
|
@@ -10,12 +10,12 @@ some <span>*para*</span>
|
|
10
10
|
<p>some <span><em>para</em></span></p>
|
11
11
|
</div>
|
12
12
|
|
13
|
-
<p>Some text<sup id="fnref:ab"><a href="#fn:ab" class="footnote">10</a></sup>.</p>
|
13
|
+
<p>Some text<sup id="fnref:ab" role="doc-noteref"><a href="#fn:ab" class="footnote">10</a></sup>.</p>
|
14
14
|
|
15
|
-
<div class="footnotes">
|
15
|
+
<div class="footnotes" role="doc-endnotes">
|
16
16
|
<ol start="10">
|
17
|
-
<li id="fn:ab">
|
18
|
-
<p>Some text. <a href="#fnref:ab" class="reversefootnote">↩</a></p>
|
17
|
+
<li id="fn:ab" role="doc-endnote">
|
18
|
+
<p>Some text. <a href="#fnref:ab" class="reversefootnote" role="doc-backlink">↩</a></p>
|
19
19
|
</li>
|
20
20
|
</ol>
|
21
21
|
</div>
|
@@ -1,10 +1,10 @@
|
|
1
1
|
|
2
|
-
<p>Some text<sup id="fnref:ab"><a href="#fn:ab" class="footnote">1</a></sup>.</p>
|
2
|
+
<p>Some text<sup id="fnref:ab" role="doc-noteref"><a href="#fn:ab" class="footnote">1</a></sup>.</p>
|
3
3
|
|
4
|
-
<div class="footnotes">
|
4
|
+
<div class="footnotes" role="doc-endnotes">
|
5
5
|
<ol>
|
6
|
-
<li id="fn:ab">
|
7
|
-
<p>Some text. <a href="#fnref:ab" class="reversefootnote">↩</a></p>
|
6
|
+
<li id="fn:ab" role="doc-endnote">
|
7
|
+
<p>Some text. <a href="#fnref:ab" class="reversefootnote" role="doc-backlink">↩</a></p>
|
8
8
|
</li>
|
9
9
|
</ol>
|
10
10
|
</div>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<table>
|
2
2
|
<tbody>
|
3
3
|
<tr>
|
4
|
-
<td>this is <sup id="fnref:1"><a href="#fn:1" class="footnote">1</a></sup></td>
|
4
|
+
<td>this is <sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote">1</a></sup></td>
|
5
5
|
<td>a table</td>
|
6
6
|
</tr>
|
7
7
|
<tr>
|
@@ -11,15 +11,15 @@
|
|
11
11
|
</tbody>
|
12
12
|
</table>
|
13
13
|
|
14
|
-
<div class="footnotes">
|
14
|
+
<div class="footnotes" role="doc-endnotes">
|
15
15
|
<ol>
|
16
|
-
<li id="fn:1">
|
16
|
+
<li id="fn:1" role="doc-endnote">
|
17
17
|
<p>Something</p>
|
18
18
|
|
19
19
|
<blockquote>
|
20
20
|
<p>special here</p>
|
21
21
|
</blockquote>
|
22
|
-
<p><a href="#fnref:1" class="reversefootnote">↩</a></p>
|
22
|
+
<p><a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
|
23
23
|
</li>
|
24
24
|
</ol>
|
25
25
|
</div>
|
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
alert('a') alert('b<') %]]></script>
|
1
|
+
\[<script>alert('a')</script> <script>alert('b<')</script>\]
|
@@ -1,29 +1,30 @@
|
|
1
1
|
<p>This is a para.
|
2
|
-
|
2
|
+
\(\text{LaTeX} \lambda_5\)</p>
|
3
3
|
|
4
|
-
|
4
|
+
\[\lambda_5 = \alpha + 4\]
|
5
5
|
|
6
|
-
<p
|
6
|
+
<p>\(\lambda_\alpha > 5\)
|
7
7
|
This is a para.</p>
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
\end{align*} %]]></script>
|
9
|
+
\[\begin{align*}
|
10
|
+
&=5 \\
|
11
|
+
&=6 \\
|
12
|
+
\end{align*}\]
|
14
13
|
|
15
|
-
|
14
|
+
\[5+5\]
|
16
15
|
|
17
|
-
|
16
|
+
\[5+5\]
|
18
17
|
|
19
|
-
|
18
|
+
\[5+5\]
|
20
19
|
|
21
|
-
|
20
|
+
\[5+5\]
|
22
21
|
|
23
22
|
<pre><code>$$5+5$$
|
24
23
|
</code></pre>
|
25
24
|
|
26
|
-
<
|
27
|
-
|
25
|
+
<div class="cls">\[5+5\]
|
26
|
+
</div>
|
27
|
+
<div class="cls">\[5+5\]
|
28
|
+
</div>
|
28
29
|
|
29
|
-
|
30
|
+
\[|x| = 5\]
|