FoXy XML tag class.
Overload xml_tag with creator procedures.
Return an instance of xml tag.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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 as single stream. |
|
logical, | intent(in), | optional | :: | sanitize_attributes_value |
Sanitize attributes value. |
|
integer(kind=I4P), | intent(in), | optional | :: | pos(1:) |
Characters position (in source) indexes. |
|
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. |
|
integer(kind=I4P), | intent(in), | optional | :: | id |
Uniq ID. |
|
integer(kind=I4P), | intent(in), | optional | :: | level |
Tag hierarchy level. |
|
integer(kind=I4P), | intent(in), | optional | :: | parent_id |
Parent uniq ID. |
|
character(len=:), | intent(in), | optional, | allocatable | :: | attributes_stream_alloc |
Attributes list stream, allocatable input. |
character(len=:), | intent(in), | optional, | allocatable | :: | content_alloc |
Tag value, allocatable input. |
XML tag.
Return an instance of xml tag with value being a nested tag.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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 as single stream. |
|
logical, | intent(in), | optional | :: | sanitize_attributes_value |
Sanitize attributes value. |
|
integer(kind=I4P), | intent(in), | optional | :: | pos(1:) |
Characters position (in source) indexes. |
|
integer(kind=I4P), | intent(in), | optional | :: | indent |
Number of indent-white-spaces. |
|
logical, | intent(in), | optional | :: | is_content_indented |
Activate value indentation. |
|
integer(kind=I4P), | intent(in), | optional | :: | id |
Uniq ID. |
|
integer(kind=I4P), | intent(in), | optional | :: | level |
Tag hierarchy level. |
|
integer(kind=I4P), | intent(in), | optional | :: | parent_id |
Parent uniq ID. |
|
character(len=:), | intent(in), | optional, | allocatable | :: | attributes_stream_alloc |
Attributes list stream, allocatable input. |
character(len=:), | intent(in), | optional, | allocatable | :: | content_alloc |
Tag value, allocatable input. |
XML tag.
XML tag class.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(string), | private | :: | tag_name |
Tag name. |
|||
type(string), | private | :: | tag_content |
Tag content. |
|||
integer(kind=I4P), | private | :: | pos(3) | = | [0_I4P, 0_I4P, 0_I4P] |
Characters position (in source) indexes (start, content, end). |
|
type(string), | private, | allocatable | :: | attribute(:,:) |
Attributes names/values pairs, [1:2, 1:]. |
||
integer(kind=I4P), | private | :: | attributes_number | = | 0_I4P |
Number of defined attributes. |
|
integer(kind=I4P), | private | :: | indent | = | 0_I4P |
Number of indent-white-spaces. |
|
logical, | private | :: | is_self_closing | = | .false. |
Self closing tag flag. |
|
integer(kind=I4P), | private | :: | level | = | 0_I4P |
Tag hierarchy level. |
|
integer(kind=I4P), | private | :: | id | = | 0_I4P |
Uniq tag ID. |
|
integer(kind=I4P), | private | :: | parent_id | = | 0_I4P |
Uniq ID of parent tag. |
|
integer(kind=I4P), | public | :: | children_number | = | 0_I4P |
Number of children tags. |
|
integer(kind=I4P), | public, | allocatable | :: | child_id(:) |
Uniq ID of children tags. |
Overload xml_tag with creator procedures.
private pure function create_tag_flat (name, attribute, attributes, attributes_stream, sanitize_attributes_value, pos, content, indent, is_content_indented, is_self_closing, id, level, parent_id, attributes_stream_alloc, content_alloc) | Return an instance of xml tag. |
private pure function create_tag_nested (name, content, attribute, attributes, attributes_stream, sanitize_attributes_value, pos, indent, is_content_indented, id, level, parent_id, attributes_stream_alloc, content_alloc) | Return an instance of xml tag with value being a nested tag. |
final :: finalize | Free dynamic memory when finalizing. |
generic, public :: add_attributes => add_single_attribute, add_multiple_attributes, add_stream_attributes | Add attributes name/value pairs. |
procedure, public, pass(self) :: add_child_id | Add child ID to children IDs list. |
procedure, public, pass(self) :: attributes | Return attributes name/value pairs as string. |
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 |
procedure, public, pass(self) :: free | Free (reset) tag. |
procedure, public, pass(self) :: get_content | Return tag content. |
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) :: parse_tag_name | Parse the tag name contained into a string. |
procedure, public, pass(self) :: self_closing_tag | Return |
procedure, public, pass(self) :: set | Set tag data. |
procedure, public, pass(self) :: start_tag | Return |
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_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. |
Return an instance of xml tag.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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 as single stream. |
|
logical, | intent(in), | optional | :: | sanitize_attributes_value |
Sanitize attributes value. |
|
integer(kind=I4P), | intent(in), | optional | :: | pos(1:) |
Characters position (in source) indexes. |
|
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. |
|
integer(kind=I4P), | intent(in), | optional | :: | id |
Uniq ID. |
|
integer(kind=I4P), | intent(in), | optional | :: | level |
Tag hierarchy level. |
|
integer(kind=I4P), | intent(in), | optional | :: | parent_id |
Parent uniq ID. |
|
character(len=:), | intent(in), | optional, | allocatable | :: | attributes_stream_alloc |
Attributes list stream, allocatable input. |
character(len=:), | intent(in), | optional, | allocatable | :: | content_alloc |
Tag value, allocatable input. |
XML tag.
Return an instance of xml tag with value being a nested tag.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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 as single stream. |
|
logical, | intent(in), | optional | :: | sanitize_attributes_value |
Sanitize attributes value. |
|
integer(kind=I4P), | intent(in), | optional | :: | pos(1:) |
Characters position (in source) indexes. |
|
integer(kind=I4P), | intent(in), | optional | :: | indent |
Number of indent-white-spaces. |
|
logical, | intent(in), | optional | :: | is_content_indented |
Activate value indentation. |
|
integer(kind=I4P), | intent(in), | optional | :: | id |
Uniq ID. |
|
integer(kind=I4P), | intent(in), | optional | :: | level |
Tag hierarchy level. |
|
integer(kind=I4P), | intent(in), | optional | :: | parent_id |
Parent uniq ID. |
|
character(len=:), | intent(in), | optional, | allocatable | :: | attributes_stream_alloc |
Attributes list stream, allocatable input. |
character(len=:), | intent(in), | optional, | allocatable | :: | content_alloc |
Tag value, allocatable input. |
XML tag.
Return attributes name/value pairs as string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(in) | :: | self |
XML tag. |
The attributes string.
Return </tag_name>
end tag.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(in) | :: | self |
XML tag. |
||
logical, | intent(in), | optional | :: | is_indented |
Activate content indentation. |
The end tag string.
Return .true. it the queried attribute name is defined, .false. otherwise.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(in) | :: | self |
XML tag. |
||
character(len=*), | intent(in) | :: | name |
Attribute name. |
Inquire result.
Check is tag is correctly parsed, i.e. its tag_name is allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(in) | :: | self |
XML tag. |
Result of check.
Return tag name.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(in) | :: | self |
XML tag. |
XML tag name.
Return <tag_name.../>
self closing tag.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(in) | :: | self |
XML tag. |
||
logical, | intent(in), | optional | :: | is_indented |
Flag to check if tag is indented. |
The self closing tag string.
Return <tag_name...>
start tag.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(in) | :: | self |
XML tag. |
||
logical, | intent(in), | optional | :: | is_indented |
Flag to check if tag is indented. |
The start tag string.
Convert the whole tag into a string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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. |
|
logical, | intent(in), | optional | :: | linearize |
Return a "linearized" string of tags without the XML hieararchy. |
Output string containing the whole tag.
Add child ID to children IDs list.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(inout) | :: | self |
XML tag. |
||
integer(kind=I4P), | intent(in) | :: | child_id |
Child ID. |
Free (reset) tag.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(inout) | :: | self |
XML tag. |
Return tag content of self (or its nested tags) if named name.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(in) | :: | self |
XML tag. |
||
character(len=*), | intent(in) | :: | name |
Searched tag name. |
||
character(len=:), | intent(out), | allocatable | :: | content |
Tag content. |
Parse the tag contained into a source string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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. |
Parse the tag name contained into a string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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. |
Set tag data.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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 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 | :: | pos(1:) |
Characters position (in source) indexes. |
|
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. |
|
integer(kind=I4P), | intent(in), | optional | :: | id |
Uniq ID. |
|
integer(kind=I4P), | intent(in), | optional | :: | level |
Tag hierarchy level. |
|
integer(kind=I4P), | intent(in), | optional | :: | parent_id |
Parent uniq ID. |
|
character(len=:), | intent(in), | optional, | allocatable | :: | attributes_stream_alloc |
Attributes list stream, allocatable input. |
character(len=:), | intent(in), | optional, | allocatable | :: | content_alloc |
Tag value, allocatable input. |
Write tag to unit file.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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. |
Add one attribute name/value pair.
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. |
Add list of attributes name/value pairs.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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. |
Add list of attributes name/value pairs passed as stream.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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. |
Allocate (prepare for filling) dynamic memory of attributes.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(inout) | :: | self |
XML tag. |
||
integer(kind=I4P), | intent(in) | :: | Na |
Number of attributes. |
Delete tag content.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(inout) | :: | self |
XML tag. |
Delete one attribute name/value pair.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(inout) | :: | self |
XML tag. |
||
character(len=*), | intent(in) | :: | name |
Attribute name. |
Delete list of attributes name/value pairs.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(inout) | :: | self |
XML tag. |
||
character(len=*), | intent(in) | :: | name(1:) |
Attributes names. |
Get the tag content and attributes from source after tag_name and attributes names have been set.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(inout) | :: | self |
XML tag. |
||
character(len=*), | intent(in) | :: | source |
String containing data. |
Get the attributes values from source after tag_name and attributes names have been set.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(inout) | :: | self |
XML tag. |
||
character(len=*), | intent(in) | :: | source |
String containing data. |
Get the tag value from source after tag_name has been set.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(inout) | :: | self |
XML tag. |
||
character(len=*), | intent(in) | :: | source |
String containing data. |
Parse the tag attributes names contained into a string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(inout) | :: | self |
XML tag. |
||
character(len=*), | intent(in) | :: | source |
String containing the input. |
Search tag named tag_name into a string and, in case it is found, store into self.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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. |