diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b81e2a..181ded0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,16 @@ shipped them. are the engine's kebab-case keys; snake_case spellings and the short aliases (`:math`, `:permalinks`, `:mermaid`, `:dot`, `:chart`, `:toc`) still work. +- **Composite figures** (PART 9 ยง4c). A **bare** `::: figure` fence is no longer + a generic container: it is one figure of ordered panels, rendering + `
` around a + `
` whose members are each a + `
`, and a `^ ` line following the closer + becomes the group's `
` instead of an ordinary paragraph. A fence + carrying a title or a `[label]` keeps the old shape, so a document that named + its figure divs renders as before. `Carve.parse` publishes the group as a new + `figure_group` node type. + ### Changed - **Breaking (`Carve.parse`): the published tree now matches the reference @@ -89,9 +99,11 @@ shipped them. extension. Every `` carries a `scope` - `col` in the header run, `row` for a - `|=` cell in a body row. A mandatory base class merges into the author's class - slot at its authored position rather than leading it, so `:widget[x]{#i .c}` - keeps `id` first. + `|=` cell in a body row. A cell's attribute block binds after its kind and + alignment markers, so a `{...}` following a cell's `=` marker is read as + attributes rather than rendered as cell text. A mandatory base class merges + into the author's class slot at its authored position rather than leading it, + so `:widget[x]{#i .c}` keeps `id` first. - **Rendering corrections carried in from the engine.** A fence opened inside a container keeps that container open, so a boundary line, a list marker at the diff --git a/ext/carve/Cargo.lock b/ext/carve/Cargo.lock index 5a9e510..63d669a 100644 --- a/ext/carve/Cargo.lock +++ b/ext/carve/Cargo.lock @@ -38,7 +38,7 @@ checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "carve-lang" version = "0.1.2" -source = "git+https://github.com/markup-carve/carve-rs?rev=8dada737f608da124e06a1f7e43f962f98a3e68a#8dada737f608da124e06a1f7e43f962f98a3e68a" +source = "git+https://github.com/markup-carve/carve-rs?rev=98de7874ad2e81f69e57764562c83f4918522ac2#98de7874ad2e81f69e57764562c83f4918522ac2" dependencies = [ "html5ever", "markup5ever_rcdom", diff --git a/ext/carve/Cargo.toml b/ext/carve/Cargo.toml index c5037f3..bd771e0 100644 --- a/ext/carve/Cargo.toml +++ b/ext/carve/Cargo.toml @@ -21,4 +21,4 @@ rb-sys = "0.9" # The Carve engine. Imported under the Rust crate alias `carve_rs` so the # binding's own crate name (`carve-rb`) does not collide with the engine's # package name (`carve`) in the Cargo lockfile. -carve_rs = { package = "carve-lang", git = "https://github.com/markup-carve/carve-rs", rev = "8dada737f608da124e06a1f7e43f962f98a3e68a" } +carve_rs = { package = "carve-lang", git = "https://github.com/markup-carve/carve-rs", rev = "98de7874ad2e81f69e57764562c83f4918522ac2" } diff --git a/test/corpus_ast_types_test.rb b/test/corpus_ast_types_test.rb index 7f74f5d..5a14483 100644 --- a/test/corpus_ast_types_test.rb +++ b/test/corpus_ast_types_test.rb @@ -40,8 +40,8 @@ class CorpusAstTypesTest < Minitest::Test EXPECTED = %w[ abbreviation abbreviation_def admonition autolink block_quote caption_number code code_block comment critic_comment definition_description definition_list - definition_term delete div document emphasis escaped_text figure footnote - footnote_ref frontmatter hard_break heading heading_ref highlight image + definition_term delete div document emphasis escaped_text figure figure_group + footnote footnote_ref frontmatter hard_break heading heading_ref highlight image inline_extension inline_footnote insert line_block link link_reference_definition list list_item literal_inline math mention paragraph raw_block raw_inline smart_punctuation soft_break span strike