paru 0.0.1 → 0.1.0

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