mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 04:36:49 +08:00

* Add syntax-highlighters for CSS, JS, JSON * Update W3MI ZABAPGIT_CSS_THEME_DEFAULT * Fix line size and case statement * Fix line size * Update styles, removed operators * Added highlight for comments in HTML/XML * Fix menu hover background This makes the selected menu more visible. Also includes color fix for repo name and url in dark theme. * Fix for W3xx objects with "." in name * Reverse fix for W3xx * Remove hover style changes Co-authored-by: Lars Hvam <larshp@hotmail.com>
104 lines
2.6 KiB
ABAP
104 lines
2.6 KiB
ABAP
CLASS zcl_abapgit_syntax_json DEFINITION
|
|
PUBLIC
|
|
INHERITING FROM zcl_abapgit_syntax_highlighter
|
|
CREATE PUBLIC .
|
|
|
|
PUBLIC SECTION.
|
|
|
|
CONSTANTS:
|
|
" JSON... This was easy :-)
|
|
BEGIN OF c_css,
|
|
keyword TYPE string VALUE 'keyword', "#EC NOTEXT
|
|
text TYPE string VALUE 'text', "#EC NOTEXT
|
|
END OF c_css .
|
|
CONSTANTS:
|
|
BEGIN OF c_token,
|
|
keyword TYPE c VALUE 'K', "#EC NOTEXT
|
|
text TYPE c VALUE 'T', "#EC NOTEXT
|
|
END OF c_token .
|
|
CONSTANTS:
|
|
BEGIN OF c_regex,
|
|
" not much here
|
|
keyword TYPE string VALUE 'true|false|null', "#EC NOTEXT
|
|
" double quoted strings
|
|
text TYPE string VALUE '"', "#EC NOTEXT
|
|
END OF c_regex .
|
|
|
|
METHODS constructor .
|
|
PROTECTED SECTION.
|
|
|
|
METHODS order_matches REDEFINITION.
|
|
|
|
PRIVATE SECTION.
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS ZCL_ABAPGIT_SYNTAX_JSON IMPLEMENTATION.
|
|
|
|
|
|
METHOD constructor.
|
|
|
|
super->constructor( ).
|
|
|
|
" Initialize instances of regular expression
|
|
|
|
add_rule( iv_regex = c_regex-keyword
|
|
iv_token = c_token-keyword
|
|
iv_style = c_css-keyword ).
|
|
|
|
add_rule( iv_regex = c_regex-text
|
|
iv_token = c_token-text
|
|
iv_style = c_css-text ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD order_matches.
|
|
|
|
DATA:
|
|
lv_match TYPE string,
|
|
lv_line_len TYPE i,
|
|
lv_prev_token TYPE c.
|
|
|
|
FIELD-SYMBOLS:
|
|
<ls_prev> TYPE ty_match,
|
|
<ls_match> TYPE ty_match.
|
|
|
|
" Longest matches
|
|
SORT ct_matches BY offset length DESCENDING.
|
|
|
|
lv_line_len = strlen( iv_line ).
|
|
|
|
LOOP AT ct_matches ASSIGNING <ls_match>.
|
|
" Delete matches after open text match
|
|
IF lv_prev_token = c_token-text AND <ls_match>-token <> c_token-text.
|
|
CLEAR <ls_match>-token.
|
|
CONTINUE.
|
|
ENDIF.
|
|
|
|
lv_match = substring( val = iv_line
|
|
off = <ls_match>-offset
|
|
len = <ls_match>-length ).
|
|
|
|
IF <ls_match>-token = c_token-text.
|
|
<ls_match>-text_tag = lv_match.
|
|
IF lv_prev_token = c_token-text.
|
|
IF <ls_match>-text_tag = <ls_prev>-text_tag.
|
|
<ls_prev>-length = <ls_match>-offset + <ls_match>-length - <ls_prev>-offset.
|
|
CLEAR lv_prev_token.
|
|
ENDIF.
|
|
CLEAR <ls_match>-token.
|
|
CONTINUE.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
lv_prev_token = <ls_match>-token.
|
|
ASSIGN <ls_match> TO <ls_prev>.
|
|
ENDLOOP.
|
|
|
|
DELETE ct_matches WHERE token IS INITIAL.
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|