XML-STX
view release on metacpan or search on metacpan
STX/Functions.pm view on Meta::CPAN
# STRING = namespace-uri(node) --------------------
sub F_namespace_uri($){
my ($self, $seq) = @_;
return [['',STX_STRING]] if @{$seq} == 0;
if ($seq->[0] and $seq->[0]->[1] == STX_NODE) {
if ($seq->[0]->[0]->{Type} == 1 or $seq->[0]->[0]->{Type} == 6) {
return [[$seq->[0]->[0]->{NamespaceURI},STX_STRING]]
if $seq->[0]->[0]->{NamespaceURI};
return [['',STX_STRING]];
} else {
return [['',STX_STRING]];
}
} else {
$self->doError('105', 3, 'namespace-uri', 'node', $self->_type($seq));
}
}
# STRING = local-name(node) --------------------
sub F_local_name($){
my ($self, $seq) = @_;
return [['',STX_STRING]] if @{$seq} == 0;
if ($seq->[0] and $seq->[0]->[1] == STX_NODE) {
if ($seq->[0]->[0]->{Type} == 1 or $seq->[0]->[0]->{Type} == 6) {
return [[$seq->[0]->[0]->{LocalName},STX_STRING]]
if $seq->[0]->[0]->{LocalName};
return [[$seq->[0]->[0]->{Name},STX_STRING]];
} elsif ($seq->[0]->[0]->{Type} == 4) {
return [[$seq->[0]->[0]->{Target},STX_STRING]];
} else {
return [['',STX_STRING]];
}
} else {
$self->doError('105', 3, 'local-name', 'node', $self->_type($seq));
}
}
# STRING = node-kind(node) --------------------
sub F_node_kind($){
my ($self, $seq) = @_;
if ($seq->[0] and $seq->[0]->[1] == STX_NODE) {
if ($seq->[0]->[0]->{Type} == 1) {
return [['element' ,STX_STRING]];
} elsif ($seq->[0]->[0]->{Type} == 2) {
return [['text' ,STX_STRING]];
} elsif ($seq->[0]->[0]->{Type} == 3) {
return [['cdata' ,STX_STRING]];
} elsif ($seq->[0]->[0]->{Type} == 4) {
return [['processing-instruction' ,STX_STRING]];
} elsif ($seq->[0]->[0]->{Type} == 5) {
return [['comment' ,STX_STRING]];
} elsif ($seq->[0]->[0]->{Type} == 6) {
return [['attribute' ,STX_STRING]];
} else {
return [['document' ,STX_STRING]];
}
} else {
$self->doError('105', 3, 'node-kind', 'node', $self->_type($seq));
}
}
# SEQ = get-in-scope-prefixes(node) --------------------
sub F_get_in_scope_prefixes($){
my ($self, $seq) = @_;
$self->doError('105', 3, 'get-in-scope-prefixes', 'element',
$self->_type($seq)) unless $seq->[0]
and $seq->[0]->[1] == STX_NODE
and $seq->[0]->[0]->{Type} == 1; #element
return [map([$_, STX_STRING], sort keys %{$seq->[0]->[0]->{inScopeNS}})];
}
# STRING = get-namespace_uri-for-prefix(node, string) --------------------
sub F_get_namespace_uri_for_prefix($$){
my ($self, $seq, $pref) = @_;
$self->doError('105', 3, 'get-namespaceuri-for-prefixs', 'element',
$self->_type($seq)) unless $seq->[0]
and $seq->[0]->[1] == STX_NODE
and $seq->[0]->[0]->{Type} == 1; #element
my $str = $pref->[0]->[1] == STX_STRING
? $pref->[0] : $self->F_string($pref->[0]);
return [[$seq->[0]->[0]->{inScopeNS}->{$str->[0]}, STX_STRING]];
}
# BOOLEAN = starts-with(string, string) --------------------
sub F_starts_with($$){
my ($self, $seq1, $seq2) = @_;
return [] unless $seq1->[0] and $seq2->[0];
my $str = $seq1->[0]->[1] == STX_STRING
? $seq1->[0] : $self->F_string($seq1->[0]);
my $start = $seq2->[0]->[1] == STX_STRING
? $seq2->[0] : $self->F_string($seq2->[0]);
return [[1, STX_BOOLEAN]] if index($str->[0], $start->[0]) == 0;
( run in 0.520 second using v1.01-cache-2.11-cpan-39bf76dae61 )