UNPKG

yarle-evernote-to-md

Version:

Yet Another Rope Ladder from Evernote

63 lines (52 loc) 2.26 kB
import { filterByNodeName } from './filter-by-nodename'; import { getAttributeProxy } from './get-attribute-proxy'; import { LanguageFactory } from './../../outputLanguages/LanguageFactory'; import { yarleOptions } from './../../yarle'; const isCodeBlock = (node: any) => { const nodeProxy = getAttributeProxy(node); const codeBlockFlag = '-en-codeblock:true'; return nodeProxy.style && nodeProxy.style.value.indexOf(codeBlockFlag) >= 0; }; const getIntendNumber = (node: any): number => { const nodeProxy = getAttributeProxy(node); const paddingAttr = 'padding-left:'; let intendNumber = 0; if (nodeProxy.style && nodeProxy.style.value.indexOf(paddingAttr) >= 0) { intendNumber = Math.floor(nodeProxy.style.value.split(paddingAttr)[1].split('px')[0] / 20); } return intendNumber; }; export const unescapeMarkdown = (s: string): string => s.replace(/\\(.)/g, '$1'); export const codeBlockRule = { filter: filterByNodeName('DIV'), replacement: (content: string, node: any) => { return replaceCodeBlock(content, node); }, }; export const replaceCodeBlock = (content: string, node: any): any => { const nodeProxy = getAttributeProxy(node); const intend = getIntendNumber(node); content = `${'\t'.repeat(intend)}${content}`; if (isCodeBlock(node)) { // turndown has already escaped markdown chars (and all '\') in content; // reverse that to avoid extraneous backslashes in code block. content = unescapeMarkdown(content); const langaugeFactory = new LanguageFactory(); const targetLanguage = langaugeFactory.createLanguage(yarleOptions.outputFormat) return `${targetLanguage.codeBlock}${content}${targetLanguage.codeBlock}`; } if (node.parentElement && isCodeBlock(node.parentElement) && node.parentElement.firstElementChild === node) { return `${content}`; } if (node.parentElement && isCodeBlock(node.parentElement)) { return `\n${content}`; } const childHtml = node.innerHTML; /*return node.isBlock ? childHtml !== '<br>' ? `\n${content}\n` : `${content}` : `${content}`; */ return node.isBlock ? `\n${content}\n` : content; };