stringify Function

private pure function stringify(self, is_indented, is_content_indented, only_start, only_content, only_end) result(stringed)

Arguments

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

XML tag.

logical, intent(in), optional :: is_indented

Activate content indentation.

logical, intent(in), optional :: is_content_indented

Activate content indentation.

logical, intent(in), optional :: only_start

Write only start tag.

logical, intent(in), optional :: only_content

Write only content.

logical, intent(in), optional :: only_end

Write only end tag.

Return Value character(len=:), allocatable

Output string containing the whole tag.

Description

Convert the whole tag into a string.


Variables

TypeVisibility AttributesNameInitial
logical, public :: is_content_indented_

Activate content indentation.

logical, public :: only_start_

Write only start tag.

logical, public :: only_content_

Write only content.

logical, public :: only_end_

Write only end tag.


Source Code

  pure function stringify(self, is_indented, is_content_indented, only_start, only_content, only_end) result(stringed)
  !---------------------------------------------------------------------------------------------------------------------------------
  !< Convert the whole tag into a string.
  !---------------------------------------------------------------------------------------------------------------------------------
  class(xml_tag), intent(in)           :: self                 !< XML tag.
  logical,        intent(in), optional :: is_indented          !< Activate content indentation.
  logical,        intent(in), optional :: is_content_indented  !< Activate content indentation.
  logical,        intent(in), optional :: only_start           !< Write only start tag.
  logical,        intent(in), optional :: only_content         !< Write only content.
  logical,        intent(in), optional :: only_end             !< Write only end tag.
  character(len=:), allocatable        :: stringed             !< Output string containing the whole tag.
  logical                              :: is_content_indented_ !< Activate content indentation.
  logical                              :: only_start_          !< Write only start tag.
  logical                              :: only_content_        !< Write only content.
  logical                              :: only_end_            !< Write only end tag.
  !---------------------------------------------------------------------------------------------------------------------------------

  !---------------------------------------------------------------------------------------------------------------------------------
  is_content_indented_ = .false. ; if (present(is_content_indented)) is_content_indented_ = is_content_indented
  only_start_ = .false. ; if (present(only_start)) only_start_ = only_start
  only_content_ = .false. ; if (present(only_content)) only_content_ = only_content
  only_end_ = .false. ; if (present(only_end)) only_end_ = only_end
  if (only_start_) then
    stringed = self%start_tag(is_indented=is_indented)
  elseif (only_content_) then
    if (self%tag_content%is_allocated()) then
      if (is_content_indented_) then
        stringed = repeat(' ', self%indent+2)//self%tag_content
      else
        stringed = self%tag_content%chars()
      endif
    endif
  elseif (only_end_) then
    stringed = self%end_tag(is_indented=is_indented)
  else
    stringed = ''
    if (self%tag_name%is_allocated()) then
      if (self%is_self_closing) then
        stringed = self%self_closing_tag(is_indented=is_indented)
      else
        stringed = self%start_tag(is_indented=is_indented)
        if (self%tag_content%is_allocated()) then
          if (is_content_indented_) then
            stringed = stringed//new_line('a')//repeat(' ', self%indent+2)//&
                       self%tag_content//new_line('a')//repeat(' ', self%indent)
          else
            stringed = stringed//self%tag_content
          endif
        endif
        stringed = stringed//self%end_tag()
      endif
    endif
  endif
  !---------------------------------------------------------------------------------------------------------------------------------
  endfunction stringify