自己開發Visual studio外掛程式-一個nvelocity高亮外掛程式

來源:互聯網
上載者:User

標籤:

首先,有一個項目用到了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的文法匹配的就進行上色

我們用到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

 

感謝你的閱讀,希望對你有協助.....

自己開發Visual studio外掛程式-一個nvelocity高亮外掛程式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.