motion-markdown-it 4.1.0.2 → 4.2.2.0

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
  SHA1:
3
- metadata.gz: 214800d2799b974abec953888695a55f613bf244
4
- data.tar.gz: 16fed8197c4f45298e8afe3994ff701c49bf3b61
3
+ metadata.gz: c25f046cd230dec30329ee31997f8d1c4820e888
4
+ data.tar.gz: 989cfb0a87fd1efbbc4f332e63aff23e4a1c3349
5
5
  SHA512:
6
- metadata.gz: 73a7c3eb82df1344805e860c58ad815618cbbe727a2cbd42350687d6c559a7bf7b6672f70f22d5234bbf679fc10896263192f6e617899663d7dfb0967b273c88
7
- data.tar.gz: 357565490abb891b1bf6cc3d5b31240aa8b0da3c6e8f512e9440276bfcd750676c634989c76abe8db96109c86d207fe7b215526b0919535eac70f823d4870d1e
6
+ metadata.gz: 08c3e0baeb9071852ea680700f33222ece16cec1a8edc5e33c1b8c56cc2c8efb1442a439e8c4ca1838bdec1adb47e21072f50c1eb4496c0172d4da39c5337ff2
7
+ data.tar.gz: a3a58cdd184efba1d5820d5a8b10e75efa8205f5d938e0f9b87c709320fb8f71c9a899999eecd203004b98fb6f309250746e245da1cfba49c2996af1d15eb375
data/README.md CHANGED
@@ -4,14 +4,17 @@
4
4
 
5
5
  Ruby/RubyMotion version of Markdown-it (CommonMark compliant and extendable)
6
6
 
7
- This gem is a port of the [markdown-it Javascript package](https://github.com/markdown-it/markdown-it) by Vitaly Puzrin and Alex Kocharin. Currently synced with markdown-it 4.1.0
7
+ This gem is a port of the [markdown-it Javascript package](https://github.com/markdown-it/markdown-it) by Vitaly Puzrin and Alex Kocharin. Currently synced with markdown-it 4.2.2
8
8
 
9
9
  __[Javascript Live demo](https://markdown-it.github.io)__
10
10
 
11
- - Supports the CommonMark spec + syntax extensions + sugar (URL autolinking, typographer)
11
+ Follows the __[CommonMark spec](http://spec.commonmark.org/)__ + adds syntax extensions & sugar (URL autolinking, typographer).
12
12
  - Configurable syntax. You can add new rules and even replace existing ones.
13
- - High speed
13
+ - [Safe](https://github.com/markdown-it/markdown-it/tree/master/docs/security.md) by default.
14
14
  - Community-written plugins
15
+ - Community-written plugins
16
+ * [Ruby/RubyMotion](https://github.com/digitalmoksha/motion-markdown-it-plugins)
17
+ * [original javascript plugins](https://www.npmjs.org/browse/keyword/markdown-it-plugin) and [other packages](https://www.npmjs.org/browse/keyword/markdown-it) on npm.
15
18
 
16
19
  ## Benefit
17
20
 
@@ -25,6 +28,7 @@ Performance is still an issue. While it performs reasonably well with small to
25
28
 
26
29
  - [Install](#install)
27
30
  - [Usage examples](#usage-examples)
31
+ - [Plugins](#plugins)
28
32
  - [References / Thanks](#references--thanks)
29
33
  - [License](#license)
30
34
 
@@ -101,7 +105,10 @@ parser = MarkdownIt::Parser.new({
101
105
  typographer: false,
102
106
 
103
107
  # Double + single quotes replacement pairs, when typographer enabled,
104
- # and smartquotes on. Set doubles to '«»' for Russian, '„“' for German.
108
+ # and smartquotes on. Could be either a String or an Array.
109
+ #
110
+ # For example, you can use '«»„“' for Russian, '„“‚‘' for German,
111
+ # and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp).
105
112
  quotes: '“”‘’',
106
113
 
107
114
  # Highlighter function. Should return escaped HTML,
@@ -110,6 +117,19 @@ parser = MarkdownIt::Parser.new({
110
117
  })
111
118
  ```
112
119
 
120
+ ## Plugins
121
+
122
+ Plugins can be used to extend the syntax and functionality. A [sample set of plugins](https://github.com/digitalmoksha/motion-markdown-it-plugins) has been created based on those already created for the javascript version. Included are:
123
+
124
+ * [Abbreviations](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/abbr)
125
+ * [Checkbox/Tasklists](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/checkbox_replace)
126
+ * [Containers](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/container)
127
+ * [Definition Lists](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/deflist)
128
+ * [Insert](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/ins)
129
+ * [Mark](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/mark)
130
+ * [Subscript](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/sub)
131
+ * [Superscript](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/sup)
132
+
113
133
  <!--
114
134
  ### Plugins load
115
135
 
@@ -179,7 +199,7 @@ Via plugins:
179
199
  ### Manage rules
180
200
 
181
201
  By default all rules are enabled, but can be restricted by options. On plugin
182
- load all it's rules are enabled automatically.
202
+ load all its rules are enabled automatically.
183
203
 
184
204
  ```js
185
205
  // Activate/deactivate rules, with curring
@@ -197,9 +217,9 @@ md = require('markdown-it')('full', {
197
217
  ```
198
218
 
199
219
 
200
- ## Benchmark
220
+ ## Benchmark (for Javascript version)
201
221
 
202
- Here is result of readme parse at MB Pro Retina 2013 (2.4 GHz):
222
+ Here is the result of readme parse at MB Pro Retina 2013 (2.4 GHz):
203
223
 
204
224
  ```bash
205
225
  $ benchmark/benchmark.js readme
@@ -217,7 +237,7 @@ __Note.__ CommonMark version runs with [simplified link normalizers](https://git
217
237
  for more "honest" compare. Difference is ~ 1.5x.
218
238
 
219
239
  As you can see, `markdown-it` doesn't pay with speed for it's flexibility.
220
- Slowdown of "full" version caused by additional features, not available in
240
+ Slowdown of "full" version caused by additional features not available in
221
241
  other implementations.
222
242
 
223
243
  -->
@@ -8,8 +8,9 @@ CONFIG = {
8
8
  }
9
9
 
10
10
  #------------------------------------------------------------------------------
11
- # This validator does not pretend to functionality of full weight sanitizers.
12
- # It's a tradeoff between default security, simplicity and usability.
11
+ # This validator can prohibit more than really needed to prevent XSS. It's a
12
+ # tradeoff to keep code simple and to be secure by default.
13
+ #
13
14
  # If you need different setup - override validator method as you wish. Or
14
15
  # replace it with dummy function and use external sanitizer.
15
16
 
@@ -151,9 +152,10 @@ module MarkdownIt
151
152
  # - __typographer__ - `false`. Set `true` to enable [some language-neutral
152
153
  # replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +
153
154
  # quotes beautification (smartquotes).
154
- # - __quotes__ - `“”‘’`, string. Double + single quotes replacement pairs, when
155
- # typographer enabled and smartquotes on. Set doubles to '«»' for Russian,
156
- # '„“' for German.
155
+ # - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement
156
+ # pairs, when typographer enabled and smartquotes on. For example, you can
157
+ # use `'«»„“'` for Russian, `'„“‚‘'` for German, and
158
+ # `['«\xA0', '\xA0»', '‹\xA0', '\xA0›']` for French (including nbsp).
157
159
  # - __highlight__ - `nil`. Highlighter function for fenced code blocks.
158
160
  # Highlighter `function (str, lang)` should return escaped HTML. It can also
159
161
  # return nil if the source was not changed and should be escaped externaly.
@@ -257,8 +259,10 @@ module MarkdownIt
257
259
  # MarkdownIt#validateLink(url) -> Boolean
258
260
  #
259
261
  # Link validation function. CommonMark allows too much in links. By default
260
- # we disable `javascript:` and `vbscript:` schemas. You can change this
261
- # behaviour.
262
+ # we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas
263
+ # except some embedded image types.
264
+ #
265
+ # You can change this behaviour:
262
266
  #
263
267
  # ```javascript
264
268
  # var md = require('markdown-it')();
@@ -16,7 +16,10 @@ module MarkdownIt
16
16
  typographer: false,
17
17
 
18
18
  # Double + single quotes replacement pairs, when typographer enabled,
19
- # and smartquotes on. Set doubles to '«»' for Russian, '„“' for German.
19
+ # and smartquotes on. Could be either a String or an Array.
20
+ #
21
+ # For example, you can use '«»„“' for Russian, '„“‚‘' for German,
22
+ # and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp).
20
23
  quotes: "\u201c\u201d\u2018\u2019", # “”‘’
21
24
 
22
25
  # Highlighter function. Should return escaped HTML,
@@ -16,7 +16,10 @@ module MarkdownIt
16
16
  typographer: false,
17
17
 
18
18
  # Double + single quotes replacement pairs, when typographer enabled,
19
- # and smartquotes on. Set doubles to '«»' for Russian, '„“' for German.
19
+ # and smartquotes on. Could be either a String or an Array.
20
+ #
21
+ # For example, you can use '«»„“' for Russian, '„“‚‘' for German,
22
+ # and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp).
20
23
  quotes: "\u201c\u201d\u2018\u2019", # “”‘’
21
24
 
22
25
  # Highlighter function. Should return escaped HTML,
@@ -17,7 +17,10 @@ module MarkdownIt
17
17
  typographer: false,
18
18
 
19
19
  # Double + single quotes replacement pairs, when typographer enabled,
20
- # and smartquotes on. Set doubles to '«»' for Russian, '„“' for German.
20
+ # and smartquotes on. Could be either a String or an Array.
21
+ #
22
+ # For example, you can use '«»„“' for Russian, '„“‚‘' for German,
23
+ # and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp).
21
24
  quotes: "\u201c\u201d\u2018\u2019", # “”‘’
22
25
 
23
26
  # Highlighter function. Should return escaped HTML,
@@ -209,7 +209,7 @@ module MarkdownIt
209
209
  # * ```javascript
210
210
  # * var md = require('markdown-it')();
211
211
  # *
212
- # * md.core.ruler.push('emphasis', 'my_rule', function replace(state) {
212
+ # * md.core.ruler.push('my_rule', function replace(state) {
213
213
  # * //...
214
214
  # * });
215
215
  # * ```
@@ -55,6 +55,8 @@ module MarkdownIt
55
55
  # ```
56
56
  nextLine = startLine + 1
57
57
  while nextLine < endLine
58
+ break if state.tShift[nextLine] < oldIndent
59
+
58
60
  pos = state.bMarks[nextLine] + state.tShift[nextLine]
59
61
  max = state.eMarks[nextLine]
60
62
 
@@ -104,7 +106,7 @@ module MarkdownIt
104
106
  #
105
107
  # Any negative number will do the job here, but it's better for it
106
108
  # to be large enough to make any bugs obvious.
107
- state.tShift[nextLine] = -1337
109
+ state.tShift[nextLine] = -1
108
110
  nextLine += 1
109
111
  end
110
112
 
@@ -17,6 +17,9 @@ module MarkdownIt
17
17
  # it's considered a lazy continuation regardless of what's there
18
18
  (nextLine += 1) && next if (state.tShift[nextLine] - state.blkIndent > 3)
19
19
 
20
+ # quirk for blockquotes, this line should already be checked by that rule
21
+ (nextLine += 1) && next if state.tShift[nextLine] < 0
22
+
20
23
  # Some tags can terminate paragraph without empty line.
21
24
  terminate = false
22
25
  0.upto(terminatorRules.length - 1) do |i|
@@ -33,10 +33,12 @@ module MarkdownIt
33
33
  terminatorRules = state.md.block.ruler.getRules('reference')
34
34
 
35
35
  while nextLine < endLine && !state.isEmpty(nextLine)
36
- nextLine += 1
37
36
  # this would be a code block normally, but after paragraph
38
37
  # it's considered a lazy continuation regardless of what's there
39
- next if (state.tShift[nextLine] - state.blkIndent > 3)
38
+ (nextLine += 1) && next if (state.tShift[nextLine] - state.blkIndent > 3)
39
+
40
+ # quirk for blockquotes, this line should already be checked by that rule
41
+ (nextLine += 1) && next if state.tShift[nextLine] < 0
40
42
 
41
43
  # Some tags can terminate paragraph without empty line.
42
44
  terminate = false
@@ -47,6 +49,7 @@ module MarkdownIt
47
49
  end
48
50
  end
49
51
  break if (terminate)
52
+ nextLine += 1
50
53
  end
51
54
 
52
55
  str = state.getLines(startLine, nextLine, state.blkIndent, false).strip
@@ -140,11 +143,16 @@ module MarkdownIt
140
143
  return false
141
144
  end
142
145
 
146
+ label = normalizeReference(str.slice(1...labelEnd))
147
+ if label == ''
148
+ # CommonMark 0.20 disallows empty labels
149
+ return false
150
+ end
151
+
143
152
  # Reference can not terminate anything. This check is for safety only.
144
153
  # istanbul ignore if
145
154
  return true if (silent)
146
155
 
147
- label = normalizeReference(str.slice(1...labelEnd))
148
156
  if (state.env[:references].nil?)
149
157
  state.env[:references] = {}
150
158
  end
@@ -150,7 +150,7 @@ module MarkdownIt
150
150
  # Opt: don't use push queue for single line
151
151
  if (line + 1) == line_end
152
152
  first = @bMarks[line] + [@tShift[line], indent].min
153
- last = keepLastLF ? @bMarks[line_end] : @eMarks[line_end - 1]
153
+ last = @eMarks[line_end - 1] + (keepLastLF ? 1 : 0)
154
154
  return @src.slice(first...last)
155
155
  end
156
156
 
@@ -14,15 +14,21 @@ module MarkdownIt
14
14
 
15
15
  #------------------------------------------------------------------------------
16
16
  def self.escapedSplit(str)
17
- result = []
18
- pos = 0
19
- max = str.length
20
- escapes = 0
21
- lastPos = 0
22
- ch = str.charCodeAt(pos)
17
+ result = []
18
+ pos = 0
19
+ max = str.length
20
+ escapes = 0
21
+ lastPos = 0
22
+ backTicked = false
23
+ lastBackTick = 0
24
+
25
+ ch = str.charCodeAt(pos)
23
26
 
24
27
  while (pos < max)
25
- if (ch == 0x7c && (escapes % 2 == 0)) # '|'
28
+ if (ch == 0x60 && (escapes % 2 == 0)) # `
29
+ backTicked = !backTicked
30
+ lastBackTick = pos
31
+ elsif (ch == 0x7c && (escapes % 2 == 0) && !backTicked) # '|'
26
32
  result.push(str[lastPos...pos])
27
33
  lastPos = pos + 1
28
34
  elsif (ch == 0x5c) # '\'
@@ -32,6 +38,12 @@ module MarkdownIt
32
38
  end
33
39
 
34
40
  pos += 1
41
+ # If there was an un-closed backtick, go back to just after
42
+ # the last backtick, but as if it was a normal character
43
+ if (pos == max && backTicked)
44
+ backTicked = false
45
+ pos = lastBackTick + 1
46
+ end
35
47
  ch = str.charCodeAt(pos)
36
48
  end
37
49
 
@@ -1,7 +1,5 @@
1
1
  # Simple typographyc replacements
2
2
  #
3
- # '' → ‘’
4
- # "" → “”. Set '«»' for Russian, '„“' for German, empty to disable
5
3
  # (c) (C) → ©
6
4
  # (tm) (TM) → ™
7
5
  # (r) (R) → ®
@@ -105,15 +105,27 @@ module MarkdownIt
105
105
  break if (stack[j][:level] < thisLevel)
106
106
  if (item[:single] == isSingle && stack[j][:level] == thisLevel)
107
107
  item = stack[j]
108
- if (isSingle)
109
- tokens[item[:token]].content = replaceAt(tokens[item[:token]].content, item[:pos], state.md.options[:quotes][2])
110
- token.content = replaceAt(token.content, t.begin(0), state.md.options[:quotes][3])
108
+ if isSingle
109
+ openQuote = state.md.options[:quotes][2]
110
+ closeQuote = state.md.options[:quotes][3]
111
111
  else
112
- tokens[item[:token]].content = replaceAt(tokens[item[:token]].content, item[:pos], state.md.options[:quotes][0])
113
- token.content = replaceAt(token.content, t.begin(0), state.md.options[:quotes][1])
112
+ openQuote = state.md.options[:quotes][0]
113
+ closeQuote = state.md.options[:quotes][1]
114
114
  end
115
- # stack.length = j
116
- stack = (j < stack.length ? stack.slice(0, j) : stack.fill(nil, stack.length...(j)))
115
+
116
+ # replace token.content *before* tokens[item.token].content,
117
+ # because, if they are pointing at the same token, replaceAt
118
+ # could mess up indices when quote length != 1
119
+ token.content = replaceAt(token.content, t.begin(0), closeQuote)
120
+ tokens[item[:token]].content = replaceAt(tokens[item[:token]].content, item[:pos], openQuote)
121
+
122
+ pos += closeQuote.length - 1
123
+ pos += (openQuote.length - 1) if item[:token] == i
124
+
125
+ text = token.content
126
+ max = text.length
127
+
128
+ stack = (j < stack.length ? stack.slice(0, j) : stack.fill(nil, stack.length...(j))) # stack.length = j
117
129
  continue_outer_loop = true # continue OUTER;
118
130
  break
119
131
  end
@@ -9,11 +9,11 @@ module MarkdownIt
9
9
  # "start" should point at a valid marker
10
10
  #------------------------------------------------------------------------------
11
11
  def self.scanDelims(state, start)
12
- pos = start
13
- can_open = true
14
- can_close = true
15
- max = state.posMax
16
- marker = state.src.charCodeAt(start)
12
+ pos = start
13
+ left_flanking = true
14
+ right_flanking = true
15
+ max = state.posMax
16
+ marker = state.src.charCodeAt(start)
17
17
 
18
18
  # treat beginning of the line as a whitespace
19
19
  lastChar = start > 0 ? state.src.charCodeAt(start - 1) : 0x20
@@ -22,10 +22,6 @@ module MarkdownIt
22
22
  pos += 1
23
23
  end
24
24
 
25
- if (pos >= max)
26
- can_open = false
27
- end
28
-
29
25
  count = pos - start
30
26
 
31
27
  # treat end of the line as a whitespace
@@ -38,27 +34,28 @@ module MarkdownIt
38
34
  isNextWhiteSpace = isWhiteSpace(nextChar)
39
35
 
40
36
  if (isNextWhiteSpace)
41
- can_open = false
37
+ left_flanking = false
42
38
  elsif (isNextPunctChar)
43
39
  if (!(isLastWhiteSpace || isLastPunctChar))
44
- can_open = false
40
+ left_flanking = false
45
41
  end
46
42
  end
47
43
 
48
44
  if (isLastWhiteSpace)
49
- can_close = false
45
+ right_flanking = false
50
46
  elsif (isLastPunctChar)
51
47
  if (!(isNextWhiteSpace || isNextPunctChar))
52
- can_close = false
48
+ right_flanking = false
53
49
  end
54
50
  end
55
51
 
56
52
  if (marker == 0x5F) # _
57
- if (can_open && can_close)
58
- # "_" inside a word can neither open nor close an emphasis
59
- can_open = false
60
- can_close = isNextPunctChar
61
- end
53
+ # "_" inside a word can neither open nor close an emphasis
54
+ can_open = left_flanking && (!right_flanking || isLastPunctChar)
55
+ can_close = right_flanking && (!left_flanking || isNextPunctChar)
56
+ else
57
+ can_open = left_flanking
58
+ can_close = right_flanking
62
59
  end
63
60
 
64
61
  return { can_open: can_open, can_close: can_close, delims: count }
@@ -1,5 +1,5 @@
1
1
  module MotionMarkdownIt
2
2
 
3
- VERSION = '4.1.0.2'
3
+ VERSION = '4.2.2.0'
4
4
 
5
5
  end
@@ -14,7 +14,7 @@ files.each do |file|
14
14
 
15
15
  # results = Benchmark.bmbm do |b|
16
16
  results = Benchmark.bm do |b|
17
- b.report("motion-markdown-it 0.1.0") do
17
+ b.report("motion-markdown-it #{MotionMarkdownIt::VERSION}") do
18
18
  parser = MarkdownIt::Parser.new({ html: true, linkify: true, typographer: true })
19
19
  runs.times { parser.render(data) }
20
20
  end
@@ -4,7 +4,7 @@ describe 'API' do
4
4
  it 'constructor' do
5
5
  expect {
6
6
  MarkdownIt::Parser.new('bad preset')
7
- }.to raise_error
7
+ }.to raise_error(StandardError)
8
8
 
9
9
  # options should override preset
10
10
  md = MarkdownIt::Parser.new(:commonmark, { html: false })
@@ -23,7 +23,7 @@ describe 'API' do
23
23
 
24
24
  expect {
25
25
  md.configure
26
- }.to raise_error
26
+ }.to raise_error(StandardError)
27
27
  end
28
28
 
29
29
  class TestPlugin
@@ -131,11 +131,11 @@ describe 'API' do
131
131
  md = MarkdownIt::Parser.new
132
132
  expect {
133
133
  md.enable([ 'link', 'code', 'invalid' ])
134
- }.to raise_error
134
+ }.to raise_error(StandardError)
135
135
 
136
136
  expect {
137
137
  md.disable([ 'link', 'code', 'invalid' ])
138
- }.to raise_error
138
+ }.to raise_error(StandardError)
139
139
 
140
140
  expect {
141
141
  md.enable([ 'link', 'code' ])
@@ -301,3 +301,30 @@ describe 'maxNesting' do
301
301
  end
302
302
 
303
303
  end
304
+
305
+ #------------------------------------------------------------------------------
306
+ describe 'smartquotes' do
307
+ md = MarkdownIt::Parser.new({
308
+ typographer: true,
309
+
310
+ # all strings have different length to make sure
311
+ # we didn't accidentally count the wrong one
312
+ quotes: [ '[[[', ']]', '(((((', '))))' ]
313
+ })
314
+
315
+ #------------------------------------------------------------------------------
316
+ it 'Should support multi-character quotes' do
317
+ expect(md.render('"foo" \'bar\'')).to eq "<p>[[[foo]] (((((bar))))</p>\n"
318
+ end
319
+
320
+ #------------------------------------------------------------------------------
321
+ it 'Should support nested multi-character quotes' do
322
+ expect(md.render('"foo \'bar\' baz"')).to eq "<p>[[[foo (((((bar)))) baz]]</p>\n"
323
+ end
324
+
325
+ #------------------------------------------------------------------------------
326
+ it 'Should support multi-character quotes in different tags' do
327
+ expect(md.render('"a *b \'c *d* e\' f* g"')).to eq "<p>[[[a <em>b (((((c <em>d</em> e)))) f</em> g]]</p>\n"
328
+ end
329
+
330
+ end
@@ -26,7 +26,7 @@ describe 'Utils' do
26
26
  expect(assign({ a: 1 }, nil, { b: 2 })).to eq ({ a: 1, b: 2 })
27
27
  expect {
28
28
  assign({}, 123)
29
- }.to raise_error
29
+ }.to raise_error(StandardError)
30
30
  end
31
31
 
32
32
  #------------------------------------------------------------------------------
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: 4.1.0.2
4
+ version: 4.2.2.0
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: 2015-04-03 00:00:00.000000000 Z
13
+ date: 2015-06-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: mdurl-rb