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,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ # Bibliography block element for AsciiDoc documents.
7
+ #
8
+ # Bibliographies contain lists of bibliography entries (references)
9
+ # with support for various citation styles.
10
+ #
11
+ # @!attribute [r] id
12
+ # @return [String, nil] Optional identifier for the bibliography
13
+ #
14
+ # @!attribute [r] title
15
+ # @return [String, nil] Optional bibliography title
16
+ #
17
+ # @!attribute [r] entries
18
+ # @return [Array<Coradoc::AsciiDoc::Model::BibliographyEntry>] Bibliography entry items
19
+ #
20
+ # @example Create a bibliography
21
+ # bib = Coradoc::AsciiDoc::Model::Bibliography.new
22
+ # bib.title = "References"
23
+ # entry = Coradoc::AsciiDoc::Model::BibliographyEntry.new
24
+ # bib.entries << entry
25
+ #
26
+ # @see Coradoc::AsciiDoc::Model::BibliographyEntry Individual bibliography entries
27
+ #
28
+ class Bibliography < Base
29
+ include Coradoc::AsciiDoc::Model::Anchorable
30
+
31
+ attribute :id, :string
32
+ attribute :title, :string
33
+ attribute :entries, Coradoc::AsciiDoc::Model::BibliographyEntry, collection: true
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ # Individual bibliography entry for AsciiDoc documents.
7
+ #
8
+ # Bibliography entries represent single references within a bibliography,
9
+ # with anchor names for citation linking.
10
+ #
11
+ # @!attribute [r] anchor_name
12
+ # @return [String, nil] The anchor name for citing this entry
13
+ #
14
+ # @!attribute [r] document_id
15
+ # @return [String, nil] The document identifier
16
+ #
17
+ # @!attribute [r] ref_text
18
+ # @return [String, nil] The reference text/citation
19
+ #
20
+ # @!attribute [r] line_break
21
+ # @return [String] Line break character (default: "")
22
+ #
23
+ # @example Create a bibliography entry
24
+ # entry = Coradoc::AsciiDoc::Model::BibliographyEntry.new
25
+ # entry.anchor_name = "smith2023"
26
+ # entry.ref_text = "Smith, J. (2023). Example citation."
27
+ #
28
+ # @see Coradoc::AsciiDoc::Model::Bibliography Bibliography container
29
+ #
30
+ class BibliographyEntry < Base
31
+ attribute :anchor_name, :string
32
+ attribute :document_id, :string
33
+ attribute :ref_text, :string
34
+ attribute :line_break, :string, default: -> { '' }
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,139 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Block
7
+ # Base class for block elements in AsciiDoc documents.
8
+ #
9
+ # Block elements are delimited content sections that can contain
10
+ # multiple lines, titles, attributes, and attached blocks.
11
+ #
12
+ # Specific block types (Literal, Example, Listing, Quote, etc.) inherit
13
+ # from this class and define their delimiter characters.
14
+ #
15
+ # @!attribute [r] id
16
+ # @return [String, nil] Optional identifier for the block
17
+ #
18
+ # @!attribute [r] title
19
+ # @return [String, Array<Coradoc::AsciiDoc::Model::Base>, nil] Block title (string or array of Model objects)
20
+ #
21
+ # @!attribute [r] attributes
22
+ # @return [Coradoc::AsciiDoc::Model::AttributeList] Block attributes
23
+ #
24
+ # @!attribute [r] lines
25
+ # @return [Array<Lutaml::Model::Type::String, Coradoc::AsciiDoc::Model::TextElement>] Block content lines
26
+ #
27
+ # @!attribute [r] delimiter
28
+ # @return [String, nil] Full delimiter string
29
+ #
30
+ # @!attribute [r] delimiter_char
31
+ # @return [String, nil] Delimiter character (e.g., "=", "-", "*", "_", "+")
32
+ #
33
+ # @!attribute [r] delimiter_len
34
+ # @return [Integer, nil] Delimiter length (number of repeated characters)
35
+ #
36
+ # @!attribute [r] lang
37
+ # @return [String, nil] Language identifier for syntax highlighting
38
+ #
39
+ # @!attribute [r] type_str
40
+ # @return [String, nil] Block type string
41
+ #
42
+ # @example Create a custom block
43
+ # block = Coradoc::AsciiDoc::Model::Block::Core.new
44
+ # block.delimiter_char = "-"
45
+ # block.delimiter_len = 4
46
+ # block.lines = ["Line 1", "Line 2"]
47
+ #
48
+ # @see Coradoc::AsciiDoc::Model::Block::Literal Literal block
49
+ # @see Coradoc::AsciiDoc::Model::Block::Example Example block
50
+ # @see Coradoc::AsciiDoc::Model::Block::Listing Listing block
51
+ # @see Coradoc::AsciiDoc::Model::Block::Quote Quote block
52
+ #
53
+ class Core < Attached
54
+ include Coradoc::AsciiDoc::Model::Anchorable
55
+
56
+ attribute :id, :string
57
+ attribute :title, :string, default: -> { nil } # Polymorphic: string or array of Model objects
58
+ attribute :attributes, Coradoc::AsciiDoc::Model::AttributeList, default: lambda {
59
+ Coradoc::AsciiDoc::Model::AttributeList.new
60
+ }
61
+ attribute :lines,
62
+ Lutaml::Model::Serializable,
63
+ collection: true,
64
+ initialize_empty: true,
65
+ polymorphic: [
66
+ Lutaml::Model::Type::String,
67
+ Coradoc::AsciiDoc::Model::TextElement
68
+ ]
69
+ attribute :delimiter, :string
70
+ attribute :delimiter_char, :string
71
+ attribute :delimiter_len, :integer
72
+ attribute :lang, :string
73
+ attribute :type_str, :string
74
+
75
+ # Override title and lines setters to accept polymorphic content without coercion
76
+
77
+ attr_accessor :title
78
+
79
+ attr_writer :lines
80
+
81
+ def lines
82
+ @lines || []
83
+ end
84
+
85
+ def initialize(**attributes)
86
+ # Extract title and lines before super to avoid coercion
87
+ title_value = attributes.delete(:title)
88
+ lines_value = attributes.delete(:lines)
89
+ super
90
+ self.title = title_value if title_value
91
+ self.lines = lines_value if lines_value
92
+ end
93
+
94
+ # NOTE: This module provides core block functionality.
95
+ # Additional methods may be added as needed for specific block types.
96
+
97
+ # Generate the title string for this block
98
+ #
99
+ # @return [String] The formatted title (e.g., ".Title\n")
100
+ def gen_title
101
+ t = serialize_content(title)
102
+ return '' if t.nil? || t.empty?
103
+
104
+ ".#{t}\n"
105
+ end
106
+
107
+ # Generate the attributes string for this block
108
+ #
109
+ # @return [String] The formatted attributes
110
+ def gen_attributes
111
+ attrs = attributes.to_adoc(show_empty: false)
112
+ return "#{attrs}\n" unless attrs.empty?
113
+
114
+ ''
115
+ end
116
+
117
+ # Generate the delimiter string for this block
118
+ #
119
+ # @return [String] The delimiter (e.g., "----", "====")
120
+ # @return [String] Empty string if delimiter_char or delimiter_len is nil
121
+ def gen_delimiter
122
+ return '' if delimiter_char.nil? || delimiter_len.nil?
123
+
124
+ delimiter_char * delimiter_len
125
+ end
126
+
127
+ # Generate the lines content for this block
128
+ #
129
+ # @return [String] The serialized lines
130
+ def gen_lines
131
+ lines.map do |line|
132
+ serialize_content(line)
133
+ end.join
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Block
7
+ class Example < Core
8
+ attribute :delimiter_char, :string, default: -> { '=' }
9
+ attribute :delimiter_len, :integer, default: -> { 4 }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Block
7
+ class Listing < Core
8
+ attribute :delimiter_char, :string, default: -> { '-' }
9
+ attribute :delimiter_len, :integer, default: -> { 4 }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Block
7
+ class Literal < Core
8
+ attribute :delimiter_char, :string, default: -> { '.' }
9
+ attribute :delimiter_len, :integer, default: -> { 4 }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Block
7
+ class Open < Core
8
+ attribute :delimiter_char, :string, default: -> { '-' }
9
+ attribute :delimiter_len, :integer, default: -> { 2 }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Block
7
+ class Pass < Core
8
+ attribute :delimiter_char, :string, default: -> { '+' }
9
+ attribute :delimiter_len, :integer, default: -> { 4 }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Block
7
+ class Quote < Core
8
+ attribute :delimiter_char, :string, default: -> { '_' }
9
+ attribute :delimiter_len, :integer, default: -> { 4 }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Block
7
+ class ReviewerComment < Core
8
+ attribute :delimiter_char, :string, default: -> { '*' }
9
+ attribute :delimiter_len, :integer, default: -> { 4 }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Block
7
+ class Side < Core
8
+ attribute :delimiter_char, :string, default: -> { '*' }
9
+ attribute :delimiter_len, :integer, default: -> { 4 }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Block
7
+ class SourceCode < Core
8
+ attribute :delimiter_char, :string, default: -> { '-' }
9
+ attribute :delimiter_len, :integer, default: -> { 4 }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ module Block
7
+ # Autoload block types lazily
8
+ autoload :Core, 'coradoc/asciidoc/model/block/core'
9
+ autoload :Example, 'coradoc/asciidoc/model/block/example'
10
+ autoload :Literal, 'coradoc/asciidoc/model/block/literal'
11
+ autoload :Listing, 'coradoc/asciidoc/model/block/listing'
12
+ autoload :Open, 'coradoc/asciidoc/model/block/open'
13
+ autoload :Pass, 'coradoc/asciidoc/model/block/pass'
14
+ autoload :Quote, 'coradoc/asciidoc/model/block/quote'
15
+ autoload :Side, 'coradoc/asciidoc/model/block/side'
16
+ autoload :SourceCode, 'coradoc/asciidoc/model/block/source_code'
17
+ autoload :ReviewerComment, 'coradoc/asciidoc/model/block/reviewer_comment'
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ # Thematic break elements for AsciiDoc documents.
7
+ #
8
+ module Break
9
+ # Thematic break (horizontal rule) for AsciiDoc documents.
10
+ #
11
+ # Represented by a line of three or more asterisks ('***') in AsciiDoc.
12
+ # Used to separate content sections visually.
13
+ #
14
+ # @example Create a thematic break
15
+ # break = Coradoc::AsciiDoc::Model::Break::ThematicBreak.new
16
+ #
17
+ # @example Serialize to AsciiDoc
18
+ # break = Coradoc::AsciiDoc::Model::Break::ThematicBreak.new
19
+ # break.to_adoc # => "'''\n"
20
+ #
21
+ class ThematicBreak < Base
22
+ end
23
+
24
+ # Page break for AsciiDoc documents.
25
+ #
26
+ # Represented by <<< in AsciiDoc. Layout-only element;
27
+ # has no CoreModel equivalent and is filtered during ToCoreModel.
28
+ class PageBreak < Base
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
+ # Comment block element for AsciiDoc documents.
7
+ #
8
+ # Comment blocks contain multi-line comments that are not part
9
+ # of the final document output.
10
+ #
11
+ # @!attribute [r] text
12
+ # @return [String] The comment text
13
+ #
14
+ # @!attribute [r] line_break
15
+ # @return [String] Line break character (default: "\n")
16
+ #
17
+ # @example Create a comment block
18
+ # comment = Coradoc::AsciiDoc::Model::CommentBlock.new
19
+ # comment.text = "This is a multi-line comment"
20
+ #
21
+ # @see Coradoc::AsciiDoc::Model::CommentLine Single-line comments
22
+ #
23
+ class CommentBlock < Base
24
+ def block_level?
25
+ true
26
+ end
27
+
28
+ attribute :text, :string
29
+ attribute :line_break, :string, default: -> { "\n" }
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Model
6
+ # Single-line comment element for AsciiDoc documents.
7
+ #
8
+ # Comment lines start with double slash (//) and are not included
9
+ # in the final document output.
10
+ #
11
+ # @!attribute [r] text
12
+ # @return [String] The comment text
13
+ #
14
+ # @!attribute [r] line_break
15
+ # @return [String] Line break character (default: "\n")
16
+ #
17
+ # @example Create a comment line
18
+ # comment = Coradoc::AsciiDoc::Model::CommentLine.new
19
+ # comment.text = "This is a comment"
20
+ # comment.to_adoc # => "// This is a comment\n"
21
+ #
22
+ # @see Coradoc::AsciiDoc::Model::CommentBlock Multi-line comments
23
+ #
24
+ class CommentLine < Base
25
+ attribute :text, :string
26
+ attribute :line_break, :string, default: -> { "\n" }
27
+ end
28
+ end
29
+ end
30
+ end