- <?php
- error_reporting(E_ALL);
-
- if (isset($_GET['thing']) === false)
- {
- $thing = 'source.php';
- }
- else
- {
- $thing = basename($_GET['thing']);
- }
-
- if ($thing !== 'source.php')
- {
- $thing = 'source/' . $thing;
- }
-
- if (file_exists($thing) === false || substr($thing, -4) != '.php')
- {
- Header('Content-type: text/plain');
- printf("I'm not that dumb. Mm'k?");
- exit();
- }
-
-
-
-
-
- if (defined('T_ML_COMMENT') === false)
- {
-
- define('T_ML_COMMENT', T_COMMENT);
- }
- else
- {
-
- define('T_DOC_COMMENT', T_ML_COMMENT);
- }
-
-
-
-
-
-
-
- function highlight($file)
- {
- static $functions = false;
-
- if ($functions === false)
- {
- $functions = get_defined_functions();
- $functions = $functions['internal'];
- }
-
-
- $str = trim(file_get_contents($file));
-
-
- $tokens = token_get_all($str);
-
-
- $code = '<ol id="highlight">' . "\n" . '<li class="odd">';
-
- $iterator = 1;
- foreach ($tokens as $key => $token)
- {
-
- if (is_array($token))
- {
- $value = $token[1];
- $token = $token[0];
- }
- else
- {
- $value = $token;
- }
-
-
- $base = $value;
- $value = htmlentities($value);
-
-
- $value = str_replace(array("\t", ' '), array(' ', ' '), $value);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- switch ($token)
- {
- case '@':
- {
- $code .= '<span class="errSupp">' . $value . '</span>';
- break;
- }
-
- case '!':
- {
- $code .= '<span class="notOper">' . $value . '</span>';
- break;
- }
-
- case '=':
- {
- $code .= '<span class="equalSign">' . $value . '</span>';
- break;
- }
-
- case '{':
- {
- $code .= '<span class="curlyOpen">' . $value . '</span>';
- break;
- }
-
- case '}':
- {
- $code .= '<span class="curlyClose">' . $value . '</span>';
- break;
- }
-
- case '(':
- {
- $code .= '<span class="parenOpen">' . $value . '</span>';
- break;
- }
-
- case ')':
- {
- $code .= '<span class="parenClose">' . $value . '</span>';
- break;
- }
-
- case '[':
- {
- $code .= '<span class="bracketOpen">' . $value . '</span>';
- break;
- }
-
- case ']':
- {
- $code .= '<span class="bracketClose">' . $value . '</span>';
- break;
- }
-
- case ';':
- {
- $code .= '<span class="semiColon">' . $value . '</span>';
- break;
- }
-
- case ',':
- {
- $code .= '<span class="comma">' . $value . '</span>';
- break;
- }
-
- case ':':
- {
- $code .= '<span class="colon">' . $value . '</span>';
- break;
- }
-
- case '.':
- {
- $code .= '<span class="concat">' . $value . '</span>';
- break;
- }
-
- case '<':
- {
- $code .= '<span class="lessThan">' . $value . '</span>';
- break;
- }
-
- case '>':
- {
- $code .= '<span class="greaterThan">' . $value . '</span>';
- break;
- }
-
- case '+':
- {
- $code .= '<span class="addition">' . $value . '</span>';
- break;
- }
-
- case '-':
- {
- $code .= '<span class="subtraction">' . $value . '</span>';
- break;
- }
-
- case '*':
- {
- $code .= '<span class="multiplication">' . $value . '</span>';
- break;
- }
-
- case '/':
- {
- $code .= '<span class="division">' . $value . '</span>';
- break;
- }
-
- case '%':
- {
- $code .= '<span class="modulus">' . $value . '</span>';
- break;
- }
-
- case '&':
- {
- $code .= '<span class="bitAnd">' . $value . '</span>';
- break;
- }
-
- case '|':
- {
- $code .= '<span class="bitOr">' . $value . '</span>';
- break;
- }
-
- case '^':
- {
- $code .= '<span class="bitXor">' . $value . '</span>';
- break;
- }
-
- case '~':
- {
- $code .= '<span class="bitNot">' . $value . '</span>';
- break;
- }
-
- default:
- {
-
- if ($value == "\n")
- {
- $code .= ' </li>' . "\n" . '<li class="' . (++$iterator % 2 ? "odd" : "even") . '">';
- }
- else
- {
-
- $lines = explode("\n", $value);
-
- foreach ($lines as $key => $line)
- {
-
- if (trim($line) != '')
- {
- switch ($token)
- {
-
- case T_EXIT:
- case T_SWITCH:
- case T_BREAK:
- case T_ECHO:
- case T_ARRAY:
- case T_ISSET:
- case T_FOREACH:
- case T_REQUIRE_ONCE:
- case T_UNSET:
- case T_RETURN:
- case T_STRING:
- {
- if ($token !== T_STRING || in_array(strtolower($value), $functions) === true)
- {
- $code .= '<span class="' . (is_int($token) ? token_name($token) : 'unknown') . '"><a class="' . (is_int($token) ? token_name($token) : 'unknown') . '" href="http://www.php.net/manual-lookup.php?lang=en&pattern=' . strtolower($value) . '">' . $line . '</a></span>';
- break;
- }
- }
-
- default:
- {
- $code .= '<span class="' . (is_int($token) ? token_name($token) : 'unknown') . '">' . $line . '</span>';
- break;
- }
- }
- }
-
-
- if (count($lines) > 1 && isset($lines[$key + 1]))
- {
- $code .= ' </li>' . "\n" . '<li class="' . (++$iterator % 2 ? "odd" : "even") . '">';
- }
- }
- }
-
- break;
- }
- }
- }
-
-
- $code .= ' </li>' . "\n" . '</ol>' . "\n";
-
-
- return $code;
- }
- ?>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
-
- <html>
- <head>
- <title>source: viewing '<?php echo htmlentities(basename($thing)); ?>'</title>
-
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <meta http-equiv="Pragma" content="no-cache">
-
- <style type="text/css">
- @import url('http://rick.gibbed.us/styles/highlight.css');
-
- body
- {
- margin: 0em;
- padding: 0em;
- font-size: 0.8em;
-
- font-family: Tahoma, Verdana, Arial, sans-serif;
- }
-
- #highlight
- {
- width: auto;
- margin-left: 4em;
- }
-
- #highlight li
- {
- font-family: "Courier New", Courier, monospace;
- white-space: nowrap;
- }
-
- #highlight li.odd
- {
- background-color: #ffffff;
- }
-
- #highlight li.even
- {
- background-color: #f9f9f9;
- }
- </style>
- </head>
-
- <body>
- <?php echo highlight($thing); ?>
- </body>
- </html>