motion-markdown-it 8.4.1.1 → 8.4.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +39 -0
- data/lib/motion-markdown-it.rb +0 -1
- data/lib/motion-markdown-it/common/simpleidn.rb +8 -9
- data/lib/motion-markdown-it/common/utils.rb +7 -3
- data/lib/motion-markdown-it/helpers/parse_link_destination.rb +3 -3
- data/lib/motion-markdown-it/helpers/parse_link_label.rb +1 -1
- data/lib/motion-markdown-it/helpers/parse_link_title.rb +3 -3
- data/lib/motion-markdown-it/rules_block/blockquote.rb +8 -8
- data/lib/motion-markdown-it/rules_block/fence.rb +2 -2
- data/lib/motion-markdown-it/rules_block/heading.rb +4 -4
- data/lib/motion-markdown-it/rules_block/hr.rb +2 -2
- data/lib/motion-markdown-it/rules_block/html_block.rb +2 -1
- data/lib/motion-markdown-it/rules_block/lheading.rb +2 -1
- data/lib/motion-markdown-it/rules_block/list.rb +8 -8
- data/lib/motion-markdown-it/rules_block/reference.rb +13 -13
- data/lib/motion-markdown-it/rules_block/state_block.rb +6 -6
- data/lib/motion-markdown-it/rules_block/table.rb +8 -8
- data/lib/motion-markdown-it/rules_core/linkify.rb +1 -1
- data/lib/motion-markdown-it/rules_core/smartquotes.rb +5 -5
- data/lib/motion-markdown-it/rules_inline/autolink.rb +3 -2
- data/lib/motion-markdown-it/rules_inline/backticks.rb +5 -4
- data/lib/motion-markdown-it/rules_inline/emphasis.rb +1 -1
- data/lib/motion-markdown-it/rules_inline/entity.rb +5 -5
- data/lib/motion-markdown-it/rules_inline/escape.rb +3 -3
- data/lib/motion-markdown-it/rules_inline/html_inline.rb +5 -5
- data/lib/motion-markdown-it/rules_inline/image.rb +8 -8
- data/lib/motion-markdown-it/rules_inline/link.rb +7 -7
- data/lib/motion-markdown-it/rules_inline/newline.rb +4 -4
- data/lib/motion-markdown-it/rules_inline/state_inline.rb +4 -4
- data/lib/motion-markdown-it/rules_inline/strikethrough.rb +1 -1
- data/lib/motion-markdown-it/rules_inline/text.rb +2 -1
- data/lib/motion-markdown-it/version.rb +1 -1
- metadata +3 -4
- data/lib/motion-markdown-it/common/string.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 650922a627efaf3a0b14a2b615a77fa2368f3fa9521aebd02fa8102a9d472c03
|
4
|
+
data.tar.gz: e615b7de9baa7f930d2e69f3e8d6562d4796373e112602cc19b9472d5e4ed628
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13890868afe5b3eb188a35fbcd0042c9334e5047a7e05fe46262ca45cd8bd919442e129856b74dfd8844edf66884899f3c36bf350664cd2e9b057d2d43690985
|
7
|
+
data.tar.gz: 73b64c8811203fb281a8ab9d802ca59ae330b2134d6d2cf0142c8fd20ca526efc97667ef8f080485f4d1e6f4f37813ee45b925df5e661a90f377e561fce636b2
|
data/README.md
CHANGED
@@ -55,6 +55,7 @@ redcarpet 3.4.0 0.0065
|
|
55
55
|
- [Install](#install)
|
56
56
|
- [Usage examples](#usage-examples)
|
57
57
|
- [Plugins](#plugins)
|
58
|
+
- [Upgrading](#upgrading)
|
58
59
|
- [References / Thanks](#references--thanks)
|
59
60
|
- [License](#license)
|
60
61
|
|
@@ -297,6 +298,44 @@ other implementations.
|
|
297
298
|
|
298
299
|
-->
|
299
300
|
|
301
|
+
## Upgrading
|
302
|
+
|
303
|
+
Upgrading to `8.4.1.2` could cause some small breakage if you are using any custom plugins. The [motion-markdown-it-plugins](https://github.com/digitalmoksha/motion-markdown-it-plugins) plugins have already been upgraded.
|
304
|
+
|
305
|
+
#### charCodeAt
|
306
|
+
|
307
|
+
Make sure you have
|
308
|
+
|
309
|
+
```ruby
|
310
|
+
include MarkdownIt::Common::Utils
|
311
|
+
```
|
312
|
+
|
313
|
+
at the top of your plugin file. Then change any references to `charCodeAt`. For example,
|
314
|
+
|
315
|
+
```ruby
|
316
|
+
state.src.charCodeAt(pos)
|
317
|
+
```
|
318
|
+
|
319
|
+
would become
|
320
|
+
|
321
|
+
```ruby
|
322
|
+
charCodeAt(state.src, pos)
|
323
|
+
```
|
324
|
+
|
325
|
+
#### slice_to_end
|
326
|
+
|
327
|
+
`slice_to_end` has been removed. Change references like this
|
328
|
+
|
329
|
+
```ruby
|
330
|
+
state.src.slice_to_end(pos)
|
331
|
+
```
|
332
|
+
|
333
|
+
to
|
334
|
+
|
335
|
+
```ruby
|
336
|
+
state.src[pos..-1]
|
337
|
+
```
|
338
|
+
|
300
339
|
## References / Thanks
|
301
340
|
|
302
341
|
Thanks to the authors of the original implementation in Javascript, [markdown-it](https://github.com/markdown-it/markdown-it):
|
data/lib/motion-markdown-it.rb
CHANGED
@@ -24,7 +24,6 @@ else
|
|
24
24
|
require 'motion-markdown-it/common/utils'
|
25
25
|
require 'motion-markdown-it/common/html_blocks'
|
26
26
|
require 'motion-markdown-it/common/html_re'
|
27
|
-
require 'motion-markdown-it/common/string'
|
28
27
|
require 'motion-markdown-it/common/simpleidn'
|
29
28
|
require 'motion-markdown-it/helpers/parse_link_destination'
|
30
29
|
require 'motion-markdown-it/helpers/parse_link_label'
|
@@ -1,11 +1,6 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
# Borrowed from https://github.com/mmriis/simpleidn
|
3
3
|
#------------------------------------------------------------------------------
|
4
|
-
class Integer
|
5
|
-
def to_utf8_character
|
6
|
-
[self].pack("U*")
|
7
|
-
end
|
8
|
-
end
|
9
4
|
|
10
5
|
module SimpleIDN
|
11
6
|
|
@@ -21,7 +16,11 @@ module SimpleIDN
|
|
21
16
|
SKEW = 38
|
22
17
|
MAXINT = 0x7FFFFFFF
|
23
18
|
|
24
|
-
module_function
|
19
|
+
module_function
|
20
|
+
|
21
|
+
def to_utf8_character(int)
|
22
|
+
[int].pack("U*")
|
23
|
+
end
|
25
24
|
|
26
25
|
# decode_digit(cp) returns the numeric value of a basic code
|
27
26
|
# point (for use in representing integers) in the range 0 to
|
@@ -75,7 +74,7 @@ module SimpleIDN
|
|
75
74
|
# Handle the basic code points: Let basic be the number of input code
|
76
75
|
# points before the last delimiter, or 0 if there is none, then
|
77
76
|
# copy the first basic code points to the output.
|
78
|
-
basic = input.rindex(DELIMITER
|
77
|
+
basic = input.rindex(to_utf8_character(DELIMITER)) || 0
|
79
78
|
|
80
79
|
input.unpack("U*")[0, basic].each do |char|
|
81
80
|
raise(RangeError, "Illegal input >= 0x80") if char >= 0x80
|
@@ -126,7 +125,7 @@ module SimpleIDN
|
|
126
125
|
i %= out
|
127
126
|
|
128
127
|
# Insert n at position i of the output:
|
129
|
-
output.insert(i, n
|
128
|
+
output.insert(i, to_utf8_character(n))
|
130
129
|
i += 1
|
131
130
|
end
|
132
131
|
|
@@ -202,7 +201,7 @@ module SimpleIDN
|
|
202
201
|
delta += 1
|
203
202
|
n += 1
|
204
203
|
end
|
205
|
-
return output.collect {|c| c
|
204
|
+
return output.collect {|c| to_utf8_character(c)}.join
|
206
205
|
end
|
207
206
|
|
208
207
|
end
|
@@ -55,7 +55,11 @@ module MarkdownIt
|
|
55
55
|
def fromCharCode(c)
|
56
56
|
c.chr
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
|
+
#------------------------------------------------------------------------------
|
60
|
+
def charCodeAt(str, ch)
|
61
|
+
str[ch].ord unless str[ch].nil?
|
62
|
+
end
|
59
63
|
|
60
64
|
UNESCAPE_MD_RE = /\\([\!\"\#\$\%\&\'\(\)\*\+\,\-.\/:;<=>?@\[\\\]^_`{|}~])/
|
61
65
|
|
@@ -70,8 +74,8 @@ module MarkdownIt
|
|
70
74
|
|
71
75
|
return fromCodePoint(MarkdownIt::HTMLEntities::MAPPINGS[name]) if MarkdownIt::HTMLEntities::MAPPINGS[name]
|
72
76
|
|
73
|
-
if (
|
74
|
-
code = name[1].downcase == 'x' ? name
|
77
|
+
if (charCodeAt(name, 0) == 0x23 && DIGITAL_ENTITY_TEST_RE =~ name) # '#'
|
78
|
+
code = name[1].downcase == 'x' ? name[2..-1].to_i(16) : name[1..-1].to_i
|
75
79
|
if (isValidEntityCode(code))
|
76
80
|
return fromCodePoint(code)
|
77
81
|
end
|
@@ -11,10 +11,10 @@ module MarkdownIt
|
|
11
11
|
start = pos
|
12
12
|
result = {ok: false, pos: 0, lines: 0, str: ''}
|
13
13
|
|
14
|
-
if (
|
14
|
+
if (charCodeAt(str, pos) == 0x3C ) # <
|
15
15
|
pos += 1
|
16
16
|
while (pos < max)
|
17
|
-
code =
|
17
|
+
code = charCodeAt(str, pos)
|
18
18
|
return result if (code == 0x0A || isSpace(code)) # \n
|
19
19
|
if (code == 0x3E) # >
|
20
20
|
result[:pos] = pos + 1
|
@@ -38,7 +38,7 @@ module MarkdownIt
|
|
38
38
|
|
39
39
|
level = 0
|
40
40
|
while (pos < max)
|
41
|
-
code =
|
41
|
+
code = charCodeAt(str, pos)
|
42
42
|
|
43
43
|
break if (code == 0x20)
|
44
44
|
|
@@ -12,7 +12,7 @@ module MarkdownIt
|
|
12
12
|
|
13
13
|
return result if (pos >= max)
|
14
14
|
|
15
|
-
marker =
|
15
|
+
marker = charCodeAt(str, pos)
|
16
16
|
|
17
17
|
return result if (marker != 0x22 && marker != 0x27 && marker != 0x28) # " ' (
|
18
18
|
|
@@ -22,7 +22,7 @@ module MarkdownIt
|
|
22
22
|
marker = 0x29 if (marker == 0x28)
|
23
23
|
|
24
24
|
while (pos < max)
|
25
|
-
code =
|
25
|
+
code = charCodeAt(str, pos)
|
26
26
|
if (code == marker)
|
27
27
|
result[:pos] = pos + 1
|
28
28
|
result[:lines] = lines
|
@@ -33,7 +33,7 @@ module MarkdownIt
|
|
33
33
|
lines += 1
|
34
34
|
elsif (code == 0x5C && pos + 1 < max) # \
|
35
35
|
pos += 1
|
36
|
-
if (
|
36
|
+
if (charCodeAt(str, pos) == 0x0A)
|
37
37
|
lines += 1
|
38
38
|
end
|
39
39
|
end
|
@@ -15,7 +15,7 @@ module MarkdownIt
|
|
15
15
|
return false if (state.sCount[startLine] - state.blkIndent >= 4)
|
16
16
|
|
17
17
|
# check the block quote marker
|
18
|
-
return false if state.src
|
18
|
+
return false if charCodeAt(state.src, pos) != 0x3E # >
|
19
19
|
pos += 1
|
20
20
|
|
21
21
|
# we know that it's going to be a valid blockquote,
|
@@ -26,7 +26,7 @@ module MarkdownIt
|
|
26
26
|
initial = offset = state.sCount[startLine] + pos - (state.bMarks[startLine] + state.tShift[startLine])
|
27
27
|
|
28
28
|
# skip one optional space after '>'
|
29
|
-
if state.src
|
29
|
+
if charCodeAt(state.src, pos) == 0x20 # space
|
30
30
|
# ' > test '
|
31
31
|
# ^ -- position start of line here:
|
32
32
|
pos += 1
|
@@ -34,7 +34,7 @@ module MarkdownIt
|
|
34
34
|
offset +=1
|
35
35
|
adjustTab = false
|
36
36
|
spaceAfterMarker = true
|
37
|
-
elsif state.src
|
37
|
+
elsif charCodeAt(state.src, pos) == 0x09 # tab
|
38
38
|
spaceAfterMarker = true
|
39
39
|
|
40
40
|
if ((state.bsCount[startLine] + offset) % 4 == 3)
|
@@ -58,7 +58,7 @@ module MarkdownIt
|
|
58
58
|
state.bMarks[startLine] = pos
|
59
59
|
|
60
60
|
while pos < max
|
61
|
-
ch = state.src
|
61
|
+
ch = charCodeAt(state.src, pos)
|
62
62
|
|
63
63
|
if isSpace(ch)
|
64
64
|
if ch == 0x09
|
@@ -128,7 +128,7 @@ module MarkdownIt
|
|
128
128
|
break
|
129
129
|
end
|
130
130
|
|
131
|
-
if state.src
|
131
|
+
if charCodeAt(state.src, pos) == 0x3E && !wasOutdented # >
|
132
132
|
pos += 1
|
133
133
|
# This line is inside the blockquote.
|
134
134
|
|
@@ -136,7 +136,7 @@ module MarkdownIt
|
|
136
136
|
initial = offset = state.sCount[nextLine] + pos - (state.bMarks[nextLine] + state.tShift[nextLine])
|
137
137
|
|
138
138
|
# skip one optional space after '>'
|
139
|
-
if state.src
|
139
|
+
if charCodeAt(state.src, pos) == 0x20 # space
|
140
140
|
# ' > test '
|
141
141
|
# ^ -- position start of line here:
|
142
142
|
pos += 1
|
@@ -144,7 +144,7 @@ module MarkdownIt
|
|
144
144
|
offset += 1
|
145
145
|
adjustTab = false
|
146
146
|
spaceAfterMarker = true
|
147
|
-
elsif state.src
|
147
|
+
elsif charCodeAt(state.src, pos) == 0x09 # tab
|
148
148
|
spaceAfterMarker = true
|
149
149
|
|
150
150
|
if ((state.bsCount[nextLine] + offset) % 4 == 3)
|
@@ -168,7 +168,7 @@ module MarkdownIt
|
|
168
168
|
state.bMarks[nextLine] = pos
|
169
169
|
|
170
170
|
while pos < max
|
171
|
-
ch = state.src
|
171
|
+
ch = charCodeAt(state.src, pos)
|
172
172
|
|
173
173
|
if isSpace(ch)
|
174
174
|
if ch == 0x09
|
@@ -16,7 +16,7 @@ module MarkdownIt
|
|
16
16
|
|
17
17
|
return false if pos + 3 > max
|
18
18
|
|
19
|
-
marker = state.src
|
19
|
+
marker = charCodeAt(state.src, pos)
|
20
20
|
|
21
21
|
if marker != 0x7E && marker != 0x60 # != ~ && != `
|
22
22
|
return false
|
@@ -58,7 +58,7 @@ module MarkdownIt
|
|
58
58
|
break
|
59
59
|
end
|
60
60
|
|
61
|
-
next if state.src
|
61
|
+
next if charCodeAt(state.src, pos) != marker
|
62
62
|
|
63
63
|
if state.sCount[nextLine] - state.blkIndent >= 4
|
64
64
|
# closing fence should be indented less than 4 spaces
|
@@ -13,18 +13,18 @@ module MarkdownIt
|
|
13
13
|
# if it's indented more than 3 spaces, it should be a code block
|
14
14
|
return false if state.sCount[startLine] - state.blkIndent >= 4
|
15
15
|
|
16
|
-
ch = state.src
|
16
|
+
ch = charCodeAt(state.src, pos)
|
17
17
|
|
18
18
|
return false if (ch != 0x23 || pos >= max)
|
19
19
|
|
20
20
|
# count heading level
|
21
21
|
level = 1
|
22
22
|
pos += 1
|
23
|
-
ch = state.src
|
23
|
+
ch = charCodeAt(state.src, pos)
|
24
24
|
while (ch == 0x23 && pos < max && level <= 6) # '#'
|
25
25
|
level += 1
|
26
26
|
pos += 1
|
27
|
-
ch = state.src
|
27
|
+
ch = charCodeAt(state.src, pos)
|
28
28
|
end
|
29
29
|
|
30
30
|
return false if (level > 6 || (pos < max && !isSpace(ch)))
|
@@ -35,7 +35,7 @@ module MarkdownIt
|
|
35
35
|
|
36
36
|
max = state.skipSpacesBack(max, pos)
|
37
37
|
tmp = state.skipCharsBack(max, 0x23, pos) # '#'
|
38
|
-
if (tmp > pos && isSpace(state.src
|
38
|
+
if (tmp > pos && isSpace(charCodeAt(state.src, tmp - 1)))
|
39
39
|
max = tmp
|
40
40
|
end
|
41
41
|
|
@@ -13,7 +13,7 @@ module MarkdownIt
|
|
13
13
|
# if it's indented more than 3 spaces, it should be a code block
|
14
14
|
return false if (state.sCount[startLine] - state.blkIndent >= 4)
|
15
15
|
|
16
|
-
marker = state.src
|
16
|
+
marker = charCodeAt(state.src, pos)
|
17
17
|
pos += 1
|
18
18
|
|
19
19
|
# Check hr marker
|
@@ -27,7 +27,7 @@ module MarkdownIt
|
|
27
27
|
|
28
28
|
cnt = 1
|
29
29
|
while (pos < max)
|
30
|
-
ch = state.src
|
30
|
+
ch = charCodeAt(state.src, pos)
|
31
31
|
pos += 1
|
32
32
|
return false if ch != marker && !isSpace(ch)
|
33
33
|
cnt += 1 if ch == marker
|
@@ -3,6 +3,7 @@
|
|
3
3
|
module MarkdownIt
|
4
4
|
module RulesBlock
|
5
5
|
class HtmlBlock
|
6
|
+
extend Common::Utils
|
6
7
|
|
7
8
|
HTML_OPEN_CLOSE_TAG_RE = MarkdownIt::Common::HtmlRe::HTML_OPEN_CLOSE_TAG_RE
|
8
9
|
|
@@ -28,7 +29,7 @@ module MarkdownIt
|
|
28
29
|
return false if state.sCount[startLine] - state.blkIndent >= 4
|
29
30
|
|
30
31
|
return false if !state.md.options[:html]
|
31
|
-
return false if state.src
|
32
|
+
return false if charCodeAt(state.src, pos) != 0x3C # <
|
32
33
|
|
33
34
|
lineText = state.src.slice(pos...max)
|
34
35
|
|
@@ -3,6 +3,7 @@
|
|
3
3
|
module MarkdownIt
|
4
4
|
module RulesBlock
|
5
5
|
class Lheading
|
6
|
+
extend Common::Utils
|
6
7
|
|
7
8
|
#------------------------------------------------------------------------------
|
8
9
|
def self.lheading(state, startLine, endLine, silent = true)
|
@@ -29,7 +30,7 @@ module MarkdownIt
|
|
29
30
|
max = state.eMarks[nextLine]
|
30
31
|
|
31
32
|
if pos < max
|
32
|
-
marker = state.src
|
33
|
+
marker = charCodeAt(state.src, pos)
|
33
34
|
|
34
35
|
if marker == 0x2D || marker == 0x3D # - or =
|
35
36
|
pos = state.skipChars(pos, marker)
|
@@ -12,7 +12,7 @@ module MarkdownIt
|
|
12
12
|
pos = state.bMarks[startLine] + state.tShift[startLine]
|
13
13
|
max = state.eMarks[startLine]
|
14
14
|
|
15
|
-
marker = state.src
|
15
|
+
marker = charCodeAt(state.src, pos)
|
16
16
|
pos += 1
|
17
17
|
# Check bullet
|
18
18
|
if (marker != 0x2A && # *
|
@@ -22,7 +22,7 @@ module MarkdownIt
|
|
22
22
|
end
|
23
23
|
|
24
24
|
if pos < max
|
25
|
-
ch = state.src
|
25
|
+
ch = charCodeAt(state.src, pos)
|
26
26
|
|
27
27
|
if !isSpace(ch)
|
28
28
|
# " -test " - is not a list item
|
@@ -44,7 +44,7 @@ module MarkdownIt
|
|
44
44
|
# List marker should have at least 2 chars (digit + dot)
|
45
45
|
return -1 if (pos + 1 >= max)
|
46
46
|
|
47
|
-
ch = state.src
|
47
|
+
ch = charCodeAt(state.src, pos)
|
48
48
|
pos += 1
|
49
49
|
|
50
50
|
return -1 if ch.nil?
|
@@ -54,7 +54,7 @@ module MarkdownIt
|
|
54
54
|
# EOL -> fail
|
55
55
|
return -1 if (pos >= max)
|
56
56
|
|
57
|
-
ch = state.src
|
57
|
+
ch = charCodeAt(state.src, pos)
|
58
58
|
pos += 1
|
59
59
|
|
60
60
|
if (ch >= 0x30 && ch <= 0x39) # >= 0 && <= 9
|
@@ -75,7 +75,7 @@ module MarkdownIt
|
|
75
75
|
end
|
76
76
|
|
77
77
|
if pos < max
|
78
|
-
ch = state.src
|
78
|
+
ch = charCodeAt(state.src, pos)
|
79
79
|
|
80
80
|
if !isSpace(ch)
|
81
81
|
# " 1.test " - is not a list item
|
@@ -144,7 +144,7 @@ module MarkdownIt
|
|
144
144
|
end
|
145
145
|
|
146
146
|
# We should terminate list on style change. Remember first one to compare.
|
147
|
-
markerCharCode = state.src
|
147
|
+
markerCharCode = charCodeAt(state.src, posAfterMarker - 1)
|
148
148
|
|
149
149
|
# For validation mode we can terminate immediately
|
150
150
|
return true if (silent)
|
@@ -185,7 +185,7 @@ module MarkdownIt
|
|
185
185
|
initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine])
|
186
186
|
|
187
187
|
while pos < max
|
188
|
-
ch = state.src
|
188
|
+
ch = charCodeAt(state.src, pos)
|
189
189
|
|
190
190
|
if ch == 0x09
|
191
191
|
offset += 4 - (offset + state.bsCount[nextLine]) % 4
|
@@ -288,7 +288,7 @@ module MarkdownIt
|
|
288
288
|
break if (posAfterMarker < 0)
|
289
289
|
end
|
290
290
|
|
291
|
-
break if (markerCharCode != state.src
|
291
|
+
break if (markerCharCode != charCodeAt(state.src, posAfterMarker - 1))
|
292
292
|
end
|
293
293
|
|
294
294
|
# Finalize list
|
@@ -13,16 +13,16 @@ module MarkdownIt
|
|
13
13
|
# if it's indented more than 3 spaces, it should be a code block
|
14
14
|
return false if state.sCount[startLine] - state.blkIndent >= 4
|
15
15
|
|
16
|
-
return false if state.src
|
16
|
+
return false if charCodeAt(state.src, pos) != 0x5B # [
|
17
17
|
|
18
18
|
# Simple check to quickly interrupt scan on [link](url) at the start of line.
|
19
19
|
# Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54
|
20
20
|
pos += 1
|
21
21
|
while (pos < max)
|
22
|
-
if (state.src
|
23
|
-
state.src
|
22
|
+
if (charCodeAt(state.src, pos) == 0x5D && # ]
|
23
|
+
charCodeAt(state.src, pos - 1) != 0x5C) # \
|
24
24
|
return false if (pos + 1 === max)
|
25
|
-
return false if (state.src
|
25
|
+
return false if (charCodeAt(state.src, pos + 1) != 0x3A) # :
|
26
26
|
break
|
27
27
|
end
|
28
28
|
pos += 1
|
@@ -62,7 +62,7 @@ module MarkdownIt
|
|
62
62
|
|
63
63
|
pos = 1
|
64
64
|
while pos < max
|
65
|
-
ch =
|
65
|
+
ch = charCodeAt(str, pos)
|
66
66
|
if (ch == 0x5B ) # [
|
67
67
|
return false
|
68
68
|
elsif (ch == 0x5D) # ]
|
@@ -72,20 +72,20 @@ module MarkdownIt
|
|
72
72
|
lines += 1
|
73
73
|
elsif (ch == 0x5C) # \
|
74
74
|
pos += 1
|
75
|
-
if (pos < max &&
|
75
|
+
if (pos < max && charCodeAt(str, pos) == 0x0A)
|
76
76
|
lines += 1
|
77
77
|
end
|
78
78
|
end
|
79
79
|
pos += 1
|
80
80
|
end
|
81
81
|
|
82
|
-
return false if (labelEnd < 0 ||
|
82
|
+
return false if (labelEnd < 0 || charCodeAt(str, labelEnd + 1) != 0x3A) # :
|
83
83
|
|
84
84
|
# [label]: destination 'title'
|
85
85
|
# ^^^ skip optional whitespace here
|
86
86
|
pos = labelEnd + 2
|
87
87
|
while pos < max
|
88
|
-
ch =
|
88
|
+
ch = charCodeAt(str, pos)
|
89
89
|
if (ch == 0x0A)
|
90
90
|
lines += 1
|
91
91
|
elsif isSpace(ch)
|
@@ -114,7 +114,7 @@ module MarkdownIt
|
|
114
114
|
# ^^^ skipping those spaces
|
115
115
|
start = pos
|
116
116
|
while (pos < max)
|
117
|
-
ch =
|
117
|
+
ch = charCodeAt(str, pos)
|
118
118
|
if (ch == 0x0A)
|
119
119
|
lines += 1
|
120
120
|
elsif isSpace(ch)
|
@@ -139,12 +139,12 @@ module MarkdownIt
|
|
139
139
|
|
140
140
|
# skip trailing spaces until the rest of the line
|
141
141
|
while pos < max
|
142
|
-
ch =
|
142
|
+
ch = charCodeAt(str, pos)
|
143
143
|
break if !isSpace(ch)
|
144
144
|
pos += 1
|
145
145
|
end
|
146
146
|
|
147
|
-
if (pos < max &&
|
147
|
+
if (pos < max && charCodeAt(str, pos) != 0x0A)
|
148
148
|
if (title)
|
149
149
|
# garbage at the end of the line after title,
|
150
150
|
# but it could still be a valid reference if we roll back
|
@@ -152,14 +152,14 @@ module MarkdownIt
|
|
152
152
|
pos = destEndPos
|
153
153
|
lines = destEndLineNo
|
154
154
|
while pos < max
|
155
|
-
ch =
|
155
|
+
ch = charCodeAt(str, pos)
|
156
156
|
break if !isSpace(ch)
|
157
157
|
pos += 1
|
158
158
|
end
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
|
-
if (pos < max &&
|
162
|
+
if (pos < max && charCodeAt(str, pos) != 0x0A)
|
163
163
|
# garbage at the end of the line
|
164
164
|
return false
|
165
165
|
end
|
@@ -63,7 +63,7 @@ module MarkdownIt
|
|
63
63
|
start = pos = indent = offset = 0
|
64
64
|
len = s.length
|
65
65
|
while pos < len
|
66
|
-
ch =
|
66
|
+
ch = charCodeAt(s, pos)
|
67
67
|
|
68
68
|
if !indent_found
|
69
69
|
if isSpace(ch)
|
@@ -140,7 +140,7 @@ module MarkdownIt
|
|
140
140
|
def skipSpaces(pos)
|
141
141
|
max = @src.length
|
142
142
|
while pos < max
|
143
|
-
ch = @src
|
143
|
+
ch = charCodeAt(@src, pos)
|
144
144
|
break if !isSpace(ch)
|
145
145
|
pos += 1
|
146
146
|
end
|
@@ -153,7 +153,7 @@ module MarkdownIt
|
|
153
153
|
return pos if pos <= min
|
154
154
|
|
155
155
|
while (pos > min)
|
156
|
-
return pos + 1 if !isSpace(@src
|
156
|
+
return pos + 1 if !isSpace(charCodeAt(@src, pos -= 1))
|
157
157
|
end
|
158
158
|
return pos
|
159
159
|
end
|
@@ -163,7 +163,7 @@ module MarkdownIt
|
|
163
163
|
def skipChars(pos, code)
|
164
164
|
max = @src.length
|
165
165
|
while pos < max
|
166
|
-
break if (@src
|
166
|
+
break if (charCodeAt(@src, pos) != code)
|
167
167
|
pos += 1
|
168
168
|
end
|
169
169
|
return pos
|
@@ -175,7 +175,7 @@ module MarkdownIt
|
|
175
175
|
return pos if pos <= min
|
176
176
|
|
177
177
|
while (pos > min)
|
178
|
-
return (pos + 1) if code != @src
|
178
|
+
return (pos + 1) if code != charCodeAt(@src, pos -= 1)
|
179
179
|
end
|
180
180
|
return pos
|
181
181
|
end
|
@@ -202,7 +202,7 @@ module MarkdownIt
|
|
202
202
|
end
|
203
203
|
|
204
204
|
while first < last && lineIndent < indent
|
205
|
-
ch = @src
|
205
|
+
ch = charCodeAt(@src, first)
|
206
206
|
|
207
207
|
if isSpace(ch)
|
208
208
|
if ch === 0x09
|
@@ -23,7 +23,7 @@ module MarkdownIt
|
|
23
23
|
backTicked = false
|
24
24
|
lastBackTick = 0
|
25
25
|
|
26
|
-
ch =
|
26
|
+
ch = charCodeAt(str, pos)
|
27
27
|
|
28
28
|
while (pos < max)
|
29
29
|
if ch == 0x60 # `
|
@@ -54,10 +54,10 @@ module MarkdownIt
|
|
54
54
|
backTicked = false
|
55
55
|
pos = lastBackTick + 1
|
56
56
|
end
|
57
|
-
ch =
|
57
|
+
ch = charCodeAt(str, pos)
|
58
58
|
end
|
59
59
|
|
60
|
-
result.push(str
|
60
|
+
result.push(str[lastPos..-1])
|
61
61
|
|
62
62
|
return result
|
63
63
|
end
|
@@ -82,12 +82,12 @@ module MarkdownIt
|
|
82
82
|
pos = state.bMarks[nextLine] + state.tShift[nextLine]
|
83
83
|
return false if (pos >= state.eMarks[nextLine])
|
84
84
|
|
85
|
-
ch = state.src
|
85
|
+
ch = charCodeAt(state.src, pos)
|
86
86
|
pos += 1
|
87
87
|
return false if (ch != 0x7C && ch != 0x2D && ch != 0x3A) # | or - or :
|
88
88
|
|
89
89
|
while pos < state.eMarks[nextLine]
|
90
|
-
ch = state.src
|
90
|
+
ch = charCodeAt(state.src, pos)
|
91
91
|
return false if (ch != 0x7C && ch != 0x2D && ch != 0x3A && !isSpace(ch)) # | or - or :
|
92
92
|
|
93
93
|
pos += 1
|
@@ -110,9 +110,9 @@ module MarkdownIt
|
|
110
110
|
end
|
111
111
|
|
112
112
|
return false if (/^:?-+:?$/ =~ t).nil?
|
113
|
-
if (
|
114
|
-
aligns.push(
|
115
|
-
elsif (
|
113
|
+
if (charCodeAt(t, t.length - 1) == 0x3A) # ':'
|
114
|
+
aligns.push(charCodeAt(t, 0) == 0x3A ? 'center' : 'right')
|
115
|
+
elsif (charCodeAt(t, 0) == 0x3A)
|
116
116
|
aligns.push('left')
|
117
117
|
else
|
118
118
|
aligns.push('')
|
@@ -11,7 +11,7 @@ module MarkdownIt
|
|
11
11
|
|
12
12
|
#------------------------------------------------------------------------------
|
13
13
|
def self.replaceAt(str, index, ch)
|
14
|
-
return str[0, index] + ch + str
|
14
|
+
return str[0, index] + ch + str[(index + 1)..-1]
|
15
15
|
end
|
16
16
|
|
17
17
|
#------------------------------------------------------------------------------
|
@@ -55,13 +55,13 @@ module MarkdownIt
|
|
55
55
|
lastChar = 0x20
|
56
56
|
|
57
57
|
if t.begin(0) - 1 >= 0
|
58
|
-
lastChar =
|
58
|
+
lastChar = charCodeAt(text, t.begin(0) - 1)
|
59
59
|
else
|
60
60
|
(i - 1).downto(0) do |j|
|
61
61
|
break if tokens[j].type == 'softbreak' || tokens[j].type == 'hardbreak' # lastChar defaults to 0x20
|
62
62
|
next if tokens[j].type != 'text'
|
63
63
|
|
64
|
-
lastChar = tokens[j].content
|
64
|
+
lastChar = charCodeAt(tokens[j].content, tokens[j].content.length - 1)
|
65
65
|
break
|
66
66
|
end
|
67
67
|
end
|
@@ -72,13 +72,13 @@ module MarkdownIt
|
|
72
72
|
nextChar = 0x20
|
73
73
|
|
74
74
|
if pos < max
|
75
|
-
nextChar =
|
75
|
+
nextChar = charCodeAt(text, pos)
|
76
76
|
else
|
77
77
|
(i + 1).upto(tokens.length - 1) do |j|
|
78
78
|
break if tokens[j].type == 'softbreak' || tokens[j].type == 'hardbreak' # nextChar defaults to 0x20
|
79
79
|
next if tokens[j].type != 'text'
|
80
80
|
|
81
|
-
nextChar = tokens[j].content
|
81
|
+
nextChar = charCodeAt(tokens[j].content, 0)
|
82
82
|
break
|
83
83
|
end
|
84
84
|
end
|
@@ -3,6 +3,7 @@
|
|
3
3
|
module MarkdownIt
|
4
4
|
module RulesInline
|
5
5
|
class Autolink
|
6
|
+
extend Common::Utils
|
6
7
|
|
7
8
|
EMAIL_RE = /^<([a-zA-Z0-9.!#$\%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/
|
8
9
|
AUTOLINK_RE = /^<([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)>/
|
@@ -11,9 +12,9 @@ module MarkdownIt
|
|
11
12
|
def self.autolink(state, silent)
|
12
13
|
pos = state.pos
|
13
14
|
|
14
|
-
return false if (state.src
|
15
|
+
return false if (charCodeAt(state.src, pos) != 0x3C) # <
|
15
16
|
|
16
|
-
tail = state.src
|
17
|
+
tail = state.src[pos..-1]
|
17
18
|
|
18
19
|
return false if !tail.include?('>')
|
19
20
|
|
@@ -3,19 +3,20 @@
|
|
3
3
|
module MarkdownIt
|
4
4
|
module RulesInline
|
5
5
|
class Backticks
|
6
|
+
extend Common::Utils
|
6
7
|
|
7
8
|
#------------------------------------------------------------------------------
|
8
9
|
def self.backtick(state, silent)
|
9
10
|
pos = state.pos
|
10
|
-
ch = state.src
|
11
|
+
ch = charCodeAt(state.src, pos)
|
11
12
|
|
12
|
-
return false if (ch != 0x60) # `
|
13
|
+
return false if (ch != 0x60) # `
|
13
14
|
|
14
15
|
start = pos
|
15
16
|
pos += 1
|
16
17
|
max = state.posMax
|
17
18
|
|
18
|
-
while (pos < max && state.src
|
19
|
+
while (pos < max && charCodeAt(state.src, pos) == 0x60) # `
|
19
20
|
pos += 1
|
20
21
|
end
|
21
22
|
|
@@ -26,7 +27,7 @@ module MarkdownIt
|
|
26
27
|
while ((matchStart = state.src.index('`', matchEnd)) != nil)
|
27
28
|
matchEnd = matchStart + 1
|
28
29
|
|
29
|
-
while (matchEnd < max && state.src
|
30
|
+
while (matchEnd < max && charCodeAt(state.src, matchEnd) == 0x60) # `
|
30
31
|
matchEnd += 1
|
31
32
|
end
|
32
33
|
|
@@ -14,23 +14,23 @@ module MarkdownIt
|
|
14
14
|
pos = state.pos
|
15
15
|
max = state.posMax
|
16
16
|
|
17
|
-
return false if state.src
|
17
|
+
return false if charCodeAt(state.src, pos) != 0x26 # &
|
18
18
|
|
19
19
|
if pos + 1 < max
|
20
|
-
ch = state.src
|
20
|
+
ch = charCodeAt(state.src, pos + 1)
|
21
21
|
|
22
22
|
if ch == 0x23 # '#'
|
23
|
-
match = state.src
|
23
|
+
match = state.src[pos..-1].match(DIGITAL_RE)
|
24
24
|
if match
|
25
25
|
if !silent
|
26
|
-
code = match[1][0].downcase == 'x' ? match[1]
|
26
|
+
code = match[1][0].downcase == 'x' ? match[1][1..-1].to_i(16) : match[1].to_i
|
27
27
|
state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD)
|
28
28
|
end
|
29
29
|
state.pos += match[0].length
|
30
30
|
return true
|
31
31
|
end
|
32
32
|
else
|
33
|
-
match = state.src
|
33
|
+
match = state.src[pos..-1].match(NAMED_RE)
|
34
34
|
if match
|
35
35
|
if MarkdownIt::HTMLEntities::MAPPINGS[match[1]]
|
36
36
|
state.pending += fromCodePoint(MarkdownIt::HTMLEntities::MAPPINGS[match[1]]) if !silent
|
@@ -17,12 +17,12 @@ module MarkdownIt
|
|
17
17
|
pos = state.pos
|
18
18
|
max = state.posMax
|
19
19
|
|
20
|
-
return false if state.src
|
20
|
+
return false if charCodeAt(state.src, pos) != 0x5C # \
|
21
21
|
|
22
22
|
pos += 1
|
23
23
|
|
24
24
|
if pos < max
|
25
|
-
ch = state.src
|
25
|
+
ch = charCodeAt(state.src, pos)
|
26
26
|
|
27
27
|
if ch < 256 && ESCAPED[ch] != 0
|
28
28
|
state.pending += state.src[pos] if !silent
|
@@ -38,7 +38,7 @@ module MarkdownIt
|
|
38
38
|
pos += 1
|
39
39
|
# skip leading whitespaces from next line
|
40
40
|
while pos < max
|
41
|
-
ch = state.src
|
41
|
+
ch = charCodeAt(state.src, pos)
|
42
42
|
break if !isSpace(ch)
|
43
43
|
pos += 1
|
44
44
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# Process html tags
|
2
2
|
#------------------------------------------------------------------------------
|
3
3
|
module MarkdownIt
|
4
|
-
|
5
4
|
module RulesInline
|
6
5
|
class HtmlInline
|
6
|
+
extend Common::Utils
|
7
7
|
include MarkdownIt::Common::HtmlRe
|
8
|
-
|
8
|
+
|
9
9
|
#------------------------------------------------------------------------------
|
10
10
|
def self.isLetter(ch)
|
11
11
|
lc = ch | 0x20 # to lower case
|
@@ -20,12 +20,12 @@ module MarkdownIt
|
|
20
20
|
|
21
21
|
# Check start
|
22
22
|
max = state.posMax
|
23
|
-
if (state.src
|
23
|
+
if (charCodeAt(state.src, pos) != 0x3C || pos + 2 >= max) # <
|
24
24
|
return false
|
25
25
|
end
|
26
26
|
|
27
27
|
# Quick fail on second char
|
28
|
-
ch = state.src
|
28
|
+
ch = charCodeAt(state.src, pos + 1)
|
29
29
|
if (ch != 0x21 && # !
|
30
30
|
ch != 0x3F && # ?
|
31
31
|
ch != 0x2F && # /
|
@@ -33,7 +33,7 @@ module MarkdownIt
|
|
33
33
|
return false
|
34
34
|
end
|
35
35
|
|
36
|
-
match = state.src
|
36
|
+
match = state.src[pos..-1].match(HTML_TAG_RE)
|
37
37
|
return false if !match
|
38
38
|
|
39
39
|
if !silent
|
@@ -11,8 +11,8 @@ module MarkdownIt
|
|
11
11
|
oldPos = state.pos
|
12
12
|
max = state.posMax
|
13
13
|
|
14
|
-
return false if (state.src
|
15
|
-
return false if (state.src
|
14
|
+
return false if (charCodeAt(state.src, state.pos) != 0x21) # !
|
15
|
+
return false if (charCodeAt(state.src, state.pos + 1) != 0x5B) # [
|
16
16
|
|
17
17
|
labelStart = state.pos + 2
|
18
18
|
labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false)
|
@@ -21,7 +21,7 @@ module MarkdownIt
|
|
21
21
|
return false if (labelEnd < 0)
|
22
22
|
|
23
23
|
pos = labelEnd + 1
|
24
|
-
if (pos < max && state.src
|
24
|
+
if (pos < max && charCodeAt(state.src, pos) == 0x28) # (
|
25
25
|
#
|
26
26
|
# Inline link
|
27
27
|
#
|
@@ -30,7 +30,7 @@ module MarkdownIt
|
|
30
30
|
# ^^ skipping these spaces
|
31
31
|
pos += 1
|
32
32
|
while pos < max
|
33
|
-
code = state.src
|
33
|
+
code = charCodeAt(state.src, pos)
|
34
34
|
break if (!isSpace(code) && code != 0x0A)
|
35
35
|
pos += 1
|
36
36
|
end
|
@@ -53,7 +53,7 @@ module MarkdownIt
|
|
53
53
|
# ^^ skipping these spaces
|
54
54
|
start = pos
|
55
55
|
while pos < max
|
56
|
-
code = state.src
|
56
|
+
code = charCodeAt(state.src, pos)
|
57
57
|
break if (!isSpace(code) && code != 0x0A)
|
58
58
|
pos += 1
|
59
59
|
end
|
@@ -68,7 +68,7 @@ module MarkdownIt
|
|
68
68
|
# [link]( <href> "title" )
|
69
69
|
# ^^ skipping these spaces
|
70
70
|
while pos < max
|
71
|
-
code = state.src
|
71
|
+
code = charCodeAt(state.src, pos);
|
72
72
|
break if (!isSpace(code) && code != 0x0A)
|
73
73
|
pos += 1
|
74
74
|
end
|
@@ -76,7 +76,7 @@ module MarkdownIt
|
|
76
76
|
title = ''
|
77
77
|
end
|
78
78
|
|
79
|
-
if (pos >= max || state.src
|
79
|
+
if (pos >= max || charCodeAt(state.src, pos) != 0x29) # )
|
80
80
|
state.pos = oldPos
|
81
81
|
return false
|
82
82
|
end
|
@@ -87,7 +87,7 @@ module MarkdownIt
|
|
87
87
|
#
|
88
88
|
return false if state.env[:references].nil?
|
89
89
|
|
90
|
-
if (pos < max && state.src
|
90
|
+
if (pos < max && charCodeAt(state.src, pos) == 0x5B) # [
|
91
91
|
start = pos + 1
|
92
92
|
pos = state.md.helpers.parseLinkLabel(state, pos)
|
93
93
|
if (pos >= 0)
|
@@ -13,7 +13,7 @@ module MarkdownIt
|
|
13
13
|
start = state.pos
|
14
14
|
parseReference = true
|
15
15
|
|
16
|
-
return false if (state.src
|
16
|
+
return false if (charCodeAt(state.src, state.pos) != 0x5B) # [
|
17
17
|
|
18
18
|
labelStart = state.pos + 1
|
19
19
|
labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true)
|
@@ -22,7 +22,7 @@ module MarkdownIt
|
|
22
22
|
return false if (labelEnd < 0)
|
23
23
|
|
24
24
|
pos = labelEnd + 1
|
25
|
-
if (pos < max && state.src
|
25
|
+
if (pos < max && charCodeAt(state.src, pos) == 0x28) # (
|
26
26
|
#
|
27
27
|
# Inline link
|
28
28
|
#
|
@@ -34,7 +34,7 @@ module MarkdownIt
|
|
34
34
|
# ^^ skipping these spaces
|
35
35
|
pos += 1
|
36
36
|
while pos < max
|
37
|
-
code = state.src
|
37
|
+
code = charCodeAt(state.src, pos)
|
38
38
|
break if (!isSpace(code) && code != 0x0A)
|
39
39
|
pos += 1
|
40
40
|
end
|
@@ -57,7 +57,7 @@ module MarkdownIt
|
|
57
57
|
# ^^ skipping these spaces
|
58
58
|
start = pos
|
59
59
|
while pos < max
|
60
|
-
code = state.src
|
60
|
+
code = charCodeAt(state.src, pos)
|
61
61
|
break if (!isSpace(code) && code != 0x0A)
|
62
62
|
pos += 1
|
63
63
|
end
|
@@ -72,7 +72,7 @@ module MarkdownIt
|
|
72
72
|
# [link]( <href> "title" )
|
73
73
|
# ^^ skipping these spaces
|
74
74
|
while pos < max
|
75
|
-
code = state.src
|
75
|
+
code = charCodeAt(state.src, pos)
|
76
76
|
break if (!isSpace(code) && code != 0x0A)
|
77
77
|
pos += 1
|
78
78
|
end
|
@@ -80,7 +80,7 @@ module MarkdownIt
|
|
80
80
|
title = ''
|
81
81
|
end
|
82
82
|
|
83
|
-
if (pos >= max || state.src
|
83
|
+
if (pos >= max || charCodeAt(state.src, pos) != 0x29) # )
|
84
84
|
# parsing a valid shortcut link failed, fallback to reference
|
85
85
|
parseReference = true
|
86
86
|
end
|
@@ -93,7 +93,7 @@ module MarkdownIt
|
|
93
93
|
#
|
94
94
|
return false if state.env[:references].nil?
|
95
95
|
|
96
|
-
if (pos < max && state.src
|
96
|
+
if (pos < max && charCodeAt(state.src, pos) == 0x5B) # [
|
97
97
|
start = pos + 1
|
98
98
|
pos = state.md.helpers.parseLinkLabel(state, pos)
|
99
99
|
if (pos >= 0)
|
@@ -8,7 +8,7 @@ module MarkdownIt
|
|
8
8
|
#------------------------------------------------------------------------------
|
9
9
|
def self.newline(state, silent)
|
10
10
|
pos = state.pos
|
11
|
-
return false if state.src
|
11
|
+
return false if charCodeAt(state.src, pos) != 0x0A # \n
|
12
12
|
|
13
13
|
pmax = state.pending.length - 1
|
14
14
|
max = state.posMax
|
@@ -18,8 +18,8 @@ module MarkdownIt
|
|
18
18
|
# Pending string is stored in concat mode, indexed lookups will cause
|
19
19
|
# convertion to flat mode.
|
20
20
|
if !silent
|
21
|
-
if pmax >= 0 && state.pending
|
22
|
-
if pmax >= 1 && state.pending
|
21
|
+
if pmax >= 0 && charCodeAt(state.pending, pmax) == 0x20
|
22
|
+
if pmax >= 1 && charCodeAt(state.pending, pmax - 1) == 0x20
|
23
23
|
state.pending = state.pending.sub(/ +$/, '')
|
24
24
|
state.push('hardbreak', 'br', 0)
|
25
25
|
else
|
@@ -35,7 +35,7 @@ module MarkdownIt
|
|
35
35
|
pos += 1
|
36
36
|
|
37
37
|
# skip heading spaces for next line
|
38
|
-
while pos < max && isSpace(state.src
|
38
|
+
while pos < max && isSpace(charCodeAt(state.src, pos))
|
39
39
|
pos += 1
|
40
40
|
end
|
41
41
|
|
@@ -65,19 +65,19 @@ module MarkdownIt
|
|
65
65
|
left_flanking = true
|
66
66
|
right_flanking = true
|
67
67
|
max = @posMax
|
68
|
-
marker = @src
|
68
|
+
marker = charCodeAt(@src, start)
|
69
69
|
|
70
70
|
# treat beginning of the line as a whitespace
|
71
|
-
lastChar = start > 0 ? @src
|
71
|
+
lastChar = start > 0 ? charCodeAt(@src, start - 1) : 0x20
|
72
72
|
|
73
|
-
while (pos < max && @src
|
73
|
+
while (pos < max && charCodeAt(@src, pos) == marker)
|
74
74
|
pos += 1
|
75
75
|
end
|
76
76
|
|
77
77
|
count = pos - start
|
78
78
|
|
79
79
|
# treat end of the line as a whitespace
|
80
|
-
nextChar = pos < max ? @src
|
80
|
+
nextChar = pos < max ? charCodeAt(@src, pos) : 0x20
|
81
81
|
|
82
82
|
isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(fromCodePoint(lastChar))
|
83
83
|
isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(fromCodePoint(nextChar))
|
@@ -9,7 +9,7 @@ module MarkdownIt
|
|
9
9
|
#------------------------------------------------------------------------------
|
10
10
|
def self.tokenize(state, silent)
|
11
11
|
start = state.pos
|
12
|
-
marker = state.src
|
12
|
+
marker = charCodeAt(state.src, start)
|
13
13
|
|
14
14
|
return false if silent
|
15
15
|
|
@@ -4,6 +4,7 @@
|
|
4
4
|
module MarkdownIt
|
5
5
|
module RulesInline
|
6
6
|
class Text
|
7
|
+
extend Common::Utils
|
7
8
|
|
8
9
|
# Rule to skip pure text
|
9
10
|
# '{}$%@~+=:' reserved for extentions
|
@@ -48,7 +49,7 @@ module MarkdownIt
|
|
48
49
|
def self.text(state, silent)
|
49
50
|
pos = state.pos
|
50
51
|
|
51
|
-
while pos < state.posMax && !self.isTerminatorChar(state.src
|
52
|
+
while pos < state.posMax && !self.isTerminatorChar(charCodeAt(state.src, pos))
|
52
53
|
pos += 1
|
53
54
|
end
|
54
55
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion-markdown-it
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.4.1.
|
4
|
+
version: 8.4.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brett Walker
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2019-06-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: mdurl-rb
|
@@ -80,7 +80,6 @@ files:
|
|
80
80
|
- lib/motion-markdown-it/common/html_blocks.rb
|
81
81
|
- lib/motion-markdown-it/common/html_re.rb
|
82
82
|
- lib/motion-markdown-it/common/simpleidn.rb
|
83
|
-
- lib/motion-markdown-it/common/string.rb
|
84
83
|
- lib/motion-markdown-it/common/utils.rb
|
85
84
|
- lib/motion-markdown-it/helpers/helper_wrapper.rb
|
86
85
|
- lib/motion-markdown-it/helpers/parse_link_destination.rb
|
@@ -158,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
158
157
|
version: '0'
|
159
158
|
requirements: []
|
160
159
|
rubyforge_project:
|
161
|
-
rubygems_version: 2.6
|
160
|
+
rubygems_version: 2.7.6
|
162
161
|
signing_key:
|
163
162
|
specification_version: 4
|
164
163
|
summary: Ruby version markdown-it
|
@@ -1,14 +0,0 @@
|
|
1
|
-
class String
|
2
|
-
|
3
|
-
# grab the remainder of the string starting at 'start'
|
4
|
-
#------------------------------------------------------------------------------
|
5
|
-
def slice_to_end(start)
|
6
|
-
self.slice(start...self.length)
|
7
|
-
end
|
8
|
-
|
9
|
-
# port of Javascript function charCodeAt
|
10
|
-
#------------------------------------------------------------------------------
|
11
|
-
def charCodeAt(ch)
|
12
|
-
self[ch].ord unless self[ch].nil?
|
13
|
-
end
|
14
|
-
end
|