coradoc 0.2.0 → 1.0.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 (113) 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/README.md +4 -0
  7. data/Rakefile +10 -0
  8. data/coradoc.gemspec +11 -2
  9. data/exe/reverse_adoc +91 -0
  10. data/exe/w2a +72 -0
  11. data/lib/coradoc/document.rb +6 -6
  12. data/lib/coradoc/element/admonition.rb +8 -6
  13. data/lib/coradoc/element/attribute.rb +2 -2
  14. data/lib/coradoc/element/attribute_list.rb +94 -15
  15. data/lib/coradoc/element/audio.rb +14 -3
  16. data/lib/coradoc/element/author.rb +18 -14
  17. data/lib/coradoc/element/base.rb +69 -8
  18. data/lib/coradoc/element/block/core.rb +10 -6
  19. data/lib/coradoc/element/block/literal.rb +1 -1
  20. data/lib/coradoc/element/block/quote.rb +1 -1
  21. data/lib/coradoc/element/block/sourcecode.rb +2 -2
  22. data/lib/coradoc/element/break.rb +1 -1
  23. data/lib/coradoc/element/document_attributes.rb +6 -6
  24. data/lib/coradoc/element/header.rb +4 -2
  25. data/lib/coradoc/element/image/block_image.rb +13 -2
  26. data/lib/coradoc/element/image/core.rb +35 -5
  27. data/lib/coradoc/element/image/inline_image.rb +2 -2
  28. data/lib/coradoc/element/image.rb +0 -1
  29. data/lib/coradoc/element/inline/anchor.rb +4 -2
  30. data/lib/coradoc/element/inline/bold.rb +10 -4
  31. data/lib/coradoc/element/inline/cross_reference.rb +4 -2
  32. data/lib/coradoc/element/inline/hard_line_break.rb +1 -1
  33. data/lib/coradoc/element/inline/highlight.rb +12 -6
  34. data/lib/coradoc/element/inline/italic.rb +10 -4
  35. data/lib/coradoc/element/inline/link.rb +26 -10
  36. data/lib/coradoc/element/inline/monospace.rb +10 -4
  37. data/lib/coradoc/element/inline/quotation.rb +4 -1
  38. data/lib/coradoc/element/inline/subscript.rb +5 -2
  39. data/lib/coradoc/element/inline/superscript.rb +5 -2
  40. data/lib/coradoc/element/inline.rb +0 -1
  41. data/lib/coradoc/element/list/core.rb +10 -8
  42. data/lib/coradoc/element/list/definition.rb +19 -0
  43. data/lib/coradoc/element/list/ordered.rb +1 -1
  44. data/lib/coradoc/element/list/unordered.rb +1 -1
  45. data/lib/coradoc/element/list.rb +1 -1
  46. data/lib/coradoc/element/list_item.rb +9 -4
  47. data/lib/coradoc/element/list_item_definition.rb +32 -0
  48. data/lib/coradoc/element/paragraph.rb +5 -3
  49. data/lib/coradoc/element/revision.rb +20 -16
  50. data/lib/coradoc/element/section.rb +21 -4
  51. data/lib/coradoc/element/table.rb +36 -19
  52. data/lib/coradoc/element/text_element.rb +63 -17
  53. data/lib/coradoc/element/title.rb +27 -7
  54. data/lib/coradoc/element/video.rb +33 -6
  55. data/lib/coradoc/generator.rb +2 -2
  56. data/lib/coradoc/legacy_parser.rb +41 -41
  57. data/lib/coradoc/oscal.rb +2 -4
  58. data/lib/coradoc/parser/asciidoc/content.rb +15 -15
  59. data/lib/coradoc/parser/asciidoc/document_attributes.rb +1 -1
  60. data/lib/coradoc/parser/asciidoc/header.rb +6 -6
  61. data/lib/coradoc/parser/asciidoc/section.rb +1 -1
  62. data/lib/coradoc/reverse_adoc/LICENSE.txt +25 -0
  63. data/lib/coradoc/reverse_adoc/README.adoc +308 -0
  64. data/lib/coradoc/reverse_adoc/cleaner.rb +125 -0
  65. data/lib/coradoc/reverse_adoc/config.rb +73 -0
  66. data/lib/coradoc/reverse_adoc/converters/a.rb +47 -0
  67. data/lib/coradoc/reverse_adoc/converters/aside.rb +12 -0
  68. data/lib/coradoc/reverse_adoc/converters/audio.rb +25 -0
  69. data/lib/coradoc/reverse_adoc/converters/base.rb +104 -0
  70. data/lib/coradoc/reverse_adoc/converters/blockquote.rb +18 -0
  71. data/lib/coradoc/reverse_adoc/converters/br.rb +11 -0
  72. data/lib/coradoc/reverse_adoc/converters/bypass.rb +77 -0
  73. data/lib/coradoc/reverse_adoc/converters/code.rb +19 -0
  74. data/lib/coradoc/reverse_adoc/converters/div.rb +14 -0
  75. data/lib/coradoc/reverse_adoc/converters/dl.rb +55 -0
  76. data/lib/coradoc/reverse_adoc/converters/drop.rb +22 -0
  77. data/lib/coradoc/reverse_adoc/converters/em.rb +17 -0
  78. data/lib/coradoc/reverse_adoc/converters/figure.rb +21 -0
  79. data/lib/coradoc/reverse_adoc/converters/h.rb +38 -0
  80. data/lib/coradoc/reverse_adoc/converters/head.rb +19 -0
  81. data/lib/coradoc/reverse_adoc/converters/hr.rb +11 -0
  82. data/lib/coradoc/reverse_adoc/converters/ignore.rb +16 -0
  83. data/lib/coradoc/reverse_adoc/converters/img.rb +98 -0
  84. data/lib/coradoc/reverse_adoc/converters/li.rb +13 -0
  85. data/lib/coradoc/reverse_adoc/converters/mark.rb +15 -0
  86. data/lib/coradoc/reverse_adoc/converters/markup.rb +27 -0
  87. data/lib/coradoc/reverse_adoc/converters/math.rb +31 -0
  88. data/lib/coradoc/reverse_adoc/converters/ol.rb +60 -0
  89. data/lib/coradoc/reverse_adoc/converters/p.rb +19 -0
  90. data/lib/coradoc/reverse_adoc/converters/pass_through.rb +13 -0
  91. data/lib/coradoc/reverse_adoc/converters/pre.rb +51 -0
  92. data/lib/coradoc/reverse_adoc/converters/q.rb +12 -0
  93. data/lib/coradoc/reverse_adoc/converters/strong.rb +16 -0
  94. data/lib/coradoc/reverse_adoc/converters/sub.rb +18 -0
  95. data/lib/coradoc/reverse_adoc/converters/sup.rb +18 -0
  96. data/lib/coradoc/reverse_adoc/converters/table.rb +280 -0
  97. data/lib/coradoc/reverse_adoc/converters/td.rb +77 -0
  98. data/lib/coradoc/reverse_adoc/converters/text.rb +28 -0
  99. data/lib/coradoc/reverse_adoc/converters/th.rb +14 -0
  100. data/lib/coradoc/reverse_adoc/converters/tr.rb +18 -0
  101. data/lib/coradoc/reverse_adoc/converters/video.rb +25 -0
  102. data/lib/coradoc/reverse_adoc/converters.rb +53 -0
  103. data/lib/coradoc/reverse_adoc/errors.rb +10 -0
  104. data/lib/coradoc/reverse_adoc/html_converter.rb +150 -0
  105. data/lib/coradoc/reverse_adoc/plugin.rb +131 -0
  106. data/lib/coradoc/reverse_adoc/plugins/plateau.rb +174 -0
  107. data/lib/coradoc/reverse_adoc/postprocessor.rb +148 -0
  108. data/lib/coradoc/reverse_adoc.rb +30 -0
  109. data/lib/coradoc/transformer.rb +24 -14
  110. data/lib/coradoc/version.rb +1 -1
  111. data/lib/reverse_adoc.rb +20 -0
  112. metadata +184 -5
  113. data/lib/coradoc/element/inline/image.rb +0 -25
@@ -0,0 +1,32 @@
1
+ module Coradoc
2
+ module Element
3
+ class ListItemDefinition < Base
4
+ attr_accessor :id, :terms, :contents
5
+
6
+ declare_children :id, :terms, :contents
7
+
8
+ def initialize(terms, contents, options = {})
9
+ @terms = terms
10
+ @contents = contents
11
+ @id = options.fetch(:id, nil)
12
+ @anchor = @id.nil? ? nil : Inline::Anchor.new(@id)
13
+ end
14
+
15
+ def to_adoc(delimiter)
16
+ anchor = @anchor.nil? ? "" : @anchor.to_adoc.to_s
17
+ content = ""
18
+ if (@terms.is_a?(Array) && @terms.size == 1) || !@terms.is_a?(Array)
19
+ t = Coradoc::Generator.gen_adoc(@terms)
20
+ content << "#{anchor}#{t}#{delimiter} "
21
+ else
22
+ @terms.map do |term|
23
+ t = Coradoc::Generator.gen_adoc(term)
24
+ content << "#{t}#{delimiter}\n"
25
+ end
26
+ end
27
+ d = Coradoc::Generator.gen_adoc(@contents)
28
+ content << "#{d}\n"
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,7 +1,9 @@
1
1
  module Coradoc
2
2
  module Element
3
- class Paragraph
4
- attr_reader :content, :anchor, :tdsinglepara
3
+ class Paragraph < Base
4
+ attr_accessor :content, :anchor, :tdsinglepara
5
+
6
+ declare_children :content, :anchor
5
7
 
6
8
  def initialize(content, options = {})
7
9
  @content = content
@@ -22,7 +24,7 @@ module Coradoc
22
24
  def to_adoc
23
25
  anchor = @anchor.nil? ? "" : "#{@anchor.to_adoc}\n"
24
26
  if @tdsinglepara
25
- "#{anchor}" << Coradoc::Generator.gen_adoc(@content).strip
27
+ anchor.to_s << Coradoc::Generator.gen_adoc(@content).strip
26
28
  else
27
29
  "\n\n#{anchor}" << Coradoc::Generator.gen_adoc(@content).strip << "\n\n"
28
30
  end
@@ -1,22 +1,26 @@
1
1
  module Coradoc
2
- class Element::Revision
3
- attr_reader :number, :date, :remark
2
+ module Element
3
+ class Revision < Base
4
+ attr_accessor :number, :date, :remark
4
5
 
5
- def initialize(number, options = {})
6
- @number = number
7
- @date = options.fetch(:date, nil)
8
- @remark = options.fetch(:remark, nil)
9
- end
6
+ declare_children :number, :date, :remark
7
+
8
+ def initialize(number, options = {})
9
+ @number = number
10
+ @date = options.fetch(:date, nil)
11
+ @remark = options.fetch(:remark, nil)
12
+ end
10
13
 
11
- def to_adoc
12
- if @date.nil? && @remark.nil?
13
- "v#{@number}\n"
14
- elsif @remark.nil?
15
- "#{@number}, #{@date}\n"
16
- elsif @date.nil?
17
- "#{@number}: #{@remark}\n"
18
- else
19
- "#{@number}, #{@date}: #{@revision}\n"
14
+ def to_adoc
15
+ if @date.nil? && @remark.nil?
16
+ "v#{@number}\n"
17
+ elsif @remark.nil?
18
+ "#{@number}, #{@date}\n"
19
+ elsif @date.nil?
20
+ "#{@number}: #{@remark}\n"
21
+ else
22
+ "#{@number}, #{@date}: #{@revision}\n"
23
+ end
20
24
  end
21
25
  end
22
26
  end
@@ -1,11 +1,14 @@
1
1
  module Coradoc
2
2
  module Element
3
- class Section
4
- attr_reader :id, :title, :contents, :sections
3
+ class Section < Base
4
+ attr_accessor :id, :title, :contents, :sections
5
+
6
+ declare_children :id, :title, :contents, :sections
5
7
 
6
8
  def initialize(title, options = {})
7
9
  @title = title
8
10
  @id = options.fetch(:id, nil)
11
+ @id = nil if @id == ""
9
12
  @contents = options.fetch(:contents, [])
10
13
  @sections = options.fetch(:sections, [])
11
14
  @anchor = @id.nil? ? nil : Inline::Anchor.new(@id)
@@ -23,14 +26,28 @@ module Coradoc
23
26
 
24
27
  def to_adoc
25
28
  anchor = @anchor.nil? ? "" : "#{@anchor.to_adoc}\n"
29
+ title = Coradoc::Generator.gen_adoc(@title)
26
30
  content = Coradoc::Generator.gen_adoc(@contents)
27
- "\n#{anchor}" << content << "\n"
31
+ sections = Coradoc::Generator.gen_adoc(@sections)
32
+
33
+ # A block of " +\n"s isn't parsed correctly. It needs to start
34
+ # with something.
35
+ content = "&nbsp;#{content}" if content.start_with?(" +\n")
36
+
37
+ "\n#{anchor}" << title << content << sections << "\n"
38
+ end
39
+
40
+ # Check for cases when Section is simply an equivalent of an empty <DIV>
41
+ # HTML element and if it happens inside some other block element, can be
42
+ # safely collapsed.
43
+ def safe_to_collapse?
44
+ @title.nil? && @id.nil? && @sections.empty?
28
45
  end
29
46
 
30
47
  private
31
48
 
32
49
  def extract_glossaries
33
- contents.select { |c| c if c.is_a?(Coradoc::Element::Glossaries) }.first
50
+ contents.grep(Coradoc::Element::Glossaries).first
34
51
  end
35
52
  end
36
53
  end
@@ -1,17 +1,18 @@
1
1
  module Coradoc
2
2
  module Element
3
- class Table
4
- attr_reader :title, :rows, :content, :id
3
+ class Table < Base
4
+ attr_accessor :title, :rows, :content, :id
5
+
6
+ declare_children :title, :rows, :id
5
7
 
6
8
  def initialize(title, rows, options = {})
7
9
  @rows = rows
8
10
  @title = title
9
11
  @id = options.fetch(:id, nil)
10
12
  @anchor = @id.nil? ? nil : Inline::Anchor.new(@id)
11
- @attrs = options.fetch(:attrs, '')
13
+ @attrs = options.fetch(:attrs, "")
12
14
  end
13
15
 
14
-
15
16
  def to_adoc
16
17
  anchor = @anchor.nil? ? "" : "#{@anchor.to_adoc}\n"
17
18
  attrs = @attrs.to_s.empty? ? "" : "#{@attrs.to_adoc}\n"
@@ -21,45 +22,61 @@ module Coradoc
21
22
  "\n\n#{anchor}#{attrs}#{title}|===\n" << content << "\n|===\n"
22
23
  end
23
24
 
24
- class Row
25
- attr_reader :columns, :header
25
+ class Row < Base
26
+ attr_accessor :columns, :header
27
+
28
+ declare_children :columns
26
29
 
27
30
  def initialize(columns, header = false)
28
31
  @columns = columns
29
32
  @header = header
30
33
  end
31
-
34
+
32
35
  def table_header_row?
33
36
  @header
34
37
  end
35
38
 
39
+ def asciidoc?
40
+ @columns.any?(&:asciidoc?)
41
+ end
42
+
36
43
  def to_adoc
37
- content = Coradoc::Generator.gen_adoc(@columns).rstrip
44
+ delim = asciidoc? ? "\n" : " "
45
+ content = @columns.map { |col| Coradoc::Generator.gen_adoc(col) }.join(delim)
38
46
  result = "#{content}\n"
47
+ result << "\n" if asciidoc?
39
48
  table_header_row? ? result + underline_for : result
40
49
  end
41
50
 
42
51
  def underline_for
43
52
  "\n"
44
53
  end
45
-
46
54
  end
47
- class Cell
48
- attr_reader :anchor
55
+
56
+ class Cell < Base
57
+ attr_accessor :content, :anchor, :id, :colrowattr, :alignattr, :style
58
+
59
+ declare_children :content, :anchor, :id
60
+
49
61
  def initialize(options = {})
62
+ super()
50
63
  @id = options.fetch(:id, nil)
51
64
  @anchor = @id.nil? ? nil : Inline::Anchor.new(@id)
52
- @colrowattr = options.fetch(:colrowattr, '')
53
- @alignattr = options.fetch(:alignattr, '')
54
- @style = options.fetch(:style, '')
55
- @content = options.fetch(:content, '')
56
- @delim = options.fetch(:delim, '')
65
+ @colrowattr = options.fetch(:colrowattr, "")
66
+ @alignattr = options.fetch(:alignattr, "")
67
+ @style = options.fetch(:style, "")
68
+ @content = options.fetch(:content, "")
69
+ end
70
+
71
+ def asciidoc?
72
+ @style.include?("a")
57
73
  end
58
74
 
59
75
  def to_adoc
60
- anchor = @anchor.nil? ? "" : "#{@anchor.to_adoc}"
61
- content = Coradoc::Generator.gen_adoc(@content)
62
- "#{@colrowattr}#{@alignattr}#{@style}| #{anchor}#{content}#{@delim}"
76
+ anchor = @anchor.nil? ? "" : @anchor.to_adoc.to_s
77
+ content = simplify_block_content(@content)
78
+ content = Coradoc::Generator.gen_adoc(content)
79
+ "#{@colrowattr}#{@alignattr}#{@style}| #{anchor}#{content}"
63
80
  end
64
81
  end
65
82
  end
@@ -1,26 +1,72 @@
1
1
  module Coradoc
2
- class Element::TextElement
3
- attr_reader :id, :content, :line_break
2
+ module Element
3
+ class TextElement < Base
4
+ attr_accessor :id, :content, :line_break
4
5
 
5
- def initialize(content, options = {})
6
- @content = content#.to_s
7
- @id = options.fetch(:id, nil)
8
- @line_break = options.fetch(:line_break, "")
9
- end
10
-
11
- def to_adoc
12
- Coradoc::Generator.gen_adoc(@content)
6
+ declare_children :content
7
+
8
+ def initialize(content, options = {})
9
+ @content = content # .to_s
10
+ @id = options.fetch(:id, nil)
11
+ @line_break = options.fetch(:line_break, "")
12
+ end
13
+
14
+ def to_adoc
15
+ Coradoc::Generator.gen_adoc(treat_text_to_adoc(@content))
16
+ end
17
+
18
+ def treat_text_to_adoc(text)
19
+ text = preserve_nbsp(text)
20
+ text = remove_border_newlines(text)
21
+ text = remove_inner_newlines(text)
22
+ text = self.class.escape_keychars(text)
23
+
24
+ text = preserve_keychars_within_backticks(text)
25
+ escape_links(text)
26
+ end
27
+
28
+ def preserve_nbsp(text)
29
+ text.gsub(/\u00A0/, "&nbsp;")
30
+ end
31
+
32
+ def escape_links(text)
33
+ text.gsub(/<<([^ ][^>]*)>>/, "\\<<\\1>>")
34
+ end
35
+
36
+ def remove_border_newlines(text)
37
+ text.gsub(/\A\n+/, "").gsub(/\n+\z/, "")
38
+ end
39
+
40
+ def remove_inner_newlines(text)
41
+ text.tr("\n\t", " ").squeeze(" ")
42
+ end
43
+
44
+ def preserve_keychars_within_backticks(text)
45
+ text.gsub(/`.*?`/) do |match|
46
+ match.gsub('\_', "_").gsub('\*', "*")
47
+ end
48
+ end
49
+
50
+ def self.escape_keychars(string)
51
+ subs = { "*" => '\*', "_" => '\_' }
52
+ string
53
+ .gsub(/((?<=\s)[\*_]+)|[\*_]+(?=\s)/) do |n|
54
+ n.chars.map do |char|
55
+ subs[char]
56
+ end.join
57
+ end
58
+ end
13
59
  end
14
- end
15
60
 
16
- class Element::LineBreak
17
- attr_reader :line_break
61
+ class LineBreak < Base
62
+ attr_reader :line_break
18
63
 
19
- def initialize(line_break)
20
- @line_break = line_break
64
+ def initialize(line_break)
65
+ @line_break = line_break
66
+ end
21
67
  end
22
- end
23
68
 
24
- class Element::Highlight < Element::TextElement
69
+ class Highlight < Element::TextElement
70
+ end
25
71
  end
26
72
  end
@@ -1,7 +1,9 @@
1
1
  module Coradoc
2
2
  module Element
3
- class Title
4
- attr_reader :id, :content, :line_break
3
+ class Title < Base
4
+ attr_accessor :id, :content, :line_break, :style, :level_int
5
+
6
+ declare_children :id, :content
5
7
 
6
8
  def initialize(content, level, options = {})
7
9
  @level_int = level
@@ -10,30 +12,48 @@ module Coradoc
10
12
  @id = options.fetch(:id, nil)
11
13
  @anchor = @id.nil? ? nil : Inline::Anchor.new(@id)
12
14
  @line_break = options.fetch(:line_break, "")
15
+ @style = options.fetch(:style, nil)
13
16
  end
14
17
 
15
18
  def level
16
- @level_str ||= level_from_string
19
+ @level ||= level_from_string
17
20
  end
18
21
 
19
22
  def to_adoc
20
23
  anchor = @anchor.nil? ? "" : "#{@anchor.to_adoc}\n"
21
24
  content = Coradoc::Generator.gen_adoc(@content)
22
- level_str = "=" * (@level_int + 1)
23
- content = ["\n", anchor, level_str, ' ', content, "\n"].join("")
25
+ <<~HERE
26
+
27
+ #{anchor}#{style_str}#{level_str} #{content}
28
+ HERE
29
+ end
30
+
31
+ def level_str
32
+ if @level_int <= 5
33
+ "=" * (@level_int + 1)
34
+ else
35
+ "======"
36
+ end
37
+ end
38
+
39
+ def style_str
40
+ style = [@style]
41
+ style << "level=#{@level_int}" if @level_int > 5
42
+ style = style.compact.join(",")
43
+
44
+ "[#{style}]\n" unless style.empty?
24
45
  end
25
46
 
26
47
  alias :text :content
27
48
 
28
49
  private
29
50
 
30
- attr_reader :level_str
31
-
32
51
  def level_from_string
33
52
  case @level_int
34
53
  when 2 then :heading_two
35
54
  when 3 then :heading_three
36
55
  when 4 then :heading_four
56
+ when 5 then :heading_five
37
57
  else :unknown
38
58
  end
39
59
  end
@@ -1,23 +1,50 @@
1
1
  module Coradoc
2
2
  module Element
3
- class Video
4
- attr_reader :id, :title, :src, :options
3
+ class Video < Base
4
+ attr_accessor :id, :title, :src, :options
5
+
6
+ declare_children :id, :anchor, :attributes
5
7
 
6
8
  def initialize(title, options = {})
7
9
  @title = title
8
10
  @id = options.fetch(:id, nil)
9
11
  @anchor = @id.nil? ? nil : Inline::Anchor.new(@id)
10
- @src = options.fetch(:src, '')
11
- @attributes = options.fetch(:attributes, [])
12
- # @attributes.add_valid_named('opts')
12
+ @src = options.fetch(:src, "")
13
+ @attributes = options.fetch(:attributes, AttributeList.new)
14
+ if @attributes.any?
15
+ @attributes.validate_positional(VALIDATORS_POSITIONAL)
16
+ @attributes.validate_named(VALIDATORS_NAMED)
17
+ end
13
18
  end
14
19
 
15
20
  def to_adoc
16
21
  anchor = @anchor.nil? ? "" : "#{@anchor.to_adoc}\n"
17
22
  title = ".#{@title}\n" unless @title.empty?
18
- attrs = @attributes.empty? ? "\[\]" : @attributes.to_adoc
23
+ attrs = @attributes.to_adoc
19
24
  [anchor, title, "video::", @src, attrs].join("")
20
25
  end
26
+
27
+ extend AttributeList::Matchers
28
+ VALIDATORS_POSITIONAL = [
29
+ [:alt, String],
30
+ [:width, Integer],
31
+ [:height, Integer],
32
+ ]
33
+
34
+ VALIDATORS_NAMED = {
35
+ title: String,
36
+ poster: String,
37
+ width: Integer,
38
+ height: Integer,
39
+ start: Integer,
40
+ end: Integer,
41
+ theme: one("dark", "light"),
42
+ lang: /[a-z]{2,3}(?:-[A-Z]{2})?/,
43
+ list: String,
44
+ playlist: String,
45
+ options: many("autoplay", "loop", "modest",
46
+ "nocontrols", "nofullscreen", "muted"),
47
+ }
21
48
  end
22
49
  end
23
50
  end
@@ -4,13 +4,13 @@ module Coradoc
4
4
  if content.is_a?(Array)
5
5
  content.map do |elem|
6
6
  Coradoc::Generator.gen_adoc(elem)
7
- end.join('')
7
+ end.join("")
8
8
  elsif content.respond_to? :to_adoc
9
9
  content.to_adoc
10
10
  elsif content.is_a?(String)
11
11
  content
12
12
  elsif content.nil?
13
- ''
13
+ ""
14
14
  end
15
15
  end
16
16
  end
@@ -23,8 +23,8 @@ module Coradoc
23
23
 
24
24
  rule(:text_line) do
25
25
  special_character.absent? >>
26
- match("[^\n]").repeat(1).as(:text) >>
27
- line_ending.as(:break)
26
+ match("[^\n]").repeat(1).as(:text) >>
27
+ line_ending.as(:break)
28
28
  end
29
29
 
30
30
  # Common Helpers
@@ -33,52 +33,52 @@ module Coradoc
33
33
 
34
34
  # Document
35
35
  rule(:document) do
36
- (
37
- document_attributes.repeat(1).as(:document_attributes) |
38
- section.as(:section) |
39
- header.as(:header) |
40
- block_with_title.as(:block) |
41
- empty_line.repeat(1) |
42
- any.as(:unparsed)
43
- ).repeat(1).as(:document)
36
+ (
37
+ document_attributes.repeat(1).as(:document_attributes) |
38
+ section.as(:section) |
39
+ header.as(:header) |
40
+ block_with_title.as(:block) |
41
+ empty_line.repeat(1) |
42
+ any.as(:unparsed)
43
+ ).repeat(1).as(:document)
44
44
  end
45
45
 
46
46
  # Header
47
47
  rule(:header) do
48
48
  match("=") >> space? >> text.as(:title) >> newline >>
49
- author.maybe.as(:author) >> revision.maybe.as(:revision)
49
+ author.maybe.as(:author) >> revision.maybe.as(:revision)
50
50
  end
51
51
 
52
52
  rule(:author) do
53
53
  words.as(:first_name) >> str(",") >> space? >> words.as(:last_name) >>
54
- space? >> str("<") >> email.as(:email) >> str(">") >> endline
54
+ space? >> str("<") >> email.as(:email) >> str(">") >> endline
55
55
  end
56
56
 
57
57
  rule(:revision) do
58
58
  (word >> (str(".") >> word).maybe).as(:number) >>
59
- str(",") >> space? >> word.as(:date) >>
60
- str(":") >> space? >> words.as(:remark) >> newline
59
+ str(",") >> space? >> word.as(:date) >>
60
+ str(":") >> space? >> words.as(:remark) >> newline
61
61
  end
62
62
 
63
63
  # DocumentAttributes
64
64
  rule(:document_attributes) do
65
65
  str(":") >> attribute_name.as(:key) >> str(":") >>
66
- space? >> attribute_value.as(:value) >> endline
66
+ space? >> attribute_value.as(:value) >> endline
67
67
  end
68
68
 
69
69
  # Section
70
70
  rule(:section) do
71
71
  heading.as(:title) >>
72
- (list.as(:list) |
73
- blocks.as(:blocks) |
74
- paragraphs.as(:paragraphs)).maybe
72
+ (list.as(:list) |
73
+ blocks.as(:blocks) |
74
+ paragraphs.as(:paragraphs)).maybe
75
75
  end
76
76
 
77
77
  # Heading
78
78
  rule(:heading) do
79
79
  (anchor_name >> newline).maybe >>
80
- match("=").repeat(2, 8).as(:level) >>
81
- space? >> text.as(:text) >> endline.as(:break)
80
+ match("=").repeat(2, 8).as(:level) >>
81
+ space? >> text.as(:text) >> endline.as(:break)
82
82
  end
83
83
 
84
84
  rule(:anchor_name) { str("[#") >> keyword.as(:name) >> str("]") }
@@ -110,51 +110,51 @@ module Coradoc
110
110
  rule(:block_type) { str("[") >> keyword.as(:type) >> str("]") >> newline }
111
111
 
112
112
  rule(:block_attribute) do
113
- str("[") >> keyword.as(:key) >>
114
- str("=") >> keyword.as(:value) >> str("]")
113
+ str("[") >> keyword.as(:key) >>
114
+ str("=") >> keyword.as(:value) >> str("]")
115
115
  end
116
116
 
117
117
  rule(:simple_block) do
118
118
  block_attribute.as(:attributes) >> newline >>
119
- text_line.repeat(1).as(:lines)
119
+ text_line.repeat(1).as(:lines)
120
120
  end
121
121
 
122
122
  rule(:open_block) do
123
123
  block_title >>
124
- block_type >>
125
- str("--").as(:delimiter) >> newline >>
126
- text_line.repeat.as(:lines) >>
127
- str("--") >> line_ending
124
+ block_type >>
125
+ str("--").as(:delimiter) >> newline >>
126
+ text_line.repeat.as(:lines) >>
127
+ str("--") >> line_ending
128
128
  end
129
129
 
130
130
  rule(:example_block) do
131
131
  block_title >>
132
- block_type >>
133
- str("====").as(:delimiter) >> newline >>
134
- text_line.repeat(1).as(:lines) >>
135
- str("====") >> newline
132
+ block_type >>
133
+ str("====").as(:delimiter) >> newline >>
134
+ text_line.repeat(1).as(:lines) >>
135
+ str("====") >> newline
136
136
  end
137
137
 
138
138
  rule(:sidebar_block) do
139
139
  block_title >>
140
- block_type.maybe >>
141
- str("****").as(:delimiter) >> newline >>
142
- text_line.repeat(1).as(:lines) >>
143
- str("****") >> newline
140
+ block_type.maybe >>
141
+ str("****").as(:delimiter) >> newline >>
142
+ text_line.repeat(1).as(:lines) >>
143
+ str("****") >> newline
144
144
  end
145
145
 
146
146
  rule(:source_block) do
147
147
  block_title >>
148
- str("----").as(:delimiter) >> newline >>
149
- text_line.repeat(1).as(:lines) >>
150
- str("----") >> newline
148
+ str("----").as(:delimiter) >> newline >>
149
+ text_line.repeat(1).as(:lines) >>
150
+ str("----") >> newline
151
151
  end
152
152
 
153
153
  rule(:quote_block) do
154
154
  block_title >>
155
- str("____").as(:delimiter) >> newline >>
156
- text_line.repeat.as(:lines) >>
157
- str("____") >> newline
155
+ str("____").as(:delimiter) >> newline >>
156
+ text_line.repeat.as(:lines) >>
157
+ str("____") >> newline
158
158
  end
159
159
 
160
160
  rule(:block_with_title) do
data/lib/coradoc/oscal.rb CHANGED
@@ -15,7 +15,7 @@ module Coradoc
15
15
  def to_oscal
16
16
  {
17
17
  "metadata" => _doc.document_attributes.to_hash,
18
- "groups" => sections_as_groups
18
+ "groups" => sections_as_groups,
19
19
  }
20
20
  end
21
21
 
@@ -80,9 +80,7 @@ module Coradoc
80
80
  end
81
81
 
82
82
  def build_oscal_prose(paragraph)
83
- if paragraph
84
- paragraph.texts.join(" ")
85
- end
83
+ paragraph&.texts&.join(" ")
86
84
  end
87
85
  end
88
86
  end