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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/lib/paru/error.rb +4 -0
  3. data/lib/paru/filter.rb +77 -68
  4. data/lib/paru/filter/alignment.rb +12 -0
  5. data/lib/paru/filter/ast_manipulation.rb +43 -0
  6. data/lib/paru/filter/attr.rb +40 -0
  7. data/lib/paru/filter/block.rb +11 -0
  8. data/lib/paru/filter/block_quote.rb +11 -0
  9. data/lib/paru/filter/bullet_list.rb +8 -0
  10. data/lib/paru/filter/citation.rb +29 -0
  11. data/lib/paru/filter/cite.rb +25 -0
  12. data/lib/paru/filter/code.rb +30 -0
  13. data/lib/paru/filter/code_block.rb +26 -0
  14. data/lib/paru/filter/definition_list.rb +19 -0
  15. data/lib/paru/filter/definition_list_item.rb +22 -0
  16. data/lib/paru/filter/div.rb +25 -0
  17. data/lib/paru/filter/document.rb +47 -0
  18. data/lib/paru/filter/emph.rb +8 -0
  19. data/lib/paru/filter/header.rb +28 -0
  20. data/lib/paru/filter/horizontal_rule.rb +11 -0
  21. data/lib/paru/filter/image.rb +9 -0
  22. data/lib/paru/filter/inline.rb +19 -0
  23. data/lib/paru/filter/line_break.rb +16 -0
  24. data/lib/paru/filter/link.rb +27 -0
  25. data/lib/paru/filter/list.rb +22 -0
  26. data/lib/paru/filter/list_attributes.rb +24 -0
  27. data/lib/paru/filter/markdown.rb +52 -0
  28. data/lib/paru/filter/math.rb +51 -0
  29. data/lib/paru/filter/meta.rb +24 -0
  30. data/lib/paru/filter/meta_blocks.rb +13 -0
  31. data/lib/paru/filter/meta_bool.rb +9 -0
  32. data/lib/paru/filter/meta_inlines.rb +13 -0
  33. data/lib/paru/filter/meta_list.rb +9 -0
  34. data/lib/paru/filter/meta_map.rb +37 -0
  35. data/lib/paru/filter/meta_string.rb +9 -0
  36. data/lib/paru/filter/meta_value.rb +20 -0
  37. data/lib/paru/filter/node.rb +149 -0
  38. data/lib/paru/filter/note.rb +17 -0
  39. data/lib/paru/filter/null.rb +11 -0
  40. data/lib/paru/filter/ordered_list.rb +23 -0
  41. data/lib/paru/filter/para.rb +16 -0
  42. data/lib/paru/filter/plain.rb +15 -0
  43. data/lib/paru/filter/quoted.rb +23 -0
  44. data/lib/paru/filter/raw_block.rb +25 -0
  45. data/lib/paru/filter/raw_inline.rb +30 -0
  46. data/lib/paru/filter/small_caps.rb +9 -0
  47. data/lib/paru/filter/soft_break.rb +16 -0
  48. data/lib/paru/filter/space.rb +15 -0
  49. data/lib/paru/filter/span.rb +23 -0
  50. data/lib/paru/filter/str.rb +23 -0
  51. data/lib/paru/filter/strikeout.rb +9 -0
  52. data/lib/paru/filter/string.rb +9 -0
  53. data/lib/paru/filter/subscript.rb +9 -0
  54. data/lib/paru/filter/superscript.rb +9 -0
  55. data/lib/paru/filter/table.rb +34 -0
  56. data/lib/paru/filter/table_row.rb +18 -0
  57. data/lib/paru/filter/target.rb +19 -0
  58. data/lib/paru/pandoc_options.yaml +4 -2
  59. data/lib/paru/selector.rb +151 -0
  60. metadata +60 -4
@@ -0,0 +1,9 @@
1
+ module Paru
2
+ module PandocFilter
3
+
4
+ require_relative "./meta_value"
5
+
6
+ class MetaString < MetaValue
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,20 @@
1
+ module Paru
2
+ module PandocFilter
3
+
4
+ require_relative "./node"
5
+
6
+ class MetaValue < Node
7
+
8
+ attr_accessor :value
9
+
10
+ def initialize value
11
+ @value = value
12
+ end
13
+
14
+ def ast_contents
15
+ @value
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -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,17 @@
1
+ module Paru
2
+ module PandocFilter
3
+
4
+ require_relative "./inline"
5
+ require_relative "./block"
6
+
7
+ class Note < Inline
8
+ def has_block?
9
+ true
10
+ end
11
+
12
+ def has_inline?
13
+ false
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ module Paru
2
+ module PandocFilter
3
+ require_relative "./block"
4
+
5
+ class Null < Block
6
+ def initialize contents
7
+ super []
8
+ end
9
+ end
10
+ end
11
+ 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,16 @@
1
+ module Paru
2
+ module PandocFilter
3
+ require_relative "./block"
4
+
5
+ class Para < Block
6
+ def initialize contents
7
+ super contents, true
8
+ end
9
+
10
+ def has_inline?
11
+ true
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module Paru
2
+ module PandocFilter
3
+ require_relative "./block"
4
+
5
+ class Plain < Block
6
+ def initialize contents
7
+ super contents, true
8
+ end
9
+
10
+ def has_inline?
11
+ true
12
+ end
13
+ end
14
+ end
15
+ 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,9 @@
1
+ module Paru
2
+ module PandocFilter
3
+ require_relative "./inline"
4
+
5
+ class SmallCaps < Inline
6
+ end
7
+ end
8
+ end
9
+
@@ -0,0 +1,16 @@
1
+ module Paru
2
+ module PandocFilter
3
+ require_relative "./inline"
4
+
5
+ class SoftBreak < Inline
6
+ def initialize contents
7
+ super []
8
+ end
9
+
10
+ def has_inline?
11
+ false
12
+ end
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,15 @@
1
+ module Paru
2
+ module PandocFilter
3
+ require_relative "./inline"
4
+
5
+ class Space < Inline
6
+ def initialize contents
7
+ super []
8
+ end
9
+
10
+ def has_inline?
11
+ false
12
+ end
13
+ end
14
+ end
15
+ 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