ABAP的語法高亮是如何在瀏覽器裡顯示的

i042416發表於2018-03-17

這篇文章的原文我發表在SAP官方社群上:https://blogs.sap.com/2018/03/09/how-abap-syntax-highlight-is-implemented-in-webide-launched-via-browser/

在S/4HANA裡,我們現在能在瀏覽器裡寫ABAP了,並且支援語法高亮。


ABAP的語法高亮是如何在瀏覽器裡顯示的

你也許會問,ABAP的語法高亮是如何在瀏覽器裡顯示的?下面跟我一起來通過除錯的方式自己找到問題的答案。

(1). 在瀏覽器裡敲個ABAP的關鍵字,比如data。發現被高亮了。通過Chrome開發工具發現高亮是通過一個叫ace_keyword的css類實現的。

ABAP的語法高亮是如何在瀏覽器裡顯示的

在Chrome開發工具裡以關鍵字".ace_keyword"搜尋: 發現這個css類是硬編碼在theme-sap-cumulus.js裡的。

ABAP的語法高亮是如何在瀏覽器裡顯示的

(2). 現在需要找到瀏覽器裡進行ABAP程式碼編輯的編輯器的實現。在Chrome開發工具裡Network tab裡輸入“.xml”作為過濾條件,於是找到編輯器的Fiori實現: Editor.view.xml

ABAP的語法高亮是如何在瀏覽器裡顯示的

具體的編輯器是實現在名稱空間reuse的ABAPWrapper標籤裡。

ABAP的語法高亮是如何在瀏覽器裡顯示的

根據這個名稱空間找到實現ABAP編輯器的UI5應用,如下圖: nw_aps_ext_lib.

ABAP的語法高亮是如何在瀏覽器裡顯示的
ABAP的語法高亮是如何在瀏覽器裡顯示的

開啟ABAPWrapper-dbg.js, 在第68行設定斷點。這個函式負責從ABAP後臺取PAD檔案,該檔案和語法高亮有關。

ABAP的語法高亮是如何在瀏覽器裡顯示的

重新整理ABAP編輯器頁面,斷點觸發,在偵錯程式裡觀察PAD檔案的內容:

ABAP的語法高亮是如何在瀏覽器裡顯示的

所有的ABAP關鍵字都列在該PAD檔案裡,這樣UI5就知道編輯器裡哪些字串應該做高亮顯示。

ABAP的語法高亮是如何在瀏覽器裡顯示的
ABAP的語法高亮是如何在瀏覽器裡顯示的

(3). 最後一個問題就是,比如當我敲了一個ABAP關鍵字"new"之後,UI5應用具體哪行程式碼將對應的css類加到這個字串對應的DOM節點上?

如下圖,一旦我敲了一個字元w之後,字串new作為一個關鍵字需要被高亮:

ABAP的語法高亮是如何在瀏覽器裡顯示的

具體邏輯如下圖:一旦敲入字元"w"後,onInput作為事件處理函式觸發:

ABAP的語法高亮是如何在瀏覽器裡顯示的

函式$renderLine負責生成對應的HTML原始碼。輸入字元"new"被傳入函式getLineTokens來計算該字串是關鍵字還是普通變數。

ABAP的語法高亮是如何在瀏覽器裡顯示的

在檔案AceRndTokenizer.js裡, ABAP解析器按照我們期望的將“new”解析成關鍵字,因為解析器擁有PAD檔案的引用,因此它知道哪些字串是關鍵字,哪些是普通變數。

ABAP的語法高亮是如何在瀏覽器裡顯示的

(4). DOM節點的原始碼在此處生成,"ace"和“keyword"做連線操作,生成最後我們在Chrome開發工具裡看到的完整css類ace_keyword.

ABAP的語法高亮是如何在瀏覽器裡顯示的
ABAP的語法高亮是如何在瀏覽器裡顯示的

謎底就這樣揭曉了。
要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:

ABAP的語法高亮是如何在瀏覽器裡顯示的
ABAP的語法高亮是如何在瀏覽器裡顯示的

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2151954/,如需轉載,請註明出處,否則將追究法律責任。

相關文章