paru 0.2.5c → 0.2.5f
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.
- checksums.yaml +4 -4
- data/bin/do-pandoc.rb +5 -5
- data/bin/pandoc2yaml.rb +23 -58
- data/lib/paru.rb +1 -5
- data/lib/paru/error.rb +0 -2
- data/lib/paru/filter.rb +46 -30
- data/lib/paru/filter/ast_manipulation.rb +0 -1
- data/lib/paru/filter/attr.rb +0 -1
- data/lib/paru/filter/block.rb +2 -2
- data/lib/paru/filter/block_quote.rb +2 -2
- data/lib/paru/filter/bullet_list.rb +2 -2
- data/lib/paru/filter/citation.rb +2 -2
- data/lib/paru/filter/cite.rb +8 -4
- data/lib/paru/filter/code.rb +11 -3
- data/lib/paru/filter/code_block.rb +5 -3
- data/lib/paru/filter/definition_list.rb +2 -2
- data/lib/paru/filter/definition_list_item.rb +4 -4
- data/lib/paru/filter/div.rb +5 -3
- data/lib/paru/filter/document.rb +47 -16
- data/lib/paru/filter/emph.rb +2 -2
- data/lib/paru/filter/empty_block.rb +3 -3
- data/lib/paru/filter/empty_inline.rb +2 -2
- data/lib/paru/filter/header.rb +6 -3
- data/lib/paru/filter/horizontal_rule.rb +6 -6
- data/lib/paru/filter/image.rb +2 -3
- data/lib/paru/filter/inline.rb +5 -2
- data/lib/paru/filter/inner_markdown.rb +85 -0
- data/lib/paru/filter/line_block.rb +8 -2
- data/lib/paru/filter/line_break.rb +2 -2
- data/lib/paru/filter/link.rb +4 -5
- data/lib/paru/filter/list.rb +8 -6
- data/lib/paru/filter/math.rb +2 -2
- data/lib/paru/filter/meta.rb +15 -4
- data/lib/paru/filter/meta_blocks.rb +2 -2
- data/lib/paru/filter/meta_bool.rb +2 -3
- data/lib/paru/filter/meta_inlines.rb +4 -2
- data/lib/paru/filter/meta_list.rb +2 -3
- data/lib/paru/filter/meta_map.rb +10 -142
- data/lib/paru/filter/meta_string.rb +1 -1
- data/lib/paru/filter/meta_value.rb +5 -4
- data/lib/paru/filter/metadata.rb +114 -0
- data/lib/paru/filter/node.rb +130 -11
- data/lib/paru/filter/note.rb +3 -4
- data/lib/paru/filter/null.rb +2 -2
- data/lib/paru/filter/ordered_list.rb +5 -5
- data/lib/paru/filter/para.rb +4 -2
- data/lib/paru/filter/plain.rb +4 -2
- data/lib/paru/filter/quoted.rb +2 -2
- data/lib/paru/filter/raw_block.rb +5 -3
- data/lib/paru/filter/raw_inline.rb +2 -3
- data/lib/paru/filter/small_caps.rb +2 -2
- data/lib/paru/filter/soft_break.rb +2 -2
- data/lib/paru/filter/space.rb +2 -2
- data/lib/paru/filter/span.rb +3 -4
- data/lib/paru/filter/str.rb +2 -2
- data/lib/paru/filter/strikeout.rb +2 -2
- data/lib/paru/filter/strong.rb +2 -2
- data/lib/paru/filter/subscript.rb +2 -2
- data/lib/paru/filter/superscript.rb +2 -2
- data/lib/paru/filter/table.rb +3 -3
- data/lib/paru/filter/table_row.rb +2 -2
- data/lib/paru/filter/target.rb +0 -1
- data/lib/paru/filter/version.rb +2 -2
- data/lib/paru/filter_error.rb +25 -0
- data/lib/paru/pandoc.rb +3 -4
- data/lib/paru/pandoc2yaml.rb +71 -0
- data/lib/paru/selector.rb +2 -4
- metadata +6 -3
- data/lib/paru/filter/markdown.rb +0 -150
data/lib/paru/filter/node.rb
CHANGED
@@ -16,14 +16,24 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "../pandoc.rb"
|
20
|
+
|
21
|
+
require_relative './ast_manipulation.rb'
|
22
|
+
|
19
23
|
module Paru
|
20
24
|
# PandocFilter is a module containig the paru's Filter functionality
|
21
25
|
module PandocFilter
|
26
|
+
# A Paru::Pandoc converter from JSON to markdown
|
27
|
+
AST2MARKDOWN = Paru::Pandoc.new do
|
28
|
+
from "json"
|
29
|
+
to "markdown"
|
30
|
+
end
|
22
31
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
32
|
+
# A Paru::Pandoc converter from markdown to JSON
|
33
|
+
MARKDOWN2JSON = Paru::Pandoc.new do
|
34
|
+
from "markdown"
|
35
|
+
to "json"
|
36
|
+
end
|
27
37
|
|
28
38
|
# Every node in a Pandoc AST is mapped to Node. Filters are all about
|
29
39
|
# manipulating Nodes.
|
@@ -33,22 +43,68 @@ module Paru
|
|
33
43
|
class Node
|
34
44
|
include Enumerable
|
35
45
|
include ASTManipulation
|
36
|
-
include Markdown
|
37
46
|
|
38
47
|
attr_accessor :parent
|
39
48
|
|
40
|
-
|
41
|
-
|
42
|
-
|
49
|
+
# Block level nodes
|
50
|
+
require_relative './block_quote.rb'
|
51
|
+
require_relative './block.rb'
|
52
|
+
require_relative './bullet_list.rb'
|
53
|
+
require_relative './code_block.rb'
|
54
|
+
require_relative './definition_list_item.rb'
|
55
|
+
require_relative './definition_list.rb'
|
56
|
+
require_relative './div.rb'
|
57
|
+
require_relative './empty_block.rb'
|
58
|
+
require_relative './header.rb'
|
59
|
+
require_relative './horizontal_rule.rb'
|
60
|
+
require_relative './line_block.rb'
|
61
|
+
require_relative './null.rb'
|
62
|
+
require_relative './ordered_list.rb'
|
63
|
+
require_relative './para.rb'
|
64
|
+
require_relative './plain.rb'
|
65
|
+
require_relative './raw_block.rb'
|
66
|
+
require_relative './table.rb'
|
67
|
+
require_relative './table_row.rb'
|
68
|
+
|
69
|
+
# Inline level nodes
|
70
|
+
require_relative './cite.rb'
|
71
|
+
require_relative './code.rb'
|
72
|
+
require_relative './emph.rb'
|
73
|
+
require_relative './empty_inline.rb'
|
74
|
+
require_relative './image.rb'
|
75
|
+
require_relative './inline.rb'
|
76
|
+
require_relative './line_break.rb'
|
77
|
+
require_relative './link.rb'
|
78
|
+
require_relative './math.rb'
|
79
|
+
require_relative './note.rb'
|
80
|
+
require_relative './quoted.rb'
|
81
|
+
require_relative './raw_inline.rb'
|
82
|
+
require_relative './small_caps.rb'
|
83
|
+
require_relative './soft_break.rb'
|
84
|
+
require_relative './space.rb'
|
85
|
+
require_relative './span.rb'
|
86
|
+
require_relative './strikeout.rb'
|
87
|
+
require_relative './strong.rb'
|
88
|
+
require_relative './str.rb'
|
89
|
+
require_relative './subscript.rb'
|
90
|
+
require_relative './superscript.rb'
|
91
|
+
|
92
|
+
# Metadata level nodes
|
93
|
+
require_relative './meta_blocks.rb'
|
94
|
+
require_relative './meta_bool.rb'
|
95
|
+
require_relative './meta_inlines.rb'
|
96
|
+
require_relative './meta_list.rb'
|
97
|
+
require_relative './meta_map.rb'
|
98
|
+
require_relative './meta_string.rb'
|
43
99
|
|
44
100
|
# Create a new Node with contents. Also indicate if this node has
|
45
101
|
# inline children or block children.
|
46
102
|
#
|
47
|
-
# @param contents [Array<pandoc node in JSON>] the contents of
|
103
|
+
# @param contents [Array<pandoc node in JSON> = []] the contents of
|
48
104
|
# this node
|
49
105
|
# @param inline_children [Boolean] does this node have
|
50
106
|
# inline children (true) or block children (false).
|
51
|
-
def initialize(contents, inline_children = false)
|
107
|
+
def initialize(contents = [], inline_children = false)
|
52
108
|
@children = []
|
53
109
|
@parent = nil
|
54
110
|
|
@@ -110,7 +166,7 @@ module Paru
|
|
110
166
|
# @return [Boolean] True if this node has any children, false
|
111
167
|
# otherwise.
|
112
168
|
def has_children?()
|
113
|
-
defined? @children and @children.size > 0
|
169
|
+
defined? @children and not @children.nil? and @children.size > 0
|
114
170
|
end
|
115
171
|
|
116
172
|
# Get this node's children,
|
@@ -281,6 +337,69 @@ module Paru
|
|
281
337
|
}
|
282
338
|
end
|
283
339
|
|
340
|
+
# Get the markdown representation of this Node, including the Node
|
341
|
+
# itself.
|
342
|
+
#
|
343
|
+
# @return [String] the outer markdown representation of this Node
|
344
|
+
def markdown()
|
345
|
+
temp_doc = PandocFilter::Document.fragment [self]
|
346
|
+
markdown = AST2MARKDOWN << temp_doc.to_JSON
|
347
|
+
markdown
|
348
|
+
end
|
349
|
+
|
350
|
+
alias outer_markdown markdown
|
351
|
+
|
352
|
+
# Set the markdown representation of this Node: replace this Node
|
353
|
+
# by the Node represented by the markdown string. If an inline
|
354
|
+
# node is being replaced and the replacement has more than one
|
355
|
+
# paragraph, only the contents of the first paragraph is used
|
356
|
+
#
|
357
|
+
# @param markdown [String] the markdown string to replace this
|
358
|
+
# Node
|
359
|
+
#
|
360
|
+
# @example Replacing all horizontal lines by a Plain node saying "hi"
|
361
|
+
# Paru::Filter.run do
|
362
|
+
# with "HorizontalLine" do |line|
|
363
|
+
# line.markdown = "hi"
|
364
|
+
# end
|
365
|
+
# end
|
366
|
+
#
|
367
|
+
def markdown=(markdown)
|
368
|
+
json = MARKDOWN2JSON << markdown
|
369
|
+
temp_doc = PandocFilter::Document.from_JSON json
|
370
|
+
|
371
|
+
if not has_parent? or is_root?
|
372
|
+
@children = temp_doc.children
|
373
|
+
else
|
374
|
+
# replace current node by new nodes
|
375
|
+
# There is a difference between inline and block nodes
|
376
|
+
current_index = parent.find_index self
|
377
|
+
|
378
|
+
# By default, pandoc creates a Block level node when
|
379
|
+
# converting a string. However, if the original is a
|
380
|
+
# inline level node, so should its replacement node(s) be.
|
381
|
+
# Only using first block node (paragraph?)
|
382
|
+
if is_inline?
|
383
|
+
temp_doc = temp_doc.children.first
|
384
|
+
|
385
|
+
if not temp_doc.children.all? {|node| node.is_inline?}
|
386
|
+
raise Error.new "Cannot replace the inline level node represented by '#{outer_markdown}' with markdown that converts to block level nodes: '#{markdown}'."
|
387
|
+
end
|
388
|
+
|
389
|
+
end
|
390
|
+
|
391
|
+
index = current_index
|
392
|
+
temp_doc.each do |child|
|
393
|
+
index += 1
|
394
|
+
parent.insert index, child
|
395
|
+
end
|
396
|
+
# Remove the original node
|
397
|
+
parent.remove_at current_index
|
398
|
+
end
|
399
|
+
|
400
|
+
end
|
401
|
+
|
402
|
+
alias outer_markdown= markdown=
|
284
403
|
end
|
285
404
|
end
|
286
405
|
end
|
data/lib/paru/filter/note.rb
CHANGED
@@ -16,12 +16,11 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./inline.rb"
|
20
|
+
require_relative "./block.rb"
|
21
|
+
|
19
22
|
module Paru
|
20
23
|
module PandocFilter
|
21
|
-
|
22
|
-
require_relative "./inline"
|
23
|
-
require_relative "./block"
|
24
|
-
|
25
24
|
# A Note node like a foot note or end note. It is a special node in
|
26
25
|
# the sense that itself is an Inline level node, but its contents are
|
27
26
|
# Block level.
|
data/lib/paru/filter/null.rb
CHANGED
@@ -16,10 +16,10 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./empty_block.rb"
|
20
|
+
|
19
21
|
module Paru
|
20
22
|
module PandocFilter
|
21
|
-
require_relative "./empty_block"
|
22
|
-
|
23
23
|
# A Null node is an EmptyBlock node
|
24
24
|
class Null < EmptyBlock
|
25
25
|
end
|
@@ -16,11 +16,11 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./list.rb"
|
20
|
+
require_relative "./list_attributes.rb"
|
21
|
+
|
19
22
|
module Paru
|
20
23
|
module PandocFilter
|
21
|
-
require_relative "./list"
|
22
|
-
require_relative "./list_attributes"
|
23
|
-
|
24
24
|
# An OrderedList Node
|
25
25
|
#
|
26
26
|
# @example In markdown an ordered list looks like
|
@@ -39,14 +39,14 @@ module Paru
|
|
39
39
|
#
|
40
40
|
# @param contents [Array]
|
41
41
|
def initialize(contents)
|
42
|
-
@list_attributes = ListAttributes.new contents[0]
|
43
42
|
super contents[1]
|
43
|
+
@list_attributes = ListAttributes.new contents[0]
|
44
44
|
end
|
45
45
|
|
46
46
|
# The AST contents
|
47
47
|
#
|
48
48
|
# @return [Array]
|
49
|
-
def ast_contents
|
49
|
+
def ast_contents()
|
50
50
|
[
|
51
51
|
@list_attributes.to_ast,
|
52
52
|
super
|
data/lib/paru/filter/para.rb
CHANGED
@@ -16,12 +16,14 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./block.rb"
|
20
|
+
require_relative "./inner_markdown.rb"
|
21
|
+
|
19
22
|
module Paru
|
20
23
|
module PandocFilter
|
21
|
-
require_relative "./block"
|
22
|
-
|
23
24
|
# A Para is a paragraph: a list of Inline nodes
|
24
25
|
class Para < Block
|
26
|
+
include InnerMarkdown
|
25
27
|
|
26
28
|
# Create a new Para node based on the contents
|
27
29
|
#
|
data/lib/paru/filter/plain.rb
CHANGED
@@ -16,14 +16,16 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./block.rb"
|
20
|
+
require_relative "./inner_markdown.rb"
|
21
|
+
|
19
22
|
module Paru
|
20
23
|
module PandocFilter
|
21
|
-
require_relative "./block"
|
22
|
-
|
23
24
|
# A Plain node is a basic {Block} level node with {Inline} child nodes. Not
|
24
25
|
# to be confused with {Para}, which represents a paragraph. A Plain
|
25
26
|
# is a more general type of block level node.
|
26
27
|
class Plain < Block
|
28
|
+
include InnerMarkdown
|
27
29
|
|
28
30
|
# Create a new Plain node based on contents
|
29
31
|
#
|
data/lib/paru/filter/quoted.rb
CHANGED
@@ -16,10 +16,10 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./inline.rb"
|
20
|
+
|
19
21
|
module Paru
|
20
22
|
module PandocFilter
|
21
|
-
require_relative "./inline"
|
22
|
-
|
23
23
|
# A Quoted node represents a quote with a type and the contents of the
|
24
24
|
# quote
|
25
25
|
#
|
@@ -16,10 +16,11 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./block.rb"
|
20
|
+
require_relative "./inner_markdown.rb"
|
21
|
+
|
19
22
|
module Paru
|
20
23
|
module PandocFilter
|
21
|
-
require_relative "./block"
|
22
|
-
|
23
24
|
# A RawBlock node has a format and a string contents
|
24
25
|
#
|
25
26
|
# @!attribute format
|
@@ -28,6 +29,7 @@ module Paru
|
|
28
29
|
# @!attribute string
|
29
30
|
# @return [String]
|
30
31
|
class RawBlock < Block
|
32
|
+
include InnerMarkdown
|
31
33
|
attr_accessor :format, :string
|
32
34
|
|
33
35
|
# Create a new RawBlock node based on the contents
|
@@ -38,7 +40,7 @@ module Paru
|
|
38
40
|
end
|
39
41
|
|
40
42
|
# Create an AST representation of this RawBlock node
|
41
|
-
def
|
43
|
+
def ast_contents()
|
42
44
|
[
|
43
45
|
@format,
|
44
46
|
@string
|
@@ -16,11 +16,10 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./inline.rb"
|
20
|
+
|
19
21
|
module Paru
|
20
22
|
module PandocFilter
|
21
|
-
|
22
|
-
require_relative "./inline"
|
23
|
-
|
24
23
|
# A RawInline node has a format and a string value
|
25
24
|
#
|
26
25
|
# @!attribute format
|
@@ -16,10 +16,10 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./inline.rb"
|
20
|
+
|
19
21
|
module Paru
|
20
22
|
module PandocFilter
|
21
|
-
require_relative "./inline"
|
22
|
-
|
23
23
|
# A SmallCaps node is an inline level node representing SMALL CAPS
|
24
24
|
# text
|
25
25
|
class SmallCaps < Inline
|
@@ -16,10 +16,10 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./empty_inline.rb"
|
20
|
+
|
19
21
|
module Paru
|
20
22
|
module PandocFilter
|
21
|
-
require_relative "./empty_inline"
|
22
|
-
|
23
23
|
# A SoftBreak node
|
24
24
|
class SoftBreak < EmptyInline
|
25
25
|
end
|
data/lib/paru/filter/space.rb
CHANGED
@@ -16,10 +16,10 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./empty_inline.rb"
|
20
|
+
|
19
21
|
module Paru
|
20
22
|
module PandocFilter
|
21
|
-
require_relative "./empty_inline"
|
22
|
-
|
23
23
|
# A Space node
|
24
24
|
class Space < EmptyInline
|
25
25
|
end
|
data/lib/paru/filter/span.rb
CHANGED
@@ -16,12 +16,11 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./inline.rb"
|
20
|
+
require_relative "./attr.rb"
|
21
|
+
|
19
22
|
module Paru
|
20
23
|
module PandocFilter
|
21
|
-
|
22
|
-
require_relative "./inline"
|
23
|
-
require_relative "./attr"
|
24
|
-
|
25
24
|
# A Span node is a general Inline level node with attributes and
|
26
25
|
# contens
|
27
26
|
#
|
data/lib/paru/filter/str.rb
CHANGED
@@ -16,10 +16,10 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./inline.rb"
|
20
|
+
|
19
21
|
module Paru
|
20
22
|
module PandocFilter
|
21
|
-
require_relative "./inline"
|
22
|
-
|
23
23
|
# A Str node represents a string
|
24
24
|
#
|
25
25
|
# @!attribute string
|
@@ -16,10 +16,10 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./inline.rb"
|
20
|
+
|
19
21
|
module Paru
|
20
22
|
module PandocFilter
|
21
|
-
require_relative "./inline"
|
22
|
-
|
23
23
|
# A Strikeout inline node
|
24
24
|
class Strikeout < Inline
|
25
25
|
end
|
data/lib/paru/filter/strong.rb
CHANGED
@@ -16,10 +16,10 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./inline.rb"
|
20
|
+
|
19
21
|
module Paru
|
20
22
|
module PandocFilter
|
21
|
-
require_relative "./inline"
|
22
|
-
|
23
23
|
# A Strong inline node
|
24
24
|
class Strong < Inline
|
25
25
|
end
|
@@ -16,10 +16,10 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
|
+
require_relative "./inline.rb"
|
20
|
+
|
19
21
|
module Paru
|
20
22
|
module PandocFilter
|
21
|
-
require_relative "./inline"
|
22
|
-
|
23
23
|
# A Subscript inline node
|
24
24
|
class Subscript < Inline
|
25
25
|
end
|