paru 0.3.0.1 → 0.3.1.0.a
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/paru.rb +1 -1
- data/lib/paru/filter/bullet_list.rb +10 -0
- data/lib/paru/filter/code_block.rb +42 -0
- data/lib/paru/filter/definition_list.rb +35 -0
- data/lib/paru/filter/definition_list_item.rb +9 -0
- data/lib/paru/filter/list.rb +10 -0
- data/lib/paru/filter/ordered_list.rb +16 -0
- data/lib/paru/filter/table.rb +107 -0
- data/lib/paru/filter/table_row.rb +10 -0
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 38bef6b5bd0c2c11c1b636159c0d19f3f61d8696
|
4
|
+
data.tar.gz: 64bbaee8ba0e98d000888ad230347e5586699135
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20be16827b545e7287f4409b0ce7fafbcd3be2b949ba723f727af88370ddbe155646436e29193729b007a62a202e5a3622efc174939d3dec2e994608ffcddf1e
|
7
|
+
data.tar.gz: 256d22abf8bf5385e99e12c8c3ea826cc30386f7aaef80a87523162afbaf7bebda26884a584c4dd73dfeef55c130f031097020619257bce9b5f1d9860566ea7d
|
data/lib/paru.rb
CHANGED
@@ -22,6 +22,16 @@ module Paru
|
|
22
22
|
module PandocFilter
|
23
23
|
# BulletList, contains a list of list of Block nodes.
|
24
24
|
class BulletList < List
|
25
|
+
|
26
|
+
# Create a new BulletList from an array of markdown strings
|
27
|
+
#
|
28
|
+
# @param items [String[]] array of markdown strings as items of
|
29
|
+
# the new BulletList
|
30
|
+
# @return [BulletList]
|
31
|
+
def self.from_array(items)
|
32
|
+
ast_items = items.map {|item| [Block.from_markdown(item).to_ast]}
|
33
|
+
BulletList.new ast_items
|
34
|
+
end
|
25
35
|
end
|
26
36
|
end
|
27
37
|
end
|
@@ -57,6 +57,48 @@ module Paru
|
|
57
57
|
def has_string?()
|
58
58
|
true
|
59
59
|
end
|
60
|
+
|
61
|
+
# Write this CodeBlock's contents to file
|
62
|
+
#
|
63
|
+
# @param filename {String} the path to the file to write
|
64
|
+
def to_file(filename)
|
65
|
+
File.open(filename, "w") do |file|
|
66
|
+
file.write "#{@string}\n"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Create a new CodeBlock based on the contents of a file, and,
|
71
|
+
# optionally, a language
|
72
|
+
#
|
73
|
+
# @param filename {String} the path to the file to read the
|
74
|
+
# contents from
|
75
|
+
# @param language {String} the language of the contents
|
76
|
+
#
|
77
|
+
# @return [CodeBlock]
|
78
|
+
def self.from_file(filename, language = "")
|
79
|
+
return self.from_code_string(File.read(filename), language)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Get this CodeBlock's contents as a string
|
83
|
+
#
|
84
|
+
# @return [String]
|
85
|
+
def to_code_string()
|
86
|
+
return @string
|
87
|
+
end
|
88
|
+
|
89
|
+
# Create a new CodeBlock based on a string and, optionally, a
|
90
|
+
# language
|
91
|
+
#
|
92
|
+
#
|
93
|
+
# @param code_string [String] the string with code to use as the
|
94
|
+
# contents of the CodeBlock
|
95
|
+
# @param language [String] the optional language class
|
96
|
+
# @return [CodeBlock]
|
97
|
+
def self.from_code_string(code_string, language = "")
|
98
|
+
attributes = ["", [language], []]
|
99
|
+
code_block = CodeBlock.new [attributes, code_string]
|
100
|
+
return code_block
|
101
|
+
end
|
60
102
|
end
|
61
103
|
end
|
62
104
|
end
|
@@ -17,6 +17,8 @@
|
|
17
17
|
# along with Paru. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
19
|
require_relative "./block.rb"
|
20
|
+
require_relative "./list.rb"
|
21
|
+
require_relative "./para.rb"
|
20
22
|
|
21
23
|
module Paru
|
22
24
|
module PandocFilter
|
@@ -37,6 +39,39 @@ module Paru
|
|
37
39
|
@children.map {|child| child.to_ast}
|
38
40
|
end
|
39
41
|
|
42
|
+
# Convert this DefinitionList to a hash of term => definitions
|
43
|
+
#
|
44
|
+
# @return [Array]
|
45
|
+
def to_array()
|
46
|
+
@children.map do |def_item|
|
47
|
+
def_item.to_array
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Create a new DefinitionList based on a hash of term =>
|
52
|
+
# definitions
|
53
|
+
#
|
54
|
+
# @param definitions [Array] Array of arrays with terms and their definitions
|
55
|
+
# @return [DefinitionList]
|
56
|
+
def self.from_array(definitions)
|
57
|
+
ast_items = definitions.map do |definition|
|
58
|
+
term = Block.from_markdown(definition[0]).ast_contents
|
59
|
+
defin = List.from_markdown(definition[1])
|
60
|
+
|
61
|
+
if not defin.has_block?
|
62
|
+
para = Para.new []
|
63
|
+
para.inner_markdown = definition[1]
|
64
|
+
defin = [para.to_ast]
|
65
|
+
else
|
66
|
+
defin = defin.children.map{|c| c.to_ast}
|
67
|
+
end
|
68
|
+
|
69
|
+
[term, [defin]]
|
70
|
+
end
|
71
|
+
|
72
|
+
DefinitionList.new ast_items
|
73
|
+
end
|
74
|
+
|
40
75
|
end
|
41
76
|
end
|
42
77
|
end
|
@@ -48,6 +48,15 @@ module Paru
|
|
48
48
|
@definition.ast_contents
|
49
49
|
]
|
50
50
|
end
|
51
|
+
|
52
|
+
# Convert this DefinitionListItem to a pair of term and definition
|
53
|
+
#
|
54
|
+
# @return [Array]
|
55
|
+
def to_array
|
56
|
+
term = @term.children.map{|c| c.markdown.strip}.select{|c| !c.empty?}.join(" ").strip
|
57
|
+
definition = @definition.children.map{|c| c.children.map{|d| d.markdown}}.join("\n").strip
|
58
|
+
[term, definition]
|
59
|
+
end
|
51
60
|
end
|
52
61
|
end
|
53
62
|
end
|
data/lib/paru/filter/list.rb
CHANGED
@@ -46,6 +46,16 @@ module Paru
|
|
46
46
|
def has_block?()
|
47
47
|
true
|
48
48
|
end
|
49
|
+
|
50
|
+
# Convert this List to an array of markdown strings
|
51
|
+
#
|
52
|
+
# @return [String[]]
|
53
|
+
def to_array()
|
54
|
+
@children.map do |block|
|
55
|
+
block.children.map{|c| c.markdown.strip}.join("\n")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
49
59
|
end
|
50
60
|
end
|
51
61
|
end
|
@@ -18,6 +18,7 @@
|
|
18
18
|
#++
|
19
19
|
require_relative "./list.rb"
|
20
20
|
require_relative "./list_attributes.rb"
|
21
|
+
require_relative "./block.rb"
|
21
22
|
|
22
23
|
module Paru
|
23
24
|
module PandocFilter
|
@@ -53,6 +54,21 @@ module Paru
|
|
53
54
|
]
|
54
55
|
end
|
55
56
|
|
57
|
+
# Create a new OrderedList from an array of markdown strings
|
58
|
+
#
|
59
|
+
# @param items [String[]] an array of markdown strings
|
60
|
+
# @param config [Hash] configuration of the list. Can have
|
61
|
+
# properties :start (Int), :style (String), and :delim (String)
|
62
|
+
#
|
63
|
+
# @return [OrderedList]
|
64
|
+
def self.from_array(items, **config )
|
65
|
+
start = if config.has_key? :start then config[:start] else 1 end
|
66
|
+
style = if config.has_key? :style then config[:style] else "Decimal" end
|
67
|
+
delim = if config.has_key? :delim then config[:delim] else "Period" end
|
68
|
+
ast_items = items.map {|item| [Block.from_markdown(item).to_ast]}
|
69
|
+
OrderedList.new [[start, {"t" => style}, {"t" => delim}], ast_items]
|
70
|
+
end
|
71
|
+
|
56
72
|
end
|
57
73
|
end
|
58
74
|
end
|
data/lib/paru/filter/table.rb
CHANGED
@@ -16,6 +16,7 @@
|
|
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 "csv"
|
19
20
|
require_relative "./block.rb"
|
20
21
|
require_relative "./inline.rb"
|
21
22
|
|
@@ -70,6 +71,112 @@ module Paru
|
|
70
71
|
@children.map {|row| row.ast_contents}
|
71
72
|
]
|
72
73
|
end
|
74
|
+
|
75
|
+
# Convert this table to a 2D table of markdown strings for each
|
76
|
+
# cell
|
77
|
+
#
|
78
|
+
# @param config [Hash] configuraton of the table output
|
79
|
+
# Config can contain properties :headers
|
80
|
+
#
|
81
|
+
# @return [String[][]] This Table as a 2D array of cells
|
82
|
+
# represented by their markdown strings.
|
83
|
+
def to_array(**config)
|
84
|
+
headers = if config.has_key? :headers then config[:headers] else false end
|
85
|
+
|
86
|
+
data = []
|
87
|
+
if headers then
|
88
|
+
data.push @headers.to_array
|
89
|
+
end
|
90
|
+
|
91
|
+
@children.each do |row|
|
92
|
+
data.push row.to_array
|
93
|
+
end
|
94
|
+
|
95
|
+
data
|
96
|
+
end
|
97
|
+
|
98
|
+
# Convert this Table to a CSV file. See to_array for the config
|
99
|
+
# options
|
100
|
+
#
|
101
|
+
# @param filename [String] filename to write to
|
102
|
+
# @param config [Hash] See #to_array for config options
|
103
|
+
def to_file(filename, **config)
|
104
|
+
CSV.open(filename, "wb") do |csv|
|
105
|
+
to_array(config).each {|row| csv << row}
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
# Create a new Table from an 2D array and an optional
|
110
|
+
# configuration
|
111
|
+
#
|
112
|
+
# @param data [String[][]] an array of markdown strings
|
113
|
+
# @param config [Hash] configuration of the list.
|
114
|
+
# properties:
|
115
|
+
# :headers [Boolean] True if data includes headers on first
|
116
|
+
# row
|
117
|
+
# :caption [String] The table's caption
|
118
|
+
# :alignment [String[]] An array with alignments for each
|
119
|
+
# column. Should have an alignment for all columns. Defaults
|
120
|
+
# to "AlignLeft"
|
121
|
+
# :widhts [Number[]] An array with column widths. Should have
|
122
|
+
# a width for all columns. Use 0 for no set width. Defaults to
|
123
|
+
# 0
|
124
|
+
#
|
125
|
+
# @return [Table]
|
126
|
+
def self.from_array(data, **config)
|
127
|
+
return Table.new [[],[],[],[],[]] if data.empty?
|
128
|
+
|
129
|
+
headers = if config.has_key? :headers then
|
130
|
+
config[:headers]
|
131
|
+
else
|
132
|
+
false
|
133
|
+
end
|
134
|
+
caption = if config.has_key? :caption then
|
135
|
+
Block.from_markdown(config[:caption]).ast_contents
|
136
|
+
else
|
137
|
+
[]
|
138
|
+
end
|
139
|
+
|
140
|
+
alignment = if config.has_key? :alignment then
|
141
|
+
config[:alignment].map {|a| {"t" => "#{a}"}}
|
142
|
+
else
|
143
|
+
data.first.map {|_| {"t"=>"AlignLeft"}}
|
144
|
+
end
|
145
|
+
|
146
|
+
widths = if config.has_key? :widths then
|
147
|
+
config[:widths]
|
148
|
+
else
|
149
|
+
data.first.map {|_| 0}
|
150
|
+
end
|
151
|
+
|
152
|
+
header = []
|
153
|
+
rows = data
|
154
|
+
if headers then
|
155
|
+
header = data.first
|
156
|
+
header = header.map {|cell| [Block.from_markdown(cell).to_ast]}
|
157
|
+
rows = data.slice(1..-1)
|
158
|
+
end
|
159
|
+
|
160
|
+
rows = rows.map {|row| row.map {|cell| [Block.from_markdown(cell).to_ast]}}
|
161
|
+
|
162
|
+
Table.new [caption, alignment, widths, header, rows]
|
163
|
+
end
|
164
|
+
|
165
|
+
|
166
|
+
# Create a new Table from a CSV file.
|
167
|
+
#
|
168
|
+
# @param filename [String] filename to read CSV data from
|
169
|
+
# @param config [Hash] See #from_file for details
|
170
|
+
#
|
171
|
+
# @return [Table]
|
172
|
+
def self.from_file(filename, **config)
|
173
|
+
data = []
|
174
|
+
CSV.foreach(filename) do |row|
|
175
|
+
data << row
|
176
|
+
end
|
177
|
+
|
178
|
+
return self.from_array(data, config)
|
179
|
+
end
|
73
180
|
end
|
74
181
|
end
|
75
182
|
end
|
@@ -38,6 +38,16 @@ module Paru
|
|
38
38
|
def ast_contents
|
39
39
|
@children.map {|child| child.ast_contents}
|
40
40
|
end
|
41
|
+
|
42
|
+
# Convert this TableRow to an array of markdown strings, one for
|
43
|
+
# each cell
|
44
|
+
#
|
45
|
+
# @return [String[]] An Array representation of this TableRow.
|
46
|
+
def to_array()
|
47
|
+
@children.map do |cell|
|
48
|
+
cell.children.map{|c| c.markdown.strip}.join("\n")
|
49
|
+
end
|
50
|
+
end
|
41
51
|
end
|
42
52
|
end
|
43
53
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paru
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.0.
|
4
|
+
version: 0.3.1.0.a
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Huub de Beer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Use Pandoc (http://www.pandoc.org) with ruby
|
14
14
|
email: Huub@heerdebeer.org
|
@@ -99,15 +99,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
99
99
|
requirements:
|
100
100
|
- - ">="
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
102
|
+
version: 2.3.7
|
103
103
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
104
|
requirements:
|
105
|
-
- - "
|
105
|
+
- - ">"
|
106
106
|
- !ruby/object:Gem::Version
|
107
|
-
version:
|
107
|
+
version: 1.3.1
|
108
108
|
requirements: []
|
109
109
|
rubyforge_project:
|
110
|
-
rubygems_version: 2.
|
110
|
+
rubygems_version: 2.5.2.1
|
111
111
|
signing_key:
|
112
112
|
specification_version: 4
|
113
113
|
summary: Paru is a ruby wrapper around pandoc
|