Changes
3 changed files (+76/-72)
-
-
@@ -108,10 +108,9 @@ gfmFromMarkdown(),ofmHighlightFromMarkdown(), ofmWikilinkFromMarkdown(), ofmCalloutFromMarkdown(), ofmImageSize(), ], }); ofmImageSize(mdast); await macanaMarkAssets(mdast, getAssetToken); await macanaMarkDocumentToken(mdast, getDocumentToken);
-
-
-
@@ -13,9 +13,9 @@import { ofmImageSize } from "./mdast_util_ofm_image_size.ts"; Deno.test("Should parse full size attribute", () => { const mdast = fromMarkdown(""); ofmImageSize(mdast); const mdast = fromMarkdown("", { mdastExtensions: [ofmImageSize()], }); assertObjectMatch(mdast, { type: "root",
-
@@ -40,10 +40,8 @@Deno.test("Should parse for wikilink embeds", () => { const mdast = fromMarkdown("![[Foo|999x9]]", { extensions: [ofmWikilink()], mdastExtensions: [ofmWikilinkFromMarkdown()], mdastExtensions: [ofmWikilinkFromMarkdown(), ofmImageSize()], }); ofmImageSize(mdast); assertObjectMatch(mdast, { type: "root",
-
@@ -65,9 +63,9 @@ });}); Deno.test("Should ignore negative sizes", () => { const mdast = fromMarkdown(""); ofmImageSize(mdast); const mdast = fromMarkdown("", { mdastExtensions: [ofmImageSize()], }); assertObjectMatch(mdast, { type: "root",
-
@@ -86,9 +84,9 @@ });}); Deno.test("Should ignore zero as a size", () => { const mdast = fromMarkdown(""); ofmImageSize(mdast); const mdast = fromMarkdown("", { mdastExtensions: [ofmImageSize()], }); assertObjectMatch(mdast, { type: "root",
-
@@ -107,9 +105,9 @@ });}); Deno.test("Should parse width-only attribute", () => { const mdast = fromMarkdown(""); ofmImageSize(mdast); const mdast = fromMarkdown("", { mdastExtensions: [ofmImageSize()], }); assertObjectMatch(mdast, { type: "root",
-
@@ -131,9 +129,9 @@ });}); Deno.test("Should work for image reference too", () => { const mdast = fromMarkdown("![Foo|999x888][foo]\n\n[foo]: ./foo.png"); ofmImageSize(mdast); const mdast = fromMarkdown("![Foo|999x888][foo]\n\n[foo]: ./foo.png", { mdastExtensions: [ofmImageSize()], }); assertObjectMatch(mdast, { type: "root",
-
@@ -156,9 +154,9 @@ });}); Deno.test("Should set HTML attributes", () => { const mdast = fromMarkdown(""); ofmImageSize(mdast); const mdast = fromMarkdown("", { mdastExtensions: [ofmImageSize()], }); const hast = toHast(mdast);
-
-
-
@@ -3,6 +3,7 @@ //// SPDX-License-Identifier: Apache-2.0 import type * as Mdast from "../../deps/esm.sh/mdast/types.ts"; import type { Extension } from "../../deps/esm.sh/mdast-util-from-markdown/mod.ts"; import { SKIP, visit } from "../../deps/esm.sh/unist-util-visit/mod.ts"; import type { OfmWikilinkEmbed } from "./mdast_util_ofm_wikilink.ts";
-
@@ -65,61 +66,67 @@ * image label and data in-place.* * @param tree - Tree to change. This function mutates this argument. */ export function ofmImageSize(tree: Mdast.Nodes | OfmWikilinkEmbed): void { visit(tree, (node) => { return node.type === "image" || node.type === "imageReference" || node.type === "ofmWikilinkEmbed"; }, (node) => { switch (node.type) { case "image": case "imageReference": { if (!node.alt) { return SKIP; } export function ofmImageSize(): Extension { return { transforms: [ (root: Mdast.Root | OfmWikilinkEmbed) => { visit(root, (node) => { return node.type === "image" || node.type === "imageReference" || node.type === "ofmWikilinkEmbed"; }, (node) => { switch (node.type) { case "image": case "imageReference": { if (!node.alt) { return SKIP; } const segments = node.alt.split(SEPARATOR); const segments = node.alt.split(SEPARATOR); switch (segments.length) { case 1: { const result = parseSegment(segments[0]); if (!result) { return SKIP; } switch (segments.length) { case 1: { const result = parseSegment(segments[0]); if (!result) { return SKIP; } setSizeToNode(node, result.width, result.height); return; } case 2: { const [alt, segment] = segments; const result = parseSegment(segment); if (!result) { return SKIP; } setSizeToNode(node, result.width, result.height); return; } case 2: { const [alt, segment] = segments; const result = parseSegment(segment); if (!result) { return SKIP; } setSizeToNode(node, result.width, result.height); setSizeToNode(node, result.width, result.height); node.alt = alt; node.alt = alt; return; } default: { return SKIP; } } } case "ofmWikilinkEmbed": { if (!node.label) { return SKIP; } return; } default: { return SKIP; } } } case "ofmWikilinkEmbed": { if (!node.label) { return SKIP; } const result = parseSegment(node.label); if (!result) { return SKIP; } const result = parseSegment(node.label); if (!result) { return SKIP; } setSizeToNode(node, result.width, result.height); return SKIP; } } }); setSizeToNode(node, result.width, result.height); return SKIP; } } }); }, ], }; }
-