Merge pull request #780 from larshp/issue_773

more refactoring, Issue 773
This commit is contained in:
Lars Hvam 2017-06-10 15:43:43 +02:00 committed by GitHub
commit 2bf3a96550
19 changed files with 315 additions and 180 deletions

View File

@ -1,23 +1,3 @@
*&---------------------------------------------------------------------*
*& Include ZABAPGIT_MACROS
*&---------------------------------------------------------------------*
* Macros
DEFINE _object_check_timestamp.
IF sy-subrc = 0 AND &1 IS NOT INITIAL AND &2 IS NOT INITIAL.
cl_abap_tstmp=>systemtstmp_syst2utc(
EXPORTING syst_date = &1
syst_time = &2
IMPORTING utc_tstmp = lv_ts ).
IF lv_ts < iv_timestamp.
rv_changed = abap_false. " Unchanged
ELSE.
rv_changed = abap_true.
RETURN.
ENDIF.
ELSE. " Not found? => changed
rv_changed = abap_true.
RETURN.
ENDIF.
END-OF-DEFINITION.

View File

@ -394,17 +394,17 @@ CLASS ltcl_news IMPLEMENTATION.
ls_log = lcl_news=>parse_line(
iv_line = '======'
iv_current_version = '1.26.01' ).
cl_abap_unit_assert=>assert_initial( act = ls_log ).
cl_abap_unit_assert=>assert_initial( ls_log ).
ls_log = lcl_news=>parse_line(
iv_line = ''
iv_current_version = '1.26.01' ).
cl_abap_unit_assert=>assert_initial( act = ls_log ).
cl_abap_unit_assert=>assert_initial( ls_log ).
ls_log = lcl_news=>parse_line(
iv_line = '------'
iv_current_version = '1.26.01' ).
cl_abap_unit_assert=>assert_initial( act = ls_log ).
cl_abap_unit_assert=>assert_initial( ls_log ).
CLEAR ls_log.
ls_log = lcl_news=>parse_line(

View File

@ -115,7 +115,7 @@ CLASS lcl_object_auth IMPLEMENTATION.
METHOD lif_object~jump.
DATA: field TYPE fieldname .
DATA: field TYPE fieldname.
field = ms_item-obj_name.

View File

@ -53,8 +53,7 @@ CLASS lcl_object_doma IMPLEMENTATION.
METHOD lif_object~has_changed_since.
DATA: lv_date TYPE dats,
lv_time TYPE tims,
lv_ts TYPE timestamp.
lv_time TYPE tims.
SELECT SINGLE as4date as4time FROM dd01l
INTO (lv_date, lv_time)
@ -62,7 +61,10 @@ CLASS lcl_object_doma IMPLEMENTATION.
AND as4local = 'A'
AND as4vers = '0000'.
_object_check_timestamp lv_date lv_time.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = lv_date
iv_time = lv_time ).
ENDMETHOD. "lif_object~has_changed_since

View File

@ -46,8 +46,7 @@ CLASS lcl_object_dtel IMPLEMENTATION.
METHOD lif_object~has_changed_since.
DATA: lv_date TYPE dats,
lv_time TYPE tims,
lv_ts TYPE timestamp.
lv_time TYPE tims.
SELECT SINGLE as4date as4time FROM dd04l
INTO (lv_date, lv_time)
@ -55,7 +54,10 @@ CLASS lcl_object_dtel IMPLEMENTATION.
AND as4local = 'A'
AND as4vers = '0000'.
_object_check_timestamp lv_date lv_time.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = lv_date
iv_time = lv_time ).
ENDMETHOD. "lif_object~has_changed_since

View File

@ -262,7 +262,7 @@ CLASS lcl_object_enho_clif IMPLEMENTATION.
io_xml->read( EXPORTING iv_name = 'TAB_METHODS'
CHANGING cg_data = lt_tab_methods ).
io_clif->set_enhattributes( tab_attributes = lt_tab_attributes ).
io_clif->set_enhattributes( lt_tab_attributes ).
* todo: deserialize includes

View File

@ -25,8 +25,7 @@ CLASS lcl_object_enqu IMPLEMENTATION.
METHOD lif_object~has_changed_since.
DATA: lv_date TYPE dats,
lv_time TYPE tims,
lv_ts TYPE timestamp.
lv_time TYPE tims.
SELECT SINGLE as4date as4time FROM dd25l
INTO (lv_date, lv_time)
@ -34,7 +33,10 @@ CLASS lcl_object_enqu IMPLEMENTATION.
AND as4local = 'A'
AND as4vers = '0000'.
_object_check_timestamp lv_date lv_time.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = lv_date
iv_time = lv_time ).
ENDMETHOD. "lif_object~has_changed_since

View File

@ -419,7 +419,6 @@ CLASS lcl_object_fugr IMPLEMENTATION.
DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc WITH DEFAULT KEY,
ls_reposrc LIKE LINE OF lt_reposrc,
lv_program TYPE program,
lv_cnam TYPE reposrc-cnam,
lv_tabix LIKE sy-tabix,
lt_functab TYPE ty_rs38l_incl_tt.

View File

@ -18,16 +18,7 @@ CLASS lcl_object_shi3 DEFINITION INHERITING FROM lcl_objects_super FINAL.
PRIVATE SECTION.
TYPES: BEGIN OF ty_id_map,
old TYPE ttree-id,
new TYPE ttree-id,
END OF ty_id_map.
TYPES tt_id_map TYPE STANDARD TABLE OF ty_id_map.
TYPES ts_id_map TYPE SORTED TABLE OF ty_id_map WITH UNIQUE KEY old.
DATA: mv_tree_id TYPE ttree-id,
mt_map TYPE ts_id_map. " SORTED !
DATA: mv_tree_id TYPE ttree-id.
METHODS jump_se43
RAISING lcx_exception.

View File

@ -25,15 +25,17 @@ CLASS lcl_object_shlp IMPLEMENTATION.
METHOD lif_object~has_changed_since.
DATA: lv_date TYPE dats,
lv_time TYPE tims,
lv_ts TYPE timestamp.
lv_time TYPE tims.
SELECT SINGLE as4date as4time FROM dd30l
INTO (lv_date, lv_time)
WHERE shlpname = ms_item-obj_name
AND as4local = 'A'.
INTO (lv_date, lv_time)
WHERE shlpname = ms_item-obj_name
AND as4local = 'A'.
_object_check_timestamp lv_date lv_time.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = lv_date
iv_time = lv_time ).
ENDMETHOD. "lif_object~has_changed_since

View File

@ -27,7 +27,6 @@ CLASS lcl_object_tabl IMPLEMENTATION.
DATA: lv_date TYPE dats,
lv_time TYPE tims,
lv_ts TYPE timestamp,
lt_indexes TYPE STANDARD TABLE OF dd09l.
FIELD-SYMBOLS <ls_index> LIKE LINE OF lt_indexes.
@ -38,7 +37,13 @@ CLASS lcl_object_tabl IMPLEMENTATION.
AND as4local = 'A'
AND as4vers = '0000'.
_object_check_timestamp lv_date lv_time.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = lv_date
iv_time = lv_time ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
SELECT SINGLE as4date as4time FROM dd09l " Table tech settings
INTO (lv_date, lv_time)
@ -46,7 +51,13 @@ CLASS lcl_object_tabl IMPLEMENTATION.
AND as4local = 'A'
AND as4vers = '0000'.
_object_check_timestamp lv_date lv_time.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = lv_date
iv_time = lv_time ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
SELECT as4date as4time FROM dd12l " Table tech settings
INTO CORRESPONDING FIELDS OF TABLE lt_indexes
@ -55,7 +66,13 @@ CLASS lcl_object_tabl IMPLEMENTATION.
AND as4vers = '0000' ##TOO_MANY_ITAB_FIELDS.
LOOP AT lt_indexes ASSIGNING <ls_index>.
_object_check_timestamp <ls_index>-as4date <ls_index>-as4time.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = <ls_index>-as4date
iv_time = <ls_index>-as4time ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
ENDLOOP.
ENDMETHOD. "lif_object~has_changed_since

View File

@ -25,15 +25,17 @@ CLASS lcl_object_ttyp IMPLEMENTATION.
METHOD lif_object~has_changed_since.
DATA: lv_date TYPE dats,
lv_time TYPE tims,
lv_ts TYPE timestamp.
lv_time TYPE tims.
SELECT SINGLE as4date as4time FROM dd40l
INTO (lv_date, lv_time)
WHERE typename = ms_item-obj_name
AND as4local = 'A'.
_object_check_timestamp lv_date lv_time.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = lv_date
iv_time = lv_time ).
ENDMETHOD. "lif_object~has_changed_since

View File

@ -25,24 +25,35 @@ CLASS lcl_object_view IMPLEMENTATION.
METHOD lif_object~has_changed_since.
DATA: lv_date TYPE dats,
lv_time TYPE tims,
lv_ts TYPE timestamp.
lv_time TYPE tims.
SELECT SINGLE as4date as4time FROM dd25l " View
SELECT SINGLE as4date as4time FROM dd25l
INTO (lv_date, lv_time)
WHERE viewname = ms_item-obj_name
AND as4local = 'A'
AND as4vers = '0000'.
_object_check_timestamp lv_date lv_time.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = lv_date
iv_time = lv_time ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
SELECT SINGLE as4date as4time FROM dd09l " Table tech settings
SELECT SINGLE as4date as4time FROM dd09l
INTO (lv_date, lv_time)
WHERE tabname = ms_item-obj_name
AND as4local = 'A'
AND as4vers = '0000'.
_object_check_timestamp lv_date lv_time.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = lv_date
iv_time = lv_time ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
ENDMETHOD. "lif_object~has_changed_since

View File

@ -571,6 +571,13 @@ CLASS lcl_objects_super DEFINITION ABSTRACT.
mv_language TYPE spras.
METHODS:
check_timestamp
IMPORTING
iv_timestamp TYPE timestamp
iv_date TYPE datum
iv_time TYPE uzeit
RETURNING
VALUE(rv_changed) TYPE abap_bool,
get_metadata
RETURNING VALUE(rs_metadata) TYPE lif_defs=>ty_metadata,
corr_insert
@ -1527,7 +1534,6 @@ CLASS lcl_objects_program IMPLEMENTATION.
DATA: lv_date TYPE dats,
lv_time TYPE tims,
lv_ts TYPE timestamp,
lt_screens TYPE STANDARD TABLE OF d020s,
lt_eudb TYPE STANDARD TABLE OF eudb.
@ -1539,7 +1545,13 @@ CLASS lcl_objects_program IMPLEMENTATION.
WHERE progname = iv_program
AND r3state = 'A'.
_object_check_timestamp lv_date lv_time.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = lv_date
iv_time = lv_time ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
SELECT SINGLE udat utime FROM repotext " Program text pool
INTO (lv_date, lv_time)
@ -1547,7 +1559,13 @@ CLASS lcl_objects_program IMPLEMENTATION.
AND r3state = 'A'.
IF sy-subrc = 0. " Text not found ? Assuming no changes, see #404
_object_check_timestamp lv_date lv_time.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = lv_date
iv_time = lv_time ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
ENDIF.
IF iv_skip_gui = abap_true.
@ -1559,7 +1577,13 @@ CLASS lcl_objects_program IMPLEMENTATION.
WHERE prog = iv_program ##TOO_MANY_ITAB_FIELDS. "#EC CI_SUBRC
LOOP AT lt_screens ASSIGNING <ls_screen>.
_object_check_timestamp <ls_screen>-dgen <ls_screen>-tgen.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = <ls_screen>-dgen
iv_time = <ls_screen>-tgen ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
ENDLOOP.
SELECT vdatum vzeit FROM eudb " GUI
@ -1569,7 +1593,13 @@ CLASS lcl_objects_program IMPLEMENTATION.
AND srtf2 = 0 ##TOO_MANY_ITAB_FIELDS. "#EC CI_SUBRC
LOOP AT lt_eudb ASSIGNING <ls_eudb>.
_object_check_timestamp <ls_eudb>-vdatum <ls_eudb>-vzeit.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = <ls_eudb>-vdatum
iv_time = <ls_eudb>-vzeit ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
ENDLOOP.
ENDMETHOD. "check_prog_changed_since
@ -1690,6 +1720,25 @@ CLASS lcl_objects_super IMPLEMENTATION.
ENDMETHOD.
METHOD check_timestamp.
DATA: lv_ts TYPE timestamp.
IF sy-subrc = 0 AND iv_date IS NOT INITIAL AND iv_time IS NOT INITIAL.
cl_abap_tstmp=>systemtstmp_syst2utc(
EXPORTING syst_date = iv_date
syst_time = iv_time
IMPORTING utc_tstmp = lv_ts ).
IF lv_ts < iv_timestamp.
rv_changed = abap_false. " Unchanged
ELSE.
rv_changed = abap_true.
ENDIF.
ELSE. " Not found? => changed
rv_changed = abap_true.
ENDIF.
ENDMETHOD.
METHOD get_metadata.
rs_metadata-class =

View File

@ -77,32 +77,52 @@ CLASS lcl_popups DEFINITION FINAL.
lcx_cancel,
popup_to_select_transports
RETURNING VALUE(rt_trkorr) TYPE trwbo_request_headers.
PRIVATE SECTION.
PRIVATE SECTION.
TYPES: ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY.
CLASS-METHODS: add_field
IMPORTING iv_tabname TYPE sval-tabname
iv_fieldname TYPE sval-fieldname
iv_fieldtext TYPE sval-fieldtext
iv_value TYPE clike DEFAULT ''
iv_field_attr TYPE sval-field_attr DEFAULT ''
CHANGING ct_fields TYPE ty_sval_tt.
ENDCLASS.
CLASS lcl_popups IMPLEMENTATION.
METHOD popup_object.
METHOD add_field.
DEFINE _add_dialog_fld.
APPEND INITIAL LINE TO lt_fields ASSIGNING <ls_field>.
<ls_field>-tabname = &1. "#EC NOTEXT
<ls_field>-fieldname = &2. "#EC NOTEXT
<ls_field>-fieldtext = &3. "#EC NOTEXT
<ls_field>-value = &4. "#EC NOTEXT
<ls_field>-field_attr = &5. "#EC NOTEXT
END-OF-DEFINITION.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF ct_fields.
APPEND INITIAL LINE TO ct_fields ASSIGNING <ls_field>.
<ls_field>-tabname = iv_tabname.
<ls_field>-fieldname = iv_fieldname.
<ls_field>-fieldtext = iv_fieldtext.
<ls_field>-value = iv_value.
<ls_field>-field_attr = iv_field_attr.
ENDMETHOD.
METHOD popup_object.
DATA: lv_returncode TYPE c,
lt_fields TYPE TABLE OF sval.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
" TAB FLD LABEL DEF ATTR
_add_dialog_fld 'TADIR' 'OBJECT' 'Type' '' ''.
_add_dialog_fld 'TADIR' 'OBJ_NAME' 'Name' '' ''.
add_field( EXPORTING iv_tabname = 'TADIR'
iv_fieldname = 'OBJECT'
iv_fieldtext = 'Type'
CHANGING ct_fields = lt_fields ).
add_field( EXPORTING iv_tabname = 'TADIR'
iv_fieldname = 'OBJ_NAME'
iv_fieldtext = 'Name'
CHANGING ct_fields = lt_fields ).
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
@ -145,9 +165,17 @@ CLASS lcl_popups IMPLEMENTATION.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
" TAB FLD LABEL DEF ATTR
_add_dialog_fld 'TDEVC' 'DEVCLASS' 'Package' '' ''.
_add_dialog_fld 'TDEVC' 'INTSYS' 'Folder logic' 'PREFIX' ''.
add_field( EXPORTING iv_tabname = 'TDEVC'
iv_fieldname = 'DEVCLASS'
iv_fieldtext = 'Package'
CHANGING ct_fields = lt_fields ).
add_field( EXPORTING iv_tabname = 'TDEVC'
iv_fieldname = 'INTSYS'
iv_fieldtext = 'Folder logic'
iv_value = 'PREFIX'
CHANGING ct_fields = lt_fields ).
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
@ -190,8 +218,11 @@ CLASS lcl_popups IMPLEMENTATION.
CLEAR: ev_name, ev_cancel.
* TAB FLD LABEL DEF ATTR
_add_dialog_fld 'TEXTL' 'LINE' 'Name' 'new-branch-name' ''.
add_field( EXPORTING iv_tabname = 'TEXTL'
iv_fieldname = 'LINE'
iv_fieldtext = 'Name'
iv_value = 'new-branch-name'
CHANGING ct_fields = lt_fields ).
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
@ -228,8 +259,11 @@ CLASS lcl_popups IMPLEMENTATION.
CLEAR: ev_name, ev_cancel.
* TAB FLD LABEL DEF ATTR
_add_dialog_fld 'TEXTL' 'LINE' 'Name' 'lcl_gui_page_' ''.
add_field( EXPORTING iv_tabname = 'TEXTL'
iv_fieldname = 'LINE'
iv_fieldtext = 'Name'
iv_value = 'lcl_gui_page_'
CHANGING ct_fields = lt_fields ).
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
@ -266,9 +300,15 @@ CLASS lcl_popups IMPLEMENTATION.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
" TAB FLD LABEL DEF ATTR
_add_dialog_fld 'ABAPTXT255' 'LINE' 'Name' '' ''.
_add_dialog_fld 'TDEVC' 'DEVCLASS' 'Package' '' ''.
add_field( EXPORTING iv_tabname = 'ABAPTXT255'
iv_fieldname = 'LINE'
iv_fieldtext = 'Name'
CHANGING ct_fields = lt_fields ).
add_field( EXPORTING iv_tabname = 'TDEVC'
iv_fieldname = 'DEVCLASS'
iv_fieldtext = 'Package'
CHANGING ct_fields = lt_fields ).
lv_icon_ok = icon_okay.
lv_button1 = 'Create package' ##NO_TEXT.
@ -443,10 +483,26 @@ CLASS lcl_popups IMPLEMENTATION.
lv_icon2 = icon_folder.
ENDIF.
* TAB FLD LABEL DEF ATTR
_add_dialog_fld 'ABAPTXT255' 'LINE' 'Git clone URL' iv_url lv_uattr.
_add_dialog_fld 'TDEVC' 'DEVCLASS' 'Target package' iv_package lv_pattr.
_add_dialog_fld 'TEXTL' 'LINE' 'Branch' iv_branch '05'.
add_field( EXPORTING iv_tabname = 'ABAPTXT255'
iv_fieldname = 'LINE'
iv_fieldtext = 'Git clone URL'
iv_value = iv_url
iv_field_attr = lv_uattr
CHANGING ct_fields = lt_fields ).
add_field( EXPORTING iv_tabname = 'TDEVC'
iv_fieldname = 'DEVCLASS'
iv_fieldtext = 'Target package'
iv_value = iv_package
iv_field_attr = lv_pattr
CHANGING ct_fields = lt_fields ).
add_field( EXPORTING iv_tabname = 'TEXTL'
iv_fieldname = 'LINE'
iv_fieldtext = 'Branch'
iv_value = iv_branch
iv_field_attr = '05'
CHANGING ct_fields = lt_fields ).
lv_icon_ok = icon_okay.
lv_icon_br = icon_workflow_fork.
@ -604,20 +660,25 @@ CLASS lcl_popups IMPLEMENTATION.
CONCATENATE lv_transports_as_text '_' ls_transport_header-trkorr INTO lv_transports_as_text.
ENDLOOP.
" TAB FLD LABEL DEF ATTR
_add_dialog_fld 'TEXTL' 'LINE' 'Branch name' lv_transports_as_text ''.
_add_dialog_fld 'ABAPTXT255' 'LINE' 'Commit text' lv_transports_as_text ''.
add_field( EXPORTING iv_tabname = 'TEXTL'
iv_fieldname = 'LINE'
iv_fieldtext = 'Branch name'
iv_value = lv_transports_as_text
CHANGING ct_fields = lt_fields ).
add_field( EXPORTING iv_tabname = 'ABAPTXT255'
iv_fieldname = 'LINE'
iv_fieldtext = 'Commit text'
iv_value = lv_transports_as_text
CHANGING ct_fields = lt_fields ).
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
* no_value_check = SPACE " Deactivates data type check
popup_title = 'Transport to new Branch'
* start_column = '5' " Start column of the dialog box
* start_row = '5' " Start line of the dialog box
IMPORTING
returncode = lv_returncode
TABLES
fields = lt_fields " Table fields, values and attributes
fields = lt_fields
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.

View File

@ -558,7 +558,7 @@ CLASS lcl_repo IMPLEMENTATION.
io_dot = get_dot_abapgit( ) ).
lt_filter = it_filter.
lv_filter_exist = boolc( lines( lt_filter ) > 0 ) .
lv_filter_exist = boolc( lines( lt_filter ) > 0 ).
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
IF lv_filter_exist = abap_true.

View File

@ -17,12 +17,12 @@ CLASS lcl_syntax_highlighter DEFINITION ABSTRACT
PUBLIC SECTION.
CLASS-METHODS create
IMPORTING iv_filename TYPE string
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.
IMPORTING iv_line TYPE string
RETURNING VALUE(rv_line) TYPE string.
PROTECTED SECTION.
@ -39,15 +39,21 @@ CLASS lcl_syntax_highlighter DEFINITION ABSTRACT
TYPES:
BEGIN OF ty_rule,
regex TYPE REF TO cl_abap_regex,
token TYPE char1,
style TYPE string,
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.
@ -84,21 +90,21 @@ CLASS lcl_syntax_abap DEFINITION INHERITING FROM lcl_syntax_highlighter FINAL.
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
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
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',
comment TYPE string VALUE '##|"|^\*',
text TYPE string VALUE '`|''|\||\{|\}',
keyword TYPE string VALUE '&&|\b[-_a-z0-9]+\b',
END OF c_regex.
PROTECTED SECTION.
@ -126,21 +132,21 @@ CLASS lcl_syntax_xml DEFINITION INHERITING FROM lcl_syntax_highlighter FINAL.
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
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
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
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
attr_val TYPE string VALUE '["''][^''"]+[''"]', "#EC NOTEXT
END OF c_regex.
PROTECTED SECTION.
@ -149,23 +155,6 @@ CLASS lcl_syntax_xml DEFINITION INHERITING FROM lcl_syntax_highlighter FINAL.
ENDCLASS. " lcl_syntax_xml DEFINITION
*----------------------------------------------------------------------*
* Macros to fill table with a regular expressions to be parsed
*----------------------------------------------------------------------*
DEFINE _add_rule.
CREATE OBJECT ls_rule-regex
EXPORTING
pattern = c_regex-&1
ignore_case = abap_true.
ls_rule-token = c_token-&1.
ls_rule-style = c_css-&1.
APPEND ls_rule TO mt_rules.
END-OF-DEFINITION. " _add_rule
*----------------------------------------------------------------------*
* CLASS lcl_syntax_highlighter IMPLEMENTATION
*----------------------------------------------------------------------*
@ -187,6 +176,21 @@ CLASS lcl_syntax_highlighter IMPLEMENTATION.
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:
@ -222,10 +226,10 @@ CLASS lcl_syntax_highlighter IMPLEMENTATION.
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.
lv_line_len TYPE i,
lv_last_pos TYPE i VALUE 0,
lv_length TYPE i,
ls_match TYPE ty_match.
FIELD-SYMBOLS <match> TYPE ty_match.
@ -259,8 +263,8 @@ CLASS lcl_syntax_highlighter IMPLEMENTATION.
METHOD format_line.
DATA:
lv_chunk TYPE string,
ls_rule LIKE LINE OF mt_rules.
lv_chunk TYPE string,
ls_rule LIKE LINE OF mt_rules.
FIELD-SYMBOLS <match> TYPE ty_match.
@ -341,14 +345,21 @@ CLASS lcl_syntax_abap IMPLEMENTATION.
METHOD constructor.
DATA ls_rule LIKE LINE OF mt_rules.
super->constructor( ).
" Initialize instances of regular expression
_add_rule keyword.
_add_rule comment.
_add_rule text.
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
@ -562,14 +573,21 @@ CLASS lcl_syntax_xml IMPLEMENTATION.
METHOD constructor.
DATA ls_rule LIKE LINE OF mt_rules.
super->constructor( ).
" Initialize instances of regular expressions
_add_rule xml_tag.
_add_rule attr.
_add_rule attr_val.
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.
@ -603,7 +621,7 @@ CLASS lcl_syntax_xml IMPLEMENTATION.
DELETE ct_matches INDEX lv_index.
CONTINUE.
" Adjust length and offset of closing tag
" Adjust length and offset of closing tag
ELSEIF <match>-text_tag = '>' AND lv_prev_token <> c_token-xml_tag.
lv_state = 'C'.
<match>-length = <match>-offset - <prev>-offset - <prev>-length + <match>-length.
@ -673,7 +691,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION.
ms_match-token = &1.
ms_match-offset = &2.
ms_match-length = &3.
append ms_match to mt_after_parse.
APPEND ms_match TO mt_after_parse.
END-OF-DEFINITION. " _generate_parse
DEFINE _generate_order.
@ -681,7 +699,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION.
ms_match-offset = &2.
ms_match-length = &3.
ms_match-text_tag = &4.
append ms_match to mt_after_order.
APPEND ms_match TO mt_after_order.
END-OF-DEFINITION. " _generate_order
DEFINE _generate_extend.
@ -689,7 +707,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION.
ms_match-offset = &2.
ms_match-length = &3.
ms_match-text_tag = &4.
append ms_match to mt_after_extend.
APPEND ms_match TO mt_after_extend.
END-OF-DEFINITION. " _generate_extend
METHOD do_test.
@ -1002,7 +1020,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION.
DATA lv_line TYPE string.
lv_line = '<tag>Text</tag>'. "#EC NOTEXT
lv_line = '<tag>Text</tag>'. "#EC NOTEXT
" Generate table with expected values after parsing
_generate_parse 'X' 0 1.
@ -1027,7 +1045,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION.
DATA lv_line TYPE string.
lv_line = '<tag/>'. "#EC NOTEXT
lv_line = '<tag/>'. "#EC NOTEXT
" Generate table with expected values after parsing
_generate_parse 'X' 0 1.
@ -1047,7 +1065,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION.
DATA lv_line TYPE string.
lv_line = '<tag attribute="value"/>'. "#EC NOTEXT
lv_line = '<tag attribute="value"/>'. "#EC NOTEXT
" Generate table with expected values after parsing
_generate_parse 'X' 0 1.
@ -1076,7 +1094,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION.
DATA lv_line TYPE string.
lv_line = '<?xml version="1.0"?>'. "#EC NOTEXT
lv_line = '<?xml version="1.0"?>'. "#EC NOTEXT
" Generate table with expected values after parsing
_generate_parse 'X' 0 1.
@ -1105,7 +1123,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION.
DATA lv_line TYPE string.
lv_line = '<ns:tag ns:a1="v1" ns:a2=''v2''>"text"</ns:tag>'. "#EC NOTEXT
lv_line = '<ns:tag ns:a1="v1" ns:a2=''v2''>"text"</ns:tag>'. "#EC NOTEXT
" Generate table with expected values after parsing
_generate_parse 'X' 0 1.
@ -1207,8 +1225,8 @@ CLASS ltcl_syntax_basic_logic IMPLEMENTATION.
cl_abap_unit_assert=>assert_equals(
act = lv_line_act
exp = '<span class="keyword">CALL FUNCTION</span>' "#EC NOTEXT
msg = 'Failure during applying of style.' ). "#EC NOTEXT
exp = '<span class="keyword">CALL FUNCTION</span>' "#EC NOTEXT
msg = 'Failure during applying of style.' ). "#EC NOTEXT
ENDMETHOD. " apply_style
@ -1222,15 +1240,15 @@ CLASS ltcl_syntax_basic_logic IMPLEMENTATION.
cl_abap_unit_assert=>assert_equals(
act = lv_line_act
exp = ''
msg = 'Failure in method process_line.' ). "#EC NOTEXT
msg = 'Failure in method process_line.' ). "#EC NOTEXT
" Call the method with non-empty line and compare results
lv_line_act = mo->process_line( iv_line = '* CALL FUNCTION' ). "#EC NOTEXT
cl_abap_unit_assert=>assert_equals(
act = lv_line_act
exp = '<span class="comment">* CALL FUNCTION</span>' "#EC NOTEXT
msg = 'Failure in method process_line.' ). "#EC NOTEXT
exp = '<span class="comment">* CALL FUNCTION</span>' "#EC NOTEXT
msg = 'Failure in method process_line.' ). "#EC NOTEXT
ENDMETHOD. " process_line

View File

@ -110,8 +110,8 @@ CLASS lcl_convert DEFINITION FINAL.
RETURNING VALUE(rv_xstring) TYPE xstring.
CLASS-METHODS split_string
IMPORTING iv_string TYPE string
RETURNING value(rt_lines) TYPE string_table.
IMPORTING iv_string TYPE string
RETURNING VALUE(rt_lines) TYPE string_table.
ENDCLASS. "lcl_convert DEFINITION
@ -423,8 +423,8 @@ CLASS lcl_path IMPLEMENTATION.
METHOD change_dir.
DATA lv_last TYPE i.
DATA lv_temp TYPE string.
DATA: lv_last TYPE i,
lv_temp TYPE string.
lv_last = strlen( iv_cur_dir ) - 1.

View File

@ -293,8 +293,7 @@ CLASS lcl_xml_output IMPLEMENTATION.
name = 'abap'
prefix = 'asx' ).
li_attr = mi_xml_doc->create_attribute_ns(
name = 'version' ).
li_attr = mi_xml_doc->create_attribute_ns( 'version' ).
li_attr->if_ixml_node~set_value( '1.0' ).
ri_element->set_attribute_node_ns( li_attr ).