coradoc 0.2.0 → 0.3.0

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.
Files changed (92) 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/CHANGELOG.md +4 -0
  6. data/Rakefile +10 -0
  7. data/coradoc.gemspec +11 -2
  8. data/exe/reverse_adoc +70 -0
  9. data/exe/w2a +72 -0
  10. data/lib/coradoc/document.rb +5 -6
  11. data/lib/coradoc/element/admonition.rb +8 -6
  12. data/lib/coradoc/element/attribute_list.rb +2 -2
  13. data/lib/coradoc/element/audio.rb +1 -1
  14. data/lib/coradoc/element/author.rb +16 -14
  15. data/lib/coradoc/element/base.rb +0 -2
  16. data/lib/coradoc/element/block/core.rb +2 -2
  17. data/lib/coradoc/element/block/literal.rb +1 -1
  18. data/lib/coradoc/element/block/sourcecode.rb +2 -2
  19. data/lib/coradoc/element/image/core.rb +1 -0
  20. data/lib/coradoc/element/image.rb +0 -1
  21. data/lib/coradoc/element/inline/bold.rb +1 -0
  22. data/lib/coradoc/element/inline/highlight.rb +1 -0
  23. data/lib/coradoc/element/inline/image.rb +1 -0
  24. data/lib/coradoc/element/inline/italic.rb +1 -0
  25. data/lib/coradoc/element/inline/link.rb +9 -9
  26. data/lib/coradoc/element/inline/monospace.rb +1 -0
  27. data/lib/coradoc/element/inline/quotation.rb +1 -0
  28. data/lib/coradoc/element/inline/subscript.rb +1 -0
  29. data/lib/coradoc/element/inline/superscript.rb +1 -0
  30. data/lib/coradoc/element/inline.rb +0 -1
  31. data/lib/coradoc/element/list/core.rb +3 -4
  32. data/lib/coradoc/element/list.rb +0 -1
  33. data/lib/coradoc/element/list_item.rb +1 -1
  34. data/lib/coradoc/element/paragraph.rb +1 -1
  35. data/lib/coradoc/element/revision.rb +18 -16
  36. data/lib/coradoc/element/table.rb +10 -10
  37. data/lib/coradoc/element/text_element.rb +21 -15
  38. data/lib/coradoc/element/title.rb +2 -2
  39. data/lib/coradoc/element/video.rb +1 -1
  40. data/lib/coradoc/generator.rb +2 -2
  41. data/lib/coradoc/legacy_parser.rb +41 -41
  42. data/lib/coradoc/oscal.rb +2 -4
  43. data/lib/coradoc/parser/asciidoc/content.rb +15 -15
  44. data/lib/coradoc/parser/asciidoc/document_attributes.rb +1 -1
  45. data/lib/coradoc/parser/asciidoc/header.rb +6 -6
  46. data/lib/coradoc/parser/asciidoc/section.rb +1 -1
  47. data/lib/coradoc/reverse_adoc/LICENSE.txt +25 -0
  48. data/lib/coradoc/reverse_adoc/README.adoc +302 -0
  49. data/lib/coradoc/reverse_adoc/cleaner.rb +113 -0
  50. data/lib/coradoc/reverse_adoc/config.rb +54 -0
  51. data/lib/coradoc/reverse_adoc/converters/a.rb +42 -0
  52. data/lib/coradoc/reverse_adoc/converters/aside.rb +16 -0
  53. data/lib/coradoc/reverse_adoc/converters/audio.rb +29 -0
  54. data/lib/coradoc/reverse_adoc/converters/base.rb +100 -0
  55. data/lib/coradoc/reverse_adoc/converters/blockquote.rb +27 -0
  56. data/lib/coradoc/reverse_adoc/converters/br.rb +15 -0
  57. data/lib/coradoc/reverse_adoc/converters/bypass.rb +81 -0
  58. data/lib/coradoc/reverse_adoc/converters/code.rb +56 -0
  59. data/lib/coradoc/reverse_adoc/converters/div.rb +18 -0
  60. data/lib/coradoc/reverse_adoc/converters/drop.rb +22 -0
  61. data/lib/coradoc/reverse_adoc/converters/em.rb +55 -0
  62. data/lib/coradoc/reverse_adoc/converters/figure.rb +25 -0
  63. data/lib/coradoc/reverse_adoc/converters/h.rb +42 -0
  64. data/lib/coradoc/reverse_adoc/converters/head.rb +23 -0
  65. data/lib/coradoc/reverse_adoc/converters/hr.rb +15 -0
  66. data/lib/coradoc/reverse_adoc/converters/ignore.rb +16 -0
  67. data/lib/coradoc/reverse_adoc/converters/img.rb +93 -0
  68. data/lib/coradoc/reverse_adoc/converters/li.rb +17 -0
  69. data/lib/coradoc/reverse_adoc/converters/mark.rb +21 -0
  70. data/lib/coradoc/reverse_adoc/converters/math.rb +31 -0
  71. data/lib/coradoc/reverse_adoc/converters/ol.rb +64 -0
  72. data/lib/coradoc/reverse_adoc/converters/p.rb +23 -0
  73. data/lib/coradoc/reverse_adoc/converters/pass_through.rb +13 -0
  74. data/lib/coradoc/reverse_adoc/converters/pre.rb +55 -0
  75. data/lib/coradoc/reverse_adoc/converters/q.rb +16 -0
  76. data/lib/coradoc/reverse_adoc/converters/strong.rb +52 -0
  77. data/lib/coradoc/reverse_adoc/converters/sub.rb +16 -0
  78. data/lib/coradoc/reverse_adoc/converters/sup.rb +16 -0
  79. data/lib/coradoc/reverse_adoc/converters/table.rb +69 -0
  80. data/lib/coradoc/reverse_adoc/converters/td.rb +83 -0
  81. data/lib/coradoc/reverse_adoc/converters/text.rb +65 -0
  82. data/lib/coradoc/reverse_adoc/converters/th.rb +14 -0
  83. data/lib/coradoc/reverse_adoc/converters/tr.rb +22 -0
  84. data/lib/coradoc/reverse_adoc/converters/video.rb +29 -0
  85. data/lib/coradoc/reverse_adoc/converters.rb +32 -0
  86. data/lib/coradoc/reverse_adoc/errors.rb +10 -0
  87. data/lib/coradoc/reverse_adoc/html_converter.rb +61 -0
  88. data/lib/coradoc/reverse_adoc.rb +27 -0
  89. data/lib/coradoc/transformer.rb +24 -14
  90. data/lib/coradoc/version.rb +1 -1
  91. data/lib/reverse_adoc.rb +20 -0
  92. metadata +178 -4
@@ -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
@@ -7,7 +7,8 @@ module Coradoc
7
7
  rule(
8
8
  title: simple(:title),
9
9
  author: simple(:author),
10
- revision: simple(:revision)) do
10
+ revision: simple(:revision),
11
+ ) do
11
12
  Element::Header.new(title, author: author, revision: revision)
12
13
  end
13
14
 
@@ -15,12 +16,14 @@ module Coradoc
15
16
  rule(
16
17
  first_name: simple(:first_name),
17
18
  last_name: simple(:last_name),
18
- email: simple(:email)) do
19
+ email: simple(:email),
20
+ ) do
19
21
  Element::Author.new(first_name, last_name, email)
20
22
  end
21
23
 
22
24
  # Revision
23
- rule(number: simple(:number), date: simple(:date), remark: simple(:remark)) do
25
+ rule(number: simple(:number), date: simple(:date),
26
+ remark: simple(:remark)) do
24
27
  Element::Revision.new(number, date: date, remark: remark)
25
28
  end
26
29
 
@@ -49,19 +52,20 @@ module Coradoc
49
52
  rule(
50
53
  level: simple(:level),
51
54
  text: simple(:text),
52
- break: simple(:line_break)) do
53
- Element::Title.new(text, level, line_break: line_break)
55
+ break: simple(:line_break),
56
+ ) do
57
+ Element::Title.new(text, level, line_break: line_break)
54
58
  end
55
59
 
56
60
  rule(
57
61
  name: simple(:name),
58
62
  level: simple(:level),
59
63
  text: simple(:text),
60
- break: simple(:line_break)) do
61
- Element::Title.new(text, level, line_break: line_break, id: name)
64
+ break: simple(:line_break),
65
+ ) do
66
+ Element::Title.new(text, level, line_break: line_break, id: name)
62
67
  end
63
68
 
64
-
65
69
  # Section
66
70
  # rule(title: simple(:title)) { Element::Section.new(title) }
67
71
  #
@@ -69,7 +73,8 @@ module Coradoc
69
73
  rule(
70
74
  id: simple(:id),
71
75
  title: simple(:title),
72
- sections: sequence(:sections)) do
76
+ sections: sequence(:sections),
77
+ ) do
73
78
  Element::Section.new(title, id: id, sections: sections)
74
79
  end
75
80
 
@@ -77,16 +82,20 @@ module Coradoc
77
82
  id: simple(:id),
78
83
  title: simple(:title),
79
84
  contents: sequence(:contents),
80
- sections: simple(:sections)) do
81
- Element::Section.new(title, id: id, contents: contents, sections: sections)
85
+ sections: simple(:sections),
86
+ ) do
87
+ Element::Section.new(title, id: id, contents: contents,
88
+ sections: sections)
82
89
  end
83
90
 
84
91
  rule(
85
92
  id: simple(:id),
86
93
  title: simple(:title),
87
94
  contents: sequence(:contents),
88
- sections: sequence(:sections)) do
89
- Element::Section.new(title, id: id, contents: contents, sections: sections)
95
+ sections: sequence(:sections),
96
+ ) do
97
+ Element::Section.new(title, id: id, contents: contents,
98
+ sections: sections)
90
99
  end
91
100
 
92
101
  rule(example: sequence(:example)) do
@@ -136,7 +145,8 @@ module Coradoc
136
145
  Element::Attribute.new(key, value)
137
146
  end
138
147
 
139
- rule(key: simple(:key), value: simple(:value), break: simple(:line_break)) do
148
+ rule(key: simple(:key), value: simple(:value),
149
+ break: simple(:line_break)) do
140
150
  Element::Attribute.new(key, value, line_break: line_break)
141
151
  end
142
152
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Coradoc
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end