1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
#!/usr/bin/php -q
<?php
/* vim: noet
+----------------------------------------------------------------------+
| PHP Version 4 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2010 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.0 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_0.txt. |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Jakub Vrana <vrana@php.net> |
+----------------------------------------------------------------------+
$Id: html_syntax.php 293138 2010-01-05 10:21:11Z rquadling $
*/
if ($_SERVER["argc"] < 4) {
exit("Purpose: Syntax highlight PHP examples in DSSSL generated HTML manual.\n"
.'Usage: html_syntax.php [ "html" | "php" ] [ "xsl" | "dsssl" ] [ filename.ext | dir | wildcard ] ...' ."\n"
.'"html" - highlight_string() is applied, "php" - highlight_php() is added' ."\n"
);
}
set_time_limit(5*60); // can run long, but not more than 5 minutes
function callback_html_number_entities_decode($matches) {
return chr($matches[1]);
}
function callback_highlight_php($matches) {
if ($GLOBALS['DECODE'] === true) {
$with_tags = preg_replace_callback("!&#([0-9]+);!", "callback_html_number_entities_decode", trim($matches[1]));
} else {
$with_tags = trim($matches[1]);
}
if ($GLOBALS["TYPE"] == "php") {
return "\n<?php\nhighlight_php('". addcslashes($with_tags, "'\\") ."');\n?>\n";
} else { // "html"
return highlight_string($with_tags, true);
}
}
function callback_highlight_xml_indent($match) {
return strtr($match[0], array(' ' => ' ', "\t" => ' '));
}
function callback_highlight_xml($matches) {
$source = trim(htmlentities($matches[1]));
$match = array(
'/(\w+)=("|\')(.*?)(\2)/',
'/!DOCTYPE (\w+) (\w+) ("|\'|")(.*?)("|\'|")/',
'/<([a-zA-Z_][a-zA-Z0-9_:-]*)/',
'/<\/([a-zA-Z_][a-zA-Z0-9_:-]*)>/',
'/<!--/',
'/-->/',
'/<\?xml (.*?) ?\?>/i',
'/<!\[CDATA\[(.*)\]\]>/i',
);
$replace = array(
'<span class="attributes">$1</span>=<span class="string">$2$3$2</span>',
'<span class="tags">!DOCTYPE</span> <span class="attributes">$1 $2 $3$4$3</span>',
'<<span class="tags">$1</span>',
'</<span class="tags">$1</span>>',
'<span class="comment"><!--',
'--></span>',
'<<span class="tags">?xml</span> $1 <span class="tags">?</span>>',
'<span class="tags"><![<span class="keyword">CDATA</span>[</span><span class="cdata">$1</span><span class="tags">]]></span>'
);
$result = preg_replace($match, $replace, $source);
$result = preg_replace_callback('/^([ \t]+)/m', 'callback_highlight_xml_indent', $result);
return '<div class="xmlcode">' . nl2br($result) . '</div>';
}
$files = $_SERVER["argv"];
array_shift($files); // $argv[0] - script filename
$TYPE = array_shift($files); // "html" or "php"
$build_medium = array_shift($files);
$DECODE = ($build_medium !== "xsl");
while (($file = array_shift($files)) !== null) {
if (is_file($file)) {
$process = array($file);
} elseif (is_dir($file)) {
$lastchar = substr($file, -1);
$process = glob($file . ($lastchar == "/" || $lastchar == "\\" ? "*" : "/*"));
} else { // should be wildcard
$process = glob($file);
}
foreach ($process as $filename) {
if (!is_file($filename)) { // do not recurse
continue;
}
//~ echo "$filename\n";
$original = file_get_contents($filename);
$highlighted = preg_replace_callback("!<PRE\r?\nCLASS=\"php\"\r?\n>(.*)</PRE\r?\n>!sU", "callback_highlight_php", $original);
$highlighted = preg_replace_callback("@<HIGHLIGHTPHPCODE>(.*)</HIGHLIGHTPHPCODE>@sU", "callback_highlight_php", $highlighted); /* Used in the XSL build for PHP code */
$highlighted = preg_replace_callback("@<HIGHLIGHTXMLCODE>(.*)</HIGHLIGHTXMLCODE>@sU", "callback_highlight_xml", $highlighted); /* Used in the XSL build for XML code */
if ($original != $highlighted) {
// file_put_contents is only in PHP >= 5
$fp = fopen($filename, "wb");
fwrite($fp, $highlighted);
fclose($fp);
}
}
}
?>
|