coradoc 2.0.3 → 2.0.5

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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +24 -11
  3. data/coradoc-adoc/lib/coradoc/asciidoc/model/attached.rb +3 -0
  4. data/coradoc-adoc/lib/coradoc/asciidoc/model/base.rb +10 -0
  5. data/coradoc-adoc/lib/coradoc/asciidoc/model/break.rb +7 -0
  6. data/coradoc-adoc/lib/coradoc/asciidoc/model/comment_block.rb +4 -0
  7. data/coradoc-adoc/lib/coradoc/asciidoc/model/image/block_image.rb +4 -0
  8. data/coradoc-adoc/lib/coradoc/asciidoc/model/image/inline_image.rb +4 -0
  9. data/coradoc-adoc/lib/coradoc/asciidoc/model/inline/base.rb +3 -0
  10. data/coradoc-adoc/lib/coradoc/asciidoc/model/inline/hard_line_break.rb +3 -0
  11. data/coradoc-adoc/lib/coradoc/asciidoc/model/list/core.rb +4 -0
  12. data/coradoc-adoc/lib/coradoc/asciidoc/model/list/item.rb +0 -17
  13. data/coradoc-adoc/lib/coradoc/asciidoc/model/section.rb +4 -0
  14. data/coradoc-adoc/lib/coradoc/asciidoc/model/table.rb +4 -0
  15. data/coradoc-adoc/lib/coradoc/asciidoc/model/text_element.rb +4 -0
  16. data/coradoc-adoc/lib/coradoc/asciidoc/parser/base.rb +1 -0
  17. data/coradoc-adoc/lib/coradoc/asciidoc/parser/block.rb +5 -5
  18. data/coradoc-adoc/lib/coradoc/asciidoc/parser/content.rb +11 -3
  19. data/coradoc-adoc/lib/coradoc/asciidoc/parser/inline.rb +15 -15
  20. data/coradoc-adoc/lib/coradoc/asciidoc/parser/list.rb +2 -2
  21. data/coradoc-adoc/lib/coradoc/asciidoc/parser/section.rb +1 -0
  22. data/coradoc-adoc/lib/coradoc/asciidoc/serializer/serializers/base.rb +0 -11
  23. data/coradoc-adoc/lib/coradoc/asciidoc/serializer/serializers/document.rb +4 -1
  24. data/coradoc-adoc/lib/coradoc/asciidoc/serializer/serializers/list/item.rb +4 -10
  25. data/coradoc-adoc/lib/coradoc/asciidoc/serializer/spacing_strategy.rb +4 -18
  26. data/coradoc-adoc/lib/coradoc/asciidoc/transform/to_core_model.rb +12 -2
  27. data/coradoc-adoc/lib/coradoc/asciidoc/transform/to_core_model_registrations.rb +8 -1
  28. data/coradoc-adoc/lib/coradoc/asciidoc/transformer/misc_rules.rb +5 -0
  29. data/coradoc-adoc/lib/coradoc/asciidoc/transformer/structural_rules.rb +8 -8
  30. data/coradoc-adoc/lib/coradoc/asciidoc/transformer.rb +22 -5
  31. data/coradoc-adoc/spec/coradoc/asciidoc/integration_pipeline_spec.rb +344 -0
  32. data/coradoc-adoc/spec/coradoc/asciidoc/list_continuation_spec.rb +1 -1
  33. data/coradoc-adoc/spec/coradoc/asciidoc/model/base_spec.rb +16 -2
  34. data/coradoc-adoc/spec/coradoc/asciidoc/model/element_classification_spec.rb +146 -0
  35. data/coradoc-adoc/spec/coradoc/asciidoc/round_trip_spec.rb +0 -1
  36. data/coradoc-adoc/spec/coradoc/developer_experience_spec.rb +0 -1
  37. data/coradoc-html/spec/input/converters/converters_spec.rb +5 -7
  38. data/lib/coradoc/core_model/structural_element.rb +4 -0
  39. data/lib/coradoc/document_manipulator.rb +3 -1
  40. data/lib/coradoc/version.rb +1 -1
  41. metadata +3 -1
@@ -0,0 +1,146 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe 'Element classification' do
6
+ describe 'block_level?' do
7
+ it 'Section is block-level' do
8
+ expect(Coradoc::AsciiDoc::Model::Section.new.block_level?).to be(true)
9
+ end
10
+
11
+ it 'Paragraph is block-level' do
12
+ expect(Coradoc::AsciiDoc::Model::Paragraph.new.block_level?).to be(true)
13
+ end
14
+
15
+ it 'Admonition is block-level' do
16
+ expect(Coradoc::AsciiDoc::Model::Admonition.new.block_level?).to be(true)
17
+ end
18
+
19
+ it 'CommentBlock is block-level' do
20
+ expect(Coradoc::AsciiDoc::Model::CommentBlock.new.block_level?).to be(true)
21
+ end
22
+
23
+ it 'Table is block-level' do
24
+ expect(Coradoc::AsciiDoc::Model::Table.new.block_level?).to be(true)
25
+ end
26
+
27
+ it 'Block::Core is block-level' do
28
+ expect(Coradoc::AsciiDoc::Model::Block::Core.new.block_level?).to be(true)
29
+ end
30
+
31
+ it 'Block::Listing is block-level (inherits from Core)' do
32
+ expect(Coradoc::AsciiDoc::Model::Block::Listing.new.block_level?).to be(true)
33
+ end
34
+
35
+ it 'Block::Quote is block-level (inherits from Core)' do
36
+ expect(Coradoc::AsciiDoc::Model::Block::Quote.new.block_level?).to be(true)
37
+ end
38
+
39
+ it 'List::Ordered is block-level' do
40
+ expect(Coradoc::AsciiDoc::Model::List::Ordered.new.block_level?).to be(true)
41
+ end
42
+
43
+ it 'List::Unordered is block-level' do
44
+ expect(Coradoc::AsciiDoc::Model::List::Unordered.new.block_level?).to be(true)
45
+ end
46
+
47
+ it 'BlockImage is block-level' do
48
+ expect(Coradoc::AsciiDoc::Model::Image::BlockImage.new.block_level?).to be(true)
49
+ end
50
+ end
51
+
52
+ describe 'inline?' do
53
+ it 'Inline::Bold is inline' do
54
+ expect(Coradoc::AsciiDoc::Model::Inline::Bold.new.inline?).to be(true)
55
+ end
56
+
57
+ it 'Inline::Italic is inline' do
58
+ expect(Coradoc::AsciiDoc::Model::Inline::Italic.new.inline?).to be(true)
59
+ end
60
+
61
+ it 'Inline::Monospace is inline' do
62
+ expect(Coradoc::AsciiDoc::Model::Inline::Monospace.new.inline?).to be(true)
63
+ end
64
+
65
+ it 'Inline::Highlight is inline' do
66
+ expect(Coradoc::AsciiDoc::Model::Inline::Highlight.new.inline?).to be(true)
67
+ end
68
+
69
+ it 'Inline::Superscript is inline' do
70
+ expect(Coradoc::AsciiDoc::Model::Inline::Superscript.new.inline?).to be(true)
71
+ end
72
+
73
+ it 'Inline::Subscript is inline' do
74
+ expect(Coradoc::AsciiDoc::Model::Inline::Subscript.new.inline?).to be(true)
75
+ end
76
+
77
+ it 'Inline::Link is inline' do
78
+ expect(Coradoc::AsciiDoc::Model::Inline::Link.new.inline?).to be(true)
79
+ end
80
+
81
+ it 'Inline::Anchor is inline' do
82
+ expect(Coradoc::AsciiDoc::Model::Inline::Anchor.new.inline?).to be(true)
83
+ end
84
+
85
+ it 'TextElement is inline' do
86
+ expect(Coradoc::AsciiDoc::Model::TextElement.new.inline?).to be(true)
87
+ end
88
+
89
+ it 'InlineImage is inline' do
90
+ expect(Coradoc::AsciiDoc::Model::Image::InlineImage.new.inline?).to be(true)
91
+ end
92
+
93
+ it 'HardLineBreak returns :hardbreak' do
94
+ expect(Coradoc::AsciiDoc::Model::Inline::HardLineBreak.new.inline?).to eq(:hardbreak)
95
+ end
96
+ end
97
+
98
+ describe 'non-block, non-inline elements' do
99
+ it 'Title is neither block nor inline' do
100
+ title = Coradoc::AsciiDoc::Model::Title.new
101
+ expect(title.block_level?).to be(false)
102
+ expect(title.inline?).to be(false)
103
+ end
104
+
105
+ it 'List::Item is neither block nor inline' do
106
+ item = Coradoc::AsciiDoc::Model::List::Item.new
107
+ expect(item.block_level?).to be(false)
108
+ expect(item.inline?).to be(false)
109
+ end
110
+
111
+ it 'AttributeList is neither block nor inline' do
112
+ attrs = Coradoc::AsciiDoc::Model::AttributeList.new
113
+ expect(attrs.block_level?).to be(false)
114
+ expect(attrs.inline?).to be(false)
115
+ end
116
+ end
117
+
118
+ describe 'SpacingStrategy integration' do
119
+ let(:strategy) { Coradoc::AsciiDoc::Serializer::SpacingStrategy }
120
+
121
+ it 'uses polymorphic block_level? for spacing' do
122
+ para = Coradoc::AsciiDoc::Model::Paragraph.new
123
+ section = Coradoc::AsciiDoc::Model::Section.new
124
+
125
+ expect(strategy.block_level?(para)).to be(true)
126
+ expect(strategy.block_level?(section)).to be(true)
127
+ end
128
+
129
+ it 'uses polymorphic inline? for spacing' do
130
+ bold = Coradoc::AsciiDoc::Model::Inline::Bold.new
131
+ text = Coradoc::AsciiDoc::Model::TextElement.new
132
+
133
+ expect(strategy.inline_level?(bold)).to be(true)
134
+ expect(strategy.inline_level?(text)).to be(true)
135
+ end
136
+
137
+ it 'returns false for nil' do
138
+ expect(strategy.block_level?(nil)).to be(false)
139
+ expect(strategy.inline_level?(nil)).to be(false)
140
+ end
141
+
142
+ it 'treats strings as inline' do
143
+ expect(strategy.inline_level?('text')).to be(true)
144
+ end
145
+ end
146
+ end
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- # rubocop:disable RSpec/DescribeClass
6
5
  RSpec.describe 'Round-Trip Conversion' do
7
6
  # Helper to parse, transform to CoreModel, transform back, and serialize
8
7
  def round_trip(adoc_text)
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- # rubocop:disable RSpec/DescribeClass - This is a feature spec for the API facade
6
5
  RSpec.describe 'Developer Experience API' do
7
6
  # Load coradoc core and asciidoc
8
7
 
@@ -447,7 +447,7 @@ RSpec.describe Coradoc::Input::Html::Converters do
447
447
  result = converter_module.process_coradoc(node, {})
448
448
 
449
449
  # Extract text content from the block (use children for mixed content)
450
- content = result.respond_to?(:children) && result.children.any? ? result.children : result.content
450
+ content = result.is_a?(Coradoc::CoreModel::Base) && result.children&.any? ? result.children : result.content
451
451
  text = extract_text_from_content(content)
452
452
  expect(text).to include('Simple text')
453
453
  end
@@ -459,7 +459,7 @@ RSpec.describe Coradoc::Input::Html::Converters do
459
459
 
460
460
  result = converter_module.process_coradoc(node, {})
461
461
 
462
- content = result.respond_to?(:children) && result.children.any? ? result.children : result.content
462
+ content = result.is_a?(Coradoc::CoreModel::Base) && result.children&.any? ? result.children : result.content
463
463
  text = extract_text_from_content(content)
464
464
  expect(text).to include('Before')
465
465
  expect(text).to include('Bold')
@@ -477,15 +477,13 @@ RSpec.describe Coradoc::Input::Html::Converters do
477
477
  when Coradoc::CoreModel::InlineElement
478
478
  # Extract from both content and nested_elements
479
479
  text_parts = [extract_text_from_content(c.content)]
480
- text_parts << extract_text_from_content(c.nested_elements) if c.respond_to?(:nested_elements) && c.nested_elements
480
+ text_parts << extract_text_from_content(c.nested_elements) if c.nested_elements
481
481
  text_parts.join
482
482
  when Coradoc::CoreModel::Base
483
- if c.respond_to?(:children) && c.children.is_a?(Array)
483
+ if c.children.is_a?(Array)
484
484
  extract_text_from_content(c.children)
485
- elsif c.respond_to?(:content)
486
- extract_text_from_content(c.content)
487
485
  else
488
- ''
486
+ extract_text_from_content(c.content)
489
487
  end
490
488
  when Array
491
489
  extract_text_from_content(c)
@@ -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
@@ -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,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Coradoc
4
- VERSION = '2.0.3'
4
+ VERSION = '2.0.5'
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.3
4
+ version: 2.0.5
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
@@ -300,6 +301,7 @@ files:
300
301
  - coradoc-adoc/spec/coradoc/asciidoc/model/break_spec.rb
301
302
  - coradoc-adoc/spec/coradoc/asciidoc/model/document_attributes_spec.rb
302
303
  - coradoc-adoc/spec/coradoc/asciidoc/model/document_spec.rb
304
+ - coradoc-adoc/spec/coradoc/asciidoc/model/element_classification_spec.rb
303
305
  - coradoc-adoc/spec/coradoc/asciidoc/model/header_spec.rb
304
306
  - coradoc-adoc/spec/coradoc/asciidoc/model/image_spec.rb
305
307
  - coradoc-adoc/spec/coradoc/asciidoc/model/inline/extended_spec.rb