',', ': ' => ':', '' => '', ' ' => ' ', ':' => ' :', '+' => '+', '~' => '~', '>' => '>', '|' => '|', '^' => '^', '^^' => '^^' ); } else { Less_Environment::$_outputMap = array( ',' => ', ', ': ' => ': ', '' => '', ' ' => ' ', ':' => ' :', '+' => ' + ', '~' => ' ~ ', '>' => ' > ', '|' => '|', '^' => ' ^ ', '^^' => ' ^^ ' ); } } public function copyEvalEnv( $frames = array() ) { $new_env = new Less_Environment(); $new_env->frames = $frames; return $new_env; } public static function isMathOn() { return !Less_Parser::$options['strictMath'] || Less_Environment::$parensStack; } public static function isPathRelative( $path ) { return !preg_match( '/^(?:[a-z-]+:|\/)/', $path ); } /** * Canonicalize a path by resolving references to '/./', '/../' * Does not remove leading "../" * @param string path or url * @return string Canonicalized path * */ public static function normalizePath( $path ) { $segments = explode( '/', $path ); $segments = array_reverse( $segments ); $path = array(); $path_len = 0; while ( $segments ) { $segment = array_pop( $segments ); switch ( $segment ) { case '.': break; case '..': if ( !$path_len || ( $path[$path_len - 1] === '..' ) ) { $path[] = $segment; $path_len++; } else { array_pop( $path ); $path_len--; } break; default: $path[] = $segment; $path_len++; break; } } return implode( '/', $path ); } public function unshiftFrame( $frame ) { array_unshift( $this->frames, $frame ); } public function shiftFrame() { return array_shift( $this->frames ); } }