sub
add_complex_type {
my
(
$self
,
$node
) =
@_
;
my
$types
=
$self
->{complex_types} ||= {};
my
$name
=
$node
->name;
$self
->_err(
"Duplicate definition for ComplexType '$name'."
)
if
(
exists
$types
->{
$name
});
$types
->{
$name
} =
$node
;
}
sub
complete_types {
my
$self
=
shift
;
my
$type_map
=
$self
->{complex_types};
foreach
my
$element
(
$self
->descendants) {
next
unless
$element
->{unresolved_type};
my
$type
=
$element
->{type};
my
$type_node
=
$type_map
->{
$type
};
$self
->_err(
"Element '<$element->{name}>' has unrecognized "
.
"type '$type'."
)
unless
$type_node
;
$self
->_err(
"Element '<$element->{name}>' is using a named complexType and has sub-elements of its own. That's not supported."
)
if
$element
->daughters;
my
$new_node
=
$type_node
->copy_at_and_under;
$new_node
->name(
$element
->{name});
$element
->replace_with(
$new_node
);
}
}
sub
is_root {
1;
}
1;