attributes Function

private pure function attributes(self) result(att_)

Arguments

Type IntentOptional AttributesName
class(xml_tag), intent(in) :: self

XML tag.

Return Value character(len=:), allocatable

The attributes string.

Description

Return attributes name/value pairs as string.


Variables

TypeVisibility AttributesNameInitial
integer(kind=I4P), public :: a

Counter.


Source Code

  pure function create_tag_flat(name, attribute, attributes, attributes_stream, sanitize_attributes_value, content, indent, &
                                is_content_indented, is_self_closing) result(tag)
  !---------------------------------------------------------------------------------------------------------------------------------
  !< Return an instance of xml tag.
  !<
  !< Attributes are passed by array.
  !---------------------------------------------------------------------------------------------------------------------------------
  character(*), intent(in)           :: name                      !< Tag name.
  character(*), intent(in), optional :: attribute(1:)             !< Attribute name/value pair [1:2].
  character(*), intent(in), optional :: attributes(1:,1:)         !< Attributes list of name/value pairs [1:2,1:].
  character(*), intent(in), optional :: attributes_stream         !< Attributes list of name/value pairs as single stream.
  logical,      intent(in), optional :: sanitize_attributes_value !< Sanitize attributes value.
  character(*), intent(in), optional :: content                   !< Tag value.
  integer(I4P), intent(in), optional :: indent                    !< Number of indent-white-spaces.
  logical,      intent(in), optional :: is_content_indented       !< Activate content indentation.
  logical,      intent(in), optional :: is_self_closing           !< The tag is self closing.
  type(xml_tag)                      :: tag                       !< XML tag.
  !---------------------------------------------------------------------------------------------------------------------------------

  !---------------------------------------------------------------------------------------------------------------------------------
  call tag%set(name=name, attribute=attribute, attributes=attributes, attributes_stream=attributes_stream, &
               sanitize_attributes_value=sanitize_attributes_value, content=content,                       &
               indent=indent, is_content_indented=is_content_indented, is_self_closing=is_self_closing)
  !---------------------------------------------------------------------------------------------------------------------------------
  endfunction create_tag_flat

  pure function create_tag_nested(name, content, attribute, attributes, attributes_stream, sanitize_attributes_value, indent, &
                                  is_content_indented) result(tag)
  !---------------------------------------------------------------------------------------------------------------------------------
  !< Return an instance of xml tag with value being a nested tag.
  !<
  !< Attributes are passed by array.
  !---------------------------------------------------------------------------------------------------------------------------------
  character(*),  intent(in)           :: name                      !< Tag name.
  type(xml_tag), intent(in)           :: content                   !< Tag value as nested tag..
  character(*),  intent(in), optional :: attribute(1:)             !< Attribute name/value pair [1:2].
  character(*),  intent(in), optional :: attributes(1:,1:)         !< Attributes list of name/value pairs [1:2,1:].
  character(*),  intent(in), optional :: attributes_stream         !< Attributes list of name/value pairs as single stream.
  logical,       intent(in), optional :: sanitize_attributes_value !< Sanitize attributes value.
  integer(I4P),  intent(in), optional :: indent                    !< Number of indent-white-spaces.
  logical,       intent(in), optional :: is_content_indented       !< Activate value indentation.
  type(xml_tag)                       :: tag                       !< XML tag.
  !---------------------------------------------------------------------------------------------------------------------------------

  !---------------------------------------------------------------------------------------------------------------------------------
  call tag%set(name=name, attribute=attribute, attributes=attributes, content=content%stringify(),                      &
               sanitize_attributes_value=sanitize_attributes_value, attributes_stream=attributes_stream, indent=indent, &
               is_content_indented=is_content_indented)
  !---------------------------------------------------------------------------------------------------------------------------------
  endfunction create_tag_nested

  ! public methods
  pure function attributes(self) result(att_)
  !---------------------------------------------------------------------------------------------------------------------------------
  !< Return attributes name/value pairs as string.
  !---------------------------------------------------------------------------------------------------------------------------------
  class(xml_tag), intent(in)    :: self !< XML tag.
  character(len=:), allocatable :: att_ !< The attributes string.
  integer(I4P)                  :: a    !< Counter.
  !---------------------------------------------------------------------------------------------------------------------------------

  !---------------------------------------------------------------------------------------------------------------------------------
  if (self%attributes_number>0) then
    att_ = ''
    do a=1, self%attributes_number
      att_ = att_//' '//self%attribute(1, a)//'="'//self%attribute(2, a)//'"'
    enddo
    att_ = trim(adjustl(att_))
  endif
  !---------------------------------------------------------------------------------------------------------------------------------
  endfunction attributes