' ).
ro_html->add( '' ).
- ro_html->add( lcl_stage=>method_description( -method ) ).
+ ro_html->add( zcl_abapgit_stage=>method_description( -method ) ).
ro_html->add( ' | ' ).
ro_html->add( '' ).
ro_html->add( -file-path && -file-filename ).
diff --git a/src/zabapgit_page_db.prog.abap b/src/zabapgit_page_db.prog.abap
index 4ba0aa6e2..31745eba7 100644
--- a/src/zabapgit_page_db.prog.abap
+++ b/src/zabapgit_page_db.prog.abap
@@ -39,7 +39,7 @@ CLASS lcl_gui_page_db_dis IMPLEMENTATION.
METHOD render_content.
DATA:
- lo_highlighter TYPE REF TO lcl_syntax_highlighter,
+ lo_highlighter TYPE REF TO zcl_abapgit_syntax_highlighter,
lo_toolbar TYPE REF TO zcl_abapgit_html_toolbar,
lv_data TYPE zcl_abapgit_persistence_db=>ty_content-data_str,
ls_action TYPE zcl_abapgit_persistence_db=>ty_content,
@@ -53,11 +53,11 @@ CLASS lcl_gui_page_db_dis IMPLEMENTATION.
ENDTRY.
" Create syntax highlighter
- lo_highlighter = lcl_syntax_highlighter=>create( '*.xml' ).
+ lo_highlighter = zcl_abapgit_syntax_highlighter=>create( '*.xml' ).
ls_action-type = ms_key-type.
ls_action-value = ms_key-value.
- lv_action = lcl_html_action_utils=>dbkey_encode( ls_action ).
+ lv_action = zcl_abapgit_html_action_utils=>dbkey_encode( ls_action ).
lv_data = lo_highlighter->process_line( zcl_abapgit_xml_pretty=>print( lv_data ) ).
CREATE OBJECT ro_html.
@@ -208,7 +208,7 @@ CLASS lcl_gui_page_db IMPLEMENTATION.
lv_trclass = ' class="firstrow"' ##NO_TEXT.
ENDIF.
- lv_action = lcl_html_action_utils=>dbkey_encode( ).
+ lv_action = zcl_abapgit_html_action_utils=>dbkey_encode( ).
CREATE OBJECT lo_toolbar.
lo_toolbar->add( iv_txt = 'Display' iv_act = |{ zif_abapgit_definitions=>gc_action-db_display }?{ lv_action }| ).
diff --git a/src/zabapgit_page_diff.prog.abap b/src/zabapgit_page_diff.prog.abap
index 2cb4477de..c966ab0d5 100644
--- a/src/zabapgit_page_diff.prog.abap
+++ b/src/zabapgit_page_diff.prog.abap
@@ -486,13 +486,13 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
METHOD render_lines.
- DATA: lo_highlighter TYPE REF TO lcl_syntax_highlighter,
+ DATA: lo_highlighter TYPE REF TO zcl_abapgit_syntax_highlighter,
lt_diffs TYPE zcl_abapgit_diff=>ty_diffs_tt,
lv_insert_nav TYPE abap_bool.
FIELD-SYMBOLS LIKE LINE OF lt_diffs.
- lo_highlighter = lcl_syntax_highlighter=>create( is_diff-filename ).
+ lo_highlighter = zcl_abapgit_syntax_highlighter=>create( is_diff-filename ).
CREATE OBJECT ro_html.
lt_diffs = is_diff-o_diff->get( ).
diff --git a/src/zabapgit_page_merge.prog.abap b/src/zabapgit_page_merge.prog.abap
index 82a7bbfc3..625b8c228 100644
--- a/src/zabapgit_page_merge.prog.abap
+++ b/src/zabapgit_page_merge.prog.abap
@@ -21,7 +21,7 @@ CLASS lcl_merge DEFINITION FINAL.
ttree TYPE lcl_git_porcelain=>ty_expanded_tt,
ctree TYPE lcl_git_porcelain=>ty_expanded_tt,
result TYPE lcl_git_porcelain=>ty_expanded_tt,
- stage TYPE REF TO lcl_stage,
+ stage TYPE REF TO zcl_abapgit_stage,
conflict TYPE string,
END OF ty_merge.
diff --git a/src/zabapgit_page_repo_settings.prog.abap b/src/zabapgit_page_repo_settings.prog.abap
index 8b2c89396..fb0e16833 100644
--- a/src/zabapgit_page_repo_settings.prog.abap
+++ b/src/zabapgit_page_repo_settings.prog.abap
@@ -40,7 +40,7 @@ CLASS lcl_gui_page_repo_sett IMPLEMENTATION.
DATA lv_serialized_post_data TYPE string.
CONCATENATE LINES OF it_postdata INTO lv_serialized_post_data.
- rt_post_fields = lcl_html_action_utils=>parse_fields( lv_serialized_post_data ).
+ rt_post_fields = zcl_abapgit_html_action_utils=>parse_fields( lv_serialized_post_data ).
ENDMETHOD.
diff --git a/src/zabapgit_page_settings.prog.abap b/src/zabapgit_page_settings.prog.abap
index 5e8000b30..7487513e8 100644
--- a/src/zabapgit_page_settings.prog.abap
+++ b/src/zabapgit_page_settings.prog.abap
@@ -224,7 +224,7 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
DATA lv_serialized_post_data TYPE string.
CONCATENATE LINES OF it_postdata INTO lv_serialized_post_data.
- rt_post_fields = lcl_html_action_utils=>parse_fields( lv_serialized_post_data ).
+ rt_post_fields = zcl_abapgit_html_action_utils=>parse_fields( lv_serialized_post_data ).
ENDMETHOD.
diff --git a/src/zabapgit_page_stage.prog.abap b/src/zabapgit_page_stage.prog.abap
index 79a0de5c5..7338b58fd 100644
--- a/src/zabapgit_page_stage.prog.abap
+++ b/src/zabapgit_page_stage.prog.abap
@@ -47,7 +47,7 @@ CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page.
process_stage_list
IMPORTING it_postdata TYPE cnht_post_data_tab
- io_stage TYPE REF TO lcl_stage
+ io_stage TYPE REF TO zcl_abapgit_stage
RAISING zcx_abapgit_exception,
build_menu
@@ -90,7 +90,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
METHOD zif_abapgit_gui_page~on_event.
- DATA lo_stage TYPE REF TO lcl_stage.
+ DATA lo_stage TYPE REF TO zcl_abapgit_stage.
FIELD-SYMBOLS: LIKE LINE OF ms_files-local.
@@ -131,7 +131,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
LIKE LINE OF lt_fields.
CONCATENATE LINES OF it_postdata INTO lv_string.
- lt_fields = lcl_html_action_utils=>parse_fields( lv_string ).
+ lt_fields = zcl_abapgit_html_action_utils=>parse_fields( lv_string ).
IF lines( lt_fields ) = 0.
zcx_abapgit_exception=>raise( 'process_stage_list: empty list' ).
@@ -147,7 +147,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
ev_filename = ls_file-filename ).
CASE -value.
- WHEN lcl_stage=>c_method-add.
+ WHEN zcl_abapgit_stage=>c_method-add.
READ TABLE ms_files-local ASSIGNING
WITH KEY file-path = ls_file-path
file-filename = ls_file-filename.
@@ -155,13 +155,13 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
io_stage->add( iv_path = -file-path
iv_filename = -file-filename
iv_data = -file-data ).
- WHEN lcl_stage=>c_method-ignore.
+ WHEN zcl_abapgit_stage=>c_method-ignore.
io_stage->ignore( iv_path = ls_file-path
iv_filename = ls_file-filename ).
- WHEN lcl_stage=>c_method-rm.
+ WHEN zcl_abapgit_stage=>c_method-rm.
io_stage->rm( iv_path = ls_file-path
iv_filename = ls_file-filename ).
- WHEN lcl_stage=>c_method-skip.
+ WHEN zcl_abapgit_stage=>c_method-skip.
" Do nothing
WHEN OTHERS.
zcx_abapgit_exception=>raise( |process_stage_list: unknown method { -value }| ).
@@ -246,8 +246,10 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
CASE iv_context.
WHEN 'local'.
- lv_param = lcl_html_action_utils=>file_encode( iv_key = mo_repo->get_key( )
- ig_file = is_file ).
+ lv_param = zcl_abapgit_html_action_utils=>file_encode(
+ iv_key = mo_repo->get_key( )
+ ig_file = is_file ).
+
lv_filename = zcl_abapgit_html=>a(
iv_txt = lv_filename
iv_act = |{ zif_abapgit_definitions=>gc_action-go_diff }?{ lv_param }| ).
diff --git a/src/zabapgit_repo.prog.abap b/src/zabapgit_repo.prog.abap
index 8ba23f1a7..69291ad17 100644
--- a/src/zabapgit_repo.prog.abap
+++ b/src/zabapgit_repo.prog.abap
@@ -137,7 +137,7 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL.
rebuild_local_checksums REDEFINITION,
push
IMPORTING is_comment TYPE zif_abapgit_definitions=>ty_comment
- io_stage TYPE REF TO lcl_stage
+ io_stage TYPE REF TO zcl_abapgit_stage
RAISING zcx_abapgit_exception,
get_unnecessary_local_objs
RETURNING VALUE(rt_unnecessary_local_objects) TYPE zif_abapgit_definitions=>ty_tadir_tt
@@ -153,7 +153,7 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL.
METHODS:
handle_stage_ignore
- IMPORTING io_stage TYPE REF TO lcl_stage
+ IMPORTING io_stage TYPE REF TO zcl_abapgit_stage
RAISING zcx_abapgit_exception,
actualize_head_branch
RAISING zcx_abapgit_exception,
diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap
index 73ce6dea7..bcf7b8248 100644
--- a/src/zabapgit_repo_impl.prog.abap
+++ b/src/zabapgit_repo_impl.prog.abap
@@ -223,14 +223,14 @@ CLASS lcl_repo_online IMPLEMENTATION.
DATA: lv_add TYPE abap_bool,
lo_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit,
- lt_stage TYPE lcl_stage=>ty_stage_tt.
+ lt_stage TYPE zcl_abapgit_stage=>ty_stage_tt.
FIELD-SYMBOLS: LIKE LINE OF lt_stage.
lo_dot_abapgit = get_dot_abapgit( ).
lt_stage = io_stage->get_all( ).
- LOOP AT lt_stage ASSIGNING WHERE method = lcl_stage=>c_method-ignore.
+ LOOP AT lt_stage ASSIGNING WHERE method = zcl_abapgit_stage=>c_method-ignore.
lo_dot_abapgit->add_ignore(
iv_path = -file-path
diff --git a/src/zabapgit_services_git.prog.abap b/src/zabapgit_services_git.prog.abap
index 042c51098..ed4e3be90 100644
--- a/src/zabapgit_services_git.prog.abap
+++ b/src/zabapgit_services_git.prog.abap
@@ -50,7 +50,7 @@ CLASS lcl_services_git DEFINITION FINAL.
CLASS-METHODS commit
IMPORTING io_repo TYPE REF TO lcl_repo_online
is_commit TYPE ty_commit_fields
- io_stage TYPE REF TO lcl_stage
+ io_stage TYPE REF TO zcl_abapgit_stage
RAISING zcx_abapgit_exception zcx_abapgit_cancel.
ENDCLASS. " lcl_services_git
diff --git a/src/zabapgit_stage.prog.abap b/src/zabapgit_stage.prog.abap
index da487e32f..41c8521be 100644
--- a/src/zabapgit_stage.prog.abap
+++ b/src/zabapgit_stage.prog.abap
@@ -2,195 +2,4 @@
*& Include ZABAPGIT_STAGE
*&---------------------------------------------------------------------*
-"! keep the list of staged files, independent of repository and branch
-CLASS lcl_stage DEFINITION FINAL.
-
- PUBLIC SECTION.
- TYPES: ty_method TYPE c LENGTH 1.
-
- CONSTANTS: BEGIN OF c_method,
- add TYPE ty_method VALUE 'A',
- rm TYPE ty_method VALUE 'R',
- ignore TYPE ty_method VALUE 'I',
- skip TYPE ty_method VALUE '?',
- END OF c_method.
-
- TYPES: BEGIN OF ty_stage,
- file TYPE zif_abapgit_definitions=>ty_file,
- method TYPE ty_method,
- END OF ty_stage.
-
- TYPES: ty_stage_tt TYPE SORTED TABLE OF ty_stage
- WITH UNIQUE KEY file-path file-filename.
-
- CLASS-METHODS method_description
- IMPORTING iv_method TYPE ty_method
- RETURNING VALUE(rv_description) TYPE string
- RAISING zcx_abapgit_exception.
-
- METHODS:
- constructor
- IMPORTING iv_branch_name TYPE string
- iv_branch_sha1 TYPE zif_abapgit_definitions=>ty_sha1
- iv_merge_source TYPE zif_abapgit_definitions=>ty_sha1 OPTIONAL,
- get_branch_name
- RETURNING VALUE(rv_branch) TYPE string,
- get_branch_sha1
- RETURNING VALUE(rv_branch) TYPE zif_abapgit_definitions=>ty_sha1,
- add
- IMPORTING iv_path TYPE zif_abapgit_definitions=>ty_file-path
- iv_filename TYPE zif_abapgit_definitions=>ty_file-filename
- iv_data TYPE xstring
- RAISING zcx_abapgit_exception,
- reset
- IMPORTING iv_path TYPE zif_abapgit_definitions=>ty_file-path
- iv_filename TYPE zif_abapgit_definitions=>ty_file-filename
- RAISING zcx_abapgit_exception,
- reset_all
- RAISING zcx_abapgit_exception,
- rm
- IMPORTING iv_path TYPE zif_abapgit_definitions=>ty_file-path
- iv_filename TYPE zif_abapgit_definitions=>ty_file-filename
- RAISING zcx_abapgit_exception,
- ignore
- IMPORTING iv_path TYPE zif_abapgit_definitions=>ty_file-path
- iv_filename TYPE zif_abapgit_definitions=>ty_file-filename
- RAISING zcx_abapgit_exception,
- lookup
- IMPORTING iv_path TYPE zif_abapgit_definitions=>ty_file-path
- iv_filename TYPE zif_abapgit_definitions=>ty_file-filename
- RETURNING VALUE(rv_method) TYPE ty_method,
- get_merge_source
- RETURNING VALUE(rv_source) TYPE zif_abapgit_definitions=>ty_sha1,
- count
- RETURNING VALUE(rv_count) TYPE i,
- get_all
- RETURNING VALUE(rt_stage) TYPE ty_stage_tt.
-
- PRIVATE SECTION.
- DATA: mt_stage TYPE ty_stage_tt,
- mv_branch_name TYPE string,
- mv_branch_sha1 TYPE zif_abapgit_definitions=>ty_sha1,
- mv_merge_source TYPE zif_abapgit_definitions=>ty_sha1.
-
- METHODS:
- append
- IMPORTING iv_path TYPE zif_abapgit_definitions=>ty_file-path
- iv_filename TYPE zif_abapgit_definitions=>ty_file-filename
- iv_method TYPE ty_method
- iv_data TYPE xstring OPTIONAL
- RAISING zcx_abapgit_exception.
-
-ENDCLASS. "lcl_stage DEFINITION
-
-CLASS lcl_stage IMPLEMENTATION.
-
- METHOD constructor.
- mv_branch_name = iv_branch_name.
- mv_branch_sha1 = iv_branch_sha1.
- mv_merge_source = iv_merge_source.
- ENDMETHOD.
-
- METHOD get_branch_name.
- rv_branch = mv_branch_name.
- ENDMETHOD.
-
- METHOD get_merge_source.
- rv_source = mv_merge_source.
- ENDMETHOD.
-
- METHOD get_branch_sha1.
- rv_branch = mv_branch_sha1.
- ENDMETHOD.
-
- METHOD lookup.
-
- DATA ls_stage LIKE LINE OF mt_stage.
-
-
- READ TABLE mt_stage INTO ls_stage
- WITH KEY file-path = iv_path
- file-filename = iv_filename.
- IF sy-subrc = 0.
- rv_method = ls_stage-method.
- ENDIF.
-
- ENDMETHOD. "lookup
-
- METHOD get_all.
- rt_stage = mt_stage.
- ENDMETHOD. "get_all
-
- METHOD append.
-
- DATA: ls_stage LIKE LINE OF mt_stage.
-
- FIELD-SYMBOLS: LIKE LINE OF mt_stage.
-
-
- READ TABLE mt_stage WITH KEY
- file-path = iv_path
- file-filename = iv_filename
- ASSIGNING .
- IF sy-subrc = 0.
- -file-data = iv_data.
- -method = iv_method.
- ELSE.
- ls_stage-file-path = iv_path.
- ls_stage-file-filename = iv_filename.
- ls_stage-file-data = iv_data.
- ls_stage-method = iv_method.
- INSERT ls_stage INTO TABLE mt_stage.
- ENDIF.
-
- ENDMETHOD. "append
-
- METHOD method_description.
-
- CASE iv_method.
- WHEN c_method-add.
- rv_description = 'add'.
- WHEN c_method-rm.
- rv_description = 'rm'.
- WHEN c_method-ignore.
- rv_description = 'ignore' ##NO_TEXT.
- WHEN OTHERS.
- zcx_abapgit_exception=>raise( 'unknown staging method type' ).
- ENDCASE.
-
- ENDMETHOD. "method_description
-
- METHOD add.
- append( iv_path = iv_path
- iv_filename = iv_filename
- iv_method = c_method-add
- iv_data = iv_data ).
- ENDMETHOD. "add
-
- METHOD reset.
- DELETE mt_stage WHERE file-path = iv_path
- AND file-filename = iv_filename.
- ASSERT sy-subrc = 0.
- ENDMETHOD. "reset
-
- METHOD reset_all.
- CLEAR mt_stage.
- ENDMETHOD. "reset_all
-
- METHOD rm.
- append( iv_path = iv_path
- iv_filename = iv_filename
- iv_method = c_method-rm ).
- ENDMETHOD. "rm
-
- METHOD ignore.
- append( iv_path = iv_path
- iv_filename = iv_filename
- iv_method = c_method-ignore ).
- ENDMETHOD. "ignore
-
- METHOD count.
- rv_count = lines( mt_stage ).
- ENDMETHOD. "count
-
-ENDCLASS.
+* todo, include to be deleted
diff --git a/src/zabapgit_syntax_highlighter.prog.abap b/src/zabapgit_syntax_highlighter.prog.abap
index 27c883e37..5e6f8f6e2 100644
--- a/src/zabapgit_syntax_highlighter.prog.abap
+++ b/src/zabapgit_syntax_highlighter.prog.abap
@@ -2,1254 +2,4 @@
*& Include ZABAPGIT_SYNTAX_HIGHLIGHTER
*&---------------------------------------------------------------------*
-CLASS ltcl_syntax_cases DEFINITION DEFERRED.
-CLASS ltcl_syntax_basic_logic DEFINITION DEFERRED.
-
-CLASS lcl_syntax_abap DEFINITION DEFERRED.
-CLASS lcl_syntax_xml DEFINITION DEFERRED.
-
-*----------------------------------------------------------------------*
-* CLASS lcl_syntax_highlighter DEFINITION
-*----------------------------------------------------------------------*
-CLASS lcl_syntax_highlighter DEFINITION ABSTRACT
- FRIENDS ltcl_syntax_cases ltcl_syntax_basic_logic.
-
- PUBLIC SECTION.
-
- CLASS-METHODS create
- IMPORTING iv_filename TYPE string
- RETURNING VALUE(ro_instance) TYPE REF TO lcl_syntax_highlighter.
-
- METHODS process_line
- IMPORTING iv_line TYPE string
- RETURNING VALUE(rv_line) TYPE string.
-
- PROTECTED SECTION.
-
- TYPES:
- BEGIN OF ty_match,
- token TYPE char1, " Type of matches
- offset TYPE i, " Beginning position of the string that should be formatted
- length TYPE i, " Length of the string that should be formatted
- text_tag TYPE string, " Type of text tag
- END OF ty_match.
-
- TYPES:
- ty_match_tt TYPE STANDARD TABLE OF ty_match WITH DEFAULT KEY.
-
- TYPES:
- BEGIN OF ty_rule,
- regex TYPE REF TO cl_abap_regex,
- token TYPE char1,
- style TYPE string,
- END OF ty_rule.
-
- CONSTANTS c_token_none TYPE c VALUE '.'.
-
- DATA mt_rules TYPE STANDARD TABLE OF ty_rule.
-
- METHODS add_rule
- IMPORTING
- iv_regex TYPE string
- iv_token TYPE c
- iv_style TYPE string.
-
- METHODS parse_line
- IMPORTING iv_line TYPE string
- EXPORTING et_matches TYPE ty_match_tt.
-
- METHODS order_matches ABSTRACT
- IMPORTING iv_line TYPE string
- CHANGING ct_matches TYPE ty_match_tt.
-
- METHODS extend_matches
- IMPORTING iv_line TYPE string
- CHANGING ct_matches TYPE ty_match_tt.
-
- METHODS format_line
- IMPORTING iv_line TYPE string
- it_matches TYPE ty_match_tt
- RETURNING VALUE(rv_line) TYPE string.
-
- METHODS apply_style
- IMPORTING iv_line TYPE string
- iv_class TYPE string
- RETURNING VALUE(rv_line) TYPE string.
-
-ENDCLASS. " lcl_syntax_highlighter DEFINITION
-
-*----------------------------------------------------------------------*
-* CLASS lcl_syntax_abap DEFINITION
-*----------------------------------------------------------------------*
-CLASS lcl_syntax_abap DEFINITION INHERITING FROM lcl_syntax_highlighter FINAL.
-
- PUBLIC SECTION.
-
- CLASS-METHODS class_constructor.
- METHODS constructor.
-
- CONSTANTS:
- BEGIN OF c_css,
- keyword TYPE string VALUE 'keyword', "#EC NOTEXT
- text TYPE string VALUE 'text', "#EC NOTEXT
- comment TYPE string VALUE 'comment', "#EC NOTEXT
- END OF c_css,
-
- BEGIN OF c_token,
- keyword TYPE c VALUE 'K', "#EC NOTEXT
- text TYPE c VALUE 'T', "#EC NOTEXT
- comment TYPE c VALUE 'C', "#EC NOTEXT
- END OF c_token,
-
- BEGIN OF c_regex,
- comment TYPE string VALUE '##|"|^\*',
- text TYPE string VALUE '`|''|\||\{|\}',
- keyword TYPE string VALUE '&&|\b[-_a-z0-9]+\b',
- END OF c_regex.
-
- PROTECTED SECTION.
-
- CLASS-DATA gt_keywords TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line.
-
- CLASS-METHODS init_keywords.
- CLASS-METHODS is_keyword
- IMPORTING iv_chunk TYPE string
- RETURNING VALUE(rv_yes) TYPE abap_bool.
-
- METHODS order_matches REDEFINITION.
- METHODS parse_line REDEFINITION.
-
-ENDCLASS. " lcl_syntax_abap DEFINITION
-
-*----------------------------------------------------------------------*
-* CLASS lcl_syntax_xml DEFINITION
-*----------------------------------------------------------------------*
-CLASS lcl_syntax_xml DEFINITION INHERITING FROM lcl_syntax_highlighter FINAL.
-
- PUBLIC SECTION.
-
- METHODS constructor.
-
- CONSTANTS:
- BEGIN OF c_css,
- xml_tag TYPE string VALUE 'xml_tag', "#EC NOTEXT
- attr TYPE string VALUE 'attr', "#EC NOTEXT
- attr_val TYPE string VALUE 'attr_val', "#EC NOTEXT
- END OF c_css,
-
- BEGIN OF c_token,
- xml_tag TYPE c VALUE 'X', "#EC NOTEXT
- attr TYPE c VALUE 'A', "#EC NOTEXT
- attr_val TYPE c VALUE 'V', "#EC NOTEXT
- END OF c_token,
-
- BEGIN OF c_regex,
- xml_tag TYPE string VALUE '[<>]', "#EC NOTEXT
- attr TYPE string VALUE '\s[-a-z:_0-9]+\s*(?==)', "#EC NOTEXT
- attr_val TYPE string VALUE '["''][^''"]+[''"]', "#EC NOTEXT
- END OF c_regex.
-
- PROTECTED SECTION.
-
- METHODS order_matches REDEFINITION.
-
-ENDCLASS. " lcl_syntax_xml DEFINITION
-
-*----------------------------------------------------------------------*
-* CLASS lcl_syntax_highlighter IMPLEMENTATION
-*----------------------------------------------------------------------*
-* Implementation of syntax highligther for ABAP source code
-*----------------------------------------------------------------------*
-
-CLASS lcl_syntax_highlighter IMPLEMENTATION.
-
- METHOD create.
-
- " Create instance of highighter dynamically dependent on syntax type
- IF iv_filename CP '*.abap'.
- CREATE OBJECT ro_instance TYPE lcl_syntax_abap.
- ELSEIF iv_filename CP '*.xml'.
- CREATE OBJECT ro_instance TYPE lcl_syntax_xml.
- ELSE.
- CLEAR ro_instance.
- ENDIF.
-
- ENDMETHOD. " create.
-
- METHOD add_rule.
-
- DATA ls_rule LIKE LINE OF mt_rules.
-
- CREATE OBJECT ls_rule-regex
- EXPORTING
- pattern = iv_regex
- ignore_case = abap_true.
-
- ls_rule-token = iv_token.
- ls_rule-style = iv_style.
- APPEND ls_rule TO mt_rules.
-
- ENDMETHOD.
-
- METHOD parse_line.
-
- DATA:
- lo_regex TYPE REF TO cl_abap_regex,
- lo_matcher TYPE REF TO cl_abap_matcher,
- lt_result TYPE match_result_tab,
- ls_match TYPE ty_match.
-
- FIELD-SYMBOLS:
- LIKE LINE OF mt_rules,
- TYPE match_result.
-
- CLEAR et_matches.
-
- " Process syntax-dependent regex table and find all matches
- LOOP AT mt_rules ASSIGNING .
- lo_regex = -regex.
- lo_matcher = lo_regex->create_matcher( text = iv_line ).
- lt_result = lo_matcher->find_all( ).
-
- " Save matches into custom table with predefined tokens
- LOOP AT lt_result ASSIGNING .
- CLEAR: ls_match.
- ls_match-token = -token.
- ls_match-offset = -offset.
- ls_match-length = -length.
- APPEND ls_match TO et_matches.
- ENDLOOP.
- ENDLOOP.
-
- ENDMETHOD. " parse_line
-
- METHOD extend_matches.
-
- DATA:
- lv_line_len TYPE i,
- lv_last_pos TYPE i VALUE 0,
- lv_length TYPE i,
- ls_match TYPE ty_match.
-
- FIELD-SYMBOLS TYPE ty_match.
-
- lv_line_len = strlen( iv_line ).
-
- SORT ct_matches BY offset.
-
- " Add entries refering to parts of text that should not be formatted
- LOOP AT ct_matches ASSIGNING .
- IF -offset > lv_last_pos.
- lv_length = -offset - lv_last_pos.
- ls_match-token = c_token_none.
- ls_match-offset = lv_last_pos.
- ls_match-length = lv_length.
- INSERT ls_match INTO ct_matches INDEX sy-tabix.
- ENDIF.
- lv_last_pos = -offset + -length.
- ENDLOOP.
-
- " Add remainder of the string
- IF lv_line_len > lv_last_pos.
- lv_length = lv_line_len - lv_last_pos.
- ls_match-token = c_token_none.
- ls_match-offset = lv_last_pos.
- ls_match-length = lv_length.
- APPEND ls_match TO ct_matches.
- ENDIF.
-
- ENDMETHOD. " extend_matches
-
- METHOD format_line.
-
- DATA:
- lv_chunk TYPE string,
- ls_rule LIKE LINE OF mt_rules.
-
- FIELD-SYMBOLS TYPE ty_match.
-
- LOOP AT it_matches ASSIGNING .
- lv_chunk = substring( val = iv_line off = -offset len = -length ).
-
- CLEAR ls_rule. " Failed read equals no style
- READ TABLE mt_rules INTO ls_rule WITH KEY token = -token.
-
- lv_chunk = me->apply_style( iv_line = lv_chunk
- iv_class = ls_rule-style ).
-
- rv_line = rv_line && lv_chunk.
- ENDLOOP.
-
- ENDMETHOD. " format_line
-
- METHOD apply_style.
-
- DATA lv_escaped TYPE string.
-
- lv_escaped = escape( val = iv_line format = cl_abap_format=>e_html_attr ).
- IF iv_class IS NOT INITIAL.
- rv_line = |{ lv_escaped }|.
- ELSE.
- rv_line = lv_escaped.
- ENDIF.
-
- ENDMETHOD. " apply_style
-
- METHOD process_line.
-
- DATA: lt_matches TYPE ty_match_tt.
-
- IF strlen( iv_line ) = 0.
- RETURN.
- ENDIF.
-
- me->parse_line( EXPORTING iv_line = iv_line
- IMPORTING et_matches = lt_matches ).
-
- me->order_matches( EXPORTING iv_line = iv_line
- CHANGING ct_matches = lt_matches ).
-
- me->extend_matches( EXPORTING iv_line = iv_line
- CHANGING ct_matches = lt_matches ).
-
- rv_line = me->format_line( iv_line = iv_line
- it_matches = lt_matches ).
-
- ENDMETHOD. " process_line
-
-ENDCLASS. " lcl_syntax_highlighter IMPLEMENTATION
-
-*----------------------------------------------------------------------*
-* CLASS lcl_syntax_abap IMPLEMENTATION
-*----------------------------------------------------------------------*
-* Implementation of syntax highligther for XML source code
-*----------------------------------------------------------------------*
-
-CLASS lcl_syntax_abap IMPLEMENTATION.
-
- METHOD class_constructor.
-
- init_keywords( ).
-
- ENDMETHOD. " class_constructor
-
- METHOD is_keyword.
-
- DATA lv_str TYPE string.
-
- lv_str = to_upper( iv_chunk ).
- READ TABLE gt_keywords WITH KEY table_line = lv_str TRANSPORTING NO FIELDS.
- rv_yes = boolc( sy-subrc = 0 ).
-
- ENDMETHOD. " is_keyword.
-
- 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-comment
- iv_token = c_token-comment
- iv_style = c_css-comment ).
-
- add_rule( iv_regex = c_regex-text
- iv_token = c_token-text
- iv_style = c_css-text ).
-
- ENDMETHOD. " constructor
-
- METHOD init_keywords.
-
- DATA: lv_keywords TYPE string,
- lt_keywords TYPE STANDARD TABLE OF string.
-
- lv_keywords =
- '&&|?TO|ABAP-SOURCE|ABBREVIATED|ABS|ABSTRACT|ACCEPT|ACCEPTING|ACCESSPOLICY' &&
- '|ACCORDING|ACOS|ACTIVATION|ACTUAL|ADD|ADD-CORRESPONDING|ADJACENT|AFTER|ALIAS' &&
- '|ALIASES|ALIGN|ALL|ALLOCATE|ALPHA|ANALYSIS|ANALYZER|AND|ANY|APPEND|APPENDAGE' &&
- '|APPENDING|APPLICATION|ARCHIVE|AREA|ARITHMETIC|AS|ASCENDING|ASIN|ASPECT|ASSERT' &&
- '|ASSIGN|ASSIGNED|ASSIGNING|ASSOCIATION|ASYNCHRONOUS|AT|ATAN|ATTRIBUTES|AUTHORITY' &&
- '|AUTHORITY-CHECK|AVG|BACK|BACKGROUND|BACKUP|BACKWARD|BADI|BASE|BEFORE|BEGIN' &&
- '|BETWEEN|BIG|BINARY|BINDING|BIT|BIT-AND|BIT-NOT|BIT-OR|BIT-XOR|BLACK|BLANK' &&
- '|BLANKS|BLOB|BLOCK|BLOCKS|BLUE|BOUND|BOUNDARIES|BOUNDS|BOXED|BREAK-POINT|BT' &&
- '|BUFFER|BY|BYPASSING|BYTE|BYTE-CA|BYTE-CN|BYTE-CO|BYTE-CS|BYTE-NA|BYTE-NS' &&
- '|BYTE-ORDER|C|CA|CALL|CALLING|CASE|CAST|CASTING|CATCH|CEIL|CENTER|CENTERED' &&
- '|CHAIN|CHAIN-INPUT|CHAIN-REQUEST|CHANGE|CHANGING|CHANNELS|CHARACTER|CHARLEN' &&
- '|CHAR-TO-HEX|CHECK|CHECKBOX|CI_|CIRCULAR|CLASS|CLASS-CODING|CLASS-DATA' &&
- '|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|CLEANUP|CLEAR|CLIENT|CLOB|CLOCK|CLOSE' &&
- '|CN|CNT|CO|COALESCE|CODE|CODING|COL_BACKGROUND|COL_GROUP|COL_HEADING|COL_KEY' &&
- '|COL_NEGATIVE|COL_NORMAL|COL_POSITIVE|COL_TOTAL|COLLECT|COLOR|COLUMN|COLUMNS' &&
- '|COMMENT|COMMENTS|COMMIT|COMMON|COMMUNICATION|COMPARING|COMPONENT|COMPONENTS' &&
- '|COMPRESSION|COMPUTE|CONCAT|CONCATENATE|COND|CONDENSE|CONDITION|CONNECT' &&
- '|CONNECTION|CONSTANTS|CONTEXT|CONTEXTS|CONTINUE|CONTROL|CONTROLS|CONV|CONVERSION' &&
- '|CONVERT|COPIES|COPY|CORRESPONDING|COS|COSH|COUNT|COUNTRY|COVER|CP|CPI|CREATE' &&
- '|CREATING|CRITICAL|CS|CURRENCY|CURRENCY_CONVERSION|CURRENT|CURSOR|CURSOR-SELECTION' &&
- '|CUSTOMER|CUSTOMER-FUNCTION|DANGEROUS|DATA|DATABASE|DATAINFO|DATASET|DATE' &&
- '|DAYLIGHT|DBMAXLEN|DD/MM/YY|DD/MM/YYYY|DDMMYY|DEALLOCATE|DECIMAL_SHIFT|DECIMALS' &&
- '|DECLARATIONS|DEEP|DEFAULT|DEFERRED|DEFINE|DEFINING|DEFINITION|DELETE|DELETING' &&
- '|DEMAND|DEPARTMENT|DESCENDING|DESCRIBE|DESTINATION|DETAIL|DIALOG|DIRECTORY' &&
- '|DISCONNECT|DISPLAY|DISPLAY-MODE|DISTANCE|DISTINCT|DIV|DIVIDE|DIVIDE-CORRESPONDING' &&
- '|DIVISION|DO|DUMMY|DUPLICATE|DUPLICATES|DURATION|DURING|DYNAMIC|DYNPRO|E|EACH' &&
- '|EDIT|EDITOR-CALL|ELSE|ELSEIF|EMPTY|ENABLED|ENABLING|ENCODING|END|ENDAT|ENDCASE' &&
- '|ENDCATCH|ENDCHAIN|ENDCLASS|ENDDO|ENDENHANCEMENT|END-ENHANCEMENT-SECTION' &&
- '|ENDEXEC|ENDFOR|ENDFORM|ENDFUNCTION|ENDIAN|ENDIF|ENDING|ENDINTERFACE' &&
- '|END-LINES|ENDLOOP|ENDMETHOD|ENDMODULE|END-OF-DEFINITION|END-OF-FILE' &&
- '|END-OF-PAGE|END-OF-SELECTION|ENDON|ENDPROVIDE|ENDSELECT|ENDTRY|ENDWHILE' &&
- '|ENGINEERING|ENHANCEMENT|ENHANCEMENT-POINT|ENHANCEMENTS|ENHANCEMENT-SECTION' &&
- '|ENTRIES|ENTRY|ENVIRONMENT|EQ|EQUAL|EQUIV|ERRORMESSAGE|ERRORS|ESCAPE|ESCAPING' &&
- '|EVENT|EVENTS|EXACT|EXCEPT|EXCEPTION|EXCEPTIONS|EXCEPTION-TABLE|EXCLUDE|EXCLUDING' &&
- '|EXEC|EXECUTE|EXISTS|EXIT|EXIT-COMMAND|EXP|EXPAND|EXPANDING|EXPIRATION|EXPLICIT' &&
- '|EXPONENT|EXPORT|EXPORTING|EXTEND|EXTENDED|EXTENSION|EXTRACT|FAIL|FETCH|FIELD' &&
- '|FIELD-GROUPS|FIELDS|FIELD-SYMBOL|FIELD-SYMBOLS|FILE|FILTER|FILTERS|FILTER-TABLE' &&
- '|FINAL|FIND|FIRST|FIRST-LINE|FIXED-POINT|FKEQ|FKGE|FLOOR|FLUSH|FONT|FOR|FORM' &&
- '|FORMAT|FORWARD|FOUND|FRAC|FRAME|FRAMES|FREE|FRIENDS|FROM|FUNCTION|FUNCTIONALITY' &&
- '|FUNCTION-POOL|FURTHER|GAPS|GE|GENERATE|GET|GIVING|GKEQ|GKGE|GLOBAL|GRANT|GREATER' &&
- '|GREEN|GROUP|GROUPS|GT|HANDLE|HANDLER|HARMLESS|HASHED|HAVING|HDB|HEADER|HEADERS' &&
- '|HEADING|HEAD-LINES|HELP-ID|HELP-REQUEST|HIDE|HIGH|HINT|HOLD|HOTSPOT|I|ICON|ID' &&
- '|IDENTIFICATION|IDENTIFIER|IDS|IF|IGNORE|IGNORING|IMMEDIATELY|IMPLEMENTATION' &&
- '|IMPLEMENTATIONS|IMPLEMENTED|IMPLICIT|IMPORT|IMPORTING|IN|INACTIVE|INCL|INCLUDE' &&
- '|INCLUDES|INCLUDING|INCREMENT|INDEX|INDEX-LINE|INFOTYPES|INHERITING|INIT|INITIAL' &&
- '|INITIALIZATION|INNER|INOUT|INPUT|INSERT|INSTANCES|INTENSIFIED|INTERFACE' &&
- '|INTERFACE-POOL|INTERFACES|INTERNAL|INTERVALS|INTO|INVERSE|INVERTED-DATE|IS' &&
- '|ISO|ITERATOR|ITNO|JOB|JOIN|KEEP|KEEPING|KERNEL|KEY|KEYS|KEYWORDS|KIND' &&
- '|LANGUAGE|LAST|LATE|LAYOUT|LE|LEADING|LEAVE|LEFT|LEFT-JUSTIFIED|LEFTPLUS' &&
- '|LEFTSPACE|LEGACY|LENGTH|LESS|LET|LEVEL|LEVELS|LIKE|LINE|LINE-COUNT|LINEFEED' &&
- '|LINES|LINE-SELECTION|LINE-SIZE|LIST|LISTBOX|LIST-PROCESSING|LITTLE|LLANG' &&
- '|LOAD|LOAD-OF-PROGRAM|LOB|LOCAL|LOCALE|LOCATOR|LOG|LOG10|LOGFILE|LOGICAL' &&
- '|LOG-POINT|LONG|LOOP|LOW|LOWER|LPAD|LPI|LT|M|MAIL|MAIN|MAJOR-ID|MAPPING|MARGIN' &&
- '|MARK|MASK|MATCH|MATCHCODE|MAX|MAXIMUM|MEDIUM|MEMBERS|MEMORY|MESH|MESSAGE' &&
- '|MESSAGE-ID|MESSAGES|MESSAGING|METHOD|METHODS|MIN|MINIMUM|MINOR-ID|MM/DD/YY' &&
- '|MM/DD/YYYY|MMDDYY|MOD|MODE|MODIF|MODIFIER|MODIFY|MODULE|MOVE|MOVE-CORRESPONDING' &&
- '|MULTIPLY|MULTIPLY-CORRESPONDING|NA|NAME|NAMETAB|NATIVE|NB|NE|NESTED|NESTING' &&
- '|NEW|NEW-LINE|NEW-PAGE|NEW-SECTION|NEXT|NO|NODE|NODES|NO-DISPLAY' &&
- '|NO-EXTENSION|NO-GAP|NO-GAPS|NO-GROUPING|NO-HEADING|NON-UNICODE|NON-UNIQUE' &&
- '|NO-SCROLLING|NO-SIGN|NOT|NO-TITLE|NO-TOPOFPAGE|NO-ZERO|NP|NS|NULL|NUMBER' &&
- '|NUMOFCHAR|O|OBJECT|OBJECTS|OBLIGATORY|OCCURRENCE|OCCURRENCES|OCCURS|OF|OFF' &&
- '|OFFSET|OLE|ON|ONLY|OPEN|OPTION|OPTIONAL|OPTIONS|OR|ORDER|OTHER|OTHERS|OUT' &&
- '|OUTER|OUTPUT|OUTPUT-LENGTH|OVERFLOW|OVERLAY|PACK|PACKAGE|PAD|PADDING|PAGE' &&
- '|PAGES|PARAMETER|PARAMETERS|PARAMETER-TABLE|PART|PARTIALLY|PATTERN|PERCENTAGE' &&
- '|PERFORM|PERFORMING|PERSON|PF|PF-STATUS|PINK|PLACES|POOL|POS_HIGH|POS_LOW' &&
- '|POSITION|PRAGMAS|PRECOMPILED|PREFERRED|PRESERVING|PRIMARY|PRINT|PRINT-CONTROL' &&
- '|PRIORITY|PRIVATE|PROCEDURE|PROCESS|PROGRAM|PROPERTY|PROTECTED|PROVIDE|PUBLIC' &&
- '|PUSHBUTTON|PUT|QUEUE-ONLY|QUICKINFO|RADIOBUTTON|RAISE|RAISING|RANGE|RANGES' &&
- '|RAW|READ|READER|READ-ONLY|RECEIVE|RECEIVED|RECEIVER|RECEIVING|RED|REDEFINITION' &&
- '|REDUCE|REDUCED|REF|REFERENCE|REFRESH|REGEX|REJECT|REMOTE|RENAMING|REPLACE' &&
- '|REPLACEMENT|REPLACING|REPORT|REQUEST|REQUESTED|RESERVE|RESET|RESOLUTION' &&
- '|RESPECTING|RESPONSIBLE|RESULT|RESULTS|RESUMABLE|RESUME|RETRY|RETURN|RETURNCODE' &&
- '|RETURNING|RIGHT|RIGHT-JUSTIFIED|RIGHTPLUS|RIGHTSPACE|RISK|RMC_COMMUNICATION_FAILURE' &&
- '|RMC_INVALID_STATUS|RMC_SYSTEM_FAILURE|ROLE|ROLLBACK|ROUND|ROWS|RTTI|RUN|SAP' &&
- '|SAP-SPOOL|SAVING|SCALE_PRESERVING|SCALE_PRESERVING_SCIENTIFIC|SCAN|SCIENTIFIC' &&
- '|SCIENTIFIC_WITH_LEADING_ZERO|SCREEN|SCROLL|SCROLL-BOUNDARY|SCROLLING|SEARCH' &&
- '|SECONDARY|SECONDS|SECTION|SELECT|SELECTION|SELECTIONS|SELECTION-SCREEN|SELECTION-SET' &&
- '|SELECTION-SETS|SELECTION-TABLE|SELECT-OPTIONS|SELECTOR|SEND|SEPARATE|SEPARATED|SET' &&
- '|SHARED|SHIFT|SHORT|SHORTDUMP-ID|SIGN|SIGN_AS_POSTFIX|SIMPLE|SIN|SINGLE|SINH|SIZE' &&
- '|SKIP|SKIPPING|SMART|SOME|SORT|SORTABLE|SORTED|SOURCE|SPACE|SPECIFIED|SPLIT|SPOOL' &&
- '|SPOTS|SQL|SQLSCRIPT|SQRT|STABLE|STAMP|STANDARD|STARTING|START-OF-SELECTION|STATE' &&
- '|STATEMENT|STATEMENTS|STATIC|STATICS|STATUSINFO|STEP-LOOP|STOP|STRLEN|STRUCTURE' &&
- '|STRUCTURES|STYLE|SUBKEY|SUBMATCHES|SUBMIT|SUBROUTINE|SUBSCREEN|SUBSTRING|SUBTRACT' &&
- '|SUBTRACT-CORRESPONDING|SUFFIX|SUM|SUMMARY|SUMMING|SUPPLIED|SUPPLY|SUPPRESS|SWITCH' &&
- '|SWITCHSTATES|SYMBOL|SYNCPOINTS|SYNTAX|SYNTAX-CHECK|SYNTAX-TRACE' &&
- '|SYSTEM-CALL|SYSTEM-EXCEPTIONS|SYSTEM-EXIT|TAB|TABBED|TABLE|TABLES|TABLEVIEW|TABSTRIP' &&
- '|TAN|TANH|TARGET|TASK|TASKS|TEST|TESTING|TEXT|TEXTPOOL|THEN|THROW|TIME|TIMES|TIMESTAMP' &&
- '|TIMEZONE|TITLE|TITLEBAR|TITLE-LINES|TO|TOKENIZATION|TOKENS|TOP-LINES|TOP-OF-PAGE' &&
- '|TRACE-FILE|TRACE-TABLE|TRAILING|TRANSACTION|TRANSFER|TRANSFORMATION|TRANSLATE' &&
- '|TRANSPORTING|TRMAC|TRUNC|TRUNCATE|TRUNCATION|TRY|TYPE|TYPE-POOL|TYPE-POOLS|TYPES' &&
- '|ULINE|UNASSIGN|UNDER|UNICODE|UNION|UNIQUE|UNIT|UNIT_CONVERSION|UNIX|UNPACK|UNTIL' &&
- '|UNWIND|UP|UPDATE|UPPER|USER|USER-COMMAND|USING|UTF-8|VALID|VALUE|VALUE-REQUEST|VALUES' &&
- '|VARY|VARYING|VERIFICATION-MESSAGE|VERSION|VIA|VIEW|VISIBLE|WAIT|WARNING|WHEN|WHENEVER' &&
- '|WHERE|WHILE|WIDTH|WINDOW|WINDOWS|WITH|WITH-HEADING|WITHOUT|WITH-TITLE|WORD|WORK' &&
- '|WRITE|WRITER|X|XML|XOR|XSD|XSTRLEN|YELLOW|YES|YYMMDD|Z|ZERO|ZONE'.
-
- SPLIT lv_keywords AT '|' INTO TABLE lt_keywords.
- gt_keywords = lt_keywords. " Hash table
-
- ENDMETHOD. " init_keywords
-
- METHOD parse_line. "REDEFINITION
-
- DATA lv_index TYPE i.
-
- FIELD-SYMBOLS LIKE LINE OF et_matches.
-
- super->parse_line( EXPORTING iv_line = iv_line
- IMPORTING et_matches = et_matches ).
-
- " Remove non-keywords
- LOOP AT et_matches ASSIGNING WHERE token = c_token-keyword.
- lv_index = sy-tabix.
- IF abap_false = is_keyword( substring( val = iv_line
- off = -offset
- len = -length ) ).
- DELETE et_matches INDEX lv_index.
- ENDIF.
- ENDLOOP.
-
- ENDMETHOD. " parse_line.
-
- METHOD order_matches.
-
- DATA:
- lv_index TYPE sy-tabix,
- lv_line_len TYPE i,
- lv_prev_token TYPE c.
-
- FIELD-SYMBOLS:
- TYPE ty_match,
- TYPE ty_match.
-
- SORT ct_matches BY offset.
-
- lv_line_len = strlen( iv_line ).
-
- LOOP AT ct_matches ASSIGNING .
- lv_index = sy-tabix.
-
- " Delete matches after open text match
- IF lv_prev_token = c_token-text AND -token <> c_token-text.
- DELETE ct_matches INDEX lv_index.
- CONTINUE.
- ENDIF.
-
- CASE -token.
- WHEN c_token-keyword.
- IF -offset > 0.
- " Delete match if keyword is part of structure or field symbol
- IF substring( val = iv_line off = ( -offset - 1 ) len = 1 ) CA '-<'.
- DELETE ct_matches INDEX lv_index.
- CONTINUE.
- ENDIF.
- ENDIF.
-
- WHEN c_token-comment.
- -length = lv_line_len - -offset.
- DELETE ct_matches FROM lv_index + 1.
- CONTINUE.
-
- WHEN c_token-text.
- -text_tag = substring( val = iv_line
- off = -offset
- len = -length ).
- IF lv_prev_token = c_token-text.
- IF -text_tag = -text_tag.
- -length = -offset + -length - -offset.
- CLEAR lv_prev_token.
- ELSEIF -text_tag = '}' AND -text_tag = '{'.
- -length = -offset - -offset - 1. " Shift } out of scope
- -offset = -offset + 1. " Shift { out of scope
- CLEAR lv_prev_token.
- ELSEIF -text_tag = '{'.
- -length = -offset - -offset.
- CLEAR lv_prev_token.
- ELSEIF -text_tag = '}'.
- -length = -offset - -offset.
- -offset = -offset + 1. " Shift } out of scope
- CLEAR lv_prev_token.
- ENDIF.
- DELETE ct_matches INDEX lv_index.
- CONTINUE.
- ENDIF.
-
- ENDCASE.
-
- lv_prev_token = -token.
- ASSIGN TO .
- ENDLOOP.
-
- ENDMETHOD. " order_matches.
-
-ENDCLASS. " lcl_syntax_abap IMPLEMENTATION
-
-*----------------------------------------------------------------------*
-* CLASS lcl_syntax_xml IMPLEMENTATION
-*----------------------------------------------------------------------*
-*
-*----------------------------------------------------------------------*
-CLASS lcl_syntax_xml IMPLEMENTATION.
-
- METHOD constructor.
-
- super->constructor( ).
-
- " Initialize instances of regular expressions
-
- add_rule( iv_regex = c_regex-xml_tag
- iv_token = c_token-xml_tag
- iv_style = c_css-xml_tag ).
-
- add_rule( iv_regex = c_regex-attr
- iv_token = c_token-attr
- iv_style = c_css-attr ).
-
- add_rule( iv_regex = c_regex-attr_val
- iv_token = c_token-attr_val
- iv_style = c_css-attr_val ).
-
- ENDMETHOD.
-
- METHOD order_matches.
-
- DATA:
- lv_index TYPE sy-tabix,
- lv_prev_token TYPE c,
- lv_state TYPE c VALUE 'O'. " O - for open tag; C - for closed tag;
-
- FIELD-SYMBOLS:
- TYPE ty_match,
- TYPE ty_match.
-
-
- SORT ct_matches BY offset.
-
- LOOP AT ct_matches ASSIGNING .
- lv_index = sy-tabix.
-
- CASE -token.
- WHEN c_token-xml_tag.
- -text_tag = substring( val = iv_line
- off = -offset
- len = |