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,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Inline
7
+ # Span inline element for applying styles to text in AsciiDoc documents.
8
+ #
9
+ # Spans allow applying roles and custom attributes to inline text.
10
+ #
11
+ # @!attribute [r] text
12
+ # @return [String] The text content
13
+ #
14
+ # @!attribute [r] role
15
+ # @return [String, nil] The CSS role to apply
16
+ #
17
+ # @!attribute [r] attributes
18
+ # @return [Coradoc::AsciiDoc::Model::AttributeList, nil] Additional attributes
19
+ #
20
+ # @!attribute [r] unconstrained
21
+ # @return [Boolean] Whether to use unconstrained formatting (default: false)
22
+ #
23
+ # @example Create a span with a role
24
+ # span = Coradoc::AsciiDoc::Model::Inline::Span.new
25
+ # span.text = "Important text"
26
+ # span.role = "red"
27
+ # span.to_adoc # => "[.red]#Important text#"
28
+ #
29
+ class Span < Base
30
+ attribute :text, :string
31
+ attribute :role, :string
32
+ attribute :attributes, Coradoc::AsciiDoc::Model::AttributeList
33
+ attribute :unconstrained, :boolean, default: -> { false }
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Inline
7
+ # Stem inline element for AsciiDoc documents.
8
+ #
9
+ # STEM macros are mathematical notation: stem:[formula] or latexmath:[formula]
10
+ #
11
+ # @!attribute [r] type
12
+ # @return [String] The stem type (stem, latexmath, asciimath)
13
+ #
14
+ # @!attribute [r] content
15
+ # @return [String] The mathematical content/formula
16
+ #
17
+ class Stem < Base
18
+ attribute :type, :string, default: 'stem'
19
+ attribute :content, :string
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Inline
7
+ # Strikethrough inline text formatting for AsciiDoc documents.
8
+ #
9
+ # Strikethrough text is rendered with line-through role: [.line-through]#text#.
10
+ #
11
+ # @!attribute [r] content
12
+ # @return [String, Array<Lutaml::Model::Serializable>] The text content to format as strikethrough
13
+ #
14
+ # @!attribute [r] text
15
+ # @return [String] Alternative text attribute (aliased to content)
16
+ #
17
+ # @!attribute [r] unconstrained
18
+ # @return [Boolean] Whether to use unconstrained formatting (default: false)
19
+ #
20
+ # @example Create strikethrough text
21
+ # strikethrough = Coradoc::AsciiDoc::Model::Inline::Strikethrough.new
22
+ # strikethrough.content = "Deleted text"
23
+ # strikethrough.to_adoc # => "[.line-through]#Deleted text#"
24
+ #
25
+ class Strikethrough < Base
26
+ attribute :content,
27
+ Lutaml::Model::Serializable,
28
+ default: -> { nil },
29
+ polymorphic: [
30
+ Lutaml::Model::Type::String,
31
+ :array
32
+ ]
33
+ attribute :text, :string, default: -> { nil }
34
+ attribute :unconstrained, :boolean, default: -> { false }
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Inline
7
+ # Subscript inline text formatting for AsciiDoc documents.
8
+ #
9
+ # Subscript text is rendered with tildes: ~subscript~.
10
+ #
11
+ # @!attribute [r] content
12
+ # @return [String, Array<Lutaml::Model::Serializable>] The text content to format as subscript
13
+ #
14
+ # @example Create subscript text
15
+ # sub = Coradoc::AsciiDoc::Model::Inline::Subscript.new
16
+ # sub.content = "2"
17
+ # sub.to_adoc # => "~2~"
18
+ #
19
+ # @see Coradoc::AsciiDoc::Model::Inline::Superscript Superscript text
20
+ #
21
+ class Subscript < Base
22
+ attribute :content,
23
+ Lutaml::Model::Serializable,
24
+ default: -> { nil },
25
+ polymorphic: [
26
+ Lutaml::Model::Type::String,
27
+ :array
28
+ ]
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Inline
7
+ # Superscript inline text formatting for AsciiDoc documents.
8
+ #
9
+ # Superscript text is rendered with carets: ^superscript^.
10
+ #
11
+ # @!attribute [r] content
12
+ # @return [String, Array<Lutaml::Model::Serializable>] The text content to format as superscript
13
+ #
14
+ # @example Create superscript text
15
+ # sup = Coradoc::AsciiDoc::Model::Inline::Superscript.new
16
+ # sup.content = "TM"
17
+ # sup.to_adoc # => "^TM^"
18
+ #
19
+ # @see Coradoc::AsciiDoc::Model::Inline::Subscript Subscript text
20
+ #
21
+ class Superscript < Base
22
+ attribute :content,
23
+ Lutaml::Model::Serializable,
24
+ default: -> { nil },
25
+ polymorphic: [
26
+ Lutaml::Model::Type::String,
27
+ :array
28
+ ]
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Inline
7
+ # Underline inline text formatting for AsciiDoc documents.
8
+ #
9
+ # Underlined text is rendered with underscores: [u]#text#.
10
+ #
11
+ # @!attribute [r] text
12
+ # @return [String] The text content to underline
13
+ #
14
+ # @example Create underlined text
15
+ # underline = Coradoc::AsciiDoc::Model::Inline::Underline.new
16
+ # underline.text = "Underlined"
17
+ # underline.to_adoc # => "[u]#Underlined#"
18
+ #
19
+ class Underline < Base
20
+ attribute :text, :string
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Inline
7
+ # Autoload inline elements lazily
8
+ autoload :Base, 'coradoc/asciidoc/model/inline/base'
9
+ autoload :Anchor, 'coradoc/asciidoc/model/inline/anchor'
10
+ autoload :AttributeReference, 'coradoc/asciidoc/model/inline/attribute_reference'
11
+ autoload :Bold, 'coradoc/asciidoc/model/inline/bold'
12
+ autoload :Italic, 'coradoc/asciidoc/model/inline/italic'
13
+ autoload :CrossReference, 'coradoc/asciidoc/model/inline/cross_reference'
14
+ autoload :CrossReferenceArg, 'coradoc/asciidoc/model/inline/cross_reference_arg'
15
+ autoload :Monospace, 'coradoc/asciidoc/model/inline/monospace'
16
+ autoload :Link, 'coradoc/asciidoc/model/inline/link'
17
+ autoload :Quotation, 'coradoc/asciidoc/model/inline/quotation'
18
+ autoload :Highlight, 'coradoc/asciidoc/model/inline/highlight'
19
+ autoload :Subscript, 'coradoc/asciidoc/model/inline/subscript'
20
+ autoload :Superscript, 'coradoc/asciidoc/model/inline/superscript'
21
+ autoload :HardLineBreak, 'coradoc/asciidoc/model/inline/hard_line_break'
22
+ autoload :Span, 'coradoc/asciidoc/model/inline/span'
23
+ autoload :Footnote, 'coradoc/asciidoc/model/inline/footnote'
24
+ autoload :Underline, 'coradoc/asciidoc/model/inline/underline'
25
+ autoload :Small, 'coradoc/asciidoc/model/inline/small'
26
+ autoload :Strikethrough, 'coradoc/asciidoc/model/inline/strikethrough'
27
+ autoload :Stem, 'coradoc/asciidoc/model/inline/stem'
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ class LineBreak < Base
7
+ attribute :line_break, :string, default: -> { '' }
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module List
7
+ # Base class for list elements in AsciiDoc documents.
8
+ #
9
+ # Lists are container elements that hold list items and provide
10
+ # functionality for different list types (ordered, unordered, definition).
11
+ #
12
+ # @!attribute [r] id
13
+ # @return [String, nil] Optional identifier for the list
14
+ # @!attribute [r] prefix
15
+ # @return [String, nil] List marker prefix (e.g., "*", "*", "**", etc.)
16
+ # @!attribute [r] items
17
+ # @return [Array<ListItem>] List items in this list
18
+ # @!attribute [r] ol_count
19
+ # @return [Integer] Ordered list nesting level
20
+ # @!attribute [r] attrs
21
+ # @return [AttributeList] Additional list attributes
22
+ # @!attribute [r] marker
23
+ # @return [String, nil] The marker character used for this list
24
+ #
25
+ # @example Create an unordered list
26
+ # list = Coradoc::AsciiDoc::Model::List::Unordered.new
27
+ # list.items << Coradoc::AsciiDoc::Model::List::Item.new("Item 1")
28
+ #
29
+ class Core < Nestable
30
+ include Coradoc::AsciiDoc::Model::Anchorable
31
+
32
+ def block_level?
33
+ true
34
+ end
35
+
36
+ attribute :id, :string
37
+ attribute :prefix, :string
38
+ # attribute :anchor, Inline::Anchor, default: -> {
39
+ # id.nil? ? nil : Inline::Anchor.new(id)
40
+ # }
41
+ attribute :items, Coradoc::AsciiDoc::Model::List::Item, collection: true, initialize_empty: true
42
+ attribute :ol_count, :integer, default: -> { 1 }
43
+ attribute :attrs, Coradoc::AsciiDoc::Model::AttributeList, default: lambda {
44
+ Coradoc::AsciiDoc::Model::AttributeList.new
45
+ }
46
+ attribute :marker, :string
47
+
48
+ asciidoc do
49
+ map_attribute 'id', to: :id
50
+ map_attribute 'anchor', to: :anchor
51
+ map_attribute 'prefix', to: :prefix
52
+ map_attribute 'items', to: :items
53
+ map_attribute 'ol_count', to: :ol_count
54
+ map_attribute 'attrs', to: :attrs
55
+ map_attribute 'marker', to: :marker
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module List
7
+ class Definition < Base
8
+ attribute :items,
9
+ Coradoc::AsciiDoc::Model::Base,
10
+ polymorphic: [Coradoc::AsciiDoc::Model::List::DefinitionItem],
11
+ collection: true,
12
+ initialize_empty: true
13
+ attribute :delimiter, :string, default: -> { '::' }
14
+
15
+ asciidoc do
16
+ map_attribute 'items', to: :items
17
+ map_attribute 'delimiter', to: :delimiter
18
+ end
19
+
20
+ def prefix
21
+ delimiter
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module List
7
+ # Definition list item for AsciiDoc definition/labeled lists.
8
+ #
9
+ # A DefinitionItem contains one or more terms and their associated
10
+ # definitions. In AsciiDoc, this maps to the labeled list syntax:
11
+ #
12
+ # Term 1:: Definition 1
13
+ # Term 2::: Definition 2 (deeper level)
14
+ #
15
+ # @!attribute [r] id
16
+ # @return [String, nil] Optional identifier for the definition item
17
+ #
18
+ # @!attribute [r] terms
19
+ # @return [Array<Term>] The terms being defined (can have multiple)
20
+ #
21
+ # @!attribute [r] contents
22
+ # @return [Array<TextElement>] The definitions/contents for the terms
23
+ #
24
+ # @example Create a definition list item
25
+ # item = Coradoc::AsciiDoc::Model::List::DefinitionItem.new
26
+ # item.terms << Coradoc::AsciiDoc::Model::Term.new(term: "API")
27
+ # item.contents << Coradoc::AsciiDoc::Model::TextElement.new("Application Programming Interface")
28
+ #
29
+ class DefinitionItem < Base
30
+ include Coradoc::AsciiDoc::Model::Anchorable
31
+
32
+ attribute :id, :string
33
+ attribute :terms, Coradoc::AsciiDoc::Model::Term, collection: true
34
+ attribute :contents, Coradoc::AsciiDoc::Model::TextElement, collection: true
35
+
36
+ def to_adoc(delimiter: '')
37
+ Coradoc::AsciiDoc::Serializer.serialize(self, delimiter: delimiter)
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 List
7
+ # List item element for ordered and unordered AsciiDoc lists.
8
+ #
9
+ # Represents a single item in an ordered or unordered list, which can
10
+ # contain text content, attached blocks (paragraphs, admonitions),
11
+ # and nested lists.
12
+ #
13
+ # @!attribute [r] id
14
+ # @return [String, nil] Optional identifier for the list item
15
+ #
16
+ # @!attribute [r] content
17
+ # @return [Array<Coradoc::AsciiDoc::Model::Base>] Polymorphic content
18
+ #
19
+ # @!attribute [r] marker
20
+ # @return [String, nil] Custom list marker for this item
21
+ #
22
+ # @!attribute [r] subitem
23
+ # @return [String, nil] Sub-item text
24
+ #
25
+ # @!attribute [r] line_break
26
+ # @return [String] Line break character (default: "\n")
27
+ #
28
+ # @!attribute [r] attached
29
+ # @return [Array<Coradoc::AsciiDoc::Model::Attached>] Attached blocks
30
+ #
31
+ # @!attribute [r] nested
32
+ # @return [Coradoc::AsciiDoc::Model::List::Nestable, nil] Nested list
33
+ #
34
+ # @example Create a simple list item
35
+ # item = Coradoc::AsciiDoc::Model::List::Item.new
36
+ # item.content = [Coradoc::AsciiDoc::Model::TextElement.new("First item")]
37
+ #
38
+ # @example Create a list item with nested list
39
+ # item = Coradoc::AsciiDoc::Model::List::Item.new
40
+ # item.nested = Coradoc::AsciiDoc::Model::List::Unordered.new
41
+ # item.nested.items << Coradoc::AsciiDoc::Model::List::Item.new
42
+ #
43
+ class Item < Base
44
+ include Coradoc::AsciiDoc::Model::Anchorable
45
+
46
+ attribute :id, :string
47
+ attribute :content,
48
+ Coradoc::AsciiDoc::Model::Base,
49
+ polymorphic: [
50
+ Coradoc::AsciiDoc::Model::TextElement,
51
+ Coradoc::AsciiDoc::Model::Section
52
+ ]
53
+ attribute :marker, :string
54
+ attribute :subitem, :string
55
+ attribute :line_break, :string, default: -> { "\n" }
56
+
57
+ attribute :attached,
58
+ Coradoc::AsciiDoc::Model::Attached,
59
+ polymorphic: [
60
+ Coradoc::AsciiDoc::Model::Admonition,
61
+ Coradoc::AsciiDoc::Model::Paragraph,
62
+ Coradoc::AsciiDoc::Model::Block::Core
63
+ ],
64
+ collection: true,
65
+ initialize_empty: true
66
+
67
+ attribute :nested, Coradoc::AsciiDoc::Model::List::Nestable
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module List
7
+ # Mixin module for nestable list functionality.
8
+ # Provides common functionality for lists that can contain nested lists.
9
+ class Nestable < Coradoc::AsciiDoc::Model::Base
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module List
7
+ # Ordered (numbered) list for AsciiDoc documents.
8
+ #
9
+ # Ordered lists use numeric markers (1, 2, 3...) or custom markers
10
+ # and are typically used for sequential items.
11
+ #
12
+ # @example Create an ordered list
13
+ # list = Coradoc::AsciiDoc::Model::List::Ordered.new
14
+ # item = Coradoc::AsciiDoc::Model::ListItem.new
15
+ # item.content = [Coradoc::AsciiDoc::Model::TextElement.new("First item")]
16
+ # list.items << item
17
+ #
18
+ # @see Coradoc::AsciiDoc::Model::List::Core Base list class
19
+ # @see Coradoc::AsciiDoc::Model::List::Unordered Unordered (bulleted) lists
20
+ #
21
+ class Ordered < Core
22
+ # Generate the prefix marker for this list level
23
+ #
24
+ # @return [String] The prefix marker (e.g., ".", "..", "...")
25
+ def prefix
26
+ return marker if marker
27
+
28
+ '.' * [ol_count, 1].max
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module List
7
+ # Unordered (bulleted) list for AsciiDoc documents.
8
+ #
9
+ # Unordered lists use asterisk markers (*, **, ***) and are
10
+ # typically used for non-sequential items where order doesn't matter.
11
+ #
12
+ # @example Create an unordered list
13
+ # list = Coradoc::AsciiDoc::Model::List::Unordered.new
14
+ # item = Coradoc::AsciiDoc::Model::ListItem.new
15
+ # item.content = [Coradoc::AsciiDoc::Model::TextElement.new("Bullet point")]
16
+ # list.items << item
17
+ #
18
+ # @see Coradoc::AsciiDoc::Model::List::Core Base list class
19
+ # @see Coradoc::AsciiDoc::Model::List::Ordered Ordered (numbered) lists
20
+ #
21
+ class Unordered < Core
22
+ # Generate the prefix marker for this list level
23
+ #
24
+ # @return [String] The prefix marker (e.g., "*", "**", "***")
25
+ def prefix
26
+ return marker if marker
27
+
28
+ '*' * [ol_count, 1].max
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ # Namespace for all AsciiDoc list types and their items.
7
+ #
8
+ # List Architecture:
9
+ # - List::Core - Common list functionality (base class)
10
+ # - List::Ordered - Numbered lists (1., 2., 3., etc.)
11
+ # - List::Unordered - Bulleted lists (*, **, etc.)
12
+ # - List::Definition - Labeled/definition lists (term:: definition)
13
+ # - List::Item - Item for ordered/unordered lists
14
+ # - List::DefinitionItem - Item for definition lists
15
+ # - List::Nestable - Mixin for nesting support
16
+ #
17
+ module List
18
+ # Autoload list types lazily
19
+ autoload :Core, 'coradoc/asciidoc/model/list/core'
20
+ autoload :Nestable, 'coradoc/asciidoc/model/list/nestable'
21
+ autoload :Ordered, 'coradoc/asciidoc/model/list/ordered'
22
+ autoload :Unordered, 'coradoc/asciidoc/model/list/unordered'
23
+ autoload :Definition, 'coradoc/asciidoc/model/list/definition'
24
+ autoload :Item, 'coradoc/asciidoc/model/list/item'
25
+ autoload :DefinitionItem, 'coradoc/asciidoc/model/list/definition_item'
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ class NamedAttribute < Base
7
+ attribute :name, :string
8
+ attribute :value, :string, collection: true, initialize_empty: true
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ # Paragraph block element.
7
+ #
8
+ # Represents a paragraph of text in an AsciiDoc document. Paragraphs can
9
+ # contain mixed content including text, inline formatting, and other elements.
10
+ #
11
+ # @!attribute [r] id
12
+ # @return [String, nil] Optional identifier for the paragraph
13
+ # @!attribute [r] content
14
+ # @return [Array<String, TextElement>] Paragraph content (can be text or TextElement objects)
15
+ # @!attribute [r] title
16
+ # @return [String, nil] Optional title for the paragraph
17
+ # @!attribute [r] attributes
18
+ # @return [AttributeList] Additional paragraph attributes (style, position, etc.)
19
+ # @!attribute [r] tdsinglepara
20
+ # @return [Boolean] Special table cell paragraph flag
21
+ #
22
+ # @example Create a simple paragraph
23
+ # para = Coradoc::AsciiDoc::Model::Paragraph.new("Hello World")
24
+ # para.to_adoc # => "Hello World"
25
+ #
26
+ # @example Create a paragraph with attributes
27
+ # para = Coradoc::AsciiDoc::Model::Paragraph.new(
28
+ # "Note: This is important",
29
+ # attributes: Coradoc::AsciiDoc::Model::Coradoc::AsciiDoc::Model::AttributeList.new(["NOTE"])
30
+ # )
31
+ #
32
+ class Paragraph < Attached
33
+ include Coradoc::AsciiDoc::Model::Anchorable
34
+
35
+ attribute :id, :string
36
+ # NOTE: Content uses polymorphic collection supporting both String and TextElement
37
+ # types via lutaml-model's polymorphic attribute feature.
38
+ attribute :content,
39
+ Lutaml::Model::Serializable,
40
+ collection: true,
41
+ initialize_empty: true,
42
+ polymorphic: [
43
+ # :string,
44
+ Lutaml::Model::Type::String,
45
+ Coradoc::AsciiDoc::Model::TextElement
46
+ ]
47
+ attribute :title, :string
48
+ attribute :attributes, Coradoc::AsciiDoc::Model::AttributeList, default: lambda {
49
+ Coradoc::AsciiDoc::Model::AttributeList.new
50
+ }
51
+ attribute :tdsinglepara, :boolean, default: -> { false }
52
+ # Trailing newlines after paragraph for exact round-trip preservation
53
+ # nil = use default "\n\n" spacing (semantic mode)
54
+ # string = exact trailing newlines from original (exact mode)
55
+ attribute :trailing_newlines, :string, default: nil
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ class RejectedPositionalAttribute < Base
7
+ attribute :position, :integer
8
+ attribute :value, :string
9
+ end
10
+ end
11
+ end
12
+ end