moziloCMS Supportforum

moziloCMS => Plugins => Thema gestartet von: azett am 11. Oktober 2010, 16:21:50

Titel: Syntax-Highlighting mit "HighLighter"
Beitrag von: azett am 11. Oktober 2010, 16:21:50
Ich habe eben mein neues Plugin "HighLighter" ins Plugin-Archiv (http://cms.mozilo.de/plugins/details.php?image_id=34) hochgeladen.

Das Plugin bindet den freien Syntax-Highlighter GeSHi (http://qbnz.com/highlighter/) ins CMS ein, der inzwischen fast 200 Sprachen "bunt machen" kann. Eine detaillierte Plugin-Dokumentation findet sich auf software.azett.com (http://software.azett.com/index.php?cat=moziloCMS-Plugins&page=HighLighter).

Viel Spaß beim Ausprobieren - ich bitte um Feedback :)

Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: mhsob am 11. Oktober 2010, 22:13:12
Wow - cool!
Ist mir nicht wirklich richtig abgegangen (hatte schon ein [code|]-Element definiert), find's aber super toll auf meiner Homepage!
Falls es jemanden interessiert: hier ist übrigens mein code-Element und das "neue" code_high-Element (mir war die Standard-Schrift von HighLighter zu gross und der Codebereich war nicht farblich hinterlegt):
code = <div class="code">{VALUE}</div>
code_high = [code|{HighLighter|{DESCRIPTION}|{VALUE}}]
Aufruf z.B. [code_high=c|irgendein C-Code...].

So sieht div.code in meiner style.css aus:
div.code {
padding:5px;
margin:5px;
font-family:monospace;
background-color:#F0F0F0;
border:1px dotted #B0B0B0;
font-size:0.85em;
line-height: 1.2;
}
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: HPdesigner am 25. August 2013, 19:31:20
So, ich grab diesen Thread hier nochmal aus. Ich wollte eigentlich gern das HighLighter Plugin für mozilo 2.0 adaptieren, einfach weils super klasse ist den GeSHI in Mozilo zu benutzen. An sich hat das auch geklappt, nur steh ich vor folgendem Problem.

Notiere ich etwas in der Art:
{HighLighter|php|$test = 'string';
$test2 = 'string2';}
funktioniert der Highlighter einwandfrei. Sobald ich allerdings geschweifte oder eckige Klammern im Code habe, und mindestens einen Zeilenumbruch, funktioniert die Ausgabe nicht mehr und er interpretiert das Plugintag nicht mehr. Also z.B.:
{HighLighter|php|$test = 'string';
$test2 = $string2['1'];}


Es hat natürlich irwas mit der Mozilosyntax zu tun, aber ich steh irwie aufm schlauch, wie man das umgeht. Vor allem merkwürdig, dass geschweifte und eckige klammern funktionieren, solang noch kein Zeilenumbruch vorhanden ist...

Hat jmd ne Idee? Ich vermute folgende Zeile (27,28) in der index.php des Plugins muss angepasst werden:
// Plugin-Ersetzungen und Zeilenwechsel normalisieren
$code = str_replace(array('~noplugin_start-', '-noplugin_end~', '-noplugin_grade~', '<br />'), array('{', '}', '|', ''), $code);


lg, HPdesigner
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: hausl78 am 26. August 2013, 16:53:08
Versuch mal die [ ] { } zu escapen mittels dem Hochdach ^

{HighLighter|php|$test = 'string';$test2 = $string2^['1'^];}

LG
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: HPdesigner am 26. August 2013, 20:17:21
Danke hausl78 für den Hinweis, allerdings habe ich vergessen zu erwähnen, dass escapen für mich keine Lösung ist, weil ich teilweise auch längere Codeschnipsel einfügen möchte - und da jedesmal alle Klammern zu escapen ist einfach unmöglich.

Habs natürlich trotzdem getestet - wie erwartet parst er nun das Plugintag, allerdings zeigt er das Hochdach ebenfalls im Code mit an... also{HighLighter|php|$test = "test";
$test1^['1'^] = getSth("blub");}
führt zu der Ausgabe$test = "test";
$test1^['1'^] = getSth("blub");


Weitere Ideen?
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: stefanbe am 26. August 2013, 23:00:59
such mal in der cms/Syntax.php diese zeilen
$syntax_such_rest = "/\[(".implode("=|",$syntax_array)."=|".implode("|",$syntax_array).")([^\|]*)\|(.*)\]/m";
und
$plugin_such_rest = "/\{(".implode("|",$plugin).")\|(.*)\}/m";

und Ändere am Ende das /m"; nach /Ums";

Du wirst aber nicht darum kommen mindestens die {} zu escapen

Da das nee ziemlich Einschneidene Änderung ist wäre es nett wenn Du das möglichst Ausgiebig Testen könntest nicht nur mit dem HighLighter sondern auf möglichts vielen mozilo Instalationen.

Damit ich den Bug Beheben kann.

lg stefanbe
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: HPdesigner am 27. August 2013, 10:41:33
Vielen Dank für den Hinweis, stefanbe, ich werds sobald wie möglich ausgiebig testen und dann berichten.

Zitat von: stefanbe am 26. August 2013, 23:00:59Du wirst aber nicht darum kommen mindestens die {} zu escapen
Mh, das ist natürlich suboptimal...

Allerdings hat es (ohne Zeilenumbrüche) auch funktioniert, geschweifte Klammern nicht zu escapen, also {HighLighter|php|$test = {test};}führte zur gewünschten Ausgabe. Ist das nur Zufall?
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: stefanbe am 27. August 2013, 12:31:19
da fehlt bestimt das ";" bei der ausgabe  :)
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: HPdesigner am 27. August 2013, 12:36:44
Nope, das ';' wird ausgegeben - das Plugin macht exakt was es soll!
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: HPdesigner am 01. September 2013, 14:48:56
Zitat von: stefanbe am 27. August 2013, 12:31:19
such mal in der cms/Syntax.php diese zeilen
Ok, ich hab die Zeilen jetzt mal ersetzt, es passiert folgendes in der Ausgabe des Highlighters:
Eckige Klammern funktionieren! Ansonsten hat sich generell am CMS nichts geändert. Zeilenumbrüche und benutzerdefinierte Syntax funktionieren. Die Leerzeichen kann ich im HighLighter Plugin auch abfangen, also hat es auf jeden Fall schon was gebracht!
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: stefanbe am 01. September 2013, 18:12:36
kanste mal die aktuelle mozilo2.0 ausprobieren

lg
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: HPdesigner am 01. September 2013, 19:55:54
Hab auf die 2.0 auf die aktuelle Version geupdatet - gleiches Resultat. Komischerweise zeigt jetzt auf der Admin-Startseite an, dass mod_rewrite nicht verfügbar ist - das ist aber nicht der Fall (ging ja vorher auch) und es funktioniert auch tadellos...
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: stefanbe am 02. September 2013, 01:25:38
Lösch die .htaccess und admin/.htaccess ruf die install.php bis zum mod_rewrite test auf dann geht das wieder.

lg
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: HPdesigner am 02. September 2013, 07:19:22
Perfekt, die hatte ich vergessen zu löschen ;) Jetzt klappts. Danke dir!
Jetzt hab ich nur noch das Problem, dass er im HighLighter bei escapten Zeichen das Hochdach mit ausgibt...
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: stefanbe am 02. September 2013, 10:53:36
ändere in der index.php vom Plugin
das
    function getContent($value) {

        global $specialchars;

nach
    function getContent($value) {

        global $specialchars;
        $value = $specialchars->decodeProtectedChr($value);


lg
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: HPdesigner am 02. September 2013, 11:08:23
Nice, jetzt funktionierts! Vielen Dank!
Soll ich das Plugin für 2.0 hochladen?
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: Rainer am 02. September 2013, 13:18:52
Spricht nix dagegen  :)
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: HPdesigner am 02. September 2013, 14:02:03
Ich habs hochgeladen (http://www.mozilo.de/forum/index.php?action=media;sa=item;in=210).

Na hätte ja sein können, dass noch Ideen oder Einwände kommen... ;)
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: Rainer am 03. September 2013, 08:05:41
Wer weiß, die kommen ja vielleicht immer noch  :D
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: blacknight am 05. Oktober 2013, 09:38:15
super Plugin  :D

ich hatte nur noch ein kleines Problem und zwar wenn ich folgendes darstellen möchte:
<div class="menu">{CSSDropDownMenu}</div>
In der Inhaltsseite steht:
{HighLighter|html5|
  <div class="menu">^{CSSDropDownMenu^}</div> 
}


in der fertigen Seite wird jedoch nicht {CSSDropDownMenu} ausgegeben sondern durch das Plugin mit dem entsprechenden HTML Code ersetzt.

Ich hab dann im HighLighter Plugin die Zeile
$code = str_replace(array('-html_br~','-html_nbsp~'), array('', ' '), $code);
ersetzt durch:
$code = str_replace(array('-html_br~','-html_nbsp~','{','}'), array('', ' ','^{','^}'), $code);
und die Zeile
return $geshi->parse_code();
durch
return $specialchars->encodeProtectedChr($geshi->parse_code());
Damit bleibt das ^ erhalten und es wird {CSSDropDownMenu} ausgegeben.
Hat, soweit ich das testen konnte, auch keine negativen Auswirkungen. Wenn keine Einwände hat, könntest du das ja vielleicht noch ändern ;)
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: stefanbe am 05. Oktober 2013, 14:56:38
Ich würde es so ändern

Suchen
return $geshi->parse_code();
Ersetzen
$search = array("{","}","|","[","]");
$replace = array("{","}","|","[","]");
return str_replace($search,$replace,$geshi->parse_code());


damit GeSHi nicht die Geschützen Zeichen mitbeckomt.
Da die ja eigendlich zum Hervor zu hebenen Code gehören und nur vor mozilo Geschützt werden müssen.

lg stefanbe
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: HPdesigner am 07. Oktober 2013, 15:10:44
Hab Stefans Variante implementiert und hochgeladen, danke für das gute Feedback!

lg, HPdesigner
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: stromflo am 10. April 2015, 22:52:49
Guten Abend zusammen,

möchte meine bestehende Webseite (Dokuwiki )zukünftig durch eine moziloCMS Seite ersetzen.
Allerdings kommt dort auch reichlich Quellcode vor. Wollte einen Quellcode, der in C geschrieben ist nun mit dem Plugin darstellen. Allerdings wird die Darstellung bereits nach dem ersten } beendet. Im Quellcode kommt auch | vor.

Gibt es da eine Lösung?

Gruß Flo
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: HPdesigner am 11. April 2015, 10:12:30
Ich fürchte alle {, }, [, ] und | musst du mit ^ escapen... Ich hab das mit "Alle suchen und ersetzen" in meinem Texteditor gemacht.

— Andreas

PS: An dieser Stelle an die Entwickler: Es wäre super, wenn es eine Art Block-Escapen gäbe! Sodass man mozilo sagt, in diesem Block nicht auf Syntax prüfen, um nicht alle Sonderzeichen einzeln escapen zu müssen...
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: stromflo am 11. April 2015, 10:23:09
Danke für die Rückmeldung.
Hatte ich auch schon vermutet, dass ich da nicht herum komme....
Dein Ansatz/Vorschlag hört sich natürlich super an und wäre schön, wenn dies irgendwann umgesetzt wird.

Gruß Flo
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: HPdesigner am 11. April 2015, 10:28:52
Falls du Sublime Text nutzt (für mich der beste Code-Editor überhaupt, um mal etwas Werbung einzuschieben ;) ) oder einen anderen Texteditor, der reguläre Ausdrücke nutzt, kannst du einfach nach folgendem Ausdruck suchen (STRG+H):

[{}|\[\]]

Dann setzt Sublime dir vor jedes der mozilo Sonderzeichen einen Cursor und du brauchst nur noch das Hochdach einfügen. Ein hoch auf Multicursor!

— Andreas
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: stefanbe am 11. April 2015, 10:46:51
Das kann der mozilo Editor auch :-)
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: HPdesigner am 11. April 2015, 11:23:13
Multicursor? Ja, Regex? Nein... ;)

— Andreas
Titel: Re: Syntax-Highlighting mit "HighLighter"
Beitrag von: stromflo am 11. April 2015, 13:30:30
Also das Suchen/Ersetzen hat im mozilo Editor super geklappt!
Außerdem habe ich das Aussehen der Codebox noch im style.css hinterlegt.


.highlighter_plugin{
  background-color: #EEEEEE; 
  border: 1px solid black;
}


Ein Problem macht mir die Ganze Darstellung jetzt noch in der mobilen Ansicht.
Der Text geht über den Rand vom Design und auch über den Rahmen der Codebox hinaus...
Mal überlegen wie ich das in Griff bekomme... Es stellt sich die natürlich die Frage wie ich auf Mobilgeräten überhaupt eine sinnvolle Darstellung hinbekomme?

Gruß Flo

edit:
overflow: auto;  gefällt mir fast noch am besten :)

.highlighter_plugin{
  background-color: #EEEEEE; 
  border: 1px solid black;
  padding: 2px;
  overflow: auto;
}


Im mobilen Design nehme ich dann die Schriftgröße noch etwas runter...