用c 實現的語法高亮控制項

2021-05-22 23:15:53 字數 2650 閱讀 7994

用c#實現了乙個能夠對vbscript,c#,j#,sql顯示語法高亮的文字編輯控制項。這裡詳細介紹一下它的原理。

如果需要解析其他語言,請新增相應的xml檔案,並修改列舉型別languages以及parser類的建構函式中的相應**。已知bug:當兩個詞是由括號分割的時候,程式無法識別。比如function foo(integer i),程式會把foo(integer當作乙個詞。當然這裡有兩個解決辦法,乙個是程式自動進行語法排版,在括號前後自動插入空格;另乙個是對括號進行解析。也許以後有空的時候我會加上。

<?xml version="1.0" encoding="utf-8" ?>

private

protected

public

namespace

class

varfor

ifelse

while

switch

case

using

getreturn

null

void

intstring

float

this

setnew

true

false

const

static

package

function,

internal

extends

super

import

default

break

trycatch

finally+-

= parser類是負責對xml流進行解析,幷包含乙個方法來判斷乙個字串是不是關鍵字。詳細的**和注釋如下:

using system;

using system.xml;

using system.io;

using system.collections;

using system.reflection;

namespace syntaxeditor

stream strm = asm.getmanifestresourcestream(asm.getname().name + "."+filename);    //取得xml流

//reads the contents of the embedded file.

streamreader reader= new streamreader(strm);    //下面的**解析xml流

xd=new xmldocument();

xd.load(reader);

al=new arraylist();

xmlelement root=xd.documentelement;

xmlnodelist xnl=root.selectnodes("/definition/word");

for(int i=0;ithis.casesensitive=bool.parse(root.attributes["casesensitive"].value);

}public bool iskeyword(string word)    //判斷字串是否為關鍵字

base.dispose( disposing );

}#region 元件設計器生成的**

///

/// 設計器支援所需的方法 - 不要使用**編輯器

/// 修改此方法的內容。

///

private void initializecomponent()

#endregion

//重寫基類的ontextchanged方法。為了提高效率,程式是對當前文字插入點所在行進行掃瞄,

//以空格為分割符,判斷每個單詞是否為關鍵字,並進行著色。

protected override void ontextchanged(eventargs e)   

);parser parser=new parser(this.language);

for(int i=0;iint index=linestr.indexof(words[i],length);

base.selectionstart=linestart+index;

base.selectionlength=words[i].length;

base.selectioncolor=color.blue;

base.selectionstart=selectstart;

base.selectionlength=0;

base.selectioncolor=color.black;

}

}sendmessage(base.handle, wm_setredraw, 1, intptr.zero);

base.refresh();

}base.ontextchanged (e);

}

public new bool wordwrap

}public enum languages

private languages language=languages.sql;

public languages language

set}}}

vim 的python 語法高亮

周海漢 文 vim支援大部分檔案格式的語法高亮,而且可以自定義。不過預設的python語法高亮感覺太少,修改一下。1.修改語法高亮檔案 usr share vim vim72 syntax python.vim 將 let python highlight all 1 前面的引號去掉,可支援內建函式...

乙個C 語法高亮外掛程式

語法高亮對程式設計師閱讀 來說有著不小的幫助,雖然visualstudio本身支援c 語法高亮,但也只是對關鍵字 類名 字串等少數元素加了標記,而我們 中主題 變數 函式 屬性 事件等都沒有進行高亮,如下所示 varnodes fromid ingetidentifiersinspans doc.w...

再議 語法高亮外掛程式的選擇

這些天在做深度定製的時候發現乙個嚴重的問題,匹配精度不夠。來看幾個圖吧 可以看到他們渲染後的精度。節點越多,表示精度越高 排名名稱 節點數1 pretiffy 59802 節點 2snippet 43775 節點 3shjs 33985 節點 4highlight 8432 節點 再結合他們渲染速度...