motion-markdown-it 12.0.6 → 12.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 74ae9a8bfdbc637f5e2127d34919298661b7d4f32b55830053a0c30012cd1ddf
4
- data.tar.gz: 5787ec92937c5e8ef19fead547c0fae14b0de4507c0098cb5e8a79720dab611e
3
+ metadata.gz: c31536746654ba78827fdf56f400de64e4b70bb1e459c7bbd610febaaf1074b3
4
+ data.tar.gz: 80e94ade9943fe02ce4c3b153ff002ddbaca3239d632f3cce74e4724182b7527
5
5
  SHA512:
6
- metadata.gz: 72214978791be3e608c627bfa80db56a1ca30df9650a1df85bef0c2a99fb68b822a1464261595779f16385a9e69cf9898fbd15966ba5e00ad969d4a0568c028a
7
- data.tar.gz: 5e2ede784f3386d45b930789abb2c0a05ee8bc2dffb707d736c437e48fe722b9084dc75f2032bea6a8d47b723d0daac43428fb059e1ac1f7c6fa92dfad4a83e7
6
+ metadata.gz: 0f2566c0fcae8a7ee85f0c7be95440429c643dbc3e7d1d7b94b67bb5deeedbabb4553c81ba566db87087b5c058516420b0a9c45e29b85467baaa5875a7476fab
7
+ data.tar.gz: 89fe0c6e543efb1eb11f0186e346fbe31f2e714745ee8272ca75e953e1a6fb7796e19754d97fcc67d5b0d3e01fc8731a8a46a03ea8eaacb598e3e690a7720c27
data/README.md CHANGED
@@ -7,7 +7,7 @@ Ruby/RubyMotion version of Markdown-it (CommonMark compliant and extendable)
7
7
 
8
8
  This gem is a port of the [markdown-it Javascript package](https://github.com/markdown-it/markdown-it) by Vitaly Puzrin and Alex Kocharin.
9
9
 
10
- _Currently synced with markdown-it 12.0.6_
10
+ _Currently synced with markdown-it 12.3.2_
11
11
 
12
12
  ---
13
13
 
@@ -185,7 +185,7 @@ var md = require('markdown-it')({
185
185
  highlight: function (str, lang) {
186
186
  if (lang && hljs.getLanguage(lang)) {
187
187
  try {
188
- return hljs.highlight(lang, str).value;
188
+ return hljs.highlight(str, { language: lang }).value;
189
189
  } catch (__) {}
190
190
  }
191
191
 
@@ -205,7 +205,7 @@ var md = require('markdown-it')({
205
205
  if (lang && hljs.getLanguage(lang)) {
206
206
  try {
207
207
  return '<pre class="hljs"><code>' +
208
- hljs.highlight(lang, str, true).value +
208
+ hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +
209
209
  '</code></pre>';
210
210
  } catch (__) {}
211
211
  }
@@ -190,7 +190,7 @@ module MarkdownIt
190
190
  # highlight: function (str, lang) {
191
191
  # if (lang && hljs.getLanguage(lang)) {
192
192
  # try {
193
- # return hljs.highlight(lang, str, true).value;
193
+ # return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;
194
194
  # } catch (__) {}
195
195
  # }
196
196
  #
@@ -210,7 +210,7 @@ module MarkdownIt
210
210
  # if (lang && hljs.getLanguage(lang)) {
211
211
  # try {
212
212
  # return '<pre class="hljs"><code>' +
213
- # hljs.highlight(lang, str, true).value +
213
+ # hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +
214
214
  # '</code></pre>';
215
215
  # } catch (__) {}
216
216
  # }
@@ -245,7 +245,7 @@ module MarkdownIt
245
245
 
246
246
 
247
247
  # Renderer.renderInline(tokens, options, env) -> String
248
- # - tokens (Array): list on block tokens to renter
248
+ # - tokens (Array): list on block tokens to render
249
249
  # - options (Object): params of parser instance
250
250
  # - env (Object): additional data from parsed input (references, for example)
251
251
  #
@@ -271,7 +271,7 @@ module MarkdownIt
271
271
 
272
272
  # internal
273
273
  # Renderer.renderInlineAsText(tokens, options, env) -> String
274
- # - tokens (Array): list on block tokens to renter
274
+ # - tokens (Array): list on block tokens to render
275
275
  # - options (Object): params of parser instance
276
276
  # - env (Object): additional data from parsed input (references, for example)
277
277
  #
@@ -297,7 +297,7 @@ module MarkdownIt
297
297
 
298
298
 
299
299
  # Renderer.render(tokens, options, env) -> String
300
- # - tokens (Array): list on block tokens to renter
300
+ # - tokens (Array): list on block tokens to render
301
301
  # - options (Object): params of parser instance
302
302
  # - env (Object): additional data from parsed input (references, for example)
303
303
  #
@@ -26,7 +26,7 @@ module MarkdownIt
26
26
  state.line = last
27
27
 
28
28
  token = state.push('code_block', 'code', 0)
29
- token.content = state.getLines(startLine, last, 4 + state.blkIndent, true)
29
+ token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + "\n"
30
30
  token.map = [ startLine, state.line ]
31
31
  return true
32
32
  end
@@ -11,7 +11,7 @@ module MarkdownIt
11
11
  # last argument defines whether it can terminate a paragraph or not
12
12
  #
13
13
  HTML_SEQUENCES = [
14
- [ /^<(script|pre|style)(?=(\s|>|$))/i, /<\/(script|pre|style)>/i, true ],
14
+ [ /^<(script|pre|style|textarea)(?=(\s|>|$))/i, /<\/(script|pre|style|textarea)>/i, true ],
15
15
  [ /^<!--/, /-->/, true ],
16
16
  [ /^<\?/, /\?>/, true ],
17
17
  [ /^<![A-Z]/, />/, true ],
@@ -129,7 +129,7 @@ module MarkdownIt
129
129
  # This code can fail if plugins use blkIndent as well as lists,
130
130
  # but I hope the spec gets fixed long before that happens.
131
131
  #
132
- if state.tShift[startLine] >= state.blkIndent
132
+ if state.sCount[startLine] >= state.blkIndent
133
133
  isTerminatingParagraph = true
134
134
  end
135
135
  end
@@ -138,7 +138,7 @@ module MarkdownIt
138
138
  if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0)
139
139
  isOrdered = true
140
140
  start = state.bMarks[startLine] + state.tShift[startLine]
141
- markerValue = state.src[start, posAfterMarker - start - 1].to_i
141
+ markerValue = state.src[start, posAfterMarker - 1].to_i
142
142
 
143
143
  # If we're starting a new ordered list right after
144
144
  # a paragraph, it should start with 1.
@@ -231,6 +231,9 @@ module MarkdownIt
231
231
  token = state.push('list_item_open', 'li', 1)
232
232
  token.markup = markerCharCode.chr
233
233
  token.map = itemLines = [ startLine, 0 ]
234
+ if (isOrdered)
235
+ token.info = state.src.slice(start...posAfterMarker - 1)
236
+ end
234
237
 
235
238
  # change current state, then restore it after parser subcall
236
239
  oldTight = state.tight
@@ -307,6 +310,7 @@ module MarkdownIt
307
310
  if (isOrdered)
308
311
  posAfterMarker = skipOrderedListMarker(state, nextLine)
309
312
  break if (posAfterMarker < 0)
313
+ start = state.bMarks[nextLine] + state.tShift[nextLine]
310
314
  else
311
315
  posAfterMarker = skipBulletListMarker(state, nextLine)
312
316
  break if (posAfterMarker < 0)
@@ -9,9 +9,28 @@ module MarkdownIt
9
9
  openersBottom = {}
10
10
  max = delimiters.length
11
11
 
12
+ return if (!max)
13
+
14
+ # headerIdx is the first delimiter of the current (where closer is) delimiter run
15
+ headerIdx = 0
16
+ lastTokenIdx = -2 # needs any value lower than -1
17
+ jumps = []
18
+
12
19
  0.upto(max - 1) do |closerIdx|
13
20
  closer = delimiters[closerIdx]
14
21
 
22
+ jumps.push(0)
23
+
24
+ # markers belong to same delimiter run if:
25
+ # - they have adjacent tokens
26
+ # - AND markers are the same
27
+ #
28
+ if (delimiters[headerIdx][:marker] != closer[:marker] || lastTokenIdx != closer[:token] - 1)
29
+ headerIdx = closerIdx
30
+ end
31
+
32
+ lastTokenIdx = closer[:token]
33
+
15
34
  # Length is only used for emphasis-specific "rule of 3",
16
35
  # if it's not defined (in strikethrough or 3rd party plugins),
17
36
  # we can default it to 0 to disable those checks.
@@ -21,24 +40,23 @@ module MarkdownIt
21
40
  next if (!closer[:close])
22
41
 
23
42
  # Previously calculated lower bounds (previous fails)
24
- # for each marker and each delimiter length modulo 3.
43
+ # for each marker, each delimiter length modulo 3,
44
+ # and for whether this closer can be an opener;
45
+ # https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460
25
46
  unless openersBottom[closer[:marker]]
26
- openersBottom[closer[:marker]] = [ -1, -1, -1 ]
47
+ openersBottom[closer[:marker]] = [ -1, -1, -1, -1, -1, -1 ]
27
48
  end
28
49
 
29
- minOpenerIdx = openersBottom[closer[:marker]][closer[:length] % 3]
50
+ minOpenerIdx = openersBottom[closer[:marker]][(closer[:open] ? 3 : 0) + (closer[:length] % 3)]
30
51
 
31
- openerIdx = closerIdx - closer[:jump] - 1
32
-
33
- # avoid crash if `closer.jump` is pointing outside of the array, see #742
34
- openerIdx = -1 if (openerIdx < -1)
52
+ openerIdx = headerIdx - jumps[headerIdx] - 1
35
53
 
36
54
  newMinOpenerIdx = openerIdx
37
55
 
38
56
  while openerIdx > minOpenerIdx
39
57
  opener = delimiters[openerIdx]
40
58
 
41
- (openerIdx -= opener[:jump] + 1) && next if (opener[:marker] != closer[:marker])
59
+ (openerIdx -= jumps[openerIdx] + 1) && next if (opener[:marker] != closer[:marker])
42
60
 
43
61
  if (opener[:open] && opener[:end] < 0)
44
62
 
@@ -65,19 +83,23 @@ module MarkdownIt
65
83
  # sure algorithm has linear complexity (see *_*_*_*_*_... case).
66
84
  #
67
85
  lastJump = openerIdx > 0 && !delimiters[openerIdx - 1][:open] ?
68
- delimiters[openerIdx - 1][:jump] + 1 : 0
86
+ jumps[openerIdx - 1] + 1 : 0
69
87
 
70
- closer[:jump] = closerIdx - openerIdx + lastJump
88
+ jumps[closerIdx] = closerIdx - openerIdx + lastJump
89
+ jumps[openerIdx] = lastJump
90
+
71
91
  closer[:open] = false
72
92
  opener[:end] = closerIdx
73
- opener[:jump] = lastJump
74
93
  opener[:close] = false
75
94
  newMinOpenerIdx = -1
95
+ # treat next token as start of run,
96
+ # it optimizes skips in **<...>**a**<...>** pathological case
97
+ lastTokenIdx = -2
76
98
  break
77
99
  end
78
100
  end
79
101
 
80
- openerIdx -= opener[:jump] + 1
102
+ openerIdx -= jumps[openerIdx] + 1
81
103
  end
82
104
 
83
105
  if (newMinOpenerIdx != -1)
@@ -88,7 +110,7 @@ module MarkdownIt
88
110
  # See details here:
89
111
  # https://github.com/commonmark/cmark/issues/178#issuecomment-270417442
90
112
  #
91
- openersBottom[closer[:marker]][(closer[:length] || 0) % 3] = newMinOpenerIdx
113
+ openersBottom[closer[:marker]][(closer[:open] ? 3 : 0) + ((closer[:length] || 0) % 3)] = newMinOpenerIdx
92
114
  end
93
115
  end
94
116
  end
@@ -30,15 +30,6 @@ module MarkdownIt
30
30
  #
31
31
  length: scanned[:length],
32
32
 
33
- # An amount of characters before this one that's equivalent to
34
- # current one. In plain English: if this delimiter does not open
35
- # an emphasis, neither do previous `jump` characters.
36
- #
37
- # Used to skip sequences like "*****" in one step, for 1st asterisk
38
- # value will be 0, for 2nd it's 1 and so on.
39
- #
40
- jump: i,
41
-
42
33
  # A position of the token this delimiter corresponds to.
43
34
  #
44
35
  token: state.tokens.length - 1,
@@ -82,9 +73,11 @@ module MarkdownIt
82
73
  #
83
74
  isStrong = i > 0 &&
84
75
  delimiters[i - 1][:end] == startDelim[:end] + 1 &&
76
+ # check that first two markers match and adjacent
77
+ delimiters[i - 1][:marker] == startDelim[:marker] &&
85
78
  delimiters[i - 1][:token] == startDelim[:token] - 1 &&
86
- delimiters[startDelim[:end] + 1][:token] == endDelim[:token] + 1 &&
87
- delimiters[i - 1][:marker] == startDelim[:marker]
79
+ # check that last two markers are adjacent (we can safely assume they match)
80
+ delimiters[startDelim[:end] + 1][:token] == endDelim[:token] + 1
88
81
 
89
82
  ch = fromCodePoint(startDelim[:marker])
90
83
 
@@ -20,7 +20,13 @@ module MarkdownIt
20
20
  if !silent
21
21
  if pmax >= 0 && charCodeAt(state.pending, pmax) == 0x20
22
22
  if pmax >= 1 && charCodeAt(state.pending, pmax - 1) == 0x20
23
- state.pending = state.pending.sub(/ +$/, '')
23
+ # Find whitespaces tail of pending chars.
24
+ ws = pmax - 1
25
+ while (ws >= 1 && charCodeAt(state.pending, ws - 1) == 0x20)
26
+ ws -= 1
27
+ end
28
+
29
+ state.pending = state.pending.slice(0...ws)
24
30
  state.push('hardbreak', 'br', 0)
25
31
  else
26
32
  state.pending = state.pending.slice(0...-1)
@@ -35,7 +35,6 @@ module MarkdownIt
35
35
  state.delimiters.push({
36
36
  marker: marker,
37
37
  length: 0, # disable "rule of 3" length checks meant for emphasis
38
- jump: i / 2, # for `~~` 1 marker = 2 characters
39
38
  token: state.tokens.length - 1,
40
39
  end: -1,
41
40
  open: scanned[:can_open],
@@ -67,6 +67,7 @@ module MarkdownIt
67
67
  # *
68
68
  # * - Info string for "fence" tokens
69
69
  # * - The value "auto" for autolink "link_open" and "link_close" tokens
70
+ # * - The string value of the item marker for ordered-list "list_item_open" tokens
70
71
  @info = ''
71
72
 
72
73
  # * Token#meta -> Object
@@ -1,3 +1,3 @@
1
1
  module MotionMarkdownIt
2
- VERSION = '12.0.6'
2
+ VERSION = '12.3.2'
3
3
  end
@@ -195,6 +195,9 @@ describe 'Misc' do
195
195
 
196
196
  expect(md.render('123')).to eq "<p>123</p>\n"
197
197
  expect(md.render("123\n")).to eq "<p>123</p>\n"
198
+
199
+ expect(md.render(' codeblock')).to eq "<pre><code>codeblock\n</code></pre>\n"
200
+ expect(md.render(" codeblock\n")).to eq "<pre><code>codeblock\n</code></pre>\n"
198
201
  end
199
202
 
200
203
  #------------------------------------------------------------------------------
@@ -371,6 +374,42 @@ describe 'smartquotes' do
371
374
  end
372
375
  end
373
376
 
377
+ describe 'Ordered list info' do
378
+ md = MarkdownIt::Parser.new
379
+
380
+ def type_filter(tokens, type)
381
+ return tokens.select { |t| t.type === type }
382
+ end
383
+
384
+ it 'Should mark ordered list item tokens with info' do
385
+ tokens = md.parse("1. Foo\n2. Bar\n20. Fuzz", {})
386
+ expect(type_filter(tokens, 'ordered_list_open').length).to eq 1
387
+
388
+ tokens = type_filter(tokens, 'list_item_open')
389
+ expect(tokens.length).to eq 3
390
+ expect(tokens[0].info).to eq '1'
391
+ expect(tokens[0].markup).to eq '.'
392
+ expect(tokens[1].info).to eq '2'
393
+ expect(tokens[1].markup).to eq '.'
394
+ expect(tokens[2].info).to eq '20'
395
+ expect(tokens[2].markup).to eq '.'
396
+
397
+ tokens = md.parse(" 1. Foo\n2. Bar\n 20. Fuzz\n 199. Flp", {})
398
+ expect(type_filter(tokens, 'ordered_list_open').length).to eq 1
399
+
400
+ tokens = type_filter(tokens, 'list_item_open')
401
+ expect(tokens.length).to eq 4
402
+ expect(tokens[0].info).to eq '1'
403
+ expect(tokens[0].markup).to eq '.'
404
+ expect(tokens[1].info).to eq '2'
405
+ expect(tokens[1].markup).to eq '.'
406
+ expect(tokens[2].info).to eq '20'
407
+ expect(tokens[2].markup).to eq '.'
408
+ expect(tokens[3].info).to eq '199'
409
+ expect(tokens[3].markup).to eq '.'
410
+ end
411
+ end
412
+
374
413
  #------------------------------------------------------------------------------
375
414
  describe 'Token attributes' do
376
415
 
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: 12.0.6
4
+ version: 12.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Walker