コード例 #1
0
 /**
  * @param string    $source
  * @param int       $pos
  *
  * @return int
  */
 public function parse($source, $pos = 0)
 {
     $this->length = 0;
     $this->match = '';
     $this->host = '';
     $this->item = '';
     $this->function = '';
     $p = $pos;
     if (!isset($source[$p]) || $source[$p] !== '{') {
         return self::PARSE_FAIL;
     }
     $p++;
     if (!$this->parseHost($source, $p)) {
         return self::PARSE_FAIL;
     }
     if (!isset($source[$p]) || $source[$p] !== ':') {
         return self::PARSE_FAIL;
     }
     $p++;
     $p2 = $p;
     if ($this->item_key_parser->parse($source, $p) == CParser::PARSE_FAIL) {
         return self::PARSE_FAIL;
     }
     $p += $this->item_key_parser->getLength();
     // for instance, agent.ping.last(0)
     if ($this->item_key_parser->getParamsNum() == 0 && isset($source[$p]) && $source[$p] == '(') {
         for (; $p > $p2 && $source[$p] != '.'; $p--) {
             // Code is not missing here.
         }
         if ($p == $p2) {
             return self::PARSE_FAIL;
         }
     }
     $p3 = $p;
     if (!isset($source[$p]) || $source[$p] !== '.') {
         return self::PARSE_FAIL;
     }
     $p++;
     if ($this->function_parser->parse($source, $p) == CParser::PARSE_FAIL) {
         return self::PARSE_FAIL;
     }
     $p += $this->function_parser->getLength();
     if (!isset($source[$p]) || $source[$p] !== '}') {
         return self::PARSE_FAIL;
     }
     $p++;
     $this->length = $p - $pos;
     $this->match = substr($source, $pos, $this->length);
     $this->host = substr($source, $pos + 1, $p2 - $pos - 2);
     $this->item = substr($source, $p2, $p3 - $p2);
     $this->function = $this->function_parser->getMatch();
     return isset($source[$pos + $this->length]) ? self::PARSE_SUCCESS_CONT : self::PARSE_SUCCESS;
 }