coradoc 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/.docker/Dockerfile +1 -1
  3. data/.docker/docker-compose.yml +2 -2
  4. data/.editorconfig +15 -0
  5. data/.pryrc.sample +1 -0
  6. data/CHANGELOG.md +4 -0
  7. data/Rakefile +10 -0
  8. data/coradoc.gemspec +11 -2
  9. data/exe/reverse_adoc +70 -0
  10. data/exe/w2a +72 -0
  11. data/lib/coradoc/document.rb +40 -23
  12. data/lib/coradoc/element/admonition.rb +13 -0
  13. data/lib/coradoc/{document → element}/attribute.rb +1 -1
  14. data/lib/coradoc/element/attribute_list.rb +46 -0
  15. data/lib/coradoc/element/audio.rb +22 -0
  16. data/lib/coradoc/element/author.rb +22 -0
  17. data/lib/coradoc/element/base.rb +15 -0
  18. data/lib/coradoc/element/block/core.rb +69 -0
  19. data/lib/coradoc/element/block/example.rb +22 -0
  20. data/lib/coradoc/element/block/literal.rb +19 -0
  21. data/lib/coradoc/element/block/quote.rb +19 -0
  22. data/lib/coradoc/element/block/side.rb +17 -0
  23. data/lib/coradoc/element/block/sourcecode.rb +20 -0
  24. data/lib/coradoc/element/block.rb +13 -0
  25. data/lib/coradoc/element/break.rb +11 -0
  26. data/lib/coradoc/{document/bibdata.rb → element/document_attributes.rb} +4 -8
  27. data/lib/coradoc/element/header.rb +20 -0
  28. data/lib/coradoc/element/image/block_image.rb +12 -0
  29. data/lib/coradoc/element/image/core.rb +25 -0
  30. data/lib/coradoc/element/image/inline_image.rb +12 -0
  31. data/lib/coradoc/element/image.rb +10 -0
  32. data/lib/coradoc/element/inline/anchor.rb +17 -0
  33. data/lib/coradoc/element/inline/bold.rb +20 -0
  34. data/lib/coradoc/element/inline/cross_reference.rb +22 -0
  35. data/lib/coradoc/element/inline/hard_line_break.rb +11 -0
  36. data/lib/coradoc/element/inline/highlight.rb +20 -0
  37. data/lib/coradoc/element/inline/image.rb +26 -0
  38. data/lib/coradoc/element/inline/italic.rb +20 -0
  39. data/lib/coradoc/element/inline/link.rb +26 -0
  40. data/lib/coradoc/element/inline/monospace.rb +20 -0
  41. data/lib/coradoc/element/inline/quotation.rb +18 -0
  42. data/lib/coradoc/element/inline/subscript.rb +18 -0
  43. data/lib/coradoc/element/inline/superscript.rb +18 -0
  44. data/lib/coradoc/element/inline.rb +18 -0
  45. data/lib/coradoc/element/list/core.rb +35 -0
  46. data/lib/coradoc/element/list/definition.rb +8 -0
  47. data/lib/coradoc/element/list/ordered.rb +15 -0
  48. data/lib/coradoc/element/list/unordered.rb +15 -0
  49. data/lib/coradoc/element/list.rb +12 -0
  50. data/lib/coradoc/element/list_item.rb +19 -0
  51. data/lib/coradoc/element/paragraph.rb +32 -0
  52. data/lib/coradoc/element/revision.rb +25 -0
  53. data/lib/coradoc/element/section.rb +37 -0
  54. data/lib/coradoc/element/table.rb +67 -0
  55. data/lib/coradoc/element/text_element.rb +32 -0
  56. data/lib/coradoc/{document → element}/title.rb +14 -5
  57. data/lib/coradoc/element/video.rb +23 -0
  58. data/lib/coradoc/generator.rb +17 -0
  59. data/lib/coradoc/legacy_parser.rb +48 -48
  60. data/lib/coradoc/oscal.rb +6 -5
  61. data/lib/coradoc/parser/asciidoc/base.rb +17 -17
  62. data/lib/coradoc/parser/asciidoc/content.rb +55 -29
  63. data/lib/coradoc/parser/asciidoc/document_attributes.rb +19 -0
  64. data/lib/coradoc/parser/asciidoc/header.rb +13 -10
  65. data/lib/coradoc/parser/asciidoc/section.rb +6 -6
  66. data/lib/coradoc/parser/base.rb +5 -5
  67. data/lib/coradoc/parser.rb +1 -1
  68. data/lib/coradoc/reverse_adoc/LICENSE.txt +25 -0
  69. data/lib/coradoc/reverse_adoc/README.adoc +302 -0
  70. data/lib/coradoc/reverse_adoc/cleaner.rb +113 -0
  71. data/lib/coradoc/reverse_adoc/config.rb +54 -0
  72. data/lib/coradoc/reverse_adoc/converters/a.rb +42 -0
  73. data/lib/coradoc/reverse_adoc/converters/aside.rb +16 -0
  74. data/lib/coradoc/reverse_adoc/converters/audio.rb +29 -0
  75. data/lib/coradoc/reverse_adoc/converters/base.rb +100 -0
  76. data/lib/coradoc/reverse_adoc/converters/blockquote.rb +27 -0
  77. data/lib/coradoc/reverse_adoc/converters/br.rb +15 -0
  78. data/lib/coradoc/reverse_adoc/converters/bypass.rb +81 -0
  79. data/lib/coradoc/reverse_adoc/converters/code.rb +56 -0
  80. data/lib/coradoc/reverse_adoc/converters/div.rb +18 -0
  81. data/lib/coradoc/reverse_adoc/converters/drop.rb +22 -0
  82. data/lib/coradoc/reverse_adoc/converters/em.rb +55 -0
  83. data/lib/coradoc/reverse_adoc/converters/figure.rb +25 -0
  84. data/lib/coradoc/reverse_adoc/converters/h.rb +42 -0
  85. data/lib/coradoc/reverse_adoc/converters/head.rb +23 -0
  86. data/lib/coradoc/reverse_adoc/converters/hr.rb +15 -0
  87. data/lib/coradoc/reverse_adoc/converters/ignore.rb +16 -0
  88. data/lib/coradoc/reverse_adoc/converters/img.rb +93 -0
  89. data/lib/coradoc/reverse_adoc/converters/li.rb +17 -0
  90. data/lib/coradoc/reverse_adoc/converters/mark.rb +21 -0
  91. data/lib/coradoc/reverse_adoc/converters/math.rb +31 -0
  92. data/lib/coradoc/reverse_adoc/converters/ol.rb +64 -0
  93. data/lib/coradoc/reverse_adoc/converters/p.rb +23 -0
  94. data/lib/coradoc/reverse_adoc/converters/pass_through.rb +13 -0
  95. data/lib/coradoc/reverse_adoc/converters/pre.rb +55 -0
  96. data/lib/coradoc/reverse_adoc/converters/q.rb +16 -0
  97. data/lib/coradoc/reverse_adoc/converters/strong.rb +52 -0
  98. data/lib/coradoc/reverse_adoc/converters/sub.rb +16 -0
  99. data/lib/coradoc/reverse_adoc/converters/sup.rb +16 -0
  100. data/lib/coradoc/reverse_adoc/converters/table.rb +69 -0
  101. data/lib/coradoc/reverse_adoc/converters/td.rb +83 -0
  102. data/lib/coradoc/reverse_adoc/converters/text.rb +65 -0
  103. data/lib/coradoc/reverse_adoc/converters/th.rb +14 -0
  104. data/lib/coradoc/reverse_adoc/converters/tr.rb +22 -0
  105. data/lib/coradoc/reverse_adoc/converters/video.rb +29 -0
  106. data/lib/coradoc/reverse_adoc/converters.rb +32 -0
  107. data/lib/coradoc/reverse_adoc/errors.rb +10 -0
  108. data/lib/coradoc/reverse_adoc/html_converter.rb +61 -0
  109. data/lib/coradoc/reverse_adoc.rb +27 -0
  110. data/lib/coradoc/transformer.rb +59 -46
  111. data/lib/coradoc/version.rb +1 -1
  112. data/lib/coradoc.rb +6 -4
  113. data/lib/reverse_adoc.rb +20 -0
  114. metadata +231 -23
  115. data/lib/coradoc/document/admonition.rb +0 -11
  116. data/lib/coradoc/document/author.rb +0 -11
  117. data/lib/coradoc/document/base.rb +0 -17
  118. data/lib/coradoc/document/block.rb +0 -34
  119. data/lib/coradoc/document/header.rb +0 -11
  120. data/lib/coradoc/document/list.rb +0 -14
  121. data/lib/coradoc/document/paragraph.rb +0 -19
  122. data/lib/coradoc/document/revision.rb +0 -11
  123. data/lib/coradoc/document/section.rb +0 -28
  124. data/lib/coradoc/document/table.rb +0 -20
  125. data/lib/coradoc/document/text_element.rb +0 -22
  126. data/lib/coradoc/parser/asciidoc/bibdata.rb +0 -19
@@ -0,0 +1,55 @@
1
+ module Coradoc::ReverseAdoc
2
+ module Converters
3
+ class Pre < Base
4
+ def to_coradoc(node, state = {})
5
+ id = node["id"]
6
+ lang = language(node)
7
+ content = treat_children(node, state)
8
+
9
+ unless lang
10
+ return Coradoc::Element::Block::Literal.new(
11
+ nil,
12
+ lines: content,
13
+ id: id,
14
+ )
15
+ end
16
+
17
+ Coradoc::Element::Block::SourceCode.new(
18
+ nil,
19
+ lines: content,
20
+ lang: lang,
21
+ id: id,
22
+ )
23
+ end
24
+
25
+ def convert(node, state = {})
26
+ Coradoc::Generator.gen_adoc(to_coradoc(node, state))
27
+ end
28
+
29
+ private
30
+
31
+ def treat(node, _state)
32
+ return "\n" if node.name == "br"
33
+
34
+ prefix = postfix = "\n\n" if node.name == "p"
35
+
36
+ "#{prefix}#{node.text}#{postfix}"
37
+ end
38
+
39
+ def language(node)
40
+ lang = language_from_highlight_class(node)
41
+ lang || language_from_confluence_class(node)
42
+ end
43
+
44
+ def language_from_highlight_class(node)
45
+ node.parent["class"].to_s[/highlight-([a-zA-Z0-9]+)/, 1]
46
+ end
47
+
48
+ def language_from_confluence_class(node)
49
+ node["class"].to_s[/brush:\s?(:?.*);/, 1]
50
+ end
51
+ end
52
+
53
+ register :pre, Pre.new
54
+ end
55
+ end
@@ -0,0 +1,16 @@
1
+ module Coradoc::ReverseAdoc
2
+ module Converters
3
+ class Q < Base
4
+ def to_coradoc(node, state = {})
5
+ content = treat_children(node, state)
6
+ Coradoc::Element::Inline::Quotation.new(content)
7
+ end
8
+
9
+ def convert(node, state = {})
10
+ Coradoc::Generator.gen_adoc(to_coradoc(node, state))
11
+ end
12
+ end
13
+
14
+ register :q, Q.new
15
+ end
16
+ end
@@ -0,0 +1,52 @@
1
+ module Coradoc::ReverseAdoc
2
+ module Converters
3
+ class Strong < Base
4
+ def to_coradoc(node, state = {})
5
+ content = treat_children_coradoc(node,
6
+ state.merge(already_strong: true))
7
+
8
+ if Coradoc::Generator.gen_adoc(content).strip.empty?
9
+ return ""
10
+ end
11
+
12
+ if node_has_ancestor?(node, ["strong", "b"])
13
+ return content
14
+ end
15
+
16
+ u_before = unconstrained_before?(node)
17
+ u_after = unconstrained_after?(node)
18
+ node.text =~ /^(\s+)/
19
+ leading_whitespace = $1
20
+ has_leading_whitespace = !leading_whitespace.nil?
21
+
22
+ if has_leading_whitespace
23
+ first_text = node.at_xpath("./text()[1]")
24
+ first_text.replace(first_text.text.lstrip)
25
+ leading_whitespace = u_before ? " " : " " # ########################33 somethings wrong in here
26
+ end
27
+
28
+ node.text =~ /(\s+)$/
29
+ trailing_whitespace = $1
30
+ has_trailing_whitespace = !trailing_whitespace.nil?
31
+
32
+ if has_trailing_whitespace
33
+ last_text = node.at_xpath("./text()[last()]")
34
+ last_text.replace(last_text.text.rstrip)
35
+ trailing_whitespace = u_after ? "" : "" ###############################
36
+ end
37
+
38
+ u = !((!u_before || has_leading_whitespace) && (!u_after || has_trailing_whitespace))
39
+ e = Coradoc::Element::Inline::Bold.new(content, u)
40
+
41
+ [leading_whitespace, e, trailing_whitespace]
42
+ end
43
+
44
+ def convert(node, state = {})
45
+ Coradoc::Generator.gen_adoc(to_coradoc(node, state))
46
+ end
47
+ end
48
+
49
+ register :strong, Strong.new
50
+ register :b, Strong.new
51
+ end
52
+ end
@@ -0,0 +1,16 @@
1
+ module Coradoc::ReverseAdoc
2
+ module Converters
3
+ class Sub < Base
4
+ def to_coradoc(node, state = {})
5
+ content = treat_children_coradoc(node, state)
6
+ Coradoc::Element::Inline::Subscript.new(content)
7
+ end
8
+
9
+ def convert(node, state = {})
10
+ Coradoc::Generator.gen_adoc(to_coradoc(node, state))
11
+ end
12
+ end
13
+
14
+ register :sub, Sub.new
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Coradoc::ReverseAdoc
2
+ module Converters
3
+ class Sup < Base
4
+ def to_coradoc(node, state = {})
5
+ content = treat_children(node, state)
6
+ Coradoc::Element::Inline::Superscript.new(content)
7
+ end
8
+
9
+ def convert(node, state = {})
10
+ Coradoc::Generator.gen_adoc(to_coradoc(node, state))
11
+ end
12
+ end
13
+
14
+ register :sup, Sup.new
15
+ end
16
+ end
@@ -0,0 +1,69 @@
1
+ module Coradoc::ReverseAdoc
2
+ module Converters
3
+ class Table < Base
4
+ def to_coradoc(node, state = {})
5
+ id = node["id"]
6
+ title = extract_title(node)
7
+ attrs = style(node)
8
+ content = treat_children_coradoc(node, state)
9
+ Coradoc::Element::Table.new(title, content, { id: id, attrs: attrs })
10
+ end
11
+
12
+ def convert(node, state = {})
13
+ Coradoc::Generator.gen_adoc(to_coradoc(node, state))
14
+ end
15
+
16
+ def extract_title(node)
17
+ title = node.at("./caption")
18
+ return "" if title.nil?
19
+
20
+ treat_children(title, {})
21
+ end
22
+
23
+ def frame(node)
24
+ case node["frame"]
25
+ when "void"
26
+ "none"
27
+ when "hsides"
28
+ "topbot"
29
+ when "vsides"
30
+ "sides"
31
+ when "box", "border"
32
+ "all"
33
+ end
34
+ end
35
+
36
+ def rules(node)
37
+ case node["rules"]
38
+ when "all"
39
+ "all"
40
+ when "rows"
41
+ "rows"
42
+ when "cols"
43
+ "cols"
44
+ when "none"
45
+ "none"
46
+ end
47
+ end
48
+
49
+ def style(node)
50
+ attrs = Coradoc::Element::AttributeList.new
51
+ # Width is disabled on tables for now. (From #88)
52
+ # attrs.add_named("width", node["width"]) if node["width"]
53
+
54
+ frame_attr = frame(node)
55
+ attrs.add_named("frame", frame_attr) if frame_attr
56
+
57
+ rules_attr = rules(node)
58
+ attrs.add_named("rules", rules_attr) if rules_attr
59
+
60
+ # This line should be removed.
61
+ return "" if attrs.empty?
62
+
63
+ attrs
64
+ end
65
+ end
66
+
67
+ register :table, Table.new
68
+ end
69
+ end
@@ -0,0 +1,83 @@
1
+ module Coradoc::ReverseAdoc
2
+ module Converters
3
+ class Td < Base
4
+ def to_coradoc(node, state = {})
5
+ # convert(node, state)
6
+ id = node["id"]
7
+ colrowattr = colrow(node["colspan"], node["rowspan"])
8
+ alignattr = alignstyle(node)
9
+ style = cellstyle(node)
10
+
11
+ singlepara = node.elements.size == 1 && node.elements.first.name == "p"
12
+ state[:tdsinglepara] = singlepara if singlepara
13
+
14
+ adoccell = node.at(".//ul | .//ol | .//pre | .//blockquote | .//br | .//hr") ||
15
+ node.at(".//p") && !singlepara
16
+
17
+ style = "a" if adoccell
18
+ delim = adoccell ? "\n" : " "
19
+ content = treat_children_coradoc(node, state)
20
+ options = {}.tap do |hash|
21
+ hash[:id] = id
22
+ hash[:colrowattr] = colrowattr
23
+ hash[:alignattr] = alignattr
24
+ hash[:style] = style
25
+ hash[:content] = content
26
+ hash[:delim] = delim
27
+ end
28
+
29
+ Coradoc::Element::Table::Cell.new(options)
30
+ end
31
+
32
+ def convert(node, state = {})
33
+ Coradoc::Generator.gen_adoc(to_coradoc(node, state))
34
+ end
35
+
36
+ def cellstyle(_node)
37
+ ""
38
+ end
39
+
40
+ def colrow(colspan, rowspan)
41
+ if colspan && rowspan && colspan != "1" && rowspan != "1"
42
+ "#{colspan}.#{rowspan}+"
43
+ elsif colspan && colspan != "1"
44
+ "#{colspan}+"
45
+ elsif rowspan && rowspan != "1"
46
+ ".#{rowspan}+"
47
+ else
48
+ ""
49
+ end
50
+ end
51
+
52
+ def alignstyle(node)
53
+ align = node["align"]
54
+ valign = node["valign"]
55
+ a = case align
56
+ when "left" then "<"
57
+ when "center" then "^"
58
+ when "right" then ">"
59
+ else
60
+ ""
61
+ end
62
+ v = case valign
63
+ when "top" then "<"
64
+ when "middle" then "^"
65
+ when "bottom" then ">"
66
+ else
67
+ ""
68
+ end
69
+ if align && valign
70
+ "#{a}.#{v}"
71
+ elsif align
72
+ a
73
+ elsif valign
74
+ ".#{v}"
75
+ else
76
+ ""
77
+ end
78
+ end
79
+ end
80
+
81
+ register :td, Td.new
82
+ end
83
+ end
@@ -0,0 +1,65 @@
1
+ module Coradoc::ReverseAdoc
2
+ module Converters
3
+ class Text < Base
4
+ def to_coradoc(node, state = {})
5
+ return treat_empty(node, state) if node.text.strip.empty?
6
+
7
+ Coradoc::Element::TextElement.new(treat_text(node))
8
+ end
9
+
10
+ def convert(node, state = {})
11
+ Coradoc::Generator.gen_adoc(to_coradoc(node, state))
12
+ end
13
+
14
+ private
15
+
16
+ def treat_empty(node, state)
17
+ parent = node.parent.name.to_sym
18
+ if %i[ol ul].include?(parent) # Otherwise the identation is broken
19
+ ""
20
+ elsif state[:tdsinglepara]
21
+ ""
22
+ elsif node.text == " " # Regular whitespace text node
23
+ " "
24
+ else
25
+ ""
26
+ end
27
+ end
28
+
29
+ def treat_text(node)
30
+ text = node.text
31
+ text = preserve_nbsp(text)
32
+ text = remove_border_newlines(text)
33
+ text = remove_inner_newlines(text)
34
+ text = escape_keychars(text)
35
+
36
+ text = preserve_keychars_within_backticks(text)
37
+ escape_links(text)
38
+ end
39
+
40
+ def preserve_nbsp(text)
41
+ text.gsub(/\u00A0/, "&nbsp;")
42
+ end
43
+
44
+ def escape_links(text)
45
+ text.gsub(/<<([^>]*)>>/, "\\<<\\1>>")
46
+ end
47
+
48
+ def remove_border_newlines(text)
49
+ text.gsub(/\A\n+/, "").gsub(/\n+\z/, "")
50
+ end
51
+
52
+ def remove_inner_newlines(text)
53
+ text.tr("\n\t", " ").squeeze(" ")
54
+ end
55
+
56
+ def preserve_keychars_within_backticks(text)
57
+ text.gsub(/`.*?`/) do |match|
58
+ match.gsub('\_', "_").gsub('\*', "*")
59
+ end
60
+ end
61
+ end
62
+
63
+ register :text, Text.new
64
+ end
65
+ end
@@ -0,0 +1,14 @@
1
+ module Coradoc::ReverseAdoc
2
+ module Converters
3
+ class Th < Td
4
+ def cellstyle(node)
5
+ # this is the header row
6
+ return "" if node.parent.previous_element.nil?
7
+
8
+ "h"
9
+ end
10
+ end
11
+
12
+ register :th, Th.new
13
+ end
14
+ end
@@ -0,0 +1,22 @@
1
+ module Coradoc::ReverseAdoc
2
+ module Converters
3
+ class Tr < Base
4
+ def to_coradoc(node, state = {})
5
+ content = treat_children_coradoc(node, state)
6
+ header = table_header_row?(node)
7
+ Coradoc::Element::Table::Row.new(content, header)
8
+ end
9
+
10
+ def convert(node, state = {})
11
+ Coradoc::Generator.gen_adoc(to_coradoc(node, state))
12
+ end
13
+
14
+ def table_header_row?(node)
15
+ # node.element_children.all? {|child| child.name.to_sym == :th}
16
+ node.previous_element.nil?
17
+ end
18
+ end
19
+
20
+ register :tr, Tr.new
21
+ end
22
+ end
@@ -0,0 +1,29 @@
1
+ module Coradoc::ReverseAdoc
2
+ module Converters
3
+ class Video < Base
4
+ def to_coradoc(node, _state = {})
5
+ src = node["src"]
6
+ id = node["id"]
7
+ title = extract_title(node)
8
+ attributes = Coradoc::Element::AttributeList.new
9
+ options = options(node)
10
+ attributes.add_named("options", options) if options.any?
11
+ Coradoc::Element::Video.new(title, id: id, src: src,
12
+ attributes: attributes)
13
+ end
14
+
15
+ def convert(node, state = {})
16
+ Coradoc::Generator.gen_adoc(to_coradoc(node, state))
17
+ end
18
+
19
+ def options(node)
20
+ autoplay = node["autoplay"]
21
+ loop_attr = node["loop"]
22
+ controls = node["controls"]
23
+ [autoplay, loop_attr, controls].compact
24
+ end
25
+ end
26
+
27
+ register :video, Video.new
28
+ end
29
+ end
@@ -0,0 +1,32 @@
1
+ module Coradoc::ReverseAdoc
2
+ module Converters
3
+ def self.register(tag_name, converter)
4
+ @@converters ||= {}
5
+ @@converters[tag_name.to_sym] = converter
6
+ end
7
+
8
+ def self.unregister(tag_name)
9
+ @@converters.delete(tag_name.to_sym)
10
+ end
11
+
12
+ def self.lookup(tag_name)
13
+ @@converters[tag_name.to_sym] or default_converter(tag_name)
14
+ end
15
+
16
+ def self.default_converter(tag_name)
17
+ case Coradoc::ReverseAdoc.config.unknown_tags.to_sym
18
+ when :pass_through
19
+ Coradoc::ReverseAdoc::Converters::PassThrough.new
20
+ when :drop
21
+ Coradoc::ReverseAdoc::Converters::Drop.new
22
+ when :bypass
23
+ Coradoc::ReverseAdoc::Converters::Bypass.new
24
+ when :raise
25
+ raise UnknownTagError, "unknown tag: #{tag_name}"
26
+ else
27
+ raise InvalidConfigurationError,
28
+ "unknown value #{Coradoc::ReverseAdoc.config.unknown_tags.inspect} for Coradoc::ReverseAdoc.config.unknown_tags"
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,10 @@
1
+ module Coradoc::ReverseAdoc
2
+ class Error < StandardError
3
+ end
4
+
5
+ class UnknownTagError < Error
6
+ end
7
+
8
+ class InvalidConfigurationError < Error
9
+ end
10
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "converters/a"
4
+ require_relative "converters/aside"
5
+ require_relative "converters/audio"
6
+ require_relative "converters/blockquote"
7
+ require_relative "converters/br"
8
+ require_relative "converters/bypass"
9
+ require_relative "converters/code"
10
+ require_relative "converters/div"
11
+ require_relative "converters/drop"
12
+ require_relative "converters/em"
13
+ require_relative "converters/figure"
14
+ require_relative "converters/h"
15
+ require_relative "converters/head"
16
+ require_relative "converters/hr"
17
+ require_relative "converters/ignore"
18
+ require_relative "converters/img"
19
+ require_relative "converters/mark"
20
+ require_relative "converters/li"
21
+ require_relative "converters/ol"
22
+ require_relative "converters/p"
23
+ require_relative "converters/pass_through"
24
+ require_relative "converters/pre"
25
+ require_relative "converters/q"
26
+ require_relative "converters/strong"
27
+ require_relative "converters/sup"
28
+ require_relative "converters/sub"
29
+ require_relative "converters/table"
30
+ require_relative "converters/td"
31
+ require_relative "converters/th"
32
+ require_relative "converters/text"
33
+ require_relative "converters/tr"
34
+ require_relative "converters/video"
35
+ require_relative "converters/math"
36
+
37
+ module Coradoc::ReverseAdoc
38
+ class HtmlConverter
39
+ def self.to_coradoc(input, options = {})
40
+ root = case input
41
+ when String
42
+ Nokogiri::HTML(input).root
43
+ when Nokogiri::XML::Document
44
+ input.root
45
+ when Nokogiri::XML::Node
46
+ input
47
+ end
48
+
49
+ return "" unless root
50
+
51
+ Coradoc::ReverseAdoc.config.with(options) do
52
+ Coradoc::ReverseAdoc::Converters.lookup(root.name).to_coradoc(root)
53
+ end
54
+ end
55
+
56
+ def self.convert(input, options = {})
57
+ result = Coradoc::Generator.gen_adoc(to_coradoc(input, options))
58
+ Coradoc::ReverseAdoc.cleaner.tidy(result)
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "digest"
4
+ require "nokogiri"
5
+ require_relative "../coradoc"
6
+ require_relative "reverse_adoc/errors"
7
+ require_relative "reverse_adoc/cleaner"
8
+ require_relative "reverse_adoc/config"
9
+ require_relative "reverse_adoc/converters"
10
+ require_relative "reverse_adoc/converters/base"
11
+ require_relative "reverse_adoc/html_converter"
12
+
13
+ module Coradoc::ReverseAdoc
14
+ def self.convert(input, options = {})
15
+ Coradoc::ReverseAdoc::HtmlConverter.convert(input, options)
16
+ end
17
+
18
+ def self.config
19
+ @config ||= Config.new
20
+ yield @config if block_given?
21
+ @config
22
+ end
23
+
24
+ def self.cleaner
25
+ @cleaner ||= Cleaner.new
26
+ end
27
+ end