class EL_ELEMENT_ATTRIBUTE
XML element attribute
note
description: "XML element attribute"
author: "Finnian Reilly"
copyright: "Copyright (c) 2001-2022 Finnian Reilly"
contact: "finnian at eiffel hyphen loop dot com"
license: "MIT license (See: en.wikipedia.org/wiki/MIT_License)"
date: "2023-08-02 13:43:26 GMT (Wednesday 2nd August 2023)"
revision: "5"
class
EL_ELEMENT_ATTRIBUTE
inherit
EL_VTD_XML_ATTRIBUTE_API
EL_VTD_SHARED_NATIVE_XPATH
rename
native_xpath as native_name
end
EL_SHARED_C_WIDE_CHARACTER_STRING
EL_C_OBJECT
EL_STRING_8_CONSTANTS
create
make
convert
as_string: {ZSTRING}, as_string_8: {STRING}, as_string_32: {STRING_32},
as_real: {REAL}, as_double: {DOUBLE}, as_date: {DATE},
as_integer: {INTEGER}, as_integer_64: {INTEGER_64},
as_natural: {NATURAL}, as_natural_64: {NATURAL_64},
as_file_path: {FILE_PATH}, as_dir_path: {DIR_PATH},
as_boolean: {BOOLEAN}
feature {NONE} -- Initialization
make
do
name_general := Empty_string_8
end
feature -- Numeric value
as_double: DOUBLE
--
require
is_double: as_string_8.is_double
do
if attached native_name (name_general) as name then
Result := c_evx_node_context_attribute_double (
exception_callbacks_c_struct, self_ptr, name.base_address
)
end
end
as_integer: INTEGER
--
require
is_integer: as_string_8.is_integer
do
if attached native_name (name_general) as name then
Result := c_evx_node_context_attribute_integer (
exception_callbacks_c_struct, self_ptr, name.base_address
)
end
end
as_integer_64: INTEGER_64
--
require
is_integer_64: as_string_8.is_integer_64
do
if attached native_name (name_general) as name then
Result := c_evx_node_context_attribute_integer_64 (
exception_callbacks_c_struct, self_ptr, name.base_address
)
end
end
as_natural: NATURAL
-- attribute content as a NATURAL
require
is_natural: as_string_8.is_natural
do
Result := as_integer_64.to_natural_32
end
as_natural_64: NATURAL_64
-- attribute content as a NATURAL_64
require
is_natural_64: as_string_8.is_natural_64
do
Result := as_string_8.to_natural_64
end
as_real: REAL
--
require
is_real: as_string_8.is_real
do
if attached native_name (name_general) as name then
Result := c_evx_node_context_attribute_real (
exception_callbacks_c_struct, self_ptr, name.base_address
)
end
end
feature -- Access
as_boolean: BOOLEAN
-- `True' if attribute `name' equals "True" or "true"
require
is_boolean: as_string_8.is_boolean
do
Result := wide_string (attribute_string).to_boolean
end
as_date: EL_DATE
-- attribute content as a DOUBLE
require
days_format: as_string_8.is_natural
do
create Result.make_by_days (as_integer)
end
as_dir_path: DIR_PATH
do
Result := as_string
end
as_file_path: FILE_PATH
do
Result := as_string
end
as_raw_string: ZSTRING
-- attribute content as string with entities and char references not expanded
do
Result := wide_string (attribute_raw_string)
end
as_raw_string_32: STRING_32
-- attribute content as wide string with entities and char references not expanded
do
Result := wide_string (attribute_raw_string)
end
as_string: ZSTRING
do
Result := wide_string (attribute_string)
end
as_string_32: STRING_32
do
Result := wide_string (attribute_string)
end
as_string_8: STRING_8
do
Result := wide_string (attribute_string)
end
feature -- Status query
is_valid_name: BOOLEAN
do
Result := is_attached (attribute_string)
end
same_as (value: READABLE_STRING_GENERAL): BOOLEAN
-- `True' if attribute `name' has the same characters as `value'
local
s: like wide_string; i: INTEGER
do
s := wide_string (attribute_string)
if s.count = value.count then
Result := True
from i := 1 until not Result or i > s.count loop
Result := s.item (i) = value [i]
i := i + 1
end
end
end
feature -- Element change
set_context (element_context: EL_XPATH_NODE_CONTEXT; a_name_general: READABLE_STRING_GENERAL)
do
self_ptr := element_context.self_ptr
exception_callbacks_c_struct := element_context.exception_callbacks_c_struct
name_general := a_name_general
end
feature {NONE} -- Implementation
attribute_raw_string: POINTER
--
do
if attached native_name (name_general) as name then
Result := c_evx_node_context_attribute_raw_string (
exception_callbacks_c_struct, self_ptr, name.base_address
)
end
end
attribute_string: POINTER
--
do
if attached native_name (name_general) as name then
Result := c_evx_node_context_attribute_string (
exception_callbacks_c_struct, self_ptr, name.base_address
)
end
end
feature {NONE} -- Internal attributes
exception_callbacks_c_struct: POINTER
name_general: READABLE_STRING_GENERAL
end