pure function join_characters(self, array, sep) result(join)
!< Return a string that is a join of an array of characters.
!<
!< The join-separator is set equals to self if self has a value or it is set to a null string ''. This value can be overridden
!< passing a custom separator.
!<
!<```fortran
!< type(string) :: astring
!< character(5) :: characters(3)
!< logical :: test_passed(6)
!< characters(1) = 'one'
!< characters(2) = 'two'
!< characters(3) = 'three'
!< test_passed(1) = (astring%join(array=characters)//''==characters(1)//characters(2)//characters(3))
!< test_passed(2) = (astring%join(array=characters, sep='-')//''==characters(1)//'-'//characters(2)//'-'//characters(3))
!< characters(1) = ''
!< characters(2) = 'two'
!< characters(3) = 'three'
!< test_passed(3) = (astring%join(array=characters, sep='-')//''==characters(2)//'-'//characters(3))
!< characters(1) = 'one'
!< characters(2) = 'two'
!< characters(3) = ''
!< test_passed(4) = (astring%join(array=characters, sep='-')//''==characters(1)//'-'//characters(2))
!< characters(1) = 'one'
!< characters(2) = ''
!< characters(3) = 'three'
!< test_passed(5) = (astring%join(array=characters, sep='-')//''==characters(1)//'-'//characters(3))
!< characters(1) = 'one'
!< characters(2) = 'two'
!< characters(3) = 'three'
!< astring = '_'
!< test_passed(6) = (astring%join(array=characters)//''==characters(1)//'_'//characters(2)//'_'//characters(3))
!< print '(L1)', all(test_passed)
!<```
!=> T <<<
class(string), intent(in) :: self !< The string.
character(kind=CK, len=*), intent(in) :: array(1:) !< Array to be joined.
character(kind=CK, len=*), intent(in), optional :: sep !< Separator.
type(string) :: join !< The join of array.
character(kind=CK, len=:), allocatable :: sep_ !< Separator, default value.
integer :: a !< Counter.
if (allocated(self%raw)) then
sep_ = self%raw
else
sep_ = ''
endif
if (present(sep)) sep_ = sep
join = ''
do a=2, size(array, dim=1)
if (array(a)/='') join%raw = join%raw//sep_//array(a)
enddo
if (array(1)/='') then
join%raw = array(1)//join%raw
else
join%raw = join%raw(len(sep_)+1:len(join%raw))
endif
endfunction join_characters