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.
Files changed (217) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/lib/coradoc/asciidoc/model/admonition.rb +37 -0
  4. data/lib/coradoc/asciidoc/model/anchorable.rb +64 -0
  5. data/lib/coradoc/asciidoc/model/attached.rb +26 -0
  6. data/lib/coradoc/asciidoc/model/attribute.rb +22 -0
  7. data/lib/coradoc/asciidoc/model/attribute_list/matchers.rb +45 -0
  8. data/lib/coradoc/asciidoc/model/attribute_list.rb +230 -0
  9. data/lib/coradoc/asciidoc/model/attribute_list_attribute.rb +11 -0
  10. data/lib/coradoc/asciidoc/model/audio.rb +44 -0
  11. data/lib/coradoc/asciidoc/model/author.rb +36 -0
  12. data/lib/coradoc/asciidoc/model/base.rb +141 -0
  13. data/lib/coradoc/asciidoc/model/bibliography.rb +37 -0
  14. data/lib/coradoc/asciidoc/model/bibliography_entry.rb +38 -0
  15. data/lib/coradoc/asciidoc/model/block/core.rb +139 -0
  16. data/lib/coradoc/asciidoc/model/block/example.rb +14 -0
  17. data/lib/coradoc/asciidoc/model/block/listing.rb +14 -0
  18. data/lib/coradoc/asciidoc/model/block/literal.rb +14 -0
  19. data/lib/coradoc/asciidoc/model/block/open.rb +14 -0
  20. data/lib/coradoc/asciidoc/model/block/pass.rb +14 -0
  21. data/lib/coradoc/asciidoc/model/block/quote.rb +14 -0
  22. data/lib/coradoc/asciidoc/model/block/reviewer_comment.rb +14 -0
  23. data/lib/coradoc/asciidoc/model/block/side.rb +14 -0
  24. data/lib/coradoc/asciidoc/model/block/source_code.rb +14 -0
  25. data/lib/coradoc/asciidoc/model/block.rb +21 -0
  26. data/lib/coradoc/asciidoc/model/break.rb +33 -0
  27. data/lib/coradoc/asciidoc/model/comment_block.rb +33 -0
  28. data/lib/coradoc/asciidoc/model/comment_line.rb +30 -0
  29. data/lib/coradoc/asciidoc/model/content_list.rb +334 -0
  30. data/lib/coradoc/asciidoc/model/document.rb +197 -0
  31. data/lib/coradoc/asciidoc/model/document_attributes.rb +43 -0
  32. data/lib/coradoc/asciidoc/model/glossaries.rb +11 -0
  33. data/lib/coradoc/asciidoc/model/header.rb +57 -0
  34. data/lib/coradoc/asciidoc/model/highlight.rb +11 -0
  35. data/lib/coradoc/asciidoc/model/image/block_image/attribute_list.rb +23 -0
  36. data/lib/coradoc/asciidoc/model/image/block_image.rb +25 -0
  37. data/lib/coradoc/asciidoc/model/image/core/attribute_list.rb +43 -0
  38. data/lib/coradoc/asciidoc/model/image/core.rb +72 -0
  39. data/lib/coradoc/asciidoc/model/image/inline_image.rb +17 -0
  40. data/lib/coradoc/asciidoc/model/image.rb +14 -0
  41. data/lib/coradoc/asciidoc/model/include.rb +66 -0
  42. data/lib/coradoc/asciidoc/model/inline/anchor.rb +41 -0
  43. data/lib/coradoc/asciidoc/model/inline/attribute_reference.rb +25 -0
  44. data/lib/coradoc/asciidoc/model/inline/base.rb +15 -0
  45. data/lib/coradoc/asciidoc/model/inline/bold.rb +38 -0
  46. data/lib/coradoc/asciidoc/model/inline/cross_reference.rb +29 -0
  47. data/lib/coradoc/asciidoc/model/inline/cross_reference_arg.rb +15 -0
  48. data/lib/coradoc/asciidoc/model/inline/footnote.rb +34 -0
  49. data/lib/coradoc/asciidoc/model/inline/hard_line_break.rb +24 -0
  50. data/lib/coradoc/asciidoc/model/inline/highlight.rb +36 -0
  51. data/lib/coradoc/asciidoc/model/inline/italic.rb +38 -0
  52. data/lib/coradoc/asciidoc/model/inline/link.rb +46 -0
  53. data/lib/coradoc/asciidoc/model/inline/monospace.rb +39 -0
  54. data/lib/coradoc/asciidoc/model/inline/quotation.rb +25 -0
  55. data/lib/coradoc/asciidoc/model/inline/small.rb +25 -0
  56. data/lib/coradoc/asciidoc/model/inline/span.rb +38 -0
  57. data/lib/coradoc/asciidoc/model/inline/stem.rb +24 -0
  58. data/lib/coradoc/asciidoc/model/inline/strikethrough.rb +39 -0
  59. data/lib/coradoc/asciidoc/model/inline/subscript.rb +33 -0
  60. data/lib/coradoc/asciidoc/model/inline/superscript.rb +33 -0
  61. data/lib/coradoc/asciidoc/model/inline/underline.rb +25 -0
  62. data/lib/coradoc/asciidoc/model/inline.rb +31 -0
  63. data/lib/coradoc/asciidoc/model/line_break.rb +11 -0
  64. data/lib/coradoc/asciidoc/model/list/core.rb +61 -0
  65. data/lib/coradoc/asciidoc/model/list/definition.rb +27 -0
  66. data/lib/coradoc/asciidoc/model/list/definition_item.rb +43 -0
  67. data/lib/coradoc/asciidoc/model/list/item.rb +72 -0
  68. data/lib/coradoc/asciidoc/model/list/nestable.rb +14 -0
  69. data/lib/coradoc/asciidoc/model/list/ordered.rb +34 -0
  70. data/lib/coradoc/asciidoc/model/list/unordered.rb +34 -0
  71. data/lib/coradoc/asciidoc/model/list.rb +29 -0
  72. data/lib/coradoc/asciidoc/model/named_attribute.rb +12 -0
  73. data/lib/coradoc/asciidoc/model/paragraph.rb +59 -0
  74. data/lib/coradoc/asciidoc/model/rejected_positional_attribute.rb +12 -0
  75. data/lib/coradoc/asciidoc/model/resolvable.rb +71 -0
  76. data/lib/coradoc/asciidoc/model/resolver.rb +430 -0
  77. data/lib/coradoc/asciidoc/model/reviewer_note.rb +54 -0
  78. data/lib/coradoc/asciidoc/model/revision.rb +47 -0
  79. data/lib/coradoc/asciidoc/model/section.rb +109 -0
  80. data/lib/coradoc/asciidoc/model/serialization/asciidoc_adapter.rb +28 -0
  81. data/lib/coradoc/asciidoc/model/serialization/asciidoc_mapping.rb +42 -0
  82. data/lib/coradoc/asciidoc/model/serialization/asciidoc_mapping_rule.rb +41 -0
  83. data/lib/coradoc/asciidoc/model/serialization/asciidoc_transform.rb +211 -0
  84. data/lib/coradoc/asciidoc/model/serialization/errors.rb +57 -0
  85. data/lib/coradoc/asciidoc/model/serialization.rb +39 -0
  86. data/lib/coradoc/asciidoc/model/spacing.rb +282 -0
  87. data/lib/coradoc/asciidoc/model/table.rb +44 -0
  88. data/lib/coradoc/asciidoc/model/table_cell.rb +122 -0
  89. data/lib/coradoc/asciidoc/model/table_row.rb +26 -0
  90. data/lib/coradoc/asciidoc/model/tag.rb +36 -0
  91. data/lib/coradoc/asciidoc/model/term.rb +48 -0
  92. data/lib/coradoc/asciidoc/model/text_element.rb +66 -0
  93. data/lib/coradoc/asciidoc/model/title.rb +85 -0
  94. data/lib/coradoc/asciidoc/model/video/attribute_list.rb +43 -0
  95. data/lib/coradoc/asciidoc/model/video.rb +49 -0
  96. data/lib/coradoc/asciidoc/model.rb +75 -0
  97. data/lib/coradoc/asciidoc/parse_error.rb +161 -0
  98. data/lib/coradoc/asciidoc/parser/admonition.rb +26 -0
  99. data/lib/coradoc/asciidoc/parser/attribute_list.rb +110 -0
  100. data/lib/coradoc/asciidoc/parser/base.rb +159 -0
  101. data/lib/coradoc/asciidoc/parser/bibliography.rb +31 -0
  102. data/lib/coradoc/asciidoc/parser/block.rb +186 -0
  103. data/lib/coradoc/asciidoc/parser/block_assembler.rb +183 -0
  104. data/lib/coradoc/asciidoc/parser/cache.rb +155 -0
  105. data/lib/coradoc/asciidoc/parser/citation.rb +32 -0
  106. data/lib/coradoc/asciidoc/parser/content.rb +76 -0
  107. data/lib/coradoc/asciidoc/parser/document_attributes.rb +27 -0
  108. data/lib/coradoc/asciidoc/parser/fix_files.rb +76 -0
  109. data/lib/coradoc/asciidoc/parser/header.rb +31 -0
  110. data/lib/coradoc/asciidoc/parser/inline.rb +199 -0
  111. data/lib/coradoc/asciidoc/parser/list.rb +130 -0
  112. data/lib/coradoc/asciidoc/parser/metadata_detector.rb +164 -0
  113. data/lib/coradoc/asciidoc/parser/paragraph.rb +64 -0
  114. data/lib/coradoc/asciidoc/parser/section.rb +62 -0
  115. data/lib/coradoc/asciidoc/parser/stem.rb +19 -0
  116. data/lib/coradoc/asciidoc/parser/table.rb +166 -0
  117. data/lib/coradoc/asciidoc/parser/term.rb +70 -0
  118. data/lib/coradoc/asciidoc/parser/text.rb +156 -0
  119. data/lib/coradoc/asciidoc/parser.rb +10 -0
  120. data/lib/coradoc/asciidoc/serializer/adoc_serializer.rb +86 -0
  121. data/lib/coradoc/asciidoc/serializer/element_registry.rb +95 -0
  122. data/lib/coradoc/asciidoc/serializer/fallback_serializer.rb +21 -0
  123. data/lib/coradoc/asciidoc/serializer/formatter.rb +144 -0
  124. data/lib/coradoc/asciidoc/serializer/registrations.rb +108 -0
  125. data/lib/coradoc/asciidoc/serializer/serialization_context.rb +238 -0
  126. data/lib/coradoc/asciidoc/serializer/serializers/admonition.rb +19 -0
  127. data/lib/coradoc/asciidoc/serializer/serializers/attribute.rb +23 -0
  128. data/lib/coradoc/asciidoc/serializer/serializers/attribute_list.rb +40 -0
  129. data/lib/coradoc/asciidoc/serializer/serializers/attribute_list_attribute.rb +18 -0
  130. data/lib/coradoc/asciidoc/serializer/serializers/audio.rb +33 -0
  131. data/lib/coradoc/asciidoc/serializer/serializers/author.rb +20 -0
  132. data/lib/coradoc/asciidoc/serializer/serializers/base.rb +152 -0
  133. data/lib/coradoc/asciidoc/serializer/serializers/bibliography.rb +35 -0
  134. data/lib/coradoc/asciidoc/serializer/serializers/bibliography_entry.rb +24 -0
  135. data/lib/coradoc/asciidoc/serializer/serializers/block/core.rb +70 -0
  136. data/lib/coradoc/asciidoc/serializer/serializers/block/example.rb +17 -0
  137. data/lib/coradoc/asciidoc/serializer/serializers/block/listing.rb +22 -0
  138. data/lib/coradoc/asciidoc/serializer/serializers/block/literal.rb +17 -0
  139. data/lib/coradoc/asciidoc/serializer/serializers/block/open.rb +22 -0
  140. data/lib/coradoc/asciidoc/serializer/serializers/block/pass.rb +17 -0
  141. data/lib/coradoc/asciidoc/serializer/serializers/block/quote.rb +17 -0
  142. data/lib/coradoc/asciidoc/serializer/serializers/block/reviewer_comment.rb +17 -0
  143. data/lib/coradoc/asciidoc/serializer/serializers/block/side.rb +22 -0
  144. data/lib/coradoc/asciidoc/serializer/serializers/block/source_code.rb +22 -0
  145. data/lib/coradoc/asciidoc/serializer/serializers/block.rb +23 -0
  146. data/lib/coradoc/asciidoc/serializer/serializers/break.rb +18 -0
  147. data/lib/coradoc/asciidoc/serializer/serializers/comment_block.rb +22 -0
  148. data/lib/coradoc/asciidoc/serializer/serializers/comment_line.rb +22 -0
  149. data/lib/coradoc/asciidoc/serializer/serializers/document.rb +65 -0
  150. data/lib/coradoc/asciidoc/serializer/serializers/document_attributes.rb +21 -0
  151. data/lib/coradoc/asciidoc/serializer/serializers/header.rb +24 -0
  152. data/lib/coradoc/asciidoc/serializer/serializers/highlight.rb +23 -0
  153. data/lib/coradoc/asciidoc/serializer/serializers/image/core.rb +30 -0
  154. data/lib/coradoc/asciidoc/serializer/serializers/image.rb +14 -0
  155. data/lib/coradoc/asciidoc/serializer/serializers/include.rb +19 -0
  156. data/lib/coradoc/asciidoc/serializer/serializers/inline/anchor.rb +20 -0
  157. data/lib/coradoc/asciidoc/serializer/serializers/inline/attribute_reference.rb +20 -0
  158. data/lib/coradoc/asciidoc/serializer/serializers/inline/bold.rb +26 -0
  159. data/lib/coradoc/asciidoc/serializer/serializers/inline/cross_reference.rb +30 -0
  160. data/lib/coradoc/asciidoc/serializer/serializers/inline/cross_reference_arg.rb +20 -0
  161. data/lib/coradoc/asciidoc/serializer/serializers/inline/footnote.rb +24 -0
  162. data/lib/coradoc/asciidoc/serializer/serializers/inline/hard_line_break.rb +20 -0
  163. data/lib/coradoc/asciidoc/serializer/serializers/inline/highlight.rb +26 -0
  164. data/lib/coradoc/asciidoc/serializer/serializers/inline/italic.rb +26 -0
  165. data/lib/coradoc/asciidoc/serializer/serializers/inline/link.rb +38 -0
  166. data/lib/coradoc/asciidoc/serializer/serializers/inline/monospace.rb +26 -0
  167. data/lib/coradoc/asciidoc/serializer/serializers/inline/quotation.rb +21 -0
  168. data/lib/coradoc/asciidoc/serializer/serializers/inline/small.rb +20 -0
  169. data/lib/coradoc/asciidoc/serializer/serializers/inline/span.rb +35 -0
  170. data/lib/coradoc/asciidoc/serializer/serializers/inline/stem.rb +23 -0
  171. data/lib/coradoc/asciidoc/serializer/serializers/inline/strikethrough.rb +29 -0
  172. data/lib/coradoc/asciidoc/serializer/serializers/inline/subscript.rb +29 -0
  173. data/lib/coradoc/asciidoc/serializer/serializers/inline/superscript.rb +26 -0
  174. data/lib/coradoc/asciidoc/serializer/serializers/inline/underline.rb +20 -0
  175. data/lib/coradoc/asciidoc/serializer/serializers/inline.rb +32 -0
  176. data/lib/coradoc/asciidoc/serializer/serializers/line_break.rb +18 -0
  177. data/lib/coradoc/asciidoc/serializer/serializers/list/core.rb +47 -0
  178. data/lib/coradoc/asciidoc/serializer/serializers/list/definition.rb +35 -0
  179. data/lib/coradoc/asciidoc/serializer/serializers/list/definition_item.rb +38 -0
  180. data/lib/coradoc/asciidoc/serializer/serializers/list/item.rb +120 -0
  181. data/lib/coradoc/asciidoc/serializer/serializers/list/ordered.rb +24 -0
  182. data/lib/coradoc/asciidoc/serializer/serializers/list/unordered.rb +29 -0
  183. data/lib/coradoc/asciidoc/serializer/serializers/list.rb +19 -0
  184. data/lib/coradoc/asciidoc/serializer/serializers/named_attribute.rb +22 -0
  185. data/lib/coradoc/asciidoc/serializer/serializers/paragraph.rb +65 -0
  186. data/lib/coradoc/asciidoc/serializer/serializers/reviewer_note.rb +28 -0
  187. data/lib/coradoc/asciidoc/serializer/serializers/revision.rb +26 -0
  188. data/lib/coradoc/asciidoc/serializer/serializers/section.rb +37 -0
  189. data/lib/coradoc/asciidoc/serializer/serializers/table.rb +24 -0
  190. data/lib/coradoc/asciidoc/serializer/serializers/table_cell.rb +75 -0
  191. data/lib/coradoc/asciidoc/serializer/serializers/table_row.rb +24 -0
  192. data/lib/coradoc/asciidoc/serializer/serializers/tag.rb +19 -0
  193. data/lib/coradoc/asciidoc/serializer/serializers/term.rb +20 -0
  194. data/lib/coradoc/asciidoc/serializer/serializers/text_element.rb +23 -0
  195. data/lib/coradoc/asciidoc/serializer/serializers/title.rb +55 -0
  196. data/lib/coradoc/asciidoc/serializer/serializers/video.rb +33 -0
  197. data/lib/coradoc/asciidoc/serializer/spacing_strategy.rb +70 -0
  198. data/lib/coradoc/asciidoc/serializer.rb +75 -0
  199. data/lib/coradoc/asciidoc/transform/from_core_model.rb +502 -0
  200. data/lib/coradoc/asciidoc/transform/from_core_model_registrations.rb +126 -0
  201. data/lib/coradoc/asciidoc/transform/registry.rb +146 -0
  202. data/lib/coradoc/asciidoc/transform/to_core_model.rb +564 -0
  203. data/lib/coradoc/asciidoc/transform/to_core_model_registrations.rb +257 -0
  204. data/lib/coradoc/asciidoc/transform.rb +13 -0
  205. data/lib/coradoc/asciidoc/transformer/block_rules.rb +101 -0
  206. data/lib/coradoc/asciidoc/transformer/header_rules.rb +91 -0
  207. data/lib/coradoc/asciidoc/transformer/inline_rules.rb +179 -0
  208. data/lib/coradoc/asciidoc/transformer/list_rules.rb +131 -0
  209. data/lib/coradoc/asciidoc/transformer/misc_rules.rb +196 -0
  210. data/lib/coradoc/asciidoc/transformer/structural_rules.rb +216 -0
  211. data/lib/coradoc/asciidoc/transformer/text_rules.rb +107 -0
  212. data/lib/coradoc/asciidoc/transformer.rb +406 -0
  213. data/lib/coradoc/asciidoc/version.rb +7 -0
  214. data/lib/coradoc/asciidoc.rb +148 -0
  215. data/lib/coradoc/util/asciidoc.rb +71 -0
  216. data/lib/coradoc/util.rb +8 -0
  217. 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,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Inline
7
+ class Base < Coradoc::AsciiDoc::Model::Base
8
+ def inline?
9
+ true
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ 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