public function build($value, Route $route, ARouteNode $parent) { if ($value === '*') { return new RouteNodeLeafAny($parent, $route->getDefaults()); } else { if ($value === '') { return new RouteNodeLeaf($parent, $route->getDefaults()); } else { if (strpos($value, ':') === false) { return new RouteNode($parent, $value); } else { $matches = array(); preg_match('/:(?<ident>[A-Za-z0-9]+)/', $value, $matches); if (!isset($matches['ident'])) { throw new RouterException("Invalid parameter: " . $value); } $ident = $matches['ident']; $pattern = $route->getParamPattern($ident); if ($pattern !== false) { return new RouteNodeParam($parent, $value, $ident, $pattern); } else { return new RouteNodeParamSimple($parent, $ident); } } } } }