最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

.NET中用ICSharpCode.TextEditor自定义代码折叠与高亮

来源:懂视网 责编:小采 时间:2020-11-27 22:35:58
文档

.NET中用ICSharpCode.TextEditor自定义代码折叠与高亮

.NET中用ICSharpCode.TextEditor自定义代码折叠与高亮:前言 ICSharpCode.TextEditor 是一款非常不错的.NET代码编辑控件,内置了多种高亮语言支持,同时完美支持中文,非常赞! 先来看一下运行效果: 一、项目结构 这里需要注意lib文件夹下导入的类库,这个Demo需要这些dll. 二、代码折叠 需要实现IFol
推荐度:
导读.NET中用ICSharpCode.TextEditor自定义代码折叠与高亮:前言 ICSharpCode.TextEditor 是一款非常不错的.NET代码编辑控件,内置了多种高亮语言支持,同时完美支持中文,非常赞! 先来看一下运行效果: 一、项目结构 这里需要注意lib文件夹下导入的类库,这个Demo需要这些dll. 二、代码折叠 需要实现IFol

前言

ICSharpCode.TextEditor 是一款非常不错的.NET代码编辑控件,内置了多种高亮语言支持,同时完美支持中文,非常赞!

先来看一下运行效果:

一、项目结构

这里需要注意lib文件夹下导入的类库,这个Demo需要这些dll.

二、代码折叠

需要实现IFoldingStrategy中的 GenerateFoldMarkers 方法,代码如下:

using ICSharpCode.TextEditor.Document;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JackWangCUMT.WinForm
{
 
 /// <summary>
 /// The class to generate the foldings, it implements ICSharpCode.TextEditor.Document.IFoldingStrategy
 /// </summary>
 public class MingFolding : IFoldingStrategy
 {
 /// <summary>
 /// Generates the foldings for our document.
 /// </summary>
 /// <param name="document">The current document.</param>
 /// <param name="fileName">The filename of the document.</param>
 /// <param name="parseInformation">Extra parse information, not used in this sample.</param>
 /// <returns>A list of FoldMarkers.</returns>
 public List<FoldMarker> GenerateFoldMarkers(IDocument document, string fileName, object parseInformation)
 {
 List<FoldMarker> list = new List<FoldMarker>();
 //stack 先进先出
 var startLines = new Stack<int>();
 // Create foldmarkers for the whole document, enumerate through every line.
 for (int i = 0; i < document.TotalNumberOfLines; i++)
 {
 // Get the text of current line.
 string text = document.GetText(document.GetLineSegment(i));

 if (text.Trim().StartsWith("#region")) // Look for method starts
 {
 startLines.Push(i);

 }
 if (text.Trim().StartsWith("#endregion")) // Look for method endings
 {
 int start = startLines.Pop();
 // Add a new FoldMarker to the list.
 // document = the current document
 // start = the start line for the FoldMarker
 // document.GetLineSegment(start).Length = the ending of the current line = the start column of our foldmarker.
 // i = The current line = end line of the FoldMarker.
 // 7 = The end column
 list.Add(new FoldMarker(document, start, document.GetLineSegment(start).Length, i, 57, FoldType.Region, "..."));
 }
 //支持嵌套 {}
 if (text.Trim().StartsWith("{")) // Look for method starts
 {
 startLines.Push(i);
 }
 if (text.Trim().StartsWith("}")) // Look for method endings
 {
 if (startLines.Count > 0)
 {
 int start = startLines.Pop();
 list.Add(new FoldMarker(document, start, document.GetLineSegment(start).Length, i, 57, FoldType.TypeBody, "...}"));
 }
 }


 // /// <summary>
 if (text.Trim().StartsWith("/// <summary>")) // Look for method starts
 {
 startLines.Push(i);
 }
 if (text.Trim().StartsWith("/// <returns>")) // Look for method endings
 {

 int start = startLines.Pop();
 //获取注释文本(包括空格)
 string display = document.GetText(document.GetLineSegment(start + 1).Offset, document.GetLineSegment(start + 1).Length);
 //remove ///
 display = display.Trim().TrimStart('/');
 list.Add(new FoldMarker(document, start, document.GetLineSegment(start).Length, i, 57, FoldType.TypeBody, display));
 }
 }

 return list;
 }
 }
}

三、高亮配置

拷贝CSharp-Mode.xshd为 JackCSharp-Mode.xshd ,将其中的名字修改为: SyntaxDefinition name = "JackC#" ,并添加高亮关键字,如下:

这样代码中出现的JackWang就会高亮。下面的代码片段将自定义高亮文件进行加载,并用SetHighlighting进行设置,这里一定注意目录下必须有xshd的配置文件,否则高亮将失效。

textEditor.Encoding = System.Text.Encoding.UTF8;
 textEditor.Font = new Font("Hack",12);
 textEditor.Document.FoldingManager.FoldingStrategy = new JackWangCUMT.WinForm.MingFolding();
 textEditor.Text = sampleCode;

 //自定义代码高亮
 string path = Application.StartupPath+ "\\HighLighting";
 FileSyntaxModeProvider fsmp;
 if (Directory.Exists(path))
 {
 fsmp = new FileSyntaxModeProvider(path);
 HighlightingManager.Manager.AddSyntaxModeFileProvider(fsmp);
 textEditor.SetHighlighting("JackC#");
 

 }

为了保持代码适时进行折叠,这里监听文本变化,如下所示:

 private void TextEditor_TextChanged(object sender, EventArgs e)
 {
 //更新,以便进行代码折叠
 textEditor.Document.FoldingManager.UpdateFoldings(null, null);
 }

最后说明的是,我们可以定义一个格式化代码的类,来格式化C#代码:

总结

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

.NET中用ICSharpCode.TextEditor自定义代码折叠与高亮

.NET中用ICSharpCode.TextEditor自定义代码折叠与高亮:前言 ICSharpCode.TextEditor 是一款非常不错的.NET代码编辑控件,内置了多种高亮语言支持,同时完美支持中文,非常赞! 先来看一下运行效果: 一、项目结构 这里需要注意lib文件夹下导入的类库,这个Demo需要这些dll. 二、代码折叠 需要实现IFol
推荐度:
标签: net 高亮 net代码
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top