目錄
1 再續前緣
2 體系結構
3 核心類介紹
我們知道裡面一定就是寫著具體他是如何把混搭@**和html給分離出來的
方法了。
進去之後是system.web.razor.parser類了。
在這個類裡面定義了
internal parserbase codeparser 基類
internal markupparser markupparser html分析者
public bool designtimemode 表示是否是設計時。
他的方法主要是兩個
public virtual void parse(lookaheadtextreader input, parservisitor visitor) }
protected
bool
intemporarybuffer }
protected
bool
designtimemode }
protected
bool
endoffile }
protected
char
currentcharacter }
////當前的字元
protected
sourcelocation currentlocation }
//細心一點你會發現對其簡單封裝的方法也很有多。
//protected
idisposable startblock(blocktype type,
bool
outputcurrentastransition
=true
) protected
void
endblock()
protected
void
output(span span)
protected
void
onerror(sourcelocation location,
string
message)
protected
void
onerror(sourcelocation location,
string
message,
params
object
args)
protected
void
end(spanfactory spanfactory)
protected
void
end(spanfactory spanfactory,
bool
allowempty)
end(spanfactory(context)); } }
protected
void
end(span span)
由此可知,parserbase及其基礎類只是parsercontent的輔助方法。但是對於所有content,內容的操作還是全部由parserconetnt 操作。
2他的工作是執行具體的分析工作。
由他的派生類來覺得誰是c#**誰是html。幷包裝成syntaxtreenode類以供visitor生成**,當然他並不知道誰是visitor,他只是簡單的把他交給了parsercontent
他是用來生成**的。他的對外宣稱自己的工作:凡是下面的事都能搞定。
public abstract void visitstartblock(blocktype type);
public abstract void visitspan(span span);
public abstract void visitendblock(blocktype type);
public abstract void visiterror(razorerror err);
public abstract void oncomplete();
他本身並不做事,但大家卻通過它來進行交流和溝通。
並通過它來分類這是**,那是注釋等。
他主要有兩個概念比較重要
1 block:主要是乙個集合。包含自身和父類的乙個集合。
public
ienumerable
<
syntaxtreenode
>
children
本身並不標註是什麼型別。
2 span :這裡表明了具體的型別如注釋,html或**。
public
spankind kind
這個屬性表明
以上簡單的說明了一下裡面一層的體系結構。各個主要基類的作用及其一些主要需要清楚的概念。穿插了一些他們之間是如何溝通的。
下一次再寫他是如何具體分析的之類的吧:)
希望能給正在分析原始碼的同學和在看razor原始碼的同學一點幫助。
razor系列參考
原始碼分析系列
postgresql系列之體系結構
postgresql 資料庫是由一系列位於檔案系統上的物理檔案組成。在資料庫執行過程中,管理這些物理檔案。通常這些物理檔案稱為資料庫。在postgresql中有乙個資料庫集簇 database cluster 的概念,它是指由單個postgresql伺服器例項管理的資料庫集合,組成資料庫集簇的這些資...
ARM Cortex M3體系結構
來自 arm cortex m3處理器體系結構.ppt 定位 概況 cortex m3核心 核心流水線分3個階段 取指 解碼和執行。當遇到 分支指令時,解碼階段也包含 的指令取指,這提高了執行的速度。處理器在解碼階段期間自行對分支目的地指令進行取指。在稍後的執行過程中,處理完分支指令後便知道下一條要...
Oracle體系結構理解(3)
伺服器程序與後台程序 伺服器程序與後台程序也是兩個不同的概念,伺服器程序也叫做前台程序,在oracle伺服器中負責與client端的連線。每當clinet端產生乙個使用者程序來連線資料庫,資料庫會產生相應的伺服器程序和埠號來與之進行連線,在專用伺服器中哦個這是一對一的關係,在共享伺服器中則會採用排程...