php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.08.2005, 20:32  
Erfahrener Benutzer
 
Registriert seit: 14.07.2004
Beiträge: 109
imported_Lumio
imported_Lumio eine Nachricht über ICQ schicken imported_Lumio eine Nachricht über AIM schicken
Standard Code Syntax Highlighting

Hi!
Ich hab da ein kleines Problem:
Ich moechte gern, das von einem Code die Syntaxen gehighlightet werden.
Das versuche ich mit folgender Funktion:
PHP-Code:
<?php
    
function vbcolors($text){
        
$do            = array("End If""If""Else""Then""For""Next""Do""While""Private""Sub""Public""Dim""Function""As""Option""Explicit""Open""Input""Output""Close""End""Call""GoTo""Const");
        
        for(
$i=0;$i<=9;$i++){
            
$text str_replace($i'<font color="#FF0000">'.$i.'</font>'$text);
        }
        for(
$i=0;$i<count($do);$i++){
            
$brep false;
            
$ssub "";
            
$part1 "";
            
$part2 "";
            
$ipos 0;
            
$ipos strpos($texthtmlspecialchars($do[$i]), $ipos);
            if(
$ipos 0){
                
$ssub substr($text$ipos 1strlen(htmlspecialchars($do[$i])) + 2);
                if(
substr($ssub01) == ""){ //Erstes Zeichen ist ein Leerzeichen
                    
if(substr($ssubstrlen($ssub), 1) == ""){ //Letztes Zeichen ist ein Leerzeichen
                        
$brep true;
                    }elseif(
ord(substr($ssubstrlen($ssub), 1)) == 10){ //Letztes Zeichen ist ein Umbruch
                        
$brep true;
                    }elseif(
substr($ssubstrlen($ssub), 1) == "<"){ //Letztes Zeichen ist eine offene, eckige Klammer
                        
$brep true;
                    }
                }elseif(
ord(substr($ssub01)) == 10){ //Erstes Zeichen ist ein Umbruch
                    
$brep true;
                }elseif(
substr($ssub01) == "<"){ //Erstes Zeichen ist eine offene, eckige Klammer
                    
$brep true;
                }elseif(
substr($ssub01) == ""){
                    
$brep true;
                }elseif(
substr($ssub01) == substr(htmlspecialchars($do[$i]), 01)){
                    
$brep true;
                }
                
                if(
$brep == true){
                    
$part1    substr($text0$ipos);
                    
$part2    substr($text$ipos strlen(htmlspecialchars($do[$i])));
                    
$text    =  $part1.'<font color="#000080">'.htmlspecialchars($do[$i]).'</font>'.$part2;
                    
$ipos $ipos strlen('<font color="#000080"></font>');
                }
                
                
//for($i2=0;$i2<=strlen($text);){
                
while($ipos 0){
                    
$brep false;
                    
$ssub "";
                    
$part1 "";
                    
$part2 "";
                    
$ipos = @strpos($texthtmlspecialchars($do[$i]), $ipos 1);
                    if(
$ipos 0){
                        
$ssub substr($text$ipos 1strlen(htmlspecialchars($do[$i])) + 2);
                        if(
substr($ssub01) == ""){ //Erstes Zeichen ist ein Leerzeichen
                            
if(substr($ssubstrlen($ssub), 1) == ""){ //Letztes Zeichen ist ein Leerzeichen
                                
$brep true;
                            }elseif(
ord(substr($ssubstrlen($ssub), 1)) == 10){ //Letztes Zeichen ist ein Umbruch
                                
$brep true;
                            }elseif(
substr($ssubstrlen($ssub), 1) == "<"){ //Letztes Zeichen ist eine offene, eckige Klammer
                                
$brep true;
                            }
                        }elseif(
ord(substr($ssub01)) == 10){ //Erstes Zeichen ist ein Umbruch
                            
$brep true;
                        }elseif(
substr($ssub01) == "<"){ //Erstes Zeichen ist eine offene, eckige Klammer
                            
$brep true;
                        }elseif(
substr($ssub01) == substr(htmlspecialchars($do[$i]), 01)){
                            
$brep true;
                        }
                        
                        if(
$brep == true){
                            
$part1    substr($text0$ipos);
                            
$part2    substr($text$ipos strlen(htmlspecialchars($do[$i])));
                            
$text    $part1.'<font color="#000080">'.htmlspecialchars($do[$i]).'</font>'.$part2;
                            
$ipos $ipos strlen('<font color="#000080"></font>');
                            
                        }
                    }else{
                        break;
                    }
                }
            }*/
            
$text str_replace(htmlspecialchars($do[$i]), '<font color="#000080">'.htmlspecialchars($do[$i]).'</font>'$text);
        }

        
$text str_replace("("'[b]([/b]'$text);
        
$text str_replace(")"'[b])[/b]'$text);
        
$text str_replace("["'[b][[/b]'$text);
        
$text str_replace("]"'[b]][/b]'$text);
        
$text str_replace("{"'[b]{[/b]'$text);
        
$text str_replace("}"'[b]}[/b]'$text);
        return 
$text;
    }
?>
Jedoch funktioniert das net so ganz. Es werden nicht alle Funktionen die im Array aufgelistet sind gefaerbt.

Hier noch der Code, der dann "gefaerbt" werden soll:
Code:
Option Explicit

Private Declare Function AllocConsole Lib "kernel32" () As Long

Private Declare Function FreeConsole Lib "kernel32" () As Long

Private Declare Function GetStdHandle Lib "kernel32" _
        (ByVal nStdHandle As Long) As Long

Private Declare Function ReadConsole Lib "kernel32" Alias _
        "ReadConsoleA" (ByVal hConsoleInput As Long, ByVal _
        lpBuffer As String, ByVal nNumberOfCharsToRead As Long, _
        ByRef lpNumberOfCharsRead As Long, lpReserved As Long) As Long

Private Declare Function SetConsoleMode Lib "kernel32" (ByVal _
        hConsoleOutput As Long, dwMode As Long) As Long

Private Declare Function SetConsoleTextAttribute Lib "kernel32" _
        (ByVal hConsoleOutput As Long, ByVal wAttributes As Long) _
        As Long

Private Declare Function SetConsoleTitle Lib "kernel32" Alias _
        "SetConsoleTitleA" (ByVal lpConsoleTitle As String) _
        As Long

Private Declare Function WriteConsole Lib "kernel32" Alias _
        "WriteConsoleA" (ByVal hConsoleOutput As Long, ByVal _
        lpBuffer As Any, ByVal nNumberOfCharsToWrite As Long, _
        ByRef lpNumberOfCharsWritten As Long, lpReserved As Long) As Long

Private Const STD_INPUT_HANDLE As Long = -10&
Private Const STD_OUTPUT_HANDLE As Long = -11&
Private Const STD_ERROR_HANDLE As Long = -12&

Private Const FOREGROUND_BLUE As Long = &H1&
Private Const FOREGROUND_GREEN As Long = &H2&
Private Const FOREGROUND_RED As Long = &H4&
Private Const FOREGROUND_INTENSITY As Long = &H8&
Private Const BACKGROUND_BLUE As Long = &H10&
Private Const BACKGROUND_GREEN As Long = &H20&
Private Const BACKGROUND_RED As Long = &H40&
Private Const BACKGROUND_INTENSITY As Long = &H80&

Private Const ENABLE_LINE_INPUT As Long = &H2&
Private Const ENABLE_ECHO_INPUT As Long = &H4&
Private Const ENABLE_MOUSE_INPUT As Long = &H10&
Private Const ENABLE_PROCESSED_INPUT As Long = &H1&
Private Const ENABLE_WINDOW_INPUT As Long = &H8&

Private Const ENABLE_PROCESSED_OUTPUT As Long = &H1&
Private Const ENABLE_WRAP_AT_EOL_OUTPUT As Long = &H2&

Private hConsoleIn As Long
Private hConsoleOut As Long
Private hConsoleErr As Long

Private Sub ConsolePrint(szOut As String)
    Dim BytesWritten As Long
    
    Call WriteConsole(hConsoleOut, szOut, Len(szOut), BytesWritten, 0&)
End Sub

Private Function ConsoleRead() As String
    Dim sUserInput As String * 256
    Dim BytesRead As Long
    
    Call ReadConsole(hConsoleIn, sUserInput, Len(sUserInput), _
                     BytesRead, 0&)
    
    ' - 2, um vbCrLf abzuschneiden
    ConsoleRead = Left$(sUserInput, BytesRead - 2)
End Function

Private Function CreateConsole() As String
    Dim szUserInput As String
    Dim s As String
    Call AllocConsole
    Call SetConsoleTitle("VB Konsole")
    
    hConsoleIn = GetStdHandle(STD_INPUT_HANDLE)
    hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE)
    hConsoleErr = GetStdHandle(STD_ERROR_HANDLE)
        
    Call SetConsoleTextAttribute(hConsoleOut, FOREGROUND_GREEN Or _
            FOREGROUND_BLUE Or FOREGROUND_BLUE Or _
            FOREGROUND_INTENSITY Or BACKGROUND_BLUE)
            
    Call ConsolePrint("VB Konsole" & vbCrLf)
    Call SetConsoleTextAttribute(hConsoleOut, FOREGROUND_RED Or _
            FOREGROUND_GREEN Or FOREGROUND_BLUE)
    
GoBack:
    Call ConsolePrint("VB Konsole> ")
    
    DoEvents
    szUserInput = ConsoleRead()
    If LCase(szUserInput) = "exit" Or LCase(szUserInput) = "quit" Then
        GoTo GoExit
    ElseIf szU = "hello" Then
        Call ConsolePrint("Hallo!" & vbCrLf)
    Else
        Call ConsolePrint("Sie haben " & szUserInput & " eingegeben" & vbCrLf)
    End If
    
    GoTo GoBack
    
GoExit:
    Call ConsolePrint("Bis bald" & vbCrLf & "Bitte druecken Sie die Enter-Taste um das Fenster zu schliessen")
    
    Call ConsoleRead 'Wenn Sie diesen Befehl loeschen, wird das Fenster sofort geschlossen,
                     'und Sie muessen nicht die Enter-Taste druecken.
    Call FreeConsole 'Hiermit schliessen Sie die Konsole
End Function

Sub Main()
    CreateConsole
End Sub
Danke schonmal
__________________
MFG
Lumio
imported_Lumio ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.08.2005, 10:30  
Gast
 
Beiträge: n/a
Standard

Sieht alles sehr umständlich aus. Das hier, ist wesentlich kürzer und schneller.
PHP-Code:
<?php
function vbcolors($filename)

    
$keywords  = array("End If""If""Else""Then""For""Next""Do""While""Private""Sub""Public""Dim""Function""As""Option""Explicit""Open""Input""Output""Close""End""Call""GoTo""Const"); 
    
    
$text = @implode('', @file($filename));
  
  foreach(
$keywords as $value)
  {
      
$text preg_replace("/$value/""<font color=\"#FF0000\">$value</font>"$text);
  }
  
  
$text preg_replace("/(\(|\[|\{|\}|\]|\))/""<font style=\"font-weight: bold;\">\\1</font>"$text);
    
$file = @fopen($filename.'html'"w");
    @
fwrite($file$text);
    
fclose($file);
}
?>
Was welche Funktion macht, kannst du hier nachlesen.

ACHTUNG: Hier findet keine Fehlerkontrolle statt!
  Mit Zitat antworten
Alt 15.08.2005, 12:40  
Erfahrener Benutzer
 
Registriert seit: 14.07.2004
Beiträge: 109
imported_Lumio
imported_Lumio eine Nachricht über ICQ schicken imported_Lumio eine Nachricht über AIM schicken
Standard

Danke! Ich probiers mal aus.

[edit] Klappt wieder net. Hier mein code:
PHP-Code:
   <?
    
function vbcolors($text){
        
$keyswords            = array("End If""If""Else""Then""For""Next""Do""While""Private""Sub""Public""Dim""Function""As""Option""Explicit""Open""Input""Output""Close""End""Call""GoTo""Const");
        
//$functions    = array("strtolower", "strtoupper", "echo", "mysql_connect", "mysql_select_db", "mysql_query", "mysql_result", "mysql_fetch_array", "mysql_num_rows");
        //$classes    = array("COOKIE", "ENV", "FILES", "GET", "POST", "REQUEST", "SESSION", "SERVER");
        
        //$text = implode('', $text);
        
        
foreach($keywords as $value)
        {
            
$text preg_replace("/$value/""<font color=\"#000080\">".$value."</font>"$text);
        }
  
        
$text preg_replace("/(\(|\[|\{|\}|\]|\))/""<font style=\"font-weight: bold;\">\\1</font>"$text);
        
//$text = str_replace(htmlspecialchars($do[$i]), '<font color="#000080">'.htmlspecialchars($do[$i]).'</font>', $text);
        
        
return $text;
    }
   
?>
http://www.pcarchiv.com/?module=tipps&area=vb&file=30
Das dritte Code-Fenster. Da muesste dann unterhalb von "GoBack:" "DoEvents" stehen. Da wird schon wieder Do blau gemacht.
__________________
MFG
Lumio
imported_Lumio ist offline   Mit Zitat antworten
Alt 15.08.2005, 13:30  
Gast
 
Beiträge: n/a
Standard

Für dich vielleicht ganz interessant: http://www.regenechsen.de/regex_allg...php?teil=2#3.2
  Mit Zitat antworten
Alt 15.08.2005, 16:06  
Erfahrener Benutzer
 
Registriert seit: 14.07.2004
Beiträge: 109
imported_Lumio
imported_Lumio eine Nachricht über ICQ schicken imported_Lumio eine Nachricht über AIM schicken
Standard

Juhuu! Danke! Echt arg! Das war grad wieder ein Freudensschrei
__________________
MFG
Lumio
imported_Lumio ist offline   Mit Zitat antworten
Alt 15.08.2005, 16:23  
Erfahrener Benutzer
 
Registriert seit: 14.07.2004
Beiträge: 109
imported_Lumio
imported_Lumio eine Nachricht über ICQ schicken imported_Lumio eine Nachricht über AIM schicken
Standard

Eine Sache haett ich da aber noch!
Wenn man ein ' schreibt, dann ist der Text nach ' bis zum Zeilenende ein Kommentar.
Ich habs so probiert:
$text = preg_replace("/'([a-bA-B0-9 ]+)$/", "<font color=\"#008000\">\\1</font>", $text);
Klappt net.
__________________
MFG
Lumio
imported_Lumio ist offline   Mit Zitat antworten
Alt 15.08.2005, 16:41  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

mal ne frage warum benutzt du nicht nen existierenden highlighter? vb müsste doch bei diesem allround-highlighter dabei sein, musste mal die suchfunktion anstregen, hab leider grad keinen link dazu.


mfg
robo47
robo47 ist offline   Mit Zitat antworten
Alt 15.08.2005, 16:52  
Gast
 
Beiträge: n/a
Standard Re: Code Syntax Highlighting

Zitat:
Zitat von Lumio
Ich hab da ein kleines Problem:
Kein kleines sondern ein großes Problem:
Du kannst nicht suchen.

http://www.google.de/search?hl=de&q=gnopaste&meta=

Hier das Onlinebeispiel:
http://nopaste.php-help.info/index.php?id=073788127c
  Mit Zitat antworten
Alt 16.08.2005, 07:57  
Gast
 
Beiträge: n/a
Standard

Hab mal bissel rumgefummelt:

PHP-Code:
<?php
error_reporting
(E_ALL);

$TXT = <<<EOD
Private Declare Function GetStdHandle Lib "kernel32" _ 
        (ByVal nStdHandle As Long) As Long

    Call ConsolePrint("Bis bald" & vbCrLf & "Bitte druecken Sie die Enter-Taste um das Fenster zu schliessen") 
    DoEvents
    Call ConsoleRead 'Wenn Sie diesen Befehl loeschen, wird das Fenster sofort geschlossen, 
                     'und Sie muessen nicht die Enter-Taste druecken. 
    Call FreeConsole 'Hiermit schliessen Sie die Konsole 
EOD;


function 
vbcolors($text){ 
 
$key = array("End If""If""Else""Then""For""Next""Do""While""Private""Sub""Public""Dim""Function",
 
"As""Option""Explicit""Open""Input""Output""Close""End""Call""GoTo""Const");

 
$text preg_replace("/\"(.+)\"/U""<font color=\"#660066\">$0</font>"$text);
 
$text preg_replace("/\'(.+)\s/""<font color=\"#666600\">$0</font>"$text);
 
$text preg_replace("/(\(|\[|\{|\}|\]|\))/""[b]$1[/b]"$text);

 foreach(
$key as $value) {
 
$text preg_replace("/\b$value\b/""<font color=\"#0000CC\">".$value."</font>"$text);
 }
 return 
$text
 }

echo 
'<pre>'vbcolors($TXT), '</pre>';

?>
Anstelle aber von "<font ..." wird ich eher mit CSS das dann formatieren.
Natürlich kam man das auf die Spitze treiben
  Mit Zitat antworten
Alt 16.08.2005, 11:06  
Erfahrener Benutzer
 
Registriert seit: 14.07.2004
Beiträge: 109
imported_Lumio
imported_Lumio eine Nachricht über ICQ schicken imported_Lumio eine Nachricht über AIM schicken
Standard

Hey danke! Ich hab zwar schon selber ein wenig probiert aber trotzdem danke!

Okay! Deins war besser
__________________
MFG
Lumio
imported_Lumio ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Probleme mit PHP Code HappyDieMuschel PHP Tipps 2008 7 28.05.2008 06:34
[Erledigt] PHP Code aus Datenbank ayti PHP Tipps 2008 8 26.05.2008 19:40
Design und Code Trennen TeazY PHP Tipps 2008 29 21.05.2008 12:08
Nur bestimmten Html Code zulassen? litterauspirna PHP Tipps 2008 5 29.04.2008 12:30
einfacher Code zum Einbinden von "Inhaltsbereichen" MaxDittmann PHP-Fortgeschrittene 6 01.10.2007 15:54
PHP: Wie parst der Server den Code am schnellsten? SvenLittkowski PHP Tipps 2007 4 17.12.2005 10:58
bb code in htm code wandeln janni PHP Tipps 2007 2 04.11.2005 22:36
JS Code in PHP Code?? HTML, Usability und Barrierefreiheit 12 08.08.2005 15:45
komm bei der Syntax nicht mehr weiter PHP Tipps 2005-2 3 03.08.2005 18:09
Seite 1/2/3..Code was haltet ihr davon? Matthiasnet PHP Tipps 2005-2 4 29.07.2005 20:29
[Erledigt] Lesbarkeit von Code Off-Topic Diskussionen 6 14.07.2005 14:48
code aus db mit eval replacen chief-thomson PHP Tipps 2005-2 4 08.07.2005 15:33
Bestätigungmail code? PHP Tipps 2005 7 16.05.2005 13:18
[Erledigt] bb code innerhalb von bb code geht nicht PHP Tipps 2007 2 12.01.2005 17:29
Problem mit COde PHP Tipps 2004 5 28.08.2004 16:04

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-fortgeschrittene/29098-code-syntax-highlighting.html, php bbcode syntax highlighting, html syntax hilight php code, strlen htmlspecialchars, php doevents, php syntax highlighting, php bbcode code highlighter, php code syntax farbig, php htm syntags umwandeln, syntax highlighting in php, code_syntax, strlen html tags schließen, php console highlight, php syntax highlight, php syntax highlighter bbcode, syntax highlighting php, php code highlighting, php code highlightung, bbcode \code=\ syntax-highlight, syntax highlighter bbcode php

Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.