coradoc 2.0.4 → 2.0.6

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 (127) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +96 -51
  3. data/coradoc-adoc/lib/coradoc/asciidoc/model/break.rb +7 -0
  4. data/coradoc-adoc/lib/coradoc/asciidoc/model/document.rb +2 -2
  5. data/coradoc-adoc/lib/coradoc/asciidoc/model/include.rb +2 -2
  6. data/coradoc-adoc/lib/coradoc/asciidoc/model.rb +6 -4
  7. data/coradoc-adoc/lib/coradoc/asciidoc/parser/base.rb +1 -0
  8. data/coradoc-adoc/lib/coradoc/asciidoc/parser/block.rb +8 -7
  9. data/coradoc-adoc/lib/coradoc/asciidoc/parser/content.rb +13 -3
  10. data/coradoc-adoc/lib/coradoc/asciidoc/parser/inline.rb +15 -15
  11. data/coradoc-adoc/lib/coradoc/asciidoc/parser/list.rb +2 -2
  12. data/coradoc-adoc/lib/coradoc/asciidoc/parser/section.rb +1 -0
  13. data/coradoc-adoc/lib/coradoc/asciidoc/serializer/serializers/document.rb +4 -1
  14. data/coradoc-adoc/lib/coradoc/asciidoc/transform/from_core_model.rb +84 -13
  15. data/coradoc-adoc/lib/coradoc/asciidoc/transform/to_core_model.rb +106 -27
  16. data/coradoc-adoc/lib/coradoc/asciidoc/transform/to_core_model_registrations.rb +50 -19
  17. data/coradoc-adoc/lib/coradoc/asciidoc/transformer/misc_rules.rb +5 -0
  18. data/coradoc-adoc/lib/coradoc/asciidoc/transformer/structural_rules.rb +9 -8
  19. data/coradoc-adoc/lib/coradoc/asciidoc/transformer.rb +22 -5
  20. data/coradoc-adoc/lib/coradoc/asciidoc.rb +7 -2
  21. data/coradoc-adoc/spec/coradoc/asciidoc/integration_pipeline_spec.rb +342 -0
  22. data/coradoc-adoc/spec/coradoc/asciidoc/list_continuation_spec.rb +1 -1
  23. data/coradoc-adoc/spec/coradoc/asciidoc/round_trip_spec.rb +0 -2
  24. data/coradoc-adoc/spec/coradoc/asciidoc/transform/from_core_model_spec.rb +3 -2
  25. data/coradoc-adoc/spec/coradoc/developer_experience_spec.rb +0 -2
  26. data/coradoc-adoc/spec/transform/from_core_model_spec.rb +3 -3
  27. data/coradoc-adoc/spec/transform/to_core_model_spec.rb +1 -0
  28. data/coradoc-html/lib/coradoc/html/converters/base.rb +41 -17
  29. data/coradoc-html/lib/coradoc/html/converters/example.rb +1 -2
  30. data/coradoc-html/lib/coradoc/html/converters/listing.rb +1 -2
  31. data/coradoc-html/lib/coradoc/html/converters/literal.rb +1 -2
  32. data/coradoc-html/lib/coradoc/html/converters/open.rb +1 -2
  33. data/coradoc-html/lib/coradoc/html/converters/quote.rb +2 -3
  34. data/coradoc-html/lib/coradoc/html/converters/sidebar.rb +1 -2
  35. data/coradoc-html/lib/coradoc/html/converters/source.rb +1 -2
  36. data/coradoc-html/lib/coradoc/html/converters/source_code.rb +1 -2
  37. data/coradoc-html/lib/coradoc/html/converters/term.rb +1 -2
  38. data/coradoc-html/lib/coradoc/html/converters/verse.rb +2 -3
  39. data/coradoc-html/lib/coradoc/html/input/converters/aside.rb +1 -1
  40. data/coradoc-html/lib/coradoc/html/input/converters/audio.rb +1 -1
  41. data/coradoc-html/lib/coradoc/html/input/converters/blockquote.rb +2 -3
  42. data/coradoc-html/lib/coradoc/html/input/converters/div.rb +1 -2
  43. data/coradoc-html/lib/coradoc/html/input/converters/figure.rb +2 -3
  44. data/coradoc-html/lib/coradoc/html/input/converters/hr.rb +1 -1
  45. data/coradoc-html/lib/coradoc/html/input/converters/p.rb +2 -1
  46. data/coradoc-html/lib/coradoc/html/input/converters/pre.rb +14 -10
  47. data/coradoc-html/lib/coradoc/html/input/converters/video.rb +1 -1
  48. data/coradoc-html/lib/coradoc/html/renderer.rb +50 -2
  49. data/coradoc-html/lib/coradoc/html/spa.rb +2 -2
  50. data/coradoc-html/lib/coradoc/html/static.rb +2 -2
  51. data/coradoc-html/lib/coradoc/html/templates/core_model/definition_list.liquid +11 -0
  52. data/coradoc-html/lib/coradoc/html/theme/modern/javascript_generator.rb +2 -2
  53. data/coradoc-html/lib/coradoc/html/theme/modern/serializers/document_serializer.rb +7 -11
  54. data/coradoc-html/lib/coradoc/html/theme/modern_renderer.rb +6 -7
  55. data/coradoc-html/lib/coradoc/html.rb +5 -15
  56. data/coradoc-html/spec/input/converters/converters_spec.rb +6 -8
  57. data/coradoc-markdown/lib/coradoc/markdown/model/attribute_list.rb +0 -3
  58. data/coradoc-markdown/lib/coradoc/markdown/model/definition_list.rb +0 -3
  59. data/coradoc-markdown/lib/coradoc/markdown/model/extension.rb +0 -2
  60. data/coradoc-markdown/lib/coradoc/markdown/model/highlight.rb +0 -1
  61. data/coradoc-markdown/lib/coradoc/markdown/model/math.rb +0 -1
  62. data/coradoc-markdown/lib/coradoc/markdown/model/strikethrough.rb +0 -1
  63. data/coradoc-markdown/lib/coradoc/markdown/parser/ast_processor.rb +2 -2
  64. data/coradoc-markdown/lib/coradoc/markdown/parser/block_parser.rb +2 -2
  65. data/coradoc-markdown/lib/coradoc/markdown/parser/inline_parser.rb +3 -3
  66. data/coradoc-markdown/lib/coradoc/markdown/parser.rb +9 -3
  67. data/coradoc-markdown/lib/coradoc/markdown/toc_generator.rb +6 -4
  68. data/coradoc-markdown/lib/coradoc/markdown/transform/from_core_model.rb +27 -6
  69. data/coradoc-markdown/lib/coradoc/markdown/transform/to_core_model.rb +5 -9
  70. data/coradoc-markdown/lib/coradoc/markdown/transformer.rb +2 -1
  71. data/coradoc-markdown/spec/transform/to_core_model_spec.rb +6 -8
  72. data/exe/coradoc +1 -0
  73. data/lib/coradoc/coradoc.rb +6 -7
  74. data/lib/coradoc/core_model/annotation_block.rb +0 -2
  75. data/lib/coradoc/core_model/block.rb +92 -32
  76. data/lib/coradoc/core_model/builder/block_builder.rb +20 -2
  77. data/lib/coradoc/core_model/builder/detection.rb +0 -8
  78. data/lib/coradoc/core_model/builder.rb +6 -7
  79. data/lib/coradoc/core_model/example_block.rb +12 -0
  80. data/lib/coradoc/core_model/listing_block.rb +15 -0
  81. data/lib/coradoc/core_model/literal_block.rb +12 -0
  82. data/lib/coradoc/core_model/open_block.rb +12 -0
  83. data/lib/coradoc/core_model/pass_block.rb +12 -0
  84. data/lib/coradoc/core_model/quote_block.rb +14 -0
  85. data/lib/coradoc/core_model/reviewer_block.rb +12 -0
  86. data/lib/coradoc/core_model/sidebar_block.rb +12 -0
  87. data/lib/coradoc/core_model/source_block.rb +22 -0
  88. data/lib/coradoc/core_model/structural_element.rb +4 -0
  89. data/lib/coradoc/core_model/verse_block.rb +14 -0
  90. data/lib/coradoc/core_model.rb +10 -0
  91. data/lib/coradoc/document_manipulator.rb +3 -1
  92. data/lib/coradoc/processor_registry.rb +0 -2
  93. data/lib/coradoc/version.rb +1 -1
  94. metadata +13 -34
  95. data/coradoc-markdown/coverage/.last_run.json +0 -5
  96. data/coradoc-markdown/coverage/.resultset.json +0 -6322
  97. data/coradoc-markdown/coverage/.resultset.json.lock +0 -0
  98. data/coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_asc.png +0 -0
  99. data/coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_asc_disabled.png +0 -0
  100. data/coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_both.png +0 -0
  101. data/coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_desc.png +0 -0
  102. data/coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_desc_disabled.png +0 -0
  103. data/coradoc-markdown/coverage/assets/0.13.2/application.css +0 -1
  104. data/coradoc-markdown/coverage/assets/0.13.2/application.js +0 -7
  105. data/coradoc-markdown/coverage/assets/0.13.2/colorbox/border.png +0 -0
  106. data/coradoc-markdown/coverage/assets/0.13.2/colorbox/controls.png +0 -0
  107. data/coradoc-markdown/coverage/assets/0.13.2/colorbox/loading.gif +0 -0
  108. data/coradoc-markdown/coverage/assets/0.13.2/colorbox/loading_background.png +0 -0
  109. data/coradoc-markdown/coverage/assets/0.13.2/favicon_green.png +0 -0
  110. data/coradoc-markdown/coverage/assets/0.13.2/favicon_red.png +0 -0
  111. data/coradoc-markdown/coverage/assets/0.13.2/favicon_yellow.png +0 -0
  112. data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  113. data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  114. data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  115. data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  116. data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  117. data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  118. data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  119. data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  120. data/coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_222222_256x240.png +0 -0
  121. data/coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_2e83ff_256x240.png +0 -0
  122. data/coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_454545_256x240.png +0 -0
  123. data/coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_888888_256x240.png +0 -0
  124. data/coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_cd0a0a_256x240.png +0 -0
  125. data/coradoc-markdown/coverage/assets/0.13.2/loading.gif +0 -0
  126. data/coradoc-markdown/coverage/assets/0.13.2/magnify.png +0 -0
  127. data/coradoc-markdown/coverage/index.html +0 -66032
data/exe/coradoc CHANGED
@@ -21,6 +21,7 @@ require 'coradoc'
21
21
  require 'coradoc/cli'
22
22
 
23
23
  # Load available format gems
24
+ require 'coradoc/asciidoc'
24
25
  require 'coradoc/html'
25
26
  require 'coradoc/markdown'
26
27
 
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'lutaml/model'
4
- require_relative 'errors'
5
4
 
6
5
  # Coradoc - A hub-and-spoke document transformation library
7
6
  #
@@ -442,6 +441,7 @@ module Coradoc
442
441
  end
443
442
  end
444
443
 
444
+ autoload :Error, "#{__dir__}/errors"
445
445
  autoload :Version, "#{__dir__}/version"
446
446
  autoload :Logger, "#{__dir__}/logger"
447
447
  autoload :Hooks, "#{__dir__}/hooks"
@@ -449,14 +449,13 @@ module Coradoc
449
449
  autoload :Validation, "#{__dir__}/validation"
450
450
  autoload :Configurable, "#{__dir__}/configurable"
451
451
  autoload :FormatModule, "#{__dir__}/format_module"
452
+ autoload :CoreModel, "#{__dir__}/core_model"
453
+ autoload :Registry, "#{__dir__}/registry"
454
+ autoload :Transform, "#{__dir__}/transform"
455
+ autoload :Input, "#{__dir__}/input"
456
+ autoload :Output, "#{__dir__}/output"
452
457
  end
453
458
 
454
- require_relative 'core_model'
455
- require_relative 'registry'
456
- require_relative 'transform'
457
- require_relative 'input'
458
- require_relative 'output'
459
-
460
459
  # Format gems self-register via Coradoc.register_format when they are required.
461
460
  # No hardcoded registration needed here — each gem's entry file handles its own
462
461
  # registration (e.g., coradoc-adoc/lib/coradoc/asciidoc.rb calls
@@ -19,7 +19,6 @@ module Coradoc
19
19
  # @example Creating a NOTE annotation
20
20
  # note = CoreModel::AnnotationBlock.new(
21
21
  # annotation_type: "note",
22
- # delimiter_type: "****",
23
22
  # content: "This is important information."
24
23
  # )
25
24
  #
@@ -27,7 +26,6 @@ module Coradoc
27
26
  # reviewer = CoreModel::AnnotationBlock.new(
28
27
  # annotation_type: "reviewer",
29
28
  # annotation_label: "john.doe",
30
- # delimiter_type: "////",
31
29
  # content: "Please review this section."
32
30
  # )
33
31
  class AnnotationBlock < Block
@@ -2,39 +2,53 @@
2
2
 
3
3
  module Coradoc
4
4
  module CoreModel
5
- # Generic delimited block model
5
+ # Semantic block type constants
6
6
  #
7
- # Represents all standard AsciiDoc delimited blocks including:
8
- # - Example blocks (====)
9
- # - Literal blocks (````)
10
- # - Listing blocks (----)
11
- # - Open blocks (--)
12
- # - Pass blocks (++++/++++)
13
- # - Quote blocks (____)
14
- # - Sidebar blocks (****)
15
- # - Source blocks (----)
16
- # - Paragraphs (element_type: 'paragraph')
17
- #
18
- # This is a schema-agnostic representation that captures the semantic
19
- # structure without schema-specific interpretation.
7
+ # Format gems own the mapping between their syntax and these
8
+ # canonical semantic types. The core model never stores raw
9
+ # delimiter strings.
10
+ module BlockSemanticType
11
+ SOURCE_CODE = :source_code
12
+ LISTING = :listing
13
+ EXAMPLE = :example
14
+ QUOTE = :quote
15
+ SIDEBAR = :sidebar
16
+ LITERAL = :literal
17
+ OPEN = :open
18
+ PASS = :pass
19
+ VERSE = :verse
20
+ HORIZONTAL_RULE = :horizontal_rule
21
+ COMMENT = :comment
22
+ PARAGRAPH = :paragraph
23
+ VIDEO = :video
24
+ AUDIO = :audio
25
+ ANNOTATION = :annotation
26
+ REVIEWER = :reviewer
27
+
28
+ def self.all
29
+ [SOURCE_CODE, LISTING, EXAMPLE, QUOTE, SIDEBAR, LITERAL, OPEN, PASS,
30
+ VERSE, HORIZONTAL_RULE, COMMENT, PARAGRAPH, VIDEO, AUDIO,
31
+ ANNOTATION, REVIEWER].freeze
32
+ end
33
+ end
34
+
35
+ # Generic block model
20
36
  #
21
- # @example Creating a generic block
22
- # block = CoreModel::Block.new(
23
- # delimiter_type: "====",
24
- # delimiter_length: 4,
25
- # content: "Example content here"
26
- # )
37
+ # Represents all block-level elements in a format-neutral way.
38
+ # Each block has a `block_semantic_type` symbol (e.g., :source_code,
39
+ # :quote, :example) that captures its semantic meaning without
40
+ # tying it to any specific format's syntax.
27
41
  #
28
- # @example Creating a source block
42
+ # @example Creating a source code block
29
43
  # block = CoreModel::Block.new(
30
- # delimiter_type: "----",
44
+ # block_semantic_type: :source_code,
31
45
  # content: "puts 'Hello, World!'",
32
- # attributes: [{ role: "source", language: "ruby" }]
46
+ # language: "ruby"
33
47
  # )
34
48
  #
35
49
  # @example Creating a paragraph with inline formatting
36
50
  # block = CoreModel::Block.new(
37
- # element_type: "paragraph",
51
+ # block_semantic_type: :paragraph,
38
52
  # children: [
39
53
  # "Text with ",
40
54
  # CoreModel::InlineElement.new(format_type: "bold", content: "bold"),
@@ -44,14 +58,38 @@ module Coradoc
44
58
  class Block < Base
45
59
  include ChildrenContent
46
60
 
47
- # @!attribute element_type
61
+ class << self
62
+ # Class-level semantic type — overridden by each typed subclass.
63
+ # Returns nil for the generic Block base class.
64
+ def semantic_type
65
+ nil
66
+ end
67
+ end
68
+
69
+ # Resolve the semantic type from this block instance.
70
+ # Checks class-level semantic_type first (typed subclasses),
71
+ # then the block_semantic_type attribute, then element_type,
72
+ # then delimiter_type fallback.
73
+ def resolve_semantic_type
74
+ self.class.semantic_type ||
75
+ (block_semantic_type&.to_sym) ||
76
+ resolve_semantic_from_element_type ||
77
+ resolve_semantic_from_delimiter
78
+ end
79
+
80
+ # @!attribute block_semantic_type
48
81
  # @return [String, nil] the semantic type of the block
82
+ # (e.g., 'source_code', 'quote', 'example', 'paragraph')
83
+ attribute :block_semantic_type, :string
84
+
85
+ # @!attribute element_type
86
+ # @return [String, nil] the structural role of the block
49
87
  # (e.g., 'paragraph', 'block')
50
88
  attribute :element_type, :string
51
89
 
52
90
  # @!attribute delimiter_type
53
- # @return [String, nil] the delimiter character(s) used
54
- # (e.g., '****', '====', '----')
91
+ # @return [String, nil] DEPRECATED use block_semantic_type.
92
+ # Retained for backward compatibility during migration.
55
93
  attribute :delimiter_type, :string
56
94
 
57
95
  # @!attribute delimiter_length
@@ -76,15 +114,37 @@ module Coradoc
76
114
 
77
115
  private
78
116
 
117
+ def resolve_semantic_from_element_type
118
+ case element_type
119
+ when 'paragraph' then :paragraph
120
+ when 'comment' then :comment
121
+ else nil
122
+ end
123
+ end
124
+
125
+ def resolve_semantic_from_delimiter
126
+ delim = delimiter_type
127
+ return nil unless delim && delim.length >= 4
128
+
129
+ char = delim[0]
130
+ DELIMITER_CHAR_TO_SEMANTIC[char] || nil
131
+ end
132
+
133
+ # Map delimiter first character to semantic type (backward compat)
134
+ DELIMITER_CHAR_TO_SEMANTIC = {
135
+ '-' => :source_code,
136
+ '=' => :example,
137
+ '_' => :quote,
138
+ '*' => :sidebar,
139
+ '.' => :literal,
140
+ '+' => :pass
141
+ }.freeze
142
+
79
143
  # Attributes to compare for semantic equivalence
80
144
  #
81
- # Blocks are semantically equivalent if they have the same
82
- # delimiter type and content, regardless of delimiter length
83
- # or line structure.
84
- #
85
145
  # @return [Array<Symbol>] list of comparable attributes
86
146
  def comparable_attributes
87
- super + %i[delimiter_type content]
147
+ super + %i[block_semantic_type content]
88
148
  end
89
149
  end
90
150
  end
@@ -16,7 +16,7 @@ module Coradoc
16
16
  AnnotationBlock.new(
17
17
  annotation_type: annotation_type,
18
18
  annotation_label: extract_annotation_label(ast),
19
- delimiter_type: ast[:delimiter]&.to_s,
19
+ block_semantic_type: :annotation,
20
20
  delimiter_length: ast[:delimiter]&.to_s&.length || 4,
21
21
  content: extract_block_content(ast),
22
22
  lines: extract_block_lines(ast),
@@ -28,8 +28,10 @@ module Coradoc
28
28
 
29
29
  # Build generic block
30
30
  def build_generic_block(ast)
31
+ semantic_type = delimiter_to_semantic_type(ast[:delimiter]&.to_s)
32
+
31
33
  Block.new(
32
- delimiter_type: ast[:delimiter]&.to_s,
34
+ block_semantic_type: semantic_type,
33
35
  delimiter_length: ast[:delimiter]&.to_s&.length || 4,
34
36
  content: extract_block_content(ast),
35
37
  lines: extract_block_lines(ast),
@@ -39,6 +41,22 @@ module Coradoc
39
41
  )
40
42
  end
41
43
 
44
+ # Map delimiter character to semantic type
45
+ def delimiter_to_semantic_type(delimiter)
46
+ return nil unless delimiter && !delimiter.empty?
47
+
48
+ char = delimiter[0]
49
+ case char
50
+ when '-' then :source_code
51
+ when '=' then :example
52
+ when '_' then :quote
53
+ when '*' then :sidebar
54
+ when '.' then :literal
55
+ when '+' then :pass
56
+ else nil
57
+ end
58
+ end
59
+
42
60
  # Extract block content from various AST formats
43
61
  def extract_block_content(ast)
44
62
  return ast[:content] if ast[:content]
@@ -38,9 +38,6 @@ module Coradoc
38
38
  def detect_block_type(ast)
39
39
  return :annotation if extract_annotation_type(ast)
40
40
 
41
- delimiter = ast[:delimiter]&.to_s
42
- return :annotation if delimiter && annotation_delimiters.include?(delimiter[0])
43
-
44
41
  return :list if ast[:marker] && list_markers.include?(ast[:marker].to_s)
45
42
 
46
43
  :generic
@@ -172,11 +169,6 @@ module Coradoc
172
169
  %w[note warning caution important tip reviewer sidebar]
173
170
  end
174
171
 
175
- # List of annotation delimiters (first character)
176
- def annotation_delimiters
177
- %w[* / =]
178
- end
179
-
180
172
  # List of list markers
181
173
  def list_markers
182
174
  %w[* - . :: numbered]
@@ -2,13 +2,6 @@
2
2
 
3
3
  require 'logger'
4
4
 
5
- # Load builder modules
6
- require_relative 'builder/detection'
7
- require_relative 'builder/list_builder'
8
- require_relative 'builder/block_builder'
9
- require_relative 'builder/text_builder'
10
- require_relative 'builder/element_builder'
11
-
12
5
  module Coradoc
13
6
  module CoreModel
14
7
  # Builds CoreModel objects from generic AST
@@ -45,6 +38,12 @@ module Coradoc
45
38
  # }
46
39
  # block = CoreModel::Builder.new.build_block(block_ast)
47
40
  class Builder
41
+ autoload :Detection, "#{__dir__}/builder/detection"
42
+ autoload :ListBuilder, "#{__dir__}/builder/list_builder"
43
+ autoload :BlockBuilder, "#{__dir__}/builder/block_builder"
44
+ autoload :TextBuilder, "#{__dir__}/builder/text_builder"
45
+ autoload :ElementBuilder, "#{__dir__}/builder/element_builder"
46
+
48
47
  include Detection
49
48
  include ListBuilder
50
49
  include BlockBuilder
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module CoreModel
5
+ # Example block — a delimited block for examples
6
+ class ExampleBlock < Block
7
+ def self.semantic_type = :example
8
+
9
+ attribute :block_semantic_type, :string, default: -> { 'example' }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module CoreModel
5
+ # Listing block — a delimited block for listing/content without source language
6
+ #
7
+ # Distinct from SourceBlock: a listing has no language annotation.
8
+ # When a language is present, SourceBlock should be used instead.
9
+ class ListingBlock < Block
10
+ def self.semantic_type = :listing
11
+
12
+ attribute :block_semantic_type, :string, default: -> { 'listing' }
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module CoreModel
5
+ # Literal block — a delimited block for preformatted literal text
6
+ class LiteralBlock < Block
7
+ def self.semantic_type = :literal
8
+
9
+ attribute :block_semantic_type, :string, default: -> { 'literal' }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module CoreModel
5
+ # Open block — a generic container block with no special rendering
6
+ class OpenBlock < Block
7
+ def self.semantic_type = :open
8
+
9
+ attribute :block_semantic_type, :string, default: -> { 'open' }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module CoreModel
5
+ # Pass-through block — raw content passed through without processing
6
+ class PassBlock < Block
7
+ def self.semantic_type = :pass
8
+
9
+ attribute :block_semantic_type, :string, default: -> { 'pass' }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module CoreModel
5
+ # Quote block — a delimited block for quotations
6
+ class QuoteBlock < Block
7
+ def self.semantic_type = :quote
8
+
9
+ attribute :block_semantic_type, :string, default: -> { 'quote' }
10
+
11
+ attribute :attribution, :string
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module CoreModel
5
+ # Reviewer comment block — a block for reviewer annotations
6
+ class ReviewerBlock < AnnotationBlock
7
+ def self.semantic_type = :reviewer
8
+
9
+ attribute :block_semantic_type, :string, default: -> { 'reviewer' }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module CoreModel
5
+ # Sidebar block — a delimited block for sidebars
6
+ class SidebarBlock < Block
7
+ def self.semantic_type = :sidebar
8
+
9
+ attribute :block_semantic_type, :string, default: -> { 'sidebar' }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module CoreModel
5
+ # Specialized block for source code listings
6
+ #
7
+ # Represents a source code block with optional language annotation.
8
+ # This is a first-class model type rather than a generic Block with
9
+ # a delimiter_type tag.
10
+ #
11
+ # @example Creating a source code block
12
+ # block = CoreModel::SourceBlock.new(
13
+ # content: "puts 'Hello, World!'",
14
+ # language: "ruby"
15
+ # )
16
+ class SourceBlock < Block
17
+ def self.semantic_type = :source_code
18
+
19
+ attribute :block_semantic_type, :string, default: -> { 'source_code' }
20
+ end
21
+ end
22
+ end
@@ -54,6 +54,10 @@ module Coradoc
54
54
  # @return [Array<Base>, nil] child elements (sections, blocks, etc.)
55
55
  attribute :children, Base, collection: true
56
56
 
57
+ # @!attribute attributes
58
+ # @return [Hash] document-level attributes (key-value pairs)
59
+ attribute :attributes, :hash, default: -> { {} }
60
+
57
61
  # Heading level with sensible default
58
62
  #
59
63
  # @return [Integer] level, defaulting to 1 when unset
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module CoreModel
5
+ # Verse block — a block for verse/poetry with optional attribution
6
+ class VerseBlock < Block
7
+ def self.semantic_type = :verse
8
+
9
+ attribute :block_semantic_type, :string, default: -> { 'verse' }
10
+
11
+ attribute :attribution, :string
12
+ end
13
+ end
14
+ end
@@ -42,5 +42,15 @@ module Coradoc
42
42
  autoload :TocGenerator, "#{__dir__}/core_model/toc_generator"
43
43
  autoload :Bibliography, "#{__dir__}/core_model/bibliography"
44
44
  autoload :BibliographyEntry, "#{__dir__}/core_model/bibliography_entry"
45
+ autoload :SourceBlock, "#{__dir__}/core_model/source_block"
46
+ autoload :ExampleBlock, "#{__dir__}/core_model/example_block"
47
+ autoload :QuoteBlock, "#{__dir__}/core_model/quote_block"
48
+ autoload :SidebarBlock, "#{__dir__}/core_model/sidebar_block"
49
+ autoload :LiteralBlock, "#{__dir__}/core_model/literal_block"
50
+ autoload :PassBlock, "#{__dir__}/core_model/pass_block"
51
+ autoload :ListingBlock, "#{__dir__}/core_model/listing_block"
52
+ autoload :OpenBlock, "#{__dir__}/core_model/open_block"
53
+ autoload :VerseBlock, "#{__dir__}/core_model/verse_block"
54
+ autoload :ReviewerBlock, "#{__dir__}/core_model/reviewer_block"
45
55
  end
46
56
  end
@@ -132,7 +132,9 @@ module Coradoc
132
132
  .compact
133
133
  end
134
134
 
135
- return nil if element.is_a?(CoreModel::StructuralElement) && element.section? && !element.document? && !section_matches?(element, level: level, title: title)
135
+ return nil if element.is_a?(CoreModel::StructuralElement) && element.section? && !element.document? && !section_matches?(
136
+ element, level: level, title: title
137
+ )
136
138
 
137
139
  element
138
140
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'registry'
4
-
5
3
  module Coradoc
6
4
  # Module adapter that gives a module Registry-backed processor methods.
7
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Coradoc
4
- VERSION = '2.0.4'
4
+ VERSION = '2.0.6'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coradoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
@@ -288,6 +288,7 @@ files:
288
288
  - coradoc-adoc/lib/coradoc/util.rb
289
289
  - coradoc-adoc/lib/coradoc/util/asciidoc.rb
290
290
  - coradoc-adoc/spec/asciidoc/asciidoc_spec.rb
291
+ - coradoc-adoc/spec/coradoc/asciidoc/integration_pipeline_spec.rb
291
292
  - coradoc-adoc/spec/coradoc/asciidoc/list_continuation_spec.rb
292
293
  - coradoc-adoc/spec/coradoc/asciidoc/model/admonition_spec.rb
293
294
  - coradoc-adoc/spec/coradoc/asciidoc/model/attribute_list_spec.rb
@@ -520,6 +521,7 @@ files:
520
521
  - coradoc-html/lib/coradoc/html/templates/core_model/bibliography.liquid
521
522
  - coradoc-html/lib/coradoc/html/templates/core_model/bibliography_entry.liquid
522
523
  - coradoc-html/lib/coradoc/html/templates/core_model/block.liquid
524
+ - coradoc-html/lib/coradoc/html/templates/core_model/definition_list.liquid
523
525
  - coradoc-html/lib/coradoc/html/templates/core_model/image.liquid
524
526
  - coradoc-html/lib/coradoc/html/templates/core_model/inline_element.liquid
525
527
  - coradoc-html/lib/coradoc/html/templates/core_model/list_block.liquid
@@ -571,39 +573,6 @@ files:
571
573
  - coradoc-markdown/LICENSE.txt
572
574
  - coradoc-markdown/Rakefile
573
575
  - coradoc-markdown/coradoc-markdown.gemspec
574
- - coradoc-markdown/coverage/.last_run.json
575
- - coradoc-markdown/coverage/.resultset.json
576
- - coradoc-markdown/coverage/.resultset.json.lock
577
- - coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_asc.png
578
- - coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_asc_disabled.png
579
- - coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_both.png
580
- - coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_desc.png
581
- - coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_desc_disabled.png
582
- - coradoc-markdown/coverage/assets/0.13.2/application.css
583
- - coradoc-markdown/coverage/assets/0.13.2/application.js
584
- - coradoc-markdown/coverage/assets/0.13.2/colorbox/border.png
585
- - coradoc-markdown/coverage/assets/0.13.2/colorbox/controls.png
586
- - coradoc-markdown/coverage/assets/0.13.2/colorbox/loading.gif
587
- - coradoc-markdown/coverage/assets/0.13.2/colorbox/loading_background.png
588
- - coradoc-markdown/coverage/assets/0.13.2/favicon_green.png
589
- - coradoc-markdown/coverage/assets/0.13.2/favicon_red.png
590
- - coradoc-markdown/coverage/assets/0.13.2/favicon_yellow.png
591
- - coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_flat_0_aaaaaa_40x100.png
592
- - coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_flat_75_ffffff_40x100.png
593
- - coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_55_fbf9ee_1x400.png
594
- - coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_65_ffffff_1x400.png
595
- - coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_75_dadada_1x400.png
596
- - coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_75_e6e6e6_1x400.png
597
- - coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_95_fef1ec_1x400.png
598
- - coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_highlight-soft_75_cccccc_1x100.png
599
- - coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_222222_256x240.png
600
- - coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_2e83ff_256x240.png
601
- - coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_454545_256x240.png
602
- - coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_888888_256x240.png
603
- - coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_cd0a0a_256x240.png
604
- - coradoc-markdown/coverage/assets/0.13.2/loading.gif
605
- - coradoc-markdown/coverage/assets/0.13.2/magnify.png
606
- - coradoc-markdown/coverage/index.html
607
576
  - coradoc-markdown/lib/coradoc/markdown.rb
608
577
  - coradoc-markdown/lib/coradoc/markdown/errors.rb
609
578
  - coradoc-markdown/lib/coradoc/markdown/model/abbreviation.rb
@@ -1249,17 +1218,27 @@ files:
1249
1218
  - lib/coradoc/core_model/definition_item.rb
1250
1219
  - lib/coradoc/core_model/definition_list.rb
1251
1220
  - lib/coradoc/core_model/element_attribute.rb
1221
+ - lib/coradoc/core_model/example_block.rb
1252
1222
  - lib/coradoc/core_model/footnote.rb
1253
1223
  - lib/coradoc/core_model/image.rb
1254
1224
  - lib/coradoc/core_model/inline_element.rb
1255
1225
  - lib/coradoc/core_model/list_block.rb
1256
1226
  - lib/coradoc/core_model/list_item.rb
1227
+ - lib/coradoc/core_model/listing_block.rb
1228
+ - lib/coradoc/core_model/literal_block.rb
1257
1229
  - lib/coradoc/core_model/metadata.rb
1230
+ - lib/coradoc/core_model/open_block.rb
1231
+ - lib/coradoc/core_model/pass_block.rb
1232
+ - lib/coradoc/core_model/quote_block.rb
1233
+ - lib/coradoc/core_model/reviewer_block.rb
1234
+ - lib/coradoc/core_model/sidebar_block.rb
1235
+ - lib/coradoc/core_model/source_block.rb
1258
1236
  - lib/coradoc/core_model/structural_element.rb
1259
1237
  - lib/coradoc/core_model/table.rb
1260
1238
  - lib/coradoc/core_model/term.rb
1261
1239
  - lib/coradoc/core_model/toc.rb
1262
1240
  - lib/coradoc/core_model/toc_generator.rb
1241
+ - lib/coradoc/core_model/verse_block.rb
1263
1242
  - lib/coradoc/document_builder.rb
1264
1243
  - lib/coradoc/document_manipulator.rb
1265
1244
  - lib/coradoc/errors.rb
@@ -1,5 +0,0 @@
1
- {
2
- "result": {
3
- "line": 83.06
4
- }
5
- }