ABAP的語法高亮是如何在瀏覽器裡顯示的
這篇文章的原文我發表在SAP官方社群上:https://blogs.sap.com/2018/03/09/how-abap-syntax-highlight-is-implemented-in-webide-launched-via-browser/
在S/4HANA裡,我們現在能在瀏覽器裡寫ABAP了,並且支援語法高亮。
你也許會問,ABAP的語法高亮是如何在瀏覽器裡顯示的?下面跟我一起來通過除錯的方式自己找到問題的答案。
(1). 在瀏覽器裡敲個ABAP的關鍵字,比如data。發現被高亮了。通過Chrome開發工具發現高亮是通過一個叫ace_keyword的css類實現的。
在Chrome開發工具裡以關鍵字".ace_keyword"搜尋: 發現這個css類是硬編碼在theme-sap-cumulus.js裡的。
(2). 現在需要找到瀏覽器裡進行ABAP程式碼編輯的編輯器的實現。在Chrome開發工具裡Network tab裡輸入“.xml”作為過濾條件,於是找到編輯器的Fiori實現: Editor.view.xml
具體的編輯器是實現在名稱空間reuse的ABAPWrapper標籤裡。
根據這個名稱空間找到實現ABAP編輯器的UI5應用,如下圖: nw_aps_ext_lib.
開啟ABAPWrapper-dbg.js, 在第68行設定斷點。這個函式負責從ABAP後臺取PAD檔案,該檔案和語法高亮有關。
重新整理ABAP編輯器頁面,斷點觸發,在偵錯程式裡觀察PAD檔案的內容:
所有的ABAP關鍵字都列在該PAD檔案裡,這樣UI5就知道編輯器裡哪些字串應該做高亮顯示。
(3). 最後一個問題就是,比如當我敲了一個ABAP關鍵字"new"之後,UI5應用具體哪行程式碼將對應的css類加到這個字串對應的DOM節點上?
如下圖,一旦我敲了一個字元w之後,字串new作為一個關鍵字需要被高亮:
具體邏輯如下圖:一旦敲入字元"w"後,onInput作為事件處理函式觸發:
函式$renderLine負責生成對應的HTML原始碼。輸入字元"new"被傳入函式getLineTokens來計算該字串是關鍵字還是普通變數。
在檔案AceRndTokenizer.js裡, ABAP解析器按照我們期望的將“new”解析成關鍵字,因為解析器擁有PAD檔案的引用,因此它知道哪些字串是關鍵字,哪些是普通變數。
(4). DOM節點的原始碼在此處生成,"ace"和“keyword"做連線操作,生成最後我們在Chrome開發工具裡看到的完整css類ace_keyword.
謎底就這樣揭曉了。
要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2151954/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- FLASH PLAYER 谷歌瀏覽器瀏覽網站無法正常顯示的問題谷歌瀏覽器網站
- ABAP Development Tools的語法高亮實現原理dev
- 在ABAP Webdynpro裡顯示PDF的一種辦法Web
- ABAP開發環境語法高亮的那些事兒開發環境
- 如何在 SAPGUI 裡顯示上傳到 ABAP 伺服器的 PDF 檔案試讀版GUI伺服器
- 瀏覽器模擬顯示器不同解析度瀏覽器
- 為什麼vue列印的物件在瀏覽器中顯示...Vue物件瀏覽器
- 如何在瀏覽器裡執行 SAPGUI 的事務試讀版瀏覽器GUI
- ABAP 740裡的新語法 - LET表示式
- Web瀏覽器裡的那些事Web瀏覽器
- 如何在 SAP ABAP ALV 報表裡以交通燈的方式顯示某一列的值
- 小技巧:瀏覽器裡顯示成星號的密碼,忘記了該怎麼辦?瀏覽器密碼
- ES和kibana docker啟動成功後瀏覽器卻顯示無法訪問Docker瀏覽器
- 瀏覽器是如何渲染網頁的《學如逆水行舟,不進則退》瀏覽器網頁
- 如何讓瀏覽器支援 import 和export語法瀏覽器ImportExport
- win10瀏覽器上沒有主頁圖示怎麼找回_win10瀏覽器主頁圖示如何顯示Win10瀏覽器
- 在瀏覽器裡使用SAPGUI裡的SE80瀏覽器GUI
- 瀏覽器能正常訪問圖片,但是放到img src下就無法顯示的解決方案瀏覽器
- 基於Chromium的瀏覽器已上線通用“顯示密碼”按鈕瀏覽器密碼
- Safari瀏覽器自動高亮外掛:Auto Highlight fMac瀏覽器Mac
- edge是什麼瀏覽器 microsoft edge是ie瀏覽器嗎瀏覽器ROS
- 瀏覽器是如何解析html的?瀏覽器HTML
- ultraedit高亮顯示pl/sqlSQL
- 谷歌瀏覽器翻譯在哪裡開啟 谷歌瀏覽器的線上翻譯在哪裡設定谷歌瀏覽器
- nodejs伺服器讀取圖片返回給前端(瀏覽器)顯示NodeJS伺服器前端瀏覽器
- 在瀏覽器裡使用SAPGUI瀏覽器GUI
- 瀏覽器之爭:程式設計師眼裡瀏覽器的地位 IE:我開了!瀏覽器程式設計師
- 瀏覽器之爭:程式設計師眼裡瀏覽器的地位IE:我開了!瀏覽器程式設計師
- microsoft edge是ie瀏覽器嗎 edge瀏覽器和ie瀏覽器一樣嗎ROS瀏覽器
- webRTC——瀏覽器裡的音視訊通話Web瀏覽器
- win10遊覽器影像不顯示怎麼設定 win10瀏覽器影像顯示不出來處理方法Win10瀏覽器
- win10自帶edge無法開啟網頁 edge瀏覽器頁面顯示不出Win10網頁瀏覽器
- 使Ultraedit支援ASM語法高亮的方法ASM
- js基礎–如何判斷瀏覽器標籤頁是隱藏或者顯示狀態JS瀏覽器
- Win10版Edge Canary瀏覽器更新:加入對語法工具的支援Win10瀏覽器
- hello world 是如何輸出到瀏覽器的瀏覽器
- 手機瀏覽器不能顯示輪播圖或是其他圖片瀏覽器
- CSS瀏覽器相容性的4個解決方案:瀏覽器CSS樣式初始化、瀏覽器私有屬性,CSS hack語法和自動化外掛CSS瀏覽器