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.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +96 -51
- data/coradoc-adoc/lib/coradoc/asciidoc/model/break.rb +7 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/model/document.rb +2 -2
- data/coradoc-adoc/lib/coradoc/asciidoc/model/include.rb +2 -2
- data/coradoc-adoc/lib/coradoc/asciidoc/model.rb +6 -4
- data/coradoc-adoc/lib/coradoc/asciidoc/parser/base.rb +1 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/parser/block.rb +8 -7
- data/coradoc-adoc/lib/coradoc/asciidoc/parser/content.rb +13 -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/document.rb +4 -1
- data/coradoc-adoc/lib/coradoc/asciidoc/transform/from_core_model.rb +84 -13
- data/coradoc-adoc/lib/coradoc/asciidoc/transform/to_core_model.rb +106 -27
- data/coradoc-adoc/lib/coradoc/asciidoc/transform/to_core_model_registrations.rb +50 -19
- data/coradoc-adoc/lib/coradoc/asciidoc/transformer/misc_rules.rb +5 -0
- data/coradoc-adoc/lib/coradoc/asciidoc/transformer/structural_rules.rb +9 -8
- data/coradoc-adoc/lib/coradoc/asciidoc/transformer.rb +22 -5
- data/coradoc-adoc/lib/coradoc/asciidoc.rb +7 -2
- data/coradoc-adoc/spec/coradoc/asciidoc/integration_pipeline_spec.rb +342 -0
- data/coradoc-adoc/spec/coradoc/asciidoc/list_continuation_spec.rb +1 -1
- data/coradoc-adoc/spec/coradoc/asciidoc/round_trip_spec.rb +0 -2
- data/coradoc-adoc/spec/coradoc/asciidoc/transform/from_core_model_spec.rb +3 -2
- data/coradoc-adoc/spec/coradoc/developer_experience_spec.rb +0 -2
- data/coradoc-adoc/spec/transform/from_core_model_spec.rb +3 -3
- data/coradoc-adoc/spec/transform/to_core_model_spec.rb +1 -0
- data/coradoc-html/lib/coradoc/html/converters/base.rb +41 -17
- data/coradoc-html/lib/coradoc/html/converters/example.rb +1 -2
- data/coradoc-html/lib/coradoc/html/converters/listing.rb +1 -2
- data/coradoc-html/lib/coradoc/html/converters/literal.rb +1 -2
- data/coradoc-html/lib/coradoc/html/converters/open.rb +1 -2
- data/coradoc-html/lib/coradoc/html/converters/quote.rb +2 -3
- data/coradoc-html/lib/coradoc/html/converters/sidebar.rb +1 -2
- data/coradoc-html/lib/coradoc/html/converters/source.rb +1 -2
- data/coradoc-html/lib/coradoc/html/converters/source_code.rb +1 -2
- data/coradoc-html/lib/coradoc/html/converters/term.rb +1 -2
- data/coradoc-html/lib/coradoc/html/converters/verse.rb +2 -3
- data/coradoc-html/lib/coradoc/html/input/converters/aside.rb +1 -1
- data/coradoc-html/lib/coradoc/html/input/converters/audio.rb +1 -1
- data/coradoc-html/lib/coradoc/html/input/converters/blockquote.rb +2 -3
- data/coradoc-html/lib/coradoc/html/input/converters/div.rb +1 -2
- data/coradoc-html/lib/coradoc/html/input/converters/figure.rb +2 -3
- data/coradoc-html/lib/coradoc/html/input/converters/hr.rb +1 -1
- data/coradoc-html/lib/coradoc/html/input/converters/p.rb +2 -1
- data/coradoc-html/lib/coradoc/html/input/converters/pre.rb +14 -10
- data/coradoc-html/lib/coradoc/html/input/converters/video.rb +1 -1
- data/coradoc-html/lib/coradoc/html/renderer.rb +50 -2
- data/coradoc-html/lib/coradoc/html/spa.rb +2 -2
- data/coradoc-html/lib/coradoc/html/static.rb +2 -2
- data/coradoc-html/lib/coradoc/html/templates/core_model/definition_list.liquid +11 -0
- data/coradoc-html/lib/coradoc/html/theme/modern/javascript_generator.rb +2 -2
- data/coradoc-html/lib/coradoc/html/theme/modern/serializers/document_serializer.rb +7 -11
- data/coradoc-html/lib/coradoc/html/theme/modern_renderer.rb +6 -7
- data/coradoc-html/lib/coradoc/html.rb +5 -15
- data/coradoc-html/spec/input/converters/converters_spec.rb +6 -8
- data/coradoc-markdown/lib/coradoc/markdown/model/attribute_list.rb +0 -3
- data/coradoc-markdown/lib/coradoc/markdown/model/definition_list.rb +0 -3
- data/coradoc-markdown/lib/coradoc/markdown/model/extension.rb +0 -2
- data/coradoc-markdown/lib/coradoc/markdown/model/highlight.rb +0 -1
- data/coradoc-markdown/lib/coradoc/markdown/model/math.rb +0 -1
- data/coradoc-markdown/lib/coradoc/markdown/model/strikethrough.rb +0 -1
- data/coradoc-markdown/lib/coradoc/markdown/parser/ast_processor.rb +2 -2
- data/coradoc-markdown/lib/coradoc/markdown/parser/block_parser.rb +2 -2
- data/coradoc-markdown/lib/coradoc/markdown/parser/inline_parser.rb +3 -3
- data/coradoc-markdown/lib/coradoc/markdown/parser.rb +9 -3
- data/coradoc-markdown/lib/coradoc/markdown/toc_generator.rb +6 -4
- data/coradoc-markdown/lib/coradoc/markdown/transform/from_core_model.rb +27 -6
- data/coradoc-markdown/lib/coradoc/markdown/transform/to_core_model.rb +5 -9
- data/coradoc-markdown/lib/coradoc/markdown/transformer.rb +2 -1
- data/coradoc-markdown/spec/transform/to_core_model_spec.rb +6 -8
- data/exe/coradoc +1 -0
- data/lib/coradoc/coradoc.rb +6 -7
- data/lib/coradoc/core_model/annotation_block.rb +0 -2
- data/lib/coradoc/core_model/block.rb +92 -32
- data/lib/coradoc/core_model/builder/block_builder.rb +20 -2
- data/lib/coradoc/core_model/builder/detection.rb +0 -8
- data/lib/coradoc/core_model/builder.rb +6 -7
- data/lib/coradoc/core_model/example_block.rb +12 -0
- data/lib/coradoc/core_model/listing_block.rb +15 -0
- data/lib/coradoc/core_model/literal_block.rb +12 -0
- data/lib/coradoc/core_model/open_block.rb +12 -0
- data/lib/coradoc/core_model/pass_block.rb +12 -0
- data/lib/coradoc/core_model/quote_block.rb +14 -0
- data/lib/coradoc/core_model/reviewer_block.rb +12 -0
- data/lib/coradoc/core_model/sidebar_block.rb +12 -0
- data/lib/coradoc/core_model/source_block.rb +22 -0
- data/lib/coradoc/core_model/structural_element.rb +4 -0
- data/lib/coradoc/core_model/verse_block.rb +14 -0
- data/lib/coradoc/core_model.rb +10 -0
- data/lib/coradoc/document_manipulator.rb +3 -1
- data/lib/coradoc/processor_registry.rb +0 -2
- data/lib/coradoc/version.rb +1 -1
- metadata +13 -34
- data/coradoc-markdown/coverage/.last_run.json +0 -5
- data/coradoc-markdown/coverage/.resultset.json +0 -6322
- data/coradoc-markdown/coverage/.resultset.json.lock +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_asc.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_asc_disabled.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_both.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_desc.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/DataTables-1.10.20/images/sort_desc_disabled.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/application.css +0 -1
- data/coradoc-markdown/coverage/assets/0.13.2/application.js +0 -7
- data/coradoc-markdown/coverage/assets/0.13.2/colorbox/border.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/colorbox/controls.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/colorbox/loading.gif +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/colorbox/loading_background.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/favicon_green.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/favicon_red.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/favicon_yellow.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_222222_256x240.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_454545_256x240.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_888888_256x240.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/loading.gif +0 -0
- data/coradoc-markdown/coverage/assets/0.13.2/magnify.png +0 -0
- data/coradoc-markdown/coverage/index.html +0 -66032
data/exe/coradoc
CHANGED
data/lib/coradoc/coradoc.rb
CHANGED
|
@@ -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
|
-
#
|
|
5
|
+
# Semantic block type constants
|
|
6
6
|
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
#
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
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
|
-
#
|
|
44
|
+
# block_semantic_type: :source_code,
|
|
31
45
|
# content: "puts 'Hello, World!'",
|
|
32
|
-
#
|
|
46
|
+
# language: "ruby"
|
|
33
47
|
# )
|
|
34
48
|
#
|
|
35
49
|
# @example Creating a paragraph with inline formatting
|
|
36
50
|
# block = CoreModel::Block.new(
|
|
37
|
-
#
|
|
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
|
-
|
|
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]
|
|
54
|
-
#
|
|
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[
|
|
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
|
-
|
|
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
|
-
|
|
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
|
data/lib/coradoc/core_model.rb
CHANGED
|
@@ -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?(
|
|
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.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
|