adjustc Function

public pure function adjustc(string, length)

NAME

adjustc(3f) - [M_strings:WHITESPACE] center text
(LICENSE:PD)

SYNOPSIS

pure function adjustc(string[,length])

character(len=*),intent(in)  :: string
integer,intent(in),optional  :: length
character(len=:),allocatable :: adjustc

DESCRIPTION

 Centers input text in a string of the length specified. Returns a
 string of length LENGTH if LENGTH is present. Otherwise returns a
 string of the length of the input string.

OPTIONS

 string  input string to trim and center
 length  line length to center text in, optional.

RETURNS

 adjustc  centered output string

EXAMPLES

Sample Program:

program demo_adjustc
use M_strings, only : adjustc
!  using length of the input string
   write(*,'(a)')       '================================'
   write(*,'(a)')adjustc('centered string                 ')
   write(*,'(a)')adjustc('                 centered string')
   write(*,'(a)')adjustc('  centered string               ')
!  using explicit output string length
   write(*,'(a)')repeat('=',50)
   write(*,'(a)')adjustc('this is a centered string',50)
   write(*,'(a)')repeat('=',50)
end program demo_adjustc

Expected output

================================
        centered string
        centered string
        centered string
==================================================
            this is a centered string
==================================================

AUTHOR

John S. Urban

LICENSE

Public Domain

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: string

PROCEDURE adjustc(3f) DESCRIPTION center text using implicit or explicit length

VERSION 2.0, 20160711

AUTHOR John S. Urban

integer, intent(in), optional :: length

Return Value character(len=:), allocatable


Contents

Source Code


Source Code

pure function adjustc(string,length)

! ident_34="@(#) M_strings adjustc(3f) center text"

!>
!! PROCEDURE   adjustc(3f)
!! DESCRIPTION center text using implicit or explicit length
!!##VERSION     2.0, 20160711
!! AUTHOR      John S. Urban
!-----------------------------------------------------------------------------------------------------------------------------------
character(len=*),intent(in)  :: string         ! input string to trim and center
integer,intent(in),optional  :: length         ! line length to center text in
character(len=:),allocatable :: adjustc        ! output string
integer                      :: inlen
integer                      :: ileft          ! left edge of string if it is centered
!-----------------------------------------------------------------------------------------------------------------------------------
   if(present(length))then                     ! optional length
      inlen=length                             ! length will be requested length
      if(inlen <= 0)then                       ! bad input length
         inlen=len(string)                     ! could not use input value, fall back to length of input string
      endif
   else                                        ! output length was not explicitly specified, use input string length
      inlen=len(string)
   endif
   allocate(character(len=inlen):: adjustc)    ! create output at requested length
   adjustc(1:inlen)=' '                        ! initialize output string to all blanks
!-----------------------------------------------------------------------------------------------------------------------------------
   ileft =(inlen-len_trim(adjustl(string)))/2  ! find starting point to start input string to center it
   if(ileft > 0)then                          ! if string will fit centered in output
      adjustc(ileft+1:inlen)=adjustl(string)   ! center the input text in the output string
   else                                        ! input string will not fit centered in output string
      adjustc(1:inlen)=adjustl(string)         ! copy as much of input to output as can
   endif
end function adjustc