📄 syntaxengineclass.cs
字号:
case '}':
Result += @"\}";
break;
default:
if (vChar > (char)127)
Result += @"\u" + ((int)vChar).ToString() + "?";
else Result += vChar;
break;
}
}
return Result;
}
[DllImport("user32.dll")]
private static extern uint GetKBCodePage();
[DllImport("kernel32.dll")]
private static extern ushort GetSystemDefaultLangID();
/// <summary>
/// 将代码处理成RTF格式
/// </summary>
/// <returns>返回处理后的RTF文本</returns>
public string MakeRtf()
{
if (HighlightItems.Count <= 0) return "";
string Result = @"{\rtf1\ansi\ansicpg" + GetKBCodePage().ToString() +
@"\deff0\deflang1033\deflangfe" + GetSystemDefaultLangID().ToString() +
@"{\fonttbl{\f0\fmodern " +
FDefaultFont.Name + ";}}\r\n";
Result += @"{\colortbl ;";
foreach (HighlightItem vHighlightItem in HighlightItems)
Result += string.Format(@"\red{0}\green{1}\blue{2};",
vHighlightItem.ForeColor.R, vHighlightItem.ForeColor.G,
vHighlightItem.ForeColor.B);
Result += "}\r\n";
Result += @"\viewkind4\uc1\pard\f0\fs20" + "\r\n";
bool vBold = false, vItalic = false, vUnderline = false;
foreach (SyntaxEngine.AnalyzeReslut vAnalyzeReslut in
FAnalyzeResluts)
{
int i = vAnalyzeReslut.Item.Index;
if (i >= HighlightItems.Count) i = 0;
if (vBold != HighlightItems[i].Bold)
{
if (HighlightItems[i].Bold)
Result += @"\b1";
else Result += @"\b0";
}
if (vItalic != HighlightItems[i].Italic)
{
if (HighlightItems[i].Italic)
Result += @"\i1";
else Result += @"\i0";
}
if (vItalic != HighlightItems[i].Underline)
{
if (HighlightItems[i].Underline)
Result += @"\ul1";
else Result += @"\ul0";
}
Result += string.Format(@"\cf{0} ", i + 1);
vBold = HighlightItems[i].Bold;
vItalic = HighlightItems[i].Italic;
vUnderline = HighlightItems[i].Underline;
Result += TextToRtf(vAnalyzeReslut.Block).Replace("\r\n",
"\r\n" + @"\par");
}
return Result + "}";
}
/// <summary>
/// 将文本中的HTML元素处理掉
/// </summary>
/// <param name="AText">输入的文本</param>
/// <returns>返回处理后的HTML文本</returns>
private string TextToHtml(string AText)
{
string Result = "";
foreach (char vChar in AText)
{
switch (vChar)
{
case '&':
Result += @"&";
break;
case ' ':
Result += @" ";
break;
case '<':
Result += @"<";
break;
case '>':
Result += @">";
break;
case '"':
Result += @""";
break;
//case '\n':
// Result += @"<br>";
// break;
default:
if (vChar > (char)127)
Result += @"&#" + ((int)vChar).ToString() + ";";
else Result += vChar;
break;
}
}
return Result;
}
/// <summary>
/// 将颜色处理为HTML表达的方式
/// </summary>
/// <param name="AColor">输入的颜色</param>
/// <returns>返回HTML颜色表达式</returns>
private string ColorToHtml(Color AColor)
{
return string.Format("#{0:X2}{1:X2}{2:X2}", AColor.R, AColor.G, AColor.B);
}
/// <summary>
/// 将代码处理为HTML文本
/// </summary>
/// <returns>返回处理后的HTML文本</returns>
public string MakeHtml()
{
string Result = @"<code><pre style=""font-size:" + FDefaultFont.Size +
@"pt;font-family:" + FDefaultFont.Name + @""">";
foreach (SyntaxEngine.AnalyzeReslut vAnalyzeReslut in
FAnalyzeResluts)
{
int i = vAnalyzeReslut.Item.Index;
if (i >= HighlightItems.Count) i = 0;
string vLeft = string.Format(@"<span style=""color={0}"">",
ColorToHtml(HighlightItems[i].ForeColor));
string vRight = "</span>";
if (HighlightItems[i].Bold)
{
vLeft += "<b>";
vRight = "</b>" + vRight;
}
if (HighlightItems[i].Italic)
{
vLeft += "<i>";
vRight = "</i>" + vRight;
}
if (HighlightItems[i].Underline)
{
vLeft += "<u>";
vRight = "</u>" + vRight;
}
Result += vLeft + TextToHtml(vAnalyzeReslut.Block) + vRight;
}
return Result + "</pre></code>";
}
}
/// <summary>
/// C#语法高亮引擎
/// </summary>
class CSharpHighlight : SyntaxHighlight
{
public CSharpHighlight(SyntaxEngine ASyntaxEngine, Font
ADefaultFont)
: base(ASyntaxEngine, ADefaultFont)
{
//空白
HighlightItems.Add(new HighlightItem(Color.White, false, false, false));
//单行注释
HighlightItems.Add(new HighlightItem(Color.Green, false, false, false));
//多行注释
HighlightItems.Add(new HighlightItem(Color.Green, false, false, false));
//指令
HighlightItems.Add(new HighlightItem(Color.Blue, false, false, false));
//关键字
HighlightItems.Add(new HighlightItem(Color.Black, true, false, false));
//上下文关键字
HighlightItems.Add(new HighlightItem(Color.Black, true, false, false));
//标点符号
HighlightItems.Add(new HighlightItem(Color.BlueViolet, false, false, false));
//整数
HighlightItems.Add(new HighlightItem(Color.Red, true, false, false));
//浮点数
HighlightItems.Add(new HighlightItem(Color.Red, true, false, false));
//字符串
HighlightItems.Add(new HighlightItem(Color.Maroon, false, false, false));
//字符
HighlightItems.Add(new HighlightItem(Color.Maroon, false, false, false));
//标识符
HighlightItems.Add(new HighlightItem(Color.Black, false, false, false));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -