⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syntaxengineclass.cs

📁 C#.net 编程实现的语法分析器
💻 CS
📖 第 1 页 / 共 2 页
字号:
                    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 += @"&amp;";
                        break;
                    case ' ':
                        Result += @"&nbsp;";
                        break;
                    case '<':
                        Result += @"&lt;";
                        break;
                    case '>':
                        Result += @"&gt;";
                        break;
                    case '"':
                        Result += @"&quot;";
                        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 + -