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,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Block
8
+ class Example < Core
9
+ end
10
+ end
11
+
12
+ # Self-register this serializer
13
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Block::Example, Block::Example)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Block
8
+ class Listing < Core
9
+ def to_adoc(model, _options = {})
10
+ @model = model
11
+ "\n\n#{gen_anchor}#{gen_attributes}\n#{gen_delimiter}\n" <<
12
+ gen_lines << "\n#{gen_delimiter}\n\n"
13
+ end
14
+ end
15
+ end
16
+
17
+ # Self-register this serializer
18
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Block::Listing, Block::Listing)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Block
8
+ class Literal < Core
9
+ end
10
+ end
11
+
12
+ # Self-register this serializer
13
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Block::Literal, Block::Literal)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Block
8
+ class Open < Core
9
+ def to_adoc(model, _options = {})
10
+ @model = model
11
+ "\n\n#{gen_anchor}#{gen_attributes}#{gen_delimiter}\n" <<
12
+ gen_lines << "\n#{gen_delimiter}\n\n"
13
+ end
14
+ end
15
+ end
16
+
17
+ # Self-register this serializer
18
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Block::Open, Block::Open)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Block
8
+ class Pass < Core
9
+ end
10
+ end
11
+
12
+ # Self-register this serializer
13
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Block::Pass, Block::Pass)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Block
8
+ class Quote < Core
9
+ end
10
+ end
11
+
12
+ # Self-register this serializer
13
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Block::Quote, Block::Quote)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Block
8
+ class ReviewerComment < Core
9
+ end
10
+ end
11
+
12
+ # Self-register this serializer
13
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Block::ReviewerComment, Block::ReviewerComment)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Block
8
+ class Side < Core
9
+ def to_adoc(model, _options = {})
10
+ @model = model
11
+ "\n\n#{gen_anchor}#{gen_title}#{gen_attributes}#{gen_delimiter}\n\n\n" <<
12
+ gen_lines << "\n\n#{gen_delimiter}\n\n"
13
+ end
14
+ end
15
+ end
16
+
17
+ # Self-register this serializer
18
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Block::Side, Block::Side)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Block
8
+ class SourceCode < Core
9
+ def to_adoc(model, _options = {})
10
+ @model = model
11
+ "\n\n#{gen_anchor}[source,#{model.lang}]\n#{gen_delimiter}\n" <<
12
+ gen_lines << "\n#{gen_delimiter}\n\n"
13
+ end
14
+ end
15
+ end
16
+
17
+ # Self-register this serializer
18
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Block::SourceCode, Block::SourceCode)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ # Autoload block serializers
8
+ module Block
9
+ autoload :Core, 'coradoc/asciidoc/serializer/serializers/block/core'
10
+ autoload :Example, 'coradoc/asciidoc/serializer/serializers/block/example'
11
+ autoload :Listing, 'coradoc/asciidoc/serializer/serializers/block/listing'
12
+ autoload :Literal, 'coradoc/asciidoc/serializer/serializers/block/literal'
13
+ autoload :Open, 'coradoc/asciidoc/serializer/serializers/block/open'
14
+ autoload :Pass, 'coradoc/asciidoc/serializer/serializers/block/pass'
15
+ autoload :Quote, 'coradoc/asciidoc/serializer/serializers/block/quote'
16
+ autoload :ReviewerComment, 'coradoc/asciidoc/serializer/serializers/block/reviewer_comment'
17
+ autoload :Side, 'coradoc/asciidoc/serializer/serializers/block/side'
18
+ autoload :SourceCode, 'coradoc/asciidoc/serializer/serializers/block/source_code'
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ class Break < Base
8
+ def to_adoc(_model, _options = {})
9
+ "\n* * *\n"
10
+ end
11
+ end
12
+ end
13
+
14
+ # Self-register this serializer
15
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Break::ThematicBreak, Serializers::Break)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ class CommentBlock < Base
8
+ def to_adoc(model, _options = {})
9
+ <<~ADOC.chomp
10
+ ////
11
+ #{model.text}
12
+ ////#{model.line_break}
13
+ ADOC
14
+ end
15
+ end
16
+ end
17
+
18
+ # Self-register this serializer
19
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::CommentBlock, Serializers::CommentBlock)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ class CommentLine < Base
8
+ def to_adoc(model, _options = {})
9
+ if model.text.nil? || model.text.strip.empty?
10
+ "//#{model.line_break}"
11
+ else
12
+ "// #{model.text}#{model.line_break}"
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ # Self-register this serializer
19
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::CommentLine, Serializers::CommentLine)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ class Document < Base
8
+ # Pre-compiled regex for performance
9
+ LEADING_NEWLINES_REGEX = /\A\n+/
10
+
11
+ def to_adoc(model, options_or_context = {})
12
+ context = normalize_context(options_or_context)
13
+ @model = model
14
+ @context = context
15
+ serialize_to_adoc
16
+ end
17
+
18
+ private
19
+
20
+ attr_reader :context
21
+
22
+ def serialize_to_adoc
23
+ parts = []
24
+ # Only add leading newline if we have sections but no header
25
+ parts << "\n" if @model.sections && !@model.sections.empty? && !@model.header
26
+
27
+ # Only serialize header if it has a non-empty title
28
+ if @model.header&.title && !@model.header.title.to_s.empty?
29
+ parts << serialize_child(@model.header,
30
+ @context)
31
+ end
32
+
33
+ # Only serialize document_attributes if it has data
34
+ if @model.document_attributes&.data && !@model.document_attributes.data.empty?
35
+ parts << serialize_child(@model.document_attributes,
36
+ @context)
37
+ end
38
+
39
+ # Serialize sections with last_element tracking
40
+ parts << serialize_sections_with_last_element if @model.sections && !@model.sections.empty?
41
+ result = parts.join
42
+
43
+ # Clean up leading newlines when we have header
44
+ if @model.header&.title && !@model.header.title.to_s.empty?
45
+ result = result.sub(LEADING_NEWLINES_REGEX,
46
+ '')
47
+ end
48
+ result
49
+ end
50
+
51
+ def serialize_sections_with_last_element
52
+ # Serialize all sections, marking the last one as the last element
53
+ @model.sections.each_with_index.map do |section, index|
54
+ child_context = context.for_child(index, @model.sections.length)
55
+ serialize_child(section, child_context)
56
+ end.join
57
+ end
58
+ end
59
+ end
60
+
61
+ # Self-register this serializer
62
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Document, Serializers::Document)
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ class DocumentAttributes < Base
8
+ def to_adoc(model, _options = {})
9
+ return '' if model.data.nil?
10
+ return "\n" if model.data.empty?
11
+
12
+ model.data.map { |attr| serialize_child(attr) }.join + "\n"
13
+ end
14
+ end
15
+ end
16
+
17
+ # Self-register this serializer (in Adoc module scope)
18
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::DocumentAttributes, Serializers::DocumentAttributes)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ class Header < Base
8
+ def to_adoc(model, _options = {})
9
+ # Output anchor if ID is present
10
+ adoc = +''
11
+ adoc << "[[#{model.id}]]\n" if model.id && !model.id.empty?
12
+ adoc << "= #{model.title}\n"
13
+ adoc << model.author.to_adoc if model.author
14
+ adoc << model.revision.to_adoc if model.revision
15
+ adoc
16
+ end
17
+ end
18
+ end
19
+
20
+ # Self-register this serializer
21
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Header, Serializers::Header)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ # Serializer for Highlight models
8
+ class Highlight < Base
9
+ def to_adoc(model, _options = {})
10
+ result = ''
11
+ result += "[[#{model.id}]] " if model.id
12
+ result += serialize_content(model.content)
13
+ result += model.line_break.to_s
14
+ result
15
+ end
16
+ end
17
+ end
18
+
19
+ # Self-register this serializer
20
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Highlight, Serializers::Highlight)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Image
8
+ class Core < Base
9
+ def to_adoc(model, options = {})
10
+ missing = if model.annotate_missing
11
+ "// Missing image: #{model.annotate_missing}\n"
12
+ else
13
+ ''
14
+ end
15
+ _anchor = model.anchor.nil? ? '' : "#{serialize_child(model.anchor)}\n"
16
+ _title = model.title.to_s.empty? ? '' : ".#{model.title}\n"
17
+ attrs = serialize_child(model.attributes, options)
18
+ [missing, _anchor, _title, 'image', model.colons, model.src, attrs,
19
+ model.line_break].join
20
+ end
21
+ end
22
+ end
23
+
24
+ # Self-register this serializer
25
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Image::Core, Image::Core)
26
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Image::BlockImage, Image::Core)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ # Autoload image serializers
8
+ module Image
9
+ autoload :Core, 'coradoc/asciidoc/serializer/serializers/image/core'
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ class Include < Base
8
+ def to_adoc(model, _options = {})
9
+ attrs = model.attributes.to_adoc(show_empty: true)
10
+ "include::#{model.path}#{attrs}#{model.line_break}"
11
+ end
12
+ end
13
+ end
14
+
15
+ # Self-register this serializer
16
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Include, Serializers::Include)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Inline
8
+ class Anchor < Base
9
+ def to_adoc(model, _options = {})
10
+ "[[#{model.id}]]"
11
+ end
12
+ end
13
+ end
14
+
15
+ # Self-register this serializer
16
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Inline::Anchor, Inline::Anchor)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Inline
8
+ class AttributeReference < Base
9
+ def to_adoc(model, _options = {})
10
+ "{#{model.name}}"
11
+ end
12
+ end
13
+ end
14
+
15
+ # Self-register this serializer
16
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Inline::AttributeReference, Inline::AttributeReference)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Inline
8
+ # Serializer for Bold inline formatting
9
+ class Bold < Base
10
+ def to_adoc(model, _options = {})
11
+ content = serialize_content(model.content)
12
+ content = Coradoc::Util::AsciiDoc.escape_characters(content, escape_chars: %w[*])
13
+
14
+ return '' if content.empty?
15
+
16
+ model.unconstrained ? "**#{content}**" : "*#{content}*"
17
+ end
18
+ end
19
+ end
20
+
21
+ # Self-register this serializer
22
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Inline::Bold, Inline::Bold)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Inline
8
+ class CrossReference < Base
9
+ def to_adoc(model, _options = {})
10
+ if model.args&.length&.> 0
11
+ _args = model.args.reject(&:empty?).map do |a|
12
+ serialize_child(a)
13
+ end.join(',')
14
+
15
+ return "<<#{model.href}>>" if _args.empty?
16
+
17
+ return "<<#{model.href},#{_args}>>"
18
+
19
+ end
20
+ "<<#{model.href}>>"
21
+ end
22
+ end
23
+ end
24
+
25
+ # Self-register this serializer
26
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Inline::CrossReference, Inline::CrossReference)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Inline
8
+ class CrossReferenceArg < Base
9
+ def to_adoc(model, _options = {})
10
+ [model.key, model.delimiter, model.value].join
11
+ end
12
+ end
13
+ end
14
+
15
+ # Self-register this serializer
16
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Inline::CrossReferenceArg, Inline::CrossReferenceArg)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Inline
8
+ class Footnote < Base
9
+ def to_adoc(model, _options = {})
10
+ if model.id
11
+ "footnote:#{model.id}[#{model.text}]"
12
+ else
13
+ "footnote:[#{model.text}]"
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ # Self-register this serializer
20
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Inline::Footnote, Inline::Footnote)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Inline
8
+ class HardLineBreak < Base
9
+ def to_adoc(_model, _options = {})
10
+ " +\n"
11
+ end
12
+ end
13
+ end
14
+
15
+ # Self-register this serializer
16
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Inline::HardLineBreak, Inline::HardLineBreak)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module AsciiDoc
5
+ module Serializer
6
+ module Serializers
7
+ module Inline
8
+ # Serializer for Highlight inline formatting
9
+ class Highlight < Base
10
+ def to_adoc(model, _options = {})
11
+ content = serialize_content(model.content)
12
+ content = Coradoc::Util::AsciiDoc.escape_characters(content, escape_chars: ['#'])
13
+
14
+ return '' if content.empty?
15
+
16
+ model.unconstrained ? "###{content}##" : "##{content}#"
17
+ end
18
+ end
19
+ end
20
+
21
+ # Self-register this serializer
22
+ ElementRegistry.register(Coradoc::AsciiDoc::Model::Inline::Highlight, Inline::Highlight)
23
+ end
24
+ end
25
+ end
26
+ end