paru 0.0.1 → 0.1.0
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/lib/paru/error.rb +4 -0
- data/lib/paru/filter.rb +77 -68
- data/lib/paru/filter/alignment.rb +12 -0
- data/lib/paru/filter/ast_manipulation.rb +43 -0
- data/lib/paru/filter/attr.rb +40 -0
- data/lib/paru/filter/block.rb +11 -0
- data/lib/paru/filter/block_quote.rb +11 -0
- data/lib/paru/filter/bullet_list.rb +8 -0
- data/lib/paru/filter/citation.rb +29 -0
- data/lib/paru/filter/cite.rb +25 -0
- data/lib/paru/filter/code.rb +30 -0
- data/lib/paru/filter/code_block.rb +26 -0
- data/lib/paru/filter/definition_list.rb +19 -0
- data/lib/paru/filter/definition_list_item.rb +22 -0
- data/lib/paru/filter/div.rb +25 -0
- data/lib/paru/filter/document.rb +47 -0
- data/lib/paru/filter/emph.rb +8 -0
- data/lib/paru/filter/header.rb +28 -0
- data/lib/paru/filter/horizontal_rule.rb +11 -0
- data/lib/paru/filter/image.rb +9 -0
- data/lib/paru/filter/inline.rb +19 -0
- data/lib/paru/filter/line_break.rb +16 -0
- data/lib/paru/filter/link.rb +27 -0
- data/lib/paru/filter/list.rb +22 -0
- data/lib/paru/filter/list_attributes.rb +24 -0
- data/lib/paru/filter/markdown.rb +52 -0
- data/lib/paru/filter/math.rb +51 -0
- data/lib/paru/filter/meta.rb +24 -0
- data/lib/paru/filter/meta_blocks.rb +13 -0
- data/lib/paru/filter/meta_bool.rb +9 -0
- data/lib/paru/filter/meta_inlines.rb +13 -0
- data/lib/paru/filter/meta_list.rb +9 -0
- data/lib/paru/filter/meta_map.rb +37 -0
- data/lib/paru/filter/meta_string.rb +9 -0
- data/lib/paru/filter/meta_value.rb +20 -0
- data/lib/paru/filter/node.rb +149 -0
- data/lib/paru/filter/note.rb +17 -0
- data/lib/paru/filter/null.rb +11 -0
- data/lib/paru/filter/ordered_list.rb +23 -0
- data/lib/paru/filter/para.rb +16 -0
- data/lib/paru/filter/plain.rb +15 -0
- data/lib/paru/filter/quoted.rb +23 -0
- data/lib/paru/filter/raw_block.rb +25 -0
- data/lib/paru/filter/raw_inline.rb +30 -0
- data/lib/paru/filter/small_caps.rb +9 -0
- data/lib/paru/filter/soft_break.rb +16 -0
- data/lib/paru/filter/space.rb +15 -0
- data/lib/paru/filter/span.rb +23 -0
- data/lib/paru/filter/str.rb +23 -0
- data/lib/paru/filter/strikeout.rb +9 -0
- data/lib/paru/filter/string.rb +9 -0
- data/lib/paru/filter/subscript.rb +9 -0
- data/lib/paru/filter/superscript.rb +9 -0
- data/lib/paru/filter/table.rb +34 -0
- data/lib/paru/filter/table_row.rb +18 -0
- data/lib/paru/filter/target.rb +19 -0
- data/lib/paru/pandoc_options.yaml +4 -2
- data/lib/paru/selector.rb +151 -0
- metadata +60 -4
@@ -0,0 +1,149 @@
|
|
1
|
+
module Paru
|
2
|
+
module PandocFilter
|
3
|
+
|
4
|
+
require 'json'
|
5
|
+
require_relative "./ast_manipulation"
|
6
|
+
require_relative "./markdown"
|
7
|
+
require_relative "../pandoc"
|
8
|
+
require_relative "./document"
|
9
|
+
|
10
|
+
class Node
|
11
|
+
include Enumerable
|
12
|
+
include ASTManipulation
|
13
|
+
include Markdown
|
14
|
+
|
15
|
+
attr_accessor :parent
|
16
|
+
|
17
|
+
# require all pandoc types
|
18
|
+
Dir[File.dirname(__FILE__) + '/*.rb'].each do |file|
|
19
|
+
require_relative file
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize contents, inline_children = false
|
23
|
+
@children = []
|
24
|
+
@parent = nil
|
25
|
+
|
26
|
+
if contents.is_a? Array
|
27
|
+
contents.each do |elt|
|
28
|
+
if PandocFilter.const_defined? elt["t"]
|
29
|
+
child = PandocFilter.const_get(elt["t"]).new elt["c"]
|
30
|
+
else
|
31
|
+
if inline_children
|
32
|
+
child = PandocFilter::Inline.new elt["c"]
|
33
|
+
else
|
34
|
+
child = PandocFilter::Plain.new elt["c"]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
child.parent = self
|
39
|
+
@children.push child
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
def each
|
46
|
+
@children.each do |child|
|
47
|
+
yield child
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def has_children?
|
52
|
+
defined? @children and @children.size > 0
|
53
|
+
end
|
54
|
+
|
55
|
+
def children
|
56
|
+
if has_children?
|
57
|
+
@children
|
58
|
+
else
|
59
|
+
[]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def children= list
|
64
|
+
@children = list
|
65
|
+
end
|
66
|
+
|
67
|
+
def has_parent?
|
68
|
+
not @parent.nil?
|
69
|
+
end
|
70
|
+
|
71
|
+
def is_root?
|
72
|
+
not has_parent?
|
73
|
+
end
|
74
|
+
|
75
|
+
def is_node?
|
76
|
+
not is_leaf
|
77
|
+
end
|
78
|
+
|
79
|
+
def is_leaf?
|
80
|
+
not has_children?
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
def has_string?
|
85
|
+
false
|
86
|
+
end
|
87
|
+
|
88
|
+
def has_inline?
|
89
|
+
false
|
90
|
+
end
|
91
|
+
|
92
|
+
def has_block?
|
93
|
+
false
|
94
|
+
end
|
95
|
+
|
96
|
+
def is_block?
|
97
|
+
false
|
98
|
+
end
|
99
|
+
|
100
|
+
def is_inline?
|
101
|
+
false
|
102
|
+
end
|
103
|
+
|
104
|
+
def has_class? name
|
105
|
+
if not @attr.nil?
|
106
|
+
@attr.has_class? name
|
107
|
+
else
|
108
|
+
false
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def to_s
|
113
|
+
self.class.name
|
114
|
+
end
|
115
|
+
|
116
|
+
def type
|
117
|
+
ast_type
|
118
|
+
end
|
119
|
+
|
120
|
+
def ast_type
|
121
|
+
self.class.name.split("::").last
|
122
|
+
end
|
123
|
+
|
124
|
+
def ast_contents
|
125
|
+
if has_children?
|
126
|
+
@children.map {|child| child.to_ast}
|
127
|
+
else
|
128
|
+
[]
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def ast_markdown_contents
|
133
|
+
if has_children?
|
134
|
+
@children.map {|child| child.to_ast}
|
135
|
+
else
|
136
|
+
[]
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def to_ast
|
141
|
+
{
|
142
|
+
"t" => ast_type,
|
143
|
+
"c" => ast_contents
|
144
|
+
}
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Paru
|
2
|
+
module PandocFilter
|
3
|
+
require_relative "./list"
|
4
|
+
require_relative "./list_attributes"
|
5
|
+
|
6
|
+
class OrderedList < List
|
7
|
+
attr_accessor :list_attributes
|
8
|
+
|
9
|
+
def initialize contents
|
10
|
+
@list_attributes = ListAttributes.new contents[0]
|
11
|
+
super contents[1]
|
12
|
+
end
|
13
|
+
|
14
|
+
def ast_contents
|
15
|
+
[
|
16
|
+
@list_attributes.to_ast,
|
17
|
+
super
|
18
|
+
]
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Paru
|
2
|
+
module PandocFilter
|
3
|
+
require_relative "./inline"
|
4
|
+
|
5
|
+
class Quoted < Inline
|
6
|
+
QUOTE_TYPE = ["SingleQuote", "DoubleQuote"]
|
7
|
+
|
8
|
+
attr_accessor :quote_type
|
9
|
+
|
10
|
+
def initialize contents
|
11
|
+
@quote_type = contents[0]
|
12
|
+
super contents[1]
|
13
|
+
end
|
14
|
+
|
15
|
+
def ast_contents
|
16
|
+
[
|
17
|
+
@quote_type,
|
18
|
+
super
|
19
|
+
]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Paru
|
2
|
+
module PandocFilter
|
3
|
+
require_relative "./block"
|
4
|
+
|
5
|
+
class RawBlock < Block
|
6
|
+
attr_accessor :format, :string
|
7
|
+
|
8
|
+
def initialize(contents)
|
9
|
+
@format = contents[0]
|
10
|
+
@string = contents[1]
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_ast
|
14
|
+
[
|
15
|
+
@format,
|
16
|
+
@string
|
17
|
+
]
|
18
|
+
end
|
19
|
+
|
20
|
+
def has_string?
|
21
|
+
true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Paru
|
2
|
+
module PandocFilter
|
3
|
+
|
4
|
+
require_relative "./inline"
|
5
|
+
|
6
|
+
class RawInline < Inline
|
7
|
+
attr_accessor :format, :string
|
8
|
+
|
9
|
+
def initialize contents
|
10
|
+
@format = contents[0]
|
11
|
+
@string = contents[1]
|
12
|
+
end
|
13
|
+
|
14
|
+
def ast_contents
|
15
|
+
[
|
16
|
+
@format,
|
17
|
+
@string
|
18
|
+
]
|
19
|
+
end
|
20
|
+
|
21
|
+
def has_string?
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
def has_inline?
|
26
|
+
false
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Paru
|
2
|
+
module PandocFilter
|
3
|
+
|
4
|
+
require_relative "./inline"
|
5
|
+
require_relative "./attr"
|
6
|
+
|
7
|
+
class Span < Inline
|
8
|
+
attr_accessor :attr
|
9
|
+
|
10
|
+
def initialize contents
|
11
|
+
@attr = Attr.new contents[0]
|
12
|
+
super contents[1]
|
13
|
+
end
|
14
|
+
|
15
|
+
def ast_contents
|
16
|
+
[
|
17
|
+
@attr.to_ast,
|
18
|
+
super
|
19
|
+
]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Paru
|
2
|
+
module PandocFilter
|
3
|
+
require_relative "./inline"
|
4
|
+
|
5
|
+
class Str < Inline
|
6
|
+
def initialize value
|
7
|
+
@string = value
|
8
|
+
end
|
9
|
+
|
10
|
+
def ast_contents
|
11
|
+
@string
|
12
|
+
end
|
13
|
+
|
14
|
+
def has_string?
|
15
|
+
true
|
16
|
+
end
|
17
|
+
|
18
|
+
def has_inline?
|
19
|
+
false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|