Higurashi-kagome / wereader

一个浏览器扩展:主要用于微信读书做笔记,对常使用 Markdown 做笔记的读者比较有帮助。
https://chrome.google.com/webstore/detail/%E5%BE%AE%E4%BF%A1%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0%E5%8A%A9%E6%89%8B/cmlenojlebcodibpdhmklglnbaghpdcg?hl=zh-CN&authuser=0
MIT License
672 stars 58 forks source link

[Bug] 插图无法转换成图片链接 #98

Open beanliu opened 1 year ago

beanliu commented 1 year ago

感谢作者花时间开发并开源维护这个项目,相当好用🙏

扩展是否为最新版本(与扩展商店中的版本相同)

出现该问题的书本及章节(不方便公开的话可直接发邮箱告知)

贝叶斯的博弈

描述问题

导出标注时,文字当中包含的数学符号图片无法转换成Markdown的图片链接。

复现步骤

随意标注一段带符号图片的文字,然后导出本章标注。

期待的正常行为

数学符号图片应当被转换成对应的Markdown链接。

额外信息

尝试debug了下这个问题,发现可能是 /book/bookmarklist 接口行为变化导致的,具体而言是包含插图的标注数据格式变化。 比如一段包含插图的标注 "这个公式[插图]表明..." 在这个接口下变成 "这个公式表明...",其中 "[插图]" 变成了一个 U+FFFC,导致相关处理代码无法插入图片链接。 把 bg-popup-process.ts 以及 content-markedData.ts 中相关的逻辑做相应调整并本地测试了下可以解决这个问题,但我不确定这个问题是否具有广泛性,所以在这里先提个 issue 周知下,如果有遇到相同问题的人可以尝试下这个 workaround。

beanliu commented 1 year ago

补充下具体的workaround diff(注意''不是空格):

diff --git a/src/background/modules/bg-popup-process.ts b/src/background/modules/bg-popup-process.ts
index 297be71..d690a3f 100644
--- a/src/background/modules/bg-popup-process.ts
+++ b/src/background/modules/bg-popup-process.ts
@@ -107,9 +107,9 @@ function addMarkedData(mark: any, markedData: any, footnoteContent: string) {
        /* 生成替换字符串 */
        if(imgSrc) { // 图片
            let insert1 = '', insert2 = ''; // 非行内图片单独占行(即使它与文字一起标注)
-           if(!isInlineImg && markText.indexOf('[插图]') > 0) // 不为行内图片且'[插图]'前有内容
+           if(!isInlineImg && markText.indexOf('') > 0) // 不为行内图片且'[插图]'前有内容
                insert1 = '\n\n'
-           if(!isInlineImg && markText.indexOf('[插图]') != (markText.length - 4)) // 不为行内图片且'[插图]'后有内容
+           if(!isInlineImg && markText.indexOf('') != (markText.length - 1)) // 不为行内图片且'[插图]'后有内容
                insert2 = '\n\n'
            replacement = `${insert1}![${alt}](${imgSrc})${insert2}`
        }else if (footnote) { //注释
@@ -119,14 +119,14 @@ function addMarkedData(mark: any, markedData: any, footnoteContent: string) {
            footnoteContent += `<p id="${footnoteId}">${footnoteNum}. ${footnote}<a href="#${footnoteId}-ref">&#8617;</a></p>\n`;
        }else if (code) { //代码块
            let insert1 = '', insert2 = ''
-           if(markText.indexOf('[插图]') > 0) //'[插图]'前有内容
+           if(markText.indexOf('') > 0) //'[插图]'前有内容
                insert1 = '\n\n'
-           if(markText.indexOf('[插图]') != (markText.length - 4)) //'[插图]'后有内容
+           if(markText.indexOf('') != (markText.length - 1)) //'[插图]'后有内容
                insert2 = '\n\n'
            replacement = `${insert1}${Config.codePre}\n${code}\n${Config.codeSuf}${insert2}`
        }
        if (replacement) { // 替换
-           markText = markText.replace(/\[插图\]/, replacement);
+           markText = markText.replace(//, replacement);
            if (abstract) mark.abstract = markText; // 新字符串赋值回 mark
            else mark.markText = markText;
        } else console.log(mark, markedData);
@@ -147,7 +147,7 @@ export function addRangeIndexST(marks: any, markedDataLength: number) {
        let {abstract, range: markRange} = marks[i];
        let markText = abstract ? abstract : marks[i].markText;
         // 获取当前标注中的“[插图]”位置
-       let indexes = getIndexes(markText, '[插图]');
+       let indexes = getIndexes(markText, '');
        let markedDataIdxes = [];
         // 遍历当前标注中的“[插图]”位置
        for (const idx of indexes) {
diff --git a/src/content/modules/content-markedData.ts b/src/content/modules/content-markedData.ts
index ed191df..9a33963 100644
--- a/src/content/modules/content-markedData.ts
+++ b/src/content/modules/content-markedData.ts
@@ -94,14 +94,14 @@ function countTargets() {
        if(sectionListItem_title && sectionListItem_title.textContent == curChapTitle){
            console.log("找到当前章节的标注");
            foundChap = true;
-           if ($(element).text().indexOf('[插图]')>=0) {
+           if ($(element).text().indexOf('')>=0) {
                targetCnt++;
            }
        }else if(foundChap == true  && sectionListItem_title 
            && sectionListItem_title.textContent != curChapTitle){
            break; // 不再属于当前章节,退出循环
        }else if(foundChap == true){ // 本章内的内容
-           if ($(element).text().indexOf('[插图]')>=0) {
+           if ($(element).text().indexOf('')>=0) {
                targetCnt++;
            }
        }
Higurashi-kagome commented 1 year ago

感谢反馈。我这里看好像还是在用“[插图]”做占位符,不过我添加了一个配置项,如果确实有变动,可在配置项中自定义。

Details ![image](https://github.com/Higurashi-kagome/wereader/assets/51501079/713ed2dd-fa0e-44ce-95f1-043a01d7babf)
beanliu commented 1 year ago

添加了一个配置项,如果确实有变动,可在配置项中自定义。

取决于这个变化背后具体的原因,理论上还存在这么一种情况:两个占位符同时存在于一本书的不同标注中。如果没有更好的信息获取渠道来确认,或许可以先等等看有无更多类似反馈。