foxy_xml_tag Module

module~~foxy_xml_tag~~UsesGraph module~foxy_xml_tag foxy_xml_tag module~penf penf module~penf->module~foxy_xml_tag module~stringifor stringifor module~penf->module~stringifor module~stringifor_string_t stringifor_string_t module~penf->module~stringifor_string_t module~befor64 befor64 module~penf->module~befor64 module~befor64_pack_data_m befor64_pack_data_m module~penf->module~befor64_pack_data_m module~stringifor->module~foxy_xml_tag module~penf_global_parameters_variables penf_global_parameters_variables module~penf_global_parameters_variables->module~penf module~penf_b_size penf_b_size module~penf_global_parameters_variables->module~penf_b_size module~penf_stringify penf_stringify module~penf_global_parameters_variables->module~penf_stringify module~penf_b_size->module~penf module~penf_b_size->module~penf_stringify module~penf_stringify->module~penf iso_fortran_env iso_fortran_env iso_fortran_env->module~penf_stringify module~stringifor_string_t->module~stringifor module~befor64->module~stringifor_string_t module~befor64_pack_data_m->module~befor64
Help

FoXy XML tag class.

Used By

module~~foxy_xml_tag~~UsedByGraph module~foxy_xml_tag foxy_xml_tag module~foxy_xml_file foxy_xml_file module~foxy_xml_tag->module~foxy_xml_file module~foxy foxy module~foxy_xml_tag->module~foxy module~foxy_xml_file->module~foxy program~parse_file_simple parse_file_simple module~foxy->program~parse_file_simple program~create_tag create_tag module~foxy->program~create_tag program~add_attributes add_attributes module~foxy->program~add_attributes program~delete_attributes delete_attributes module~foxy->program~delete_attributes program~parse_string_simple parse_string_simple module~foxy->program~parse_string_simple program~indent_tag indent_tag module~foxy->program~indent_tag program~delete_content delete_content module~foxy->program~delete_content program~add_tag add_tag module~foxy->program~add_tag program~delete_tag delete_tag module~foxy->program~delete_tag program~write_tag write_tag module~foxy->program~write_tag
Help

Interfaces

public interface xml_tag

Overload xml_tag with creator procedures.

  • private pure function create_tag_flat(name, attribute, attributes, attributes_stream, sanitize_attributes_value, content, indent, is_content_indented, is_self_closing) result(tag)

    Arguments

    Type IntentOptional AttributesName
    character(len=*), intent(in) :: name

    Tag name.

    character(len=*), intent(in), optional :: attribute(1:)

    Attribute name/value pair [1:2].

    character(len=*), intent(in), optional :: attributes(1:,1:)

    Attributes list of name/value pairs [1:2,1:].

    character(len=*), 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(len=*), intent(in), optional :: content

    Tag value.

    integer(kind=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.

    Return Value type(xml_tag)

    XML tag.

    Description

    Return an instance of xml tag.

  • private pure function create_tag_nested(name, content, attribute, attributes, attributes_stream, sanitize_attributes_value, indent, is_content_indented) result(tag)

    Arguments

    Type IntentOptional AttributesName
    character(len=*), intent(in) :: name

    Tag name.

    type(xml_tag), intent(in) :: content

    Tag value as nested tag..

    character(len=*), intent(in), optional :: attribute(1:)

    Attribute name/value pair [1:2].

    character(len=*), intent(in), optional :: attributes(1:,1:)

    Attributes list of name/value pairs [1:2,1:].

    character(len=*), 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(kind=I4P), intent(in), optional :: indent

    Number of indent-white-spaces.

    logical, intent(in), optional :: is_content_indented

    Activate value indentation.

    Return Value type(xml_tag)

    XML tag.

    Description

    Return an instance of xml tag with value being a nested tag.


Derived Types

type, public :: xml_tag

Components

TypeVisibility AttributesNameInitial
type(string), private :: tag_name

Tag name.

type(string), private :: tag_content

Tag content.

type(string), private, allocatable:: attribute(:,:)

Attributes names/values pairs, [1:2, 1:].

integer(kind=I4P), private :: attributes_number =0

Number of defined attributes.

integer(kind=I4P), private :: indent =0

Number of indent-white-spaces.

logical, private :: is_self_closing =.false.

Self closing tag flag.

Constructor

Overload xml_tag with creator procedures.

private pure function create_tag_flat(name, attribute, attributes, attributes_stream, sanitize_attributes_value, content, indent, is_content_indented, is_self_closing)

Return an instance of xml tag.

private pure function create_tag_nested(name, content, attribute, attributes, attributes_stream, sanitize_attributes_value, indent, is_content_indented)

Return an instance of xml tag with value being a nested tag.

Finalizations Procedures

final :: finalize

Free dynamic memory when finalizing.

Type-Bound Procedures

generic, public :: add_attributes => add_single_attribute, add_multiple_attributes, add_stream_attributes

Add attributes name/value pairs.

procedure, public, pass(self) :: attributes

Return attributes name/value pairs as string.

procedure, public, pass(self) :: content

Return tag content.

generic, public :: delete_attributes => delete_single_attribute, delete_multiple_attributes

Delete attributes name/value pairs.

procedure, public, pass(self) :: delete_content

Delete tag conent.

procedure, public, pass(self) :: end_tag

Return </tag_name> end tag.

procedure, public, pass(self) :: free

Free dynamic memory.

procedure, public, pass(self) :: is_attribute_present

Return .true. it the queried attribute name is defined.

procedure, public, pass(self) :: is_parsed

Check is tag is correctly parsed, i.e. its tag_name is allocated.

procedure, public, pass(self) :: name

Return tag name.

procedure, public, pass(self) :: parse

Parse the tag contained into a source string.

procedure, public, pass(self) :: self_closing_tag

Return <tag_name.../> self closing tag.

procedure, public, pass(self) :: set

Set tag data.

procedure, public, pass(self) :: start_tag

Return <tag_name...> start tag.

procedure, public, pass(self) :: stringify

Convert the whole tag into a string.

procedure, public, pass(self) :: write => write_tag

Write tag to unit file.

generic, public :: assignment(=) => assign_tag

Assignment operator overloading.

procedure, private, pass(self) :: add_single_attribute

Add one attribute name/value pair.

procedure, private, pass(self) :: add_multiple_attributes

Add list of attributes name/value pairs.

procedure, private, pass(self) :: add_stream_attributes

Add list of attributes name/value pairs passed as stream.

procedure, private, pass(self) :: alloc_attributes

Allocate (prepare for filling) dynamic memory of attributes.

procedure, private, pass(self) :: delete_single_attribute

Delete one attribute name/value pair.

procedure, private, pass(self) :: delete_multiple_attributes

Delete list of attributes name/value pairs.

procedure, private, pass(self) :: get

Get the tag value and attributes from source.

procedure, private, pass(self) :: get_value

Get the tag value from source after tag_name has been set.

procedure, private, pass(self) :: get_attributes

Get the attributes values from source.

procedure, private, pass(self) :: parse_tag_name

Parse the tag name contained into a string.

procedure, private, pass(self) :: parse_attributes_names

Parse the tag attributes names contained into a string.

procedure, private, pass(self) :: search

Search tag named tag_name into a string.

procedure, private, pass(lhs) :: assign_tag

Assignment between two tags.

Description

XML tag class.


Functions

private pure function create_tag_flat(name, attribute, attributes, attributes_stream, sanitize_attributes_value, content, indent, is_content_indented, is_self_closing) result(tag)

Arguments

Type IntentOptional AttributesName
character(len=*), intent(in) :: name

Tag name.

character(len=*), intent(in), optional :: attribute(1:)

Attribute name/value pair [1:2].

character(len=*), intent(in), optional :: attributes(1:,1:)

Attributes list of name/value pairs [1:2,1:].

character(len=*), 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(len=*), intent(in), optional :: content

Tag value.

integer(kind=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.

Return Value type(xml_tag)

XML tag.

Description

Return an instance of xml tag.

private pure function create_tag_nested(name, content, attribute, attributes, attributes_stream, sanitize_attributes_value, indent, is_content_indented) result(tag)

Arguments

Type IntentOptional AttributesName
character(len=*), intent(in) :: name

Tag name.

type(xml_tag), intent(in) :: content

Tag value as nested tag..

character(len=*), intent(in), optional :: attribute(1:)

Attribute name/value pair [1:2].

character(len=*), intent(in), optional :: attributes(1:,1:)

Attributes list of name/value pairs [1:2,1:].

character(len=*), 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(kind=I4P), intent(in), optional :: indent

Number of indent-white-spaces.

logical, intent(in), optional :: is_content_indented

Activate value indentation.

Return Value type(xml_tag)

XML tag.

Description

Return an instance of xml tag with value being a nested tag.

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.

private pure function content(self, name)

Arguments

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

XML tag.

character(len=*), intent(in) :: name

Searched tag name.

Return Value character(len=:), allocatable

Tag content.

Description

Return tag content of self (or its nested tags) if named name.

private pure function end_tag(self, is_indented) result(tag_)

Arguments

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

XML tag.

logical, intent(in), optional :: is_indented

Activate content indentation.

Return Value character(len=:), allocatable

The end tag string.

Description

Return </tag_name> end tag.

private elemental function is_parsed(self)

Arguments

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

XML tag.

Return Value logical

Result of check.

Description

Check is tag is correctly parsed, i.e. its tag_name is allocated.

private pure function name(self)

Arguments

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

XML tag.

Return Value character(len=:), allocatable

XML tag name.

Description

Return tag name.

private pure function self_closing_tag(self, is_indented) result(tag_)

Arguments

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

XML tag.

logical, intent(in), optional :: is_indented

Flag to check if tag is indented.

Return Value character(len=:), allocatable

The self closing tag string.

Description

Return <tag_name.../> self closing tag.

private pure function start_tag(self, is_indented) result(tag_)

Arguments

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

XML tag.

logical, intent(in), optional :: is_indented

Flag to check if tag is indented.

Return Value character(len=:), allocatable

The start tag string.

Description

Return <tag_name...> start tag.

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.

private pure function is_attribute_present(self, name) result(is_present)

Arguments

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

XML tag.

character(len=*), intent(in) :: name

Attribute name.

Return Value logical

Inquire result.

Description

Return .true. it the queried attribute name is defined, .false. otherwise.


Subroutines

private elemental subroutine free(self)

Arguments

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

XML tag.

Description

Free dynamic memory.

private elemental subroutine parse(self, source, tstart, tend)

Arguments

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

XML tag.

character(len=*), intent(in) :: source

String containing the input.

integer(kind=I4P), intent(out), optional :: tstart

Starting index of tag inside the string.

integer(kind=I4P), intent(out), optional :: tend

Ending index of tag inside the string.

Description

Parse the tag contained into a source string.

private pure subroutine set(self, name, attribute, attributes, attributes_stream, sanitize_attributes_value, content, indent, is_content_indented, is_self_closing)

Arguments

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

XML tag.

character(len=*), intent(in), optional :: name

Tag name.

character(len=*), intent(in), optional :: attribute(1:)

Attribute name/value pair [1:2].

character(len=*), intent(in), optional :: attributes(1:,1:)

Attributes list of name/value pairs [1:2,1:].

character(len=*), 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(len=*), intent(in), optional :: content

Tag value.

integer(kind=I4P), intent(in), optional :: indent

Number of indent-white-spaces.

logical, intent(in), optional :: is_content_indented

Activate value indentation.

logical, intent(in), optional :: is_self_closing

The tag is self closing.

Description

Set tag data.

private subroutine write_tag(self, unit, is_indented, is_content_indented, form, end_record, only_start, only_content, only_end, iostat, iomsg)

Arguments

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

XML tag.

integer(kind=I4P), intent(in) :: unit

File unit.

logical, intent(in), optional :: is_indented

Activate content indentation.

logical, intent(in), optional :: is_content_indented

Activate content indentation.

character(len=*), intent(in), optional :: form

Format.

character(len=*), intent(in), optional :: end_record

Ending record.

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.

integer(kind=I4P), intent(out), optional :: iostat

IO status.

character(len=*), intent(out), optional :: iomsg

IO message.

Description

Write tag to unit file.

private pure subroutine add_single_attribute(self, attribute, sanitize_value)

Arguments

Type IntentOptional AttributesName
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.

Description

Add one attribute name/value pair.

private pure subroutine add_multiple_attributes(self, attributes, sanitize_values)

Arguments

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

XML tag.

character(len=*), intent(in) :: attributes(1:,1:)

Attribute name/value pair list [1:2,1:].

logical, intent(in), optional :: sanitize_values

Sanitize attribute values.

Description

Add list of attributes name/value pairs.

private pure subroutine add_stream_attributes(self, attributes_stream, sanitize_values)

Arguments

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

XML tag.

character(len=*), intent(in) :: attributes_stream

Attribute name/value pair list passed as stream.

logical, intent(in), optional :: sanitize_values

Sanitize attribute values.

Description

Add list of attributes name/value pairs passed as stream.

private elemental subroutine alloc_attributes(self, Na)

Arguments

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

XML tag.

integer(kind=I4P), intent(in) :: Na

Number of attributes.

Description

Allocate (prepare for filling) dynamic memory of attributes.

private pure subroutine delete_content(self)

Arguments

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

XML tag.

Description

Delete tag content.

private pure subroutine delete_single_attribute(self, name)

Arguments

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

XML tag.

character(len=*), intent(in) :: name

Attribute name.

Description

Delete one attribute name/value pair.

private pure subroutine delete_multiple_attributes(self, name)

Arguments

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

XML tag.

character(len=*), intent(in) :: name(1:)

Attributes names.

Description

Delete list of attributes name/value pairs.

private elemental subroutine get(self, source)

Arguments

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

XML tag.

character(len=*), intent(in) :: source

String containing data.

Description

Get the tag content and attributes from source after tag_name and attributes names have been set.

private elemental subroutine get_attributes(self, source)

Arguments

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

XML tag.

character(len=*), intent(in) :: source

String containing data.

Description

Get the attributes values from source after tag_name and attributes names have been set.

private elemental subroutine get_value(self, source)

Arguments

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

XML tag.

character(len=*), intent(in) :: source

String containing data.

Description

Get the tag value from source after tag_name has been set.

private elemental subroutine parse_attributes_names(self, source)

Arguments

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

XML tag.

character(len=*), intent(in) :: source

String containing the input.

Description

Parse the tag attributes names contained into a string.

private elemental subroutine parse_tag_name(self, source, tstart, tend)

Arguments

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

XML tag.

character(len=*), intent(in) :: source

String containing the input.

integer(kind=I4P), intent(out), optional :: tstart

Starting index of tag inside the source.

integer(kind=I4P), intent(out), optional :: tend

Ending index of tag inside the source.

Description

Parse the tag name contained into a string.

private elemental subroutine search(self, tag_name, source, tstart, tend)

Arguments

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

XML tag.

character(len=*), intent(in) :: tag_name

Searched tag name.

character(len=*), intent(in) :: source

String containing the input.

integer(kind=I4P), intent(out), optional :: tstart

Starting index of tag inside the source.

integer(kind=I4P), intent(out), optional :: tend

Ending index of tag inside the source.

Description

Search tag named tag_name into a string and, in case it is found, store into self.

private elemental subroutine assign_tag(lhs, rhs)

Arguments

Type IntentOptional AttributesName
class(xml_tag), intent(inout) :: lhs

Left hand side.

type(xml_tag), intent(in) :: rhs

Right hand side.

Description

Assignment between two tags.

private elemental subroutine finalize(tag)

Arguments

Type IntentOptional AttributesName
type(xml_tag), intent(inout) :: tag

XML tag.

Description

Free dynamic memory when finalizing.