Skip to content

Commit 44c5015

Browse files
committed
Add sass, scss, yaml (experimental)
1 parent 4bd51e1 commit 44c5015

6 files changed

+204
-6
lines changed

src/zcl_highlighter.clas.abap

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,10 @@ CLASS zcl_highlighter IMPLEMENTATION.
281281
result = line.
282282

283283
IF hidden_chars = abap_true.
284+
" The order matters :-)
284285
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab IN result WITH ' → '.
286+
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN result WITH '¶'.
287+
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN result WITH '↵'.
285288
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf(1) IN result WITH '¶'.
286289
REPLACE ALL OCCURRENCES OF ` ` IN result WITH '·'.
287290
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>form_feed IN result

src/zcl_highlighter_css.clas.abap

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,8 @@ CLASS zcl_highlighter_css IMPLEMENTATION.
223223

224224
" 4) CSS Functions
225225
keyword_list =
226-
'attr|calc|cubic-bezier|hsl|hsla|linear-gradient|radial-gradient|repeating-linear-gradient|' &&
227-
'repeating-radial-gradient|rgb|rgba|rotate|scale|translateX|translateY|var'.
226+
'attr|calc|cubic-bezier|hsl|hsla|linear-gradient|math|radial-gradient|repeating-linear-gradient|' &&
227+
'repeating-radial-gradient|rgb|rgba|rotate|scale|theme|translateX|translateY|var'.
228228
insert_keywords( list = keyword_list
229229
token = c_token-functions ).
230230

@@ -309,9 +309,9 @@ CLASS zcl_highlighter_css IMPLEMENTATION.
309309
insert_keywords( list = keyword_list
310310
token = c_token-extensions ).
311311

312-
" 6) CSS At-Rules
312+
" 6) CSS At-Rules (SASS/SCSS)
313313
keyword_list =
314-
'@|charset|counter-style|font-face|import|keyframes'.
314+
'@|charset|counter-style|font-face|import|keyframes|@use|@mixin|@include|@extend'.
315315
insert_keywords( list = keyword_list
316316
token = c_token-at_rules ).
317317

src/zcl_highlighter_factory.clas.abap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ CLASS zcl_highlighter_factory IMPLEMENTATION.
2828
result = NEW zcl_highlighter_abap( ).
2929
ELSEIF filename CP '*.xml' OR filename CP '*.html'.
3030
result = NEW zcl_highlighter_xml( ).
31-
ELSEIF filename CP '*.css'.
31+
ELSEIF filename CP '*.css' OR filename CP '*.scss' OR filename CP '*.sass'.
3232
result = NEW zcl_highlighter_css( ).
3333
ELSEIF filename CP '*.js'.
3434
result = NEW zcl_highlighter_js( ).
35-
ELSEIF filename CP '*.json' OR filename CP '*.jsonc'.
35+
ELSEIF filename CP '*.json' OR filename CP '*.jsonc' OR filename CP '*.json5'.
3636
result = NEW zcl_highlighter_json( ).
3737
ELSEIF filename CP '*.txt' OR filename CP '*.ini' OR filename CP '*.text'.
3838
result = NEW zcl_highlighter_txt( ).

src/zcl_highlighter_yaml.clas.abap

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
CLASS zcl_highlighter_yaml DEFINITION
2+
PUBLIC
3+
INHERITING FROM zcl_highlighter
4+
CREATE PUBLIC.
5+
6+
* Basic YAML formatting
7+
* https://yaml.org/
8+
9+
PUBLIC SECTION.
10+
11+
CONSTANTS:
12+
BEGIN OF c_css,
13+
keyword TYPE string VALUE 'selectors',
14+
text TYPE string VALUE 'text',
15+
values TYPE string VALUE 'properties',
16+
comment TYPE string VALUE 'comment',
17+
attr TYPE string VALUE 'attr',
18+
END OF c_css.
19+
CONSTANTS:
20+
BEGIN OF c_token,
21+
keyword TYPE c VALUE 'K',
22+
text TYPE c VALUE 'T',
23+
values TYPE c VALUE 'V',
24+
comment TYPE c VALUE 'C',
25+
attr TYPE c VALUE 'A',
26+
END OF c_token.
27+
CONSTANTS:
28+
BEGIN OF c_regex,
29+
" comments #
30+
comment TYPE string VALUE '#.*$',
31+
" not much here
32+
keyword TYPE string VALUE 'true|false|null',
33+
" double quoted strings
34+
text TYPE string VALUE '"',
35+
" YAML collections, structures, scalars, tags
36+
attr TYPE string VALUE '- |: |---|...|\[|\]|\{|\}|&|\*|? |\>|\|!',
37+
END OF c_regex.
38+
39+
METHODS constructor.
40+
41+
PROTECTED SECTION.
42+
43+
METHODS order_matches REDEFINITION.
44+
45+
PRIVATE SECTION.
46+
ENDCLASS.
47+
48+
49+
50+
CLASS zcl_highlighter_yaml IMPLEMENTATION.
51+
52+
53+
METHOD constructor.
54+
55+
super->constructor( ).
56+
57+
" Initialize instances of regular expression
58+
59+
add_rule( regex = c_regex-keyword
60+
token = c_token-keyword
61+
style = c_css-keyword ).
62+
63+
" Style for keys
64+
add_rule( regex = c_regex-text
65+
token = c_token-text
66+
style = c_css-text ).
67+
68+
" Style for values
69+
add_rule( regex = ''
70+
token = c_token-values
71+
style = c_css-values ).
72+
73+
" Comments
74+
add_rule( regex = c_regex-comment
75+
token = c_token-comment
76+
style = c_css-comment ).
77+
78+
" YAML collections, structures, scalars, tags
79+
add_rule( regex = c_regex-attr
80+
token = c_token-attr
81+
style = c_css-attr ).
82+
83+
ENDMETHOD.
84+
85+
86+
METHOD order_matches.
87+
88+
FIELD-SYMBOLS <prev_match> TYPE ty_match.
89+
90+
" Longest matches
91+
SORT matches BY offset length DESCENDING.
92+
93+
DATA(prev_token) = ''.
94+
95+
LOOP AT matches ASSIGNING FIELD-SYMBOL(<match>).
96+
" Delete matches after open text match
97+
IF prev_token = c_token-text AND <match>-token <> c_token-text.
98+
CLEAR <match>-token.
99+
CONTINUE.
100+
ENDIF.
101+
102+
DATA(match) = substring( val = line
103+
off = <match>-offset
104+
len = <match>-length ).
105+
106+
IF <match>-token = c_token-text.
107+
<match>-text_tag = match.
108+
IF prev_token = c_token-text.
109+
IF <match>-text_tag = <prev_match>-text_tag.
110+
<prev_match>-length = <match>-offset + <match>-length - <prev_match>-offset.
111+
CLEAR prev_token.
112+
ENDIF.
113+
CLEAR <match>-token.
114+
CONTINUE.
115+
ENDIF.
116+
ENDIF.
117+
118+
prev_token = <match>-token.
119+
ASSIGN <match> TO <prev_match>.
120+
ENDLOOP.
121+
122+
DELETE matches WHERE token IS INITIAL.
123+
124+
" Switch style of second text match to values
125+
DATA(count) = 0.
126+
LOOP AT matches ASSIGNING <match> WHERE token = c_token-text.
127+
count = count + 1.
128+
IF count >= 2.
129+
<match>-token = c_token-values.
130+
ENDIF.
131+
ENDLOOP.
132+
133+
ENDMETHOD.
134+
ENDCLASS.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
CLASS ltcl_abapgit_syntax_json DEFINITION FINAL FOR TESTING
2+
DURATION SHORT
3+
RISK LEVEL HARMLESS.
4+
5+
PRIVATE SECTION.
6+
DATA cut TYPE REF TO zcl_abapgit_syntax_json.
7+
8+
METHODS:
9+
setup,
10+
key_value FOR TESTING RAISING cx_static_check,
11+
comment_1 FOR TESTING RAISING cx_static_check,
12+
comment_2 FOR TESTING RAISING cx_static_check.
13+
14+
ENDCLASS.
15+
16+
17+
CLASS ltcl_abapgit_syntax_json IMPLEMENTATION.
18+
19+
METHOD setup.
20+
21+
cut = NEW #( ).
22+
23+
ENDMETHOD.
24+
25+
METHOD key_value.
26+
cl_abap_unit_assert=>assert_equals(
27+
act = cut->process_line( |"key":"value"| )
28+
exp = |<span class="text">"key"</span>:<span class="properties">"value"</span>| ).
29+
ENDMETHOD.
30+
31+
METHOD comment_1.
32+
cl_abap_unit_assert=>assert_equals(
33+
act = cut->process_line( |"key":"value" // comment| )
34+
exp = |<span class="text">"key"</span>:<span class="properties">"value"</span>|
35+
&& | <span class="comment">//</span> comment| ).
36+
ENDMETHOD.
37+
38+
METHOD comment_2.
39+
cl_abap_unit_assert=>assert_equals(
40+
act = cut->process_line( |/* comment */| )
41+
exp = |<span class="comment">/* comment */</span>| ).
42+
ENDMETHOD.
43+
44+
ENDCLASS.

src/zcl_highlighter_yaml.clas.xml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
3+
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
4+
<asx:values>
5+
<VSEOCLASS>
6+
<CLSNAME>ZCL_HIGHLIGHTER_YAML</CLSNAME>
7+
<LANGU>E</LANGU>
8+
<DESCRIPT>Syntax Highlighter - YAML</DESCRIPT>
9+
<STATE>1</STATE>
10+
<CLSCCINCL>X</CLSCCINCL>
11+
<FIXPT>X</FIXPT>
12+
<UNICODE>X</UNICODE>
13+
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
14+
</VSEOCLASS>
15+
</asx:values>
16+
</asx:abap>
17+
</abapGit>

0 commit comments

Comments
 (0)