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

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

?? templateparser.pm

?? 一個開源的網絡開發庫ACE
?? PM
?? 第 1 頁 / 共 2 頁
字號:
          foreach my $ma (keys %{$prjc->{'matching_assignments'}}) {
            if ($ma eq $key) {
              foreach my $aname (@{$prjc->{'matching_assignments'}->{$ma}}) {
                if ($aname eq $type &&
                    defined $$fo{$key}->{$of}->{$aname}) {
                  $value = $$fo{$key}->{$of}->{$aname};
                  last;
                }
              }
              last;
            }
          }
          last;
        }
      }
      last;
    }
  }
  return $value;
}


sub handle_if {
  my($self)   = shift;
  my($val)    = shift;
  my($name)   = 'endif';

  push(@{$self->{'lstack'}}, $self->line_number() . " $val");
  if (!$self->{'if_skip'}) {
    my($true)  = 1;
    push(@{$self->{'sstack'}}, $name);
    if ($val =~ /^!(.*)/) {
      $val = $1;
      $val =~ s/^\s+//;
      $true = 0;
    }

    if ($val =~ /flag_overrides\(([^\)]+),\s*([^\)]+)\)/) {
      $val = $self->get_flag_overrides($1, $2);
    }
    else {
      $val = $self->get_value($val)
    }

    if (!defined $val) {
      $self->{'if_skip'} = $true;
    }
    else {
      $self->{'if_skip'} = !$true;
    }
  }
  else {
    push(@{$self->{'sstack'}}, "*$name");
  }
}


sub handle_else {
  my($self)  = shift;
  my(@scopy) = @{$self->{'sstack'}};

  ## This method does not take into account that
  ## multiple else clauses could be supplied to a single if.
  ## Someday, this may be fixed.
  if (defined $scopy[$#scopy] && $scopy[$#scopy] eq 'endif') {
    $self->{'if_skip'} ^= 1;
  }
}


sub handle_foreach {
  my($self)   = shift;
  my($val)    = shift;
  my($name)   = 'endfor';

  push(@{$self->{'lstack'}}, $self->line_number());
  if (!$self->{'if_skip'}) {
    push(@{$self->{'sstack'}}, $name);
    ++$self->{'foreach'}->{'count'};

    my($index) = $self->{'foreach'}->{'count'};
    $self->{'foreach'}->{'names'}->[$index] = $val;
    $self->{'foreach'}->{'text'}->[$index]  = '';
    $self->{'foreach'}->{'scope'}->[$index] = {};
  }
  else {
    push(@{$self->{'sstack'}}, "*$name");
  }
}


sub handle_special {
  my($self) = shift;
  my($name) = shift;
  my($val)  = shift;

  ## If $name (fornotlast, forfirst, etc.) is set to 1
  ## Then we append the $val onto the current string that's
  ## being built.
  if ($self->get_value($name)) {
    $self->append_current($val);
  }
}


sub handle_noextension {
  my($self) = shift;
  my($name) = shift;

  if (!$self->{'if_skip'}) {
    my($val) = $self->get_value_with_default($name);
    $val =~ s/\.[^\.]+$//;
    $self->append_current($val);
  }
}


sub handle_dirname {
  my($self) = shift;
  my($name) = shift;

  if (!$self->{'if_skip'}) {
    my($val) = $self->dirname($self->get_value_with_default($name));
    $self->append_current($val);
  }
}


sub handle_basename {
  my($self) = shift;
  my($name) = shift;

  if (!$self->{'if_skip'}) {
    my($val) = $self->basename($self->get_value_with_default($name));
    $self->append_current($val);
  }
}


sub handle_basenoextension {
  my($self) = shift;
  my($name) = shift;

  if (!$self->{'if_skip'}) {
    my($val) = $self->basename($self->get_value_with_default($name));
    $val =~ s/\.[^\.]+$//;
    $self->append_current($val);
  }
}


sub handle_flag_overrides {
  my($self) = shift;
  my($name) = shift;
  my($type) = '';

  ($name, $type) = split(/,\s*/, $name);

  if (!$self->{'if_skip'}) {
    my($value) = $self->get_flag_overrides($name, $type);
    if (defined $value) {
      $self->append_current($value);
    }
  }
}


sub handle_marker {
  my($self) = shift;
  my($name) = shift;

  if (!$self->{'if_skip'}) {
    my($value) = $self->{'prjc'}->get_verbatim($name);
    if (defined $value) {
      $self->append_current($value);
    }
  }
}


## Given a line that starts with an identifier, we split
## then name from the possible value stored inside ()'s and
## we stop looking at the line when we find the %> ending
sub split_name_value {
  my($self)   = shift;
  my($line)   = shift;
  my($length) = length($line);
  my($name)   = undef;
  my($val)    = undef;

  for(my $i = 0; $i < $length; ++$i) {
    my($ch) = substr($line, $i, 1);
    if (!defined $name && $ch eq '(') {
      $name = substr($line, 0, $i);
      $val  = '';
    }
    elsif (!defined $name && $ch eq '%') {
      if (substr($line, $i + 1, 1) eq '>') {
        $name = substr($line, 0, $i);
        last;
      }
    }
    elsif (defined $val && $ch ne ')') {
      $val .= $ch;
    }
    elsif (defined $val && $ch eq ')') {
      if (substr($line, $i + 1, 2) eq '%>') {
        last;
      }
      else {
        $val .= $ch;
      }
    }
  }

  return $name, $val;
}


sub process_name {
  my($self)        = shift;
  my($line)        = shift;
  my($length)      = 0;
  my($status)      = 1;
  my($errorString) = '';

  if ($line eq '') {
  }
  elsif ($line =~ /^(\w+)(\(([^\)]+|\".*\"|flag_overrides\([^\)]+,\s*[^\)]+\))\))?%>/) {
    my($name, $val) = $self->split_name_value($line);

    $length += length($name);
    if (defined $val) {
      $length += length($val) + 2;
    }

    if (defined $keywords{$name}) {
      if ($name eq 'endif' || $name eq 'endfor') {
        ($status, $errorString) = $self->handle_end($name);
      }
      elsif ($name eq 'if') {
        $self->handle_if($val);
      }
      elsif ($name eq 'else') {
        $self->handle_else();
      }
      elsif ($name eq 'foreach') {
        $self->handle_foreach($val);
      }
      elsif ($name eq 'fornotlast'  || $name eq 'forlast' ||
             $name eq 'fornotfirst' || $name eq 'forfirst') {
        $self->handle_special($name, $self->process_special($val));
      }
      elsif ($name eq 'comment') {
        ## Ignore the contents of the comment
      }
      elsif ($name eq 'flag_overrides') {
        $self->handle_flag_overrides($val);
      }
      elsif ($name eq 'marker') {
        $self->handle_marker($val);
      }
      elsif ($name eq 'noextension') {
        $self->handle_noextension($val);
      }
      elsif ($name eq 'dirname') {
        $self->handle_dirname($val);
      }
      elsif ($name eq 'basename') {
        $self->handle_basename($val);
      }
      elsif ($name eq 'basenoextension') {
        $self->handle_basenoextension($val);
      }
    }
    else {
      if (!$self->{'if_skip'}) {
        if (defined $val && !defined $self->{'defaults'}->{$name}) {
          $self->{'defaults'}->{$name} = $self->process_special($val);
        }

        $val = $self->get_value_with_default($name);
        $self->append_current($val);
      }
    }
  }
  else {
    my($error)  = $line;
    my($length) = length($line);
    for(my $i = 0; $i < $length; ++$i) {
      my($part) = substr($line, $i, 2);
      if ($part eq '%>') {
        $error = substr($line, 0, $i + 2);
        last;
      }
    }
    $status = 0;
    $errorString = "ERROR: Unable to parse line starting at $error";
  }

  return $status, $errorString, $length;
}


sub collect_data {
  my($self) = shift;
  my($prjc) = $self->{'prjc'};

  ## Save crlf so we don't have to keep going back to the prjc
  $self->{'crlf'} = $prjc->crlf();

  ## Collect the components into {'values'} somehow
  foreach my $key (keys %{$prjc->{'valid_components'}}) {
    my(@list) = $prjc->get_component_list($key);
    if (defined $list[0]) {
      $self->{'values'}->{$key} = "@list";
    }
  }

  ## A tiny hack (mainly for VC6 projects)
  ## for the workspace generator.  It needs to know the
  ## target names to match up with the project name.
  $prjc->update_project_info($self, 0, ['project_name']);

  ## This is for all projects
  $prjc->update_project_info($self, 1, ['depends']);

  ## VC7 Projects need to know the GUID.
  ## We need to save this value in our known values
  ## since each guid generated will be different.  We need
  ## this to correspond to the same guid used in the workspace.
  my($guid) = $prjc->update_project_info($self, 1, ['guid']);
  $self->{'values'}->{'guid'} = $guid;
}


sub is_only_keyword {
  my($self) = shift;
  my($line) = shift;

  ## Does the line contain only a keyword?
  if ($line =~ /^<%(.*)%>$/) {
    my($part) = $1;
    if ($part !~ /%>/) {
      $part =~ s/\(.*//;
      return (defined $keywords{$part} ? 1 : 0);
    }
  }
  return 0;
}


sub parse_line {
  my($self)        = shift;
  my($ih)          = shift;
  my($line)        = shift;
  my($status)      = 1;
  my($errorString) = '';
  my($length)      = length($line);
  my($name)        = 0;
  my($crlf)        = $self->{'crlf'};
  my($clen)        = length($crlf);
  my($startempty)  = ($line eq '' ? 1 : 0);
  my($append_name) = 0;

  ## If processing a foreach or the line only
  ## contains a keyword, then we do
  ## not need to add a newline to the end.
  if ($self->{'foreach'}->{'processing'} == 0 &&
      !$self->is_only_keyword($line)) {
    $line   .= $crlf;
    $length += $clen;
  }

  if ($self->{'foreach'}->{'count'} < 0) {
    $self->{'built'} = '';
  }

  for(my $i = 0; $i < $length; ++$i) {
    my($part) = substr($line, $i, 2);
    if ($part eq '<%') {
      ++$i;
      $name = 1;
    }
    elsif ($part eq '%>') {
      ++$i;
      $name = 0;
      if ($append_name) {
        $append_name = 0;
        if (!$self->{'if_skip'}) {
          $self->append_current($part);
        }
      }
    }
    elsif ($name) {
      my($substr)  = substr($line, $i);
      my($efcheck) = ($substr =~ /^endfor\%\>/);
      my($focheck) = ($substr =~ /^foreach\(/);

      if ($focheck && $self->{'foreach'}->{'count'} >= 0) {
        ++$self->{'foreach'}->{'nested'};
      }

      if ($self->{'foreach'}->{'count'} < 0 ||
          $self->{'foreach'}->{'processing'} > $self->{'foreach'}->{'nested'} ||
          (($efcheck || $focheck) &&
           $self->{'foreach'}->{'nested'} == $self->{'foreach'}->{'processing'})) {
        my($nlen) = 0;
        ($status,
         $errorString,
         $nlen) = $self->process_name($substr);

        if ($status && $nlen == 0) {
          $errorString = "ERROR: Could not parse this line at column $i";
          $status = 0;
        }
        if (!$status) {
          last;
        }

        $i += ($nlen - 1);
      }
      else  {
        $name = 0;
        if (!$self->{'if_skip'}) {
          $self->append_current('<%' . substr($line, $i, 1));
          $append_name = 1;
        }
      }

      if ($efcheck && $self->{'foreach'}->{'nested'} > 0) {
        --$self->{'foreach'}->{'nested'};
      }
    }
    else {
      if (!$self->{'if_skip'}) {
        $self->append_current(substr($line, $i, 1));
      }
    }
  }

  if ($self->{'foreach'}->{'count'} < 0) {
    ## If the line started out empty and we're not
    ## skipping from the start or the built up line is not empty
    if ($startempty ||
        ($self->{'built'} ne $crlf && $self->{'built'} ne '')) {
      push(@{$self->{'lines'}}, $self->{'built'});
    }
  }

  return $status, $errorString;
}


sub parse_file {
  my($self)  = shift;
  my($input) = shift;

  $self->collect_data();
  my($status, $errorString) = $self->read_file($input);

  if ($status) {
    my($sstack) = $self->{'sstack'};
    if (defined $$sstack[0]) {
      my($lstack) = $self->{'lstack'};
      $status = 0;
      $errorString = "ERROR: missing an $$sstack[0] starting at $$lstack[0]";
    }
  }

  if (!$status) {
    my($linenumber) = $self->line_number();
    $errorString = "$input: line $linenumber: $errorString\n";
  }

  return $status, $errorString;
}


sub get_lines {
  my($self) = shift;
  return $self->{'lines'};
}


1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99国产精品久久| 成人性生交大片免费看中文| 欧美日韩中文精品| 欧美丝袜丝交足nylons| 日本二三区不卡| 久久爱www久久做| 国产精品午夜免费| 日本亚洲欧美天堂免费| 91麻豆精品国产91久久久| 亚洲二区在线视频| 制服丝袜国产精品| 亚洲精品视频在线看| 亚洲欧洲av另类| 午夜视频在线观看一区二区| 悠悠色在线精品| 91啦中文在线观看| 国产日韩欧美激情| 美女视频黄 久久| 91在线观看视频| 奇米色777欧美一区二区| 欧美日韩卡一卡二| 日韩精品一二区| 精品国产免费一区二区三区香蕉 | 久久福利资源站| 91老师片黄在线观看| 日韩亚洲国产中文字幕欧美| 国产精品国产三级国产| 亚洲成a人v欧美综合天堂| 国产成人av电影在线观看| 日本电影欧美片| 亚洲激情在线激情| 国产一区二区精品久久| 欧美日产在线观看| 亚洲色图清纯唯美| 久久se精品一区二区| 日韩精品专区在线影院重磅| 亚洲欧美日韩在线| 久久综合九色综合97婷婷| 国产69精品久久777的优势| 国产性做久久久久久| 成人综合在线观看| 亚洲欧美日韩国产成人精品影院| 91丨porny丨户外露出| 国产大陆亚洲精品国产| 亚洲精品中文在线| 久久久久久影视| 欧美日韩不卡在线| 欧美色爱综合网| 色综合久久久久久久| 成人午夜伦理影院| 福利视频网站一区二区三区| 久久精品国产99国产精品| 天天综合日日夜夜精品| 亚洲国产一区二区在线播放| 一区二区三区在线不卡| 亚洲欧美日韩在线播放| 综合久久国产九一剧情麻豆| 亚洲欧洲av一区二区三区久久| 中文字幕欧美三区| 日本一区二区三级电影在线观看| 久久久99久久| 久久久777精品电影网影网| 国产精品视频免费看| 国产清纯美女被跳蛋高潮一区二区久久w | 国产午夜精品一区二区三区四区| 日韩三级中文字幕| 欧美日韩1234| 日韩免费成人网| 欧美大片日本大片免费观看| 国产日产欧美精品一区二区三区| 国产人成亚洲第一网站在线播放| 国产亚洲欧美日韩日本| 成人av午夜影院| 亚洲va在线va天堂| 免费一级欧美片在线观看| 欧美性色黄大片手机版| 丁香激情综合五月| 欧美在线999| 不卡欧美aaaaa| jiyouzz国产精品久久| 国产又黄又大久久| 国产精品77777竹菊影视小说| 美美哒免费高清在线观看视频一区二区| 日本电影亚洲天堂一区| 国产高清无密码一区二区三区| 欧美日韩国产精品自在自线| 成人免费看视频| 99国产精品久久| 99免费精品视频| 欧美一级生活片| 国产视频一区二区在线观看| 一区二区欧美在线观看| 午夜影院久久久| 美腿丝袜一区二区三区| 成人综合在线观看| av成人免费在线| 精品处破学生在线二十三| 国产精品青草综合久久久久99| 午夜精品福利久久久| 国产精品夜夜嗨| 在线播放91灌醉迷j高跟美女 | 中文字幕视频一区二区三区久| 亚洲欧美另类久久久精品| 午夜一区二区三区在线观看| 丁香网亚洲国际| 欧美日韩国产片| 国产欧美一区二区精品秋霞影院 | 精品国产伦一区二区三区观看体验 | 狠狠色丁香久久婷婷综合_中| 成人午夜激情片| 精品国产成人在线影院 | 最新不卡av在线| 国产一区免费电影| 欧美伊人精品成人久久综合97| 欧美一级片在线| 亚洲欧美激情在线| 国产精品 欧美精品| 免费观看日韩av| 91视视频在线直接观看在线看网页在线看 | 国产精品女同互慰在线看| 亚洲女女做受ⅹxx高潮| 国产乱妇无码大片在线观看| 精品视频色一区| 一卡二卡欧美日韩| 色综合久久综合| 久久一区二区三区国产精品| 成人激情午夜影院| 欧美tk—视频vk| 蜜臀91精品一区二区三区| 91精品福利视频| 亚洲精品免费看| 成人激情综合网站| 久久综合久久99| 琪琪久久久久日韩精品| 99re这里只有精品首页| 国产精品萝li| 丰满白嫩尤物一区二区| 亚洲国产精品二十页| 黄色小说综合网站| 久久精品日韩一区二区三区| 麻豆国产一区二区| 精品久久国产字幕高潮| 蜜臀99久久精品久久久久久软件| 宅男在线国产精品| 性做久久久久久久免费看| 欧美午夜电影在线播放| 亚洲一区二区视频在线| 成人视屏免费看| 亚洲视频在线一区| 99精品久久免费看蜜臀剧情介绍| 亚洲日本在线看| 色综合网色综合| 亚洲成av人影院| 欧美日本视频在线| 免费高清视频精品| 久久综合五月天婷婷伊人| 亚洲第四色夜色| 日韩一区和二区| 亚洲在线一区二区三区| 国产在线麻豆精品观看| 国产欧美一区二区在线| 怡红院av一区二区三区| 欧美日韩在线播放| 国产精品亚洲成人| 日本一区二区三区在线观看| 国产亚洲午夜高清国产拍精品| 91久久精品一区二区三| 国产精品久久久久四虎| 亚洲欧美日韩国产综合在线| 欧美一卡2卡3卡4卡| 亚洲精选视频免费看| 777色狠狠一区二区三区| 美女视频网站久久| 国产精品不卡一区| 色av综合在线| 久99久精品视频免费观看| 久久久久久97三级| 在线亚洲精品福利网址导航| 日韩综合小视频| 久久久久久久久伊人| 99国产精品一区| 亚洲欧洲性图库| 日韩免费视频一区二区| 丁香天五香天堂综合| 日韩不卡一二三区| 国产亚洲一区二区三区| 在线播放日韩导航| 国产69精品久久99不卡| 午夜激情久久久| 国产欧美一区二区精品婷婷| 欧美视频一区二区三区四区| 精品一区二区三区不卡 | 成人性视频网站| 一区二区三区四区蜜桃| 欧美大片在线观看一区二区| 成人一区二区三区视频| 亚洲精品成人在线| 884aa四虎影成人精品一区| 国产v综合v亚洲欧| 亚洲v日本v欧美v久久精品|