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
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.
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 ;)
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