*---------------------------------------------------------------------*
* FORM ZTEXT_WIDTH_PT (версія для ABAP 4.x)
*---------------------------------------------------------------------*
FORM ztext_width_pt USING i_text TYPE c
CHANGING e_width TYPE f.
DATA: lv_len TYPE i,
lv_char TYPE c LENGTH 1,
lv_add TYPE f.
CLEAR: e_width.
lv_len = STRLEN( i_text ).
DO lv_len TIMES.
lv_char = i_text+sy-index-1(1).
CLEAR lv_add.
" --- Латиниця великі ---
IF lv_char CP '[A-Z]'.
CASE lv_char.
WHEN 'I'. lv_add = 3.5.
WHEN 'M' OR 'W'. lv_add = 6.2.
WHEN OTHERS. lv_add = 5.5.
ENDCASE.
" --- Латиниця малі ---
ELSEIF lv_char CP '[a-z]'.
CASE lv_char.
WHEN 'i' OR 'j' OR 'l'. lv_add = 2.8.
WHEN 'm'. lv_add = 7.0.
WHEN 'w'. lv_add = 6.0.
WHEN 'f' OR 't' OR 'r'. lv_add = 3.2.
WHEN OTHERS. lv_add = 4.8.
ENDCASE.
" --- Кирилиця великі ---
ELSEIF lv_char CP '[А-Я]'.
CASE lv_char.
WHEN 'І'. lv_add = 3.5.
WHEN 'М' OR 'Ш' OR 'Щ' OR 'Ф' OR 'Ю'. lv_add = 7.0.
WHEN OTHERS. lv_add = 6.0.
ENDCASE.
" --- Кирилиця малі ---
ELSEIF lv_char CP '[а-я]'.
CASE lv_char.
WHEN 'і'. lv_add = 2.8.
WHEN 'м' OR 'ш' OR 'щ' OR 'ф' OR 'ю'. lv_add = 6.5.
WHEN OTHERS. lv_add = 5.5.
ENDCASE.
" --- Цифри ---
ELSEIF lv_char CP '[0-9]'.
lv_add = 5.0.
" --- Пробіл ---
ELSEIF lv_char = ' '.
lv_add = 3.0.
" --- Розділові знаки ---
ELSEIF lv_char CA '.,-/:;!?()""'''.
lv_add = 3.5.
" --- Інше ---
ELSE.
lv_add = 5.0.
ENDIF.
e_width = e_width + lv_add.
ENDDO.
ENDFORM.
No comments:
Post a Comment