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