coradoc-markdown 1.0.0 → 1.0.3
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/lib/coradoc/markdown/model/admonition.rb +35 -0
- data/lib/coradoc/markdown/model/attribute_list.rb +5 -16
- data/lib/coradoc/markdown/model/base.rb +2 -34
- data/lib/coradoc/markdown/model/comment.rb +14 -0
- data/lib/coradoc/markdown/model/cross_reference.rb +10 -0
- data/lib/coradoc/markdown/model/definition_list.rb +0 -12
- data/lib/coradoc/markdown/model/definition_term.rb +16 -6
- data/lib/coradoc/markdown/model/document.rb +9 -0
- data/lib/coradoc/markdown/model/example_block.rb +26 -0
- data/lib/coradoc/markdown/model/extension.rb +9 -18
- data/lib/coradoc/markdown/model/footnote_reference.rb +0 -5
- data/lib/coradoc/markdown/model/hard_line_break.rb +21 -0
- data/lib/coradoc/markdown/model/highlight.rb +0 -5
- data/lib/coradoc/markdown/model/horizontal_rule.rb +1 -6
- data/lib/coradoc/markdown/model/list_item.rb +1 -1
- data/lib/coradoc/markdown/model/literal.rb +21 -0
- data/lib/coradoc/markdown/model/math.rb +0 -14
- data/lib/coradoc/markdown/model/named_value.rb +18 -0
- data/lib/coradoc/markdown/model/open_block.rb +22 -0
- data/lib/coradoc/markdown/model/paragraph.rb +2 -2
- data/lib/coradoc/markdown/model/pass.rb +21 -0
- data/lib/coradoc/markdown/model/sidebar.rb +22 -0
- data/lib/coradoc/markdown/model/strikethrough.rb +0 -5
- data/lib/coradoc/markdown/model/subscript.rb +9 -0
- data/lib/coradoc/markdown/model/superscript.rb +9 -0
- data/lib/coradoc/markdown/model/underline.rb +9 -0
- data/lib/coradoc/markdown/model/verse.rb +27 -0
- data/lib/coradoc/markdown/parser/block_parser.rb +1 -1
- data/lib/coradoc/markdown/parser/frontmatter_parser.rb +23 -0
- data/lib/coradoc/markdown/serializer/builder.rb +57 -0
- data/lib/coradoc/markdown/serializer/config.rb +77 -0
- data/lib/coradoc/markdown/serializer/context.rb +66 -0
- data/lib/coradoc/markdown/serializer/element_serializer.rb +46 -0
- data/lib/coradoc/markdown/serializer/flavor.rb +82 -0
- data/lib/coradoc/markdown/serializer/registrations.rb +111 -0
- data/lib/coradoc/markdown/serializer/registry.rb +62 -0
- data/lib/coradoc/markdown/serializer/runner.rb +84 -0
- data/lib/coradoc/markdown/serializer/serializers/abbreviation.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/admonition.rb +20 -0
- data/lib/coradoc/markdown/serializer/serializers/attribute_list.rb +25 -0
- data/lib/coradoc/markdown/serializer/serializers/blockquote.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/code.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/code_block.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/comment.rb +31 -0
- data/lib/coradoc/markdown/serializer/serializers/cross_reference.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/definition_list.rb +20 -0
- data/lib/coradoc/markdown/serializer/serializers/document.rb +22 -0
- data/lib/coradoc/markdown/serializer/serializers/emphasis.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/example_block.rb +40 -0
- data/lib/coradoc/markdown/serializer/serializers/extension.rb +30 -0
- data/lib/coradoc/markdown/serializer/serializers/footnote.rb +20 -0
- data/lib/coradoc/markdown/serializer/serializers/footnote_reference.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/hard_line_break.rb +22 -0
- data/lib/coradoc/markdown/serializer/serializers/heading.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/highlight.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/horizontal_rule.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/image.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/link.rb +29 -0
- data/lib/coradoc/markdown/serializer/serializers/list.rb +45 -0
- data/lib/coradoc/markdown/serializer/serializers/literal.rb +21 -0
- data/lib/coradoc/markdown/serializer/serializers/math.rb +23 -0
- data/lib/coradoc/markdown/serializer/serializers/open_block.rb +38 -0
- data/lib/coradoc/markdown/serializer/serializers/paragraph.rb +23 -0
- data/lib/coradoc/markdown/serializer/serializers/pass.rb +21 -0
- data/lib/coradoc/markdown/serializer/serializers/sidebar.rb +20 -0
- data/lib/coradoc/markdown/serializer/serializers/strikethrough.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/strong.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/subscript.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/superscript.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/table.rb +37 -0
- data/lib/coradoc/markdown/serializer/serializers/underline.rb +19 -0
- data/lib/coradoc/markdown/serializer/serializers/verse.rb +31 -0
- data/lib/coradoc/markdown/serializer/strategies/admonition/base.rb +30 -0
- data/lib/coradoc/markdown/serializer/strategies/admonition/container.rb +34 -0
- data/lib/coradoc/markdown/serializer/strategies/admonition/gfm_alert.rb +28 -0
- data/lib/coradoc/markdown/serializer/strategies/admonition/github.rb +29 -0
- data/lib/coradoc/markdown/serializer/strategies/admonition/html.rb +25 -0
- data/lib/coradoc/markdown/serializer/strategies/admonition/registry.rb +50 -0
- data/lib/coradoc/markdown/serializer/strategies/autolink/angle.rb +35 -0
- data/lib/coradoc/markdown/serializer/strategies/autolink/bare.rb +23 -0
- data/lib/coradoc/markdown/serializer/strategies/autolink/base.rb +33 -0
- data/lib/coradoc/markdown/serializer/strategies/autolink/none.rb +27 -0
- data/lib/coradoc/markdown/serializer/strategies/autolink/registry.rb +58 -0
- data/lib/coradoc/markdown/serializer/strategies/definition_list/base.rb +37 -0
- data/lib/coradoc/markdown/serializer/strategies/definition_list/flat.rb +48 -0
- data/lib/coradoc/markdown/serializer/strategies/definition_list/nested_html.rb +54 -0
- data/lib/coradoc/markdown/serializer/strategies/definition_list/registry.rb +37 -0
- data/lib/coradoc/markdown/serializer.rb +30 -181
- data/lib/coradoc/markdown/toc_generator.rb +2 -8
- data/lib/coradoc/markdown/transform/block_transformer.rb +163 -0
- data/lib/coradoc/markdown/transform/from_core_model.rb +205 -40
- data/lib/coradoc/markdown/transform/image_transformer.rb +20 -0
- data/lib/coradoc/markdown/transform/inline_transformer.rb +74 -0
- data/lib/coradoc/markdown/transform/list_transformer.rb +52 -0
- data/lib/coradoc/markdown/transform/structural_transformer.rb +94 -0
- data/lib/coradoc/markdown/transform/table_transformer.rb +40 -0
- data/lib/coradoc/markdown/transform/to_core_model.rb +36 -30
- data/lib/coradoc/markdown/transformer.rb +87 -2
- data/lib/coradoc/markdown/version.rb +1 -1
- data/lib/coradoc/markdown.rb +23 -20
- metadata +89 -10
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'coradoc
|
|
3
|
+
require 'coradoc'
|
|
4
4
|
|
|
5
5
|
module Coradoc
|
|
6
6
|
module Markdown
|
|
@@ -62,6 +62,8 @@ module Coradoc
|
|
|
62
62
|
transform_extension(model)
|
|
63
63
|
when Coradoc::Markdown::AttributeList
|
|
64
64
|
transform_attribute_list(model)
|
|
65
|
+
when Coradoc::Markdown::Comment
|
|
66
|
+
Coradoc::CoreModel::CommentBlock.new(content: model.text.to_s)
|
|
65
67
|
when Coradoc::Markdown::Text
|
|
66
68
|
model.content.to_s
|
|
67
69
|
when Array
|
|
@@ -75,18 +77,33 @@ module Coradoc
|
|
|
75
77
|
|
|
76
78
|
def transform_document(doc)
|
|
77
79
|
children = Array(doc.blocks).map { |block| transform(block) }
|
|
80
|
+
children = prepend_frontmatter(children, doc.frontmatter)
|
|
78
81
|
|
|
79
|
-
Coradoc::CoreModel::
|
|
80
|
-
element_type: 'document',
|
|
82
|
+
Coradoc::CoreModel::DocumentElement.new(
|
|
81
83
|
id: doc.id,
|
|
82
84
|
title: extract_title(doc),
|
|
83
85
|
children: children
|
|
84
86
|
)
|
|
85
87
|
end
|
|
86
88
|
|
|
89
|
+
# If the Markdown document had raw frontmatter text, parse it
|
|
90
|
+
# via Codec into a typed FrontmatterBlock and prepend it so
|
|
91
|
+
# it participates in the standard block pipeline. Codec is
|
|
92
|
+
# the single source of truth for YAML parsing (DRY/MECE).
|
|
93
|
+
#
|
|
94
|
+
# The block is prepended even when the YAML is malformed —
|
|
95
|
+
# Codec returns an empty FrontmatterBlock in that case, which
|
|
96
|
+
# preserves the signal "frontmatter was present but invalid"
|
|
97
|
+
# for downstream consumers.
|
|
98
|
+
def prepend_frontmatter(children, frontmatter_text)
|
|
99
|
+
return children if frontmatter_text.nil? || frontmatter_text.strip.empty?
|
|
100
|
+
|
|
101
|
+
block = Coradoc::CoreModel::FrontmatterBlock::Codec.from_yaml(frontmatter_text)
|
|
102
|
+
[block, *children]
|
|
103
|
+
end
|
|
104
|
+
|
|
87
105
|
def transform_heading(heading)
|
|
88
|
-
Coradoc::CoreModel::
|
|
89
|
-
element_type: 'section',
|
|
106
|
+
Coradoc::CoreModel::SectionElement.new(
|
|
90
107
|
level: heading.level,
|
|
91
108
|
title: extract_text(heading.text),
|
|
92
109
|
children: []
|
|
@@ -96,15 +113,13 @@ module Coradoc
|
|
|
96
113
|
def transform_paragraph(para)
|
|
97
114
|
content = extract_text(para.text)
|
|
98
115
|
|
|
99
|
-
Coradoc::CoreModel::
|
|
100
|
-
element_type: 'paragraph',
|
|
116
|
+
Coradoc::CoreModel::ParagraphBlock.new(
|
|
101
117
|
content: content
|
|
102
118
|
)
|
|
103
119
|
end
|
|
104
120
|
|
|
105
121
|
def transform_code_block(block)
|
|
106
122
|
Coradoc::CoreModel::SourceBlock.new(
|
|
107
|
-
element_type: 'block',
|
|
108
123
|
content: block.code.to_s,
|
|
109
124
|
language: block.language
|
|
110
125
|
)
|
|
@@ -112,16 +127,17 @@ module Coradoc
|
|
|
112
127
|
|
|
113
128
|
def transform_blockquote(blockquote)
|
|
114
129
|
Coradoc::CoreModel::QuoteBlock.new(
|
|
115
|
-
element_type: 'block',
|
|
116
130
|
content: blockquote.content.to_s
|
|
117
131
|
)
|
|
118
132
|
end
|
|
119
133
|
|
|
120
134
|
def transform_list(list)
|
|
121
135
|
items = Array(list.items).map do |item|
|
|
136
|
+
nested = item.sublist ? transform_list(item.sublist) : nil
|
|
122
137
|
Coradoc::CoreModel::ListItem.new(
|
|
123
138
|
content: extract_text(item.text),
|
|
124
|
-
marker: list.ordered ? '1.' : '*'
|
|
139
|
+
marker: list.ordered ? '1.' : '*',
|
|
140
|
+
nested_list: nested
|
|
125
141
|
)
|
|
126
142
|
end
|
|
127
143
|
|
|
@@ -149,7 +165,7 @@ module Coradoc
|
|
|
149
165
|
cells = if row.is_a?(Array)
|
|
150
166
|
row.map { |c| Coradoc::CoreModel::TableCell.new(content: c.to_s, header: false) }
|
|
151
167
|
else
|
|
152
|
-
|
|
168
|
+
row.to_s.split(' | ').map { |c| Coradoc::CoreModel::TableCell.new(content: c.to_s, header: false) }
|
|
153
169
|
end
|
|
154
170
|
rows << Coradoc::CoreModel::TableRow.new(cells: cells)
|
|
155
171
|
end
|
|
@@ -165,25 +181,21 @@ module Coradoc
|
|
|
165
181
|
end
|
|
166
182
|
|
|
167
183
|
def transform_link(link)
|
|
168
|
-
Coradoc::CoreModel::
|
|
169
|
-
format_type: 'link',
|
|
184
|
+
Coradoc::CoreModel::LinkElement.new(
|
|
170
185
|
target: link.url,
|
|
171
186
|
content: extract_text(link.text)
|
|
172
187
|
)
|
|
173
188
|
end
|
|
174
189
|
|
|
175
190
|
def transform_inline(inline, format_type)
|
|
176
|
-
Coradoc::CoreModel::InlineElement.
|
|
177
|
-
|
|
191
|
+
klass = Coradoc::CoreModel::InlineElement.format_type_class(format_type)
|
|
192
|
+
klass.new(
|
|
178
193
|
content: extract_text(inline.text)
|
|
179
194
|
)
|
|
180
195
|
end
|
|
181
196
|
|
|
182
197
|
def transform_horizontal_rule(_rule)
|
|
183
|
-
Coradoc::CoreModel::
|
|
184
|
-
element_type: 'block',
|
|
185
|
-
block_semantic_type: :horizontal_rule
|
|
186
|
-
)
|
|
198
|
+
Coradoc::CoreModel::HorizontalRuleBlock.new
|
|
187
199
|
end
|
|
188
200
|
|
|
189
201
|
def transform_definition_list(dl)
|
|
@@ -221,13 +233,11 @@ module Coradoc
|
|
|
221
233
|
|
|
222
234
|
def transform_math(math)
|
|
223
235
|
if math.inline?
|
|
224
|
-
Coradoc::CoreModel::
|
|
225
|
-
format_type: 'stem',
|
|
236
|
+
Coradoc::CoreModel::StemElement.new(
|
|
226
237
|
content: math.content.to_s
|
|
227
238
|
)
|
|
228
239
|
else
|
|
229
240
|
Coradoc::CoreModel::PassBlock.new(
|
|
230
|
-
element_type: 'block',
|
|
231
241
|
content: math.content.to_s,
|
|
232
242
|
language: 'latexmath'
|
|
233
243
|
)
|
|
@@ -239,19 +249,16 @@ module Coradoc
|
|
|
239
249
|
when :toc
|
|
240
250
|
Coradoc::CoreModel::Toc.new
|
|
241
251
|
when :comment
|
|
242
|
-
Coradoc::CoreModel::
|
|
243
|
-
element_type: 'comment',
|
|
252
|
+
Coradoc::CoreModel::CommentBlock.new(
|
|
244
253
|
content: ext.content.to_s
|
|
245
254
|
)
|
|
246
255
|
when :nomarkdown
|
|
247
256
|
Coradoc::CoreModel::PassBlock.new(
|
|
248
|
-
element_type: 'block',
|
|
249
257
|
content: ext.content.to_s
|
|
250
258
|
)
|
|
251
259
|
else
|
|
252
260
|
# Unknown extensions: preserve content as a generic block
|
|
253
|
-
Coradoc::CoreModel::
|
|
254
|
-
element_type: 'paragraph',
|
|
261
|
+
Coradoc::CoreModel::ParagraphBlock.new(
|
|
255
262
|
content: ext.content.to_s
|
|
256
263
|
)
|
|
257
264
|
end
|
|
@@ -263,12 +270,11 @@ module Coradoc
|
|
|
263
270
|
attr_list.classes.each do |cls|
|
|
264
271
|
attrs << Coradoc::CoreModel::ElementAttribute.new(name: 'class', value: cls.to_s)
|
|
265
272
|
end
|
|
266
|
-
attr_list.attributes.each do |
|
|
267
|
-
attrs << Coradoc::CoreModel::ElementAttribute.new(name:
|
|
273
|
+
attr_list.attributes.each do |nv|
|
|
274
|
+
attrs << Coradoc::CoreModel::ElementAttribute.new(name: nv.name, value: nv.value)
|
|
268
275
|
end
|
|
269
276
|
|
|
270
277
|
Coradoc::CoreModel::StructuralElement.new(
|
|
271
|
-
element_type: 'attribute_list',
|
|
272
278
|
children: attrs
|
|
273
279
|
)
|
|
274
280
|
end
|
|
@@ -240,8 +240,8 @@ module Coradoc
|
|
|
240
240
|
|
|
241
241
|
# Check for known patterns and transform them
|
|
242
242
|
if element.key?(:heading)
|
|
243
|
-
level = element[:heading]
|
|
244
|
-
text = element[:text]
|
|
243
|
+
level = heading_level(element[:heading])
|
|
244
|
+
text = extract_text(element[:text]).strip
|
|
245
245
|
heading = Heading.new(level: level, text: text)
|
|
246
246
|
# Apply IAL if present
|
|
247
247
|
apply_ial_to_element(heading, element[:ial]) if element.key?(:ial)
|
|
@@ -287,6 +287,15 @@ module Coradoc
|
|
|
287
287
|
# Definition list
|
|
288
288
|
return transform_definition_list(element[:dl]) if element.key?(:dl)
|
|
289
289
|
|
|
290
|
+
# Unordered list
|
|
291
|
+
return transform_list(element[:ul], ordered: false) if element.key?(:ul)
|
|
292
|
+
|
|
293
|
+
# Ordered list
|
|
294
|
+
return transform_list(element[:ol], ordered: true) if element.key?(:ol)
|
|
295
|
+
|
|
296
|
+
# Table
|
|
297
|
+
return transform_table(element) if element.key?(:table_header)
|
|
298
|
+
|
|
290
299
|
# Footnote definition
|
|
291
300
|
if element.key?(:fn_id)
|
|
292
301
|
content = if element[:fn_content_continued]
|
|
@@ -310,6 +319,82 @@ module Coradoc
|
|
|
310
319
|
nil
|
|
311
320
|
end
|
|
312
321
|
|
|
322
|
+
# ATX heading: level is the count of leading '#' chars.
|
|
323
|
+
# Setext heading: level is 1 for '=' underline, 2 for '-' underline.
|
|
324
|
+
def heading_level(heading)
|
|
325
|
+
s = heading.to_s
|
|
326
|
+
return s.length if s.start_with?('#')
|
|
327
|
+
return 1 if s.start_with?('=')
|
|
328
|
+
return 2 if s.start_with?('-')
|
|
329
|
+
|
|
330
|
+
s.length
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
# Transform a list (ul/ol). Items arrive as `[{li: {p: {ln: "x"}}}, ...]`,
|
|
334
|
+
# as bare `{li: ...}` subtrees, or as an Array of mixed paragraph +
|
|
335
|
+
# nested-list nodes when the item has a sublist.
|
|
336
|
+
def transform_list(items, ordered:)
|
|
337
|
+
items = [items] unless items.is_a?(Array)
|
|
338
|
+
list_items = items.map do |node|
|
|
339
|
+
li = node.is_a?(Hash) ? node[:li] : node
|
|
340
|
+
transform_list_item(li)
|
|
341
|
+
end
|
|
342
|
+
List.new(ordered: ordered, items: list_items)
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
def transform_list_item(li)
|
|
346
|
+
nodes = normalize_list_item_nodes(li)
|
|
347
|
+
text_parts = []
|
|
348
|
+
sublist = nil
|
|
349
|
+
nodes.each do |n|
|
|
350
|
+
case n
|
|
351
|
+
when Hash
|
|
352
|
+
if n.key?(:p)
|
|
353
|
+
text_parts << extract_text_from_p(n[:p])
|
|
354
|
+
elsif n.key?(:ul)
|
|
355
|
+
sublist = transform_list(n[:ul], ordered: false)
|
|
356
|
+
elsif n.key?(:ol)
|
|
357
|
+
sublist = transform_list(n[:ol], ordered: true)
|
|
358
|
+
end
|
|
359
|
+
else
|
|
360
|
+
text_parts << n.to_s
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
item = ListItem.new(text: text_parts.join(' ').strip)
|
|
364
|
+
item.sublist = sublist if sublist
|
|
365
|
+
item
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
# Normalize the various shapes a list-item node can take:
|
|
369
|
+
# Hash {p: ...} -> [{p: ...}]
|
|
370
|
+
# Hash {ul: ...} -> [{ul: ...}] (nested list, no text)
|
|
371
|
+
# Array [...] -> [...] (mixed paragraph + nested list nodes)
|
|
372
|
+
# String / Slice -> [s]
|
|
373
|
+
def normalize_list_item_nodes(li)
|
|
374
|
+
return li if li.is_a?(Array)
|
|
375
|
+
return [li] unless li.is_a?(Hash)
|
|
376
|
+
return [li] if li.key?(:p) || li.key?(:ul) || li.key?(:ol) || li.key?(:li)
|
|
377
|
+
|
|
378
|
+
[li]
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
# Transform a table. Header row, separator row, and body rows.
|
|
382
|
+
def transform_table(element)
|
|
383
|
+
headers = extract_row_cells(element.dig(:table_header, :row))
|
|
384
|
+
body_rows = Array(element[:table_body]).map do |body_node|
|
|
385
|
+
extract_row_cells(body_node[:table_body_row][:row]).join(' | ')
|
|
386
|
+
end
|
|
387
|
+
Table.new(headers: headers, rows: body_rows)
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
def extract_row_cells(row)
|
|
391
|
+
Array(row).map do |cell|
|
|
392
|
+
next cell.to_s.strip unless cell.is_a?(Hash)
|
|
393
|
+
|
|
394
|
+
cell[:cell].to_s.strip
|
|
395
|
+
end
|
|
396
|
+
end
|
|
397
|
+
|
|
313
398
|
# Transform definition list
|
|
314
399
|
def transform_definition_list(dl_content)
|
|
315
400
|
# The parser outputs term and definition as separate items
|
data/lib/coradoc/markdown.rb
CHANGED
|
@@ -21,7 +21,9 @@
|
|
|
21
21
|
require 'parslet'
|
|
22
22
|
require 'lutaml/model'
|
|
23
23
|
|
|
24
|
+
# Coradoc document transformation library.
|
|
24
25
|
module Coradoc
|
|
26
|
+
# Markdown document model, parser, and serializer.
|
|
25
27
|
module Markdown
|
|
26
28
|
# Error classes
|
|
27
29
|
autoload :Errors, 'coradoc/markdown/errors'
|
|
@@ -54,6 +56,20 @@ module Coradoc
|
|
|
54
56
|
autoload :Extension, 'coradoc/markdown/model/extension'
|
|
55
57
|
autoload :Strikethrough, 'coradoc/markdown/model/strikethrough'
|
|
56
58
|
autoload :Highlight, 'coradoc/markdown/model/highlight'
|
|
59
|
+
autoload :Subscript, 'coradoc/markdown/model/subscript'
|
|
60
|
+
autoload :Superscript, 'coradoc/markdown/model/superscript'
|
|
61
|
+
autoload :Underline, 'coradoc/markdown/model/underline'
|
|
62
|
+
autoload :CrossReference, 'coradoc/markdown/model/cross_reference'
|
|
63
|
+
autoload :NamedValue, 'coradoc/markdown/model/named_value'
|
|
64
|
+
autoload :Comment, 'coradoc/markdown/model/comment'
|
|
65
|
+
autoload :Admonition, 'coradoc/markdown/model/admonition'
|
|
66
|
+
autoload :ExampleBlock, 'coradoc/markdown/model/example_block'
|
|
67
|
+
autoload :OpenBlock, 'coradoc/markdown/model/open_block'
|
|
68
|
+
autoload :Sidebar, 'coradoc/markdown/model/sidebar'
|
|
69
|
+
autoload :Verse, 'coradoc/markdown/model/verse'
|
|
70
|
+
autoload :Pass, 'coradoc/markdown/model/pass'
|
|
71
|
+
autoload :Literal, 'coradoc/markdown/model/literal'
|
|
72
|
+
autoload :HardLineBreak, 'coradoc/markdown/model/hard_line_break'
|
|
57
73
|
|
|
58
74
|
# Serializer
|
|
59
75
|
autoload :Serializer, 'coradoc/markdown/serializer'
|
|
@@ -78,29 +94,12 @@ module Coradoc
|
|
|
78
94
|
autoload :ParsletExtras, 'coradoc/markdown/parser/parslet_extras'
|
|
79
95
|
autoload :HTML_ENTITIES, 'coradoc/markdown/parser/html_entities'
|
|
80
96
|
autoload :AstProcessor, 'coradoc/markdown/parser/ast_processor'
|
|
97
|
+
autoload :FrontmatterParser, 'coradoc/markdown/parser/frontmatter_parser'
|
|
81
98
|
end
|
|
82
99
|
|
|
83
100
|
# Shared parser utilities
|
|
84
101
|
autoload :ParserUtil, 'coradoc/markdown/parser_util'
|
|
85
102
|
|
|
86
|
-
# Convenience accessors for kramdown extension models
|
|
87
|
-
class << self
|
|
88
|
-
# Access AttributeList class
|
|
89
|
-
def AttributeList
|
|
90
|
-
@AttributeList ||= const_get(:AttributeList)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# Access Math class
|
|
94
|
-
def Math
|
|
95
|
-
@Math ||= const_get(:Math)
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
# Access Extension class
|
|
99
|
-
def Extension
|
|
100
|
-
@Extension ||= const_get(:Extension)
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
103
|
class << self
|
|
105
104
|
# Parse Markdown content into a Document model
|
|
106
105
|
#
|
|
@@ -108,8 +107,11 @@ module Coradoc
|
|
|
108
107
|
# @param options [Hash] Parsing options
|
|
109
108
|
# @return [Coradoc::Markdown::Document] The parsed document model
|
|
110
109
|
def parse(content, _options = {})
|
|
111
|
-
|
|
112
|
-
|
|
110
|
+
split = Parser::FrontmatterParser.call(content)
|
|
111
|
+
ast = Parser::BlockParser.new.parse(split.body)
|
|
112
|
+
doc = Transformer.transform_document(ast)
|
|
113
|
+
doc.frontmatter = split.frontmatter if split.frontmatter?
|
|
114
|
+
doc
|
|
113
115
|
end
|
|
114
116
|
|
|
115
117
|
# Parse raw AST (for debugging)
|
|
@@ -144,6 +146,7 @@ module Coradoc
|
|
|
144
146
|
# @param options [Hash] Serialization options
|
|
145
147
|
# @return [String] The Markdown output
|
|
146
148
|
def serialize(document, options = {})
|
|
149
|
+
document = Transform::FromCoreModel.transform(document) if document.is_a?(Coradoc::CoreModel::Base)
|
|
147
150
|
Serializer.serialize(document, options)
|
|
148
151
|
end
|
|
149
152
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: coradoc-markdown
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
@@ -13,30 +13,30 @@ dependencies:
|
|
|
13
13
|
name: coradoc
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
|
-
- - "
|
|
16
|
+
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '0'
|
|
18
|
+
version: '2.0'
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
|
-
- - "
|
|
23
|
+
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '0'
|
|
25
|
+
version: '2.0'
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: lutaml-model
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
29
29
|
requirements:
|
|
30
|
-
- - "
|
|
30
|
+
- - "~>"
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version:
|
|
32
|
+
version: 0.8.0
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
|
-
- - "
|
|
37
|
+
- - "~>"
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version:
|
|
39
|
+
version: 0.8.0
|
|
40
40
|
- !ruby/object:Gem::Dependency
|
|
41
41
|
name: parslet
|
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -106,19 +106,24 @@ files:
|
|
|
106
106
|
- lib/coradoc/markdown.rb
|
|
107
107
|
- lib/coradoc/markdown/errors.rb
|
|
108
108
|
- lib/coradoc/markdown/model/abbreviation.rb
|
|
109
|
+
- lib/coradoc/markdown/model/admonition.rb
|
|
109
110
|
- lib/coradoc/markdown/model/attribute_list.rb
|
|
110
111
|
- lib/coradoc/markdown/model/base.rb
|
|
111
112
|
- lib/coradoc/markdown/model/blockquote.rb
|
|
112
113
|
- lib/coradoc/markdown/model/code.rb
|
|
113
114
|
- lib/coradoc/markdown/model/code_block.rb
|
|
115
|
+
- lib/coradoc/markdown/model/comment.rb
|
|
116
|
+
- lib/coradoc/markdown/model/cross_reference.rb
|
|
114
117
|
- lib/coradoc/markdown/model/definition_item.rb
|
|
115
118
|
- lib/coradoc/markdown/model/definition_list.rb
|
|
116
119
|
- lib/coradoc/markdown/model/definition_term.rb
|
|
117
120
|
- lib/coradoc/markdown/model/document.rb
|
|
118
121
|
- lib/coradoc/markdown/model/emphasis.rb
|
|
122
|
+
- lib/coradoc/markdown/model/example_block.rb
|
|
119
123
|
- lib/coradoc/markdown/model/extension.rb
|
|
120
124
|
- lib/coradoc/markdown/model/footnote.rb
|
|
121
125
|
- lib/coradoc/markdown/model/footnote_reference.rb
|
|
126
|
+
- lib/coradoc/markdown/model/hard_line_break.rb
|
|
122
127
|
- lib/coradoc/markdown/model/heading.rb
|
|
123
128
|
- lib/coradoc/markdown/model/highlight.rb
|
|
124
129
|
- lib/coradoc/markdown/model/horizontal_rule.rb
|
|
@@ -126,22 +131,96 @@ files:
|
|
|
126
131
|
- lib/coradoc/markdown/model/link.rb
|
|
127
132
|
- lib/coradoc/markdown/model/list.rb
|
|
128
133
|
- lib/coradoc/markdown/model/list_item.rb
|
|
134
|
+
- lib/coradoc/markdown/model/literal.rb
|
|
129
135
|
- lib/coradoc/markdown/model/math.rb
|
|
136
|
+
- lib/coradoc/markdown/model/named_value.rb
|
|
137
|
+
- lib/coradoc/markdown/model/open_block.rb
|
|
130
138
|
- lib/coradoc/markdown/model/paragraph.rb
|
|
139
|
+
- lib/coradoc/markdown/model/pass.rb
|
|
140
|
+
- lib/coradoc/markdown/model/sidebar.rb
|
|
131
141
|
- lib/coradoc/markdown/model/strikethrough.rb
|
|
132
142
|
- lib/coradoc/markdown/model/strong.rb
|
|
143
|
+
- lib/coradoc/markdown/model/subscript.rb
|
|
144
|
+
- lib/coradoc/markdown/model/superscript.rb
|
|
133
145
|
- lib/coradoc/markdown/model/table.rb
|
|
134
146
|
- lib/coradoc/markdown/model/text.rb
|
|
147
|
+
- lib/coradoc/markdown/model/underline.rb
|
|
148
|
+
- lib/coradoc/markdown/model/verse.rb
|
|
135
149
|
- lib/coradoc/markdown/parser.rb
|
|
136
150
|
- lib/coradoc/markdown/parser/ast_processor.rb
|
|
137
151
|
- lib/coradoc/markdown/parser/block_parser.rb
|
|
152
|
+
- lib/coradoc/markdown/parser/frontmatter_parser.rb
|
|
138
153
|
- lib/coradoc/markdown/parser/html_entities.rb
|
|
139
154
|
- lib/coradoc/markdown/parser/inline_parser.rb
|
|
140
155
|
- lib/coradoc/markdown/parser/parslet_extras.rb
|
|
141
156
|
- lib/coradoc/markdown/parser_util.rb
|
|
142
157
|
- lib/coradoc/markdown/serializer.rb
|
|
158
|
+
- lib/coradoc/markdown/serializer/builder.rb
|
|
159
|
+
- lib/coradoc/markdown/serializer/config.rb
|
|
160
|
+
- lib/coradoc/markdown/serializer/context.rb
|
|
161
|
+
- lib/coradoc/markdown/serializer/element_serializer.rb
|
|
162
|
+
- lib/coradoc/markdown/serializer/flavor.rb
|
|
163
|
+
- lib/coradoc/markdown/serializer/registrations.rb
|
|
164
|
+
- lib/coradoc/markdown/serializer/registry.rb
|
|
165
|
+
- lib/coradoc/markdown/serializer/runner.rb
|
|
166
|
+
- lib/coradoc/markdown/serializer/serializers/abbreviation.rb
|
|
167
|
+
- lib/coradoc/markdown/serializer/serializers/admonition.rb
|
|
168
|
+
- lib/coradoc/markdown/serializer/serializers/attribute_list.rb
|
|
169
|
+
- lib/coradoc/markdown/serializer/serializers/blockquote.rb
|
|
170
|
+
- lib/coradoc/markdown/serializer/serializers/code.rb
|
|
171
|
+
- lib/coradoc/markdown/serializer/serializers/code_block.rb
|
|
172
|
+
- lib/coradoc/markdown/serializer/serializers/comment.rb
|
|
173
|
+
- lib/coradoc/markdown/serializer/serializers/cross_reference.rb
|
|
174
|
+
- lib/coradoc/markdown/serializer/serializers/definition_list.rb
|
|
175
|
+
- lib/coradoc/markdown/serializer/serializers/document.rb
|
|
176
|
+
- lib/coradoc/markdown/serializer/serializers/emphasis.rb
|
|
177
|
+
- lib/coradoc/markdown/serializer/serializers/example_block.rb
|
|
178
|
+
- lib/coradoc/markdown/serializer/serializers/extension.rb
|
|
179
|
+
- lib/coradoc/markdown/serializer/serializers/footnote.rb
|
|
180
|
+
- lib/coradoc/markdown/serializer/serializers/footnote_reference.rb
|
|
181
|
+
- lib/coradoc/markdown/serializer/serializers/hard_line_break.rb
|
|
182
|
+
- lib/coradoc/markdown/serializer/serializers/heading.rb
|
|
183
|
+
- lib/coradoc/markdown/serializer/serializers/highlight.rb
|
|
184
|
+
- lib/coradoc/markdown/serializer/serializers/horizontal_rule.rb
|
|
185
|
+
- lib/coradoc/markdown/serializer/serializers/image.rb
|
|
186
|
+
- lib/coradoc/markdown/serializer/serializers/link.rb
|
|
187
|
+
- lib/coradoc/markdown/serializer/serializers/list.rb
|
|
188
|
+
- lib/coradoc/markdown/serializer/serializers/literal.rb
|
|
189
|
+
- lib/coradoc/markdown/serializer/serializers/math.rb
|
|
190
|
+
- lib/coradoc/markdown/serializer/serializers/open_block.rb
|
|
191
|
+
- lib/coradoc/markdown/serializer/serializers/paragraph.rb
|
|
192
|
+
- lib/coradoc/markdown/serializer/serializers/pass.rb
|
|
193
|
+
- lib/coradoc/markdown/serializer/serializers/sidebar.rb
|
|
194
|
+
- lib/coradoc/markdown/serializer/serializers/strikethrough.rb
|
|
195
|
+
- lib/coradoc/markdown/serializer/serializers/strong.rb
|
|
196
|
+
- lib/coradoc/markdown/serializer/serializers/subscript.rb
|
|
197
|
+
- lib/coradoc/markdown/serializer/serializers/superscript.rb
|
|
198
|
+
- lib/coradoc/markdown/serializer/serializers/table.rb
|
|
199
|
+
- lib/coradoc/markdown/serializer/serializers/underline.rb
|
|
200
|
+
- lib/coradoc/markdown/serializer/serializers/verse.rb
|
|
201
|
+
- lib/coradoc/markdown/serializer/strategies/admonition/base.rb
|
|
202
|
+
- lib/coradoc/markdown/serializer/strategies/admonition/container.rb
|
|
203
|
+
- lib/coradoc/markdown/serializer/strategies/admonition/gfm_alert.rb
|
|
204
|
+
- lib/coradoc/markdown/serializer/strategies/admonition/github.rb
|
|
205
|
+
- lib/coradoc/markdown/serializer/strategies/admonition/html.rb
|
|
206
|
+
- lib/coradoc/markdown/serializer/strategies/admonition/registry.rb
|
|
207
|
+
- lib/coradoc/markdown/serializer/strategies/autolink/angle.rb
|
|
208
|
+
- lib/coradoc/markdown/serializer/strategies/autolink/bare.rb
|
|
209
|
+
- lib/coradoc/markdown/serializer/strategies/autolink/base.rb
|
|
210
|
+
- lib/coradoc/markdown/serializer/strategies/autolink/none.rb
|
|
211
|
+
- lib/coradoc/markdown/serializer/strategies/autolink/registry.rb
|
|
212
|
+
- lib/coradoc/markdown/serializer/strategies/definition_list/base.rb
|
|
213
|
+
- lib/coradoc/markdown/serializer/strategies/definition_list/flat.rb
|
|
214
|
+
- lib/coradoc/markdown/serializer/strategies/definition_list/nested_html.rb
|
|
215
|
+
- lib/coradoc/markdown/serializer/strategies/definition_list/registry.rb
|
|
143
216
|
- lib/coradoc/markdown/toc_generator.rb
|
|
217
|
+
- lib/coradoc/markdown/transform/block_transformer.rb
|
|
144
218
|
- lib/coradoc/markdown/transform/from_core_model.rb
|
|
219
|
+
- lib/coradoc/markdown/transform/image_transformer.rb
|
|
220
|
+
- lib/coradoc/markdown/transform/inline_transformer.rb
|
|
221
|
+
- lib/coradoc/markdown/transform/list_transformer.rb
|
|
222
|
+
- lib/coradoc/markdown/transform/structural_transformer.rb
|
|
223
|
+
- lib/coradoc/markdown/transform/table_transformer.rb
|
|
145
224
|
- lib/coradoc/markdown/transform/text_extraction.rb
|
|
146
225
|
- lib/coradoc/markdown/transform/to_core_model.rb
|
|
147
226
|
- lib/coradoc/markdown/transformer.rb
|
|
@@ -160,7 +239,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
160
239
|
requirements:
|
|
161
240
|
- - ">="
|
|
162
241
|
- !ruby/object:Gem::Version
|
|
163
|
-
version: 3.
|
|
242
|
+
version: 3.3.0
|
|
164
243
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
244
|
requirements:
|
|
166
245
|
- - ">="
|