elemental subroutine parse(self, source, tstart, tend)
!< Parse the tag contained into a source string.
!<
!< It is assumed that the first tag contained into the source string is parsed, the others eventually present are omitted.
!< Valid syntax are:
!< + `<tag_name att1="att1 val" att2="att2 val"...>...</tag_name>`
!< + `<tag_name att1="att1 val" att2="att2 val".../>`
!< @note Inside the attributes value the symbols `<` and `>` are not allowed.
class(xml_tag), intent(inout) :: self !< XML tag.
character(*), intent(in) :: source !< String containing the input.
integer(I4P), optional, intent(out) :: tstart !< Starting index of tag inside the string.
integer(I4P), optional, intent(out) :: tend !< Ending index of tag inside the string.
integer(I4P) :: tstartd !< Starting index of tag inside the string.
integer(I4P) :: tendd !< Ending index of tag inside the string.
tstartd = 0
tendd = 0
call self%parse_tag_name(source=source, tstart=tstartd, tend=tendd)
if (self%tag_name%is_allocated()) then
if (index(string=source(tstartd:tendd), substring='=')>0) call self%parse_attributes_names(source=source(tstartd:tendd))
if (index(string=source, substring='</'//self%tag_name//'>')>0) &
tendd = index(string=source, substring='</'//self%tag_name//'>') + len('</'//self%tag_name//'>') - 1
call self%get(source=source(tstartd:tendd))
endif
if (present(tstart)) tstart = tstartd
if (present(tend )) tend = tendd
endsubroutine parse