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.
- checksums.yaml +4 -4
- data/.rspec +1 -1
- data/Rakefile +3 -12
- data/exe/coradoc +21 -2
- data/lib/coradoc/cli.rb +185 -91
- data/lib/coradoc/configurable.rb +527 -0
- data/lib/coradoc/coradoc.rb +463 -0
- data/lib/coradoc/core_model/annotation_block.rb +57 -0
- data/lib/coradoc/core_model/base.rb +172 -0
- data/lib/coradoc/core_model/bibliography.rb +41 -0
- data/lib/coradoc/core_model/bibliography_entry.rb +48 -0
- data/lib/coradoc/core_model/block.rb +63 -0
- data/lib/coradoc/core_model/children_content.rb +53 -0
- data/lib/coradoc/core_model/comment_block.rb +10 -0
- data/lib/coradoc/core_model/definition_item.rb +46 -0
- data/lib/coradoc/core_model/definition_list.rb +28 -0
- data/lib/coradoc/core_model/element_attribute.rb +26 -0
- data/lib/coradoc/core_model/example_block.rb +10 -0
- data/lib/coradoc/core_model/footnote.rb +92 -0
- data/lib/coradoc/core_model/horizontal_rule_block.rb +10 -0
- data/lib/coradoc/core_model/id_generator.rb +16 -0
- data/lib/coradoc/core_model/image.rb +66 -0
- data/lib/coradoc/core_model/inline_element.rb +140 -0
- data/lib/coradoc/core_model/list_block.rb +135 -0
- data/lib/coradoc/core_model/list_item.rb +142 -0
- data/lib/coradoc/core_model/listing_block.rb +13 -0
- data/lib/coradoc/core_model/literal_block.rb +10 -0
- data/lib/coradoc/core_model/metadata.rb +79 -0
- data/lib/coradoc/core_model/open_block.rb +10 -0
- data/lib/coradoc/core_model/paragraph_block.rb +10 -0
- data/lib/coradoc/core_model/pass_block.rb +10 -0
- data/lib/coradoc/core_model/quote_block.rb +12 -0
- data/lib/coradoc/core_model/reviewer_block.rb +10 -0
- data/lib/coradoc/core_model/sidebar_block.rb +10 -0
- data/lib/coradoc/core_model/source_block.rb +10 -0
- data/lib/coradoc/core_model/structural_element.rb +94 -0
- data/lib/coradoc/core_model/table.rb +148 -0
- data/lib/coradoc/core_model/term.rb +53 -0
- data/lib/coradoc/core_model/text_content.rb +22 -0
- data/lib/coradoc/core_model/toc.rb +105 -0
- data/lib/coradoc/core_model/toc_generator.rb +151 -0
- data/lib/coradoc/core_model/verse_block.rb +12 -0
- data/lib/coradoc/core_model.rb +77 -0
- data/lib/coradoc/document_builder.rb +184 -0
- data/lib/coradoc/document_manipulator.rb +203 -0
- data/lib/coradoc/errors.rb +312 -0
- data/lib/coradoc/format_module.rb +49 -0
- data/lib/coradoc/hooks.rb +176 -0
- data/lib/coradoc/input.rb +17 -7
- data/lib/coradoc/logger.rb +54 -0
- data/lib/coradoc/output.rb +17 -6
- data/lib/coradoc/performance_regression.rb +109 -0
- data/lib/coradoc/processor_registry.rb +50 -0
- data/lib/coradoc/query.rb +455 -0
- data/lib/coradoc/registry.rb +156 -0
- data/lib/coradoc/serializer/registry.rb +150 -0
- data/lib/coradoc/transform.rb +11 -0
- data/lib/coradoc/validation.rb +646 -0
- data/lib/coradoc/version.rb +1 -1
- data/lib/coradoc/visitor.rb +283 -0
- data/lib/coradoc.rb +40 -19
- metadata +67 -277
- data/.editorconfig +0 -15
- data/.envrc +0 -1
- data/.irbrc +0 -1
- data/.pryrc.sample +0 -1
- data/.rubocop.yml +0 -14
- data/.rubocop_todo.yml +0 -179
- data/CHANGELOG.md +0 -9
- data/CODE_OF_CONDUCT.md +0 -84
- data/Dockerfile +0 -19
- data/Gemfile +0 -16
- data/LICENSE.txt +0 -21
- data/Makefile +0 -35
- data/README.Docker.adoc +0 -57
- data/README.adoc +0 -119
- data/coradoc.gemspec +0 -40
- data/docker-compose.yml +0 -14
- data/exe/reverse_adoc +0 -81
- data/exe/w2a +0 -60
- data/flake.lock +0 -114
- data/flake.nix +0 -135
- data/lib/coradoc/converter.rb +0 -144
- data/lib/coradoc/document.rb +0 -77
- data/lib/coradoc/element/admonition.rb +0 -18
- data/lib/coradoc/element/attribute.rb +0 -36
- data/lib/coradoc/element/attribute_list.rb +0 -138
- data/lib/coradoc/element/audio.rb +0 -33
- data/lib/coradoc/element/author.rb +0 -24
- data/lib/coradoc/element/base.rb +0 -92
- data/lib/coradoc/element/bibliography.rb +0 -24
- data/lib/coradoc/element/bibliography_entry.rb +0 -24
- data/lib/coradoc/element/block/core.rb +0 -76
- data/lib/coradoc/element/block/example.rb +0 -23
- data/lib/coradoc/element/block/listing.rb +0 -21
- data/lib/coradoc/element/block/literal.rb +0 -21
- data/lib/coradoc/element/block/open.rb +0 -22
- data/lib/coradoc/element/block/pass.rb +0 -21
- data/lib/coradoc/element/block/quote.rb +0 -19
- data/lib/coradoc/element/block/reviewer_comment.rb +0 -19
- data/lib/coradoc/element/block/side.rb +0 -19
- data/lib/coradoc/element/block/sourcecode.rb +0 -21
- data/lib/coradoc/element/block.rb +0 -17
- data/lib/coradoc/element/break.rb +0 -11
- data/lib/coradoc/element/comment_block.rb +0 -22
- data/lib/coradoc/element/comment_line.rb +0 -18
- data/lib/coradoc/element/document_attributes.rb +0 -33
- data/lib/coradoc/element/header.rb +0 -22
- data/lib/coradoc/element/image/block_image.rb +0 -32
- data/lib/coradoc/element/image/core.rb +0 -58
- data/lib/coradoc/element/image/inline_image.rb +0 -12
- data/lib/coradoc/element/image.rb +0 -10
- data/lib/coradoc/element/include.rb +0 -18
- data/lib/coradoc/element/inline/anchor.rb +0 -19
- data/lib/coradoc/element/inline/attribute_reference.rb +0 -19
- data/lib/coradoc/element/inline/bold.rb +0 -25
- data/lib/coradoc/element/inline/cross_reference.rb +0 -46
- data/lib/coradoc/element/inline/footnote.rb +0 -24
- data/lib/coradoc/element/inline/hard_line_break.rb +0 -11
- data/lib/coradoc/element/inline/highlight.rb +0 -25
- data/lib/coradoc/element/inline/italic.rb +0 -25
- data/lib/coradoc/element/inline/link.rb +0 -42
- data/lib/coradoc/element/inline/monospace.rb +0 -25
- data/lib/coradoc/element/inline/quotation.rb +0 -20
- data/lib/coradoc/element/inline/small.rb +0 -19
- data/lib/coradoc/element/inline/span.rb +0 -37
- data/lib/coradoc/element/inline/subscript.rb +0 -20
- data/lib/coradoc/element/inline/superscript.rb +0 -20
- data/lib/coradoc/element/inline/underline.rb +0 -19
- data/lib/coradoc/element/inline.rb +0 -23
- data/lib/coradoc/element/list/core.rb +0 -51
- data/lib/coradoc/element/list/definition.rb +0 -29
- data/lib/coradoc/element/list/ordered.rb +0 -17
- data/lib/coradoc/element/list/unordered.rb +0 -17
- data/lib/coradoc/element/list.rb +0 -13
- data/lib/coradoc/element/list_item.rb +0 -98
- data/lib/coradoc/element/list_item_definition.rb +0 -32
- data/lib/coradoc/element/paragraph.rb +0 -37
- data/lib/coradoc/element/revision.rb +0 -27
- data/lib/coradoc/element/section.rb +0 -62
- data/lib/coradoc/element/table.rb +0 -91
- data/lib/coradoc/element/tag.rb +0 -19
- data/lib/coradoc/element/term.rb +0 -22
- data/lib/coradoc/element/text_element.rb +0 -92
- data/lib/coradoc/element/title.rb +0 -62
- data/lib/coradoc/element/video.rb +0 -50
- data/lib/coradoc/generator.rb +0 -19
- data/lib/coradoc/input/adoc.rb +0 -30
- data/lib/coradoc/input/docx.rb +0 -64
- data/lib/coradoc/input/html/LICENSE.txt +0 -25
- data/lib/coradoc/input/html/README.adoc +0 -308
- data/lib/coradoc/input/html/cleaner.rb +0 -142
- data/lib/coradoc/input/html/config.rb +0 -77
- data/lib/coradoc/input/html/converters/a.rb +0 -52
- data/lib/coradoc/input/html/converters/aside.rb +0 -16
- data/lib/coradoc/input/html/converters/audio.rb +0 -29
- data/lib/coradoc/input/html/converters/base.rb +0 -108
- data/lib/coradoc/input/html/converters/blockquote.rb +0 -22
- data/lib/coradoc/input/html/converters/br.rb +0 -15
- data/lib/coradoc/input/html/converters/bypass.rb +0 -81
- data/lib/coradoc/input/html/converters/code.rb +0 -23
- data/lib/coradoc/input/html/converters/div.rb +0 -19
- data/lib/coradoc/input/html/converters/dl.rb +0 -62
- data/lib/coradoc/input/html/converters/drop.rb +0 -26
- data/lib/coradoc/input/html/converters/em.rb +0 -21
- data/lib/coradoc/input/html/converters/figure.rb +0 -25
- data/lib/coradoc/input/html/converters/h.rb +0 -42
- data/lib/coradoc/input/html/converters/head.rb +0 -23
- data/lib/coradoc/input/html/converters/hr.rb +0 -15
- data/lib/coradoc/input/html/converters/ignore.rb +0 -20
- data/lib/coradoc/input/html/converters/img.rb +0 -110
- data/lib/coradoc/input/html/converters/li.rb +0 -17
- data/lib/coradoc/input/html/converters/mark.rb +0 -19
- data/lib/coradoc/input/html/converters/markup.rb +0 -31
- data/lib/coradoc/input/html/converters/math.rb +0 -38
- data/lib/coradoc/input/html/converters/ol.rb +0 -65
- data/lib/coradoc/input/html/converters/p.rb +0 -23
- data/lib/coradoc/input/html/converters/pass_through.rb +0 -17
- data/lib/coradoc/input/html/converters/pre.rb +0 -55
- data/lib/coradoc/input/html/converters/q.rb +0 -16
- data/lib/coradoc/input/html/converters/strong.rb +0 -20
- data/lib/coradoc/input/html/converters/sub.rb +0 -22
- data/lib/coradoc/input/html/converters/sup.rb +0 -22
- data/lib/coradoc/input/html/converters/table.rb +0 -319
- data/lib/coradoc/input/html/converters/td.rb +0 -81
- data/lib/coradoc/input/html/converters/text.rb +0 -32
- data/lib/coradoc/input/html/converters/th.rb +0 -18
- data/lib/coradoc/input/html/converters/tr.rb +0 -22
- data/lib/coradoc/input/html/converters/video.rb +0 -29
- data/lib/coradoc/input/html/converters.rb +0 -59
- data/lib/coradoc/input/html/errors.rb +0 -14
- data/lib/coradoc/input/html/html_converter.rb +0 -168
- data/lib/coradoc/input/html/plugin.rb +0 -131
- data/lib/coradoc/input/html/plugins/plateau.rb +0 -213
- data/lib/coradoc/input/html/postprocessor.rb +0 -220
- data/lib/coradoc/input/html.rb +0 -61
- data/lib/coradoc/legacy_parser.rb +0 -200
- data/lib/coradoc/oscal.rb +0 -99
- data/lib/coradoc/output/adoc.rb +0 -19
- data/lib/coradoc/output/coradoc_tree_debug.rb +0 -21
- data/lib/coradoc/parser/asciidoc/admonition.rb +0 -24
- data/lib/coradoc/parser/asciidoc/attribute_list.rb +0 -89
- data/lib/coradoc/parser/asciidoc/base.rb +0 -87
- data/lib/coradoc/parser/asciidoc/bibliography.rb +0 -29
- data/lib/coradoc/parser/asciidoc/block.rb +0 -94
- data/lib/coradoc/parser/asciidoc/citation.rb +0 -30
- data/lib/coradoc/parser/asciidoc/content.rb +0 -64
- data/lib/coradoc/parser/asciidoc/document_attributes.rb +0 -25
- data/lib/coradoc/parser/asciidoc/header.rb +0 -29
- data/lib/coradoc/parser/asciidoc/inline.rb +0 -195
- data/lib/coradoc/parser/asciidoc/list.rb +0 -115
- data/lib/coradoc/parser/asciidoc/paragraph.rb +0 -54
- data/lib/coradoc/parser/asciidoc/section.rb +0 -61
- data/lib/coradoc/parser/asciidoc/table.rb +0 -32
- data/lib/coradoc/parser/asciidoc/term.rb +0 -41
- data/lib/coradoc/parser/asciidoc/text.rb +0 -158
- data/lib/coradoc/parser/base.rb +0 -40
- data/lib/coradoc/parser.rb +0 -11
- data/lib/coradoc/reverse_adoc.rb +0 -18
- data/lib/coradoc/transformer.rb +0 -476
- data/lib/coradoc/util.rb +0 -12
- data/lib/reverse_adoc.rb +0 -20
- data/utils/inspect_asciidoc.rb +0 -29
- data/utils/parser_analyzer.rb +0 -66
- 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
|
data/lib/coradoc/output/adoc.rb
DELETED
|
@@ -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
|