problem mit regexp für highlighter von ESShell

  • problem mit regexp für highlighter von ESShell

    hi @ all
    war schon lange nicht mehr hier....

    ich habe ein problem ich möchte gerne einen highlighter bauen für ES Shell da die sprache ihre eigene syntax und ihre eigenen befehle hat. benötige ich was explizietes mit regexp´s habe jetzt schon einige variationen ausprobiert aber bin mir immernoch nicht ganz so klar wie die regexp´s funktionieren da ich

    1. \n
    2. "string"
    3. leerzeichen
    4. // Kommentare
    5. Integer und floats
    6. ()

    splitten muss um das ganze zu highlighten

    also als beispiel ES Shell sieht so aus:

    Quellcode

    1. // load funktion
    2. block load
    3. {
    4. eventscripts_noisy 1
    5. }
    6. // unload funktion
    7. block unload
    8. {
    9. eventscripts_noisy 0
    10. }
    11. // pickup a item
    12. event item_pickup
    13. {
    14. es_delayed .3 es playerset ammo event_var(userid) weapon_awp 0
    15. es_delayed .3 es playerset clip event_var(userid) weapon_awp 0
    16. }
    17. event player_spawn
    18. {
    19. es_tell server_var(xcn_cmduser_adminid) #multi #green[XCN-Modul] #defaultNo Admin!
    20. es echo "New Admin server_var(neuer_admin_name) with Steamid server_var(neuer_admin_steamid) is added!"
    21. }
    Alles anzeigen


    und so sollte es danach aussehen:
    -----------------------------------------------------------------------------------------
    // load funktion
    block load
    {
    eventscripts_noisy 1
    }
    // unload funktion
    block unload
    {
    eventscripts_noisy 0
    }
    // pickup a item
    event item_pickup
    {
    es_delayed .3 es playerset
    ammo event_var(userid) weapon_awp 0
    es_delayed .3 es playerset clip event_var(userid) weapon_awp 0
    }
    event player_spawn
    {
    es_tell server_var(
    xcn_cmduser_adminid) #multi #green[XCN-Modul] #defaultNo Admin!
    es echo "New Admin server_var(neuer_admin_name) with Steamid server_var(neuer_admin_steamid) is added!"
    }

    -----------------------------------------------------------------------------------------


    die richtigen und verfügbaren befehle stehen in arrays:

    Quellcode

    1. if(in_array($mycode, $eventscripts_db_reserved)) $mycode=str_replace($mycode, "<span style=\"color:#B30000\"><b>".$mycode."</b></span>", $mycode);
    2. if(in_array($mycode, $eventscripts_db_es)) $mycode=str_replace($mycode, "<span style=\"color:#000000\"><b>".$mycode."</b></span>", $mycode);
    3. if(in_array($mycode, $eventscripts_db_est)) $mycode=str_replace($mycode, "<span style=\"color:#008000\"><b>".$mycode."</b></span>", $mycode);
    4. if(in_array($mycode, $eventscripts_db_valve)) $mycode=str_replace($mycode, "<span style=\"color:#FF8000\"><b>".$mycode."</b></span>", $mycode);
    5. if(is_numeric($mycode)) $mycode=str_replace($mycode, "<span style=\"color:#000080\"><b>".$mycode."</b></span>", $mycode);


    1. versuch mit preg_split

    Quellcode

    1. $code=preg_split("/[\ +]/i", $code, -1 , PREG_SPLIT_NO_EMPTY);
    2. foreach ($code as $line => $linecode)
    3. {
    4. // das selbe wie oben mit den in_arrays
    5. }


    mein 2.versuch war mit explode solange auszusplitten bis es passt und es dann wieder zusammenzubauen aber das klappte überhauptnicht wie ich mir das vorgestellt hatte .....

    ich hoffe ihr könnt mir helfen :)

    also man benötigt z.b. ein gängiges array was sich dann einfach wieder zusammensetzen lässt ohne dass die einrückung dabei leidet....
    Beste Grüße,
    M4rc3L-XCN
  • Nimm lieber eine bestehende Syntax Highlighting Bibliothek und schreibe ein Plugin dafür. Da haben sich schon eine menge Leute über beste Performance und Wartbarkeit Gedanken gemacht:
    Meine Empfehlung bei PHP: GeSHi

    Das Gerüst für eine Sprache sieht so aus:

    Quellcode

    1. $language_data = array (
    2. 'LANG_NAME' => 'Text',
    3. 'COMMENT_SINGLE' => array(),
    4. 'COMMENT_MULTI' => array(),
    5. 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
    6. 'QUOTEMARKS' => array(),
    7. 'ESCAPE_CHAR' => '',
    8. 'KEYWORDS' => array(),
    9. 'SYMBOLS' => array(),
    10. 'CASE_SENSITIVE' => array(
    11. GESHI_COMMENTS => false
    12. ),
    13. 'STYLES' => array(
    14. 'KEYWORDS' => array(),
    15. 'COMMENTS' => array(),
    16. 'ESCAPE_CHAR' => array(),
    17. 'BRACKETS' => array(),
    18. 'STRINGS' => array(),
    19. 'NUMBERS' => array(),
    20. 'METHODS' => array(),
    21. 'SYMBOLS' => array(),
    22. 'SCRIPT' => array(),
    23. 'REGEXPS' => array()
    24. ),
    25. 'URLS' => array(),
    26. 'OOLANG' => false,
    27. 'OBJECT_SPLITTERS' => array(),
    28. 'REGEXPS' => array(),
    29. 'STRICT_MODE_APPLIES' => GESHI_NEVER,
    30. 'SCRIPT_DELIMITERS' => array(),
    31. 'HIGHLIGHT_STRICT_BLOCK' => array(),
    32. 'PARSER_CONTROL' => array(
    33. 'ENABLE_FLAGS' => array(
    34. 'ALL' => GESHI_NEVER
    35. ),
    36. )
    37. );
    Alles anzeigen


    Schau dir das Plugin für die Bash an. Das kommt deinem schon ziemlich nahe. Du musst nur noch keywords für load, unload, etc angeben.
    Und wenn du mit deinem Code zufrieden bist, dann übermittle ihn dem GeSHi Projekt :)
  • ja hab das ganze jetzt so eingesetzt:

    Quellcode

    1. include("eventscripts_db.php");
    2. $language_data = array (
    3. 'LANG_NAME' => 'EventScripts Shell',
    4. 'COMMENT_SINGLE' => array(1 => '//'),
    5. 'COMMENT_MULTI' => array(),
    6. 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
    7. 'QUOTEMARKS' => array('"""', '"', "'"),
    8. 'ESCAPE_CHAR' => '',
    9. 'KEYWORDS' => array(
    10. 1 => $eventscripts_db_reserved,
    11. 2 => $eventscripts_db_es,
    12. 3 => $eventscripts_db_est,
    13. 4 => $eventscripts_db_valve
    14. ),
    15. 'SYMBOLS' => array('(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?', '`'),
    16. 'CASE_SENSITIVE' => array(
    17. GESHI_COMMENTS => false,
    18. 1 => true,
    19. 2 => true,
    20. 3 => true,
    21. 4 => true
    22. ),
    23. 'STYLES' => array(
    24. 'KEYWORDS' => array(
    25. 1 => 'color: #B30000;', // Reserved
    26. 2 => 'color: #000000; font-weight: bold;', // Built-ins + self
    27. 3 => 'color: #008000;', // Standard lib
    28. 4 => 'color: #FF8000;' // Special methods
    29. ),
    30. 'COMMENTS' => array(
    31. 1 => 'color: #808080; font-style: italic;',
    32. 'MULTI' => 'color: #808080; font-style: italic;'
    33. ),
    34. 'ESCAPE_CHAR' => array(
    35. 0 => 'color: #000099; font-weight: bold;'
    36. ),
    37. 'BRACKETS' => array(
    38. 0 => 'color: black;'
    39. ),
    40. 'STRINGS' => array(
    41. 0 => 'color: #483d8b;'
    42. ),
    43. 'NUMBERS' => array(
    44. 0 => 'color: #000080;'
    45. ),
    46. 'METHODS' => array(
    47. 1 => 'color: black;'
    48. ),
    49. 'SYMBOLS' => array(
    50. 0 => 'color: #66cc66;'
    51. ),
    52. 'REGEXPS' => array(
    53. ),
    54. 'SCRIPT' => array(
    55. )
    56. ),
    57. 'URLS' => array(),
    58. 'OOLANG' => false,
    59. 'OBJECT_SPLITTERS' => array(),
    60. 'REGEXPS' => array(),
    61. 'STRICT_MODE_APPLIES' => GESHI_NEVER,
    62. 'SCRIPT_DELIMITERS' => array(),
    63. 'HIGHLIGHT_STRICT_BLOCK' => array(),
    64. 'PARSER_CONTROL' => array(
    65. 'ENABLE_FLAGS' => array(
    66. 'ALL' => GESHI_NEVER
    67. ),
    68. )
    69. );
    Alles anzeigen


    tut sich nichts ....
    also zumindest in der example.php
    hab dort eventscripts_shell ausgewählt aber macht kein highlight....

    hab ich irgendwas vergessen ?
    Beste Grüße,
    M4rc3L-XCN
  • Also du hast geshi heruntergeladen?
    ... deine Datei es_shell.php in den Ordner mit den anderen Sprachen kopiert.
    ... und deine Datei in der du das syntax highlighting benötigst, hast du zumindest folgende drei Zeilen?

    Quellcode

    1. include_once 'geshi.php';
    2. $geshi = new GeSHi($source, $language);
    3. geshi_highlight($source, 'es_shell', $path);
  • nein ich habe die language datei erstellt wie bei python
    dann habe ich meine arrayliste die in eventscripts_db.php ist mit einbezogen
    und die vars für die arrays mit eingefügt
    dann wollte ich das highlight testen mit dem example.php was beim download von geshi dabei ist. aber in dieser tut sich kein highlight ergeben stattdessen gibt er mir nur den text zurück den ich ihm gepostet habe.
    bei den anderen sprachen funktioniert es mit dem highlighten

    @@edit:: so hab das ganze jetzt angepasst da gibts sone datei languagecheck da hat er mir nen haufen fehler angezeigt habe diese jetzt korrigiert und jetzt klappts auch muss nurnoch ein paar feineinstellungen machen ^^

    thx thorben
    Beste Grüße,
    M4rc3L-XCN

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von M4rc3L-XCN ()

  • habe die übersetzungsdatei fertig gestellt muss aber das eine oder andere noch kontrollieren ob das highlight richtig funzt.

    hab für ES Shell die datei erstellt für geshi
    bin jetzt noch dabei für die neue Eventscripts 2.0+ version (die auf python basiert)
    das python highlight zu verändern brauche aber noch mehr infos über die aktuellen befehle würde die dann mit einbinden

    weiß jetzt net wie das mit dem uhrheberrecht ist da jemand schon für python die datei geschrieben hat aber will diese ja erweitern....
    müsste ja unter OPenSource stehen soweit ich weiß


    @@ fertige lösung soll bei mir visualcode heisen und beinhaltet auch noch zitat funktion [bui] als bbcode und etwaige funktionen will aber erst noch alles fertig machen dann werd ich das unter opensource stellen
    Ähm ma ne andere fragen muss ich das für OpenSource irgendwo eintragen ????
    Beste Grüße,
    M4rc3L-XCN