paru 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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