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,32 @@
1
+ module Coradoc
2
+ module Element
3
+ class TextElement
4
+ attr_reader :id, :content, :line_break
5
+
6
+ def initialize(content, options = {})
7
+ @content = content # .to_s
8
+ @id = options.fetch(:id, nil)
9
+ @line_break = options.fetch(:line_break, "")
10
+ end
11
+
12
+ def to_adoc
13
+ Coradoc::Generator.gen_adoc(@content)
14
+ end
15
+ end
16
+ end
17
+
18
+ module Element
19
+ class LineBreak
20
+ attr_reader :line_break
21
+
22
+ def initialize(line_break)
23
+ @line_break = line_break
24
+ end
25
+ end
26
+ end
27
+
28
+ module Element
29
+ class Highlight < Element::TextElement
30
+ end
31
+ end
32
+ end
@@ -1,12 +1,14 @@
1
1
  module Coradoc
2
- module Document
2
+ module Element
3
3
  class Title
4
4
  attr_reader :id, :content, :line_break
5
5
 
6
6
  def initialize(content, level, options = {})
7
- @level_str = level
8
- @content = content.to_s
9
- @id = options.fetch(:id, nil).to_s
7
+ @level_int = level
8
+ @level_int = level.length if level.is_a?(String)
9
+ @content = content
10
+ @id = options.fetch(:id, nil)
11
+ @anchor = @id.nil? ? nil : Inline::Anchor.new(@id)
10
12
  @line_break = options.fetch(:line_break, "")
11
13
  end
12
14
 
@@ -14,6 +16,13 @@ module Coradoc
14
16
  @level ||= level_from_string
15
17
  end
16
18
 
19
+ def to_adoc
20
+ anchor = @anchor.nil? ? "" : "#{@anchor.to_adoc}\n"
21
+ content = Coradoc::Generator.gen_adoc(@content)
22
+ level_str = "=" * (@level_int + 1)
23
+ ["\n", anchor, level_str, " ", content, "\n"].join("")
24
+ end
25
+
17
26
  alias :text :content
18
27
 
19
28
  private
@@ -21,7 +30,7 @@ module Coradoc
21
30
  attr_reader :level_str
22
31
 
23
32
  def level_from_string
24
- case @level_str.length
33
+ case @level_int
25
34
  when 2 then :heading_two
26
35
  when 3 then :heading_three
27
36
  when 4 then :heading_four
@@ -0,0 +1,23 @@
1
+ module Coradoc
2
+ module Element
3
+ class Video
4
+ attr_reader :id, :title, :src, :options
5
+
6
+ def initialize(title, options = {})
7
+ @title = title
8
+ @id = options.fetch(:id, nil)
9
+ @anchor = @id.nil? ? nil : Inline::Anchor.new(@id)
10
+ @src = options.fetch(:src, "")
11
+ @attributes = options.fetch(:attributes, [])
12
+ # @attributes.add_valid_named('opts')
13
+ end
14
+
15
+ def to_adoc
16
+ anchor = @anchor.nil? ? "" : "#{@anchor.to_adoc}\n"
17
+ title = ".#{@title}\n" unless @title.empty?
18
+ attrs = @attributes.empty? ? "\[\]" : @attributes.to_adoc
19
+ [anchor, title, "video::", @src, attrs].join("")
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ module Coradoc
2
+ class Generator
3
+ def self.gen_adoc(content)
4
+ if content.is_a?(Array)
5
+ content.map do |elem|
6
+ Coradoc::Generator.gen_adoc(elem)
7
+ end.join("")
8
+ elsif content.respond_to? :to_adoc
9
+ content.to_adoc
10
+ elsif content.is_a?(String)
11
+ content
12
+ elsif content.nil?
13
+ ""
14
+ end
15
+ end
16
+ end
17
+ 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,67 +33,67 @@ module Coradoc
33
33
 
34
34
  # Document
35
35
  rule(:document) do
36
- (
37
- bibdata.repeat(1).as(:bibdata) |
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
- # Bibdata
64
- rule(:bibdata) do
63
+ # DocumentAttributes
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("]") }
85
85
 
86
86
  # List
87
87
  rule(:list) do
88
- unnumbered_list.as(:unnumbered) |
89
- definition_list.as(:definition) | numbered_list.as(:numbered)
88
+ unordered_list.as(:unordered) |
89
+ definition_list.as(:definition) | ordered_list.as(:ordered)
90
90
  end
91
91
 
92
- rule(:numbered_list) { nlist_item.repeat(1) }
93
- rule(:unnumbered_list) { ulist_item.repeat(1) }
92
+ rule(:ordered_list) { olist_item.repeat(1) }
93
+ rule(:unordered_list) { ulist_item.repeat(1) }
94
94
  rule(:definition_list) { dlist_item.repeat(1) }
95
95
 
96
- rule(:nlist_item) { match("\.") >> space >> text_line }
96
+ rule(:olist_item) { match("\.") >> space >> text_line }
97
97
  rule(:ulist_item) { match("\\*") >> space >> text_line }
98
98
  rule(:dlist_item) do
99
99
  str("term") >> space >> digits >> str("::") >> space >> text_line
@@ -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
@@ -13,7 +13,10 @@ module Coradoc
13
13
  end
14
14
 
15
15
  def to_oscal
16
- {"metadata" => _doc.bibdata.to_hash, "groups" => sections_as_groups}
16
+ {
17
+ "metadata" => _doc.document_attributes.to_hash,
18
+ "groups" => sections_as_groups,
19
+ }
17
20
  end
18
21
 
19
22
  private
@@ -55,7 +58,7 @@ module Coradoc
55
58
  def build_oscal_sub_parts(contents)
56
59
  if contents.length > 1
57
60
  parts = contents.select do |content|
58
- content if content.is_a?(Coradoc::Document::Paragraph)
61
+ content if content.is_a?(Coradoc::Element::Paragraph)
59
62
  end
60
63
 
61
64
  parts.map do |part|
@@ -77,9 +80,7 @@ module Coradoc
77
80
  end
78
81
 
79
82
  def build_oscal_prose(paragraph)
80
- if paragraph
81
- paragraph.texts.join(" ")
82
- end
83
+ paragraph&.texts&.join(" ")
83
84
  end
84
85
  end
85
86
  end
@@ -26,31 +26,18 @@ module Coradoc
26
26
  match["\r\n"].repeat(1)
27
27
  end
28
28
 
29
- # def line_break
30
- # match["\r\n"]
31
- # end
32
-
33
29
  def keyword
34
30
  (match("[a-zA-Z0-9_-]") | str(".")).repeat(1)
35
31
  end
36
32
 
37
- # def text_line
38
- # special_character.absent? >>
39
- # match("[^\n]").repeat(1).as(:text) >>
40
- # line_ending.as(:break)
41
- # end
42
-
43
- # rule(:space) { match('\s') }
44
- # rule(:space?) { spaces.maybe }
45
- # rule(:spaces) { space.repeat(1) }
46
33
  def empty_line
47
34
  match("^\n")
48
35
  end
49
- #
50
36
 
51
- #
52
- # rule(:inline_element) { text }
53
- # rule(:text) { match("[^\n]").repeat(1) }
37
+ def digit
38
+ match("[0-9]")
39
+ end
40
+
54
41
  def digits
55
42
  match("[0-9]").repeat(1)
56
43
  end
@@ -63,6 +50,14 @@ module Coradoc
63
50
  word >> (space? >> word).repeat
64
51
  end
65
52
 
53
+ def rich_texts
54
+ rich_text >> (space? >> rich_text).repeat
55
+ end
56
+
57
+ def rich_text
58
+ (match("[a-zA-Z0-9_-]") | str(".") | str("*") | match("@")).repeat(1)
59
+ end
60
+
66
61
  def email
67
62
  word >> str("@") >> word >> str(".") >> word
68
63
  end
@@ -78,6 +73,11 @@ module Coradoc
78
73
  def special_character
79
74
  match("^[*_:=-]") | str("[#") | str("[[")
80
75
  end
76
+
77
+ def date
78
+ digit.repeat(2, 4) >> str("-") >>
79
+ digit.repeat(1, 2) >> str("-") >> digit.repeat(1, 2)
80
+ end
81
81
  end
82
82
  end
83
83
  end
@@ -5,7 +5,8 @@ module Coradoc
5
5
  include Coradoc::Parser::Asciidoc::Base
6
6
 
7
7
  def paragraph
8
- text_line.repeat(1)
8
+ paragraph_meta.as(:meta).maybe >>
9
+ text_line.repeat(1).as(:lines)
9
10
  end
10
11
 
11
12
  def glossaries
@@ -14,13 +15,13 @@ module Coradoc
14
15
 
15
16
  # List
16
17
  def list
17
- unnumbered_list.as(:unnumbered) |
18
- definition_list.as(:definition) | numbered_list.as(:numbered)
18
+ unordered_list.as(:unordered) |
19
+ definition_list.as(:definition) | ordered_list.as(:ordered)
19
20
  end
20
21
 
21
22
  def contents
22
23
  (
23
- example_block.as(:example) |
24
+ block.as(:block) |
24
25
  list.as(:list) |
25
26
  table.as(:table) |
26
27
  highlight.as(:highlight) |
@@ -29,18 +30,42 @@ module Coradoc
29
30
  ).repeat(1)
30
31
  end
31
32
 
33
+ def block
34
+ sidebar_block | example_block | source_block | quote_block
35
+ end
36
+
37
+ def source_block
38
+ block_style("-", 2)
39
+ end
40
+
41
+ def quote_block
42
+ block_style("_")
43
+ end
44
+
45
+ def sidebar_block
46
+ block_style("*")
47
+ end
48
+
32
49
  def example_block
33
- str("[example]") >> newline >>
34
- str("=").repeat(4).capture(:delimiter) >> newline >>
35
- dynamic do |source, context|
36
- (str(context.captures[:delimiter]).absent? >> text.as(:text) >> endline).repeat(1) >>
37
- str(context.captures[:delimiter]) >> endline
38
- end
50
+ block_style("=")
51
+ end
52
+
53
+ def block_style(delimiter = "*", repeater = 4)
54
+ block_title.maybe >>
55
+ newline.maybe >>
56
+ block_type.maybe >>
57
+ str(delimiter).repeat(repeater).as(:delimiter) >> newline >>
58
+ text_line.repeat(1).as(:lines) >>
59
+ str(delimiter).repeat(repeater) >> newline
60
+ end
61
+
62
+ def block_type
63
+ str("[") >> keyword.as(:type) >> str("]") >> newline
39
64
  end
40
65
 
41
66
  def highlight
42
67
  text_id >> newline >>
43
- underline >> highlight_text >> newline
68
+ underline >> highlight_text >> newline
44
69
  end
45
70
 
46
71
  def underline
@@ -54,19 +79,14 @@ module Coradoc
54
79
  # Table
55
80
  def table
56
81
  block_title >>
57
- str("|===") >> line_ending >>
58
- table_row.repeat(1).as(:rows) >>
59
- str("|===") >> line_ending
82
+ str("|===") >> line_ending >>
83
+ table_row.repeat(1).as(:rows) >>
84
+ str("|===") >> line_ending
60
85
  end
61
86
 
62
87
  def table_row
63
- (literal_space? >> str("|") >> (cell_content | empty_cell_content)).
64
- repeat(1).as(:cols) >> line_ending
65
- end
66
-
67
- # Extended
68
- def word
69
- (match("[a-zA-Z0-9_-]") | str(".") | str("*") | match("@")).repeat(1)
88
+ (literal_space? >> str("|") >> (cell_content | empty_cell_content))
89
+ .repeat(1).as(:cols) >> line_ending
70
90
  end
71
91
 
72
92
  def empty_cell_content
@@ -74,11 +94,11 @@ module Coradoc
74
94
  end
75
95
 
76
96
  def cell_content
77
- str("|").absent? >> literal_space? >> words.as(:text)
97
+ str("|").absent? >> literal_space? >> rich_texts.as(:text)
78
98
  end
79
99
 
80
100
  def literal_space
81
- (match[' '] | match[' \t']).repeat(1)
101
+ (match[" "] | match[' \t']).repeat(1)
82
102
  end
83
103
 
84
104
  # Override
@@ -93,7 +113,7 @@ module Coradoc
93
113
  # Text
94
114
  def text_line
95
115
  (asciidoc_char_with_id.absent? | text_id) >> literal_space? >>
96
- text.as(:text) >> line_ending.as(:break)
116
+ text.as(:text) >> line_ending.as(:break)
97
117
  end
98
118
 
99
119
  def asciidoc_char
@@ -109,16 +129,22 @@ module Coradoc
109
129
  str("[#") >> keyword.as(:id) >> str("]")
110
130
  end
111
131
 
132
+ def paragraph_meta
133
+ str("[") >>
134
+ keyword.as(:key) >> str("=") >>
135
+ word.as(:value) >> str("]") >> newline
136
+ end
137
+
112
138
  def glossary
113
139
  keyword.as(:key) >> str("::") >> space? >>
114
- text.as(:value) >> line_ending.as(:break)
140
+ text.as(:value) >> line_ending.as(:break)
115
141
  end
116
142
 
117
- def numbered_list
118
- nlist_item.repeat(1)
143
+ def ordered_list
144
+ olist_item.repeat(1)
119
145
  end
120
146
 
121
- def unnumbered_list
147
+ def unordered_list
122
148
  (ulist_item >> newline.maybe).repeat(1)
123
149
  end
124
150
 
@@ -126,7 +152,7 @@ module Coradoc
126
152
  dlist_item.repeat(1)
127
153
  end
128
154
 
129
- def nlist_item
155
+ def olist_item
130
156
  match("\.") >> space >> text_line
131
157
  end
132
158
 
@@ -0,0 +1,19 @@
1
+ module Coradoc
2
+ module Parser
3
+ module Asciidoc
4
+ module DocumentAttributes
5
+ include Coradoc::Parser::Asciidoc::Base
6
+
7
+ # DocumentAttributes
8
+ def document_attributess
9
+ document_attributes.repeat(1)
10
+ end
11
+
12
+ def document_attributes
13
+ str(":") >> attribute_name.as(:key) >> str(":") >>
14
+ space? >> attribute_value.as(:value) >> line_ending
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,4 +1,4 @@
1
- require "coradoc/parser/asciidoc/base"
1
+ require_relative "base"
2
2
 
3
3
  module Coradoc
4
4
  module Parser
@@ -6,23 +6,26 @@ module Coradoc
6
6
  module Header
7
7
  include Coradoc::Parser::Asciidoc::Base
8
8
 
9
- # Header
10
9
  def header
11
- match("=") >> space? >> text.as(:title) >> newline >>
12
- author.maybe.as(:author) >> revision.maybe.as(:revision)
10
+ header_title >>
11
+ author.maybe.as(:author) >>
12
+ revision.maybe.as(:revision) >> newline.maybe
13
+ end
14
+
15
+ def header_title
16
+ match("=") >> space? >> text.as(:title) >> newline
13
17
  end
14
18
 
15
- # Author
16
19
  def author
17
- words.as(:first_name) >> str(",") >> space? >> words.as(:last_name) >>
18
- space? >> str("<") >> email.as(:email) >> str(">") >> endline
20
+ words.as(:first_name) >> str(",") >>
21
+ space? >> words.as(:last_name) >>
22
+ space? >> str("<") >> email.as(:email) >> str(">") >> newline
19
23
  end
20
24
 
21
- # Revision
22
25
  def revision
23
26
  (word >> (str(".") >> word).maybe).as(:number) >>
24
- str(",") >> space? >> word.as(:date) >>
25
- str(":") >> space? >> words.as(:remark) >> newline
27
+ str(",") >> space? >> date.as(:date) >> str(":") >>
28
+ space? >> words.as(:remark) >> newline
26
29
  end
27
30
  end
28
31
  end
@@ -1,5 +1,5 @@
1
- require "coradoc/parser/asciidoc/base"
2
- require "coradoc/parser/asciidoc/content"
1
+ require_relative "base"
2
+ require_relative "content"
3
3
 
4
4
  module Coradoc
5
5
  module Parser
@@ -10,20 +10,20 @@ module Coradoc
10
10
 
11
11
  def section_block(level = 2)
12
12
  section_id.maybe >>
13
- section_title(level).as(:title) >>
14
- contents.as(:contents).maybe
13
+ section_title(level).as(:title) >>
14
+ contents.as(:contents).maybe
15
15
  end
16
16
 
17
17
  # Section id
18
18
  def section_id
19
19
  (str("[[") >> keyword.as(:id) >> str("]]") |
20
- str("[#") >> keyword.as(:id) >> str("]")) >> newline
20
+ str("[#") >> keyword.as(:id) >> str("]")) >> newline
21
21
  end
22
22
 
23
23
  # Heading
24
24
  def section_title(level = 2, max_level = 8)
25
25
  match("=").repeat(level, max_level).as(:level) >>
26
- space? >> text.as(:text) >> endline.as(:break)
26
+ space? >> text.as(:text) >> endline.as(:break)
27
27
  end
28
28
 
29
29
  # section
@@ -1,21 +1,21 @@
1
1
  require "parslet"
2
2
  require "parslet/convenience"
3
3
 
4
- require "coradoc/parser/asciidoc/header"
5
- require "coradoc/parser/asciidoc/bibdata"
6
- require "coradoc/parser/asciidoc/section"
4
+ require_relative "asciidoc/header"
5
+ require_relative "asciidoc/document_attributes"
6
+ require_relative "asciidoc/section"
7
7
 
8
8
  module Coradoc
9
9
  module Parser
10
10
  class Base < Parslet::Parser
11
11
  include Coradoc::Parser::Asciidoc::Header
12
- include Coradoc::Parser::Asciidoc::Bibdata
12
+ include Coradoc::Parser::Asciidoc::DocumentAttributes
13
13
  include Coradoc::Parser::Asciidoc::Section
14
14
 
15
15
  root :document
16
16
  rule(:document) do
17
17
  (
18
- bibdatas.as(:bibdata) |
18
+ document_attributess.as(:document_attributes) |
19
19
  section.as(:section) |
20
20
  header.as(:header) |
21
21
  empty_line.as(:line_break) |
@@ -1,4 +1,4 @@
1
- require "coradoc/parser/base"
1
+ require_relative "parser/base"
2
2
 
3
3
  module Coradoc
4
4
  module Parser