Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | CLASS zcl_abapgit_utils DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS is_binary
IMPORTING
!iv_data TYPE xstring
RETURNING
VALUE(rv_is_binary) TYPE abap_bool.
CLASS-METHODS is_valid_email
IMPORTING
iv_email TYPE string
RETURNING
VALUE(rv_valid) TYPE abap_bool.
CLASS-METHODS check_eol
IMPORTING
!iv_data TYPE string
RAISING
zcx_abapgit_exception.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_abapgit_utils IMPLEMENTATION.
METHOD check_eol.
" Check if data is using CRLF as EOL separator. If only LF is used, data was likely
" edited by external tools
IF iv_data IS NOT INITIAL AND
iv_data CS cl_abap_char_utilities=>newline AND
iv_data NS cl_abap_char_utilities=>cr_lf.
zcx_abapgit_exception=>raise( 'Incorrect source format: Requires CRLF instead of LF' ).
ENDIF.
ENDMETHOD.
METHOD is_binary.
" Previously we did a simple char range test described here
" stackoverflow.com/questions/277521/how-to-identify-the-file-content-as-ascii-or-binary
" but this is insufficient if the data contains German umlauts and other special characters.
" Therefore we adopted another algorithm, which is similarly used by AL11
" RSWATCH0 / GUESS_FILE_TYPE
" We count non-printable characters if there are more than 10% it's binary.
CONSTANTS:
lc_binary_threshold TYPE i VALUE 10,
lc_bytes_to_check TYPE i VALUE 1000.
DATA: lv_string_data TYPE string,
lv_non_printable_chars TYPE i,
lv_percentage TYPE i,
lv_data TYPE xstring,
lv_xlen TYPE i.
lv_xlen = xstrlen( iv_data ).
IF lv_xlen = 0.
RETURN.
ENDIF.
lv_xlen = nmin(
val1 = lv_xlen
val2 = lc_bytes_to_check ).
lv_data = iv_data(lv_xlen).
lv_data = lcl_utf8_utils=>strip_incomplete_utf8_tail( lv_data ).
TRY.
lv_string_data = zcl_abapgit_convert=>xstring_to_string_utf8( lv_data ).
CATCH zcx_abapgit_exception.
" Contains data that does not convert to UTF-8 so consider it binary
rv_is_binary = abap_true.
RETURN.
ENDTRY.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN lv_string_data WITH space.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN lv_string_data WITH space.
FIND ALL OCCURRENCES OF REGEX '[^[:print:]]' IN lv_string_data MATCH COUNT lv_non_printable_chars ##REGEX_POSIX.
lv_percentage = lv_non_printable_chars * 100 / strlen( lv_string_data ).
rv_is_binary = boolc( lv_percentage > lc_binary_threshold ).
ENDMETHOD.
METHOD is_valid_email.
" Email address validation (RFC 5322)
" https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s01.html
CONSTANTS lc_email_regex TYPE string VALUE
'[\w!#$%&*+/=?`{|}~^-]+(?:\.[\w!#$%&*+/=?`{|}~^-]+)*@(?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,6}'.
IF iv_email IS INITIAL.
rv_valid = abap_true.
ELSE.
FIND REGEX lc_email_regex IN iv_email ##REGEX_POSIX.
rv_valid = boolc( sy-subrc = 0 ).
ENDIF.
ENDMETHOD.
ENDCLASS.
|