转载

自己开发Visual studio插件-一个nvelocity高亮插件

首先,有一个项目用到了nvelocity模板引擎,但是用vs开发模板的时候,没有高亮效果,所以非常不方便,鉴于这个,于是有了自己开发插件的念头,但是在vs sdk开发上面,这方面的资料真是少之又少,网上能参考的文章真是寥寥无几。

不过借鉴了几篇文章和参考MSDN后,总算开发出了一款VS插件,目前是支持nvelocity的语法高亮,比如nvelocity的关键字#set #parse等等 还有nvelocity的对象$xxx这样的格式,还有注释## #**#这样的,但是这里出现一个小曲

就是因为我们也知道nvelocity的模板其实大部分都是html的语法,所以如果写nvelocity更多的是写html,所以我们需要保留html的语法高亮还有html的智能提示,同时又要支持nvelocity的语法高亮,这里如果全部都自己来实现,估计是一个

非常大的工程,由于本人时间不是很多,也没这么多的精力和脑力去开发这么一款工具,所以智能另辟路径了,所以这款插件有个不好的地方,就是安装后,所有的文件,比如cs文件 aspx页面 html页面等等只要遇到nvelocity的语法 关键字 都回

被语法高亮了,但是不影响使用的,这点我亲自试过,估计其他的页面很少出现这些语法关键字,就算出现也不妨碍的

下面提示一下开发的思路

首先需要安装vs sdk

还有你的vs 需要是英文版的

我们是在 editor class的模板下面进行开发

关键的一步就算分词了,就算扫描你的代码,检查含有和nvelocity的语法匹配的就进行上色

自己开发Visual studio插件-一个nvelocity高亮插件

我们用到lex分词工具

%option unicode, codepage:raw %{   // User code is all now in ScanHelper.cs %} %namespace Shane %option verbose, summary, noparser, nofiles, unicode %{  public int nextToken() { return yylex(); }  public int getPos() { return yypos; }  public int getLength() { return yyleng; } %} //============================================================= //=============================================================  number ([0-9])+ chars [A-Za-z] cstring [A-Za-z_] blank " " delim [ /t/n] word {chars}+ singleLineComment "##"[^/n]* multiLineComment "#*"[^*]*/*(/*|([^*/]([^*])*/*))*/# velocity /$[!]?[{]?[a-zA-Z/d._]+[}]? comment {multiLineComment}|{singleLineComment} keyword #set|#foreach|#if|#elseif|#else|#include|#parse|#macro|#even|#odd|#each|#end|{velocity} %% {keyword}   return (int)NvelocityEditor.NvelocityTokenType.Keyword; {comment}   return (int)NvelocityEditor.NvelocityTokenType.Comment; %% 

同时有一点要注意的就是

分词的时候,最好不要先所有词语都上色,这样会覆盖了原来html的语法的

using System.ComponentModel.Composition; using System.Windows.Media; using Microsoft.VisualStudio.Text.Classification; using Microsoft.VisualStudio.Utilities; namespace NvelocityEditor {  [Export(typeof(EditorFormatDefinition))]  [ClassificationType(ClassificationTypeNames = "NvelocityText")]  [Name("NvelocityText")]  [UserVisible(true)]  [Order(Before = Priority.High)]  internal sealed class NvelocityTextFormatDefinition : ClassificationFormatDefinition  {   public NvelocityTextFormatDefinition()   {    this.DisplayName = "Nvelocity文本";    this.ForegroundColor = Colors.Brown;   }  }  [Export(typeof(EditorFormatDefinition))]  [ClassificationType(ClassificationTypeNames = "NvelocityComment")]  [Name("NvelocityComment")]  [UserVisible(true)]  [Order(Before = Priority.High)]  internal sealed class NvelocityCommentFormatDefinition : ClassificationFormatDefinition  {   public NvelocityCommentFormatDefinition()   {    this.DisplayName = "Nvelocity注释";    this.ForegroundColor = Colors.Green;   }  }  [Export(typeof(EditorFormatDefinition))]  [ClassificationType(ClassificationTypeNames = "NvelocityKeyword")]  [Name("NvelocityKeyword")]  [UserVisible(true)]  [Order(Before = Priority.High)]  internal sealed class NvelocityKeywordFormatDefinition : ClassificationFormatDefinition  {   public NvelocityKeywordFormatDefinition()   {    this.DisplayName = "Nvelocity关键字";    this.ForegroundColor = Colors.Black;    this.BackgroundColor = Colors.Yellow;   }  } } 

插件下载地址: NvelocityEditor.vsix

感谢你的阅读,希望对你有帮助.....

正文到此结束
Loading...