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.
- 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,81 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Td < Base
|
|
6
|
-
def to_coradoc(node, state = {})
|
|
7
|
-
# convert(node, state)
|
|
8
|
-
id = node["id"]
|
|
9
|
-
colrowattr = colrow(node["colspan"], node["rowspan"])
|
|
10
|
-
alignattr = alignstyle(node)
|
|
11
|
-
style = cellstyle(node)
|
|
12
|
-
|
|
13
|
-
singlepara = node.elements.size == 1 && node.elements.first.name == "p"
|
|
14
|
-
state[:tdsinglepara] = singlepara if singlepara
|
|
15
|
-
|
|
16
|
-
adoccell = node.at(".//ul | .//ol | .//pre | .//blockquote | .//br | .//hr | .//img[@src]") ||
|
|
17
|
-
node.at(".//p") && !singlepara
|
|
18
|
-
|
|
19
|
-
style = "a" if adoccell
|
|
20
|
-
content = treat_children_coradoc(node, state)
|
|
21
|
-
options = {}.tap do |hash|
|
|
22
|
-
hash[:id] = id
|
|
23
|
-
hash[:colrowattr] = colrowattr
|
|
24
|
-
hash[:alignattr] = alignattr
|
|
25
|
-
hash[:style] = style
|
|
26
|
-
hash[:content] = content
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
Coradoc::Element::Table::Cell.new(options)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def cellstyle(_node)
|
|
33
|
-
""
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def colrow(colspan, rowspan)
|
|
37
|
-
if colspan && rowspan && colspan != "1" && rowspan != "1"
|
|
38
|
-
"#{colspan}.#{rowspan}+"
|
|
39
|
-
elsif colspan && colspan != "1"
|
|
40
|
-
"#{colspan}+"
|
|
41
|
-
elsif rowspan && rowspan != "1"
|
|
42
|
-
".#{rowspan}+"
|
|
43
|
-
else
|
|
44
|
-
""
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def alignstyle(node)
|
|
49
|
-
align = node["align"]
|
|
50
|
-
valign = node["valign"]
|
|
51
|
-
a = case align
|
|
52
|
-
when "left" then "<"
|
|
53
|
-
when "center" then "^"
|
|
54
|
-
when "right" then ">"
|
|
55
|
-
else
|
|
56
|
-
""
|
|
57
|
-
end
|
|
58
|
-
v = case valign
|
|
59
|
-
when "top" then "<"
|
|
60
|
-
when "middle" then "^"
|
|
61
|
-
when "bottom" then ">"
|
|
62
|
-
else
|
|
63
|
-
""
|
|
64
|
-
end
|
|
65
|
-
if align && valign
|
|
66
|
-
"#{a}.#{v}"
|
|
67
|
-
elsif align
|
|
68
|
-
a
|
|
69
|
-
elsif valign
|
|
70
|
-
".#{v}"
|
|
71
|
-
else
|
|
72
|
-
""
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
register :td, Td.new
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Text < Base
|
|
6
|
-
def to_coradoc(node, state = {})
|
|
7
|
-
return treat_empty(node, state) if node.text.strip.empty?
|
|
8
|
-
|
|
9
|
-
Coradoc::Element::TextElement.new(node.text, html_cleanup: true)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
private
|
|
13
|
-
|
|
14
|
-
def treat_empty(node, state)
|
|
15
|
-
parent = node.parent.name.to_sym
|
|
16
|
-
if %i[ol ul].include?(parent) # Otherwise the identation is broken
|
|
17
|
-
""
|
|
18
|
-
elsif state[:tdsinglepara]
|
|
19
|
-
""
|
|
20
|
-
elsif node.text == " " # Regular whitespace text node
|
|
21
|
-
" "
|
|
22
|
-
else
|
|
23
|
-
""
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
register :text, Text.new
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Th < Td
|
|
6
|
-
def cellstyle(node)
|
|
7
|
-
# this is the header row
|
|
8
|
-
return "" if node.parent.previous_element.nil?
|
|
9
|
-
|
|
10
|
-
"h"
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
register :th, Th.new
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Tr < Base
|
|
6
|
-
def to_coradoc(node, state = {})
|
|
7
|
-
content = treat_children_coradoc(node, state)
|
|
8
|
-
header = table_header_row?(node)
|
|
9
|
-
Coradoc::Element::Table::Row.new(content, header)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def table_header_row?(node)
|
|
13
|
-
# node.element_children.all? {|child| child.name.to_sym == :th}
|
|
14
|
-
node.previous_element.nil?
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
register :tr, Tr.new
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
class Video < Base
|
|
6
|
-
def to_coradoc(node, _state = {})
|
|
7
|
-
src = node["src"]
|
|
8
|
-
id = node["id"]
|
|
9
|
-
title = extract_title(node)
|
|
10
|
-
attributes = Coradoc::Element::AttributeList.new
|
|
11
|
-
options = options(node)
|
|
12
|
-
attributes.add_named("options", options) if options.any?
|
|
13
|
-
Coradoc::Element::Video.new(title, id: id, src: src,
|
|
14
|
-
attributes: attributes)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def options(node)
|
|
18
|
-
autoplay = node["autoplay"]
|
|
19
|
-
loop_attr = node["loop"]
|
|
20
|
-
controls = node["controls"]
|
|
21
|
-
[autoplay, loop_attr, controls].compact
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
register :video, Video.new
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
module Converters
|
|
5
|
-
def self.register(tag_name, converter)
|
|
6
|
-
@@converters ||= {}
|
|
7
|
-
@@converters[tag_name.to_sym] = converter
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def self.unregister(tag_name)
|
|
11
|
-
@@converters.delete(tag_name.to_sym)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def self.lookup(tag_name)
|
|
15
|
-
converter = @@converters[tag_name.to_sym] || default_converter(tag_name)
|
|
16
|
-
converter = converter.new if converter.respond_to? :new
|
|
17
|
-
converter
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# Note: process won't run plugin hooks
|
|
21
|
-
def self.process(node, state)
|
|
22
|
-
node = node.to_a if node.is_a? Nokogiri::XML::NodeSet
|
|
23
|
-
return node.map { |i| process(i, state) }.join if node.is_a? Array
|
|
24
|
-
|
|
25
|
-
lookup(node.name).convert(node, state)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def self.process_coradoc(node, state)
|
|
29
|
-
node = node.to_a if node.is_a? Nokogiri::XML::NodeSet
|
|
30
|
-
return node.map { |i| process_coradoc(i, state) } if node.is_a? Array
|
|
31
|
-
|
|
32
|
-
plugins = state[:plugin_instances] || {}
|
|
33
|
-
process = proc { lookup(node.name).to_coradoc(node, state) }
|
|
34
|
-
plugins.each do |i|
|
|
35
|
-
prev_process = process
|
|
36
|
-
process = proc { i.html_tree_run_hooks(node, state, &prev_process) }
|
|
37
|
-
end
|
|
38
|
-
process.(node, state)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def self.default_converter(tag_name)
|
|
42
|
-
case Coradoc::Input::Html.config.unknown_tags.to_sym
|
|
43
|
-
when :pass_through
|
|
44
|
-
Coradoc::Input::Html::Converters::PassThrough.new
|
|
45
|
-
when :drop
|
|
46
|
-
Coradoc::Input::Html::Converters::Drop.new
|
|
47
|
-
when :bypass
|
|
48
|
-
Coradoc::Input::Html::Converters::Bypass.new
|
|
49
|
-
when :raise
|
|
50
|
-
raise UnknownTagError, "unknown tag: #{tag_name}"
|
|
51
|
-
else
|
|
52
|
-
raise InvalidConfigurationError,
|
|
53
|
-
"unknown value #{Coradoc::Input::Html.config.unknown_tags.inspect} for Coradoc::Input::HTML.config.unknown_tags"
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "converters/markup"
|
|
4
|
-
require_relative "converters/a"
|
|
5
|
-
require_relative "converters/aside"
|
|
6
|
-
require_relative "converters/audio"
|
|
7
|
-
require_relative "converters/blockquote"
|
|
8
|
-
require_relative "converters/br"
|
|
9
|
-
require_relative "converters/bypass"
|
|
10
|
-
require_relative "converters/code"
|
|
11
|
-
require_relative "converters/div"
|
|
12
|
-
require_relative "converters/dl"
|
|
13
|
-
require_relative "converters/drop"
|
|
14
|
-
require_relative "converters/em"
|
|
15
|
-
require_relative "converters/figure"
|
|
16
|
-
require_relative "converters/h"
|
|
17
|
-
require_relative "converters/head"
|
|
18
|
-
require_relative "converters/hr"
|
|
19
|
-
require_relative "converters/ignore"
|
|
20
|
-
require_relative "converters/img"
|
|
21
|
-
require_relative "converters/mark"
|
|
22
|
-
require_relative "converters/li"
|
|
23
|
-
require_relative "converters/ol"
|
|
24
|
-
require_relative "converters/p"
|
|
25
|
-
require_relative "converters/pass_through"
|
|
26
|
-
require_relative "converters/pre"
|
|
27
|
-
require_relative "converters/q"
|
|
28
|
-
require_relative "converters/strong"
|
|
29
|
-
require_relative "converters/sup"
|
|
30
|
-
require_relative "converters/sub"
|
|
31
|
-
require_relative "converters/table"
|
|
32
|
-
require_relative "converters/td"
|
|
33
|
-
require_relative "converters/th"
|
|
34
|
-
require_relative "converters/text"
|
|
35
|
-
require_relative "converters/tr"
|
|
36
|
-
require_relative "converters/video"
|
|
37
|
-
require_relative "converters/math"
|
|
38
|
-
|
|
39
|
-
module Coradoc
|
|
40
|
-
module Input
|
|
41
|
-
module Html
|
|
42
|
-
class HtmlConverter
|
|
43
|
-
def self.to_coradoc(input, options = {})
|
|
44
|
-
Input::Html.config.with(options) do
|
|
45
|
-
plugin_instances = prepare_plugin_instances(options)
|
|
46
|
-
|
|
47
|
-
root = track_time "Loading input HTML document" do
|
|
48
|
-
case input
|
|
49
|
-
when String
|
|
50
|
-
Nokogiri::HTML(input).root
|
|
51
|
-
when Nokogiri::XML::Document
|
|
52
|
-
input.root
|
|
53
|
-
when Nokogiri::XML::Node
|
|
54
|
-
input
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
return "" unless root
|
|
59
|
-
|
|
60
|
-
plugin_instances.each do |plugin|
|
|
61
|
-
plugin.html_tree = root
|
|
62
|
-
if plugin.respond_to?(:preprocess_html_tree)
|
|
63
|
-
track_time "Preprocessing document with #{plugin.name} plugin" do
|
|
64
|
-
plugin.preprocess_html_tree
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
root = plugin.html_tree
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
coradoc = track_time "Converting input document tree to Coradoc tree" do
|
|
71
|
-
Converters.process_coradoc(root,
|
|
72
|
-
plugin_instances: plugin_instances)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
coradoc = track_time "Post-process Coradoc tree" do
|
|
76
|
-
Postprocessor.process(coradoc)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
plugin_instances.each do |plugin|
|
|
80
|
-
if plugin.respond_to?(:postprocess_coradoc_tree)
|
|
81
|
-
plugin.coradoc_tree = coradoc
|
|
82
|
-
track_time "Postprocessing Coradoc tree with #{plugin.name} plugin" do
|
|
83
|
-
plugin.postprocess_coradoc_tree
|
|
84
|
-
end
|
|
85
|
-
coradoc = plugin.coradoc_tree
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
options[:plugin_instances] = plugin_instances unless options.frozen?
|
|
90
|
-
|
|
91
|
-
coradoc
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def self.convert(input, options = {})
|
|
96
|
-
Input::Html.config.with(options) do
|
|
97
|
-
prepare_plugin_instances(options)
|
|
98
|
-
|
|
99
|
-
coradoc = to_coradoc(input, options)
|
|
100
|
-
|
|
101
|
-
if coradoc.is_a?(Hash)
|
|
102
|
-
coradoc.to_h do |file, tree|
|
|
103
|
-
track_time "Converting file #{file || 'main'}" do
|
|
104
|
-
[file,
|
|
105
|
-
convert_single_coradoc_to_adoc(file, tree, options)]
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
else
|
|
109
|
-
convert_single_coradoc_to_adoc(nil, coradoc, options)
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
def self.convert_single_coradoc_to_adoc(_file, coradoc, options)
|
|
115
|
-
prepare_plugin_instances(options)
|
|
116
|
-
|
|
117
|
-
result = track_time "Converting Coradoc tree into Asciidoc" do
|
|
118
|
-
Coradoc::Generator.gen_adoc(coradoc)
|
|
119
|
-
end
|
|
120
|
-
cleanup_result(result, options)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
def self.cleanup_result(result, options)
|
|
124
|
-
Input::Html.config.with(options) do
|
|
125
|
-
plugin_instances = prepare_plugin_instances(options)
|
|
126
|
-
|
|
127
|
-
result = track_time "Cleaning up the result" do
|
|
128
|
-
Input::Html.cleaner.tidy(result)
|
|
129
|
-
end
|
|
130
|
-
plugin_instances.each do |plugin|
|
|
131
|
-
if plugin.respond_to?(:postprocess_asciidoc_string)
|
|
132
|
-
plugin.asciidoc_string = result
|
|
133
|
-
track_time "Postprocessing AsciiDoc string with #{plugin.name} plugin" do
|
|
134
|
-
plugin.postprocess_asciidoc_string
|
|
135
|
-
end
|
|
136
|
-
result = plugin.asciidoc_string
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
result
|
|
141
|
-
end
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
def self.prepare_plugin_instances(options)
|
|
145
|
-
options[:plugin_instances] || Coradoc::Input::Html.config.plugins.map(&:new)
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
@track_time_indentation = 0
|
|
149
|
-
def self.track_time(task)
|
|
150
|
-
if Input::Html.config.track_time
|
|
151
|
-
warn " " * @track_time_indentation +
|
|
152
|
-
"* #{task} is starting..."
|
|
153
|
-
@track_time_indentation += 1
|
|
154
|
-
t0 = Time.now
|
|
155
|
-
ret = yield
|
|
156
|
-
time_elapsed = Time.now - t0
|
|
157
|
-
@track_time_indentation -= 1
|
|
158
|
-
warn " " * @track_time_indentation +
|
|
159
|
-
"* #{task} took #{time_elapsed.round(3)} seconds"
|
|
160
|
-
ret
|
|
161
|
-
else
|
|
162
|
-
yield
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
|
-
end
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
module Coradoc
|
|
2
|
-
module Input
|
|
3
|
-
module Html
|
|
4
|
-
class Plugin
|
|
5
|
-
#### Plugin system general
|
|
6
|
-
|
|
7
|
-
# Allow building plugins with a shorthand syntax:
|
|
8
|
-
# plugin = Coradoc::Input::Html::Plugin.new do
|
|
9
|
-
# def name = "Test"
|
|
10
|
-
# end
|
|
11
|
-
|
|
12
|
-
def self.new(&)
|
|
13
|
-
if self == Plugin
|
|
14
|
-
Class.new(Plugin, &)
|
|
15
|
-
else
|
|
16
|
-
super
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def initialize
|
|
21
|
-
@html_tree_hooks_pre = {}
|
|
22
|
-
@html_tree_hooks_post = {}
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# define name to name a Plugin
|
|
26
|
-
def name
|
|
27
|
-
self.class.name
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
#### HTML Tree functionalities
|
|
31
|
-
|
|
32
|
-
attr_accessor :html_tree, :coradoc_tree, :asciidoc_string
|
|
33
|
-
|
|
34
|
-
def html_tree_change_tag_name_by_css(css, new_name)
|
|
35
|
-
html_tree.css(css).each do |e|
|
|
36
|
-
e.name = new_name
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def html_tree_change_properties_by_css(css, properties)
|
|
41
|
-
html_tree.css(css).each do |e|
|
|
42
|
-
properties.each do |k, v|
|
|
43
|
-
e[k.to_s] = v
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def html_tree_remove_by_css(css)
|
|
49
|
-
html_tree.css(css).each(&:remove)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def html_tree_replace_with_children_by_css(css)
|
|
53
|
-
html_tree.css(css).each do |e|
|
|
54
|
-
e.replace(e.children)
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def html_tree_process_to_coradoc(tree, state = {})
|
|
59
|
-
Coradoc::Input::Html::Converters.process_coradoc(tree, state)
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def html_tree_process_to_adoc(tree, state = {})
|
|
63
|
-
Coradoc::Input::Html::Converters.process(tree, state)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def html_tree_preview
|
|
67
|
-
Tempfile.open(%w"coradoc .html") do |i|
|
|
68
|
-
i << html_tree.to_html
|
|
69
|
-
system "chromium-browser", "--no-sandbox", i.path
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
# define preprocess_html_tree to process HTML trees
|
|
74
|
-
|
|
75
|
-
# Creates a hook to be called instead of converting an element
|
|
76
|
-
# to a Coradoc node.
|
|
77
|
-
#
|
|
78
|
-
# proc |html_node, state|
|
|
79
|
-
# coradoc_node
|
|
80
|
-
# end
|
|
81
|
-
def html_tree_add_hook_pre(element, &block)
|
|
82
|
-
@html_tree_hooks_pre[element] = block
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def html_tree_add_hook_pre_by_css(css, &block)
|
|
86
|
-
html_tree.css(css).each do |e|
|
|
87
|
-
html_tree_add_hook_pre(e, &block)
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
# Creates a hook to be called after converting an element
|
|
92
|
-
# to a Coradoc node.
|
|
93
|
-
#
|
|
94
|
-
# proc |html_node, coradoc_node, state|
|
|
95
|
-
# coradoc_node
|
|
96
|
-
# end
|
|
97
|
-
def html_tree_add_hook_post(element, &block)
|
|
98
|
-
@html_tree_hooks_post[element] = block
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def html_tree_add_hook_post_by_css(css, &block)
|
|
102
|
-
html_tree.css(css).each do |e|
|
|
103
|
-
html_tree_add_hook_post(e, &block)
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def html_tree_run_hooks(node, state, &_block)
|
|
108
|
-
hook_pre = @html_tree_hooks_pre[node]
|
|
109
|
-
hook_post = @html_tree_hooks_post[node]
|
|
110
|
-
|
|
111
|
-
coradoc = hook_pre.(node, state) if hook_pre
|
|
112
|
-
coradoc ||= yield node, state
|
|
113
|
-
|
|
114
|
-
if hook_post
|
|
115
|
-
coradoc = hook_post.(node, coradoc, state)
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
coradoc
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
#### Coradoc tree functionalities
|
|
122
|
-
|
|
123
|
-
# define postprocess_coradoc_tree to change coradoc tree
|
|
124
|
-
|
|
125
|
-
#### AsciiDoc string functionalities
|
|
126
|
-
|
|
127
|
-
# define postprocess_asciidoc_string to change the coradoc string
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
end
|