The main documentation of the Capitalize_Text_Utils Procedure contains additional explanation of this code listing.
function Capitalize_Text_Utils (String) result(Capitalize)
! Input variables.
type(character,*), intent(in) :: String ! String to be capitalized.
! Output variables.
type(character,255) :: Capitalize ! The capitalize version of the string.
! Internal variables.
type(integer) :: letter ! Loop counter.
type(logical) :: new_word ! True if the next character starts a new word.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Verify requirements.
VERIFY(Valid_State(String),5) ! String is valid.
! Loop through letters, setting capitalized version.
Capitalize = ' '
new_word = .true.
do letter = 1, LEN_TRIM(String)
if (new_word) then
Capitalize(letter:letter) = Uppercase(String(letter:letter))
else
Capitalize(letter:letter) = Lowercase(String(letter:letter))
end if
new_word = &
(ICHAR(String(letter:letter)) .NotInInterval. Majuscules) .AND. &
(ICHAR(String(letter:letter)) .NotInInterval. Minuscules)
end do
! Verify guarantees.
VERIFY(Valid_State(Capitalize),5) ! Capitalize is valid.
return
end function Capitalize_Text_Utils