/ig,"\r\n");
//text = text.replace(/\r\n\s*\r\n\s*\s*\r\n\s*/ig,"|");
//text = text.replace(/<\/?t.*>/ig,"|");
text = text.replace(/<(tr|td)\s[^<>]*>/g,"<$1>");//table|
//text = text.replace(/\|\|+/g,"|");
//text = text.replace(/\|(\r*\n\s*)+\|/g,"|\n|");
text = text.replace(/ \r*\n/ig,"");
text = text.replace(/(\r*\n\s*)+/g,"\n");
//let bg = text.match(/\|[^\n\|]*\|/);
/*if(bg){
let bt = bg[0];
let fgx = bt.replace(/(?<=\|)[^\|]*(?=\|)/g,"---");
text = text.replace(bt,bt+"\n"+fgx);
}*/
//console.log(text);
text = text.replace(/ ]*width=["']?(\d+)["']? height=["']?(\d+)["']? (\s*\r*\n)*src=["']?([^"']+)["']?[^>]+>[^<>]*<\/?span>/ig,"");
//text = text.replace(/(|<\/b>)/g,"**");
text = text.replace(/^\s*\*\*?\s*\*\*?\s*$/mg,"");
text = text.replace(/(\r*\n[\s\t]*){2,}/g,"\n\n");
编辑模式.replaceSelection(text);
//在当前光标位置写入处理后的数据
}, (error) => { console.log(error) })
} else {
//console.log("无合适数据!")
}
}, (error) => { console.log(error) })
}
}
}, (error) => { console.log(error) })
}
计算所选结果() {
this.获取编辑器信息 ();
if(/^[\(\d\+\-][\(\)\d\+\-\/\*x\.]+[\d\)]$/i.test(所选文本)){
if(/[x\*\/][x\*\/]+/i.test(所选文本)){
new obsidian.Notice("📣 这个题目,俺看不懂!");
return;
}
let 结果 = eval(所选文本.replace(/x/ig,"*"));
new obsidian.Notice("📣 "+所选文本+"="+结果+"\n结果已写入剪贴板!");
navigator.clipboard.writeText(结果);
}else{
new obsidian.Notice("📣 数了数,您划选了"+所选文本.length+"个字符!");
}
}
async 导出搜索结果(){
let 搜索结果 = "";
let fileNameAry = [];
let 当前文件名 = this.app.workspace.getActiveFile().basename; // + ".md";
//console.log(当前文件名);
if(/^搜索-[\d\w一-龟]+$/i.test(当前文件名)){ //当前笔记名称符合【搜索-关键词】才允许搜索
let 关键词 = 当前文件名.replace(/^搜索-/,""); //提取笔记名称中的 关键词
//console.log(关键词);
for (const file of this.app.vault.getMarkdownFiles()) {
if(file.basename != 当前文件名 && !/^搜索-/.test(file.basename)){
fileNameAry.push(file.basename);
let tempText = await this.获取文件内容(file);
if(tempText.includes(关键词)){ //如果文件内容包含关键词
搜索结果 += "↫***↫# 摘自 [["+file.basename+"]]↫↫"; //先显示摘文出处
let tempAry = tempText.split("\n"); //将笔记内容按行拆分为数组
let btAry = []; //临时标题记录
let oldBtStr = ""; //历史标题前缀
let oldBtext = ""; //历史标题内容
for(var i =0; i < tempAry.length; i++){
let thisLine = tempAry[i]; //逐行分析
if(/^#+ .+$/.test(thisLine)){ //如果当前行 前缀为# ,视为标题行
let tmpBtStr = thisLine.replace(/^(#+) .+$/,"$1"); //提取临时标题前缀 #符号
let tmpBtext = thisLine.replace(/^#+ /,""); //提取临时标题内容
if(oldBtStr.length>0){ //如果历史标题前缀有内容
if(oldBtStr.length >= tmpBtStr.length){
//如果当前行标题级别 等于 或 高于 历史标题级别,则清空临时标题记录
btAry = [];
oldBtStr = "";
oldBtext = "";
}
}
oldBtStr = tmpBtStr; //视为发现下级标题,当前标题前缀归入历史
oldBtext = tmpBtext;
btAry.push(oldBtStr+" [["+file.basename+"#"+oldBtext+"|"+oldBtext+"]]") //把标题的内链加入临时数组
//console.log(btAry.join("↫↫"));
}else{
let tmpLine = thisLine.replace(/[=\*#$`\[\]() ]+/g,"").replace(/\<[^\<\>]+\>/g,""); //清理行中的md语法或html语法
if(tmpLine.includes(关键词)){ //如果非标题行中包含关键词
if(btAry.length>0){ //如果有临时标题记录
搜索结果 += btAry.join("↫↫")+"↫↫";
btAry = [];
oldBtStr = "";
oldBtext = "";
}
//let reg = new RegExp(`(?]+\>/g,"");
搜索结果 += thisLine.replace(/\<[^\<\>]+\>/g,"")+"↫↫";
}
}
}
}else{
continue;
}
}
};
搜索结果 = 搜索结果.replace(/↫[ ]*/g,"\n");
//console.log(搜索结果);
this.app.workspace.getActiveViewOfType(obsidian.MarkdownView).editor.setValue(搜索结果);
//new obsidian.Notice("📣 搜索完毕,结果已写入当前页面中...");
this.app.internalPlugins.getPluginById('global-search').instance.openGlobalSearch("file:"+当前文件名+" /"+关键词);
}else{
new obsidian.Notice("📣 要求笔记名必须为【搜索-关键词】样式\n\n 方可执行【导出搜索结果】命令!");
}
}
async 导出搜索结果old(){
this.获取编辑器信息 ();
if(所选文本 != "" && /^[\d\w一-龟]+$/i.test(所选文本)){
let outext = "↫↫";
let fileNameAry = [];
let 当前文件名 = this.app.workspace.getActiveFile().basename + ".md";
for (const file of this.app.vault.getMarkdownFiles()) {
if(file.name != 当前文件名){
fileNameAry.push(file.basename);
let tempText = await this.获取文件内容(file);
if(tempText.includes(所选文本)){
//tempText = tempText.replace(/(\r\n|\n)/g,"↫");
//let reg1 = new RegExp(`[^↫]*${所选文本}[^↫]*`,'g');
let reg1 = new RegExp(`(^#+ .+$|^.*${所选文本}.*$)`,'mg');
let results = tempText.match(reg1);
outext += "***↫摘自 [["+file.basename+"]]↫↫"+results+"↫↫"
//fileTexts.push("***↫摘自 [["+file.basename+"]]↫↫"+results+"↫");
//console.log(file.name+"\n"+results);
}else{
continue;
}
}
};
//outext = fileTexts.toString().replace(/,/g,"↫").replace(/↫/g,"\n");
let reg2 = new RegExp(`(? file.extension === 'md');
if (!markdownFiles.length) {
return;
}
for(var i= 0;i|^\- \[( |x)\]|^\+ |<[^<>]+>|^1\. |^\-+$|^\*+$|==|\*+|~~|```|!*\[\[|\]\])/mg;
所选文本 = 所选文本.replace(/\[([^\[\]]*)\]\([^\(\)]+\)/img,"$1");
所选文本 = 所选文本.replace(mdText,"");
所选文本 = 所选文本.replace(/^[ ]+|[ ]+$/mg,"");
所选文本 = 所选文本.replace(/(\r\n|\n)+/mg,"\n");
new obsidian.Notice("📣 已成功获取无语法文本,可以粘贴!");
navigator.clipboard.writeText(所选文本);
}
};
获取当前字数() {
this.获取编辑器信息 ();
if (!笔记正文) return;
let showTip = "";
let showTip1 = "";
let showTip2 = "";
let 可见字符 = 笔记正文.match(/[^\s\t\r\n]/g);
if(可见字符){
showTip1 += "\n可见字符 "+可见字符.length;
let 汉字个数 = 笔记正文.match(/[一-龥]/g);
if(汉字个数){
showTip1 += "\n- 汉字 "+汉字个数.length;
}
let 字母个数 = 笔记正文.match(/[a-z]/ig);
if(字母个数){
showTip1 += "\n- 字母 "+字母个数.length;
}
let 数字个数 = 笔记正文.match(/\d/ig);
if(数字个数){
showTip1 += "\n- 数字 "+数字个数.length;
}
let 标点个数 = 笔记正文.match(/[,,\.。\\、\/\??\!!::;;—【】(){}《》#&@\$\^“”‘’'"\]\[\(\)—…]/ig);
if(标点个数){
showTip1 += "\n- 标点 "+标点个数.length;
}
}else{
showTip1 = "\n0 个可见字符";
}
let 不可见字符 = 笔记正文.match(/[\s\t\r\n]/g);
if(不可见字符){
showTip2 += "\n不可见字符 "+不可见字符.length;
let 空格个数 = 笔记正文.match(/[ \t]/g);
if(空格个数){
showTip2 += "\n- 空格 "+空格个数.length;
}
let 换行个数 = 笔记正文.match(/\r*\n/g);
if(换行个数){
showTip2 += "\n- 换行 "+换行个数.length;
}
}else{
showTip2 = "\n0 个不可见字符";
}
new obsidian.Notice("📣 当前笔记含有:"+showTip1+"\n"+showTip2,0);
};
嵌入当前网址页面 () {
this.获取编辑器信息 ();
let vid,web;
let 基本格式 = '\n';
if(所选文本.match(/^https?:\/\/[^:]+/)){
if(所选文本.match(/^https?:\/\/v\.qq\.com/)){
vid = 所选文本.replace(/^http.*\/([^\/=\?\.]+)(\.html.*)?$/,"$1");
web = "https://v.qq.com/txp/iframe/player.html?vid="+vid;
}else if(所选文本.match(/^https?:\/\/www\.bilibili\.com/)){
vid = 所选文本.replace(/^http.*\/([^\/=\?\.]+)(\?spm.*)?$/,"$1");
web = "https://player.bilibili.com/player.html?bvid="+vid;
}else if(所选文本.match(/^https?:\/\/www\.youtube\.com/)){
vid = 所选文本.replace(/^http.*?v=([^\/=\?\.]+)(\/.*)?$/,"$1");
web = "https://www.youtube.com/embed/"+vid;
}else{
web = 所选文本;
}
基本格式 = 基本格式.replace(/■/,web);
笔记全文.replaceRange(基本格式, {line:当前行号,ch:当前行文本.length},{line:当前行号,ch:当前行文本.length});
编辑模式.exec("goRight");
}else{
new obsidian.Notice("📣 所选文本不符合网址格式,无法嵌入!");
}
};
列表转为图示 () {
this.获取编辑器信息 ();
let 大纲文本 = 所选文本.replace(/( |\t)/mg,"■");
大纲文本 = 大纲文本.replace(/(\-\s|\d+\.\s)/mg,""); //对所有文本行的行首进行替换整理,去除-
大纲文本 = 大纲文本.replace(/\s+$/mg,""); //对所有文本行的行尾进行替换去除
大纲文本 = 大纲文本.replace(/\n/g,"↵");
大纲文本 = 大纲文本.replace(/↵+$/,""); //去除末尾多余换行符
let tagAry = 大纲文本.split("↵");
//new obsidian.Notice(tagAry[0]);
let fName = "";
let 主要语法 = "";
for(var i =0;i0){
var upLine = tagAry[i-1]; //上行文本
var m = upLine.lastIndexOf("■");
}
if(n<0){//无■,即为根级大纲,可创建@导航页面
fName = thisLine;
}else{
//new obsidian.Notice(upLine+" "+m+"\n"+thisLine+" "+n);
//比较下行与当前行的■数,三种情况,下行多,两行同,下行少
thisLine = thisLine.replace(/^■+/,""); //去除标识符号
if(n>m){
//本行多,追加-当前行,前缀@
fName = fName+"-->"+thisLine;
}else if(n==m){
//替换末尾-旧名称 为 -当前行
fName = fName.replace(/(?<=(^|\-\-\>))[^\-\>]+$/,thisLine);
}else{
var cha=Number(m-n)+1; //计算上行、本行的■数
fName = fName.replace(eval("/(\-\-\>[^\-\>]+){"+cha+"}$/"),"-->"+thisLine);
}
var 行语法 = fName.replace(/^.*\-\-\>(?=[^\-\>]+\-\-\>[^\-\>]+$)/mg,"");
主要语法 = 主要语法 + "↵"+ 行语法;
}
}
var 输出语法 = "%%此图示由列表文本转换而成!%%↵"+主要语法
//编辑模式.setCursor({line:0,ch:0});
//笔记正文 = this.获取笔记正文();
编辑模式.exec("goRight");
编辑模式.exec("goDown");
this.获取编辑器信息 ();
输出语法 = 输出语法.replace(/↵/g,"\n");
笔记全文.replaceRange("```mermaid\ngraph TD\n"+输出语法+"\n```\n", 当前光标, 当前光标);
/*
var 新正文 = 笔记正文.replace(/\n/g,"↵");
if(新正文.includes("%%此图示由列表文本转换而成!%%")){
新正文 = 新正文.replace(/%%此图示由列表文本转换而成!%%↵.+?(?=↵```)/g, 输出语法);
新正文 = 新正文.replace(/↵/g,"\n");
this.替换笔记正文 (新正文);
}else{
new obsidian.Notice("列表文本已转为MerMaid语法。\n可以粘贴!");
输出语法 = 输出语法.replace(/↵/g,"\n");
navigator.clipboard.writeText("```mermaid\ngraph TD\n"+输出语法+"\n```\n");
};
*/
}
升序排列所选段落() {
this.获取编辑器信息 ();
if (所选文本 == "") return;
var 段落 = 所选文本.replace(/\n\s*(?=\n)/g,"").split("\n"); //去除空行,拆分为数组
段落.sort();
this.替换所选文本 (段落.join("\n"));
};
降序排列所选段落() {
this.获取编辑器信息 ();
if (所选文本 == "") return;
var 段落 = 所选文本.replace(/\n\s*(?=\n)/g,"").split("\n"); //去除空行,拆分为数组
段落.sort().reverse();
this.替换所选文本 (段落.join("\n"));
};
/*
多行引用文本() {
this.获取编辑器信息 ();
var 所选数据 = 编辑模式.listSelections();
if(所选数据){
var 首选行号 = 所选数据[0].anchor.line;
var 末选行号 = 所选数据[0].head.line;
for ( var i = 首选行号;i <= 末选行号;i++){
var 当前行文本 = 编辑模式.getLine(i);
if(当前行文本.startsWith(">")){
笔记全文.replaceRange("", {line:i,ch:0},{line:i,ch:1});
}else{
笔记全文.replaceRange(">", {line:i,ch:0},{line:i,ch:0});
}
}
}else{
return;
}
};
*/
添加段落编号() {
this.获取编辑器信息 ();
if (所选文本 == ""){
所选文本 = 笔记正文;
};
let 排除行 = /^(#+.*|```|\.*|\|([^\|]*\|)*|\>.*)\s*$/m; //排除特殊行文本
//new obsidian.Notice("当前为标题行 "+_str);
var 末行行号 = 编辑模式.lastLine();
let lineId = 1;
for(var i= 0;i<=末行行号;i++){
var 本行文本 = 编辑模式.getLine(i);
if(排除行.test(本行文本)){
}else{
笔记全文.replaceRange(lineId+". ", {line:i,ch:0},{line:i,ch:0});
lineId ++;
}
}
};
去除段落编号() {
this.获取编辑器信息 ();
if (!笔记正文) return;
编辑模式.exec("goStart");
笔记正文 = 笔记正文.replace(/^[0-9]+\.\s+([^\s])/mg,"$1");
this.替换笔记正文 (笔记正文);
};
折叠同级标题() {
this.获取编辑器信息 ();
if (!笔记全文) return;
if(/^#+ /.test(当前行文本)){
this.app.commands.executeCommandById('editor:unfold-all');
let _str = 当前行文本.replace(/^(#+) .*$/,"$1"); //获取前面的多个#号
//new obsidian.Notice("当前为标题行 "+_str);
var 末行行号 = 编辑模式.lastLine();
var arr = 编辑模式.getRange({line:0,ch:0},{line:末行行号,ch:0}).split("\n");
//console.log(arr);
for (var i=arr.length; i>=0; i--) {
if(eval("/^"+_str+"(?=[^#])/").test(arr[i])) {
编辑模式.setCursor({line:i,ch:0});
this.app.commands.executeCommandById('editor:toggle-fold');
}
}
}
};
//火冷添加
当前行内容根据光标所在内部链接分割() {
this.获取编辑器信息()
var 行内容根据光标内部链接分割 = [];
//console.log(选至行首);
//console.log(选至行尾);
if (选至行首.endsWith("]]")) { //光标在内部链接范围(含]]后面,因为添加内部链接光标默认在此位置)
var m0 = 选至行首.match(/^(.*)(!?\[\[.*?\]\])$/);
行内容根据光标内部链接分割 = [m0[1], m0[2], 选至行尾];
} else if (选至行首.match(/\[\[/) && 选至行尾.match(/\]\]/)) { //光标在内部链接内(TODO 不支持在]]符号内)
var m0 = 选至行首.match(/^(.*)(!?\[\[.*)$/);
var m1 = 选至行尾.match(/^(.*?\]\])(.*)/);
行内容根据光标内部链接分割 = [m0[1], m0[2]+m1[1], m1[2]];
} else {
行内容根据光标内部链接分割 = ["not in [[]]"];
}
//console.log(行内容根据光标内部链接分割);
return 行内容根据光标内部链接分割;
}
//["![[", "内部链接文本" , "]]"]
内部链接分割(内部链接含符号) {
//console.log("内部链接含符号 = " + 内部链接含符号);
var m = 内部链接含符号.match(/^(!?\[\[)(.*)(\]\])$/);
if (m)
return [m[1],m[2],m[3]];
else
console.log("内部链接分割 失败");
}
内部链接名称(内部链接文本) {
return 内部链接文本.replace(/.*\//, '');
}
//添加内部链接内容的别名,比如 a/b/c → a/b/c|c
修改内部链接的显示名称() {
var arr = this.当前行内容根据光标所在内部链接分割();
if (arr[1].indexOf("|") > -1) {
return;
}
var 内部链接数组 = this.内部链接分割(arr[1]);
var 名称 = this.内部链接名称(内部链接数组[1]);
if (名称.indexOf("#") > -1) //有标题,取标题后面
名称 = 名称.replace(/.*#/, '');
if (名称.indexOf("^") > -1) //有段落标记,则删除
名称 = 名称.replace(/\s+\^.*/, '');
内部链接数组[1] += `|${名称}`;
//console.log(内部链接数组);
arr[1] = 内部链接数组.join("");
//console.log(arr);
this.app.workspace.activeLeaf.view.editor.setLine(当前行号, arr.join(""));
编辑模式.setCursor({line:当前行号,ch:arr[0].length+arr[1].length-2}); //-2是因为
}
所有上级标题路径() {
编辑模式 = this.获取编辑模式 ();
当前光标 = 编辑模式.getCursor();
当前行号 = 当前光标.line;
var arr = 编辑模式.getRange({line:0,ch:0},{line:当前行号,ch:0}).split("\n");
//console.log(arr);
//第一个要匹配的 re
if (arr[arr.length-1].match(/^(\#+)\s/)) { //当前是标题,则查找上一级标题
var l = arr[arr.length-1].match(/^(\#+)\s/)[1].length - 1;
if (l == 0)
return [];
var re = new RegExp(`^\#{${l}}\\s`);
} else {
var re = /^\#+\s/;
}
//console.log(re);
var arrRes = [];
for (var i=arr.length-1; i>=0; i--) {
//console.log(arr[i]);
if (re.test(arr[i])) {
arrRes.push(arr[i]);
var l = arr[i].match(/^(\#+)\s/)[1].length - 1;
if (l == 0)
return arrRes;
re = new RegExp(`^\#{${l}}\\s`);
//console.log(re);
}
}
return arrRes;
};
折叠某级别标题(折叠等级) {
this.获取编辑器信息 ();
if (!笔记全文) return;
this.app.commands.executeCommandById('editor:unfold-all');
var 末行行号 = 编辑模式.lastLine();
var arr = 编辑模式.getRange({line:0,ch:0},{line:末行行号,ch:0}).split("\n");
var re = new RegExp(`^\#{${折叠等级}}\\s`);
for (var i=arr.length; i>=0; i--) {
if (re.test(arr[i])) {
编辑模式.setCursor({line:i,ch:0});
this.app.commands.executeCommandById('editor:toggle-fold');
}
}
};
插入有效空行() {
this.获取编辑器信息 ();
if (!笔记全文) return;
笔记全文.replaceRange(" \n", 当前光标, 当前光标);
编辑模式.exec("goRight");
编辑模式.exec("goRight");
};
批量插入空行() {
this.获取编辑器信息 ();
if (所选文本 == "") {
笔记正文 = 笔记正文.replace(/(?|\n)[^\n]*)\n(?!(\s*\- |\s*[0-9]+\.|\s*\>|\n))/g,"$1\n\n");
this.替换笔记正文 (笔记正文);
}else{
所选文本 = 所选文本.replace(/(?|\n)[^\n]*)\n(?!(\s*\- |\s*[0-9]+\.|\s*\>|\n))/g,"$1\n\n");
this.替换所选文本 (所选文本);
};
};
批量去除空行() {
this.获取编辑器信息 ();
if (所选文本 == "") {
笔记正文 = 笔记正文.replace(/(^\s*\n|\r\n|\n)[\t\s]*(\r\n|\n)/g,"\n");
this.替换笔记正文 (笔记正文);
}else{
所选文本 = 所选文本.replace(/(\r\n|\n)[\t\s]*(\r\n|\n)/g,"\n");
this.替换所选文本 (所选文本);
};
};
空格转为空行() {
this.获取编辑器信息 ();
if (所选文本 == ""){
笔记正文 = 笔记正文.replace(/(?<=[一-龥。?!])[\t\s](?=[一-龥])/g,"\n");
this.替换笔记正文 (笔记正文);
}else{
所选文本 = 所选文本.replace(/(?<=[一-龥。?!])[\t\s](?=[一-龥])/g,"\n");
this.替换所选文本 (所选文本);
};
};
全文首行缩进() {
this.获取编辑器信息 ();
编辑模式.exec("goStart");
if (!笔记正文) return;
//new obsidian.Notice(笔记正文);
if(isIndent){
笔记正文 = 笔记正文.replace(/^[ ]+/mg,"");
笔记正文 = 笔记正文.replace(/^(?!(\s*\d+\.\s|[a-zA-Z一-龟]+:|\s*\-\.?\s|[\n\s\>#]+|```|\-\-\-|\|[^\|]|\*\*\*))/mg," ");
isIndent = false;
}else{
笔记正文 = 笔记正文.replace(/^[ ]+/mg,"");
isIndent = true;
}
this.替换笔记正文 (笔记正文);
};
当前行缩进() {
this.获取编辑器信息 ();
if (!笔记全文) return;
let 新文本 = "";
let 已缩进 = 当前行文本.includes(" ");
let 偏移 = 当前光标.ch;
新文本 = 当前行文本.replace(/^[ ]+/mg,"");
if(已缩进){
}else{
新文本 = 新文本.replace(/^(?!(\s*\d+\.\s|\s*\-\.\s|[\n\s\>#]+|```|\-\-\-|\|[^\|]|\*\*\*))/mg," ");
}
笔记全文.replaceRange(新文本, {line:当前行号,ch:0}, {line:当前行号,ch:当前行文本.length});
if(已缩进){
if(当前光标.ch>3){
编辑模式.setCursor({line:当前行号,ch:Number(偏移-5)});
}else{
编辑模式.setCursor({line:当前行号,ch:0});
}
}else{
编辑模式.setCursor({line:当前行号,ch:Number(偏移+5)});
}
};
行首添加空格() {
this.获取编辑器信息 ();
if (所选文本 == "") {
笔记正文 = 笔记正文.replace(/(?<=(^|\n))(?!(\-\-\-|\*\*\*|\s))/g," ");
this.替换笔记正文 (笔记正文);
}else{
所选文本 = 所选文本.replace(/(?<=(^|\n))(?!(\-\-\-|\*\*\*|\s))/g," ");
this.替换所选文本 (所选文本);
};
};
去除行首空格() {
this.获取编辑器信息 ();
if (所选文本 == "") {
笔记正文 = 笔记正文.replace(/(?<=(^|\n))\s+/g,"");
this.替换笔记正文 (笔记正文);
}else{
所选文本 = 所选文本.replace(/(?<=(^|\n))\s+/g,"");
this.替换所选文本 (所选文本);
};
};
末尾追加空格() {
this.获取编辑器信息 ();
if (所选文本 == "") {
笔记正文 = 笔记正文.replace(/(?\s+/g,"- ");
//处理 bookXnote 回链语法中的列表
所选文本 = 所选文本.replace(/(?<=\s)[0-9]+。 /g,"1. ");
//把 1。 转换为 有序列表样式
if (所选文本 == "") {
this.替换笔记正文 (所选文本);
}else{
this.替换所选文本 (所选文本);
};
};
修复错误标点() {
this.获取编辑器信息 ();
if (所选文本 == "") {
笔记正文 = this.修替标点(笔记正文);
this.替换笔记正文 (笔记正文);
}else{
所选文本 = this.修替标点(所选文本);
this.替换所选文本 (所选文本);
};
};
打开pp视频() {
var mp4 = "T:\视频资料\海蒂和爷爷-国德双音轨.mp4";
var videoTime = "01:20:00,000";
var command = 'PotPlayerMini64.exe "E:\Ob思维空间\视频\Scapple宣传视频.mp4"' //这里是执行的DOS命令
JsExecCmd();
}
JsExecCmd() {
const { exec } = require('child_process');
console.log(`尝试执行cmd命令`);
exec('cmd /c dir', (error, stdout, stderr) => {
if (error) {
console.error(`执行错误: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.error(`stderr: ${stderr}`);
});
}
修替断行(_str){
_str = _str.replace(/(?<=[^a-zA-Z])\s+(?=\r*\n)/g,"")
_str = _str.replace(/(?<=\w)\s+(?=\r*\n)/g," ")
_str = _str.replace(/^(#+ [^#\r\n]+)$/mg,"↫$1↫")
//去除末尾非字母后的空格,将末尾字母后的多个空格保留一个
_str = _str.replace(/([^:。?!:\.\?\!\w])(\r*\n)+/g,"$1")
_str = _str.replace(/(\w)(\r*\n)+/mg,"$1 ")
_str = _str.replace(/[↫]/g,"\r\n")
return _str;
}
修替标点(_str){
_str = _str.replace(/\n/g,"↫");
_str = _str.replace(/(?<=[一-龥”’)》】])\s*,\s*([一-龥“‘(《【↫])/g,",$1");
_str = _str.replace(/(?<=[一-龥”’)》】])\s*\.\s*([一-龥“‘(《【↫]|$)/g,"。$1"); //数字后的黑点不转为句号
_str = _str.replace(/(?<=[一-龥”’)》】])\s*\?\s*([一-龥“‘(《【↫]|$)/g,"?$1");
_str = _str.replace(/(?<=[一-龥”’)》】])\s*:\s*([一-龥“‘(《【↫]|$)/g,":$1");
_str = _str.replace(/(?<=[一-龥”’)》】])\s*;\s*([一-龥“‘(《【↫]|$)/g,";$1");
_str = _str.replace(/(?<=[a-zA-Z0-9])\s*;\s*([一-龥“‘(《【↫]|$)/g,";$1"); //数字、字母与中文之间的分号转为中文分号
_str = _str.replace(/(?<=[一-龥”’)》】])\s*;\s*([a-zA-Z0-9↫]|$)/g,";$1"); //中文与数字、字母之间的分号转为中文分号
_str = _str.replace(/(?<=[a-zA-Z0-9])\s*;\s*([一-龥↫]|$)/g,";$1"); //数字、字母与中文之间的分号转为中文分号
_str = _str.replace(/(?<=[一-龥])\s*;\s*([a-zA-Z0-9↫]|$)/g,";$1"); //中文与数字、字母之间的分号转为中文分号
_str = _str.replace(/(?<=[一-龥])\s+(?=[一-龥])/g,"");
_str = _str.replace(/(?<=[^一-龥]),([^一-龥])/g,",$1");
_str = _str.replace(/(?<=[^一-龥])。([^一-龥])/g,".$1"); //数字后的句号不转为黑点
_str = _str.replace(/(?<=[^一-龥])?([^一-龥])/g,"?$1");
_str = _str.replace(/(?<=[^一-龥]):([^一-龥])/g,":$1");
_str = _str.replace(/(?<=[^一-龥]);([^一-龥])/g,";$1");
_str = _str.replace(/[\(()]([^一-龥]+)[\))]/g,"($1)");
_str = _str.replace(/[\(()](.*?[一-龥].*?)[\))]/g,"($1)");
_str = _str.replace(/::/g,"::");
_str = _str.replace(/【【/g,"[[");
_str = _str.replace(/】】/g,"]]");
_str = _str.replace(/(?<=[,\.?!])([^\s0-9a-zA-Z])/g," $1");
_str = _str.replace(/↫/g,"\n");
return _str;
}
转换路径() {
this.获取编辑器信息 ();
if(所选文本 == "" || 笔记正文==null){return};
var link1 = /^[a-zA-Z]:\\/; //符合普通路径格式
var link2 = /^(\[[^\[\]]*\]\()*file:\/\/\/[^\(\)]*\)*/; //符合[](file路径)格式
var link3 = /^\[[^\[\]]*\]\(([a-zA-Z]:\\[^\(\)]*)\)*/; //意外路径格式
if (link1.test(所选文本)){
所选文本 = 所选文本.replace(/\s/mg,"%20");
所选文本 = 所选文本.replace(/^(.*)$/m,"\[file\]\(file:///$1\)");
所选文本 = 所选文本.replace(/\\/img,"\/");
this.替换所选文本 (所选文本);
}else if(link2.test(所选文本)){
所选文本 = 所选文本.replace(/%20/mg," ");
所选文本 = 所选文本.replace(/^(\[[^\[\]]*\]\()*file:\/\/\/([^\(\)]*)\)*/m,"$2");
所选文本 = 所选文本.replace(/\//mg,"\\");
this.替换所选文本 (所选文本);
}else if(link3.test(所选文本)){
所选文本 = 所选文本.replace(/^\[[^\[\]]*\]\(([a-zA-Z]:\\[^\(\)]*)\)*/m,"$1");
this.替换所选文本 (所选文本);
}else{
new obsidian.Notice("📣 您划选的路径格式不正确!");
return;
}
};
拆分多行() {
this.获取编辑器信息 ();
if(所选文本 == "" || 笔记正文 == null){return};
所选文本 = 所选文本.replace(/([。?!]) /g,"$1\n");
this.替换所选文本 (所选文本);
};
简体转繁() {
this.获取编辑器信息 ();
if (所选文本 == "") return;
for (var i=0;i<简体字表.length;i++){
所选文本 = 所选文本.replace(eval("/"+简体字表[i]+"/g"),繁体字表[i]);
}
this.替换所选文本 (所选文本);
}
繁体转简() {
this.获取编辑器信息 ();
if (所选文本 == "") return;
for (var i=0;i<繁体字表.length;i++){
所选文本 = 所选文本.replace(eval("/"+繁体字表[i]+"/g"),简体字表[i]);
}
this.替换所选文本 (所选文本);
}
生成时间戳() {
var date = new Date();
return date.getFullYear().toString() + this.pad2(date.getMonth() + 1) + this.pad2(date.getDate()); // + this.pad2(date.getHours()) + this.pad2(date.getMinutes()) + this.pad2(date.getSeconds()
};
pad2(n) {
return n < 10 ? '0' + n : n
};
}
class editSettingsTab extends obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
display() {
var plugin = this.plugin;
var containerEl = this.containerEl;
containerEl.empty();
containerEl.createEl('h2', { text: "ZH 增强编辑 V"+当前版本 });
new obsidian.Setting(containerEl)
.setName("📣 转换内部链接「Alt+Z」:在选文两端添加或去除 [[ ]] 符号")
.setDesc("支持转换多行文本(需用换行符分隔)或多句文本(需用顿号分隔)。")
new obsidian.Setting(containerEl)
.setName("📣 转换潜在链接「待设置」:判断当前笔记的正文部分,将符合的文本转为内部链接")
.setDesc("此功能不处理 Yaml 和标签内容,只对笔记的正文部分进行处理。感谢 平果(184537266)提供建议。")
new obsidian.Setting(containerEl)
.setName("- 特定标题列表")
.setDesc("优先处理匹配右侧列表的文本,如右表为空,才按库标题名称进行判断并转换。建议提取全库笔记标题进行整理并放入此处。")
.addTextArea((text) => {text.setPlaceholder("一行文字一则标题\n不要使用禁止符号")
.setValue(this.plugin.settings.linkWords).onChange((value) => {
this.plugin.settings.linkWords = value;
this.plugin.saveSettings();
});
text.inputEl.rows = 20;
text.inputEl.cols = 60;
});
var div0 = containerEl.createEl('p', {
cls: 'recent-files-donation',
});
var linkText = document.createDocumentFragment();
linkText.appendText("📣 转换同义链接「Alt+Q」:将选文转换为 [[|选文]] 样式后再选择文档")
linkText.appendChild(document.createElement('br'));
linkText.appendText("📣 转换标签「Alt+Shift+3」:将选文转换为 #选文 标签样式或反向转换")
linkText.appendChild(document.createElement('br'));
div0.appendChild(linkText);
/*
new obsidian.Setting(containerEl)
.setName('📣 智能换行「Enter」 默认支持```代码块```内换行缩进效果')
.setDesc('启用此项后,在非列表或代码块的文本中按下回车后补加一次换行;如想普通换行,可按下 Shift+Enter 键。')
.addToggle(toggle => toggle.setValue(this.plugin.settings.twoEnter)
.onChange((value) => {
this.plugin.settings.twoEnter = value;
this.plugin.saveSettings();
}));
new obsidian.Setting(containerEl)
.setName("📣 插入制表符「Tab」 在普通文本行中插入制表符效果")
.setDesc("启用此项后,在普通文本行中按下 Tab 键会插入4个空格,不再整行缩进。")
.addToggle(toggle => toggle.setValue(this.plugin.settings.isTab)
.onChange((value) => {
this.plugin.settings.isTab = value;
this.plugin.saveSettings();
}));
*/
new obsidian.Setting(containerEl)
.setName("📣 智能语法「Alt+;」:自动转换、匹配或跳过各种类型的括号或代码块语法")
.setDesc("可将[( (< ([ \"[ \'[等组合转为〖〈〔『「,或将dv qy mm CSS js ty等字符串为代码块,将类型词语转为Callout引用语法。")
new obsidian.Setting(containerEl)
.setName("📣 智能粘贴「Ctrl+Alt+V」:将复制的内容粘贴为Md语法样式")
.setDesc("依据复制内容的类型,将表格、网址、本地路径或代码直接粘贴为MD表格、超链接或代码块格式。")
new obsidian.Setting(containerEl)
.setName("📣 键控光标移动「Alt+I, +J, +K, +L」")
.setDesc("按下Alt +I向上 +J向左 +K向下 +L向右 +U文首 +N文末 快捷键,控制光标移动位置。")
new obsidian.Setting(containerEl)
.setName("📣 键控光标跳转「Alt+Shift +I, +K」")
.setDesc("控制光标在标题、列表、待办、代码块和引用等文本行 或在粗体、高亮、注释、删除等MD语法字符之间 上下跳转。")
new obsidian.Setting(containerEl)
.setName('📣 键控切换同文件夹内的文件显示「Alt+Shift +U +N」')
.setDesc('按下快捷键,控制打开同文件夹内的上一文件或下一文件。')
new obsidian.Setting(containerEl)
.setName('📣 设置标题及粗、斜、删、亮等效果(MarkDown语法)功能')
.setDesc('启用后,当未选文本时按下Alt + Shift +C加粗 +G高亮 +S删除线 +U上标 +N下标 等快捷键,即开启或关闭 MD语法「格式刷」功能。')
var div1 = containerEl.createEl('p', {
cls: 'recent-files-donation',
});
var mdText = document.createDocumentFragment();
mdText.appendText('转换标题语法「待设置」:指定或取消当前行文本为N级标题');
mdText.appendChild(document.createElement('br'));
mdText.appendText('修改内部链接的显示名称「待设置」:从内部链接里路径中提取名称做为 [[|名称]] 显示,感谢火冷(85399416)增强相关功能');
mdText.appendChild(document.createElement('br'));
mdText.appendText('调高标题级别「待设置」:将当前行标题(及子标题)或所选范围的标题级别调高。建议:空(1977878681)');
mdText.appendChild(document.createElement('br'));
mdText.appendText('调低标题级别「待设置」:将当前行标题(及子标题)或所选范围的标题级别调低。建议:空(1977878681)');
mdText.appendChild(document.createElement('br'));
//mdText.appendText('调高所有标题级别「待设置」:将所有标题的级别调高一级(最高为一级)。');
//mdText.appendChild(document.createElement('br'));
//mdText.appendText('调低所有标题级别「待设置」:将所有标题的级别调低一级(最低为六级)。建议:空 QQ:1977878681');
//mdText.appendChild(document.createElement('br'));
mdText.appendText('转换标签语法「Alt+Shift+3」:将选文转为或去除 #标签 效果');
mdText.appendChild(document.createElement('br'));
mdText.appendText('标签转为链接「Ctrl+Alt+Shift+3」:将 [[笔记名]] 与 #笔记名 效果互转');
mdText.appendChild(document.createElement('br'));
mdText.appendText('转换粗体语法「Alt+C」:将选文转为或去除 **粗体** 效果');
mdText.appendChild(document.createElement('br'));
mdText.appendText('转换斜体语法「Alt+X」:将选文转为或去除 *斜体* 效果');
mdText.appendChild(document.createElement('br'));
//mdText.appendText('转换行内代码「Alt+D」:将选文转为或去除 `行内代码` 效果');
//mdText.appendChild(document.createElement('br'));
mdText.appendText('转换删除线「Alt+S」:将选文转为或去除 ~~删除线~~ 效果');
mdText.appendChild(document.createElement('br'));
mdText.appendText('转换下划线「Alt+H」:将选文转为或去除 下划线 效果');
mdText.appendChild(document.createElement('br'));
mdText.appendText('转换代码块「待设置」:将选文转为或去除 ```代码块``` 效果');
mdText.appendChild(document.createElement('br'));
mdText.appendText('转换上标语法「待设置」:将选文转为或去除 上标 效果');
mdText.appendChild(document.createElement('br'));
mdText.appendText('转换下标语法「待设置」:将选文转为或去除 下标 效果');
mdText.appendChild(document.createElement('br'));
mdText.appendText('[[]]转为[]()语法「待设置」:将划选文本中的[[内部链接]]语法转为[超](链接)语法');
mdText.appendChild(document.createElement('br'));
mdText.appendText('[]()转为[[]]语法「待设置」:将划选文本中的[超](链接)语法转为[[内部链接]]语法');
mdText.appendChild(document.createElement('br'));
mdText.appendText('去除超链接语法「待设置」:将划选文本中的[]()超链接样式恢复为普通文本,即只保留[]内的内容');
mdText.appendChild(document.createElement('br'));
mdText.appendText('转换无语法文本「Ctrl+Alt+Z」:鼠标点击或划选文本的语法部分,可去除相应的MarkDown语法字符');
mdText.appendChild(document.createElement('br'));
mdText.appendText('获取无语法文本「Ctrl+Alt+C」:去除划选文本中的所有MarkDown语法字符,并写入剪贴板');
mdText.appendChild(document.createElement('br'));
div1.appendChild(mdText);
/*
new obsidian.Setting(containerEl)
.setName("📣 是否启用Blut topaz 主题高亮配色支持")
.setDesc("启用此项后,可以使用Blut topaz主题自带的涂黑、填空等效果。")
.addToggle(toggle => toggle.setValue(this.plugin.settings.isBT)
.onChange((value) => {
this.plugin.settings.isBT = value;
this.plugin.saveSettings();
}));*/
new obsidian.Setting(containerEl)
.setName('📣 设置彩色文字效果(Html语法)功能')
.setDesc('点击颜色块调节颜色,在笔记编辑区划选文本后按下「Ctrl+Shift+ 1-5」快捷键,即可转为相应颜色的文本。')
const textColourPicker1 = containerEl.createEl("input", {
type: "color",
});
textColourPicker1.value = this.plugin.settings.hColor1;
textColourPicker1.addEventListener("change", async () => {
this.plugin.settings.hColor1 = textColourPicker1.value;
await this.plugin.saveSettings();
});
const textColourPicker2 = containerEl.createEl("input", {
type: "color",
});
textColourPicker2.value = this.plugin.settings.hColor2;
textColourPicker2.addEventListener("change", async () => {
this.plugin.settings.hColor2 = textColourPicker2.value;
await this.plugin.saveSettings();
});
const textColourPicker3 = containerEl.createEl("input", {
type: "color",
});
textColourPicker3.value = this.plugin.settings.hColor3;
textColourPicker3.addEventListener("change", async () => {
this.plugin.settings.hColor3 = textColourPicker3.value;
await this.plugin.saveSettings();
});
const textColourPicker4 = containerEl.createEl("input", {
type: "color",
});
textColourPicker4.value = this.plugin.settings.hColor4;
textColourPicker4.addEventListener("change", async () => {
this.plugin.settings.hColor4 = textColourPicker4.value;
await this.plugin.saveSettings();
});
const textColourPicker5 = containerEl.createEl("input", {
type: "color",
});
textColourPicker5.value = this.plugin.settings.hColor5;
textColourPicker5.addEventListener("change", async () => {
this.plugin.settings.hColor5 = textColourPicker5.value;
await this.plugin.saveSettings();
});
/*
new obsidian.Setting(containerEl)
.setName('转换文字颜色「Ctrl+Shift+1」')
.setDesc('设置文字颜色值(#000000)')
.addText(text => {
text
.setValue(this.plugin.settings.hColor1)
.onChange((value) => {
this.plugin.settings.hColor1 = value;
this.plugin.saveSettings();
});
});
*/
new obsidian.Setting(containerEl)
.setName('📣 设置彩色背景效果(Html语法)功能')
.setDesc('点击颜色块调节颜色,在笔记编辑区划选文本后按下「Ctrl+Alt+ 1-5」快捷键,即可转为相应背景颜色的文本。')
const heatmapColourPicker1 = containerEl.createEl("input", {
type: "color",
});
heatmapColourPicker1.value = this.plugin.settings.bColor1;
heatmapColourPicker1.addEventListener("change", async () => {
this.plugin.settings.bColor1 = heatmapColourPicker1.value;
await this.plugin.saveSettings();
});
const heatmapColourPicker2 = containerEl.createEl("input", {
type: "color",
});
heatmapColourPicker2.value = this.plugin.settings.bColor2;
heatmapColourPicker2.addEventListener("change", async () => {
this.plugin.settings.bColor2 = heatmapColourPicker2.value;
await this.plugin.saveSettings();
});
const heatmapColourPicker3 = containerEl.createEl("input", {
type: "color",
});
heatmapColourPicker3.value = this.plugin.settings.bColor3;
heatmapColourPicker3.addEventListener("change", async () => {
this.plugin.settings.bColor3 = heatmapColourPicker3.value;
await this.plugin.saveSettings();
});
const heatmapColourPicker4 = containerEl.createEl("input", {
type: "color",
});
heatmapColourPicker4.value = this.plugin.settings.bColor4;
heatmapColourPicker4.addEventListener("change", async () => {
this.plugin.settings.bColor4 = heatmapColourPicker4.value;
await this.plugin.saveSettings();
});
const heatmapColourPicker5 = containerEl.createEl("input", {
type: "color",
});
heatmapColourPicker5.value= this.plugin.settings.bColor5;
heatmapColourPicker5.addEventListener("change", async () => {
this.plugin.settings.bColor5 = heatmapColourPicker5.value;
await this.plugin.saveSettings();
});
/*
new obsidian.Setting(containerEl)
.setName('转换背景颜色「Ctrl+Alt+2」')
.setDesc('设置背景颜色值(#000000)')
.addText(text => {
text
.setValue(this.plugin.settings.bColor2)
.onChange((value) => {
this.plugin.settings.bColor2 = value;
this.plugin.saveSettings();
});
});
*/
new obsidian.Setting(containerEl)
.setName('📣 左侧窗口滚屏幅度')
.setDesc('按下 Alt+Shift+I +K 快捷键可上下滚动左侧窗口。拖动滑条可调节滚屏幅度(像素值):')
.addSlider(slider => slider
.setLimits(25, 900, 25)
.setValue(this.plugin.settings.maxScroll)
.setDynamicTooltip()
.onChange((value) => {
this.plugin.settings.maxScroll = value;
this.plugin.saveSettings();
}));
/*
new obsidian.Setting(containerEl)
.setName("📣 在状态栏显示 写作进度 → 目标字数")
.setDesc("启用此项后,在状态栏显示写作进度。拖动滑条可调节目标字数:")
.addToggle(toggle => toggle.setValue(this.plugin.settings.isShowNum)
.onChange((value) => {
this.plugin.settings.isShowNum = value;
this.plugin.saveSettings();
}))
.addSlider(slider => slider
.setLimits(100, 10000, 100)
.setValue(this.plugin.settings.maxTry)
.setDynamicTooltip()
.onChange((value) => {
this.plugin.settings.maxTry = value;
this.plugin.saveSettings();
}));
*/
new obsidian.Setting(containerEl)
.setName('📣 设置字符、标点、状态等转换功能')
var div3 = containerEl.createEl('p', {
cls: 'recent-files-donation',
});
var charText = document.createDocumentFragment();
charText.appendText('修复外来文本「待设置」:对 PDF 或 OCR 识别的大段文本进行修复(断行、标点),感谢 zhl111 建议');
charText.appendChild(document.createElement('br'));
charText.appendText('修复错误标点「待设置」:将笔记中的汉字中间的英文标点修复为中文标点,感谢叶茜彬(7424863)参与');
charText.appendChild(document.createElement('br'));
charText.appendText('修复错误语法「待设置」:修复错误的MD语法,如1。列表、【】()链接、[[]]()回链等');
charText.appendChild(document.createElement('br'));
charText.appendText('转换路径语法「待设置」:将 c:\\windows 与 [](file:///c:\/windows) 路径语法相互转换');
charText.appendChild(document.createElement('br'));
charText.appendText('简体转为繁体「待设置」:将笔记中的简体汉字转换为繁体汉字');
charText.appendChild(document.createElement('br'));
charText.appendText('繁体转为简体「待设置」:将笔记中的繁体汉字转换为简体汉字');
charText.appendChild(document.createElement('br'));
charText.appendText('列表转为图示「待设置」:选中列表文本,转换为相应层级的MerMaid语法图示,支持修改列表后更新图示');
charText.appendChild(document.createElement('br'));
charText.appendText('转换待办状态「待设置」:转换选文行首的待办状态,顺序为 -[ x-!?><+] 效果');
charText.appendChild(document.createElement('br'));
charText.appendText('转换callout语法「待设置」:转换选文为callout语法样式,即行首补加>[!note]及>符号');
charText.appendChild(document.createElement('br'));
charText.appendText('转换填空「待设置」:将选文转为或去除 {{c1::选文}} 效果');
//charText.appendChild(document.createElement('br'));
//charText.appendText('【选文】「待设置」:在选文两端添加或去除 【】符号');
//charText.appendChild(document.createElement('br'));
//charText.appendText('(选文)「待设置」:在选文两端添加或去除 ()符号');
//charText.appendChild(document.createElement('br'));
//charText.appendText('「选文」「待设置」:在选文两端添加或去除 「」符号');
//charText.appendChild(document.createElement('br'));
//charText.appendText('《选文》「待设置」:在选文两端添加或去除 《》符号');
div3.appendChild(charText);
new obsidian.Setting(containerEl)
.setName('📣 设置修复断行、选择段句、嵌入网页等功能')
var div4 = containerEl.createEl('p', {
cls: 'recent-files-donation',
});
var toolText = document.createDocumentFragment();
toolText.appendText('计算所选结果「F9」:计算所选的四则运算式的结果,并写入剪贴板以备粘贴');
toolText.appendChild(document.createElement('br'));
toolText.appendText('修复意外断行「待设置」:修复笔记中的意外断行(删除结尾不是句式标点的换行符)');
toolText.appendChild(document.createElement('br'));
toolText.appendText('搜索当前文本「待设置」:通过搜索面板在当前文档中搜索划选内容');
toolText.appendChild(document.createElement('br'));
toolText.appendText('选择当前整段「待设置」:选择光标所在的当前整段文本');
toolText.appendChild(document.createElement('br'));
toolText.appendText('选择当前整句「待设置」:选择光标所在的当前整句(中文)文本');
toolText.appendChild(document.createElement('br'));
toolText.appendText('选择当前语法「Alt+Shift+K」:选择光标所处的MrakDown语法文本(如加粗、高亮、删除、链接等效果)');
toolText.appendChild(document.createElement('br'));
toolText.appendText('导出搜索结果「待设置」:根据鼠标划选到的关键词来对整个库进行搜索,并将搜索结果写进剪贴板');
toolText.appendChild(document.createElement('br'));
toolText.appendText('获取搜索结果「待设置」:当在侧边栏进行搜索时,执行此命令可获取搜索结果(仅有笔记标题列表)');
toolText.appendChild(document.createElement('br'));
toolText.appendText('获取标注文本「待设置」:获取标题、高亮、注释及前缀(#标注\批注\反思)等文本内容');
toolText.appendChild(document.createElement('br'));
toolText.appendText('获取当前字符数「待设置」:计算页面中可见字符(汉字、字母、数字、标点)和不可见字符(空格等)个数');
toolText.appendChild(document.createElement('br'));
toolText.appendText('自动设置标题「待设置」:将选文中的单行文本(末尾非标点或数字)转为标题');
toolText.appendChild(document.createElement('br'));
toolText.appendText('指定当前文件名「待设置」:划选文字后指定为当前笔记的文件名');
toolText.appendChild(document.createElement('br'));
toolText.appendText('嵌入当前网址页面「待设置」:在行末插入iframe代码来嵌入所选网址页面');
toolText.appendChild(document.createElement('br'));
toolText.appendText('获取相对路径「待设置」:获取当前笔记在库目录内的相对路径');
toolText.appendChild(document.createElement('br'));
div4.appendChild(toolText);
new obsidian.Setting(containerEl)
.setName('📣 设置折叠标题、增减空行或空格等功能')
var div5 = containerEl.createEl('p', {
cls: 'recent-files-donation',
});
var lineText = document.createDocumentFragment();
lineText.appendText('折叠同级标题「Ctrl+Shift+Alt+D」:判断当前行的标题层级,将正文中同级标题一次性折叠起来');
lineText.appendChild(document.createElement('br'));
lineText.appendText('折叠某级别标题「待设置」:将正文中某一层级的标题一次性折叠起来,感谢火冷(85399416)增强相关功能');
lineText.appendChild(document.createElement('br'));
lineText.appendText('删除当前段落「Ctrl+D」:删除当前段落;若在[[]]内会先删除链接内容、在有序列表项内会自动调小后面序号');
lineText.appendChild(document.createElement('br'));
lineText.appendText('插入有效空行「Ctrl+Shift+Alt+Enter」:插入带有全角空格的空白行,保证渲染时占据一行');
lineText.appendChild(document.createElement('br'));
lineText.appendText('空格转为空行「待设置」:将两个汉字中间的空格或制表符转为空白行');
lineText.appendChild(document.createElement('br'));
lineText.appendText('批量插入空行「Ctrl+Shift+L」:在划选的文本行或全文中间批量插入空白行');
lineText.appendChild(document.createElement('br'));
lineText.appendText('批量去除空行「Ctrl+Alt+L」:批量去除划选文本或全文中的空白行');
lineText.appendChild(document.createElement('br'));
lineText.appendText('上方插入空行「待设置」:在当前文本行的上行插入空白行');
lineText.appendChild(document.createElement('br'));
lineText.appendText('下方插入空行「待设置」:在当前文本行的下行插入空白行');
lineText.appendChild(document.createElement('br'));
lineText.appendText('全文缩进「待设置」:在全文的每个行首添加两个全角空格,产生缩进效果');
lineText.appendChild(document.createElement('br'));
lineText.appendText('当前行缩进「待设置」:在当前行文本的行首添加两个全角空格,产生缩进效果');
lineText.appendChild(document.createElement('br'));
lineText.appendText('行首添加空格「待设置」:在每行文本的行首添加两个空格');
lineText.appendChild(document.createElement('br'));
lineText.appendText('去除行首空格「待设置」:批量去除每行文本的行首空格字符');
lineText.appendChild(document.createElement('br'));
lineText.appendText('末尾追加空格「待设置」:在每行文本的末尾追加两个空格');
lineText.appendChild(document.createElement('br'));
lineText.appendText('去除末尾空格「待设置」:批量去除每行文本的末尾空格字符');
lineText.appendChild(document.createElement('br'));
lineText.appendText('添加间隔空格「待设置」:在正文的汉字与字母之间批量添加空格,如 china 中国');
lineText.appendChild(document.createElement('br'));
lineText.appendText('去除所有空格「待设置」:去除正文中所有的全、半角空格');
lineText.appendChild(document.createElement('br'));
div5.appendChild(lineText);
var div6 = containerEl.createEl('p', {
cls: 'recent-files-donation',
});
var qqText = document.createDocumentFragment();
qqText.appendChild(document.createElement('br'));
qqText.appendText('🆗 欢迎大家向蚕子(QQ:312815311) 提出操作需求和建议,我们来共同增强编辑功能!');
qqText.appendChild(document.createElement('br'));
qqText.appendText('🆗 感谢Cuman(QQ:35669852)的指导与调试。');
div6.appendChild(qqText);
};
};
module.exports = MyPlugin;
/*
var en = {
loadThisPlugin: 'loading Enhanced Editing plugin',
thisPluginName: 'ZH Enhanced Editing V',
helloWorld: 'Welcome to the Enhanced Editing!',
qq: 'View Github page,Link CanZi (QQ:312815311)',
close: 'Click here to close the window !',
FunctionUpdate: 'This Version adds a bilingual interface between Chinese and English, abolition of the "Smart line" function, the conversion of English and Chinese punctuation features optimized for the "Repair error Punctuation" ...',
setInterTab: '📣 Insert tab [ Tab ]: Inserts the tab effect in the text line',
whenEnabledTab: 'When enabled, pressing Tab in a line of text inserts four spaces instead of indenting the entire line.',
convertInternalLink: '📣 Convert the internal link [ Alt + Z ]: Add or remove the [[]] symbol at both ends of the selection',
SupportBatchConversion: 'Support batch conversion of multi-line text (separated by a newline character) or multiple text (separated by a dot sign).',
ConvertSynonymousLink: 'Convert synonymous link [ Alt + Q ]: Convert selected text to [[|selectedText]] style before selecting document',
setSmartPaste: '📣 Smart paste [ Ctrl + Alt + V ]: paste the copied content into MD syntax style',
isPasteTableURL: 'Paste the table, URL, local path, or code directly into a MD table, hyperlink, or code block format, depending on the type of copied content.',
setSmartSyntax: '📣 Smart syntax [ Alt + ; ]: Automatically convert, match, or skip various types of parenthesis or code block syntax',
isYouCanCombine: 'You can combine [( (< ([ "[ \'[ to 〖〈〔『「, or convert common program language names such as dv, qy, mm, CSS, js, ja, ty names (strings) to code block syntax.',
ConvertCursorMove: '📣 Control the cursor movement with the key button [ Alt+I, +J, +K, +L ]',
isConvertCursorMove: 'Press Alt+I up, +J up, +K Down, +L right, +U begin, +N end, Shortcut to control the movement of the cursor.',
ConvertCursorJump: '📣 Control the cursor goto with the key button [ Alt+Shift +J, +L ]',
isConvertCursorJump: 'Control the cursor to jump back and forth between the text lines such as title, list item, to-do item, code block and reference, or markdown syntax such as bold, highlight, comment, delete and link',
};
var zhCN = {
loadThisPlugin: '加载增强编辑插件',
thisPluginName: 'ZH增强编辑 V',
helloWorld: '欢迎使用增强编辑插件!',
qq: '查看 Github 页面,联系蚕子',
close: '点击此处 可关闭提示窗口......',
setInterTab: '📣 插入制表符「Tab」 在普通文本行中插入制表符效果',
whenEnabledTab: '启用此项后,在普通文本行中按下 Tab 键会插入4个空格,不再整行缩进。',
convertInternalLink: '📣 转换内部链接「Alt+Z」:在选文两端添加或去除 [[ ]] 符号',
SupportBatchConversion: '支持转换多行文本(需用换行符分隔)或多句文本(需用顿号分隔)。',
ConvertSynonymousLink: '转换同义链接「Alt+Q」:将选文转换为 [[|选文]] 样式后再选择文档',
setSmartPaste: '📣 智能粘贴「Ctrl+Alt+V」:将复制的内容粘贴为Md语法样式',
isPasteTableURL: '依据复制内容的类型,将表格、网址、本地路径或代码直接粘贴为MD表格、超链接或代码块格式。',
setSmartSyntax: '📣 智能语法「Alt+;」:自动转换、匹配或跳过各种类型的括号或代码块语法',
isYouCanCombine: '可将[( (< ([ "[ \'[等组合转为〖〈〔『「,或将dv、qy、mm、CSS、js、ja、ty等程序语言名转为代码块、类型词语转为Callout引用语法。',
ConvertCursorMove: '📣 键控光标移动「Alt+I, +J, +K, +L」',
isConvertCursorMove: '按下Alt +I向上 +J向左 +K向下 +L向右 +U文首 +N文末 快捷键,控制光标移动位置。',
ConvertCursorJump: '📣 键控光标跳转「Alt+Shift +I, +K」',
isConvertCursorJump: '控制光标在标题、列表项、待办事项、代码块和引用等文本行之间来回跳转,或在粗体、突出显示、注释、删除和链接等Markdown语法之间来回跳转',
};
// Code from https://github.com/valentine195/obsidian-admonition/blob/master/src/lang/helpers.ts
const localeMap = {
en,
'zh-cn': zhCN,
};
const locale = localeMap[obsidian.moment.locale()];
function t(_str) {
return (locale && locale[_str]) || en[_str];
};
//t('字段名称')
//以上为 多语言字段名-调用语法
*/ |