📄 code.js
字号:
//---------------------------------------------------------
// 双鱼文本编辑器 PiscesTextEditor V1.0
// 作者:月伤 melody
// 作品链接:http://www.2fstory.net/blog/View.aspx?blogID=47
// 动易系统,引用了此插件,特此给予著名 感谢 月伤 melody。
//---------------------------------------------------------
var CodeDivBgColor = "#eeeeee";
var CodeDivFontColor = "#000000";
var oEditor = window.parent.InnerDialogLoaded() ;
var FCKConfig = oEditor.FCKConfig ;
var CodeImagePath = FCKConfig.CodePath ;//得到路径
function code()
{
var str = document.getElementById('txtCode').innerHTML;
var language = document.getElementById('LanguageDropDownList').value;
var showLine = document.getElementById('chkLineNumberMarginVisible').checked;
var canCollapse = document.getElementById('chkOutliningEnabled').checked;
var canAllCollapse = document.getElementById('ckbIsCollapse').checked;
var allRegion = document.getElementById('txbCollapseText').value;
return FormateCode(str,language,showLine,canCollapse,canAllCollapse,allRegion);
}
// 转化为代码格式(代码,语言,是否有行号,是否折叠,是否全部折叠,整个代码的标题)
function FormateCode(str,language,showLine,canCollapse,canAllCollapse,allRegion)
{
var CodeDivStyle = "color: "+CodeDivFontColor+";BACKGROUND-COLOR: "+CodeDivBgColor+";font-family: Verdana,宋体;width: 98%;line-height:16px;BORDER: #cccccc 1px solid;PADDING: 4px;FONT-SIZE: 10pt;WORD-BREAK: break-all;";
if (language != "CSS") {
// 将双引号替换成"
str = str.replace(/([^\\])"/g,"$1"");
}
switch (language)
{
case "C#": str = FormatCSharp(str,canCollapse); break;
case "HTML": str = FormatHTML(str,canCollapse); break;
case "VBScript": str = FormatVBScript(str,canCollapse); break;
case "JScript": str = FormatJScript(str,canCollapse); break;
case "CSS": str = FormatCSS(str,canCollapse); break;
case "XML": str = FormatXML(str,canCollapse); break;
case "SQL": str = FormatSQL(str,canCollapse); break;
case "VB.NET": str = FormatVBDOTNET(str,canCollapse); break;
}
// 加行号
if (showLine) str = AddLineNumber(str);
// 替换换行符为<BR>
str = str.replace(/\n/g,"<BR>");
// 全部折叠
if (canAllCollapse) str = GetHeader(" ",allRegion,"Code",canAllCollapse,true)+"<BR>"+str+"</span>";
// 给代码加一个边框
str = "<!--Code--><div style=\""+CodeDivStyle+"\">" + str + "</div><!--Code-->";
str = str.replace(/\s{2}/g," ");
// 改为正确路径
var src = /\b(src=")\b/g;
str = str.replace(src,'src="'+CodeImagePath);
// 替换1个Tab为4个空格,使界面美观一些
str = str.replace(/\t/g," ");
return(str);
}
//--------------------------------------- 格式化C#代码 ----------------------------------------
// 格式化C#代码
function FormatCSharp(str,canCollapse)
{
// 值变为棕色
str = FormatValue(str);
if (str.match(/using/g)!=null)//格式化using
str = FormatUsing(str,canCollapse);
//格式化Region窗体
str = FormatRegion(str,canCollapse);
// 格式化{}
str = FormatBrace(str);
//格式化函数头
str = FormatFunctionRemark(str);
// 给所有没有收缩功能的行的行头加图片
str = str.replace(/(^|\n)([^<])/g,"$1<IMG src=\"InBlock.gif\" align=\"top\">$2");
// 所有关键字变成蓝色
var re = /\b(abstract|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string)\b/g;
str = str.replace(re,"<font color=\"#0000FF\">$1</font>");
//替换字符串中关键字颜色
str = FormatKeyWords(str);
//格式化注释//和/**/
str = FormatCodeRemark(str);
//替换收缩图片
str = FormatImage(str);
return (str);
}
// 格式化using
function FormatUsing(str)
{
// 给using和正式代码之间的行的行头加上空白图片
str = str.replace(/^([\s\S]*?)({)/g,
function() {
var s = arguments[1].replace(/(\n)([^u])/g,"$1<IMG src=\"None.gif\" align=\"top\">$2");
s = s.replace(/(\n)([^u<])/g,"$1<IMG src=\"None.gif\" align=\"top\">$2");
return(s+arguments[2]);
});
// using加一个收缩功能
str = str.replace(/^([\s\S]*?)\b(using\s)/i,
function() {
var s = arguments[1].replace(/(.*)([^\n]*)$/g,"$2")
+GetHeader(arguments[1].replace(/(.*)([^\n]*)$/g,"$2")+arguments[2],"...","CodeUsing",false,true);
return(s);
});
var arr = str.match(/.*using.*/g);
if (arr!=null)
str = str.replace(arr[arr.length-1],
"<IMG src=\"ExpandedBlockEnd.gif\" align=\"top\">"+arr[arr.length-1]+"</span>");
// str = str.replace(/([\s\S]*\n)(using[\s\S]*?)\n/g,"$1<IMG src=\"ExpandedBlockEnd.gif\" align=\"top\">$2</span>");
return(str);
}
// 格式化Region
function FormatRegion(str,canCollapse)
{
// 替换region处
str = str.replace(/(.*)(#region\s+)([^\r\n]*)/g,
function() {
var s = GetHeader(arguments[1],arguments[3],"CodeRegion",canCollapse,false)
+"<font color=\"#0000ff\">"+arguments[2]+"</font>"+arguments[3];
return(s);
});
// 替换endregion处
str = str.replace(/(.*)(#endregion)/g,
"<IMG src=\"ExpandedSubBlockEnd.gif\" align=\"top\"/>$1<font color=\"#0000ff\">$2</font></span>");
return(str);
}
// 格式化{}
function FormatBrace(str)
{
// 替换左边大括号
str = str.replace(/([^{]*\n)(.*?)(\{)/g,
function() {
var str = arguments[1]+GetHeader(arguments[2],"...","CodeFunction",false,false)+arguments[3];
return(str);
});
// 替换右边大括号
str = str.replace(/(.*\})/g,
"<IMG src=\"ExpandedSubBlockEnd.gif\" align=\"top\">$1</span>");
return str;
}
// 格式化函数头注释
function FormatFunctionRemark(str)
{
// 函数头注释处的<summary>值变绿色
str = str.replace(/(\/{3}\s{0,}<summary>.*?\n)([\s\S]*?)(\/{3}\s{0,}<\/summary>)/g,
function() {
str = arguments[2].replace(/(\/{3})([\s\S]*?)(\n)/g,"$1<font color=\"#008000\">$2</font>$3");
return(arguments[1]+str+arguments[3]);
});
// <param>值变为绿色
str = str.replace(/(\/{3}\s{0,}<param([\s\S]*?)>)([\s\S]*?)(<\/param>)/g,"$1<font color=\"#008000\">$3</font>$4");
// <returns><example><remarks><value>值变为绿色
str = str.replace(/(\/{3}\s{0,}<(returns|example|remarks|value)>)([\s\S]*?)(<\/\2>)/g,
"$1<font color=\"#008000\">$3</font>$4");
// 加收缩功能
str = str.replace(/(.*)(\/{3}\s{0,}<summary>)([\s\S]*?)(\n\s{0,}\b(public|protected|private)\b)/g,
function() {
var s1 = GetHeader(arguments[1],"/**/","CodeRemark",false,false)+arguments[2];
var arr = arguments[3].match(/[\s\S]*?\n/g);
var maxStr = arr[arr.length-1];
var s2 = arguments[3].replace(maxStr,maxStr+"<IMG src=\"ExpandedSubBlockEnd.gif\" align=\"top\">");
return(s1+s2+"</span>"+arguments[4]);
});
// 函数头注释处其它字符变为灰色
str = str.replace(/(\/{3})([\s\S]*?)(<\/SPAN>|\n|$)/gi,"<font color=\"#808080\">$1$2</font>$3");
return(str);
}
//--------------------------------------- 格式化HTML代码 ----------------------------------------
// 格式化HTML代码
function FormatHTML(str,canCollapse)
{
// 给Flash加折叠功能,默认为收缩状态
// str = str.replace(/(.*)(<object)([\s\S]*)(\n)(.*<\/object.*)/gi,
// function() {
// var s = GetHeader(arguments[1],"<-- OBJECT class=ShockwaveFlash -->","CodeFlash",true,true)+arguments[2]+arguments[3].replace(/(\n)/g,"$1<IMG src=\"InBlock.gif\" align=\"top\">")+arguments[4]+"<IMG src=\"ExpandedBlockEnd.gif\" align=\"top\">"+arguments[5]+"</span>";
// return (s);
// });
// 替换HTML注释为绿色
str = str.replace(/(<!)(--.*?--)(>)/g,"$1<font color=\"#008000\">$2</font>$3");
// 替换HTML标签的属性为红色,HTML标签为棕色
/* str = str.replace(/(<)([^\s\/%!]*?)((\s+.*?)*)(\/?>)/gi,
function() {
var s="<font color=\"#0000FF\">"+arguments[1]+"</font><font color=\"#800000\">"+
arguments[2]+"</font>"+arguments[3].replace(/(\s+)([^\s]*?)(=)("|')(.*?)\4/g,"$1<font color=\"#FF0000\">$2</font><font color=\"#0000FF\">$3$4$5$4</font>")+"<font color=\"#0000FF\">"+arguments[5]+"</font>";
return (s);
});*/
str = str.replace(/(<\/?)([^\s\/\&!]*)(.*?)(\/?>)/gi,
function() {
var s="<font color=\"#0000FF\">"+arguments[1]+"</font><font color=\"#800000\">"+arguments[2]+"</font>"+
arguments[3].replace(/(\s+)([^\s]*?)(=)("|')(.*?)\4/g,"$1<font color=\"#FF0000\">$2</font><font color=\"#0000FF\">$3$4$5$4</font>")+
"<font color=\"#0000FF\">"+arguments[4]+"</font>";
return (s);
});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -