paru 0.2.4.2 → 0.2.4.3

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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/lib/paru.rb +8 -20
  3. data/lib/paru/error.rb +4 -6
  4. data/lib/paru/filter.rb +144 -110
  5. data/lib/paru/filter/ast_manipulation.rb +75 -39
  6. data/lib/paru/filter/attr.rb +72 -36
  7. data/lib/paru/filter/block.rb +14 -8
  8. data/lib/paru/filter/block_quote.rb +12 -9
  9. data/lib/paru/filter/bullet_list.rb +6 -6
  10. data/lib/paru/filter/citation.rb +51 -25
  11. data/lib/paru/filter/cite.rb +29 -20
  12. data/lib/paru/filter/code.rb +41 -24
  13. data/lib/paru/filter/code_block.rb +36 -21
  14. data/lib/paru/filter/definition_list.rb +19 -15
  15. data/lib/paru/filter/definition_list_item.rb +30 -17
  16. data/lib/paru/filter/div.rb +29 -21
  17. data/lib/paru/filter/document.rb +73 -46
  18. data/lib/paru/filter/emph.rb +6 -6
  19. data/lib/paru/filter/empty_block.rb +17 -13
  20. data/lib/paru/filter/empty_inline.rb +24 -17
  21. data/lib/paru/filter/header.rb +38 -23
  22. data/lib/paru/filter/image.rb +13 -11
  23. data/lib/paru/filter/inline.rb +21 -10
  24. data/lib/paru/filter/line_block.rb +6 -6
  25. data/lib/paru/filter/line_break.rb +6 -6
  26. data/lib/paru/filter/link.rb +33 -21
  27. data/lib/paru/filter/list.rb +26 -17
  28. data/lib/paru/filter/list_attributes.rb +53 -32
  29. data/lib/paru/filter/markdown.rb +102 -59
  30. data/lib/paru/filter/math.rb +65 -38
  31. data/lib/paru/filter/meta.rb +26 -16
  32. data/lib/paru/filter/meta_blocks.rb +12 -9
  33. data/lib/paru/filter/meta_bool.rb +6 -6
  34. data/lib/paru/filter/meta_inlines.rb +12 -9
  35. data/lib/paru/filter/meta_list.rb +6 -6
  36. data/lib/paru/filter/meta_map.rb +49 -33
  37. data/lib/paru/filter/meta_string.rb +6 -6
  38. data/lib/paru/filter/meta_value.rb +22 -14
  39. data/lib/paru/filter/node.rb +204 -129
  40. data/lib/paru/filter/note.rb +31 -20
  41. data/lib/paru/filter/null.rb +6 -6
  42. data/lib/paru/filter/ordered_list.rb +34 -18
  43. data/lib/paru/filter/para.rb +20 -13
  44. data/lib/paru/filter/plain.rb +21 -12
  45. data/lib/paru/filter/quoted.rb +27 -18
  46. data/lib/paru/filter/raw_block.rb +32 -19
  47. data/lib/paru/filter/raw_inline.rb +40 -22
  48. data/lib/paru/filter/small_caps.rb +7 -6
  49. data/lib/paru/filter/soft_break.rb +6 -6
  50. data/lib/paru/filter/space.rb +6 -6
  51. data/lib/paru/filter/span.rb +28 -18
  52. data/lib/paru/filter/str.rb +29 -18
  53. data/lib/paru/filter/strikeout.rb +6 -6
  54. data/lib/paru/filter/strong.rb +6 -6
  55. data/lib/paru/filter/subscript.rb +6 -6
  56. data/lib/paru/filter/superscript.rb +6 -6
  57. data/lib/paru/filter/table.rb +51 -29
  58. data/lib/paru/filter/table_row.rb +21 -14
  59. data/lib/paru/filter/target.rb +29 -15
  60. data/lib/paru/filter/version.rb +23 -14
  61. data/lib/paru/pandoc.rb +165 -111
  62. data/lib/paru/pandoc_options.yaml +3 -3
  63. data/lib/paru/selector.rb +176 -153
  64. metadata +2 -3
  65. data/lib/paru/filter/alignment.rb +0 -30
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright 2015, 2016 Huub de Beer <Huub@heerdebeer.org>
2
+ # Copyright 2015, 2016, 2017 Huub de Beer <Huub@heerdebeer.org>
3
3
  #
4
4
  # This file is part of Paru
5
5
  #
@@ -17,40 +17,76 @@
17
17
  # along with Paru. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
  module Paru
20
- module PandocFilter
21
- class Attr
22
- include Enumerable
23
-
24
- attr_accessor :id, :classes
25
- def initialize(attributes)
26
- @id, @classes, @data = attributes
27
- end
28
-
29
- def each
30
- @data.each
31
- end
32
-
33
- def [](key)
34
- if @data.key_exists? key
35
- @data[key]
36
- end
37
- end
38
-
39
- def has_key? name
40
- @data.key_exists? name
41
- end
42
-
43
- def has_class? name
44
- @classes.include? name
45
- end
46
-
47
- def to_ast
48
- [
49
- @id,
50
- @classes,
51
- @data
52
- ]
53
- end
20
+ module PandocFilter
21
+
22
+ # Attr represents an attribute object for a node. It contains of an id, a
23
+ # list of class names and a list of key-value pairs.
24
+ #
25
+ # @see https://hackage.haskell.org/package/pandoc-types-1.17.0.5/docs/Text-Pandoc-Definition.html#t:Attr
26
+ #
27
+ # @!attribute id
28
+ # @return [String]
29
+ #
30
+ # @!attribute classes
31
+ # @return [Array<String>]
32
+ class Attr
33
+ include Enumerable
34
+
35
+ attr_accessor :id, :classes
36
+
37
+ # Create a new attributes object
38
+ #
39
+ # @param attributes [Array] the attributes as [id, [class names],
40
+ # [key-value pairs]]
41
+ def initialize(attributes)
42
+ @id, @classes, @data = attributes
43
+ end
44
+
45
+ # For each key-value pair of this attributes object
46
+ def each
47
+ @data.each
48
+ end
49
+
50
+ # Get the value for key in this attributes object
51
+ #
52
+ # @param key [String] the key to get the value for. Nil if it does
53
+ # not exists
54
+ def [](key)
55
+ if @data.key_exists? key
56
+ @data[key]
57
+ end
58
+ end
59
+
60
+ # Does this attributes object have this key?
61
+ #
62
+ # @param name [String] key to find
63
+ #
64
+ # @return [Boolean] true if this key exist, false otherwise
65
+ def has_key?(name)
66
+ @data.key_exists? name
67
+ end
68
+
69
+ # Does this attributes object have a class?
70
+ #
71
+ # @param name [String] the class name to search for.
72
+ #
73
+ # @return [Boolean] true if this class name exist, false
74
+ # otherwise.
75
+ def has_class?(name)
76
+ @classes.include? name
77
+ end
78
+
79
+ # Convert this attributes object to an AST representation
80
+ #
81
+ # @return [Array] Array containing id, class name list, and
82
+ # key-value pair list
83
+ def to_ast
84
+ [
85
+ @id,
86
+ @classes,
87
+ @data
88
+ ]
89
+ end
90
+ end
54
91
  end
55
- end
56
92
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright 2015, 2016 Huub de Beer <Huub@heerdebeer.org>
2
+ # Copyright 2015, 2016, 2017 Huub de Beer <Huub@heerdebeer.org>
3
3
  #
4
4
  # This file is part of Paru
5
5
  #
@@ -17,13 +17,19 @@
17
17
  # along with Paru. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
  module Paru
20
- module PandocFilter
21
- require_relative "./node"
20
+ module PandocFilter
21
+ require_relative "./node"
22
+
23
+ # A Block level node.
24
+ # @see https://hackage.haskell.org/package/pandoc-types-1.17.0.5/docs/Text-Pandoc-Definition.html#t:Block
25
+ class Block < Node
22
26
 
23
- class Block < Node
24
- def is_block?
25
- true
26
- end
27
+ # Is this node a block?
28
+ #
29
+ # @return [Boolean] true
30
+ def is_block?
31
+ true
32
+ end
33
+ end
27
34
  end
28
- end
29
35
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright 2015, 2016 Huub de Beer <Huub@heerdebeer.org>
2
+ # Copyright 2015, 2016, 2017 Huub de Beer <Huub@heerdebeer.org>
3
3
  #
4
4
  # This file is part of Paru
5
5
  #
@@ -17,14 +17,17 @@
17
17
  # along with Paru. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
  module Paru
20
- module PandocFilter
21
- require_relative "./block"
20
+ module PandocFilter
21
+ require_relative "./block"
22
22
 
23
- # BlockQuote [Block]
24
- class BlockQuote < Block
25
- def has_block?
26
- true
27
- end
23
+ # A BlockQuote node. Contains a list of Blocks
24
+ class BlockQuote < Block
25
+ # Has this node a block?
26
+ #
27
+ # @return [Boolean] true
28
+ def has_block?
29
+ true
30
+ end
31
+ end
28
32
  end
29
- end
30
33
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright 2015, 2016 Huub de Beer <Huub@heerdebeer.org>
2
+ # Copyright 2015, 2016, 2017 Huub de Beer <Huub@heerdebeer.org>
3
3
  #
4
4
  # This file is part of Paru
5
5
  #
@@ -17,11 +17,11 @@
17
17
  # along with Paru. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
  module Paru
20
- module PandocFilter
21
- require_relative "./list"
20
+ module PandocFilter
21
+ require_relative "./list"
22
22
 
23
- # BulletList [[Block]]
24
- class BulletList < List
23
+ # BulletList, contains a list of list of Block nodes.
24
+ class BulletList < List
25
+ end
25
26
  end
26
- end
27
27
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright 2015, 2016 Huub de Beer <Huub@heerdebeer.org>
2
+ # Copyright 2015, 2016, 2017 Huub de Beer <Huub@heerdebeer.org>
3
3
  #
4
4
  # This file is part of Paru
5
5
  #
@@ -17,31 +17,57 @@
17
17
  # along with Paru. If not, see <http://www.gnu.org/licenses/>.
18
18
  #--
19
19
  module Paru
20
- module PandocFilter
21
- require_relative "./inline"
20
+ module PandocFilter
21
+ require_relative "./inline"
22
+
23
+ # A Citation consists of an id, a prefix, a suffix, a mode, a note
24
+ # number, and integer hash. All of which are optional.
25
+ #
26
+ # @see https://hackage.haskell.org/package/pandoc-types-1.17.0.5/docs/Text-Pandoc-Definition.html#t:Citation
27
+ #
28
+ # @!attribute id
29
+ # @return [String]
30
+ #
31
+ # @!attribute prefix
32
+ # @return [Array<Inline>]
33
+ #
34
+ # @!attribute suffix
35
+ # @return [Array<Inline>]
36
+ #
37
+ # @!attribute mode
38
+ # @return [String]
39
+ #
40
+ # @!attribute note_num
41
+ # @return [Integer]
42
+ #
43
+ # @!attribute hash
44
+ # @return [Integer]
45
+ class Citation
46
+ attr_accessor :id, :prefix, :suffix, :mode, :note_num, :hash
22
47
 
23
- class Citation
24
- attr_accessor :id, :prefix, :suffix, :mode, :note_num, :hash
48
+ # Create a new Citation node base on an AST specification
49
+ #
50
+ # @param spec [Hash] the specification of this citation
51
+ def initialize(spec)
52
+ @id = spec["citationId"] if spec.has_key? "citationId"
53
+ @prefix = Inline.new spec["citationPrefix"] if spec.has_key? "citationPrefix"
54
+ @suffix = Inline.new spec["citationSuffix"] if spec.has_key? "citationSuffix"
55
+ @mode = spec["citationMode"] if spec.has_key? "citationMode"
56
+ @note_num = spec["citationNoteNum"] if spec.has_key? "citationNoteNum"
57
+ @hash = spec["citationHash"] if spec.has_key? "citationHash"
58
+ end
25
59
 
26
- def initialize spec
27
- @id = spec["citationId"] if spec.has_key? "citationId"
28
- @prefix = Inline.new spec["citationPrefix"] if spec.has_key? "citationPrefix"
29
- @suffix = Inline.new spec["citationSuffix"] if spec.has_key? "citationSuffix"
30
- @mode = spec["citationMode"] if spec.has_key? "citationMode"
31
- @note_num = spec["citationNoteNum"] if spec.has_key? "citationNoteNum"
32
- @hash = spec["citationHash"] if spec.has_key? "citationHash"
33
- end
34
-
35
- def to_ast
36
- citation = Hash.new
37
- citation["citationId"] = @id if not @id.nil?
38
- citation["citationPrefix"] = @prefix.ast_contents if not @prefix.nil?
39
- citation["citationSuffix"] = @suffix.ast_contents if not @suffix.nil?
40
- citation["citationMode"] = @mode if not @mode.nil?
41
- citation["citationNoteNum"] = @note_num if not @note_num.nil?
42
- citation["citationHash"] = @hash if not @hash.nil?
43
- citation
44
- end
60
+ # Convert this Citation to an AST representation
61
+ def to_ast()
62
+ citation = Hash.new
63
+ citation["citationId"] = @id if not @id.nil?
64
+ citation["citationPrefix"] = @prefix.ast_contents if not @prefix.nil?
65
+ citation["citationSuffix"] = @suffix.ast_contents if not @suffix.nil?
66
+ citation["citationMode"] = @mode if not @mode.nil?
67
+ citation["citationNoteNum"] = @note_num if not @note_num.nil?
68
+ citation["citationHash"] = @hash if not @hash.nil?
69
+ citation
70
+ end
71
+ end
45
72
  end
46
- end
47
73
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright 2015, 2016 Huub de Beer <Huub@heerdebeer.org>
2
+ # Copyright 2015, 2016, 2017 Huub de Beer <Huub@heerdebeer.org>
3
3
  #
4
4
  # This file is part of Paru
5
5
  #
@@ -17,28 +17,37 @@
17
17
  # along with Paru. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
  module Paru
20
- module PandocFilter
21
- require_relative "./inline"
20
+ module PandocFilter
21
+ require_relative "./inline"
22
22
 
23
- # Cite [Citation] [Inline]
24
- class Cite < Inline
25
- attr_accessor :citations
23
+ # A Cite node, consisting of a list of Citation nodes, and a list of
24
+ # Inline nodes
25
+ #
26
+ # @!attribute citations
27
+ # @return [Array<Citation>]
28
+ class Cite < Inline
29
+ attr_accessor :citations
26
30
 
27
- def initialize contents
28
- @citations = []
29
- contents[0].each do |citation|
30
- @citations.push Citation.new(citation)
31
- end
32
- super contents[1]
33
- end
31
+ # Create a new Cite node
32
+ #
33
+ # @param contents [Array] an array containing a list of citations
34
+ # and a list of inline nodes
35
+ def initialize contents
36
+ @citations = []
37
+ contents[0].each do |citation|
38
+ @citations.push Citation.new(citation)
39
+ end
40
+ super contents[1]
41
+ end
34
42
 
35
- def ast_contents
36
- [
37
- @citations.map {|citation| citation.to_ast},
38
- super
39
- ]
40
- end
43
+ # Create an AST representation of this Cite node.
44
+ def ast_contents()
45
+ [
46
+ @citations.map {|citation| citation.to_ast},
47
+ super
48
+ ]
49
+ end
50
+ end
41
51
  end
42
- end
43
52
  end
44
53
 
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright 2015, 2016 Huub de Beer <Huub@heerdebeer.org>
2
+ # Copyright 2015, 2016, 2017 Huub de Beer <Huub@heerdebeer.org>
3
3
  #
4
4
  # This file is part of Paru
5
5
  #
@@ -17,33 +17,50 @@
17
17
  # along with Paru. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
  module Paru
20
- module PandocFilter
21
- require_relative "./inline"
22
- require_relative "./attr"
20
+ module PandocFilter
21
+ require_relative "./inline"
22
+ require_relative "./attr"
23
23
 
24
- # Code Attr String
25
- class Code < Inline
26
- attr_accessor :attr, :string
24
+ # A Code node, with an attribute object and the code itself as a
25
+ # string.
26
+ #
27
+ # @!attribute attr
28
+ # @return [Attr]
29
+ #
30
+ # @!attribute string
31
+ # @return [String]
32
+ class Code < Inline
33
+ attr_accessor :attr, :string
27
34
 
28
- def initialize contents
29
- @attr = Attr.new contents[0]
30
- @string = contents[1]
31
- end
35
+ # Create a new Code node
36
+ #
37
+ # @param contents [Array] an array of the attribute and the code
38
+ def initialize(contents)
39
+ @attr = Attr.new contents[0]
40
+ @string = contents[1]
41
+ end
32
42
 
33
- def ast_contents
34
- [
35
- @attr.to_ast,
36
- @string
37
- ]
38
- end
43
+ # Create an AST representation of this Code node.
44
+ def ast_contents()
45
+ [
46
+ @attr.to_ast,
47
+ @string
48
+ ]
49
+ end
39
50
 
40
- def has_string?
41
- true
42
- end
51
+ # Has this Code node a string contents?
52
+ #
53
+ # @return [Boolean] true
54
+ def has_string?()
55
+ true
56
+ end
43
57
 
44
- def has_inline?
45
- false
46
- end
58
+ # Has this code node inline contents?
59
+ #
60
+ # @return [Boolean] false
61
+ def has_inline?()
62
+ false
63
+ end
64
+ end
47
65
  end
48
- end
49
66
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright 2015, 2016 Huub de Beer <Huub@heerdebeer.org>
2
+ # Copyright 2015, 2016, 2017 Huub de Beer <Huub@heerdebeer.org>
3
3
  #
4
4
  # This file is part of Paru
5
5
  #
@@ -17,29 +17,44 @@
17
17
  # along with Paru. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
19
  module Paru
20
- module PandocFilter
21
- require_relative "./block"
22
- require_relative "./attr"
20
+ module PandocFilter
21
+ require_relative "./block"
22
+ require_relative "./attr"
23
23
 
24
- # CodeBlock Attr String
25
- class CodeBlock < Block
26
- attr_accessor :attr, :string
24
+ # A CodeBlock is a Block level node with an attribute object and the
25
+ # code as a string
26
+ #
27
+ # @!attribute attr
28
+ # @return [Attr]
29
+ #
30
+ # @!attribute string
31
+ # @return [String]
32
+ class CodeBlock < Block
33
+ attr_accessor :attr, :string
27
34
 
28
- def initialize(contents)
29
- @attr = Attr.new contents[0]
30
- @string = contents[1]
31
- end
35
+ # Create a new CodeBlock based on the contents
36
+ #
37
+ # @param contents [Array] an array with the attribute and the code
38
+ # string
39
+ def initialize(contents)
40
+ @attr = Attr.new contents[0]
41
+ @string = contents[1]
42
+ end
32
43
 
33
- def ast_contents
34
- [
35
- @attr.to_ast,
36
- @string
37
- ]
38
- end
44
+ # An AST representation of this CodeBlock
45
+ def ast_contents()
46
+ [
47
+ @attr.to_ast,
48
+ @string
49
+ ]
50
+ end
39
51
 
40
- def has_string?
41
- true
42
- end
52
+ # Has this CodeBlock string contents?
53
+ #
54
+ # @return [Boolean] true
55
+ def has_string?()
56
+ true
57
+ end
58
+ end
43
59
  end
44
- end
45
60
  end