motion-markdown-it-plugins 1.0.0 → 1.0.10
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 +4 -4
- data/README.md +1 -0
- data/lib/motion-markdown-it-plugins.rb +2 -1
- data/lib/motion-markdown-it-plugins/checkbox_replace/checkbox_replace.rb +38 -19
- data/lib/motion-markdown-it-plugins/header_sections/header_sections.rb +98 -0
- data/lib/motion-markdown-it-plugins/version.rb +1 -1
- data/spec/header_sections/header_sections_spec.rb +9 -0
- data/spec/spec_helper.rb +1 -1
- metadata +13 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94704fbe5fa8a967bf999b985367ab32dba0486e
|
4
|
+
data.tar.gz: f839bf41bb8c37eb15c4ac327e9e607172d75333
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee8f65ccb731bde283c02f26432607e83c65b6bef7cf64b4f4f3599a81b57931ff5cc4103b7e7db38b3f339cad733ba21f69adb60650b8e2d1adcfc53fe7515e
|
7
|
+
data.tar.gz: 20dc882df2b9cc935df9ee03d4f1f4d10e4197a48f39ed7f183fa8b817aa5e8f290890da967f2d3377fb1efe6a5dc253d0999d13b4a1e12205647ea29ec62e85
|
data/README.md
CHANGED
@@ -12,6 +12,7 @@ Each one has a README with details
|
|
12
12
|
* [Checkbox/Tasklists](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/checkbox_replace)
|
13
13
|
* [Containers](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/container)
|
14
14
|
* [Definition Lists](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/deflist)
|
15
|
+
* [Header Sections](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/header_sections)
|
15
16
|
* [Insert](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/ins)
|
16
17
|
* [Mark](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/mark)
|
17
18
|
* [Subscript](https://github.com/digitalmoksha/motion-markdown-it-plugins/tree/master/lib/motion-markdown-it-plugins/sub)
|
@@ -20,7 +20,7 @@ module MotionMarkdownItPlugins
|
|
20
20
|
end
|
21
21
|
|
22
22
|
#------------------------------------------------------------------------------
|
23
|
-
def createTokens(checked, label)
|
23
|
+
def createTokens(checked, label, original)
|
24
24
|
nodes = []
|
25
25
|
|
26
26
|
# <div class="checkbox">
|
@@ -48,7 +48,8 @@ module MotionMarkdownItPlugins
|
|
48
48
|
# content of label tag
|
49
49
|
token = MarkdownIt::Token.new("text", "", 0)
|
50
50
|
token.content = label
|
51
|
-
|
51
|
+
original.children[0].content = label
|
52
|
+
original.children.each {|tok| nodes.push tok}
|
52
53
|
|
53
54
|
# closing tags
|
54
55
|
nodes.push MarkdownIt::Token.new("label_close", "label", -1)
|
@@ -56,23 +57,32 @@ module MotionMarkdownItPlugins
|
|
56
57
|
nodes.push MarkdownIt::Token.new("checkbox_close", "div", -1)
|
57
58
|
end
|
58
59
|
|
59
|
-
|
60
|
+
original.children = nodes
|
61
|
+
return original
|
60
62
|
end
|
61
63
|
|
64
|
+
# original should be an inline node. it can only be a task item if the first
|
65
|
+
# child node has the right text
|
62
66
|
#------------------------------------------------------------------------------
|
63
67
|
def splitTextToken(original)
|
64
68
|
|
65
|
-
|
66
|
-
|
69
|
+
if original.children
|
70
|
+
first_node = original.children[0]
|
71
|
+
if first_node
|
72
|
+
text = first_node.content
|
73
|
+
matches = text.match(PATTERN)
|
67
74
|
|
68
|
-
|
75
|
+
return original if matches == nil
|
69
76
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
77
|
+
value = matches[1]
|
78
|
+
label = matches[2]
|
79
|
+
checked = false
|
80
|
+
checked = true if (value == "X" || value == "x")
|
74
81
|
|
75
|
-
|
82
|
+
return createTokens(checked, label, original)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
return original
|
76
86
|
end
|
77
87
|
|
78
88
|
#------------------------------------------------------------------------------
|
@@ -80,21 +90,30 @@ module MotionMarkdownItPlugins
|
|
80
90
|
blockTokens = state.tokens
|
81
91
|
j = 0
|
82
92
|
l = blockTokens.length
|
93
|
+
|
94
|
+
# blockTokens.each do |xtoken|
|
95
|
+
# puts " " * xtoken.level + "#{xtoken.inspect}"
|
96
|
+
# end
|
97
|
+
|
83
98
|
while j < l
|
84
99
|
if blockTokens[j].type != "inline"
|
85
100
|
j += 1
|
86
101
|
next
|
87
102
|
end
|
88
103
|
tokens = blockTokens[j].children
|
104
|
+
|
105
|
+
# # We scan from the end, to keep position when new tags added.
|
106
|
+
# # Use reversed logic in links start/end match
|
107
|
+
# i = tokens.length - 1
|
108
|
+
# while i >= 0
|
109
|
+
# token = tokens[i]
|
110
|
+
# blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, splitTextToken(token))
|
111
|
+
# i -= 1
|
112
|
+
# end
|
113
|
+
|
114
|
+
token = blockTokens[j]
|
115
|
+
arrayReplaceAt(blockTokens, j, splitTextToken(token))
|
89
116
|
|
90
|
-
# We scan from the end, to keep position when new tags added.
|
91
|
-
# Use reversed logic in links start/end match
|
92
|
-
i = tokens.length - 1
|
93
|
-
while i >= 0
|
94
|
-
token = tokens[i]
|
95
|
-
blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, splitTextToken(token))
|
96
|
-
i -= 1
|
97
|
-
end
|
98
117
|
j += 1
|
99
118
|
end
|
100
119
|
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# Process header sections
|
2
|
+
#
|
3
|
+
# Based on Javascript version: https://github.com/arve0/markdown-it-header-sections
|
4
|
+
#------------------------------------------------------------------------------
|
5
|
+
|
6
|
+
include MarkdownIt::Common::Utils
|
7
|
+
|
8
|
+
module MotionMarkdownItPlugins
|
9
|
+
class HeaderSections
|
10
|
+
|
11
|
+
def self.init_plugin(md, *options)
|
12
|
+
headerSections = HeaderSections.new(md, options)
|
13
|
+
md.core.ruler.push('header_sections', lambda { |state| headerSections.addSections(state) })
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(md, options)
|
17
|
+
reset
|
18
|
+
end
|
19
|
+
|
20
|
+
def reset()
|
21
|
+
@tokens = [] # output
|
22
|
+
@sections = []
|
23
|
+
@nestedLevel = 0
|
24
|
+
end
|
25
|
+
|
26
|
+
def openSection(attrs)
|
27
|
+
t = MarkdownIt::Token.new('section_open', 'section', 1)
|
28
|
+
t.block = true
|
29
|
+
# This adds support for markdown-it-attrs. It's still in JS.
|
30
|
+
# t.attrs = attrs && attrs.map(function (attr) { return [attr[0], attr[1]] })
|
31
|
+
return t
|
32
|
+
end
|
33
|
+
|
34
|
+
def closeSection()
|
35
|
+
t = MarkdownIt::Token.new('section_close', 'section', -1)
|
36
|
+
t.block = true
|
37
|
+
return t
|
38
|
+
end
|
39
|
+
|
40
|
+
def closeSections(section)
|
41
|
+
while (@sections.last && section[:header] <= @sections.last[:header])
|
42
|
+
@sections.pop()
|
43
|
+
@tokens.push(closeSection())
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def closeAllSections()
|
48
|
+
while (@sections.pop())
|
49
|
+
@tokens.push(closeSection())
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def closeSectionsToCurrentNesting(nesting)
|
54
|
+
while (@sections.last && nesting < @sections.last[:nesting])
|
55
|
+
@sections.pop()
|
56
|
+
@tokens.push(closeSection())
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def addSections(state)
|
61
|
+
state.tokens.each do |token|
|
62
|
+
# record level of nesting
|
63
|
+
if (!token.type.start_with?('heading'))
|
64
|
+
@nestedLevel += token.nesting
|
65
|
+
end
|
66
|
+
if (@sections.last && @nestedLevel < @sections.last[:nesting])
|
67
|
+
closeSectionsToCurrentNesting(@nestedLevel)
|
68
|
+
end
|
69
|
+
|
70
|
+
# add sections before headers
|
71
|
+
if (token.type == 'heading_open')
|
72
|
+
section = {
|
73
|
+
:header => token.tag[1,1].to_i,
|
74
|
+
:nesting => @nestedLevel
|
75
|
+
}
|
76
|
+
if (@sections.last && section[:header] <= @sections.last[:header])
|
77
|
+
closeSections(section)
|
78
|
+
end
|
79
|
+
@tokens.push(openSection(token.attrs))
|
80
|
+
if (token.attrIndex('id') != -1)
|
81
|
+
# remove ID from token
|
82
|
+
token.attrs.splice(token.attrIndex('id'), 1)
|
83
|
+
end
|
84
|
+
@sections.push(section)
|
85
|
+
end
|
86
|
+
|
87
|
+
@tokens.push(token)
|
88
|
+
end # end for every token
|
89
|
+
|
90
|
+
closeAllSections()
|
91
|
+
|
92
|
+
state.tokens = @tokens
|
93
|
+
reset
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
fixture_dir = fixture_path('header_sections/fixtures')
|
2
|
+
|
3
|
+
#------------------------------------------------------------------------------
|
4
|
+
describe 'markdown-it-header-sections' do
|
5
|
+
md = MarkdownIt::Parser.new
|
6
|
+
md.use(MotionMarkdownItPlugins::HeaderSections)
|
7
|
+
|
8
|
+
generate(File.join(fixture_dir, 'header_sections.txt'), md)
|
9
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion-markdown-it-plugins
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brett Walker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: motion-markdown-it
|
@@ -36,6 +36,7 @@ files:
|
|
36
36
|
- lib/motion-markdown-it-plugins/checkbox_replace/checkbox_replace.rb
|
37
37
|
- lib/motion-markdown-it-plugins/container/container.rb
|
38
38
|
- lib/motion-markdown-it-plugins/deflist/deflist.rb
|
39
|
+
- lib/motion-markdown-it-plugins/header_sections/header_sections.rb
|
39
40
|
- lib/motion-markdown-it-plugins/ins/ins.rb
|
40
41
|
- lib/motion-markdown-it-plugins/mark/mark.rb
|
41
42
|
- lib/motion-markdown-it-plugins/sub/sub.rb
|
@@ -47,6 +48,7 @@ files:
|
|
47
48
|
- spec/container/default_spec.rb
|
48
49
|
- spec/container/misc_spec.rb
|
49
50
|
- spec/deflist/deflist_spec.rb
|
51
|
+
- spec/header_sections/header_sections_spec.rb
|
50
52
|
- spec/ins/ins_spec.rb
|
51
53
|
- spec/mark/mark_spec.rb
|
52
54
|
- spec/spec_helper.rb
|
@@ -73,20 +75,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
75
|
version: '0'
|
74
76
|
requirements: []
|
75
77
|
rubyforge_project:
|
76
|
-
rubygems_version: 2.
|
78
|
+
rubygems_version: 2.6.8
|
77
79
|
signing_key:
|
78
80
|
specification_version: 4
|
79
81
|
summary: Plugins for motion-markdown-it
|
80
82
|
test_files:
|
81
|
-
- spec/
|
82
|
-
- spec/
|
83
|
+
- spec/spec_helper.rb
|
84
|
+
- spec/mark/mark_spec.rb
|
85
|
+
- spec/sup/sup_spec.rb
|
83
86
|
- spec/container/api_spec.rb
|
84
87
|
- spec/container/default_spec.rb
|
85
88
|
- spec/container/misc_spec.rb
|
86
|
-
- spec/deflist/deflist_spec.rb
|
87
|
-
- spec/ins/ins_spec.rb
|
88
|
-
- spec/mark/mark_spec.rb
|
89
|
-
- spec/spec_helper.rb
|
90
89
|
- spec/sub/sub_spec.rb
|
91
|
-
- spec/
|
90
|
+
- spec/ins/ins_spec.rb
|
91
|
+
- spec/deflist/deflist_spec.rb
|
92
92
|
- spec/testgen_helper.rb
|
93
|
+
- spec/checkbox_replace/checkbox_replace_spec.rb
|
94
|
+
- spec/abbr/abbr_spec.rb
|
95
|
+
- spec/header_sections/header_sections_spec.rb
|