obsidian-canzi/Enhanced-editing

【功能请求】选定的文本半角和全角互换

Oswald522 opened this issue · 2 comments

蚕子大佬好:
经常在PDF中复制文字,发现会出现全角和半角混淆的情况。例如 PDF内复制文字:
全角: 1)输入初始 电 压:u= [u1,u2,u3,...,un],其 中n 表示驱动器个数; 2) 生 成 扰 动 电 压:δu= [δu1,δu2,δu3,..., δun]; 3)发 送 正 向 扰 动 电 压,u+ =u+δu= [u1 + δu1,u2+δu2,u3 +δu3,...,un +δun],计 算 正 向 扰 动指标J+ ; 4)发 送 负 向 扰 动 电 压,u- =u-δu= [u1 δu1,u2-δu2,u3 -δu3,...,un -δun],计 算 负 向 扰 动指标J- ; 5)对 电 压 进 行 迭 代 运 算 ,运 算 公 式 为 u(t+1)=u(t)+ηδu(J+-J- ),
半角:1)输入初始 电 压:u= [u1,u2,u3,...,un],其 中n 表示驱动器个数; 2) 生 成 扰 动 电 压:δu= [δu1,δu2,δu3,..., δun]; 3)发 送 正 向 扰 动 电 压,u+ =u+δu= [u1 + δu1,u2+δu2,u3 +δu3,...,un +δun],计 算 正 向 扰 动指标J+ ; 4)发 送 负 向 扰 动 电 压,u- =u-δu= [u1 δu1,u2-δu2,u3 -δu3,...,un -δun],计 算 负 向 扰 动指标J- ; 5)对 电 压 进 行 迭 代 运 算 ,运 算 公 式 为 u(t+1)=u(t)+ηδu(J+-J- ),

以上为全半角内容对比,希望可以增加功能,半角和全角转换。
提供VScode参考插件,可以实现上述功能:https://github.com/mo-san/Zenkaku-Hankaku.

恳请大佬考虑一下!

你好,有时间请qq:(312815311)详细交流一下,我需要逐个字符进行确定,如此字符需要如何转换。谢谢

你好,感谢大佬的回复,提供以下代码用于参考,主要基于UTF8,转换的字符包括A-Z,标点符号、数字、等。另外之前完成转换任务都是基于 vscode插件实现mo-san/Zenkaku-Hankaku.,提供源码插件转换核心代码

 full_shape:
    " ": { commit: " " }
    ",": { commit: , }
    ".": { commit: 。 }
    "<": [《, 〈, «, ‹]
    ">": [》, 〉, », ›]
    "/": [/, ÷]
    "?": { commit: ? }
    ";": { commit: ; }
    ":": { commit: : }
    "'": { pair: ["‘", "’"] }
    '"': { pair: ["“", "”"] }
    '\': [、, \]
    "|": [·, |, "§", "¦"]
    "`": 
    "~": 
    "!": { commit: ! }
    "@": ""
    "#": [#, ⌘]
    "%": [%, "°", "℃"]
    "$": [¥, "$", "€", "£", "¥", "¢", "¤"]
    "^": { commit: …… }
    "&": 
    "*": [*, ·, ・, ×, ※, ❂]
    "(": 
    ")": 
    "-": 
    "_": ——
    "+": 
    "=": 
    "[": [「, 【, 〔, []
    "]": [」, 】, 〕, ]]
    "{": [『, 〖, {]
    "}": [』, 〗, }]
  half_shape:
    ",": { commit: , }
    ".": { commit: 。 }
    "<": [《, 〈, «, ‹]
    ">": [》, 〉, », ›]
    "/": "/"
    "?": { commit: ? }
    ";": { commit: ; }
    ":": { commit: : }
    "'": { pair: ["‘", "’"] }
    '"': { pair: ["“", "”"] }
    '\': ""
    "|": [·, "|", |, "§", "¦"]
    "`": "`"
    "~": ""
    "!": { commit: ! }
    "@": "@"
    "#": "#"
    "%": ["%", %, "°", "℃"]
    "$": [¥, "$", "€", "£", "¥", "¢", "¤"]
    "^": { commit: …… }
    "&": "&"
    "*": ["*", *, ·, ・, ×, ※, ❂]
    "(": 
    ")": 
    "-": "-"
    "_": "——"
    "+": "+"
    "=": "="
    "[": ""
    "]": ""
    "{": ""
    "}": ""
// js 实现中文半角he全角转换

// 半角转全角
function ToDBC(str) {
var result = '';
for (var i = 0; i < str.length; i++) {
    code = str.charCodeAt(i);
    if (code >= 33 && code <= 126) {
    result += String.fromCharCode(str.charCodeAt(i) + 65248);
    } else if (code == 32) {
    result += String.fromCharCode(str.charCodeAt(i) + 12288 - 32);
    } else {
    result += str.charAt(i);
    }
}
return result;
}


// 全角转半角
function ToCDB(str) {
var result = '';
for (var i = 0; i < str.length; i++) {
    code = str.charCodeAt(i);
    if (code >= 65281 && code <= 65374) {
    result += String.fromCharCode(str.charCodeAt(i) - 65248);
    } else if (code == 12288) {
    result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32);
    } else {
    result += str.charAt(i);
    }}
return result;
}
// 测试案例
var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
console.log(ToCDB(str)); // ABCDEFGHIJKLMNOPQRSTUVWXYZ
var str2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
console.log(ToDBC(str2)); // ABCDEFGHIJKLMNOPQRSTUVWXYZ

2023-10-04_13-10