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.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +24 -11
- data/coradoc-adoc/lib/coradoc/asciidoc/model/attached.rb +3 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/model/base.rb +10 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/model/break.rb +7 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/model/comment_block.rb +4 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/model/image/block_image.rb +4 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/model/image/inline_image.rb +4 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/model/inline/base.rb +3 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/model/inline/hard_line_break.rb +3 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/model/list/core.rb +4 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/model/list/item.rb +0 -17
- data/coradoc-adoc/lib/coradoc/asciidoc/model/section.rb +4 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/model/table.rb +4 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/model/text_element.rb +4 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/parser/base.rb +1 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/parser/block.rb +5 -5
- data/coradoc-adoc/lib/coradoc/asciidoc/parser/content.rb +11 -3
- data/coradoc-adoc/lib/coradoc/asciidoc/parser/inline.rb +15 -15
- data/coradoc-adoc/lib/coradoc/asciidoc/parser/list.rb +2 -2
- data/coradoc-adoc/lib/coradoc/asciidoc/parser/section.rb +1 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/serializer/serializers/base.rb +0 -11
- data/coradoc-adoc/lib/coradoc/asciidoc/serializer/serializers/document.rb +4 -1
- data/coradoc-adoc/lib/coradoc/asciidoc/serializer/serializers/list/item.rb +4 -10
- data/coradoc-adoc/lib/coradoc/asciidoc/serializer/spacing_strategy.rb +4 -18
- data/coradoc-adoc/lib/coradoc/asciidoc/transform/to_core_model.rb +12 -2
- data/coradoc-adoc/lib/coradoc/asciidoc/transform/to_core_model_registrations.rb +8 -1
- data/coradoc-adoc/lib/coradoc/asciidoc/transformer/misc_rules.rb +5 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/transformer/structural_rules.rb +8 -8
- data/coradoc-adoc/lib/coradoc/asciidoc/transformer.rb +22 -5
- data/coradoc-adoc/spec/coradoc/asciidoc/integration_pipeline_spec.rb +344 -0
- data/coradoc-adoc/spec/coradoc/asciidoc/list_continuation_spec.rb +1 -1
- data/coradoc-adoc/spec/coradoc/asciidoc/model/base_spec.rb +16 -2
- data/coradoc-adoc/spec/coradoc/asciidoc/model/element_classification_spec.rb +146 -0
- data/coradoc-adoc/spec/coradoc/asciidoc/round_trip_spec.rb +0 -1
- data/coradoc-adoc/spec/coradoc/developer_experience_spec.rb +0 -1
- data/coradoc-html/spec/input/converters/converters_spec.rb +5 -7
- data/lib/coradoc/core_model/structural_element.rb +4 -0
- data/lib/coradoc/document_manipulator.rb +3 -1
- data/lib/coradoc/version.rb +1 -1
- 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
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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?(
|
|
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
|
data/lib/coradoc/version.rb
CHANGED
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
|
+
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
|