yarle-evernote-to-md
Version:
Yet Another Rope Ladder from Evernote
81 lines • 3.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.replaceMonospaceCodeBlock = void 0;
const get_attribute_proxy_1 = require("./get-attribute-proxy");
const replace_code_block_1 = require("./replace-code-block");
const markdownBlock = '\n```\n';
const codeBlockFlag = '-en-codeblock:true';
const reMonospaceFont = /\b(Courier|Mono|Consolas|Console|Inconsolata|Pitch|Monaco|monospace)\b/;
const deepestFont = node => {
var _a, _b;
if (node.nodeType !== 1) {
return null;
}
const children = node.childNodes;
const numChildren = children.length;
if (numChildren > 1) {
return 'mixed';
}
if (numChildren === 1) {
const font = deepestFont(children[0]);
if (font) {
return font;
}
}
const nodeProxy = (0, get_attribute_proxy_1.getAttributeProxy)(node);
if (node.tagName === 'FONT') {
return (_a = nodeProxy.face) === null || _a === void 0 ? void 0 : _a.value;
}
const style = (_b = nodeProxy.style) === null || _b === void 0 ? void 0 : _b.value;
if (style) {
const match = style.match(/font-family:([^;]+)/);
if (match) {
return match[1];
}
}
return null;
};
const isMonospaceCodeBlock = node => {
var _a;
const nodeProxy = (0, get_attribute_proxy_1.getAttributeProxy)(node);
const style = (_a = nodeProxy.style) === null || _a === void 0 ? void 0 : _a.value;
if (style && style.includes(codeBlockFlag)) {
return true;
}
const font = deepestFont(node);
return font && reMonospaceFont.test(font);
};
/*
export const monospaceCodeBlockRule = {
filter: filterByNodeName('DIV'),
replacement: (content: string, node: any) => {
if (yarleOptions.monospaceIsCodeBlock && isMonospaceCodeBlock(node)) {
return replaceMonospaceCodeBlock(content, node);
}
},
};
*/
const replaceMonospaceCodeBlock = (content, node) => {
if (isMonospaceCodeBlock(node)) {
const previous = node.previousSibling;
const previousIsBlock = previous && previous.tagName === node.tagName && isMonospaceCodeBlock(previous);
const next = node.nextSibling;
const nextIsBlock = next && next.tagName === node.tagName && isMonospaceCodeBlock(next);
if (previousIsBlock || nextIsBlock) {
content = previousIsBlock ? `\n${content}` : `${markdownBlock}${content}`;
content = nextIsBlock ? `${content}\n` : `${content}${markdownBlock}`;
return content;
}
content = (0, replace_code_block_1.unescapeMarkdown)(content);
return content.trim() ? `${markdownBlock}${content}${markdownBlock}` : content;
}
if (node.parentElement && isMonospaceCodeBlock(node.parentElement) && node.parentElement.firstElementChild === node) {
return content;
}
if (node.parentElement && isMonospaceCodeBlock(node.parentElement)) {
return `\n${content}`;
}
return node.isBlock ? `\n${content}\n` : content;
};
exports.replaceMonospaceCodeBlock = replaceMonospaceCodeBlock;
//# sourceMappingURL=replace-monospace-code-block.js.map