coradoc 1.1.8 → 2.0.12
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.
Potentially problematic release.
This version of coradoc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.rspec +1 -1
- data/Rakefile +3 -12
- data/exe/coradoc +21 -2
- data/lib/coradoc/cli.rb +185 -91
- data/lib/coradoc/configurable.rb +527 -0
- data/lib/coradoc/coradoc.rb +463 -0
- data/lib/coradoc/core_model/annotation_block.rb +57 -0
- data/lib/coradoc/core_model/base.rb +172 -0
- data/lib/coradoc/core_model/bibliography.rb +41 -0
- data/lib/coradoc/core_model/bibliography_entry.rb +48 -0
- data/lib/coradoc/core_model/block.rb +63 -0
- data/lib/coradoc/core_model/children_content.rb +53 -0
- data/lib/coradoc/core_model/comment_block.rb +10 -0
- data/lib/coradoc/core_model/definition_item.rb +46 -0
- data/lib/coradoc/core_model/definition_list.rb +28 -0
- data/lib/coradoc/core_model/element_attribute.rb +26 -0
- data/lib/coradoc/core_model/example_block.rb +10 -0
- data/lib/coradoc/core_model/footnote.rb +92 -0
- data/lib/coradoc/core_model/horizontal_rule_block.rb +10 -0
- data/lib/coradoc/core_model/id_generator.rb +16 -0
- data/lib/coradoc/core_model/image.rb +66 -0
- data/lib/coradoc/core_model/inline_element.rb +140 -0
- data/lib/coradoc/core_model/list_block.rb +135 -0
- data/lib/coradoc/core_model/list_item.rb +142 -0
- data/lib/coradoc/core_model/listing_block.rb +13 -0
- data/lib/coradoc/core_model/literal_block.rb +10 -0
- data/lib/coradoc/core_model/metadata.rb +79 -0
- data/lib/coradoc/core_model/open_block.rb +10 -0
- data/lib/coradoc/core_model/paragraph_block.rb +10 -0
- data/lib/coradoc/core_model/pass_block.rb +10 -0
- data/lib/coradoc/core_model/quote_block.rb +12 -0
- data/lib/coradoc/core_model/reviewer_block.rb +10 -0
- data/lib/coradoc/core_model/sidebar_block.rb +10 -0
- data/lib/coradoc/core_model/source_block.rb +10 -0
- data/lib/coradoc/core_model/structural_element.rb +94 -0
- data/lib/coradoc/core_model/table.rb +148 -0
- data/lib/coradoc/core_model/term.rb +53 -0
- data/lib/coradoc/core_model/text_content.rb +22 -0
- data/lib/coradoc/core_model/toc.rb +105 -0
- data/lib/coradoc/core_model/toc_generator.rb +151 -0
- data/lib/coradoc/core_model/verse_block.rb +12 -0
- data/lib/coradoc/core_model.rb +77 -0
- data/lib/coradoc/document_builder.rb +184 -0
- data/lib/coradoc/document_manipulator.rb +203 -0
- data/lib/coradoc/errors.rb +312 -0
- data/lib/coradoc/format_module.rb +49 -0
- data/lib/coradoc/hooks.rb +176 -0
- data/lib/coradoc/input.rb +17 -7
- data/lib/coradoc/logger.rb +54 -0
- data/lib/coradoc/output.rb +17 -6
- data/lib/coradoc/performance_regression.rb +109 -0
- data/lib/coradoc/processor_registry.rb +50 -0
- data/lib/coradoc/query.rb +455 -0
- data/lib/coradoc/registry.rb +156 -0
- data/lib/coradoc/serializer/registry.rb +150 -0
- data/lib/coradoc/transform.rb +11 -0
- data/lib/coradoc/validation.rb +646 -0
- data/lib/coradoc/version.rb +1 -1
- data/lib/coradoc/visitor.rb +283 -0
- data/lib/coradoc.rb +40 -19
- metadata +67 -277
- data/.editorconfig +0 -15
- data/.envrc +0 -1
- data/.irbrc +0 -1
- data/.pryrc.sample +0 -1
- data/.rubocop.yml +0 -14
- data/.rubocop_todo.yml +0 -179
- data/CHANGELOG.md +0 -9
- data/CODE_OF_CONDUCT.md +0 -84
- data/Dockerfile +0 -19
- data/Gemfile +0 -16
- data/LICENSE.txt +0 -21
- data/Makefile +0 -35
- data/README.Docker.adoc +0 -57
- data/README.adoc +0 -119
- data/coradoc.gemspec +0 -40
- data/docker-compose.yml +0 -14
- data/exe/reverse_adoc +0 -81
- data/exe/w2a +0 -60
- data/flake.lock +0 -114
- data/flake.nix +0 -135
- data/lib/coradoc/converter.rb +0 -144
- data/lib/coradoc/document.rb +0 -77
- data/lib/coradoc/element/admonition.rb +0 -18
- data/lib/coradoc/element/attribute.rb +0 -36
- data/lib/coradoc/element/attribute_list.rb +0 -138
- data/lib/coradoc/element/audio.rb +0 -33
- data/lib/coradoc/element/author.rb +0 -24
- data/lib/coradoc/element/base.rb +0 -92
- data/lib/coradoc/element/bibliography.rb +0 -24
- data/lib/coradoc/element/bibliography_entry.rb +0 -24
- data/lib/coradoc/element/block/core.rb +0 -76
- data/lib/coradoc/element/block/example.rb +0 -23
- data/lib/coradoc/element/block/listing.rb +0 -21
- data/lib/coradoc/element/block/literal.rb +0 -21
- data/lib/coradoc/element/block/open.rb +0 -22
- data/lib/coradoc/element/block/pass.rb +0 -21
- data/lib/coradoc/element/block/quote.rb +0 -19
- data/lib/coradoc/element/block/reviewer_comment.rb +0 -19
- data/lib/coradoc/element/block/side.rb +0 -19
- data/lib/coradoc/element/block/sourcecode.rb +0 -21
- data/lib/coradoc/element/block.rb +0 -17
- data/lib/coradoc/element/break.rb +0 -11
- data/lib/coradoc/element/comment_block.rb +0 -22
- data/lib/coradoc/element/comment_line.rb +0 -18
- data/lib/coradoc/element/document_attributes.rb +0 -33
- data/lib/coradoc/element/header.rb +0 -22
- data/lib/coradoc/element/image/block_image.rb +0 -32
- data/lib/coradoc/element/image/core.rb +0 -58
- data/lib/coradoc/element/image/inline_image.rb +0 -12
- data/lib/coradoc/element/image.rb +0 -10
- data/lib/coradoc/element/include.rb +0 -18
- data/lib/coradoc/element/inline/anchor.rb +0 -19
- data/lib/coradoc/element/inline/attribute_reference.rb +0 -19
- data/lib/coradoc/element/inline/bold.rb +0 -25
- data/lib/coradoc/element/inline/cross_reference.rb +0 -46
- data/lib/coradoc/element/inline/footnote.rb +0 -24
- data/lib/coradoc/element/inline/hard_line_break.rb +0 -11
- data/lib/coradoc/element/inline/highlight.rb +0 -25
- data/lib/coradoc/element/inline/italic.rb +0 -25
- data/lib/coradoc/element/inline/link.rb +0 -42
- data/lib/coradoc/element/inline/monospace.rb +0 -25
- data/lib/coradoc/element/inline/quotation.rb +0 -20
- data/lib/coradoc/element/inline/small.rb +0 -19
- data/lib/coradoc/element/inline/span.rb +0 -37
- data/lib/coradoc/element/inline/subscript.rb +0 -20
- data/lib/coradoc/element/inline/superscript.rb +0 -20
- data/lib/coradoc/element/inline/underline.rb +0 -19
- data/lib/coradoc/element/inline.rb +0 -23
- data/lib/coradoc/element/list/core.rb +0 -51
- data/lib/coradoc/element/list/definition.rb +0 -29
- data/lib/coradoc/element/list/ordered.rb +0 -17
- data/lib/coradoc/element/list/unordered.rb +0 -17
- data/lib/coradoc/element/list.rb +0 -13
- data/lib/coradoc/element/list_item.rb +0 -98
- data/lib/coradoc/element/list_item_definition.rb +0 -32
- data/lib/coradoc/element/paragraph.rb +0 -37
- data/lib/coradoc/element/revision.rb +0 -27
- data/lib/coradoc/element/section.rb +0 -62
- data/lib/coradoc/element/table.rb +0 -91
- data/lib/coradoc/element/tag.rb +0 -19
- data/lib/coradoc/element/term.rb +0 -22
- data/lib/coradoc/element/text_element.rb +0 -92
- data/lib/coradoc/element/title.rb +0 -62
- data/lib/coradoc/element/video.rb +0 -50
- data/lib/coradoc/generator.rb +0 -19
- data/lib/coradoc/input/adoc.rb +0 -30
- data/lib/coradoc/input/docx.rb +0 -64
- data/lib/coradoc/input/html/LICENSE.txt +0 -25
- data/lib/coradoc/input/html/README.adoc +0 -308
- data/lib/coradoc/input/html/cleaner.rb +0 -142
- data/lib/coradoc/input/html/config.rb +0 -77
- data/lib/coradoc/input/html/converters/a.rb +0 -52
- data/lib/coradoc/input/html/converters/aside.rb +0 -16
- data/lib/coradoc/input/html/converters/audio.rb +0 -29
- data/lib/coradoc/input/html/converters/base.rb +0 -108
- data/lib/coradoc/input/html/converters/blockquote.rb +0 -22
- data/lib/coradoc/input/html/converters/br.rb +0 -15
- data/lib/coradoc/input/html/converters/bypass.rb +0 -81
- data/lib/coradoc/input/html/converters/code.rb +0 -23
- data/lib/coradoc/input/html/converters/div.rb +0 -19
- data/lib/coradoc/input/html/converters/dl.rb +0 -62
- data/lib/coradoc/input/html/converters/drop.rb +0 -26
- data/lib/coradoc/input/html/converters/em.rb +0 -21
- data/lib/coradoc/input/html/converters/figure.rb +0 -25
- data/lib/coradoc/input/html/converters/h.rb +0 -42
- data/lib/coradoc/input/html/converters/head.rb +0 -23
- data/lib/coradoc/input/html/converters/hr.rb +0 -15
- data/lib/coradoc/input/html/converters/ignore.rb +0 -20
- data/lib/coradoc/input/html/converters/img.rb +0 -110
- data/lib/coradoc/input/html/converters/li.rb +0 -17
- data/lib/coradoc/input/html/converters/mark.rb +0 -19
- data/lib/coradoc/input/html/converters/markup.rb +0 -31
- data/lib/coradoc/input/html/converters/math.rb +0 -38
- data/lib/coradoc/input/html/converters/ol.rb +0 -65
- data/lib/coradoc/input/html/converters/p.rb +0 -23
- data/lib/coradoc/input/html/converters/pass_through.rb +0 -17
- data/lib/coradoc/input/html/converters/pre.rb +0 -55
- data/lib/coradoc/input/html/converters/q.rb +0 -16
- data/lib/coradoc/input/html/converters/strong.rb +0 -20
- data/lib/coradoc/input/html/converters/sub.rb +0 -22
- data/lib/coradoc/input/html/converters/sup.rb +0 -22
- data/lib/coradoc/input/html/converters/table.rb +0 -319
- data/lib/coradoc/input/html/converters/td.rb +0 -81
- data/lib/coradoc/input/html/converters/text.rb +0 -32
- data/lib/coradoc/input/html/converters/th.rb +0 -18
- data/lib/coradoc/input/html/converters/tr.rb +0 -22
- data/lib/coradoc/input/html/converters/video.rb +0 -29
- data/lib/coradoc/input/html/converters.rb +0 -59
- data/lib/coradoc/input/html/errors.rb +0 -14
- data/lib/coradoc/input/html/html_converter.rb +0 -168
- data/lib/coradoc/input/html/plugin.rb +0 -131
- data/lib/coradoc/input/html/plugins/plateau.rb +0 -213
- data/lib/coradoc/input/html/postprocessor.rb +0 -220
- data/lib/coradoc/input/html.rb +0 -61
- data/lib/coradoc/legacy_parser.rb +0 -200
- data/lib/coradoc/oscal.rb +0 -99
- data/lib/coradoc/output/adoc.rb +0 -19
- data/lib/coradoc/output/coradoc_tree_debug.rb +0 -21
- data/lib/coradoc/parser/asciidoc/admonition.rb +0 -24
- data/lib/coradoc/parser/asciidoc/attribute_list.rb +0 -89
- data/lib/coradoc/parser/asciidoc/base.rb +0 -87
- data/lib/coradoc/parser/asciidoc/bibliography.rb +0 -29
- data/lib/coradoc/parser/asciidoc/block.rb +0 -94
- data/lib/coradoc/parser/asciidoc/citation.rb +0 -30
- data/lib/coradoc/parser/asciidoc/content.rb +0 -64
- data/lib/coradoc/parser/asciidoc/document_attributes.rb +0 -25
- data/lib/coradoc/parser/asciidoc/header.rb +0 -29
- data/lib/coradoc/parser/asciidoc/inline.rb +0 -195
- data/lib/coradoc/parser/asciidoc/list.rb +0 -115
- data/lib/coradoc/parser/asciidoc/paragraph.rb +0 -54
- data/lib/coradoc/parser/asciidoc/section.rb +0 -61
- data/lib/coradoc/parser/asciidoc/table.rb +0 -32
- data/lib/coradoc/parser/asciidoc/term.rb +0 -41
- data/lib/coradoc/parser/asciidoc/text.rb +0 -158
- data/lib/coradoc/parser/base.rb +0 -40
- data/lib/coradoc/parser.rb +0 -11
- data/lib/coradoc/reverse_adoc.rb +0 -18
- data/lib/coradoc/transformer.rb +0 -476
- data/lib/coradoc/util.rb +0 -12
- data/lib/reverse_adoc.rb +0 -20
- data/utils/inspect_asciidoc.rb +0 -29
- data/utils/parser_analyzer.rb +0 -66
- data/utils/round_trip.rb +0 -53
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Base
|
|
6
|
-
# Default implementation to convert a given Nokogiri node
|
|
7
|
-
# to an AsciiDoc script.
|
|
8
|
-
# Can be overriden by subclasses.
|
|
9
|
-
def convert(node, state = {})
|
|
10
|
-
Coradoc::Generator.gen_adoc(to_coradoc(node, state))
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# Note: treat_children won't run plugin hooks
|
|
14
|
-
def treat_children(node, state)
|
|
15
|
-
node.children.map do |child|
|
|
16
|
-
treat(child, state)
|
|
17
|
-
end.join
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def treat(node, state)
|
|
21
|
-
Converters.process(node, state)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def treat_children_coradoc(node, state)
|
|
25
|
-
node.children.map do |child|
|
|
26
|
-
treat_coradoc(child, state)
|
|
27
|
-
end.flatten.reject { |x| x.to_s.empty? }
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def treat_coradoc(node, state)
|
|
31
|
-
Converters.process_coradoc(node, state)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def extract_title(node)
|
|
35
|
-
title = Coradoc::Element::TextElement.escape_keychars(
|
|
36
|
-
node["title"].to_s,
|
|
37
|
-
)
|
|
38
|
-
title.empty? ? "" : %[ #{title}]
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def node_has_ancestor?(node, name)
|
|
42
|
-
case name
|
|
43
|
-
when String
|
|
44
|
-
node.ancestors.map(&:name).include?(name)
|
|
45
|
-
when Array
|
|
46
|
-
(node.ancestors.map(&:name) & name).any?
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def textnode_before_end_with?(node, str)
|
|
51
|
-
return nil unless [String, Regexp].include?(str.class)
|
|
52
|
-
return nil if str.is_a?(String) && str.empty?
|
|
53
|
-
|
|
54
|
-
str = /#{Regexp.escape(str)}/ if str.is_a?(String)
|
|
55
|
-
str = /(?:#{str})\z/
|
|
56
|
-
|
|
57
|
-
node2 = node.at_xpath("preceding-sibling::node()[1]")
|
|
58
|
-
node2.respond_to?(:text) && node2.text.match?(str)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def textnode_after_start_with?(node, str)
|
|
62
|
-
return nil unless [String, Regexp].include?(str.class)
|
|
63
|
-
return nil if str.is_a?(String) && str.empty?
|
|
64
|
-
|
|
65
|
-
str = /#{Regexp.escape(str)}/ if str.is_a?(String)
|
|
66
|
-
str = /\A(?:#{str})/
|
|
67
|
-
|
|
68
|
-
node2 = node.at_xpath("following-sibling::node()[1]")
|
|
69
|
-
node2.respond_to?(:text) && node2.text.match?(str)
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def extract_leading_trailing_whitespace(node)
|
|
73
|
-
node.text =~ /^(\s+)/
|
|
74
|
-
leading_whitespace = $1
|
|
75
|
-
if !leading_whitespace.nil?
|
|
76
|
-
first_text = node.at_xpath("./text()[1]")
|
|
77
|
-
first_text&.replace(first_text.text.lstrip)
|
|
78
|
-
leading_whitespace = " "
|
|
79
|
-
end
|
|
80
|
-
node.text =~ /(\s+)$/
|
|
81
|
-
trailing_whitespace = $1
|
|
82
|
-
if !trailing_whitespace.nil?
|
|
83
|
-
last_text = node.at_xpath("./text()[last()]")
|
|
84
|
-
last_text&.replace(last_text.text.rstrip)
|
|
85
|
-
trailing_whitespace = " "
|
|
86
|
-
end
|
|
87
|
-
[leading_whitespace, trailing_whitespace]
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def unconstrained_before?(node)
|
|
91
|
-
before = node.at_xpath("preceding::node()[1]")
|
|
92
|
-
|
|
93
|
-
before &&
|
|
94
|
-
!before.text.strip.empty? &&
|
|
95
|
-
before.text[-1]&.match?(/\w/)
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def unconstrained_after?(node)
|
|
99
|
-
after = node.at_xpath("following::node()[1]")
|
|
100
|
-
|
|
101
|
-
after && !after.text.strip.empty? &&
|
|
102
|
-
after.text[0]&.match?(/\w|,|;|"|\.\?!/)
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Blockquote < Base
|
|
6
|
-
def to_coradoc(node, state = {})
|
|
7
|
-
node["id"]
|
|
8
|
-
cite = node["cite"]
|
|
9
|
-
attributes = Coradoc::Element::AttributeList.new
|
|
10
|
-
attributes.add_positional("quote", cite) if !cite.nil?
|
|
11
|
-
content = treat_children(node, state).strip
|
|
12
|
-
content = Coradoc::Input::Html.cleaner.remove_newlines(content)
|
|
13
|
-
Coradoc::Element::Block::Quote.new(nil, lines: content,
|
|
14
|
-
attributes: attributes)
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
register :blockquote, Blockquote.new
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Bypass < Base
|
|
6
|
-
def to_coradoc(node, state = {})
|
|
7
|
-
treat_children_coradoc(node, state)
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
register :document, Bypass.new
|
|
12
|
-
register :html, Bypass.new
|
|
13
|
-
register :body, Bypass.new
|
|
14
|
-
register :span, Bypass.new
|
|
15
|
-
register :thead, Bypass.new
|
|
16
|
-
register :tbody, Bypass.new
|
|
17
|
-
register :tfoot, Bypass.new
|
|
18
|
-
register :abbr, Bypass.new
|
|
19
|
-
register :acronym, Bypass.new
|
|
20
|
-
register :address, Bypass.new
|
|
21
|
-
register :applet, Bypass.new
|
|
22
|
-
register :map, Bypass.new
|
|
23
|
-
register :area, Bypass.new
|
|
24
|
-
register :bdi, Bypass.new
|
|
25
|
-
register :bdo, Bypass.new
|
|
26
|
-
register :big, Bypass.new
|
|
27
|
-
register :button, Bypass.new
|
|
28
|
-
register :canvas, Bypass.new
|
|
29
|
-
register :data, Bypass.new
|
|
30
|
-
register :datalist, Bypass.new
|
|
31
|
-
register :del, Bypass.new
|
|
32
|
-
register :ins, Bypass.new
|
|
33
|
-
register :dfn, Bypass.new
|
|
34
|
-
register :dialog, Bypass.new
|
|
35
|
-
register :embed, Bypass.new
|
|
36
|
-
register :fieldset, Bypass.new
|
|
37
|
-
register :font, Bypass.new
|
|
38
|
-
register :footer, Bypass.new
|
|
39
|
-
register :form, Bypass.new
|
|
40
|
-
register :frame, Bypass.new
|
|
41
|
-
register :frameset, Bypass.new
|
|
42
|
-
register :header, Bypass.new
|
|
43
|
-
register :iframe, Bypass.new
|
|
44
|
-
register :input, Bypass.new
|
|
45
|
-
register :label, Bypass.new
|
|
46
|
-
register :legend, Bypass.new
|
|
47
|
-
register :main, Bypass.new
|
|
48
|
-
register :menu, Bypass.new
|
|
49
|
-
register :menulist, Bypass.new
|
|
50
|
-
register :meter, Bypass.new
|
|
51
|
-
register :nav, Bypass.new
|
|
52
|
-
register :noframes, Bypass.new
|
|
53
|
-
register :noscript, Bypass.new
|
|
54
|
-
register :object, Bypass.new
|
|
55
|
-
register :optgroup, Bypass.new
|
|
56
|
-
register :option, Bypass.new
|
|
57
|
-
register :output, Bypass.new
|
|
58
|
-
register :param, Bypass.new
|
|
59
|
-
register :picture, Bypass.new
|
|
60
|
-
register :progress, Bypass.new
|
|
61
|
-
register :ruby, Bypass.new
|
|
62
|
-
register :rt, Bypass.new
|
|
63
|
-
register :rp, Bypass.new
|
|
64
|
-
register :s, Bypass.new
|
|
65
|
-
register :select, Bypass.new
|
|
66
|
-
register :small, Bypass.new
|
|
67
|
-
register :span, Bypass.new
|
|
68
|
-
register :strike, Bypass.new
|
|
69
|
-
register :details, Bypass.new
|
|
70
|
-
register :section, Bypass.new
|
|
71
|
-
register :summary, Bypass.new
|
|
72
|
-
register :svg, Bypass.new
|
|
73
|
-
register :template, Bypass.new
|
|
74
|
-
register :textarea, Bypass.new
|
|
75
|
-
register :track, Bypass.new
|
|
76
|
-
register :u, Bypass.new
|
|
77
|
-
register :wbr, Bypass.new
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Code < Markup
|
|
6
|
-
def coradoc_class
|
|
7
|
-
Coradoc::Element::Inline::Monospace
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def markup_ancestor_tag_names
|
|
11
|
-
%w[code tt kbd samp var]
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
register :code, Code.new
|
|
16
|
-
register :tt, Code.new
|
|
17
|
-
register :kbd, Code.new
|
|
18
|
-
register :samp, Code.new
|
|
19
|
-
register :var, Code.new
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Div < Base
|
|
6
|
-
def to_coradoc(node, state = {})
|
|
7
|
-
id = node["id"]
|
|
8
|
-
contents = treat_children_coradoc(node, state)
|
|
9
|
-
Coradoc::Element::Section.new(nil, id: id, contents: contents)
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
register :div, Div.new
|
|
14
|
-
register :article, Div.new
|
|
15
|
-
register :center, Div.new
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Dl < Base
|
|
6
|
-
def to_coradoc(node, state = {})
|
|
7
|
-
items = process_dl(node, state)
|
|
8
|
-
items2 = items.map do |item|
|
|
9
|
-
Coradoc::Element::ListItemDefinition.new(item[:name],
|
|
10
|
-
item[:value])
|
|
11
|
-
end
|
|
12
|
-
Coradoc::Element::List::Definition.new(items2, delimiter: "::")
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def process_dl(node, state = {})
|
|
16
|
-
groups = []
|
|
17
|
-
current = { name: [], value: [] }
|
|
18
|
-
|
|
19
|
-
seen_dd = false
|
|
20
|
-
child = node.at_xpath("*[1]")
|
|
21
|
-
grandchild = nil
|
|
22
|
-
while !child.nil?
|
|
23
|
-
if child.name == "div"
|
|
24
|
-
grandchild = child.at_xpath("*[1]")
|
|
25
|
-
while !grandchild.nil?
|
|
26
|
-
groups, current, seen_dd = process_dt_or_dd(groups, current,
|
|
27
|
-
seen_dd, grandchild, state)
|
|
28
|
-
grandchild = grandchild.at_xpath("following-sibling::*[1]")
|
|
29
|
-
end
|
|
30
|
-
elsif ["dt", "dd"].include?(child.name)
|
|
31
|
-
groups, current, seen_dd = process_dt_or_dd(groups, current,
|
|
32
|
-
seen_dd, child, state)
|
|
33
|
-
end
|
|
34
|
-
child = child.at_xpath("following-sibling::*[1]")
|
|
35
|
-
if current[:name].any? && current[:value].any?
|
|
36
|
-
groups << current
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
groups
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def process_dt_or_dd(groups, current, seen_dd, subnode, state = {})
|
|
43
|
-
if subnode.name == "dt"
|
|
44
|
-
if seen_dd
|
|
45
|
-
# groups << current
|
|
46
|
-
current = { name: [], value: [] }
|
|
47
|
-
seen_dd = false
|
|
48
|
-
end
|
|
49
|
-
current[:name] += treat_children_coradoc(subnode, state)
|
|
50
|
-
elsif subnode.name == "dd"
|
|
51
|
-
current[:value] += treat_children_coradoc(subnode, state)
|
|
52
|
-
seen_dd = true
|
|
53
|
-
end
|
|
54
|
-
[groups, current, seen_dd]
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
register :dl, Dl.new
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Drop < Base
|
|
6
|
-
def to_coradoc(node, state = {})
|
|
7
|
-
convert(node, state)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def convert(_node, _state = {})
|
|
11
|
-
""
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
register :caption, Drop.new
|
|
16
|
-
register :figcaption, Drop.new
|
|
17
|
-
register :title, Drop.new
|
|
18
|
-
register :link, Drop.new
|
|
19
|
-
register :style, Drop.new
|
|
20
|
-
register :meta, Drop.new
|
|
21
|
-
register :script, Drop.new
|
|
22
|
-
register :comment, Drop.new
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Em < Markup
|
|
6
|
-
def coradoc_class
|
|
7
|
-
Coradoc::Element::Inline::Italic
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def markup_ancestor_tag_names
|
|
11
|
-
%w[em i cite]
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
register :em, Em.new
|
|
16
|
-
register :i, Em.new
|
|
17
|
-
register :cite, Em.new
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Figure < Base
|
|
6
|
-
def to_coradoc(node, state = {})
|
|
7
|
-
id = node["id"]
|
|
8
|
-
title = extract_title(node)
|
|
9
|
-
content = treat_children_coradoc(node, state)
|
|
10
|
-
Coradoc::Element::Block::Example.new(title, lines: content, id: id)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def extract_title(node)
|
|
14
|
-
title = node.at("./figcaption")
|
|
15
|
-
return "" if title.nil?
|
|
16
|
-
|
|
17
|
-
treat_children_coradoc(title, {})
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
register :figure, Figure.new
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class H < Base
|
|
6
|
-
def to_coradoc(node, state = {})
|
|
7
|
-
id = node["id"]
|
|
8
|
-
internal_anchor = treat_children_anchors(node, state)
|
|
9
|
-
|
|
10
|
-
if id.to_s.empty? && internal_anchor.size.positive? && internal_anchor.first.respond_to?(:id)
|
|
11
|
-
id = internal_anchor.first.id
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
level = node.name[/\d/].to_i
|
|
15
|
-
content = treat_children_no_anchors(node, state)
|
|
16
|
-
|
|
17
|
-
Coradoc::Element::Title.new(content, level, id: id)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def treat_children_no_anchors(node, state)
|
|
21
|
-
node.children.reject { |a| a.name == "a" }.map do |child|
|
|
22
|
-
treat_coradoc(child, state)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def treat_children_anchors(node, state)
|
|
27
|
-
node.children.select { |a| a.name == "a" }.map do |child|
|
|
28
|
-
treat_coradoc(child, state)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
register :h1, H.new
|
|
34
|
-
register :h2, H.new
|
|
35
|
-
register :h3, H.new
|
|
36
|
-
register :h4, H.new
|
|
37
|
-
register :h5, H.new
|
|
38
|
-
register :h6, H.new
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Head < Base
|
|
6
|
-
def to_coradoc(node, _state = {})
|
|
7
|
-
title = extract_title(node)
|
|
8
|
-
Coradoc::Element::Header.new(title)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def extract_title(node)
|
|
12
|
-
title = node.at("./title")
|
|
13
|
-
return "(???)" if title.nil?
|
|
14
|
-
|
|
15
|
-
title.text
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
register :head, Head.new
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Ignore < Base
|
|
6
|
-
def to_coradoc(node, state = {})
|
|
7
|
-
convert(node, state)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def convert(_node, _state = {})
|
|
11
|
-
"" # noop
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
register :colgroup, Ignore.new
|
|
16
|
-
register :col, Ignore.new
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
require "fileutils"
|
|
2
|
-
require "pathname"
|
|
3
|
-
require "tempfile"
|
|
4
|
-
require "base64"
|
|
5
|
-
require "marcel"
|
|
6
|
-
|
|
7
|
-
module Coradoc
|
|
8
|
-
module Input
|
|
9
|
-
module Html
|
|
10
|
-
module Converters
|
|
11
|
-
class Img < Base
|
|
12
|
-
def image_number
|
|
13
|
-
sprintf(
|
|
14
|
-
Coradoc::Input::Html.config.image_counter_pattern,
|
|
15
|
-
Coradoc::Input::Html.config.image_counter,
|
|
16
|
-
)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def image_number_increment
|
|
20
|
-
Coradoc::Input::Html.config.image_counter += 1
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def datauri2file(src)
|
|
24
|
-
return unless src
|
|
25
|
-
|
|
26
|
-
%r{^data:image/(?:[^;]+);base64,(?<imgdata>.+)$} =~ src
|
|
27
|
-
|
|
28
|
-
dest_dir = Pathname.new(Coradoc::Input::Html.config.destination).dirname
|
|
29
|
-
images_dir = dest_dir.join("images")
|
|
30
|
-
FileUtils.mkdir_p(images_dir)
|
|
31
|
-
|
|
32
|
-
ext, image_src_path, tempfile = determine_image_src_path(src,
|
|
33
|
-
imgdata)
|
|
34
|
-
image_dest_path = images_dir + "#{image_number}.#{ext}"
|
|
35
|
-
|
|
36
|
-
# puts "image_dest_path: #{image_dest_path.to_s}"
|
|
37
|
-
# puts "image_src_path: #{image_src_path.to_s}"
|
|
38
|
-
|
|
39
|
-
if File.exist?(image_src_path)
|
|
40
|
-
FileUtils.cp(image_src_path, image_dest_path)
|
|
41
|
-
else
|
|
42
|
-
@annotate_missing = image_src_path
|
|
43
|
-
Kernel.warn "Image #{image_src_path} does not exist"
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
image_number_increment
|
|
47
|
-
|
|
48
|
-
image_dest_path.relative_path_from(dest_dir)
|
|
49
|
-
ensure
|
|
50
|
-
tempfile&.close!
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def determine_image_src_path(src, imgdata)
|
|
54
|
-
return copy_temp_file(imgdata) if imgdata
|
|
55
|
-
|
|
56
|
-
ext = File.extname(src).strip.downcase[1..]
|
|
57
|
-
[ext, Pathname.new(Coradoc::Input::Html.config.sourcedir).join(src)]
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def copy_temp_file(imgdata)
|
|
61
|
-
f = Tempfile.open(["radoc", ".jpg"])
|
|
62
|
-
f.binmode
|
|
63
|
-
f.write(Base64.strict_decode64(imgdata))
|
|
64
|
-
f.rewind
|
|
65
|
-
ext = Marcel::MimeType.for(f).sub(%r{^[^/]+/}, "")
|
|
66
|
-
ext = "svg" if ext == "svg+xml"
|
|
67
|
-
[ext, f.path, f]
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def to_coradoc(node, _state = {})
|
|
71
|
-
id = node["id"]
|
|
72
|
-
alt = node["alt"]
|
|
73
|
-
src = node["src"]
|
|
74
|
-
width = node["width"]
|
|
75
|
-
height = node["height"]
|
|
76
|
-
|
|
77
|
-
width = width.to_i if width&.match?(/\A\d+\z/)
|
|
78
|
-
height = height.to_i if height&.match?(/\A\d+\z/)
|
|
79
|
-
|
|
80
|
-
title = extract_title(node)
|
|
81
|
-
|
|
82
|
-
if Coradoc::Input::Html.config.external_images
|
|
83
|
-
# puts "external image conversion #{id}, #{src}"
|
|
84
|
-
src = datauri2file(src)
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
attributes = Coradoc::Element::AttributeList.new
|
|
88
|
-
# attributes.add_named("id", id) if id
|
|
89
|
-
if alt # && !alt.to_s.empty?
|
|
90
|
-
attributes.add_positional(alt)
|
|
91
|
-
elsif width || height
|
|
92
|
-
attributes.add_positional(nil)
|
|
93
|
-
end
|
|
94
|
-
attributes.add_named("title", title) if title && !title.empty?
|
|
95
|
-
attributes.add_positional(width) if width
|
|
96
|
-
attributes.add_positional(height) if height
|
|
97
|
-
|
|
98
|
-
if src
|
|
99
|
-
Coradoc::Element::Image::BlockImage.new(title, id, src,
|
|
100
|
-
attributes: attributes,
|
|
101
|
-
annotate_missing: @annotate_missing)
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
register :img, Img
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Li < Base
|
|
6
|
-
def to_coradoc(node, state = {})
|
|
7
|
-
id = node["id"]
|
|
8
|
-
content = treat_children_coradoc(node, state)
|
|
9
|
-
Coradoc::Element::ListItem.new(content, id: id)
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
register :li, Li.new
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Mark < Markup
|
|
6
|
-
def coradoc_class
|
|
7
|
-
Coradoc::Element::Inline::Highlight
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def markup_ancestor_tag_names
|
|
11
|
-
%w[mark]
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
register :mark, Mark.new
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|