亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? function.pm

?? 網頁留言本,比一般的留言簿管用
?? PM
字號:
# $Id: Function.pm 4532 2004-05-11 05:15:40Z ezra $package XML::XPath::Function;use XML::XPath::Number;use XML::XPath::Literal;use XML::XPath::Boolean;use XML::XPath::NodeSet;use XML::XPath::Node::Attribute;use strict;sub new {    my $class = shift;    my ($pp, $name, $params) = @_;    bless {         pp => $pp,         name => $name,         params => $params         }, $class;}sub as_string {    my $self = shift;    my $string = $self->{name} . "(";    my $second;    foreach (@{$self->{params}}) {        $string .= "," if $second++;        $string .= $_->as_string;    }    $string .= ")";    return $string;}sub as_xml {    my $self = shift;    my $string = "<Function name=\"$self->{name}\"";    my $params = "";    foreach (@{$self->{params}}) {        $params .= "<Param>" . $_->as_string . "</Param>\n";    }    if ($params) {        $string .= ">\n$params</Function>\n";    }    else {        $string .= " />\n";    }        return $string;}sub evaluate {    my $self = shift;    my $node = shift;    if ($node->isa('XML::XPath::NodeSet')) {        $node = $node->get_node(1);    }    my @params;    foreach my $param (@{$self->{params}}) {        my $results = $param->evaluate($node);        push @params, $results;    }    $self->_execute($self->{name}, $node, @params);}sub _execute {    my $self = shift;    my ($name, $node, @params) = @_;    $name =~ s/-/_/g;    no strict 'refs';    $self->$name($node, @params);}# All functions should return one of:# XML::XPath::Number# XML::XPath::Literal (string)# XML::XPath::NodeSet# XML::XPath::Boolean### NODESET FUNCTIONS ###sub last {    my $self = shift;    my ($node, @params) = @_;    die "last: function doesn't take parameters\n" if (@params);    return XML::XPath::Number->new($self->{pp}->get_context_size);}sub position {    my $self = shift;    my ($node, @params) = @_;    if (@params) {        die "position: function doesn't take parameters [ ", @params, " ]\n";    }    # return pos relative to axis direction    return XML::XPath::Number->new($self->{pp}->get_context_pos);}sub count {    my $self = shift;    my ($node, @params) = @_;    die "count: Parameter must be a NodeSet\n" unless $params[0]->isa('XML::XPath::NodeSet');    return XML::XPath::Number->new($params[0]->size);}sub id {    my $self = shift;    my ($node, @params) = @_;    die "id: Function takes 1 parameter\n" unless @params == 1;    my $results = XML::XPath::NodeSet->new();    if ($params[0]->isa('XML::XPath::NodeSet')) {        # result is the union of applying id() to the        # string value of each node in the nodeset.        foreach my $node ($params[0]->get_nodelist) {            my $string = $node->string_value;            $results->append($self->id($node, XML::XPath::Literal->new($string)));        }    }    else { # The actual id() function...        my $string = $self->string($node, $params[0]);        $_ = $string->value; # get perl scalar        my @ids = split; # splits $_        foreach my $id (@ids) {            if (my $found = $node->getElementById($id)) {                $results->push($found);            }        }    }    return $results;}sub local_name {    my $self = shift;    my ($node, @params) = @_;    if (@params > 1) {        die "name() function takes one or no parameters\n";    }    elsif (@params) {        my $nodeset = shift(@params);        $node = $nodeset->get_node(1);    }        return XML::XPath::Literal->new($node->getLocalName);}sub namespace_uri {    my $self = shift;    my ($node, @params) = @_;    die "namespace-uri: Function not supported\n";}sub name {    my $self = shift;    my ($node, @params) = @_;    if (@params > 1) {        die "name() function takes one or no parameters\n";    }    elsif (@params) {        my $nodeset = shift(@params);        $node = $nodeset->get_node(1);    }        return XML::XPath::Literal->new($node->getName);}### STRING FUNCTIONS ###sub string {    my $self = shift;    my ($node, @params) = @_;    die "string: Too many parameters\n" if @params > 1;    if (@params) {        return XML::XPath::Literal->new($params[0]->string_value);    }        # TODO - this MUST be wrong! - not sure now. -matt    return XML::XPath::Literal->new($node->string_value);    # default to nodeset with just $node in.}sub concat {    my $self = shift;    my ($node, @params) = @_;    die "concat: Too few parameters\n" if @params < 2;    my $string = join('', map {$_->string_value} @params);    return XML::XPath::Literal->new($string);}sub starts_with {    my $self = shift;    my ($node, @params) = @_;    die "starts-with: incorrect number of params\n" unless @params == 2;    my ($string1, $string2) = ($params[0]->string_value, $params[1]->string_value);    if (substr($string1, 0, length($string2)) eq $string2) {        return XML::XPath::Boolean->True;    }    return XML::XPath::Boolean->False;}sub contains {    my $self = shift;    my ($node, @params) = @_;    die "starts-with: incorrect number of params\n" unless @params == 2;    my $value = $params[1]->string_value;    if ($params[0]->string_value =~ /(.*?)\Q$value\E(.*)/) {        # $1 and $2 stored for substring funcs below        # TODO: Fix this nasty implementation!        return XML::XPath::Boolean->True;    }    return XML::XPath::Boolean->False;}sub substring_before {    my $self = shift;    my ($node, @params) = @_;    die "starts-with: incorrect number of params\n" unless @params == 2;    if ($self->contains($node, @params)->value) {        return XML::XPath::Literal->new($1); # hope that works!    }    else {        return XML::XPath::Literal->new('');    }}sub substring_after {    my $self = shift;    my ($node, @params) = @_;    die "starts-with: incorrect number of params\n" unless @params == 2;    if ($self->contains($node, @params)->value) {        return XML::XPath::Literal->new($2);    }    else {        return XML::XPath::Literal->new('');    }}sub substring {    my $self = shift;    my ($node, @params) = @_;    die "substring: Wrong number of parameters\n" if (@params < 2 || @params > 3);    my ($str, $offset, $len);    $str = $params[0]->string_value;    $offset = $params[1]->value;    $offset--; # uses 1 based offsets    if (@params == 3) {        $len = $params[2]->value;    }    return XML::XPath::Literal->new(substr($str, $offset, $len));}sub string_length {    my $self = shift;    my ($node, @params) = @_;    die "string-length: Wrong number of params\n" if @params > 1;    if (@params) {        return XML::XPath::Number->new(length($params[0]->string_value));    }    else {        return XML::XPath::Number->new(                length($node->string_value)                );    }}sub normalize_space {    my $self = shift;    my ($node, @params) = @_;    die "normalize-space: Wrong number of params\n" if @params > 1;    my $str;    if (@params) {        $str = $params[0]->string_value;    }    else {        $str = $node->string_value;    }    $str =~ s/^\s*//;    $str =~ s/\s*$//;    $str =~ s/\s+/ /g;    return XML::XPath::Literal->new($str);}sub translate {    my $self = shift;    my ($node, @params) = @_;    die "translate: Wrong number of params\n" if @params != 3;    local $_ = $params[0]->string_value;    my $find = $params[1]->string_value;    my $repl = $params[2]->string_value;    eval "tr/\\Q$find\\E/\\Q$repl\\E/d, 1" or die $@;    return XML::XPath::Literal->new($_);}### BOOLEAN FUNCTIONS ###sub boolean {    my $self = shift;    my ($node, @params) = @_;    die "boolean: Incorrect number of parameters\n" if @params != 1;    return $params[0]->to_boolean;}sub not {    my $self = shift;    my ($node, @params) = @_;    $params[0] = $params[0]->to_boolean unless $params[0]->isa('XML::XPath::Boolean');    $params[0]->value ? XML::XPath::Boolean->False : XML::XPath::Boolean->True;}sub true {    my $self = shift;    my ($node, @params) = @_;    die "true: function takes no parameters\n" if @params > 0;    XML::XPath::Boolean->True;}sub false {    my $self = shift;    my ($node, @params) = @_;    die "true: function takes no parameters\n" if @params > 0;    XML::XPath::Boolean->False;}sub lang {    my $self = shift;    my ($node, @params) = @_;    die "lang: function takes 1 parameter\n" if @params != 1;    my $lang = $node->findvalue('(ancestor-or-self::*[@xml:lang]/@xml:lang)[last()]');    my $lclang = lc($params[0]->string_value);    # warn("Looking for lang($lclang) in $lang\n");    if (substr(lc($lang), 0, length($lclang)) eq $lclang) {        return XML::XPath::Boolean->True;    }    else {        return XML::XPath::Boolean->False;    }}### NUMBER FUNCTIONS ###sub number {    my $self = shift;    my ($node, @params) = @_;    die "number: Too many parameters\n" if @params > 1;    if (@params) {        if ($params[0]->isa('XML::XPath::Node')) {            return XML::XPath::Number->new(                    $params[0]->string_value                    );        }        return $params[0]->to_number;    }        return XML::XPath::Number->new( $node->string_value );}sub sum {    my $self = shift;    my ($node, @params) = @_;    die "sum: Parameter must be a NodeSet\n" unless $params[0]->isa('XML::XPath::NodeSet');    my $sum = 0;    foreach my $node ($params[0]->get_nodelist) {        $sum += $self->number($node)->value;    }    return XML::XPath::Number->new($sum);}sub floor {    my $self = shift;    my ($node, @params) = @_;    require POSIX;    my $num = $self->number($node, @params);    return XML::XPath::Number->new(            POSIX::floor($num->value));}sub ceiling {    my $self = shift;    my ($node, @params) = @_;    require POSIX;    my $num = $self->number($node, @params);    return XML::XPath::Number->new(            POSIX::ceil($num->value));}sub round {    my $self = shift;    my ($node, @params) = @_;    my $num = $self->number($node, @params);    require POSIX;    return XML::XPath::Number->new(            POSIX::floor($num->value + 0.5)); # Yes, I know the spec says don't do this...}1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲美女视频在线| 亚洲国产aⅴ天堂久久| 欧美日韩成人综合| 色综合天天视频在线观看| 蜜桃视频一区二区| 亚洲成av人片一区二区梦乃| **性色生活片久久毛片| 国产欧美久久久精品影院| 久久蜜桃av一区二区天堂| 欧美成人精品福利| 2021久久国产精品不只是精品| 精品国产一区二区三区四区四 | 成人激情小说乱人伦| 成人性色生活片免费看爆迷你毛片| 国产精品一区二区x88av| 国产成人夜色高潮福利影视| 福利一区福利二区| caoporen国产精品视频| 在线视频国内一区二区| 欧美丰满嫩嫩电影| 久久这里只有精品首页| 中文字幕一区二区三区在线观看| 亚洲色图色小说| 午夜精品久久一牛影视| 久久国产精品99久久久久久老狼 | 亚洲精品一区二区三区四区高清| 久久久午夜精品| 国产精品久久久久影院亚瑟| 亚洲男人天堂一区| 爽好久久久欧美精品| 韩国欧美国产一区| 色婷婷精品久久二区二区蜜臂av| 欧美日韩不卡在线| 精品粉嫩超白一线天av| 国产精品乱码一区二区三区软件 | 国产91精品入口| 色老头久久综合| 日韩精品一区二区三区三区免费| 国产欧美综合在线| 亚洲永久精品大片| 国产美女主播视频一区| 欧美亚洲动漫制服丝袜| 国产亚洲一区二区在线观看| 亚洲综合成人在线视频| 国产成人综合精品三级| 欧美丰满一区二区免费视频| 国产精品灌醉下药二区| 美女视频免费一区| 91麻豆福利精品推荐| 欧美xxxx老人做受| 一区二区三区高清不卡| 国产成人啪免费观看软件| 欧美一区二区三区人| 亚洲欧美中日韩| 国产一区二区不卡老阿姨| 欧美日韩一级大片网址| 亚洲人午夜精品天堂一二香蕉| 久久99精品久久久| 欧美日韩精品一区二区三区四区| 欧美国产一区在线| 极品少妇一区二区| 欧美一区二区视频在线观看| 一区二区三区欧美亚洲| 成人av网址在线| 国产日韩欧美一区二区三区乱码| 免费高清在线视频一区·| 欧美日韩视频在线观看一区二区三区| 国产精品视频九色porn| 粉嫩aⅴ一区二区三区四区| 日韩欧美的一区| 日韩在线一区二区三区| 欧美日韩在线免费视频| 亚洲一区成人在线| 欧美色图12p| 亚洲地区一二三色| 欧美三级资源在线| 亚洲成av人片一区二区| 欧美高清你懂得| 日本中文一区二区三区| 91精品国产综合久久小美女| 亚洲电影第三页| 亚洲蜜臀av乱码久久精品蜜桃| 在线视频国内自拍亚洲视频| 中文在线一区二区 | 精品国产第一区二区三区观看体验| 综合av第一页| 97se亚洲国产综合自在线不卡| 欧美国产一区二区在线观看 | 国产精品久久夜| 懂色av一区二区三区免费看| 亚洲国产精品99久久久久久久久| 国产精品99久久久久久久vr | 91精品国产综合久久婷婷香蕉| 日韩国产一区二| 精品国产乱码久久| 成人网男人的天堂| 亚洲三级电影网站| 欧美四级电影网| 另类的小说在线视频另类成人小视频在线 | 中文字幕日韩欧美一区二区三区| 97精品久久久午夜一区二区三区| 亚洲欧美一区二区三区久本道91| 在线观看成人免费视频| 免费精品视频在线| 国产亚洲欧美日韩俺去了| 99久久久国产精品免费蜜臀| 亚洲v日本v欧美v久久精品| 精品免费一区二区三区| caoporen国产精品视频| 日韩av电影免费观看高清完整版在线观看| 日韩一区二区三区视频| 成人黄色免费短视频| 亚洲韩国精品一区| 国产亚洲精品久| 欧美日韩在线播| 国产成人在线视频网站| 亚洲午夜久久久久中文字幕久| 日韩免费观看高清完整版 | 久久99国产精品久久99果冻传媒| 欧美国产精品一区二区| 欧美日韩国产一二三| 国产成人在线观看免费网站| 亚洲成人福利片| 久久精品亚洲麻豆av一区二区| 日本精品一区二区三区四区的功能| 久久精品免费观看| 一区二区三区在线免费播放| 久久色视频免费观看| 欧美性感一区二区三区| 不卡视频免费播放| 麻豆91小视频| 亚洲成人精品一区| 中文天堂在线一区| 欧美变态口味重另类| 欧美日韩国产天堂| 99视频在线观看一区三区| 黑人巨大精品欧美一区| 亚洲成人精品在线观看| 亚洲精品国产无套在线观| 欧美韩国日本一区| 久久亚洲精精品中文字幕早川悠里| 欧美浪妇xxxx高跟鞋交| 色诱视频网站一区| 99视频超级精品| 国产91丝袜在线18| 国产99久久久国产精品潘金网站| 精品写真视频在线观看| 免费在线观看成人| 日韩精品视频网| 午夜精品在线视频一区| 一区二区三区在线视频免费观看| 中文字幕在线观看不卡| 国产精品毛片久久久久久久| 国产精品色婷婷久久58| 亚洲国产精品成人综合 | 丝瓜av网站精品一区二区| 亚洲成精国产精品女| 亚洲一区在线观看免费 | 国产精品综合在线视频| 狠狠色综合日日| 国内精品免费在线观看| 国产精品一区2区| 国产成人在线视频网站| 99re这里只有精品视频首页| 91视频一区二区| 欧美午夜免费电影| 欧美精品丝袜中出| 精品久久免费看| 久久精品亚洲精品国产欧美| 国产精品人妖ts系列视频| 国产精品女人毛片| 亚洲免费在线观看视频| 亚洲一区二区三区精品在线| 日韩中文字幕亚洲一区二区va在线| 免费人成在线不卡| 精品一区二区三区在线播放视频| 国产裸体歌舞团一区二区| 成人手机在线视频| 欧美专区亚洲专区| 欧美一级艳片视频免费观看| 国产亚洲欧美在线| 夜夜精品视频一区二区| 热久久免费视频| 成人免费观看av| 欧美视频一区在线观看| 欧美videossexotv100| 国产精品麻豆欧美日韩ww| 五月天欧美精品| 国产成人超碰人人澡人人澡| 国产精品久久久久桃色tv| 国产一区二区三区久久久| 国产91精品久久久久久久网曝门| 91看片淫黄大片一级| 欧美午夜理伦三级在线观看| 欧美大度的电影原声| 最新日韩在线视频| 久久69国产一区二区蜜臀| 97精品超碰一区二区三区| 日韩欧美另类在线| 亚洲天天做日日做天天谢日日欢|