我是如何給discuz模板做文法高亮的

來源:互聯網
上載者:User

標籤:支援   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模板做文法高亮的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.