core\Template::compile PHP Method

compile() private static method

private static compile ( $templateName )
    private static function compile($templateName)
    {
        $headers = '';
        $fp = @fopen(self::getPath($templateName), 'rb');
        if (!$fp) {
            return;
        }
        $sourceCode = '';
        while (!feof($fp)) {
            $sourceCode .= fread($fp, 8192);
        }
        $lock = new PHPLock($sourceCode);
        $lock->acquire();
        // variable with braces:
        $sourceCode = preg_replace('/\\{\\$([A-Za-z0-9_\\[\\]\'"]+)(->|::)(\\$?[A-Za-z0-9_\\-]+)(\\(.*\\))?}/', '<?php echo \\$\\1\\2\\3\\4; ?>', $sourceCode);
        $sourceCode = preg_replace('/\\{\\$([A-Za-z0-9_\\[\\]\\->\\(\\)]+)\\}/', '<?php echo \\$\\1; ?>', $sourceCode);
        $sourceCode = preg_replace('/\\{([A-Z][A-Z0-9_\\[\\]]*)\\}/', '<?php echo \\1; ?>', $sourceCode);
        $sourceCode = preg_replace('/\\{\\((.*)\\)}/', '<?php echo \\1; ?>', $sourceCode);
        $lock->acquire();
        // PHP code:
        $sourceCode = preg_replace('/<php>(.+?)<\\/php>/is', '<?php \\1; ?>', $sourceCode);
        $lock->acquire();
        // import:
        $sourceCode = preg_replace('/\\<import template="([A-z0-9_\\-\\/]+)"[\\/ ]*\\>(<\\/import>)?/i', '<?php include \\Core\\Template::load(\'\\1\'); ?>', $sourceCode);
        $lock->acquire();
        // loop:
        $sourceCode = preg_replace_callback('/\\<loop(.*?)\\>/is', array('\\Core\\Template', 'parseLoop'), $sourceCode);
        $sourceCode = preg_replace('/\\<\\/loop\\>/i', '<?php } ?>', $sourceCode);
        $lock->acquire();
        // if:
        $sourceCode = preg_replace('/\\<if (?:condition=)?"(.+?)"[\\/ ]*\\>/i', '<?php if(\\1) { ?>', $sourceCode);
        $sourceCode = preg_replace('/\\<elseif (?:condition=)?"(.+?)"[\\/ ]*\\>/i', '<?php } elseif(\\1) { ?>', $sourceCode);
        $sourceCode = preg_replace('/\\<else[\\/ ]*\\>/i', '<?php } else { ?>', $sourceCode);
        $sourceCode = preg_replace('/\\<\\/if\\>/i', '<?php } ?>', $sourceCode);
        $lock->acquire();
        // header:
        preg_match_all('/\\<meta header="(.+?)" content="(.+?)"[ \\/]*\\>/i', $sourceCode, $matches);
        foreach ($matches[0] as $offset => $string) {
            $headers .= "header('{$matches[1][$offset]}: {$matches[2][$offset]}');" . PHP_EOL;
            $sourceCode = str_replace($string, '', $sourceCode);
        }
        $lock->acquire();
        // variable without braces
        $sourceCode = preg_replace('/\\$([a-z][A-Za-z0-9_]+)/', '<?php echo \\$\\1; ?>', $sourceCode);
        // unlock PHP code
        $lock->release();
        // rewrite link
        if (!defined('USE_REWRITE') || !USE_REWRITE) {
            $sourceCode = preg_replace_callback('/(href|action)="([A-Z0-9_\\.\\-\\/%\\?=&]*?)"/is', array('\\Core\\Template', 'parseUrlRewrite'), $sourceCode);
        }
        // clear space and tab
        $sourceCode = preg_replace('/^[ \\t]*(.+)[ \\t]*$/m', '\\1', $sourceCode);
        $sourceCode = preg_replace('/[\\r\\n]/', '', $sourceCode);
        $output = '<?php' . PHP_EOL;
        $output .= 'if(!defined(\'ROOT_PATH\'))';
        $output .= ' exit(\'This file could not be access directly.\');' . PHP_EOL;
        if ($headers) {
            $output .= $headers;
        }
        $output .= '?>' . PHP_EOL;
        $output .= $sourceCode;
        $output = preg_replace('/\\s*\\?\\>\\s*\\<\\?php\\s*/is', PHP_EOL, $output);
        self::createDir(dirname(DATA_PATH . "Template/{$templateName}.php"));
        if (!file_exists(DATA_PATH . "Template/{$templateName}.php")) {
            @touch(DATA_PATH . "Template/{$templateName}.php");
        }
        if (!is_writable(DATA_PATH . "Template/{$templateName}.php")) {
            throw new Error('Cannot write template file: ' . DATA_PATH . "Template/{$templateName}.php", 8);
        }
        file_put_contents(DATA_PATH . "Template/{$templateName}.php", $output);
    }