[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подсветка синтаксиса
SergeyZuzic
Почему код не обрабатывает все теги?

<?
$text=$_POST['text'];



// VB Words Color
$color['comment'] = '#008800';
$color['default'] = '#000000';
$color['reserved'] = '#000088';
$color['string'] = '#000000';

// VB Words Array
$vb=array("#Const","#If","Abs","Add","Alias","And","Any","AppActivate","Array","As","Asc","Atn","Base","Beep",
"Boolean","Byte","ByVal","CBool","CByte","CCur","CDBl","CDate","CDec","CInt","CLng","CSng","CStr","CVErr","CVar",
"Call","Case","ChDir","ChDrive","Chr","Clear","Close","Collection","Command","Compare","Const","Cos","CreateObject",
"CurDir","Currency","DDB","Date","DateAdd","DateDiff","DatePart","DateSerial","DateValue","Day","Debug","Declare",
"DefBool","DefByte","DefCur","DefDate","DefDbl","DefDec","DefInt","DefLng","DefObj","DefSng","DefStr","DefVar",
"DeleteSetting","Dim","Dir","Do","DoEvents","Double","EOF","Each","Else","ElseIf","End","Endif","Environ",
"Eqv","Erase","Err","Error","Exit","Exp","Explicit","False","FV","FileAttr","FileCopy","FileDateTime","FileLen",
"Filelen","Fix","For","Format","Function","Get","GetAllSettings","GetAttr","GetObject","GetSetting","Global","GoSub",
"GoTo","Hex","Hour","IIR","IPmt","If","Imp","In","InStr","Input #","Int","Integer","Is","IsArray","IsDate", "Not Not",
"IsEmpty","IsError","IsMissing","IsNull","IsNumeric","IsObject","Item","Kill","LBound","LCase","LOF","LSet","LTrim",
"Left","Len","Let","Lib","Like","Line Input #","Loc","Lock","Log","Long","Loop","MIRR","Me","Mid","Minute","MkDir",
"Mod","Module","Month","MsgBox","NPV","NPer","Name","New","Next","Not","Now","Object","Oct","On","Open","Option","Or",
"PPmt","PV","Pmt","Print","Print #","Private","Property","Public","Put","QBColor","RGB","RSet","RTrim","Raise",
"Randomize","Rate","ReDim","Remove","Reset","Resume","Return","Right","RmDir","Rnd","SLN","SYD","SaveSetting",
"Second","Seek","Select","SendKeys","Set","SetAttr","Sgn","Shell","Sin","Single","Space","Spc","Sqr","Static","Step",
"Stop","Str","StrComp","StrConv","String","Sub","Switch","Tab","Tan","Then","Time","TimeSerial","TimeValue","Timer",
"To","Trim","True", "Type","TypeName","UBound","UCase","Unlock","Until","Val","VarType","Variant","Weekday","Wend",
"While","Width #","With","Write #","Xor","Year","Optional","InStrRev","Replace","Split","Join");

/*
preg_match_all("#\[vb(?::\w+)?\](.*?)\[/vb(?::\w+)?\]#si", $text, $m);
foreach($m[1] as $match) {
echo $match."\n";
$html=$text;
for ($x=0; $x<count($vb); $x++) {
$html=str_replace($vb[$x], '<font color="#000088">'.$vb[$x].'</font>', $html);
}
}
*/




$str=$text;
$val = "";
$gretext = "";
$lines = explode("\n", $str);

while (list($brr, $line) = each($lines))
{
if (substr(trim($line), 0, 1) == "'")
{
$line = "<font color=\"#007F00\">$line<br></font>";
$gretext .= $line;
}
else
{
$quoteplace = strrpos($line, "'");
if ($quoteplace > 0)
{
$beforequote = substr($line, 0, $quoteplace);
$afterquote="<font color=\"#007F00\">".substr($line,$quoteplace)."<br></font>";
$codebit=$beforequote;
$gretext .= $beforequote . $afterquote;
$afterquote = "";
}
else
{
$afterquote = "";
$gretext .= $line . '<br>';
}
}
}


$str = $gretext;


// Do some magic
//$str = preg_replace ("/<br>/i", " || ", $str);
//$str = preg_replace ("/\r/i", " || ", $str);
//$str = preg_replace ("/\n/i", " || ", $str);

// Split Word by Word

$words = explode(" ", $str);

$found = "";
$newtext = "";

for ($y = 0; $y < count($words); $y++) {
$getuserword = $words[$y];

for ($x = 0; $x < count($vb); $x++) {
$getvbword = $vb[$x];

if (strtolower($getvbword) == strtolower($getuserword))
{
$found = "true";
$newtext .= " " . preg_replace("/{$vb[$x]}/i", '<font color="' . $color['reserved'] . '">' . $vb[$x] . '</font>', $words[$y]);
}
}

if ($found == "")
{
// Finally We give Up!
$newtext .= " " . $words[$y];
}
$found = "";
}

// Remove magic and some stuff we done earlier
//$newtext = preg_replace('/ || /i', '', $newtext);



$html=$newtext;





?>




Спустя 6 минут, 57 секунд (30.03.2011 - 19:07) Basili4 написал(а):
И какие ТВОИ мысли на это счет ???

Спустя 25 минут, 39 секунд (30.03.2011 - 19:33) inpost написал(а):
SergeyZuzic
И что значит все? Такой тег тоже должен обработать: <baramburum> ?

Спустя 51 минута, 26 секунд (30.03.2011 - 20:24) SergeyZuzic написал(а):
Тьфу, какой ещё тег... части кода не все подсвечивает, например:
Sub Sub Sub
подсвечивает только два первых саба. С ergi все норм, но предуприждение 'мол функция устарела :)'

Спустя 31 минута, 13 секунд (30.03.2011 - 20:55) Basili4 написал(а):
preg_replace("/{$vb[$x]}/is" так попробуй

Спустя 45 минут, 18 секунд (30.03.2011 - 21:41) Guest написал(а):
Все дело было в этой строчке
$newtext .= " " . $words[$y];

Пробелы на нбсп менялись... а я 4 часа мозги ломал )))

Спустя 32 минуты, 15 секунд (30.03.2011 - 22:13) SergeyZuzic написал(а):
Что бы не плодить темы сразу спрошу, как правильно реализовать подсветку кода глобально. Ну то-есть
preg_match_all("#\[vb(?::\w+)?\](.*?)\[/vb(?::\w+)?\]#si", $text, $m);
вырезает внутренности между [vb][/vb], а по уму следовало бы приплюсовать сюда всё, что вне bbcod'ов.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.