Mijn probleem is het volgende: ik ben een kleine UBB-parser aan het maken die ook code-blokken in VB.NET opmaak weergeeft. Tot nu toe werkt het allemaal prima met het highlighten van de keywords en commentaar, maar wanneer ik een keyword in commentaar zet, dan wordt deze gewoon ge-highlight.
Wat ik eigenlijk wil is door middel van preg_replace alle code te doorlopen, behalve die plekken waar een ' of REM begint, dan mag de rest van de string worden overgeslagen.
Zo ook voor strings: Als er bijvoorbeeld staat MessageBox.Show("Do Nothing"), dan worden de woorden Do en Nothing gehighlight, simpelweg omdat Do en Nothing keywords zijn in VB.NET.
Bij deze situaties kom ik er dus niet uit:
Ik ben hier nu al 2 volle dagen mee aan het prutten, ook met RegExBuddy enzo, maar ik krijg het niet voor elkaar!
De code die ik gebruik is de volgende:
Wat ik eigenlijk wil is door middel van preg_replace alle code te doorlopen, behalve die plekken waar een ' of REM begint, dan mag de rest van de string worden overgeslagen.
Zo ook voor strings: Als er bijvoorbeeld staat MessageBox.Show("Do Nothing"), dan worden de woorden Do en Nothing gehighlight, simpelweg omdat Do en Nothing keywords zijn in VB.NET.
Bij deze situaties kom ik er dus niet uit:
code:
1
2
3
4
| ' Do Nothing MessageBox.Show("Do Nothing") en MessageBox.Show("Do Nothing") ' Show MessageBox: Do Nothing |
Ik ben hier nu al 2 volle dagen mee aan het prutten, ook met RegExBuddy enzo, maar ik krijg het niet voor elkaar!
De code die ik gebruik is de volgende:
code:
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
| // Function highlights $words in $str with the specified $color function highlight_words($str, $words, $color = 'blue') { if(is_array($words)) { foreach($words as $k => $word) { $pattern[$k] = "/\b($word)\b/is"; $replace[$k] = '<font style="color:'.$color.';">$1</font>'; } } else { $pattern = "/\b($words)\b/is"; $replace = '<font style="color:'.$color.';">$1</font>'; } return preg_replace($pattern, $replace, $str); } // end highlight_words function ConvertCodeToHTML($Code) { // Highlight Visual Basic .NET KeyWords. $VBNETKeyWords = array( "KeyWord" ); $Code = highlight_words($Code, $VBNETKeyWords); $Code = '<p><font color="#808080">code:</font><div class=codeblock><div class=code>'.$Code.'</div></div></p>'; return $Code; } // end ConvertCodeToHTML function ConvertUBBToHTML($UBB = "") { // [ code ] handling $UBB = preg_replace("/\\[code\](.+?)\\[\/code\]/ise", "ConvertCodeToHTML('$1')", $UBB); return $UBB; } // end ConvertUBBToHTML |
[ Voor 46% gewijzigd door Verwijderd op 05-08-2005 16:41 ]