| 1: | <?php
|
| 2: | |
| 3: | |
| 4: | |
| 5: | |
| 6: | |
| 7: | |
| 8: | |
| 9: | |
| 10: | |
| 11: | |
| 12: | |
| 13: | |
| 14: | |
| 15: | |
| 16: | |
| 17: | |
| 18: |
|
| 19: | defined('XOOPS_ROOT_PATH') || exit('Restricted access');
|
| 20: |
|
| 21: | |
| 22: | |
| 23: |
|
| 24: | class MytsSyntaxhighlight extends MyTextSanitizerExtension
|
| 25: | {
|
| 26: | |
| 27: | |
| 28: | |
| 29: | |
| 30: | |
| 31: | |
| 32: |
|
| 33: | public function load($myts, $source, $language)
|
| 34: | {
|
| 35: | $config = parent::loadConfig(__DIR__);
|
| 36: | if (empty($config['highlight'])) {
|
| 37: | return "<pre>{$source}</pre>";
|
| 38: | }
|
| 39: | $source = $myts->undoHtmlSpecialChars($source);
|
| 40: | $source = stripslashes($source);
|
| 41: | $source = $this->php($source);
|
| 42: |
|
| 43: | return $source;
|
| 44: | }
|
| 45: |
|
| 46: | |
| 47: | |
| 48: | |
| 49: | |
| 50: |
|
| 51: | public function php($text)
|
| 52: | {
|
| 53: | $text = trim($text);
|
| 54: | $addedtag_open = 0;
|
| 55: | if (!strpos($text, '<?php') && (substr($text, 0, 5) !== '<?php')) {
|
| 56: | $text = '<?php ' . $text;
|
| 57: | $addedtag_open = 1;
|
| 58: | }
|
| 59: | $addedtag_close = 0;
|
| 60: | if (!strpos($text, '?>')) {
|
| 61: | $text .= '?>';
|
| 62: | $addedtag_close = 1;
|
| 63: | }
|
| 64: | $oldlevel = error_reporting(0);
|
| 65: |
|
| 66: |
|
| 67: |
|
| 68: | $text = str_replace("\\", 'XxxX', $text);
|
| 69: |
|
| 70: | $buffer = highlight_string($text, true);
|
| 71: |
|
| 72: |
|
| 73: | $buffer = str_replace('XxxX', "\\", $buffer);
|
| 74: |
|
| 75: | error_reporting($oldlevel);
|
| 76: | $pos_open = $pos_close = 0;
|
| 77: | if ($addedtag_open) {
|
| 78: | $pos_open = strpos($buffer, '<?php ');
|
| 79: | }
|
| 80: | if ($addedtag_close) {
|
| 81: | $pos_close = strrpos($buffer, '?>');
|
| 82: | }
|
| 83: |
|
| 84: | $str_open = $addedtag_open ? substr($buffer, 0, $pos_open) : '';
|
| 85: | $str_close = $pos_close ? substr($buffer, $pos_close + 5) : '';
|
| 86: |
|
| 87: | $length_open = $addedtag_open ? $pos_open + 14 : 0;
|
| 88: | $length_text = $pos_close ? $pos_close - $length_open : 0;
|
| 89: | $str_internal = $length_text ? substr($buffer, $length_open, $length_text) : substr($buffer, $length_open);
|
| 90: |
|
| 91: | $buffer = $str_open . $str_internal . $str_close;
|
| 92: |
|
| 93: | return $buffer;
|
| 94: | }
|
| 95: | }
|
| 96: | |