| OLD | NEW |
| (Empty) |
| 1 <?php | |
| 2 /*******************************************************************************
****** | |
| 3 * cssgen.php | |
| 4 * ---------- | |
| 5 * Author: Nigel McNie (nigel@geshi.org) | |
| 6 * Copyright: (c) 2004 Nigel McNie | |
| 7 * Release Version: 1.0.8.1 | |
| 8 * Date Started: 2004/05/20 | |
| 9 * | |
| 10 * Application to generate custom CSS files for GeSHi (based on an idea by Andre
as | |
| 11 * Gohr) | |
| 12 * | |
| 13 *******************************************************************************
****** | |
| 14 * | |
| 15 * This file is part of GeSHi. | |
| 16 * | |
| 17 * GeSHi is free software; you can redistribute it and/or modify | |
| 18 * it under the terms of the GNU General Public License as published by | |
| 19 * the Free Software Foundation; either version 2 of the License, or | |
| 20 * (at your option) any later version. | |
| 21 * | |
| 22 * GeSHi is distributed in the hope that it will be useful, | |
| 23 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 25 * GNU General Public License for more details. | |
| 26 * | |
| 27 * You should have received a copy of the GNU General Public License | |
| 28 * along with GeSHi; if not, write to the Free Software | |
| 29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 30 * | |
| 31 *******************************************************************************
*****/ | |
| 32 | |
| 33 set_magic_quotes_runtime(0); | |
| 34 // | |
| 35 // Functions | |
| 36 // | |
| 37 | |
| 38 function make_header ( $title ) | |
| 39 { | |
| 40 echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w
3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |
| 41 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | |
| 42 <head> | |
| 43 <title>GeSHi CSS Generator :: ' . $title . ' </title> | |
| 44 <style type="text/css" media="screen"> | |
| 45 <!-- | |
| 46 html { | |
| 47 font-family: Verdana, Arial, sans-serif; | |
| 48 font-size: 80%; | |
| 49 background-color: #d0d0d0; | |
| 50 } | |
| 51 body { | |
| 52 margin: 10px; | |
| 53 padding: 5px; | |
| 54 border: 1px solid #f0f0f0; | |
| 55 background-color: #f6f6f6; | |
| 56 } | |
| 57 h1 { | |
| 58 border-bottom: 2px solid #e0e0e0; | |
| 59 font-weight: normal; | |
| 60 font-size: 150%; | |
| 61 color: #c0c0c0; | |
| 62 } | |
| 63 input, textarea { | |
| 64 border: 1px solid #d0d0d0; | |
| 65 } | |
| 66 th { | |
| 67 text-align: right; | |
| 68 font-weight: normal; | |
| 69 } | |
| 70 pre { | |
| 71 font-size: 110%; | |
| 72 color: #202020; | |
| 73 } | |
| 74 #footer { | |
| 75 color: #b0b0b0; | |
| 76 text-align: center; | |
| 77 font-size: 90%; | |
| 78 margin: 0 auto; | |
| 79 border-top: 1px solid #e0e0e0; | |
| 80 } | |
| 81 #footer a { | |
| 82 color: #c0c0c0; | |
| 83 } | |
| 84 --> | |
| 85 </style> | |
| 86 <script type="text/javascript"> | |
| 87 function select (state) | |
| 88 { | |
| 89 var cboxes = document.getElementsByTagName(\'input\'); | |
| 90 for (var i = 0; i < cboxes.length; i++) { | |
| 91 if (cboxes[i].type == "checkbox") { | |
| 92 if (state == "true") { | |
| 93 cboxes[i].checked = true; | |
| 94 } else if (state == "false") { | |
| 95 cboxes[i].checked = false; | |
| 96 } else if (state == "invert") { | |
| 97 cboxes[i].checked = !cboxes[i].checked; | |
| 98 } | |
| 99 } | |
| 100 } | |
| 101 } | |
| 102 </script> | |
| 103 </head> | |
| 104 <body> | |
| 105 <h1>' . $title . '</h1> | |
| 106 '; | |
| 107 } | |
| 108 | |
| 109 function make_footer () | |
| 110 { | |
| 111 echo '<div id="footer"><a href="http://qbnz.com/highlighter/">GeSHi</a> &cop
y; Nigel McNie, 2004, released under the GPL</div></body> | |
| 112 </html>'; | |
| 113 } | |
| 114 | |
| 115 | |
| 116 function get_var ( $var_name ) | |
| 117 { | |
| 118 if ( isset($_GET[$var_name]) ) | |
| 119 { | |
| 120 return str_replace("\'", "'", $_GET[$var_name]); | |
| 121 } | |
| 122 elseif ( isset($_POST[$var_name]) ) | |
| 123 { | |
| 124 return str_replace("\'", "'", $_POST[$var_name]); | |
| 125 } | |
| 126 return null; | |
| 127 } | |
| 128 | |
| 129 | |
| 130 | |
| 131 // | |
| 132 // Unset everything | |
| 133 // | |
| 134 foreach ( $_REQUEST as $var ) | |
| 135 { | |
| 136 unset($$var); | |
| 137 } | |
| 138 foreach ( array( | |
| 139 '_POST' => 'HTTP_POST_VARS', | |
| 140 '_GET' => 'HTTP_GET_VARS', | |
| 141 '_COOKIE' => 'HTTP_COOKIE_VARS', | |
| 142 '_SERVER' => 'HTTP_SERVER_VARS', | |
| 143 '_ENV' => 'HTTP_ENV_VARS', | |
| 144 '_FILES' => 'HTTP_POST_FILES') as $array => $other ) | |
| 145 { | |
| 146 if ( !isset($$array) ) | |
| 147 { | |
| 148 $$array = $$other; | |
| 149 } | |
| 150 unset($$other); | |
| 151 } | |
| 152 | |
| 153 | |
| 154 // Get what step we're up to | |
| 155 $step = get_var('step'); | |
| 156 | |
| 157 if ( !$step || $step == 1 ) | |
| 158 { | |
| 159 $errors = 0; | |
| 160 make_header('Step 1'); | |
| 161 echo "Welcome to the GeSHi CSS generator.<br /><pre>Searching for GeSHi...
"; | |
| 162 | |
| 163 // Find GeSHi | |
| 164 $geshi_path = get_var('geshi-path'); | |
| 165 $geshi_lang_path = get_var('geshi-lang-path'); | |
| 166 | |
| 167 if ( !$geshi_path ) | |
| 168 { | |
| 169 $geshi_path = '../geshi.php'; | |
| 170 } | |
| 171 if ( !$geshi_lang_path ) | |
| 172 { | |
| 173 $geshi_lang_path = '../geshi/'; | |
| 174 } | |
| 175 | |
| 176 | |
| 177 if ( is_file($geshi_path) && is_readable($geshi_path) ) | |
| 178 { | |
| 179 // Get file contents and see if GeSHi is in here | |
| 180 $file = @file($geshi_path); | |
| 181 $contents = ''; | |
| 182 foreach ( $file as $line ) | |
| 183 { | |
| 184 $contents .= $line; | |
| 185 } | |
| 186 if ( strpos($contents, '<?php | |
| 187 /** | |
| 188 * GeSHi - Generic Syntax Highlighter') !== false ) | |
| 189 { | |
| 190 echo '<span style="color: green;">Found at ' . realpath($geshi_path)
. '</span>'; | |
| 191 } | |
| 192 else | |
| 193 { | |
| 194 ++$errors; | |
| 195 $no_geshi_dot_php_error = true; | |
| 196 echo '<span style="color: red;">Not found</span>'; | |
| 197 } | |
| 198 } | |
| 199 else | |
| 200 { | |
| 201 ++$errors; | |
| 202 $no_geshi_dot_php_error = true; | |
| 203 echo '<span style="color: red;">Not found</span>'; | |
| 204 } | |
| 205 | |
| 206 // Find language files | |
| 207 echo "\nSearching for language files... "; | |
| 208 if ( is_readable($geshi_lang_path . 'css-gen.cfg') ) | |
| 209 { | |
| 210 | |
| 211 echo '<span style="color: green;">Found at ' . realpath($geshi_lang_path
) . '</span>'; | |
| 212 } | |
| 213 else | |
| 214 { | |
| 215 ++$errors; | |
| 216 $no_lang_dir_error = true; | |
| 217 echo '<span style="color: red;">Not found</span>'; | |
| 218 } | |
| 219 echo "</pre>\n"; | |
| 220 | |
| 221 if ( $errors > 0 ) | |
| 222 { | |
| 223 // We're gonna have to ask for the paths... | |
| 224 echo 'Unfortunately CSSGen could not detect the following paths. Please
input them and press "submit" to try again.'; | |
| 225 echo " | |
| 226 <form action=\"cssgen.php\" method=\"post\">"; | |
| 227 if ( $no_geshi_dot_php_error ) | |
| 228 { | |
| 229 echo " | |
| 230 <br />geshi.php: <input type=\"text\" name=\"geshi-path\" value=\"" . realpath('
../geshi.php') . "\" size=\"50\" />"; | |
| 231 } | |
| 232 else | |
| 233 { | |
| 234 echo '<input type="hidden" name="geshi-path" value="' . htmlspecialc
hars($geshi_path) . '" />'; | |
| 235 } | |
| 236 if ( $no_lang_dir_error ) | |
| 237 { | |
| 238 echo " | |
| 239 <br />language files directory: <input type=\"text\" name=\"geshi-lang-path\" va
lue=\"" . realpath('../geshi/') . "/\" size=\"50\" /> (should have a trailing sl
ash)"; | |
| 240 } | |
| 241 else | |
| 242 { | |
| 243 echo '<input type="hidden" name="geshi-lang-path" value="' . $geshi_
lang_path . '" />'; | |
| 244 } | |
| 245 | |
| 246 echo " | |
| 247 <br /><input type=\"submit\" value=\"Search\" /></form>"; | |
| 248 } | |
| 249 else | |
| 250 { | |
| 251 // no errors - echo continue form | |
| 252 echo 'Everything seems to be detected successfully. Use the button to co
ntinue. | |
| 253 <br /><br /><form action="cssgen.php?step=2" method="post"> | |
| 254 <input type="hidden" name="geshi-path" value="' . realpath($geshi_path) . '" /><
input type="hidden" name="geshi-lang-path" value="' . realpath($geshi_lang_path)
. '" /> | |
| 255 <input type="submit" value="Step 2" />'; | |
| 256 } | |
| 257 | |
| 258 make_footer(); | |
| 259 } | |
| 260 // Step 2 | |
| 261 elseif ( $step == 2 ) | |
| 262 { | |
| 263 make_header('Step 2'); | |
| 264 | |
| 265 $geshi_path = get_var('geshi-path'); | |
| 266 $geshi_lang_path = get_var('geshi-lang-path'); | |
| 267 | |
| 268 $dh = opendir($geshi_lang_path); | |
| 269 $lang_files = array(); | |
| 270 $file = readdir($dh); | |
| 271 while ( $file !== false ) | |
| 272 { | |
| 273 if ( $file == '.' || $file == '..' || $file == 'CVS' || $file == 'css-ge
n.cfg' ) | |
| 274 { | |
| 275 $file = readdir($dh); | |
| 276 continue; | |
| 277 } | |
| 278 $lang_files[] = $file; | |
| 279 $file = readdir($dh); | |
| 280 } | |
| 281 closedir($dh); | |
| 282 sort($lang_files); | |
| 283 | |
| 284 // Now installed languages are in $lang_files | |
| 285 | |
| 286 echo '<form action="cssgen.php?step=3" method="post" id="step2"> | |
| 287 What languages are you wanting to make this stylesheet for?<br /><br /> | |
| 288 Detected languages:<br />'; | |
| 289 | |
| 290 foreach ( $lang_files as $lang ) | |
| 291 { | |
| 292 $lang = substr($lang, 0, strpos($lang, '.')); | |
| 293 if ($lang) { | |
| 294 echo "<input type=\"checkbox\" name=\"langs[$lang]\" checked=\"check
ed\" /> $lang<br />\n"; | |
| 295 } | |
| 296 } | |
| 297 | |
| 298 echo "Select: <a href=\"javascript:select('true')\">All</a>, <a href=\"javas
cript:select('false')\">None</a>, <a href=\"javascript:select('invert')\">Invert
</a><br />\n"; | |
| 299 | |
| 300 echo 'If you\'d like any other languages not detected here to be supported,
please enter | |
| 301 them here, one per line:<br /><textarea rows="4" cols="20" name="extra-langs"></
textarea><br /> | |
| 302 '; | |
| 303 | |
| 304 echo '<br />Styles: | |
| 305 <table> | |
| 306 <tr><th>Style for the overall code block:</th><td><input type="text" name="o
verall" value="border: 1px dotted #a0a0a0; font-family: \'Courier New\', Courier
, monospace; background-color: #f0f0f0; color: #0000bb;" /></td></tr> | |
| 307 <tr><th>Default Styles</th><td><input type="text" name="default-styles" valu
e="font-weight:normal;background:transparent;color:#000; padding-left: 5px;" /><
/td></tr> | |
| 308 <tr><th>Keywords I (if, do, while etc)</th><td><input type="text" name="keyw
ords-1" value="color: #a1a100;" /></td></tr> | |
| 309 <tr><th>Keywords II (null, true, false etc)</th><td><input type="text" name=
"keywords-2" value="color: #000; font-weight: bold;" /></td></tr> | |
| 310 <tr><th>Inbuilt Functions (echo, print etc)</th><td><input type="text" name=
"keywords-3" value="color: #000066;" /></td></tr> | |
| 311 <tr><th>Data Types (int, boolean etc)</th><td><input type="text" name="keywo
rds-4" value="color: #f63333;" /></td></tr> | |
| 312 | |
| 313 <tr><th>Comments (//, <!-- --> etc)</th><td><input type="text" name="commen
ts" value="color: #808080;" /></td></tr> | |
| 314 <tr><th>Escaped Characters (\n, \t etc)</th><td><input type="text" name="esc
aped-chars" value="color: #000033; font-weight: bold;" /></td></tr> | |
| 315 <tr><th>Brackets ( ([{}]) etc)</th><td><input type="text" name="brackets" va
lue="color: #66cc66;" /></td></tr> | |
| 316 <tr><th>Strings ("foo" etc)</th><td><input type="text" name="strings" value=
"color: #ff0000;" /></td></tr> | |
| 317 <tr><th>Numbers (1, -54, 2.5 etc)</th><td><input type="text" name="numbers"
value="color: #ff33ff;" /></td></tr> | |
| 318 <tr><th>Methods (Foo.bar() etc)</th><td><input type="text" name="methods" va
lue="color: #006600;" /></td></tr> | |
| 319 </table>'; | |
| 320 | |
| 321 echo '<input type="hidden" name="geshi-path" value="' . realpath($geshi_path
) . '" /><input type="hidden" name="geshi-lang-path" value="' . realpath($geshi_
lang_path) . '" /> | |
| 322 <input type="submit" value="Step 3" /></form>'; | |
| 323 | |
| 324 make_footer(); | |
| 325 } | |
| 326 // Step 3 | |
| 327 elseif ( $step == 3 ) | |
| 328 { | |
| 329 make_header('Step 3'); | |
| 330 echo '<p>Here is your completed stylesheet. Note that it may not be perfect
- no regular expression styles are included for one thing, | |
| 331 you\'ll have to add those yourself (php and xml are just two languages that use
them), and line numbers are not included, however | |
| 332 it includes most of the basic information.</p>'; | |
| 333 | |
| 334 // Make the stylesheet | |
| 335 $part_selector_1 = ''; | |
| 336 $part_selector_2 = ''; | |
| 337 $part_selector_3 = ''; | |
| 338 | |
| 339 $langs = get_var('langs'); | |
| 340 $extra_langs = trim(get_var('extra-langs')); | |
| 341 if ( $extra_langs != '' ) | |
| 342 { | |
| 343 $l = explode("\r\n", $extra_langs); | |
| 344 foreach ( $l as $lng ) | |
| 345 { | |
| 346 $langs[$lng] = true; | |
| 347 } | |
| 348 } | |
| 349 | |
| 350 | |
| 351 foreach ( $langs as $lang => $dummy ) | |
| 352 { | |
| 353 $part_selector_1 .= ".$lang {PART}, "; | |
| 354 $part_selector_2 .= ".$lang {PART1}, .$lang {PART2}, "; | |
| 355 $part_selector_3 .= ".$lang {PART1}, .$lang {PART2}, .$lang {PART3}, "; | |
| 356 } | |
| 357 $part_selector_1 = substr($part_selector_1, 0, -2); | |
| 358 $part_selector_2 = substr($part_selector_2, 0, -2); | |
| 359 $part_selector_3 = substr($part_selector_3, 0, -2); | |
| 360 | |
| 361 | |
| 362 $default_styles = get_var('default-styles'); | |
| 363 $ol_selector = str_replace('{PART}', 'ol', $part_selector_1); | |
| 364 $overall_styles = get_var('overall'); | |
| 365 $overall_selector = str_replace('{PART}', '', $part_selector_1); | |
| 366 | |
| 367 $stylesheet = "/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) *
/"; | |
| 368 | |
| 369 if ( $overall != '' ) | |
| 370 { | |
| 371 $stylesheet .= "\n$overall_selector {{$overall_styles}}"; | |
| 372 } | |
| 373 if ( $default_styles != '' ) | |
| 374 { | |
| 375 $default_selector = str_replace(array('{PART1}', '{PART2}'), array('.de1
', '.de2'), $part_selector_2); | |
| 376 $stylesheet .= "\n$default_selector {{$default_styles}}"; | |
| 377 } | |
| 378 | |
| 379 // Do keywords | |
| 380 $keywords_1 = get_var('keywords-1'); | |
| 381 $keyword_selector_1 = str_replace('{PART}', '.kw1', $part_selector_1); | |
| 382 if ( $keywords_1 != '' ) | |
| 383 { | |
| 384 $stylesheet .= "\n$keyword_selector_1 {{$keywords_1}}"; | |
| 385 } | |
| 386 | |
| 387 $keywords_2 = get_var('keywords-2'); | |
| 388 $keyword_selector_2 = str_replace('{PART}', '.kw2', $part_selector_1); | |
| 389 if ( $keywords_2 != '' ) | |
| 390 { | |
| 391 $stylesheet .= "\n$keyword_selector_2 {{$keywords_2}}"; | |
| 392 } | |
| 393 | |
| 394 $keywords_3 = get_var('keywords-3'); | |
| 395 $keyword_selector_3 = str_replace('{PART}', '.kw3', $part_selector_1); | |
| 396 if ( $keywords_3 != '' ) | |
| 397 { | |
| 398 $stylesheet .= "\n$keyword_selector_3 {{$keywords_3}}"; | |
| 399 } | |
| 400 | |
| 401 $keywords_4 = get_var('keywords-4'); | |
| 402 $keyword_selector_4 = str_replace('{PART}', '.kw4', $part_selector_1); | |
| 403 if ( $keywords_4 != '' ) | |
| 404 { | |
| 405 $stylesheet .= "\n$keyword_selector_4 {{$keywords_4}}"; | |
| 406 } | |
| 407 | |
| 408 // Do other lexics | |
| 409 $comments = get_var('comments'); | |
| 410 $comment_selector = str_replace(array('{PART1}', '{PART2}', '{PART3}'), arra
y('.co1', '.co2', '.coMULTI'), $part_selector_3); | |
| 411 if ( $comments != '' ) | |
| 412 { | |
| 413 $stylesheet .= "\n$comment_selector {{$comments}}"; | |
| 414 } | |
| 415 | |
| 416 $esc = get_var('escaped-chars'); | |
| 417 $esc_selector = str_replace('{PART}', '.es0', $part_selector_1); | |
| 418 if ( $esc != '' ) | |
| 419 { | |
| 420 $stylesheet .= "\n$esc_selector {{$esc}}"; | |
| 421 } | |
| 422 | |
| 423 $brackets = get_var('brackets'); | |
| 424 $brk_selector = str_replace('{PART}', '.br0', $part_selector_1); | |
| 425 if ( $brackets != '' ) | |
| 426 { | |
| 427 $stylesheet .= "\n$brk_selector {{$brackets}}"; | |
| 428 } | |
| 429 | |
| 430 $strings = get_var('strings'); | |
| 431 $string_selector = str_replace('{PART}', '.st0', $part_selector_1); | |
| 432 if ( $strings != '' ) | |
| 433 { | |
| 434 $stylesheet .= "\n$string_selector {{$strings}}"; | |
| 435 } | |
| 436 | |
| 437 $numbers = get_var('numbers'); | |
| 438 $num_selector = str_replace('{PART}', '.nu0', $part_selector_1); | |
| 439 if ( $numbers != '' ) | |
| 440 { | |
| 441 $stylesheet .= "\n$num_selector {{$numbers}}"; | |
| 442 } | |
| 443 | |
| 444 $methods = get_var('methods'); | |
| 445 $method_selector = str_replace('{PART}', '.me0', $part_selector_1); | |
| 446 if ( $methods != '' ) | |
| 447 { | |
| 448 $stylesheet .= "\n$method_selector {{$methods}}"; | |
| 449 } | |
| 450 | |
| 451 echo "<pre>$stylesheet</pre>"; | |
| 452 | |
| 453 make_footer(); | |
| 454 } | |
| 455 | |
| 456 ?> | |
| OLD | NEW |