diff options
Diffstat (limited to 'lib/lib_phpQuery.php')
| -rw-r--r-- | lib/lib_phpQuery.php | 108 |
1 files changed, 55 insertions, 53 deletions
diff --git a/lib/lib_phpQuery.php b/lib/lib_phpQuery.php index c4c9e395c..797c1676a 100644 --- a/lib/lib_phpQuery.php +++ b/lib/lib_phpQuery.php @@ -1033,7 +1033,22 @@ class CallbackBody extends Callback { $param3 = null) { $params = func_get_args(); $params = array_slice($params, 2); - $this->callback = create_function($paramList, $code); + + $this->callback = function (&...$args) use ($paramList, $code) { + $paramListArray = explode(',', $paramList); + for ($i = 0; $i < count($paramListArray); $i++) { + $param = trim($paramListArray[$i]); + if ($param[0] === '&') { + $paramName = ltrim($param, '&$'); + ${$paramName} = &$args[$i]; + } else { + $paramName = ltrim($param, '$'); + ${$paramName} = $args[$i]; + } + } + return eval($code); + }; + $this->params = $params; } } @@ -2093,16 +2108,18 @@ class phpQueryObject break; case 'parent': $this->elements = $this->map( - create_function('$node', ' + function ($node) { return $node instanceof DOMELEMENT && $node->childNodes->length - ? $node : null;') + ? $node : null; + } )->elements; break; case 'empty': $this->elements = $this->map( - create_function('$node', ' + function ($node) { return $node instanceof DOMELEMENT && $node->childNodes->length - ? null : $node;') + ? null : $node; + } )->elements; break; case 'disabled': @@ -2115,47 +2132,38 @@ class phpQueryObject break; case 'enabled': $this->elements = $this->map( - create_function('$node', ' - return pq($node)->not(":disabled") ? $node : null;') + function ($node) { + return pq($node)->not(":disabled") ? $node : null; + } )->elements; break; case 'header': $this->elements = $this->map( - create_function('$node', - '$isHeader = isset($node->tagName) && in_array($node->tagName, array( + function ($node) { + $isHeader = isset($node->tagName) && in_array($node->tagName, array( "h1", "h2", "h3", "h4", "h5", "h6", "h7" )); return $isHeader ? $node - : null;') + : null; + } )->elements; -// $this->elements = $this->map( -// create_function('$node', '$node = pq($node); -// return $node->is("h1") -// || $node->is("h2") -// || $node->is("h3") -// || $node->is("h4") -// || $node->is("h5") -// || $node->is("h6") -// || $node->is("h7") -// ? $node -// : null;') -// )->elements; break; case 'only-child': $this->elements = $this->map( - create_function('$node', - 'return pq($node)->siblings()->size() == 0 ? $node : null;') + function ($node) { + return pq($node)->siblings()->size() == 0 ? $node : null; + } )->elements; break; case 'first-child': $this->elements = $this->map( - create_function('$node', 'return pq($node)->prevAll()->size() == 0 ? $node : null;') + function ($node) { return pq($node)->prevAll()->size() == 0 ? $node : null; } )->elements; break; case 'last-child': $this->elements = $this->map( - create_function('$node', 'return pq($node)->nextAll()->size() == 0 ? $node : null;') + function ($node) { return pq($node)->nextAll()->size() == 0 ? $node : null; } )->elements; break; case 'nth-child': @@ -2163,32 +2171,33 @@ class phpQueryObject if (! $param) break; // nth-child(n+b) to nth-child(1n+b) - if ($param{0} == 'n') + if ($param[0] == 'n') $param = '1'.$param; // :nth-child(index/even/odd/equation) if ($param == 'even' || $param == 'odd') $mapped = $this->map( - create_function('$node, $param', - '$index = pq($node)->prevAll()->size()+1; + function ($node, $param) { + $index = pq($node)->prevAll()->size()+1; if ($param == "even" && ($index%2) == 0) return $node; else if ($param == "odd" && $index%2 == 1) return $node; else - return null;'), + return null; + }, new CallbackParam(), $param ); - else if (mb_strlen($param) > 1 && $param{1} == 'n') + else if (mb_strlen($param) > 1 && $param[1] == 'n') // an+b $mapped = $this->map( - create_function('$node, $param', - '$prevs = pq($node)->prevAll()->size(); + function ($node, $param) { + $prevs = pq($node)->prevAll()->size(); $index = 1+$prevs; $b = mb_strlen($param) > 3 - ? $param{3} + ? $param[3] : 0; - $a = $param{0}; - if ($b && $param{2} == "-") + $a = $param[0]; + if ($b && $param[2] == "-") $b = -$b; if ($a > 0) { return ($index-$b)%$a == 0 @@ -2215,20 +2224,21 @@ class phpQueryObject // return ($index-$b)%$a == 0 // ? $node // : null; - '), + }, new CallbackParam(), $param ); else // index $mapped = $this->map( - create_function('$node, $index', - '$prevs = pq($node)->prevAll()->size(); + function ($node, $index) { + $prevs = pq($node)->prevAll()->size(); if ($prevs && $prevs == $index-1) return $node; else if (! $prevs && $index == 1) return $node; else - return null;'), + return null; + }, new CallbackParam(), $param ); $this->elements = $mapped->elements; @@ -4701,11 +4711,6 @@ abstract class phpQuery { while (preg_match($regex, $php, $matches)) { $php = preg_replace_callback( $regex, -// create_function('$m, $charset = "'.$charset.'"', -// 'return $m[1].$m[2] -// .htmlspecialchars("<"."?php".$m[4]."?".">", ENT_QUOTES|ENT_NOQUOTES, $charset) -// .$m[5].$m[2];' -// ), array('phpQuery', '_phpToMarkupCallback'), $php ); @@ -4737,9 +4742,6 @@ abstract class phpQuery { /* <php>...</php> to <?php...? > */ $content = preg_replace_callback( '@<php>\s*<!--(.*?)-->\s*</php>@s', -// create_function('$m', -// 'return "<'.'?php ".htmlspecialchars_decode($m[1])." ?'.'>";' -// ), array('phpQuery', '_markupToPHPCallback'), $content ); @@ -4752,15 +4754,15 @@ abstract class phpQuery { while (preg_match($regex, $content)) $content = preg_replace_callback( $regex, - create_function('$m', - 'return $m[1].$m[2].$m[3]."<?php " + function ($m) { + return $m[1].$m[2].$m[3]."<?php " .str_replace( array("%20", "%3E", "%09", " ", "	", "%7B", "%24", "%7D", "%22", "%5B", "%5D"), - array(" ", ">", " ", "\n", " ", "{", "$", "}", \'"\', "[", "]"), + array(" ", ">", " ", "\n", " ", "{", "$", "}", '"', "[", "]"), htmlspecialchars_decode($m[4]) ) - ." ?>".$m[5].$m[2];' - ), + ." ?>".$m[5].$m[2]; + }, $content ); return $content; |
