Spaces:
Runtime error
Runtime error
| // Adapted from https://github.com/laurent22/joplin/blob/dev/packages/turndown-plugin-gfm/src/tables.js | |
| import css, { CssDeclarationAST, CssFontFaceAST } from "@adobe/css-tools"; | |
| export function isCodeBlockSpecialCase1(node: Node) { | |
| const parent = node.parentNode; | |
| if (!parent) return false; | |
| return ( | |
| (parent as HTMLElement).classList && | |
| (parent as HTMLElement).classList.contains("code") && | |
| (parent as HTMLElement).nodeName === "TD" && | |
| (node as HTMLElement).nodeName === "PRE" | |
| ); | |
| } | |
| export function isCodeBlockSpecialCase2(node: Node) { | |
| if (node.nodeName !== "PRE") return false; | |
| const style = (node as HTMLElement).getAttribute("style"); | |
| if (!style) return false; | |
| const o = css.parse("pre {" + style + "}"); | |
| if (!o.stylesheet.rules.length) return; | |
| const fontFamily = (o.stylesheet.rules[0] as CssFontFaceAST).declarations.find( | |
| (d) => (d as CssDeclarationAST).property.toLowerCase() === "font-family", | |
| ); | |
| if (!fontFamily || !(fontFamily as CssDeclarationAST).value) return false; | |
| const isMonospace = | |
| (fontFamily as CssDeclarationAST).value | |
| .split(",") | |
| .map((e) => e.trim().toLowerCase()) | |
| .indexOf("monospace") >= 0; | |
| return isMonospace; | |
| } | |
| export function isCodeBlock(node: Node) { | |
| if (isCodeBlockSpecialCase1(node) || isCodeBlockSpecialCase2(node)) return true; | |
| return ( | |
| (node as HTMLElement).nodeName === "PRE" && | |
| (node as HTMLElement).firstChild && | |
| (node as HTMLElement).firstChild?.nodeName === "CODE" | |
| ); | |
| } | |