paru 0.1.0 → 0.2.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.rb +2 -2
- data/lib/paru/error.rb +2 -2
- data/lib/paru/filter.rb +69 -70
- data/lib/paru/filter/alignment.rb +7 -7
- data/lib/paru/filter/ast_manipulation.rb +39 -39
- data/lib/paru/filter/attr.rb +30 -32
- data/lib/paru/filter/block.rb +7 -7
- data/lib/paru/filter/block_quote.rb +8 -7
- data/lib/paru/filter/bullet_list.rb +6 -5
- data/lib/paru/filter/citation.rb +23 -23
- data/lib/paru/filter/cite.rb +19 -18
- data/lib/paru/filter/code.rb +23 -22
- data/lib/paru/filter/code_block.rb +20 -19
- data/lib/paru/filter/definition_list.rb +14 -13
- data/lib/paru/filter/definition_list_item.rb +17 -17
- data/lib/paru/filter/div.rb +19 -18
- data/lib/paru/filter/document.rb +56 -42
- data/lib/paru/filter/emph.rb +5 -4
- data/lib/paru/filter/empty_block.rb +17 -0
- data/lib/paru/filter/empty_inline.rb +21 -0
- data/lib/paru/filter/header.rb +22 -21
- data/lib/paru/filter/horizontal_rule.rb +5 -7
- data/lib/paru/filter/image.rb +10 -4
- data/lib/paru/filter/line_block.rb +9 -0
- data/lib/paru/filter/line_break.rb +5 -12
- data/lib/paru/filter/link.rb +21 -20
- data/lib/paru/filter/list.rb +16 -16
- data/lib/paru/filter/list_attributes.rb +31 -18
- data/lib/paru/filter/markdown.rb +62 -42
- data/lib/paru/filter/math.rb +46 -48
- data/lib/paru/filter/meta.rb +15 -16
- data/lib/paru/filter/meta_blocks.rb +8 -7
- data/lib/paru/filter/meta_bool.rb +5 -4
- data/lib/paru/filter/meta_inlines.rb +9 -8
- data/lib/paru/filter/meta_list.rb +5 -4
- data/lib/paru/filter/meta_map.rb +30 -29
- data/lib/paru/filter/meta_string.rb +5 -4
- data/lib/paru/filter/meta_value.rb +13 -11
- data/lib/paru/filter/node.rb +125 -122
- data/lib/paru/filter/note.rb +19 -11
- data/lib/paru/filter/null.rb +5 -7
- data/lib/paru/filter/ordered_list.rb +18 -17
- data/lib/paru/filter/para.rb +12 -11
- data/lib/paru/filter/plain.rb +11 -10
- data/lib/paru/filter/quoted.rb +17 -16
- data/lib/paru/filter/raw_block.rb +18 -18
- data/lib/paru/filter/raw_inline.rb +21 -21
- data/lib/paru/filter/small_caps.rb +5 -4
- data/lib/paru/filter/soft_break.rb +5 -12
- data/lib/paru/filter/space.rb +5 -11
- data/lib/paru/filter/span.rb +17 -16
- data/lib/paru/filter/str.rb +17 -16
- data/lib/paru/filter/strikeout.rb +5 -4
- data/lib/paru/filter/strong.rb +10 -0
- data/lib/paru/filter/subscript.rb +5 -4
- data/lib/paru/filter/superscript.rb +5 -4
- data/lib/paru/filter/table.rb +28 -27
- data/lib/paru/filter/table_row.rb +13 -13
- data/lib/paru/filter/target.rb +14 -14
- data/lib/paru/filter/version.rb +19 -0
- data/lib/paru/pandoc.rb +18 -13
- data/lib/paru/pandoc_options.yaml +14 -1
- data/lib/paru/selector.rb +152 -148
- metadata +9 -5
- data/lib/paru/filter/string.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dead7ab75a8d8f924141e1c0bfa2e36f7c97d90f
|
4
|
+
data.tar.gz: b0ef3ff5ec66df9e58d1df8d79d920190de68f4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57ef6bd3756ae631416b7d774cabdbbfb11aa3c7cd42435fea953625241b4ef7a002e425df412051eda0412c79585e9dcbce35eb0113e2d6430884386393f624
|
7
|
+
data.tar.gz: ea0dcee317dbbdd7e4085ca0283430f7bbca2e57129ee48f74461388a598cf98243022afd45467e1fdfe51679cc931405f622b0eef55631e7c738c3806a490df
|
data/lib/paru.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "paru/pandoc"
|
2
|
+
require "paru/filter"
|
data/lib/paru/error.rb
CHANGED
data/lib/paru/filter.rb
CHANGED
@@ -1,82 +1,81 @@
|
|
1
1
|
module Paru
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
require_relative "./selector"
|
4
|
+
require_relative "filter/document"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
class Filter
|
6
|
+
PANDOC_BLOCK = [
|
7
|
+
"Plain",
|
8
|
+
"Para",
|
9
|
+
"LineBlock",
|
10
|
+
"CodeBlock",
|
11
|
+
"RawBlock",
|
12
|
+
"BlockQuote",
|
13
|
+
"OrderedList",
|
14
|
+
"BulletList",
|
15
|
+
"DefinitionList",
|
16
|
+
"Header",
|
17
|
+
"HorizontalRule",
|
18
|
+
"Table",
|
19
|
+
"Div",
|
20
|
+
"Null"
|
21
|
+
]
|
22
|
+
PANDOC_INLINE = [
|
23
|
+
"Str",
|
24
|
+
"Emph",
|
25
|
+
"Strong",
|
26
|
+
"Strikeout",
|
27
|
+
"Superscript",
|
28
|
+
"Subscript",
|
29
|
+
"SmallCaps",
|
30
|
+
"Quoted",
|
31
|
+
"Cite",
|
32
|
+
"Space",
|
33
|
+
"SoftBreak",
|
34
|
+
"LineBreak",
|
35
|
+
"Math",
|
36
|
+
"RawInline",
|
37
|
+
"Link",
|
38
|
+
"Image",
|
39
|
+
"Note",
|
40
|
+
"Span"
|
41
|
+
]
|
42
|
+
PANDOC_TYPES = PANDOC_BLOCK + PANDOC_INLINE
|
44
43
|
|
45
|
-
|
46
|
-
Filter.new().filter(&block)
|
47
|
-
end
|
44
|
+
class Filter
|
48
45
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
46
|
+
def self.run &block
|
47
|
+
Filter.new().filter(&block)
|
48
|
+
end
|
49
|
+
|
50
|
+
def document
|
51
|
+
PandocFilter::Document.from_JSON $stdin.read
|
52
|
+
end
|
53
|
+
|
54
|
+
def filter &block
|
55
|
+
@selectors = Hash.new
|
56
|
+
@filtered_nodes = []
|
57
|
+
@doc = document
|
54
58
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
@doc.each_depth_first do |node|
|
61
|
-
@filtered_nodes.push node
|
62
|
-
instance_eval(&block)
|
63
|
-
end
|
64
|
-
|
65
|
-
puts @doc.to_json
|
66
|
-
end
|
59
|
+
@doc.each_depth_first do |node|
|
60
|
+
@filtered_nodes.push node
|
61
|
+
instance_eval(&block)
|
62
|
+
end
|
67
63
|
|
68
|
-
|
69
|
-
|
70
|
-
end
|
64
|
+
puts @doc.to_json
|
65
|
+
end
|
71
66
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
end
|
67
|
+
def current_node
|
68
|
+
@filtered_nodes.last
|
69
|
+
end
|
76
70
|
|
77
|
-
|
78
|
-
|
79
|
-
|
71
|
+
def with selector
|
72
|
+
@selectors[selector] = Selector.new selector unless @selectors.has_key? selector
|
73
|
+
yield current_node if @selectors[selector].matches? current_node, @filtered_nodes
|
74
|
+
end
|
80
75
|
|
76
|
+
def metadata
|
77
|
+
@doc.meta
|
81
78
|
end
|
79
|
+
|
80
|
+
end
|
82
81
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module Paru
|
2
|
-
|
2
|
+
module PandocFilter
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
class Alignment
|
5
|
+
ALIGNMENTS = ["AlignLeft", "AlignRight", "AlignCenter", "AlignDefault"]
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
7
|
+
def initialize config
|
8
|
+
@config = config
|
9
|
+
end
|
11
10
|
end
|
11
|
+
end
|
12
12
|
end
|
@@ -1,43 +1,43 @@
|
|
1
1
|
module Paru
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def replace_at index, new_child
|
33
|
-
@children[index] = new_child
|
34
|
-
end
|
35
|
-
|
36
|
-
def each_depth_first &block
|
37
|
-
yield self
|
38
|
-
each {|child| child.each_depth_first(&block)} if has_children?
|
39
|
-
end
|
40
|
-
|
2
|
+
module PandocFilter
|
3
|
+
module ASTManipulation
|
4
|
+
|
5
|
+
def insert index, child
|
6
|
+
@children.insert index, child
|
7
|
+
end
|
8
|
+
|
9
|
+
def delete child
|
10
|
+
@children.delete child
|
11
|
+
end
|
12
|
+
|
13
|
+
def remove_at index
|
14
|
+
@children.delete_at index
|
15
|
+
end
|
16
|
+
|
17
|
+
def append child
|
18
|
+
@children.push child
|
19
|
+
end
|
20
|
+
alias << append
|
21
|
+
|
22
|
+
def prepend child
|
23
|
+
insert 0, child
|
24
|
+
end
|
25
|
+
|
26
|
+
def replace old_child, new_child
|
27
|
+
@children.find_index old_child do |index|
|
28
|
+
replace_at index, new_child
|
41
29
|
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def replace_at index, new_child
|
33
|
+
@children[index] = new_child
|
34
|
+
end
|
35
|
+
|
36
|
+
def each_depth_first &block
|
37
|
+
yield self
|
38
|
+
each {|child| child.each_depth_first(&block)} if has_children?
|
39
|
+
end
|
40
|
+
|
42
41
|
end
|
42
|
+
end
|
43
43
|
end
|
data/lib/paru/filter/attr.rb
CHANGED
@@ -1,40 +1,38 @@
|
|
1
1
|
module Paru
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
module PandocFilter
|
3
|
+
class Attr
|
4
|
+
include Enumerable
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
@data = attributes[2]
|
11
|
-
end
|
12
|
-
|
13
|
-
def each
|
14
|
-
@data.each
|
15
|
-
end
|
6
|
+
attr_accessor :id, :classes
|
7
|
+
def initialize(attributes)
|
8
|
+
@id, @classes, @data = attributes
|
9
|
+
end
|
16
10
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
11
|
+
def each
|
12
|
+
@data.each
|
13
|
+
end
|
22
14
|
|
23
|
-
|
24
|
-
|
25
|
-
|
15
|
+
def [](key)
|
16
|
+
if @data.key_exists? key
|
17
|
+
@data[key]
|
18
|
+
end
|
19
|
+
end
|
26
20
|
|
27
|
-
|
28
|
-
|
29
|
-
|
21
|
+
def has_key? name
|
22
|
+
@data.key_exists? name
|
23
|
+
end
|
30
24
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
25
|
+
def has_class? name
|
26
|
+
@classes.include? name
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_ast
|
30
|
+
[
|
31
|
+
@id,
|
32
|
+
@classes,
|
33
|
+
@data
|
34
|
+
]
|
35
|
+
end
|
39
36
|
end
|
37
|
+
end
|
40
38
|
end
|
data/lib/paru/filter/block.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
+
# BlockQuote [Block]
|
1
2
|
module Paru
|
2
|
-
|
3
|
-
|
3
|
+
module PandocFilter
|
4
|
+
require_relative "./block"
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
6
|
+
class BlockQuote < Block
|
7
|
+
def has_block?
|
8
|
+
true
|
9
|
+
end
|
10
10
|
end
|
11
|
+
end
|
11
12
|
end
|
data/lib/paru/filter/citation.rb
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
module Paru
|
2
|
-
|
3
|
-
|
2
|
+
module PandocFilter
|
3
|
+
require_relative "./inline"
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
class Citation
|
6
|
+
attr_accessor :id, :prefix, :suffix, :mode, :note_num, :hash
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
def initialize spec
|
9
|
+
@id = spec["citationId"] if spec.has_key? "citationId"
|
10
|
+
@prefix = Inline.new spec["citationPrefix"] if spec.has_key? "citationPrefix"
|
11
|
+
@suffix = Inline.new spec["citationSuffix"] if spec.has_key? "citationSuffix"
|
12
|
+
@mode = spec["citationMode"] if spec.has_key? "citationMode"
|
13
|
+
@note_num = spec["citationNoteNum"] if spec.has_key? "citationNoteNum"
|
14
|
+
@hash = spec["citationHash"] if spec.has_key? "citationHash"
|
15
|
+
end
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
17
|
+
def to_ast
|
18
|
+
citation = Hash.new
|
19
|
+
citation["citationId"] = @id if not @id.nil?
|
20
|
+
citation["citationPrefix"] = @prefix.ast_contents if not @prefix.nil?
|
21
|
+
citation["citationSuffix"] = @suffix.ast_contents if not @suffix.nil?
|
22
|
+
citation["citationMode"] = @mode if not @mode.nil?
|
23
|
+
citation["citationNoteNum"] = @note_num if not @note_num.nil?
|
24
|
+
citation["citationHash"] = @hash if not @hash.nil?
|
25
|
+
citation
|
26
|
+
end
|
28
27
|
end
|
28
|
+
end
|
29
29
|
end
|