Class: ReverseAdoc::Converters::Base
- Inherits:
-
Object
- Object
- ReverseAdoc::Converters::Base
show all
- Defined in:
- lib/reverse_adoc/converters/base.rb
Direct Known Subclasses
A, Aside, Audio, Blockquote, Br, Bypass, Code, Div, Drop, Em, Figure, H, Head, Hr, Ignore, Img, Li, Mark, Math, Ol, P, PassThrough, Pre, Q, Strong, Sub, Sup, Table, Td, Text, Tr, Video
Instance Method Summary
collapse
Instance Method Details
#constrained?(node) ⇒ Boolean
TODO: This logic ought to be cleaned up.
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/reverse_adoc/converters/base.rb', line 74
def constrained?(node)
before = node.at_xpath("preceding::node()[1]").to_s[-1]
before = if before
before&.match?(/\s/) ? true : false
else
true
end
if !before && (node.to_s[0] =~ /\s/)
before = true
end
after = node.at_xpath("following::node()[1]").to_s[0]
after = if after
after&.match?(/\s|,|;|"|\.\?!/) ? true : false
else
true
end
if !after && (node.to_s[-1] =~ /\s/)
after = true
end
before && after
end
|
#escape_keychars(string) ⇒ Object
24
25
26
27
28
29
30
31
32
|
# File 'lib/reverse_adoc/converters/base.rb', line 24
def escape_keychars(string)
subs = { "*" => '\*', "_" => '\_' }
string
.gsub(/((?<=\s)[\*_]+)|[\*_]+(?=\s)/) do |n|
n.chars.map do |char|
subs[char]
end.join
end
end
|
34
35
36
37
|
# File 'lib/reverse_adoc/converters/base.rb', line 34
def (node)
title = escape_keychars(node["title"].to_s)
title.empty? ? "" : %[ #{title}]
end
|
#node_has_ancestor?(node, name) ⇒ Boolean
39
40
41
42
43
44
45
46
|
# File 'lib/reverse_adoc/converters/base.rb', line 39
def node_has_ancestor?(node, name)
case name
when String
node.ancestors.map(&:name).include?(name)
when Array
(node.ancestors.map(&:name) & name).any?
end
end
|
#textnode_before_end_with?(node, str) ⇒ Boolean
48
49
50
51
52
53
|
# File 'lib/reverse_adoc/converters/base.rb', line 48
def textnode_before_end_with?(node, str)
return nil if !str.is_a?(String) || str.empty?
node2 = node.at_xpath("preceding-sibling::node()[1]")
node2.respond_to?(:text) && node2.text.end_with?(str)
end
|
#treat(node, state) ⇒ Object
10
11
12
|
# File 'lib/reverse_adoc/converters/base.rb', line 10
def treat(node, state)
ReverseAdoc::Converters.lookup(node.name).convert(node, state)
end
|
#treat_children(node, state) ⇒ Object
4
5
6
7
8
|
# File 'lib/reverse_adoc/converters/base.rb', line 4
def treat_children(node, state)
node.children.inject("") do |memo, child|
memo << treat(child, state)
end
end
|
#treat_children_coradoc(node, state) ⇒ Object
14
15
16
17
18
|
# File 'lib/reverse_adoc/converters/base.rb', line 14
def treat_children_coradoc(node, state)
node.children.inject([]) do |memo, child|
memo << treat_coradoc(child, state)
end.flatten.reject { |x| x == "" || x.nil? }
end
|
#treat_coradoc(node, state) ⇒ Object
20
21
22
|
# File 'lib/reverse_adoc/converters/base.rb', line 20
def treat_coradoc(node, state)
ReverseAdoc::Converters.lookup(node.name).to_coradoc(node, state)
end
|
#unconstrained_after?(node) ⇒ Boolean
TODO: This logic ought to be cleaned up.
64
65
66
67
68
69
|
# File 'lib/reverse_adoc/converters/base.rb', line 64
def unconstrained_after?(node)
after = node.at_xpath("following::node()[1]")
after && !after.text.strip.empty? &&
after.text[0]&.match?(/\w|,|;|"|\.\?!/)
end
|
#unconstrained_before?(node) ⇒ Boolean
55
56
57
58
59
60
61
|
# File 'lib/reverse_adoc/converters/base.rb', line 55
def unconstrained_before?(node)
before = node.at_xpath("preceding::node()[1]")
before &&
!before.text.strip.empty? &&
before.text[-1]&.match?(/\w/)
end
|