Add one attribute name/value pair.
Note
Leading and trailing white spaces are trimmed out by attribute's name.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(inout) | :: | self |
XML tag. |
||
character(len=*), | intent(in) | :: | attribute(1:) |
Attribute name/value pair [1:2]. |
||
logical, | intent(in), | optional | :: | sanitize_value |
Sanitize attribute value. |
pure subroutine add_single_attribute(self, attribute, sanitize_value) !< Add one attribute name/value pair. !< !< @note Leading and trailing white spaces are trimmed out by attribute's name. class(xml_tag), intent(inout) :: self !< XML tag. character(*), intent(in) :: attribute(1:) !< Attribute name/value pair [1:2]. logical, intent(in), optional :: sanitize_value !< Sanitize attribute value. type(string), allocatable :: new_attribute(:,:) !< Temporary storage for attributes. logical :: sanitize_value_ !< Sanitize attribute value. logical :: is_updated !< Flag to check if the attribute has been updeted. integer(I4P) :: a !< Counter. sanitize_value_ = .false. ; if (present(sanitize_value)) sanitize_value_ = sanitize_value if (self%attributes_number>0) then is_updated = .false. update_if_already_present: do a=1, self%attributes_number if (self%attribute(1, a)==attribute(1)) then if (sanitize_value_) then self%attribute(2, a) = trim(adjustl(attribute(2))) else self%attribute(2, a) = attribute(2) endif is_updated = .true. exit update_if_already_present endif enddo update_if_already_present if (.not.is_updated) then allocate(new_attribute(1:2, 1:self%attributes_number+1)) new_attribute(1:2, 1:self%attributes_number) = self%attribute new_attribute(1, self%attributes_number+1) = trim(adjustl(attribute(1))) if (sanitize_value_) then new_attribute(2, self%attributes_number+1) = trim(adjustl(attribute(2))) else new_attribute(2, self%attributes_number+1) = attribute(2) endif call move_alloc(from=new_attribute, to=self%attribute) self%attributes_number = self%attributes_number + 1 endif else call self%alloc_attributes(Na=1) self%attribute(1, 1) = trim(adjustl(attribute(1))) if (sanitize_value_) then self%attribute(2, 1) = trim(adjustl(attribute(2))) else self%attribute(2, 1) = attribute(2) endif endif endsubroutine add_single_attribute