標籤:支援 ase pre 告訴 技術分享 需要 asp template sdn
本人一直做ASP.NET開發,近期接到任務要用Discuz開發一個社區,第一次接觸PHP,PHP靈活的文法,天生的模組化,各種文法糖深深的震驚了我,我從內心深處感受到了PHP是最牛逼的語言!!!
好了回到正題,初次看Discuz的模板,用VS開啟是這樣的:
沒錯,第一眼看上去就震驚了,這TM怎麼維護?模板隨隨便便就2000行,因為DZ是一個極靈活的論壇,裡面放了各種hook點用於擴充功能!所以模板非常龐大複雜。
DZ的模板文法採用了HTML注釋擴充(有一部分內聯的卻是破壞性的),見:
http://faq.comsenz.com/library/template/syntax/syntax_index.htm (DZ標籤文法說明)
本人第一想法是得給DZ加一個文法高亮功能,腦海裡湧現出 Lex Yacc等工具(編譯原理忘記得差不多了但是還能記得他倆。)
我嘗試在我熟練使用的Visual Stadio中開發一個語言擴充,看到這篇文章: 使用Visual Studio SDK製作GLSL詞法著色外掛程式 ,接觸了C#版的Lex --- gplex,
於是我也依樣畫瓢,在畫瓢的過程中,我又瞭解到了自VS2015 Update1開始 VS支援了 textmate的語言擴充規範!!!!(這又是想撿人家MAC生態的現成)
使用TextMate Grammars擴充VS語言服務把TextMate Grammars規範的檔案夾放到 %userprofile%\.vs\Extensions 這個目錄下就好了https://msdn.microsoft.com/en-us/library/mt742400.aspxhttps://manual.macromates.com/en/language_grammarshttps://github.com/madskristensen/TextmateBundleInstaller
--------------------------折騰N小時分隔線------------------------------------------------------------------
終於發現用Lex描述HTML的文法太麻煩,我只是在HTML文法高亮的前提下擴充HTML而已,並不需要重寫HTML的Lex描述,於是放棄了VS轉到了微軟的跨平台編輯神器 VS Code!!
--------------------------棄Visual Stadio----轉 Visual Stadio Code保進度分隔線------------------------------
為什麼要用Visual Stadio Code?因為這傢伙支援非常多的語言,本身是一個Chrome瀏覽器,高仿Atom的。然後查了下怎麼擴充 VS Code,不用想直覺告訴我它應該也支援Textmate的擴充規範。
和VS一個套路在 %userprofile%\.vscode\extensions 檔案夾下放置擴充就行了
看了下 VSCODE 的文檔,發現有個YO工具可使用嚮導產生文法高亮工程,好吧
yo code
快速產生了一個,然後用VSCODE開啟該工程目錄 按F5,啟用一個新的 VSCODE,在新的VSCODE中開啟DZ的模板檔案。
此時由於沒寫任何詞法分析的東東,這應該是沒效果的。
那麼怎麼寫?
package.json是描述一個vscode擴充的資訊清單檔。vscode 1.2開始支援了一個新特性叫文法注入(injectTo屬性)!!!
(這就是我想要的,把我的關鍵字注入到html文法中!!)
如,我在資訊清單檔中指出了我要把我自己的文法注入到 “text.html.base”中,(text.html.base是vscode內建的一個scopeName,我通過調試vscode得出的,官方文檔中未提及)
可以看到我在這個textmate語言擴充檔案中寫上了 if 之類的關鍵字,當然還可以擴充其它。在被調試的VSCODE中按CTRL+R重新載入
比之前的好多了
在內聯在字串中的文法還沒有效果,需要繼續擴充text.html.base中的屬性值
未完待續
我是如何給discuz模板做文法高亮的