| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | text | |||
| integer, | intent(in) | :: | width | |||
| character(len=1), | intent(in), | optional | :: | fill_char |
function center_with_fill(text, width, fill_char) result(centered_text) character(LEN=*), intent(in) :: text integer, intent(in) :: width character(LEN=1), optional, intent(in) :: fill_char character(LEN=1) :: fill character(KIND=ucs4, LEN=width) :: centered_text integer :: text_len, padding, left_padding, right_padding, i if (present(fill_char)) then fill = fill_char else fill = " " end if text_len = len_trim(text) if (text_len >= width) then centered_text = text(1:width) return end if ! Calculate the total padding required padding = width - text_len if (trim(text) == "") then left_padding = padding / 2 right_padding = padding - left_padding - mod(padding, 2) else text_len = text_len + 1 left_padding = padding / 2 - 1 right_padding = padding - left_padding - mod(padding, 2) end if ! Initialize the result centered_text = repeat(' ', width) ! Fill with fill on the left do i = 1, left_padding centered_text(i:i) = fill end do ! Place the text in the center if (trim(text) == "") then centered_text(left_padding + 1:left_padding + text_len) = trim(text) else centered_text(left_padding + 1:left_padding + text_len) = " "//trim(text)//" " end if ! Fill with fill on the right do i = right_padding + text_len, width centered_text(i:i) = fill end do end function center_with_fill