coradoc 1.1.8 → 2.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of coradoc might be problematic. Click here for more details.

Files changed (225) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -1
  3. data/Rakefile +3 -12
  4. data/exe/coradoc +21 -2
  5. data/lib/coradoc/cli.rb +185 -91
  6. data/lib/coradoc/configurable.rb +527 -0
  7. data/lib/coradoc/coradoc.rb +463 -0
  8. data/lib/coradoc/core_model/annotation_block.rb +57 -0
  9. data/lib/coradoc/core_model/base.rb +172 -0
  10. data/lib/coradoc/core_model/bibliography.rb +41 -0
  11. data/lib/coradoc/core_model/bibliography_entry.rb +48 -0
  12. data/lib/coradoc/core_model/block.rb +63 -0
  13. data/lib/coradoc/core_model/children_content.rb +53 -0
  14. data/lib/coradoc/core_model/comment_block.rb +10 -0
  15. data/lib/coradoc/core_model/definition_item.rb +46 -0
  16. data/lib/coradoc/core_model/definition_list.rb +28 -0
  17. data/lib/coradoc/core_model/element_attribute.rb +26 -0
  18. data/lib/coradoc/core_model/example_block.rb +10 -0
  19. data/lib/coradoc/core_model/footnote.rb +92 -0
  20. data/lib/coradoc/core_model/horizontal_rule_block.rb +10 -0
  21. data/lib/coradoc/core_model/id_generator.rb +16 -0
  22. data/lib/coradoc/core_model/image.rb +66 -0
  23. data/lib/coradoc/core_model/inline_element.rb +140 -0
  24. data/lib/coradoc/core_model/list_block.rb +135 -0
  25. data/lib/coradoc/core_model/list_item.rb +142 -0
  26. data/lib/coradoc/core_model/listing_block.rb +13 -0
  27. data/lib/coradoc/core_model/literal_block.rb +10 -0
  28. data/lib/coradoc/core_model/metadata.rb +79 -0
  29. data/lib/coradoc/core_model/open_block.rb +10 -0
  30. data/lib/coradoc/core_model/paragraph_block.rb +10 -0
  31. data/lib/coradoc/core_model/pass_block.rb +10 -0
  32. data/lib/coradoc/core_model/quote_block.rb +12 -0
  33. data/lib/coradoc/core_model/reviewer_block.rb +10 -0
  34. data/lib/coradoc/core_model/sidebar_block.rb +10 -0
  35. data/lib/coradoc/core_model/source_block.rb +10 -0
  36. data/lib/coradoc/core_model/structural_element.rb +94 -0
  37. data/lib/coradoc/core_model/table.rb +148 -0
  38. data/lib/coradoc/core_model/term.rb +53 -0
  39. data/lib/coradoc/core_model/text_content.rb +22 -0
  40. data/lib/coradoc/core_model/toc.rb +105 -0
  41. data/lib/coradoc/core_model/toc_generator.rb +151 -0
  42. data/lib/coradoc/core_model/verse_block.rb +12 -0
  43. data/lib/coradoc/core_model.rb +77 -0
  44. data/lib/coradoc/document_builder.rb +184 -0
  45. data/lib/coradoc/document_manipulator.rb +203 -0
  46. data/lib/coradoc/errors.rb +312 -0
  47. data/lib/coradoc/format_module.rb +49 -0
  48. data/lib/coradoc/hooks.rb +176 -0
  49. data/lib/coradoc/input.rb +17 -7
  50. data/lib/coradoc/logger.rb +54 -0
  51. data/lib/coradoc/output.rb +17 -6
  52. data/lib/coradoc/performance_regression.rb +109 -0
  53. data/lib/coradoc/processor_registry.rb +50 -0
  54. data/lib/coradoc/query.rb +455 -0
  55. data/lib/coradoc/registry.rb +156 -0
  56. data/lib/coradoc/serializer/registry.rb +150 -0
  57. data/lib/coradoc/transform.rb +11 -0
  58. data/lib/coradoc/validation.rb +646 -0
  59. data/lib/coradoc/version.rb +1 -1
  60. data/lib/coradoc/visitor.rb +283 -0
  61. data/lib/coradoc.rb +40 -19
  62. metadata +67 -277
  63. data/.editorconfig +0 -15
  64. data/.envrc +0 -1
  65. data/.irbrc +0 -1
  66. data/.pryrc.sample +0 -1
  67. data/.rubocop.yml +0 -14
  68. data/.rubocop_todo.yml +0 -179
  69. data/CHANGELOG.md +0 -9
  70. data/CODE_OF_CONDUCT.md +0 -84
  71. data/Dockerfile +0 -19
  72. data/Gemfile +0 -16
  73. data/LICENSE.txt +0 -21
  74. data/Makefile +0 -35
  75. data/README.Docker.adoc +0 -57
  76. data/README.adoc +0 -119
  77. data/coradoc.gemspec +0 -40
  78. data/docker-compose.yml +0 -14
  79. data/exe/reverse_adoc +0 -81
  80. data/exe/w2a +0 -60
  81. data/flake.lock +0 -114
  82. data/flake.nix +0 -135
  83. data/lib/coradoc/converter.rb +0 -144
  84. data/lib/coradoc/document.rb +0 -77
  85. data/lib/coradoc/element/admonition.rb +0 -18
  86. data/lib/coradoc/element/attribute.rb +0 -36
  87. data/lib/coradoc/element/attribute_list.rb +0 -138
  88. data/lib/coradoc/element/audio.rb +0 -33
  89. data/lib/coradoc/element/author.rb +0 -24
  90. data/lib/coradoc/element/base.rb +0 -92
  91. data/lib/coradoc/element/bibliography.rb +0 -24
  92. data/lib/coradoc/element/bibliography_entry.rb +0 -24
  93. data/lib/coradoc/element/block/core.rb +0 -76
  94. data/lib/coradoc/element/block/example.rb +0 -23
  95. data/lib/coradoc/element/block/listing.rb +0 -21
  96. data/lib/coradoc/element/block/literal.rb +0 -21
  97. data/lib/coradoc/element/block/open.rb +0 -22
  98. data/lib/coradoc/element/block/pass.rb +0 -21
  99. data/lib/coradoc/element/block/quote.rb +0 -19
  100. data/lib/coradoc/element/block/reviewer_comment.rb +0 -19
  101. data/lib/coradoc/element/block/side.rb +0 -19
  102. data/lib/coradoc/element/block/sourcecode.rb +0 -21
  103. data/lib/coradoc/element/block.rb +0 -17
  104. data/lib/coradoc/element/break.rb +0 -11
  105. data/lib/coradoc/element/comment_block.rb +0 -22
  106. data/lib/coradoc/element/comment_line.rb +0 -18
  107. data/lib/coradoc/element/document_attributes.rb +0 -33
  108. data/lib/coradoc/element/header.rb +0 -22
  109. data/lib/coradoc/element/image/block_image.rb +0 -32
  110. data/lib/coradoc/element/image/core.rb +0 -58
  111. data/lib/coradoc/element/image/inline_image.rb +0 -12
  112. data/lib/coradoc/element/image.rb +0 -10
  113. data/lib/coradoc/element/include.rb +0 -18
  114. data/lib/coradoc/element/inline/anchor.rb +0 -19
  115. data/lib/coradoc/element/inline/attribute_reference.rb +0 -19
  116. data/lib/coradoc/element/inline/bold.rb +0 -25
  117. data/lib/coradoc/element/inline/cross_reference.rb +0 -46
  118. data/lib/coradoc/element/inline/footnote.rb +0 -24
  119. data/lib/coradoc/element/inline/hard_line_break.rb +0 -11
  120. data/lib/coradoc/element/inline/highlight.rb +0 -25
  121. data/lib/coradoc/element/inline/italic.rb +0 -25
  122. data/lib/coradoc/element/inline/link.rb +0 -42
  123. data/lib/coradoc/element/inline/monospace.rb +0 -25
  124. data/lib/coradoc/element/inline/quotation.rb +0 -20
  125. data/lib/coradoc/element/inline/small.rb +0 -19
  126. data/lib/coradoc/element/inline/span.rb +0 -37
  127. data/lib/coradoc/element/inline/subscript.rb +0 -20
  128. data/lib/coradoc/element/inline/superscript.rb +0 -20
  129. data/lib/coradoc/element/inline/underline.rb +0 -19
  130. data/lib/coradoc/element/inline.rb +0 -23
  131. data/lib/coradoc/element/list/core.rb +0 -51
  132. data/lib/coradoc/element/list/definition.rb +0 -29
  133. data/lib/coradoc/element/list/ordered.rb +0 -17
  134. data/lib/coradoc/element/list/unordered.rb +0 -17
  135. data/lib/coradoc/element/list.rb +0 -13
  136. data/lib/coradoc/element/list_item.rb +0 -98
  137. data/lib/coradoc/element/list_item_definition.rb +0 -32
  138. data/lib/coradoc/element/paragraph.rb +0 -37
  139. data/lib/coradoc/element/revision.rb +0 -27
  140. data/lib/coradoc/element/section.rb +0 -62
  141. data/lib/coradoc/element/table.rb +0 -91
  142. data/lib/coradoc/element/tag.rb +0 -19
  143. data/lib/coradoc/element/term.rb +0 -22
  144. data/lib/coradoc/element/text_element.rb +0 -92
  145. data/lib/coradoc/element/title.rb +0 -62
  146. data/lib/coradoc/element/video.rb +0 -50
  147. data/lib/coradoc/generator.rb +0 -19
  148. data/lib/coradoc/input/adoc.rb +0 -30
  149. data/lib/coradoc/input/docx.rb +0 -64
  150. data/lib/coradoc/input/html/LICENSE.txt +0 -25
  151. data/lib/coradoc/input/html/README.adoc +0 -308
  152. data/lib/coradoc/input/html/cleaner.rb +0 -142
  153. data/lib/coradoc/input/html/config.rb +0 -77
  154. data/lib/coradoc/input/html/converters/a.rb +0 -52
  155. data/lib/coradoc/input/html/converters/aside.rb +0 -16
  156. data/lib/coradoc/input/html/converters/audio.rb +0 -29
  157. data/lib/coradoc/input/html/converters/base.rb +0 -108
  158. data/lib/coradoc/input/html/converters/blockquote.rb +0 -22
  159. data/lib/coradoc/input/html/converters/br.rb +0 -15
  160. data/lib/coradoc/input/html/converters/bypass.rb +0 -81
  161. data/lib/coradoc/input/html/converters/code.rb +0 -23
  162. data/lib/coradoc/input/html/converters/div.rb +0 -19
  163. data/lib/coradoc/input/html/converters/dl.rb +0 -62
  164. data/lib/coradoc/input/html/converters/drop.rb +0 -26
  165. data/lib/coradoc/input/html/converters/em.rb +0 -21
  166. data/lib/coradoc/input/html/converters/figure.rb +0 -25
  167. data/lib/coradoc/input/html/converters/h.rb +0 -42
  168. data/lib/coradoc/input/html/converters/head.rb +0 -23
  169. data/lib/coradoc/input/html/converters/hr.rb +0 -15
  170. data/lib/coradoc/input/html/converters/ignore.rb +0 -20
  171. data/lib/coradoc/input/html/converters/img.rb +0 -110
  172. data/lib/coradoc/input/html/converters/li.rb +0 -17
  173. data/lib/coradoc/input/html/converters/mark.rb +0 -19
  174. data/lib/coradoc/input/html/converters/markup.rb +0 -31
  175. data/lib/coradoc/input/html/converters/math.rb +0 -38
  176. data/lib/coradoc/input/html/converters/ol.rb +0 -65
  177. data/lib/coradoc/input/html/converters/p.rb +0 -23
  178. data/lib/coradoc/input/html/converters/pass_through.rb +0 -17
  179. data/lib/coradoc/input/html/converters/pre.rb +0 -55
  180. data/lib/coradoc/input/html/converters/q.rb +0 -16
  181. data/lib/coradoc/input/html/converters/strong.rb +0 -20
  182. data/lib/coradoc/input/html/converters/sub.rb +0 -22
  183. data/lib/coradoc/input/html/converters/sup.rb +0 -22
  184. data/lib/coradoc/input/html/converters/table.rb +0 -319
  185. data/lib/coradoc/input/html/converters/td.rb +0 -81
  186. data/lib/coradoc/input/html/converters/text.rb +0 -32
  187. data/lib/coradoc/input/html/converters/th.rb +0 -18
  188. data/lib/coradoc/input/html/converters/tr.rb +0 -22
  189. data/lib/coradoc/input/html/converters/video.rb +0 -29
  190. data/lib/coradoc/input/html/converters.rb +0 -59
  191. data/lib/coradoc/input/html/errors.rb +0 -14
  192. data/lib/coradoc/input/html/html_converter.rb +0 -168
  193. data/lib/coradoc/input/html/plugin.rb +0 -131
  194. data/lib/coradoc/input/html/plugins/plateau.rb +0 -213
  195. data/lib/coradoc/input/html/postprocessor.rb +0 -220
  196. data/lib/coradoc/input/html.rb +0 -61
  197. data/lib/coradoc/legacy_parser.rb +0 -200
  198. data/lib/coradoc/oscal.rb +0 -99
  199. data/lib/coradoc/output/adoc.rb +0 -19
  200. data/lib/coradoc/output/coradoc_tree_debug.rb +0 -21
  201. data/lib/coradoc/parser/asciidoc/admonition.rb +0 -24
  202. data/lib/coradoc/parser/asciidoc/attribute_list.rb +0 -89
  203. data/lib/coradoc/parser/asciidoc/base.rb +0 -87
  204. data/lib/coradoc/parser/asciidoc/bibliography.rb +0 -29
  205. data/lib/coradoc/parser/asciidoc/block.rb +0 -94
  206. data/lib/coradoc/parser/asciidoc/citation.rb +0 -30
  207. data/lib/coradoc/parser/asciidoc/content.rb +0 -64
  208. data/lib/coradoc/parser/asciidoc/document_attributes.rb +0 -25
  209. data/lib/coradoc/parser/asciidoc/header.rb +0 -29
  210. data/lib/coradoc/parser/asciidoc/inline.rb +0 -195
  211. data/lib/coradoc/parser/asciidoc/list.rb +0 -115
  212. data/lib/coradoc/parser/asciidoc/paragraph.rb +0 -54
  213. data/lib/coradoc/parser/asciidoc/section.rb +0 -61
  214. data/lib/coradoc/parser/asciidoc/table.rb +0 -32
  215. data/lib/coradoc/parser/asciidoc/term.rb +0 -41
  216. data/lib/coradoc/parser/asciidoc/text.rb +0 -158
  217. data/lib/coradoc/parser/base.rb +0 -40
  218. data/lib/coradoc/parser.rb +0 -11
  219. data/lib/coradoc/reverse_adoc.rb +0 -18
  220. data/lib/coradoc/transformer.rb +0 -476
  221. data/lib/coradoc/util.rb +0 -12
  222. data/lib/reverse_adoc.rb +0 -20
  223. data/utils/inspect_asciidoc.rb +0 -29
  224. data/utils/parser_analyzer.rb +0 -66
  225. data/utils/round_trip.rb +0 -53
data/lib/coradoc/oscal.rb DELETED
@@ -1,99 +0,0 @@
1
- require "yaml"
2
-
3
- module Coradoc
4
- class Oscal
5
- attr_reader :_doc
6
-
7
- def initialize(document)
8
- @_doc = document
9
- end
10
-
11
- def self.to_oscal(document)
12
- new(document).to_oscal
13
- end
14
-
15
- def to_oscal
16
- {
17
- "metadata" => _doc.document_attributes.to_hash,
18
- "groups" => sections_as_groups,
19
- }
20
- end
21
-
22
- private
23
-
24
- # Organizational controls
25
- def sections_as_groups
26
- _doc.sections.map do |section|
27
- Hash.new.tap do |hash|
28
- hash["id"] = section.id
29
- hash["title"] = section.title&.content
30
- hash["controls"] = build_oscal_controls(section.sections)
31
- end
32
- end
33
- end
34
-
35
- # Clause 5.1
36
- def build_oscal_controls(sections)
37
- sections.map do |section|
38
- Hash.new.tap do |hash|
39
- hash["id"] = section.id
40
- # Use definition lists if present, otherwise fall back to glossaries
41
- props_items = if section.respond_to?(:definition_lists) && section.definition_lists && !section.definition_lists.empty?
42
- section.definition_lists.first.items
43
- elsif section.glossaries && !section.glossaries.empty?
44
- section.glossaries.items
45
- else
46
- []
47
- end
48
- hash["props"] = build_oscal_props(props_items)
49
- hash["parts"] = build_oscal_parts(section.sections)
50
- end
51
- end
52
- end
53
-
54
- # Control, Purpose, Guidance
55
- def build_oscal_parts(sections)
56
- sections.map do |section|
57
- Hash.new.tap do |hash|
58
- hash["id"] = section.id
59
- hash["name"] = section.title&.text
60
- hash["prose"] = build_oscal_prose(section.content)
61
- hash["parts"] = build_oscal_sub_parts(section.contents)
62
- end.compact
63
- end
64
- end
65
-
66
- def build_oscal_sub_parts(contents)
67
- if contents.length > 1
68
- parts = contents.select do |content|
69
- content if content.is_a?(Coradoc::Element::Paragraph)
70
- end
71
-
72
- parts.map do |part|
73
- Hash.new.tap do |hash|
74
- hash["id"] = part.id
75
- hash["prose"] = part.texts.join(" ")
76
- end
77
- end
78
- end
79
- end
80
-
81
- def build_oscal_props(attributes)
82
- return [] unless attributes.respond_to?(:map)
83
-
84
- attributes.map do |attribute|
85
- next unless attribute.respond_to?(:key) && attribute.respond_to?(:value)
86
-
87
- Hash.new.tap do |hash|
88
- hash["name"] = attribute.key.to_s.downcase
89
- hash["value"] = attribute.value.to_s
90
- end
91
- end.compact
92
- end
93
-
94
- def build_oscal_prose(paragraph)
95
- return nil unless paragraph.respond_to?(:texts)
96
- paragraph.texts&.join(" ")
97
- end
98
- end
99
- end
@@ -1,19 +0,0 @@
1
- module Coradoc
2
- module Output
3
- module Adoc
4
- def self.processor_id
5
- :adoc
6
- end
7
-
8
- def self.processor_match?(filename)
9
- %w[.adoc].any? { |i| filename.downcase.end_with?(i) }
10
- end
11
-
12
- def self.processor_execute(input, _options = {})
13
- input.transform_values { |i| Coradoc::Generator.gen_adoc(i) }
14
- end
15
-
16
- Coradoc::Output.define(self)
17
- end
18
- end
19
- end
@@ -1,21 +0,0 @@
1
- module Coradoc
2
- module Output
3
- module CoradocTreeDebug
4
- def self.processor_id
5
- :coradoc_tree_debug
6
- end
7
-
8
- def self.processor_match?(_filename)
9
- false
10
- end
11
-
12
- def self.processor_execute(input, _options = {})
13
- out = StringIO.new
14
- PP.pp(input, out)
15
- { nil => out.string }
16
- end
17
-
18
- Coradoc::Output.define(self)
19
- end
20
- end
21
- end
@@ -1,24 +0,0 @@
1
- module Coradoc
2
- module Parser
3
- module Asciidoc
4
- module Admonition
5
- def admonition_type
6
- str("NOTE") | str("TIP") | str("EDITOR") |
7
- str("IMPORTANT") | str("WARNING") | str("CAUTION") |
8
- str("TODO")
9
- # requires atypical syntax for access?
10
- # | str('DANGER')
11
- # | str('SAFETY PRECAUTION')
12
- end
13
-
14
- def admonition_line
15
- admonition_type.as(:admonition_type) >> str(": ") >>
16
- (text.as(:text) >>
17
- line_ending.as(:line_break)
18
- ).repeat(1)
19
- .as(:content)
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,89 +0,0 @@
1
- module Coradoc
2
- module Parser
3
- module Asciidoc
4
- module AttributeList
5
- def named_attribute_name
6
- attribute_name
7
- end
8
-
9
- def named_value_noquote
10
- match('[^\],]').repeat(1)
11
- end
12
-
13
- def named_value_single_quote
14
- str("'") >>
15
- match("[^']").repeat(1) >>
16
- str("'")
17
- end
18
-
19
- def named_value_double_quote
20
- str('"') >>
21
- match('[^"]').repeat(1) >>
22
- str('"')
23
- end
24
-
25
- def named_value
26
- (named_value_single_quote |
27
- named_value_double_quote |
28
- named_value_noquote
29
- ).as(:named_value)
30
- end
31
-
32
- def named_key
33
- match("[a-zA-Z0-9_-]").repeat(1).as(:named_key)
34
- end
35
-
36
- def named_attribute
37
- (named_key >>
38
- str(" ").maybe >> str("=") >> str(" ").maybe >>
39
- named_value >>
40
- str(" ").maybe
41
- ).as(:named)
42
- end
43
-
44
- def positional_attribute
45
- (match['a-zA-Z0-9_\-%.'].repeat(1) >>
46
- str("=").absent?
47
- ).as(:positional)
48
- end
49
-
50
- def named_many
51
- (named_attribute.repeat(1, 1) >>
52
- (str(",") >> space.maybe >> named_attribute).repeat(0))
53
- end
54
-
55
- def positional_one_named_many
56
- (positional_attribute.repeat(1, 1) >>
57
- (str(",") >> space.maybe >> named_attribute).repeat(1))
58
- end
59
-
60
- def positional_many_named_many
61
- (positional_attribute.repeat(1, 1) >>
62
- (str(",") >> space.maybe >> positional_attribute).repeat(1) >>
63
- (str(",") >> space.maybe >> named_attribute).repeat(1))
64
- end
65
-
66
- def positional_many
67
- (positional_attribute.repeat(1, 1) >>
68
- (str(",") >> space.maybe >> positional_attribute).repeat(0))
69
- end
70
-
71
- def positional_zero_or_one
72
- positional_attribute.repeat(0, 1)
73
- end
74
-
75
- def attribute_list(name = :attribute_list)
76
- str("[").present? >>
77
- str("[") >> str("[").absent? >>
78
- (named_many |
79
- positional_one_named_many |
80
- positional_many_named_many |
81
- positional_many |
82
- positional_zero_or_one
83
- ).as(:attribute_array).as(name) >>
84
- str("]")
85
- end
86
- end
87
- end
88
- end
89
- end
@@ -1,87 +0,0 @@
1
- require "parslet"
2
- require "parslet/convenience"
3
-
4
- require_relative "admonition"
5
- require_relative "attribute_list"
6
- require_relative "bibliography"
7
- require_relative "block"
8
- require_relative "citation"
9
- require_relative "content"
10
- require_relative "document_attributes"
11
- require_relative "header"
12
- require_relative "inline"
13
- require_relative "list"
14
- require_relative "paragraph"
15
- require_relative "section"
16
- require_relative "table"
17
- require_relative "term"
18
- require_relative "text"
19
-
20
- module Coradoc
21
- module Parser
22
- module Asciidoc
23
- class Base < Parslet::Parser
24
- include Coradoc::Parser::Asciidoc::Admonition
25
- include Coradoc::Parser::Asciidoc::AttributeList
26
- include Coradoc::Parser::Asciidoc::Bibliography
27
- include Coradoc::Parser::Asciidoc::Block
28
- include Coradoc::Parser::Asciidoc::Citation
29
- include Coradoc::Parser::Asciidoc::Content
30
- include Coradoc::Parser::Asciidoc::DocumentAttributes
31
- include Coradoc::Parser::Asciidoc::Header
32
- include Coradoc::Parser::Asciidoc::Inline
33
- include Coradoc::Parser::Asciidoc::List
34
- include Coradoc::Parser::Asciidoc::Paragraph
35
- include Coradoc::Parser::Asciidoc::Section
36
- include Coradoc::Parser::Asciidoc::Table
37
- include Coradoc::Parser::Asciidoc::Term
38
- include Coradoc::Parser::Asciidoc::Text
39
-
40
- def rule_dispatch(rule_name, *args, **kwargs)
41
- @dispatch_data ||= {}
42
- dispatch_key = [rule_name, args, kwargs.to_a.sort]
43
- dispatch_hash = dispatch_key.hash.abs
44
- unless @dispatch_data.has_key?(dispatch_hash)
45
- alias_name = "#{rule_name}_#{dispatch_hash}".to_sym
46
- Coradoc::Parser::Asciidoc::Base.class_exec do
47
- rule(alias_name) do
48
- send(rule_name, *args, **kwargs)
49
- end
50
- end
51
- @dispatch_data[dispatch_hash] = alias_name
52
- end
53
- dispatch_method = @dispatch_data[dispatch_hash]
54
- send(dispatch_method)
55
- end
56
-
57
- add_dispatch = true
58
- with_params = true
59
-
60
- parser_methods = (Coradoc::Parser::Asciidoc.constants - [:Base]).map do |const|
61
- Coradoc::Parser::Asciidoc.const_get(const).instance_methods
62
- end.flatten.uniq
63
-
64
- parser_methods.each do |rule_name|
65
- params = Coradoc::Parser::Asciidoc::Base.instance_method(rule_name).parameters
66
- if add_dispatch && params == []
67
- alias_name = "alias_nondispatch_#{rule_name}".to_sym
68
- Coradoc::Parser::Asciidoc::Base.class_exec do
69
- alias_method alias_name, rule_name
70
- rule(rule_name) do
71
- send(alias_name)
72
- end
73
- end
74
- elsif add_dispatch && with_params
75
- alias_name = "alias_dispatch_#{rule_name}".to_sym
76
- Coradoc::Parser::Asciidoc::Base.class_exec do
77
- alias_method alias_name, rule_name
78
- define_method(rule_name) do |*args, **kwargs|
79
- rule_dispatch(alias_name, *args, **kwargs)
80
- end
81
- end
82
- end
83
- end
84
- end
85
- end
86
- end
87
- end
@@ -1,29 +0,0 @@
1
- module Coradoc
2
- module Parser
3
- module Asciidoc
4
- module Bibliography
5
- def bibliography
6
- (element_id.maybe >>
7
- str("[bibliography]\n") >>
8
- str("== ") >> match("[^\n]").repeat(1).as(:title) >> str("\n") >>
9
- bib_entry.repeat(1).as(:entries)
10
- ).as(:bibliography)
11
- end
12
-
13
- def bib_entry
14
- (match("^*") >> str(" [[[") >>
15
- match('[^,\[\]\n]').repeat(1).as(:anchor_name) >>
16
- (str(",") >>
17
- match('[^\]\n]').repeat(1).as(:document_id)
18
- ).maybe >>
19
- str("]]]") >>
20
- (text_line.repeat(0, 1) >>
21
- text_line.repeat(0)
22
- ).as(:ref_text).maybe >>
23
- line_ending.repeat(1).as(:line_break).maybe
24
- ).as(:bibliography_entry)
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,94 +0,0 @@
1
- module Coradoc
2
- module Parser
3
- module Asciidoc
4
- module Block
5
- def block(n_deep = 3)
6
- (example_block(n_deep) |
7
- sidebar_block(n_deep) |
8
- source_block(n_deep) |
9
- quote_block(n_deep) |
10
- pass_block(n_deep)).as(:block)
11
- end
12
-
13
- def example_block(n_deep)
14
- block_style(n_deep, "=")
15
- end
16
-
17
- def pass_block(n_deep)
18
- block_style(n_deep, "+", 4, :pass)
19
- end
20
-
21
- def quote_block(n_deep)
22
- block_style(n_deep, "_")
23
- end
24
-
25
- def sidebar_block(n_deep)
26
- block_style(n_deep, "*")
27
- end
28
-
29
- def source_block(n_deep)
30
- block_style(n_deep, "-", 2)
31
- end
32
-
33
- def block_title
34
- str(".") >> space.absent? >> text.as(:title) >> newline
35
- end
36
-
37
- def block_type(type)
38
- (line_start? >> str("[") >> str("[").absent? >>
39
- str(type).as(:type) >>
40
- str("]")) >> newline # |
41
- end
42
-
43
- def block_content(n_deep = 3)
44
- c = block_image |
45
- list |
46
- text_line |
47
- empty_line.as(:line_break)
48
- c = c | block(n_deep - 1) if n_deep.positive?
49
- c.repeat(1)
50
- end
51
-
52
- def block_delimiter
53
- line_start? >>
54
- ((str("*") |
55
- str("=") |
56
- str("_") |
57
- str("+") |
58
- str("-")).repeat(4) |
59
- str("-").repeat(2, 2)) >>
60
- newline
61
- end
62
-
63
- def element_attributes
64
- block_title.maybe >>
65
- element_id.maybe >>
66
- (attribute_list >> newline).maybe >>
67
- block_title.maybe >>
68
- newline.maybe >>
69
- (attribute_list >> newline).maybe >>
70
- element_id.maybe
71
- end
72
-
73
- def block_style(n_deep = 3, delimiter = "*", repeater = 4, type = nil)
74
- current_delimiter = str(delimiter).repeat(repeater).capture(:delimit)
75
- closing_delimiter = dynamic do |_s, c|
76
- str(c.captures[:delimit].to_s.strip)
77
- end
78
-
79
- element_attributes >>
80
- (line_start? >> attribute_list >> newline).maybe >>
81
- line_start? >>
82
- current_delimiter.as(:delimiter) >> newline >>
83
- if type == :pass
84
- (text_line | empty_line.as(:line_break)).repeat(1).as(:lines)
85
- else
86
- (closing_delimiter >> newline).absent? >> block_content(n_deep - 1).as(:lines)
87
- end >>
88
- line_start? >>
89
- closing_delimiter >> newline
90
- end
91
- end
92
- end
93
- end
94
- end
@@ -1,30 +0,0 @@
1
- module Coradoc
2
- module Parser
3
- module Asciidoc
4
- module Citation
5
- def xref_anchor
6
- match("[^,>]").repeat(1).as(:href_arg).repeat(1, 1)
7
- end
8
-
9
- def xref_str
10
- match("[^,>]").repeat(1).as(:text)
11
- end
12
-
13
- def xref_arg
14
- (str("section") | str("paragraph") | str("clause") | str("annex") | str("table")).as(:key) >>
15
- match("[ =]").as(:delimiter) >>
16
- match("[^,>=]").repeat(1).as(:value)
17
- end
18
-
19
- def cross_reference
20
- (str("<<") >> xref_anchor >>
21
- ((str(",") >> xref_arg).repeat(1) |
22
- (str(",") >> xref_str).repeat(1)
23
- ).maybe >>
24
- str(">>")
25
- ).as(:cross_reference)
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,64 +0,0 @@
1
- module Coradoc
2
- module Parser
3
- module Asciidoc
4
- module Content
5
- def literal_space
6
- (match[" "] | match[' \t']).repeat(1)
7
- end
8
-
9
- # Override
10
- def literal_space?
11
- literal_space.maybe
12
- end
13
-
14
- def list_prefix
15
- (line_start? >>
16
- (match("^[*]") >> str("*").repeat(1, 5) |
17
- match('^[\.]') >> str(".").repeat(1, 5)) >>
18
- str(" "))
19
- end
20
-
21
- # Text
22
- # :zero :one :many
23
- def text_line(many_breaks = false)
24
- tl = (asciidoc_char_with_id.absent? | element_id_inline) >>
25
- literal_space? >> text_any.as(:text)
26
- if many_breaks
27
- tl >> (line_ending.repeat(1).as(:line_break) | eof?)
28
- else
29
- tl >> (line_ending.as(:line_break) | eof?)
30
- end
31
- end
32
-
33
- def asciidoc_char
34
- line_start? >> match['*_:+=\-']
35
- end
36
-
37
- def asciidoc_char_with_id
38
- asciidoc_char | str("[#") | str("[[")
39
- end
40
-
41
- def element_id
42
- line_start? >>
43
- (str("[[") >> keyword.as(:id) >> str("]]") |
44
- str("[#") >> keyword.as(:id) >> str("]")
45
- ) >> newline
46
- end
47
-
48
- def element_id_inline
49
- str("[[") >> keyword.as(:id) >> str("]]") |
50
- str("[#") >> keyword.as(:id) >> str("]")
51
- end
52
-
53
- def glossary
54
- keyword.as(:key) >> str("::") >> (str(" ") | newline) >>
55
- text.as(:value) >> line_ending.as(:line_break)
56
- end
57
-
58
- def glossaries
59
- glossary.repeat(1)
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,25 +0,0 @@
1
- module Coradoc
2
- module Parser
3
- module Asciidoc
4
- module DocumentAttributes
5
- def attribute_name
6
- match("[a-zA-Z0-9_-]").repeat(1)
7
- end
8
-
9
- def attribute_value
10
- text | str("") >> str("\n").absent?
11
- end
12
-
13
- def document_attributes
14
- document_attribute.repeat(1)
15
- .as(:document_attributes)
16
- end
17
-
18
- def document_attribute
19
- str(":") >> attribute_name.as(:key) >> str(":") >>
20
- space? >> (attribute_value | str("")).as(:value) >> line_ending
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,29 +0,0 @@
1
- module Coradoc
2
- module Parser
3
- module Asciidoc
4
- module Header
5
- def header
6
- header_title >>
7
- author.maybe.as(:author) >>
8
- revision.maybe.as(:revision) >> newline.maybe
9
- end
10
-
11
- def header_title
12
- match("^=") >> str("=").absent? >> space? >> text.as(:title) >> newline
13
- end
14
-
15
- def author
16
- words.as(:first_name) >> str(",") >>
17
- space? >> words.as(:last_name) >>
18
- space? >> str("<") >> email.as(:email) >> str(">") >> newline
19
- end
20
-
21
- def revision
22
- (word >> (str(".") >> word).maybe).as(:number) >>
23
- str(",") >> space? >> date.as(:date) >> str(":") >>
24
- space? >> words.as(:remark) >> newline
25
- end
26
- end
27
- end
28
- end
29
- end