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