原文发布于:https://www.chenxublog.com/2019/07/14/use-avalonedit-make-wpf-lua-editor.html

由于LLCOM里面内置了Lua代码的编辑器,所以我就使用了AvalonEdit这个轮子,不过一开始的Lua语言支持让我一顿好找

不过好在找到了网上的资料,我就把整个实现过程贴在下面

准备

先去nuget安装一下AvalonEdit,以备后面使用:

接着把下面的文件内容,保存为Lua.xshd文件名的文件:

  1. <?xml version="1.0"?>
  2. <SyntaxDefinition name="SharpLua" extensions=".slua;.lua" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
  3. <!-- The named colors 'Comment' and 'String' are used in SharpDevelop to detect if a line is inside a multiline string/comment -->
  4. <Color name="Comment" foreground="#ff999999" exampleText="-- comment" />
  5. <Color name="String" foreground="#fff99157" />
  6. <Color name="Punctuation" />
  7. <Color name="MethodCall" foreground="#ffffcc66" fontWeight="bold"/>
  8. <Color name="NumberLiteral" foreground="#ff99cc99"/>
  9. <Color name="NilKeyword" fontWeight="bold"/>
  10. <Color name="Keywords" fontWeight="bold" foreground="#ff6699cc" />
  11. <Color name="GotoKeywords" foreground="#ffcc99cc" />
  12. <Color name="Visibility" fontWeight="bold" foreground="#fff99157"/>
  13. <Color name="TrueFalse" fontWeight="bold" foreground="#ff66cccc" />
  14. <RuleSet name="CommentMarkerSet">
  15. <Keywords fontWeight="bold" foreground="#fff2777a">
  16. <Word>TODO</Word>
  17. <Word>FIXME</Word>
  18. </Keywords>
  19. <Keywords fontWeight="bold" foreground="#fff2777a">
  20. <Word>HACK</Word>
  21. <Word>UNDONE</Word>
  22. </Keywords>
  23. </RuleSet>
  24. <!-- This is the main ruleset. -->
  25. <RuleSet>
  26. <Span color="Comment">
  27. <Begin color="XmlDoc/DocComment">---</Begin>
  28. <RuleSet>
  29. <Import ruleSet="XmlDoc/DocCommentSet"/>
  30. <Import ruleSet="CommentMarkerSet"/>
  31. </RuleSet>
  32. </Span>
  33. <Span color="Comment" ruleSet="CommentMarkerSet" multiline="true">
  34. <Begin>--\[[=]*\[</Begin>
  35. <End>\][=]*]</End>
  36. </Span>
  37. <Span color="Comment" ruleSet="CommentMarkerSet">
  38. <Begin>--</Begin>
  39. </Span>
  40. <Span color="String">
  41. <Begin>"</Begin>
  42. <End>"</End>
  43. <RuleSet>
  44. <!-- span for escape sequences -->
  45. <Span begin="\\" end="."/>
  46. </RuleSet>
  47. </Span>
  48. <Span color="String">
  49. <Begin>'</Begin>
  50. <End>'</End>
  51. <RuleSet>
  52. <!-- span for escape sequences -->
  53. <Span begin="\\" end="."/>
  54. </RuleSet>
  55. </Span>
  56. <Span color="String" multiline="true">
  57. <Begin color="String">\[[=]*\[</Begin>
  58. <End>\][=]*]</End>
  59. </Span>
  60. <Keywords color="TrueFalse">
  61. <Word>true</Word>
  62. <Word>false</Word>
  63. </Keywords>
  64. <Keywords color="Keywords">
  65. <Word>and</Word>
  66. <Word>break</Word>
  67. <Word>do</Word>
  68. <Word>else</Word>
  69. <Word>elseif</Word>
  70. <Word>end</Word>
  71. <Word>false</Word>
  72. <Word>for</Word>
  73. <Word>function</Word>
  74. <Word>if</Word>
  75. <Word>in</Word>
  76. <Word>local</Word>
  77. <!--<Word>nil</Word>-->
  78. <Word>not</Word>
  79. <Word>or</Word>
  80. <Word>repeat</Word>
  81. <Word>return</Word>
  82. <Word>then</Word>
  83. <Word>true</Word>
  84. <Word>until</Word>
  85. <Word>while</Word>
  86. <Word>using</Word>
  87. <Word>continue</Word>
  88. </Keywords>
  89. <Keywords color="GotoKeywords">
  90. <Word>break</Word>
  91. <Word>return</Word>
  92. </Keywords>
  93. <Keywords color="Visibility">
  94. <Word>local</Word>
  95. </Keywords>
  96. <Keywords color="NilKeyword">
  97. <Word>nil</Word>
  98. </Keywords>
  99. <!-- Mark previous rule-->
  100. <Rule color="MethodCall">
  101. \b
  102. [\d\w_]+ # an identifier
  103. (?=\s*\() # followed by (
  104. </Rule>
  105. <Rule color="MethodCall">
  106. \b
  107. [\d\w_]+ # an identifier
  108. (?=\s*\") # followed by "
  109. </Rule>
  110. <Rule color="MethodCall">
  111. \b
  112. [\d\w_]+ # an identifier
  113. (?=\s*\') # followed by '
  114. </Rule>
  115. <Rule color="MethodCall">
  116. \b
  117. [\d\w_]+ # an identifier
  118. (?=\s*\{) # followed by {
  119. </Rule>
  120. <Rule color="MethodCall">
  121. \b
  122. [\d\w_]+ # an identifier
  123. (?=\s*\[) # followed by [
  124. </Rule>
  125. <!-- Digits -->
  126. <Rule color="NumberLiteral">
  127. \b0[xX][0-9a-fA-F]+ # hex number
  128. |
  129. ( \b\d+(\.[0-9]+)? #number with optional floating point
  130. | \.[0-9]+ #or just starting with floating point
  131. )
  132. ([eE][+-]?[0-9]+)? # optional exponent
  133. </Rule>
  134. <Rule color="Punctuation">
  135. [?,.;()\[\]{}+\-/%*&lt;&gt;^+~!|&amp;]+
  136. </Rule>
  137. </RuleSet>
  138. </SyntaxDefinition>

Lua.xshd放到解决方案资源管理器中,生成操作改为嵌入的资源

使用

xaml里的代码如下:

  1. <avalonEdit:TextEditor
  2. Grid.Row="2"
  3. xmlns:avalonEdit="http://icsharpcode.net/sharpdevelop/avalonedit"
  4. Name="textEditor"
  5. FontFamily="Consolas"
  6. FontSize="10pt"
  7. ShowLineNumbers="True"
  8. LostFocus="TextEditor_LostFocus"/>

然后在窗体的loaded事件中运行下面的代码即可:

  1. //快速搜索功能
  2. SearchPanel.Install(textEditor.TextArea);
  3. //设置语法规则
  4. string name = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Lua.xshd";
  5. System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
  6. using (System.IO.Stream s = assembly.GetManifestResourceStream(name))
  7. {
  8. using (XmlTextReader reader = new XmlTextReader(s))
  9. {
  10. var xshd = HighlightingLoader.LoadXshd(reader);
  11. textEditor.SyntaxHighlighting = HighlightingLoader.Load(xshd, HighlightingManager.Instance);
  12. }
  13. }

效果

效果什么的。。。自己去下载一个LLCOM看看就知道了嘛:

使用AvalonEdit实现WPF的Lua编辑器的更多相关文章

  1. 最好用的lua编辑器--------emmylua使用汇总

    最好的lua编辑器Emmylua,欢迎打脸 官方文档   https://emmylua.github.io/zh_CN/ github      https://github.com/EmmyLua ...

  2. 基于WPF&Prism&AvalonEdit的XAML轻量编辑器

    1. 写在前面 一直从事WPF的相关开发工作,有时为了尝试或演示某些仅仅基于XAML的效果时,但又不想大动干戈打开VS去创建项目,所以一个轻便简单,集编辑与预览于一身的XAML编辑器就显得格外重要. ...

  3. Cocos2d-x游戏开发之lua编辑器 Sublime 搭建,集成cocos2dLuaApi和自有类

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/wisdom605768292/article/details/34085969 Sublime Te ...

  4. debian上安装lua编辑器

    Debian服务器上安装lua 1)下载压缩包 wget http://www.lua.org/ftp/lua-5.1.4.tar.gz 2)解压文件 tar  zxvf lua-5.1.4.tar. ...

  5. wpf 富文本编辑器richtextbox的简单用法

    最近弄得一个小软件,需要用到富文本编辑器,richtextbox,一开始以为是和文本框一样的用法,但是实践起来碰壁之后才知道并不简单. richtextbox 类似于Word,是一个可编辑的控件.结构 ...

  6. WPF学习笔记(四):AvalonEdit 代码高亮编辑控件专题

    AvalonEdit 是一个基于 WPF 的文本编辑器组件.它是由 Daniel Grunwald 为 SharpDevelop 编写的.从 5.0 版开始,AvalonEdit 根据MIT许可证发布 ...

  7. WPF开发时光之痕日记本(一)——富文本编辑器

    本篇给大家推荐一个 WPF 版的富文本编辑器,SmithHtmlEditor,具体网址大家可以找一找,我在这个编辑器的基础上修改了界面,增加了一些功能,模仿了kindeditor 的界面,鉴于自己现在 ...

  8. Lua------------------改善Unity编辑器对Lua文件的支持

    原创 2017年03月10日 18:44:22 标签: Unity / lua / 编辑器 952 当前版本的Unity(截至Unity5.5.x)中TextAsset类不支持后缀为lua的文件,将l ...

  9. .NET Core/.NET5/.NET6 开源项目汇总12:WPF组件库2

    系列目录     [已更新最新开发文章,点击查看详细] WPF(Windows Presentation Foundation)是微软推出的基于Windows 的用户界面框架,属于.NET Frame ...

随机推荐

  1. 【LeetCode】2. 两数相加

    题目 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.   如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  2. linux安装IB驱动方法

    一.准备 1.Linux操作系统7.6(根据实际情况变更,此处用redhat7.6系统举例) 2.驱动:MLNX_OFED_LINUX-4.6-1.0.1.1-rhel7.6-x86_64.tgz(根 ...

  3. Windows下 gcc/g++的安装与配置

    引言 我们知道开发最好用Mac/Linux,效率很高,但是对于很多还是Windows用户的我们来说,编写代码再到linux上运行也是很常有的事情,但对于我们写一些小demo使用上面的流程难免有点兴师动 ...

  4. 一个匹配字字符串是aabbcc或者其他模式的运用

    <!--一个匹配字字符串是aabbcc或aaaabccc或者其他模式的运用--> function isPattern(str, pattern) { let str_a = str.sp ...

  5. NumPy实现数组的拼接和分裂

    一.数组的拼接 import numpy as np x=np.array([,,]) x2=np.array([,,])np.concatenate([x,x2]) 输出:array([1, 2, ...

  6. CodeWarrior IDE烧写介绍

    点击Flash烧写 选择芯片系列 下面将以PPC8548 NOR Flash烧写为例 默认配置文件目录:C:\Program Files (x86)\Freescale\CodeWarrior PA ...

  7. c语言的全排列

    在c语言中实现全排列,对于刚接触c语言,还没学习算法的人来说,比较困难了吧.估计大佬也不会看这种基础的东西,全排列实现的办法很多,在c++中有一个专门的函数可以使用,但是在c中实现就有点困难了.如果你 ...

  8. [20190930]oracle raw类型转化number脚本.txt

    [20190930]oracle raw类型转化number脚本.txt --//写一个简单oracle raw转化number脚本,简单说明:--//输入必须是c1,02 或者 c102,不支持c1 ...

  9. BayaiM__ oracle函数_01

    BayaiM__ oracle函数_01   Oracle函数--------------------------------------------------------------------- ...

  10. MIPI CSI2学习(一):说一说MIPI CSI2

    1. MIPI CSI2简介 MIPI联盟是一个开放的会员制组织.2003年7月,由美国德州仪器(TI).意法半导体(ST).英国ARM和芬兰诺基亚(Nokia)4家公司共同成立.MIPI联盟旨在推进 ...