From b1fcca3a9f75d1d3835b078cb49b598bfb1b6557 Mon Sep 17 00:00:00 2001 From: "ipcjs.mac" Date: Fri, 5 Jul 2024 09:00:02 +0800 Subject: [PATCH] =?UTF-8?q?TODO:=20=E5=B5=8C=E5=A5=97=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 29 ++++++++++++++-------- src/convert-html-to-md.ts | 2 ++ src/utils/turndown-rules/list-rule.ts | 15 +++++++++++ src/utils/turndown-rules/task-list-rule.ts | 21 +++++++++------- src/utils/turndown-service.ts | 4 ++- 5 files changed, 50 insertions(+), 21 deletions(-) create mode 100644 src/utils/turndown-rules/list-rule.ts diff --git a/.vscode/launch.json b/.vscode/launch.json index 873ab8f6..ba9ce680 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -18,18 +18,25 @@ "program": "${workspaceFolder}/dist/dropTheRope.js", "args": [ "--configFile", "./config.obsidian.json", - // "--outputDir", "C:\\Users\\ipcjs\\Dropbox\\Notes", - // "--outputDir", "C:\\Users\\ipcjs\\Dropbox\\Notes", "--outputMarkdownDirName", "Evernote", "--enexSources", "K:\\Backup\\Evernote", - // "--outputDir", "/Users/ipcjs/Library/CloudStorage/Dropbox/Notes", "--outputMarkdownDirName", "Evernote", "--enexSources", "/Volumes/Data/data/Evernote", - // "--enexSources", "K:\\Backup\\Evernote\\Coding\\Coding@@@Dart.enex", - // "--enexSources", "K:\\Backup\\Evernote\\Coding\\Coding@@@JavaScript.enex", - // "--enexSources", "K:\\Backup\\Evernote\\Others\\Others@@@移动设备笔记.enex", - // "--enexSources", "C:\\Users\\ipcjs\\Dropbox\\Notes\\yarle-test", - // "--enexSources", "C:\\Users\\ipcjs\\Dropbox\\Notes\\yarle-test\\测试链接和转义.enex", - // "--enexSources", "C:\\Users\\ipcjs\\Dropbox\\Notes\\yarle-test\\测试转义.enex", - // "--enexSources", "C:\\Users\\ipcjs\\Dropbox\\Notes\\yarle-test\\测试下划线.enex", - // "--enexSources", "C:\\Users\\ipcjs\\Dropbox\\Notes\\yarle-test\\测试带链接的图片.enex", + // "--outputDir", "${env:DROPBOX}/Notes", + // "--outputDir", "${env:DROPBOX}/Notes", "--outputMarkdownDirName", "Evernote", "--enexSources", "K:/Backup/Evernote", + // "--outputDir", "${env:DROPBOX}/Notes", "--outputMarkdownDirName", "Evernote", "--enexSources", "/Volumes/Data/data/Evernote", + // "--outputMarkdownDirName", "Evernote-051523", "--enexSources", "K:/Backup/Evernote", + // "--enexSources", "K:/Backup/Evernote/Coding/Coding@@@Dart.enex", + // "--enexSources", "K:/Backup/Evernote/Coding/Coding@@@JavaScript.enex", + // "--enexSources", "K:/Backup/Evernote/Others/Others@@@移动设备笔记.enex", + // "--enexSources", "${env:DROPBOX}/Notes/yarle-test", + // "--enexSources", "${env:DROPBOX}/Notes/yarle-test/测试链接和转义.enex", + // "--enexSources", "${env:DROPBOX}/Notes/yarle-test/测试转义.enex", + // "--enexSources", "${env:DROPBOX}/Notes/yarle-test/测试下划线.enex", + // "--enexSources", "${env:DROPBOX}/Notes/yarle-test/测试带链接的图片.enex", // "--enexSources", "/Volumes/Data/data/Evernote/Coding/Coding@@@Dart.enex" + // "--enexSources", "${env:DROPBOX}/Notes/yarle-test/测试缩进代码块.enex", + // "--enexSources", "${env:DROPBOX}/Notes/yarle-test/test escape.enex", + // "--enexSources", "${env:DROPBOX}/Notes/yarle-test/test_table.enex", + // "--enexSources", "${env:DROPBOX}/Notes/yarle-test/vim查找替换及正则表达式的使用.enex", + "--enexSources", "${env:DROPBOX}/Notes/yarle-test/test_list.enex", + "--enexSources", "${env:DROPBOX}/Notes/yarle-test/test_list2.enex", ], "preLaunchTask": "npm: build:watch", }, diff --git a/src/convert-html-to-md.ts b/src/convert-html-to-md.ts index ef021214..bf5093f4 100644 --- a/src/convert-html-to-md.ts +++ b/src/convert-html-to-md.ts @@ -39,6 +39,8 @@ const fixSublistsInContent = (content: string): string => { }; const fixSublists = (node: HTMLElement) => { + // TODO: 2024/07/04 ipcjs ul>ol>li时ul节点里面的文字被移除的问题 + return node const ulElements: Array = Array.from(node.getElementsByTagName('ul')); const olElements: Array = Array.from(node.getElementsByTagName('ol')); const listElements = ulElements.concat(olElements); diff --git a/src/utils/turndown-rules/list-rule.ts b/src/utils/turndown-rules/list-rule.ts new file mode 100644 index 00000000..7442647d --- /dev/null +++ b/src/utils/turndown-rules/list-rule.ts @@ -0,0 +1,15 @@ +/** @see https://github.com/mixmark-io/turndown/blob/master/src/commonmark-rules.js/#L48 */ +export const listRule = { + filter: ['ul', 'ol'], + replacement: function (content: string, node: HTMLUListElement | HTMLOListElement) { + var parent = node.parentNode + if (parent.nodeName === 'LI' && parent.lastElementChild === node + || parent.nodeName === 'UL' + || parent.nodeName === 'OL' + ) { + return '\n' + content + } else { + return '\n\n' + content + '\n\n' + } + } +} diff --git a/src/utils/turndown-rules/task-list-rule.ts b/src/utils/turndown-rules/task-list-rule.ts index 6c98577f..15ec0e0a 100644 --- a/src/utils/turndown-rules/task-list-rule.ts +++ b/src/utils/turndown-rules/task-list-rule.ts @@ -8,24 +8,27 @@ export const taskListRule = { filter: 'li', replacement: (content: string, node: HTMLLIElement, options: any) => { - const isTodoDoneBlock = (node: any) => { + const isTodoDoneBlock = (node: any) => { const nodeProxy = getAttributeProxy(node); const taskFlag = '--en-checked:true;'; return nodeProxy.style && nodeProxy.style.value.indexOf(taskFlag) >= 0; }; - const isTodoBlock = (node: any) => { + const isTodoBlock = (node: any) => { const nodeProxy = getAttributeProxy(node); const taskFlag = '--en-checked:false;'; return nodeProxy.style && nodeProxy.style.value.indexOf(taskFlag) >= 0; }; - const indentCount = content.match(/^\n*/)[0].length || 0; + const indentCount = content.match(/^\n*/)[0].length || 0; const indentChars = yarleOptions.indentCharacter.repeat(indentCount); - const todoPrefix = yarleOptions.outputFormat === OutputFormat.LogSeqMD ? '' : - node.parentElement?.nodeName?.toUpperCase() === 'LI' ? '' : `${indentChars}- `; + const todoPrefix = yarleOptions.outputFormat === OutputFormat.LogSeqMD + ? '' + : node.parentElement?.nodeName?.toUpperCase() === 'LI' + ? '' + : `${indentChars}- `; const singleLineContent = content @@ -34,14 +37,13 @@ export const taskListRule = { .replace(/\n/gm, `\n${yarleOptions.indentCharacter}`); // Indent const languageItems = getLanguageItems(yarleOptions.outputFormat); - let prefix = indentCount > 0 + let prefix = indentCount > 0 ? indentChars : (isTodoDoneBlock(node) ? `${checkboxDone} ` : (isTodoBlock(node) ? `${checkboxTodo} ` - : languageItems.listItem)) - ; + : languageItems.listItem)); const parent = node.parentNode; if (parent.nodeName === 'OL') { const start = (parent as HTMLOListElement).getAttribute('start'); @@ -54,4 +56,5 @@ export const taskListRule = { ret = (prefix + singleLineContent + (node.nextSibling && !/\n$/.test(singleLineContent) ? '\n' : '')); return ret; -}}; + } +}; diff --git a/src/utils/turndown-service.ts b/src/utils/turndown-service.ts index ac3e6779..15604eba 100644 --- a/src/utils/turndown-service.ts +++ b/src/utils/turndown-service.ts @@ -17,6 +17,7 @@ import { removeNewlines } from './remove-newlines'; import { tanaTableBlock, tanaTableColBlock, tanaTableRowBlock } from './../constants'; import { underlineRule } from './turndown-rules/underline-rule'; import { encryptRule } from './turndown-rules/encrypt-rule'; +import { listRule } from './turndown-rules/list-rule'; export const getTurndownService = (yarleOptions: YarleOptions) => { /* istanbul ignore next */ @@ -39,7 +40,8 @@ export const getTurndownService = (yarleOptions: YarleOptions) => { turndownService.addRule('evernote task items', taskItemsRule); turndownService.addRule('wikistyle links', wikiStyleLinksRule); turndownService.addRule('images', imagesRule); - turndownService.addRule('list', taskListRule); + turndownService.addRule('list', listRule); + // turndownService.addRule('task-list', taskListRule); turndownService.addRule('italic', italicRule); turndownService.addRule('underline', underlineRule); turndownService.addRule('encrypt', encryptRule);