| 

.NET C# Java Javascript Exception

3
Hallo und guten Morgen,
ich benutze schon seid geraumer Zeit die CodeKicker.BBCode Bibliothek.
Sie läuft einwandfrei und gefällt mir soweit sehr gut.

Nun wollte ich sie für das Einfügen von Schriftarten verwenden und irgendwie klappt dass nicht.

Definiert habe ich den Parser wie folgt:
new BBCodeParser(new[] { new BBTag("fontFamily", "<span style=\"font-family:${fontFamily};\">", "</span>", new BBAttribute("fontFamily", ""), new BBAttribute("fontFamily", "fontFamily")) });

So lange die eingesetzten Werte nur ein Wort beinhalten
xxxx.ToHtml("Hello [fontFamily=Arial]World[/fontFamily]");

klappt es auch super,
nur mit mehreren Worten
xxxx.ToHtml("Hello [fontFamily=Arial Helvetica]World[/fontFamily]");

leider nicht.

Kann ich das so überhaupt machen und wenn ja wie macht man das am Besten?

Ich wünsche noch einen schönen Tag,
Viele Grüße
Andy
30.11.2011
1 Antwort
4
Das ist derzeit nicht möglich. Wenn der Parser versucht, einen Attributwert zu laden, dann liest er alle Zeichen bis zum nächsten Leerzeichen oder einer eckigen Klammer ein.

Der korrekte Fix wäre es, in der lib zu veranlassen, dass ähnliche Parsing-Regeln gelten wie für Text. D.h. dass man leerzeichen durch einen Backslash escapen kann. Alternativ müsste man einrichten, dass Attributwerte gequotet werden können.

Leider fehlt mir dafür derzeit die Zeit, weshalb ich dir zwei Workarounds anbieten kann:

  • Du schreibst
    [fontFamily=Arial_Helvetica]World[/fontFamily]
    und registrierst das fontFamily-Attribut wie folgt:
    new BBAttribute("fontFamily", "fontFamily", ctx => ctx.AttributeValue.Replace("_", " "))
    Du ersetzt also nachträglich den Underscore durch ein Leerzeichen (kleiner Hack).

  • Du schickst mir einen Scheck ;-)

Edit: Das zu implementieren ist nicht so leicht, weil der Parser immer etwas heikel anzufassen ist (obwohl der Code durchaus sauber ist). Man muss dabei sehr über Korrektheit und Kompatibilität zu vorhandenem Code nachdenken. Sowohl auf codekicker als auch auf anderen Seiten, welche inzwischen Codekicker.BBCode nutzen, sollen keine vorhandenen Posts kaputt gehen.
30.11.2011
Marvin Steppat 4,0k 1 4 8
Marvin Steppat 4,0k 1 4 8
1
Hi Marvin
vielen Dank für Deine Antwort, ich weiß das sehr zu schätzen!
Ich denke ich kann mit Workaround 1 gut leben ;)
...werde ich gleich ausprobieren. Da die Werte für fontFamily durch ein anderes Programm gesetzt werden kann ich dem gut mitteilen alle Leerzeichen durch Underscores zu ersetzten bevor sie eingefügt werden.
Ich hatte mir schon sowas gedacht als ich die Lib dekompiliert und debugged habe, aber darauf wäre ich jetzt wohl so schnell noch nicht gekommen ;)
Workaround 2 klingt auch nicht schlecht ;)

Viele Grüße und nochmal Dankeschön
Andy
hoernchenmeister 01.12.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH