coradoc-adoc 2.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.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/lib/coradoc/asciidoc/model/admonition.rb +37 -0
- data/lib/coradoc/asciidoc/model/anchorable.rb +64 -0
- data/lib/coradoc/asciidoc/model/attached.rb +26 -0
- data/lib/coradoc/asciidoc/model/attribute.rb +22 -0
- data/lib/coradoc/asciidoc/model/attribute_list/matchers.rb +45 -0
- data/lib/coradoc/asciidoc/model/attribute_list.rb +230 -0
- data/lib/coradoc/asciidoc/model/attribute_list_attribute.rb +11 -0
- data/lib/coradoc/asciidoc/model/audio.rb +44 -0
- data/lib/coradoc/asciidoc/model/author.rb +36 -0
- data/lib/coradoc/asciidoc/model/base.rb +141 -0
- data/lib/coradoc/asciidoc/model/bibliography.rb +37 -0
- data/lib/coradoc/asciidoc/model/bibliography_entry.rb +38 -0
- data/lib/coradoc/asciidoc/model/block/core.rb +139 -0
- data/lib/coradoc/asciidoc/model/block/example.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/listing.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/literal.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/open.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/pass.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/quote.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/reviewer_comment.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/side.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/source_code.rb +14 -0
- data/lib/coradoc/asciidoc/model/block.rb +21 -0
- data/lib/coradoc/asciidoc/model/break.rb +33 -0
- data/lib/coradoc/asciidoc/model/comment_block.rb +33 -0
- data/lib/coradoc/asciidoc/model/comment_line.rb +30 -0
- data/lib/coradoc/asciidoc/model/content_list.rb +334 -0
- data/lib/coradoc/asciidoc/model/document.rb +197 -0
- data/lib/coradoc/asciidoc/model/document_attributes.rb +43 -0
- data/lib/coradoc/asciidoc/model/glossaries.rb +11 -0
- data/lib/coradoc/asciidoc/model/header.rb +57 -0
- data/lib/coradoc/asciidoc/model/highlight.rb +11 -0
- data/lib/coradoc/asciidoc/model/image/block_image/attribute_list.rb +23 -0
- data/lib/coradoc/asciidoc/model/image/block_image.rb +25 -0
- data/lib/coradoc/asciidoc/model/image/core/attribute_list.rb +43 -0
- data/lib/coradoc/asciidoc/model/image/core.rb +72 -0
- data/lib/coradoc/asciidoc/model/image/inline_image.rb +17 -0
- data/lib/coradoc/asciidoc/model/image.rb +14 -0
- data/lib/coradoc/asciidoc/model/include.rb +66 -0
- data/lib/coradoc/asciidoc/model/inline/anchor.rb +41 -0
- data/lib/coradoc/asciidoc/model/inline/attribute_reference.rb +25 -0
- data/lib/coradoc/asciidoc/model/inline/base.rb +15 -0
- data/lib/coradoc/asciidoc/model/inline/bold.rb +38 -0
- data/lib/coradoc/asciidoc/model/inline/cross_reference.rb +29 -0
- data/lib/coradoc/asciidoc/model/inline/cross_reference_arg.rb +15 -0
- data/lib/coradoc/asciidoc/model/inline/footnote.rb +34 -0
- data/lib/coradoc/asciidoc/model/inline/hard_line_break.rb +24 -0
- data/lib/coradoc/asciidoc/model/inline/highlight.rb +36 -0
- data/lib/coradoc/asciidoc/model/inline/italic.rb +38 -0
- data/lib/coradoc/asciidoc/model/inline/link.rb +46 -0
- data/lib/coradoc/asciidoc/model/inline/monospace.rb +39 -0
- data/lib/coradoc/asciidoc/model/inline/quotation.rb +25 -0
- data/lib/coradoc/asciidoc/model/inline/small.rb +25 -0
- data/lib/coradoc/asciidoc/model/inline/span.rb +38 -0
- data/lib/coradoc/asciidoc/model/inline/stem.rb +24 -0
- data/lib/coradoc/asciidoc/model/inline/strikethrough.rb +39 -0
- data/lib/coradoc/asciidoc/model/inline/subscript.rb +33 -0
- data/lib/coradoc/asciidoc/model/inline/superscript.rb +33 -0
- data/lib/coradoc/asciidoc/model/inline/underline.rb +25 -0
- data/lib/coradoc/asciidoc/model/inline.rb +31 -0
- data/lib/coradoc/asciidoc/model/line_break.rb +11 -0
- data/lib/coradoc/asciidoc/model/list/core.rb +61 -0
- data/lib/coradoc/asciidoc/model/list/definition.rb +27 -0
- data/lib/coradoc/asciidoc/model/list/definition_item.rb +43 -0
- data/lib/coradoc/asciidoc/model/list/item.rb +72 -0
- data/lib/coradoc/asciidoc/model/list/nestable.rb +14 -0
- data/lib/coradoc/asciidoc/model/list/ordered.rb +34 -0
- data/lib/coradoc/asciidoc/model/list/unordered.rb +34 -0
- data/lib/coradoc/asciidoc/model/list.rb +29 -0
- data/lib/coradoc/asciidoc/model/named_attribute.rb +12 -0
- data/lib/coradoc/asciidoc/model/paragraph.rb +59 -0
- data/lib/coradoc/asciidoc/model/rejected_positional_attribute.rb +12 -0
- data/lib/coradoc/asciidoc/model/resolvable.rb +71 -0
- data/lib/coradoc/asciidoc/model/resolver.rb +430 -0
- data/lib/coradoc/asciidoc/model/reviewer_note.rb +54 -0
- data/lib/coradoc/asciidoc/model/revision.rb +47 -0
- data/lib/coradoc/asciidoc/model/section.rb +109 -0
- data/lib/coradoc/asciidoc/model/serialization/asciidoc_adapter.rb +28 -0
- data/lib/coradoc/asciidoc/model/serialization/asciidoc_mapping.rb +42 -0
- data/lib/coradoc/asciidoc/model/serialization/asciidoc_mapping_rule.rb +41 -0
- data/lib/coradoc/asciidoc/model/serialization/asciidoc_transform.rb +211 -0
- data/lib/coradoc/asciidoc/model/serialization/errors.rb +57 -0
- data/lib/coradoc/asciidoc/model/serialization.rb +39 -0
- data/lib/coradoc/asciidoc/model/spacing.rb +282 -0
- data/lib/coradoc/asciidoc/model/table.rb +44 -0
- data/lib/coradoc/asciidoc/model/table_cell.rb +122 -0
- data/lib/coradoc/asciidoc/model/table_row.rb +26 -0
- data/lib/coradoc/asciidoc/model/tag.rb +36 -0
- data/lib/coradoc/asciidoc/model/term.rb +48 -0
- data/lib/coradoc/asciidoc/model/text_element.rb +66 -0
- data/lib/coradoc/asciidoc/model/title.rb +85 -0
- data/lib/coradoc/asciidoc/model/video/attribute_list.rb +43 -0
- data/lib/coradoc/asciidoc/model/video.rb +49 -0
- data/lib/coradoc/asciidoc/model.rb +75 -0
- data/lib/coradoc/asciidoc/parse_error.rb +161 -0
- data/lib/coradoc/asciidoc/parser/admonition.rb +26 -0
- data/lib/coradoc/asciidoc/parser/attribute_list.rb +110 -0
- data/lib/coradoc/asciidoc/parser/base.rb +159 -0
- data/lib/coradoc/asciidoc/parser/bibliography.rb +31 -0
- data/lib/coradoc/asciidoc/parser/block.rb +186 -0
- data/lib/coradoc/asciidoc/parser/block_assembler.rb +183 -0
- data/lib/coradoc/asciidoc/parser/cache.rb +155 -0
- data/lib/coradoc/asciidoc/parser/citation.rb +32 -0
- data/lib/coradoc/asciidoc/parser/content.rb +76 -0
- data/lib/coradoc/asciidoc/parser/document_attributes.rb +27 -0
- data/lib/coradoc/asciidoc/parser/fix_files.rb +76 -0
- data/lib/coradoc/asciidoc/parser/header.rb +31 -0
- data/lib/coradoc/asciidoc/parser/inline.rb +199 -0
- data/lib/coradoc/asciidoc/parser/list.rb +130 -0
- data/lib/coradoc/asciidoc/parser/metadata_detector.rb +164 -0
- data/lib/coradoc/asciidoc/parser/paragraph.rb +64 -0
- data/lib/coradoc/asciidoc/parser/section.rb +62 -0
- data/lib/coradoc/asciidoc/parser/stem.rb +19 -0
- data/lib/coradoc/asciidoc/parser/table.rb +166 -0
- data/lib/coradoc/asciidoc/parser/term.rb +70 -0
- data/lib/coradoc/asciidoc/parser/text.rb +156 -0
- data/lib/coradoc/asciidoc/parser.rb +10 -0
- data/lib/coradoc/asciidoc/serializer/adoc_serializer.rb +86 -0
- data/lib/coradoc/asciidoc/serializer/element_registry.rb +95 -0
- data/lib/coradoc/asciidoc/serializer/fallback_serializer.rb +21 -0
- data/lib/coradoc/asciidoc/serializer/formatter.rb +144 -0
- data/lib/coradoc/asciidoc/serializer/registrations.rb +108 -0
- data/lib/coradoc/asciidoc/serializer/serialization_context.rb +238 -0
- data/lib/coradoc/asciidoc/serializer/serializers/admonition.rb +19 -0
- data/lib/coradoc/asciidoc/serializer/serializers/attribute.rb +23 -0
- data/lib/coradoc/asciidoc/serializer/serializers/attribute_list.rb +40 -0
- data/lib/coradoc/asciidoc/serializer/serializers/attribute_list_attribute.rb +18 -0
- data/lib/coradoc/asciidoc/serializer/serializers/audio.rb +33 -0
- data/lib/coradoc/asciidoc/serializer/serializers/author.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/base.rb +152 -0
- data/lib/coradoc/asciidoc/serializer/serializers/bibliography.rb +35 -0
- data/lib/coradoc/asciidoc/serializer/serializers/bibliography_entry.rb +24 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/core.rb +70 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/example.rb +17 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/listing.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/literal.rb +17 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/open.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/pass.rb +17 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/quote.rb +17 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/reviewer_comment.rb +17 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/side.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/source_code.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block.rb +23 -0
- data/lib/coradoc/asciidoc/serializer/serializers/break.rb +18 -0
- data/lib/coradoc/asciidoc/serializer/serializers/comment_block.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/comment_line.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/document.rb +65 -0
- data/lib/coradoc/asciidoc/serializer/serializers/document_attributes.rb +21 -0
- data/lib/coradoc/asciidoc/serializer/serializers/header.rb +24 -0
- data/lib/coradoc/asciidoc/serializer/serializers/highlight.rb +23 -0
- data/lib/coradoc/asciidoc/serializer/serializers/image/core.rb +30 -0
- data/lib/coradoc/asciidoc/serializer/serializers/image.rb +14 -0
- data/lib/coradoc/asciidoc/serializer/serializers/include.rb +19 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/anchor.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/attribute_reference.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/bold.rb +26 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/cross_reference.rb +30 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/cross_reference_arg.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/footnote.rb +24 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/hard_line_break.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/highlight.rb +26 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/italic.rb +26 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/link.rb +38 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/monospace.rb +26 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/quotation.rb +21 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/small.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/span.rb +35 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/stem.rb +23 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/strikethrough.rb +29 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/subscript.rb +29 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/superscript.rb +26 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/underline.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline.rb +32 -0
- data/lib/coradoc/asciidoc/serializer/serializers/line_break.rb +18 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list/core.rb +47 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list/definition.rb +35 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list/definition_item.rb +38 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list/item.rb +120 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list/ordered.rb +24 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list/unordered.rb +29 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list.rb +19 -0
- data/lib/coradoc/asciidoc/serializer/serializers/named_attribute.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/paragraph.rb +65 -0
- data/lib/coradoc/asciidoc/serializer/serializers/reviewer_note.rb +28 -0
- data/lib/coradoc/asciidoc/serializer/serializers/revision.rb +26 -0
- data/lib/coradoc/asciidoc/serializer/serializers/section.rb +37 -0
- data/lib/coradoc/asciidoc/serializer/serializers/table.rb +24 -0
- data/lib/coradoc/asciidoc/serializer/serializers/table_cell.rb +75 -0
- data/lib/coradoc/asciidoc/serializer/serializers/table_row.rb +24 -0
- data/lib/coradoc/asciidoc/serializer/serializers/tag.rb +19 -0
- data/lib/coradoc/asciidoc/serializer/serializers/term.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/text_element.rb +23 -0
- data/lib/coradoc/asciidoc/serializer/serializers/title.rb +55 -0
- data/lib/coradoc/asciidoc/serializer/serializers/video.rb +33 -0
- data/lib/coradoc/asciidoc/serializer/spacing_strategy.rb +70 -0
- data/lib/coradoc/asciidoc/serializer.rb +75 -0
- data/lib/coradoc/asciidoc/transform/from_core_model.rb +502 -0
- data/lib/coradoc/asciidoc/transform/from_core_model_registrations.rb +126 -0
- data/lib/coradoc/asciidoc/transform/registry.rb +146 -0
- data/lib/coradoc/asciidoc/transform/to_core_model.rb +564 -0
- data/lib/coradoc/asciidoc/transform/to_core_model_registrations.rb +257 -0
- data/lib/coradoc/asciidoc/transform.rb +13 -0
- data/lib/coradoc/asciidoc/transformer/block_rules.rb +101 -0
- data/lib/coradoc/asciidoc/transformer/header_rules.rb +91 -0
- data/lib/coradoc/asciidoc/transformer/inline_rules.rb +179 -0
- data/lib/coradoc/asciidoc/transformer/list_rules.rb +131 -0
- data/lib/coradoc/asciidoc/transformer/misc_rules.rb +196 -0
- data/lib/coradoc/asciidoc/transformer/structural_rules.rb +216 -0
- data/lib/coradoc/asciidoc/transformer/text_rules.rb +107 -0
- data/lib/coradoc/asciidoc/transformer.rb +406 -0
- data/lib/coradoc/asciidoc/version.rb +7 -0
- data/lib/coradoc/asciidoc.rb +148 -0
- data/lib/coradoc/util/asciidoc.rb +71 -0
- data/lib/coradoc/util.rb +8 -0
- metadata +343 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Image
|
|
7
|
+
class Core < Coradoc::AsciiDoc::Model::Base
|
|
8
|
+
class AttributeList < Coradoc::AsciiDoc::Model::AttributeList
|
|
9
|
+
extend AttributeList::Matchers
|
|
10
|
+
|
|
11
|
+
def named_validators
|
|
12
|
+
super.merge(
|
|
13
|
+
{
|
|
14
|
+
id: String,
|
|
15
|
+
alt: String,
|
|
16
|
+
fallback: String,
|
|
17
|
+
title: String,
|
|
18
|
+
width: Integer,
|
|
19
|
+
height: Integer,
|
|
20
|
+
link: String, # change to that URI regexp
|
|
21
|
+
window: String,
|
|
22
|
+
scale: Integer,
|
|
23
|
+
scaledwidth: /\A[0-9]{1,2}%\z/,
|
|
24
|
+
pdfwidth: /\A[0-9]+vw\z/,
|
|
25
|
+
role: many(
|
|
26
|
+
/.*/,
|
|
27
|
+
'left',
|
|
28
|
+
'right',
|
|
29
|
+
'th',
|
|
30
|
+
'thumb',
|
|
31
|
+
'related',
|
|
32
|
+
'rel'
|
|
33
|
+
),
|
|
34
|
+
opts: many('nofollow', 'noopener', 'inline', 'interactive')
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Image
|
|
7
|
+
# Base class for image elements in AsciiDoc documents.
|
|
8
|
+
#
|
|
9
|
+
# Images can be block-level (standalone paragraphs) or inline (within text).
|
|
10
|
+
# This base class provides common functionality for both types.
|
|
11
|
+
#
|
|
12
|
+
# @!attribute [r] id
|
|
13
|
+
# @return [String, nil] Optional identifier for the image
|
|
14
|
+
#
|
|
15
|
+
# @!attribute [r] title
|
|
16
|
+
# @return [String, nil] Optional image title/alt text
|
|
17
|
+
#
|
|
18
|
+
# @!attribute [r] src
|
|
19
|
+
# @return [String] The image source URL or path
|
|
20
|
+
#
|
|
21
|
+
# @!attribute [r] attributes
|
|
22
|
+
# @return [Coradoc::AsciiDoc::Model::Image::Core::AttributeList] Image-specific attributes
|
|
23
|
+
#
|
|
24
|
+
# @!attribute [r] annotate_missing
|
|
25
|
+
# @return [String, nil] Annotation text for missing images
|
|
26
|
+
#
|
|
27
|
+
# @!attribute [r] line_break
|
|
28
|
+
# @return [String] Line break character (default: "")
|
|
29
|
+
#
|
|
30
|
+
# @!attribute [r] colons
|
|
31
|
+
# @return [String, nil] Colon positioning for attributes
|
|
32
|
+
#
|
|
33
|
+
# @see Coradoc::AsciiDoc::Model::Image::BlockImage Block-level images
|
|
34
|
+
# @see Coradoc::AsciiDoc::Model::Image::InlineImage Inline images
|
|
35
|
+
#
|
|
36
|
+
class Core < Coradoc::AsciiDoc::Model::Base
|
|
37
|
+
# Autoload nested AttributeList class
|
|
38
|
+
autoload :AttributeList, 'coradoc/asciidoc/model/image/core/attribute_list'
|
|
39
|
+
|
|
40
|
+
include Coradoc::AsciiDoc::Model::Anchorable
|
|
41
|
+
|
|
42
|
+
attribute :id, :string
|
|
43
|
+
attribute :title, :string
|
|
44
|
+
attribute :src, :string
|
|
45
|
+
attribute :attributes,
|
|
46
|
+
Coradoc::AsciiDoc::Model::Image::Core::AttributeList,
|
|
47
|
+
default: lambda {
|
|
48
|
+
::Coradoc::AsciiDoc::Model::AttributeList.new
|
|
49
|
+
}
|
|
50
|
+
attribute :annotate_missing, :string
|
|
51
|
+
attribute :line_break, :string, default: -> { '' }
|
|
52
|
+
attribute :colons, :string
|
|
53
|
+
|
|
54
|
+
# Aliases for common attribute accessors
|
|
55
|
+
alias path src
|
|
56
|
+
alias alt title
|
|
57
|
+
|
|
58
|
+
# Custom to_adoc implementation that uses ElementRegistry directly
|
|
59
|
+
# to avoid recursion issues with image serialization.
|
|
60
|
+
#
|
|
61
|
+
# @return [String] AsciiDoc representation of this image
|
|
62
|
+
def to_adoc
|
|
63
|
+
# Use the registered serializer rather than Coradoc::AsciiDoc::Serializer.serialize
|
|
64
|
+
# to avoid recursion
|
|
65
|
+
serializer_class = Coradoc::AsciiDoc::Serializer::ElementRegistry.lookup(self.class)
|
|
66
|
+
serializer_class.new.to_adoc(self)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Image
|
|
7
|
+
class InlineImage < Coradoc::AsciiDoc::Model::Image::Core
|
|
8
|
+
def inline?
|
|
9
|
+
true
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
attribute :colons, :string, default: -> { ':' }
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Image
|
|
7
|
+
# Autoload image types lazily
|
|
8
|
+
autoload :Core, 'coradoc/asciidoc/model/image/core'
|
|
9
|
+
autoload :InlineImage, 'coradoc/asciidoc/model/image/inline_image'
|
|
10
|
+
autoload :BlockImage, 'coradoc/asciidoc/model/image/block_image'
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
autoload :Resolvable, "#{__dir__}/resolvable"
|
|
7
|
+
|
|
8
|
+
# Include directive element for AsciiDoc documents.
|
|
9
|
+
#
|
|
10
|
+
# Include directives allow incorporating content from external files
|
|
11
|
+
# into the current document at processing time.
|
|
12
|
+
#
|
|
13
|
+
# @!attribute [r] path
|
|
14
|
+
# @return [String] The path to the file to include
|
|
15
|
+
#
|
|
16
|
+
# @!attribute [r] attributes
|
|
17
|
+
# @return [Coradoc::AsciiDoc::Model::AttributeList] Include attributes
|
|
18
|
+
#
|
|
19
|
+
# @!attribute [r] line_break
|
|
20
|
+
# @return [String] Line break character (default: "\n")
|
|
21
|
+
#
|
|
22
|
+
# @example Create an include directive
|
|
23
|
+
# inc = Coradoc::AsciiDoc::Model::Include.new
|
|
24
|
+
# inc.path = "chapter1.adoc"
|
|
25
|
+
# inc.to_adoc # => "include::chapter1.adoc[]\n"
|
|
26
|
+
#
|
|
27
|
+
class Include < Base
|
|
28
|
+
include Resolvable
|
|
29
|
+
|
|
30
|
+
attribute :path, :string
|
|
31
|
+
attribute :attributes, Coradoc::AsciiDoc::Model::AttributeList, default: lambda {
|
|
32
|
+
Coradoc::AsciiDoc::Model::AttributeList.new
|
|
33
|
+
}
|
|
34
|
+
attribute :line_break, :string, default: -> { "\n" }
|
|
35
|
+
|
|
36
|
+
# @return [String] the path to the included file
|
|
37
|
+
def reference_path
|
|
38
|
+
path
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# @return [Symbol] the reference type
|
|
42
|
+
def reference_type
|
|
43
|
+
:include
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @return [Hash] include options (leveloffset, lines, tags, etc.)
|
|
47
|
+
def reference_options
|
|
48
|
+
options = {}
|
|
49
|
+
if attributes.is_a?(Coradoc::AsciiDoc::Model::AttributeList)
|
|
50
|
+
attributes.named.each do |attr|
|
|
51
|
+
case attr.name.to_s
|
|
52
|
+
when 'leveloffset'
|
|
53
|
+
options[:leveloffset] = attr.value
|
|
54
|
+
when 'lines'
|
|
55
|
+
options[:lines] = attr.value
|
|
56
|
+
when 'tags'
|
|
57
|
+
options[:tags] = attr.value.to_s.split(';')
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
options
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Inline
|
|
7
|
+
# Anchor inline element for creating cross-reference targets in AsciiDoc documents.
|
|
8
|
+
#
|
|
9
|
+
# Anchors create reference points that can be linked to from other parts
|
|
10
|
+
# of the document using cross-references.
|
|
11
|
+
#
|
|
12
|
+
# @!attribute [r] id
|
|
13
|
+
# @return [String] The anchor identifier
|
|
14
|
+
#
|
|
15
|
+
# @example Create an anchor
|
|
16
|
+
# anchor = Coradoc::AsciiDoc::Model::Inline::Anchor.new
|
|
17
|
+
# anchor.id = "section1"
|
|
18
|
+
# anchor.to_adoc # => "[[section1]]"
|
|
19
|
+
#
|
|
20
|
+
# @example Validation fails without id
|
|
21
|
+
# anchor = Coradoc::AsciiDoc::Model::Inline::Anchor.new
|
|
22
|
+
# anchor.validate # Returns validation errors
|
|
23
|
+
#
|
|
24
|
+
# @see Coradoc::AsciiDoc::Model::Anchorable Mixin for adding anchor support
|
|
25
|
+
# @see Coradoc::AsciiDoc::Model::Inline::CrossReference Linking to anchors
|
|
26
|
+
#
|
|
27
|
+
class Anchor < Base
|
|
28
|
+
attribute :id, :string
|
|
29
|
+
|
|
30
|
+
def validate
|
|
31
|
+
errors = super
|
|
32
|
+
return unless id.nil? || id.empty?
|
|
33
|
+
|
|
34
|
+
errors <<
|
|
35
|
+
Lutaml::Model::Error.new('ID cannot be nil or empty for Anchor')
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Inline
|
|
7
|
+
# Attribute reference inline element for AsciiDoc documents.
|
|
8
|
+
#
|
|
9
|
+
# Attribute references insert the value of a document attribute.
|
|
10
|
+
#
|
|
11
|
+
# @!attribute [r] name
|
|
12
|
+
# @return [String] The attribute name to reference
|
|
13
|
+
#
|
|
14
|
+
# @example Create an attribute reference
|
|
15
|
+
# ref = Coradoc::AsciiDoc::Model::Inline::AttributeReference.new
|
|
16
|
+
# ref.name = "author"
|
|
17
|
+
# ref.to_adoc # => "{author}"
|
|
18
|
+
#
|
|
19
|
+
class AttributeReference < Base
|
|
20
|
+
attribute :name, :string
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Inline
|
|
7
|
+
# Bold inline text formatting for AsciiDoc documents.
|
|
8
|
+
#
|
|
9
|
+
# Bold text is rendered with asterisks: *bold text*.
|
|
10
|
+
#
|
|
11
|
+
# @!attribute [r] content
|
|
12
|
+
# @return [String, Array<Lutaml::Model::Serializable>] The text content to format as bold
|
|
13
|
+
#
|
|
14
|
+
# @!attribute [r] unconstrained
|
|
15
|
+
# @return [Boolean] Whether to use unconstrained formatting (default: true)
|
|
16
|
+
#
|
|
17
|
+
# @example Create bold text
|
|
18
|
+
# bold = Coradoc::AsciiDoc::Model::Inline::Bold.new
|
|
19
|
+
# bold.content = "Important text"
|
|
20
|
+
# bold.to_adoc # => "*Important text*"
|
|
21
|
+
#
|
|
22
|
+
# @see Coradoc::AsciiDoc::Model::Inline::Italic Italic text
|
|
23
|
+
# @see Coradoc::AsciiDoc::Model::Inline::Monospace Monospace text
|
|
24
|
+
#
|
|
25
|
+
class Bold < Base
|
|
26
|
+
attribute :content,
|
|
27
|
+
Lutaml::Model::Serializable,
|
|
28
|
+
default: -> { nil },
|
|
29
|
+
polymorphic: [
|
|
30
|
+
Lutaml::Model::Type::String,
|
|
31
|
+
:array
|
|
32
|
+
]
|
|
33
|
+
attribute :unconstrained, :boolean, default: -> { true }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Inline
|
|
7
|
+
# Cross-reference (xref) inline element for AsciiDoc documents.
|
|
8
|
+
#
|
|
9
|
+
# Cross-references create links to other sections or documents.
|
|
10
|
+
#
|
|
11
|
+
# @!attribute [r] href
|
|
12
|
+
# @return [String] The target reference ID
|
|
13
|
+
#
|
|
14
|
+
# @!attribute [r] args
|
|
15
|
+
# @return [Array<String>] Optional reference arguments
|
|
16
|
+
#
|
|
17
|
+
# @example Create a cross-reference
|
|
18
|
+
# xref = Coradoc::AsciiDoc::Model::Inline::CrossReference.new
|
|
19
|
+
# xref.href = "section-id"
|
|
20
|
+
# xref.to_adoc # => "<<section-id>>"
|
|
21
|
+
#
|
|
22
|
+
class CrossReference < Base
|
|
23
|
+
attribute :href, :string
|
|
24
|
+
attribute :args, :string, collection: true
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Inline
|
|
7
|
+
class CrossReferenceArg < Base
|
|
8
|
+
attribute :key, :string
|
|
9
|
+
attribute :delimiter, :string
|
|
10
|
+
attribute :value, :string
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Inline
|
|
7
|
+
# Footnote inline element for AsciiDoc documents.
|
|
8
|
+
#
|
|
9
|
+
# Footnotes are referenced with numeric IDs: footnote:[text] or footnoteref:[id].
|
|
10
|
+
#
|
|
11
|
+
# @!attribute [r] text
|
|
12
|
+
# @return [String] The footnote text content
|
|
13
|
+
#
|
|
14
|
+
# @!attribute [r] id
|
|
15
|
+
# @return [String, nil] Optional footnote reference ID
|
|
16
|
+
#
|
|
17
|
+
# @example Create a footnote
|
|
18
|
+
# footnote = Coradoc::AsciiDoc::Model::Inline::Footnote.new
|
|
19
|
+
# footnote.text = "Additional information"
|
|
20
|
+
# footnote.to_adoc # => "footnote:[Additional information]"
|
|
21
|
+
#
|
|
22
|
+
# @example Create a footnote reference
|
|
23
|
+
# footnote = Coradoc::AsciiDoc::Model::Inline::Footnote.new
|
|
24
|
+
# footnote.id = "note1"
|
|
25
|
+
# footnote.to_adoc # => "footnoteref:[note1]"
|
|
26
|
+
#
|
|
27
|
+
class Footnote < Base
|
|
28
|
+
attribute :text, :string
|
|
29
|
+
attribute :id, :string
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Inline
|
|
7
|
+
# Hard line break inline element for AsciiDoc documents.
|
|
8
|
+
#
|
|
9
|
+
# Hard line breaks force a line break at a specific point.
|
|
10
|
+
# Rendered as a plus sign at the end of a line: +.
|
|
11
|
+
#
|
|
12
|
+
# @example Create a hard line break
|
|
13
|
+
# break = Coradoc::AsciiDoc::Model::Inline::HardLineBreak.new
|
|
14
|
+
# break.to_adoc # => " +"
|
|
15
|
+
#
|
|
16
|
+
class HardLineBreak < Base
|
|
17
|
+
def inline?
|
|
18
|
+
:hardbreak
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Inline
|
|
7
|
+
# Highlight (marked) inline text formatting for AsciiDoc documents.
|
|
8
|
+
#
|
|
9
|
+
# Highlighted text is rendered with hash marks: #highlighted text#.
|
|
10
|
+
# Used to draw attention to specific text.
|
|
11
|
+
#
|
|
12
|
+
# @!attribute [r] content
|
|
13
|
+
# @return [String, Array<Lutaml::Model::Serializable>] The text content to highlight
|
|
14
|
+
#
|
|
15
|
+
# @!attribute [r] unconstrained
|
|
16
|
+
# @return [Boolean] Whether to use unconstrained formatting (default: false)
|
|
17
|
+
#
|
|
18
|
+
# @example Create highlighted text
|
|
19
|
+
# highlight = Coradoc::AsciiDoc::Model::Inline::Highlight.new
|
|
20
|
+
# highlight.content = "Important"
|
|
21
|
+
# highlight.to_adoc # => "#Important#"
|
|
22
|
+
#
|
|
23
|
+
class Highlight < Base
|
|
24
|
+
attribute :content,
|
|
25
|
+
Lutaml::Model::Serializable,
|
|
26
|
+
default: -> { nil },
|
|
27
|
+
polymorphic: [
|
|
28
|
+
Lutaml::Model::Type::String,
|
|
29
|
+
:array
|
|
30
|
+
]
|
|
31
|
+
attribute :unconstrained, :boolean, default: -> { false }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Inline
|
|
7
|
+
# Italic inline text formatting for AsciiDoc documents.
|
|
8
|
+
#
|
|
9
|
+
# Italic text is rendered with underscores: _italic text_.
|
|
10
|
+
#
|
|
11
|
+
# @!attribute [r] content
|
|
12
|
+
# @return [String, Array<Lutaml::Model::Serializable>] The text content to format as italic
|
|
13
|
+
#
|
|
14
|
+
# @!attribute [r] unconstrained
|
|
15
|
+
# @return [Boolean] Whether to use unconstrained formatting (default: true)
|
|
16
|
+
#
|
|
17
|
+
# @example Create italic text
|
|
18
|
+
# italic = Coradoc::AsciiDoc::Model::Inline::Italic.new
|
|
19
|
+
# italic.content = "Emphasized text"
|
|
20
|
+
# italic.to_adoc # => "_Emphasized text_"
|
|
21
|
+
#
|
|
22
|
+
# @see Coradoc::AsciiDoc::Model::Inline::Bold Bold text
|
|
23
|
+
# @see Coradoc::AsciiDoc::Model::Inline::Monospace Monospace text
|
|
24
|
+
#
|
|
25
|
+
class Italic < Base
|
|
26
|
+
attribute :content,
|
|
27
|
+
Lutaml::Model::Serializable,
|
|
28
|
+
default: -> { nil },
|
|
29
|
+
polymorphic: [
|
|
30
|
+
Lutaml::Model::Type::String,
|
|
31
|
+
:array
|
|
32
|
+
]
|
|
33
|
+
attribute :unconstrained, :boolean, default: -> { true }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'uri'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module AsciiDoc
|
|
7
|
+
module Model
|
|
8
|
+
module Inline
|
|
9
|
+
# Link inline element for AsciiDoc documents.
|
|
10
|
+
#
|
|
11
|
+
# Links can be external URLs or internal references.
|
|
12
|
+
#
|
|
13
|
+
# @!attribute [r] path
|
|
14
|
+
# @return [String] The URL or path the link points to
|
|
15
|
+
#
|
|
16
|
+
# @!attribute [r] title
|
|
17
|
+
# @return [String, nil] Optional tooltip text for the link
|
|
18
|
+
#
|
|
19
|
+
# @!attribute [r] name
|
|
20
|
+
# @return [String, nil] Optional link text/alias
|
|
21
|
+
#
|
|
22
|
+
# @!attribute [r] right_constrain
|
|
23
|
+
# @return [Boolean] Whether to constrain the link on the right (default: false)
|
|
24
|
+
#
|
|
25
|
+
# @example Create an external link
|
|
26
|
+
# link = Coradoc::AsciiDoc::Model::Inline::Link.new
|
|
27
|
+
# link.path = "https://example.com"
|
|
28
|
+
# link.name = "Example Site"
|
|
29
|
+
# link.to_adoc # => "https://example.com[Example Site]"
|
|
30
|
+
#
|
|
31
|
+
# @example Create a link with title
|
|
32
|
+
# link = Coradoc::AsciiDoc::Model::Inline::Link.new
|
|
33
|
+
# link.path = "https://example.com"
|
|
34
|
+
# link.title = "Visit example"
|
|
35
|
+
# link.name = "Click here"
|
|
36
|
+
#
|
|
37
|
+
class Link < Base
|
|
38
|
+
attribute :path, :string
|
|
39
|
+
attribute :title, :string
|
|
40
|
+
attribute :name, :string
|
|
41
|
+
attribute :right_constrain, :boolean, default: -> { false }
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Inline
|
|
7
|
+
# Monospace inline text formatting for AsciiDoc documents.
|
|
8
|
+
#
|
|
9
|
+
# Monospace text is rendered with backticks: `monospace text`.
|
|
10
|
+
# Used for code, commands, and technical terms.
|
|
11
|
+
#
|
|
12
|
+
# @!attribute [r] content
|
|
13
|
+
# @return [String, Array<Lutaml::Model::Serializable>] The text content to format as monospace
|
|
14
|
+
#
|
|
15
|
+
# @!attribute [r] unconstrained
|
|
16
|
+
# @return [Boolean] Whether to use unconstrained formatting (default: true)
|
|
17
|
+
#
|
|
18
|
+
# @example Create monospace text
|
|
19
|
+
# mono = Coradoc::AsciiDoc::Model::Inline::Monospace.new
|
|
20
|
+
# mono.content = "code"
|
|
21
|
+
# mono.to_adoc # => "`code`"
|
|
22
|
+
#
|
|
23
|
+
# @see Coradoc::AsciiDoc::Model::Inline::Bold Bold text
|
|
24
|
+
# @see Coradoc::AsciiDoc::Model::Inline::Italic Italic text
|
|
25
|
+
#
|
|
26
|
+
class Monospace < Base
|
|
27
|
+
attribute :content,
|
|
28
|
+
Lutaml::Model::Serializable,
|
|
29
|
+
default: -> { nil },
|
|
30
|
+
polymorphic: [
|
|
31
|
+
Lutaml::Model::Type::String,
|
|
32
|
+
:array
|
|
33
|
+
]
|
|
34
|
+
attribute :unconstrained, :boolean, default: -> { true }
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Inline
|
|
7
|
+
# Quotation (single-quoted text) inline element for AsciiDoc documents.
|
|
8
|
+
#
|
|
9
|
+
# Quoted text is rendered with single backticks: `quoted text`.
|
|
10
|
+
#
|
|
11
|
+
# @!attribute [r] content
|
|
12
|
+
# @return [String] The text content to quote
|
|
13
|
+
#
|
|
14
|
+
# @example Create quoted text
|
|
15
|
+
# quote = Coradoc::AsciiDoc::Model::Inline::Quotation.new
|
|
16
|
+
# quote.content = "He said"
|
|
17
|
+
# quote.to_adoc # => "`He said`"
|
|
18
|
+
#
|
|
19
|
+
class Quotation < Base
|
|
20
|
+
attribute :content, :string
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Model
|
|
6
|
+
module Inline
|
|
7
|
+
# Small text inline element for AsciiDoc documents.
|
|
8
|
+
#
|
|
9
|
+
# Small text is rendered with a size role: [.small]#text#.
|
|
10
|
+
#
|
|
11
|
+
# @!attribute [r] text
|
|
12
|
+
# @return [String] The text content to make smaller
|
|
13
|
+
#
|
|
14
|
+
# @example Create small text
|
|
15
|
+
# small = Coradoc::AsciiDoc::Model::Inline::Small.new
|
|
16
|
+
# small.text = "Fine print"
|
|
17
|
+
# small.to_adoc # => "[.small]#Fine print#"
|
|
18
|
+
#
|
|
19
|
+
class Small < Base
|
|
20
|
+
attribute :text, :string
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|