Laden...

BBCode-Parser in .NET

Erstellt von Golo Roden vor 16 Jahren Letzter Beitrag vor 13 Jahren 21.122 Views
Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren
BBCode-Parser in .NET

Hallo,

zusammen mit dem myCSharp-Mitglied vaneX habe ich einen BBCode-Parser für .NET geschrieben ...

Der Download sowie einige Beispielkonfigurationen sind inzwischen verfügbar, die Doku folgt in Kürze noch ...

Siehe http://codeparsernet.codeplex.com/ [EDIT=herbivore]Url aktualsiert[/EDIT]

Viele Grüße,

Golo

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

Hallo,

wem bislang noch die Doku gefehlt hat, auch diese steht nun online.

Viele Grüße,

Golo

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Golo,

nette Sache!

Dazu ein paar Fragen:

Wodurch wird bestimmt, ob ein Attribut für ein Tag zulässig ist oder nicht und wie wird der Fall gehandelt, wenn das Attribut optional ist, also z.B. [****URL=http://...]LinkText[/url] oder eben nur [****URL]http://..[/url]., was ja verschiedene Umsetzungen erfordert?

Wie erfolgt das SyntaxHighlightig von Code bzw. wie kann eine entsprechende Methode eingebunden werden. Gibt es überhaupt Callbacks bzw. Events mit denen man sich in den Umwandlungsprozess einhängen kann?

In diesem Forum erfolgt ja z.B. eine automatische Umsetzung von Urls und Smilies. Wie könnte das laufen? Kann man sich da bei euren Parser irgendwo einklinken?

herbivore

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

Hallo herbivore,

danke für Dein Feedback 🙂.

Zulässige Attribute: Wird derzeit nicht geprüft. De facto sind sogar die Attributnamen egal, alles was zählt, ist die Reihenfolge.

Optionale Attribute: Werden derzeit nicht unterstützt.

SyntaxHighlighting: Geplant, noch nicht enthalten.

Callbacks / Events: Nein

Automatische Umsetzung: Derzeit nicht enthalten, sind ja keine BBCodes 😉.

Ich werde die ganzen Punkte aber mal als Vorschläge aufnehmen, und wenn sich ein bisschen was angesammelt hat, werden David und ich das mal sichten.

Viele Grüße,

Golo

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

V
9 Beiträge seit 2007
vor 16 Jahren

Hallo!

Das mit der Automatischen Umsetzung ist mir auch eben eingefallen, wollte gerade eine Mail schreiben 😉

  • David

PS: Bei sovielen Hits / Downloads muss es doch mehr Leute geben die Feedback loswerden wollen... traut euch 🙂

L
333 Beiträge seit 2007
vor 16 Jahren

Original von Golo
Zulässige Attribute: Wird derzeit nicht geprüft. De facto sind sogar die Attributnamen egal, alles was zählt, ist die Reihenfolge.

Attributnamen? Sowas gibt's in "BBCode" doch gar nicht. Reihenfolge ich dann klar wichtig und das folgende ergibt sich automatisch.

Optionale Attribute: Werden derzeit nicht unterstützt.

Automatische Umsetzung: Derzeit nicht enthalten, sind ja keine BBCodes 😉.

Doch, das ist wichtig! In bestimmten Bereichen (z.B. dem Attribut des URL-Tags) dürfen nämlich nicht noch automatisch URLs übersetzt werden und in [ code]-Bereichen sollte man besser überhaupt keine Ersetzungen machen, die neue Elemente (wie Icons) einfügen oder Eingabezeichen aufessen (wie Kurzschreibweisen von Formatierungen).

Noch ein Hinweis: In HTML hat man es sich wegen der guten Lesbarkeit angeeignet, die Tags für Blockbereiche, wie <p> oder <blockquote> in eine eigene Zeile zu schreiben. Manche BBCode-Parser (allen voren der in diesem WBB2 verbaute) scheinen aber jedes einzelne Whitespace groß und breit in die Ausgabe zu übernehmen. Wenn man nach dem [/code] da nicht unmittelbar mit dem Text anfängt, riskiert man mehrere Leerzeilen. So wird es nur eine (!).

So ein BBCode-Parser ist eine sehr komplexe Angelegenheit, wenn man es richtig machen will. Viele damals vorhandene Systeme sind z.B. mit mehrfach geschachtelten Tags absolut nicht klargekommen und haben nachher alles durcheinander geworfen. (Einfaches Regex.Replace bzw. preg_replace tut es bei weitem nicht!) Das hab ich schon gemerkt, als ich vor vielen Jahren für mein PHP-Webforum einen eigenen BBCode-Parser geschrieben hab. Jetzt werden falsch geschachtelte Tags aber auch genau markiert. Das Syntax-Highlighting hab ich dabei übrigens aus einer externen Bibliothek "eingekauft". (Für zukünftige Entwicklungen werde ich von BBCode aber wieder Abstand nehmen... aber das tut in diesem Thread ja nichts zur Sache.)

V
9 Beiträge seit 2007
vor 16 Jahren

Original von LonelyPixel
Doch, das ist wichtig! In bestimmten Bereichen (z.B. dem Attribut des URL-Tags) dürfen nämlich nicht noch automatisch URLs übersetzt werden und in [ code]-Bereichen sollte man besser überhaupt keine Ersetzungen machen, die neue Elemente (wie Icons) einfügen oder Eingabezeichen aufessen (wie Kurzschreibweisen von Formatierungen).

Da wir im Moment noch überhaupt keine Automatische Umsetzung haben, betrifft uns das Problem mit den bestimmten Bereichen wo keine Umsetzung passieren darf auch noch nicht 😉

Wie man aber der Dokumentation entnehmen kann, ist es sehr leicht sich einen korrekten [ code] Tag zu basteln:


TagConfiguration codeTag = new TagConfiguration("code", "<div>{0}</div>", false);
parserConfiguration.TagConfigurations.Add(codeTag);

Mit dem dritten, optionalen, Parameter bei der Konfiguration eines Tags kann man nämlich angeben ob der Parser zwischen diesen Tags parsen darf oder nicht.
Wenn hier 'false' verwendet wird rührt der Parser zwischen [ code] und [ /code] nichts an 🙂

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo vaneX,

zusätzlich zum "Nichtanrühren" durch den Parser wäre es aber schön, wenn man eine Delegaten übergeben oder einen EventHandler registrieren können, der den Code übergeben bekommt, um z.B. ein Syntaxhighlighting vornehmen zu können. Auch bei anderen Umsetzungen wäre es nicht schlecht, einen EventHandler registrieren zu können, um nicht nur statische sondern auch algorithmische Umsetzungen realisieren zu können oder zumindest die statischen Umsetzungen algorithmisch beeinflussen zu können.

Ich sage mal so: Eine extra Domain für eine Komponente zu registrieren, weckt natürlich auch Erwartungen an die Möglichkeiten und die universelle Einsetzbarkeit der Komponente. 🙂

herbivore

V
9 Beiträge seit 2007
vor 16 Jahren

Hallo herbivore,

das eine eigene Domain gewisse Erwartungen an die Komponente schafft ist uns klar, und wir hoffen diese Erwartungen mit der Zeit auch erfüllen zu können!
Deswegen freuen wir uns auch über jede Kritik und Vorschläge 🙂

Das mit den EventHandlern und Delegaten ist sicher eine Option für das nächste Update, ich werde einmal überlegen wo man im ganzen Parsevorgang am besten einbauen kann.

  • David
49.485 Beiträge seit 2005
vor 16 Jahren

Hallo vaneX,

ich werde einmal überlegen wo man im ganzen Parsevorgang am besten einbauen kann.

bei jedem Ersetzungsschritt. 🙂 Vielleicht sogar vor und nach jedem Ersetzungsschritt (analog z.B. zu BeforeExpand und AfterExpand bei einem TreeView, also auch mit der Möglichkeit Ersetzungsschritte zu canceln).

Eine ganz andere Variante wäre beim Parsen des Eingabe-Strings einen SyntaxBaum aufzubauen (Analog zu z.B. XmlDocument), denn man dann traversieren und eben auch ändern kann und aus dem dann anschließend ein Ausgabe-String erzeugt wird (vielleicht sogar analog CodeDom, also mit der Möglichkeit, eigene Provider, die die Ausgabe übernehmen, zu implementieren und zu verwenden).

Das wäre sicher in jeder Hinsicht sicher das flexibelste, aber ok, eigentlich reicht auch ein BeforeReplace und ein AfterReplace. 🙂 Wobei es genaugenommen dann ja eigentlich kein Parser sondern ein Converter/Replacer ist. 🙂

herbivore

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

Das mit dem Baum machen wir bereits so 😉.

Grundsätzlich finde ich die Idee sehr gut, wobei ich nicht denke, dass wir sie kurzfristig umsetzen werden. Wir haben beschlossen, generell erst einmal Feedback zu sammeln, dieses dann nach einer gewissen Zeit zu sichten, und dann an alles gesammelt heranzugehen, um eine v1.1 (oder 1.5 oder 2.0) herauszubringen.

Notiert habe ich aber bereits 🙂!

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Golo,

das mit dem Sammeln ist schon klar und geht auch voll in Ordnung.

Das mit dem Baum machen wir bereits so 😉.

Aber nur intern, oder? Oder bekommt man als Ergebnis den Baum und kann sich selbst darauf austoben?

herbivore

V
9 Beiträge seit 2007
vor 16 Jahren

Morgen!

Der Baum wird nur intern erstellt und auch verarbeitet 🙂

  • David
Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

Aber nur intern, oder? Oder bekommt man als Ergebnis den Baum und kann sich selbst darauf austoben?

Blöde Frage - was würdest Du mit dem Baum anfangen wollen, was der Parser nicht auch direkt machen könnte?

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Golo,

blöde Frage? Ist nicht dein Ernst, oder?

Was macht den Euer Parser intern mit dem Baum, was er nicht direkt machen könnte? Also natürlich ist so ein Baum beim Parsen sinnvoll.

Ein Benutzer der Komponente will ja in der Regel ja auch nur parsen, also ist das Ergebnis von Parser-Komponente und eigener Erweiterung doch wieder nur ein Parser. Wenn es für euch sinnvoll, intern ist einen Baum zu verwenden, dann ist es auch für den Benutzer der Komponente sinnvoll, denn der Code, den der Benutzer schreibt ist ja wie gesagt auch nur ein Parser, der dann (intern) einen Baum verwenden würde.

Außerdem habe ich ja oben schon beschrieben, welche Möglichkeiten ich bei der Verarbeitung eines Baums ich sehe.

Natürlich ist es bei BBCode nicht so wahrscheinlich, dass man z.B. Umsortierungen der Knoten im Baum vornehmen will, wie das bei anderen Parsern der Fall sein könnte. Aber Parsen ohne Baum ist ja fast wie Informatik ohne Information. 🙂

Wobei ich ja in Bezug die Notwendigkeit von Bäumen geschrieben habe:

Das wäre sicher in jeder Hinsicht sicher das flexibelste, aber ok, eigentlich reicht auch ein BeforeReplace und ein AfterReplace. 🙂

herbivore

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

Okay, kapiert 😉

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

codeparser.net 1.1 ist veröffentlicht ... siehe http://www.codeparser.net

Unterstützt wird nun Syntax Highlighting für die folgenden Sprachen:

ASPX, C, Cobol, ColdFusion, C++, C#, CSS, Eiffel, Fortran, Haskell, Java, JavaScript, JScript, Mercury, MSIL, Pascal, Perl, PHP, Python, Ruby, SQL, Visual Basic, VBScript, XML

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

Unter http://www.codeparser.net/Rss.aspx steht nun auch ein RSS-Feed zur Verfügung, mit dem man auf dem Laufenden bleiben kann, wenn es neue Versionen gibt ...

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

codeparser.net 1.2 ist veröffentlicht ... siehe http://www.codeparser.net

Neu ist die Unterstützung von alternativen Ersetzungen, so dass man für ein Tag nun verschiedene Ersetzungen mit unterschiedlicher Parameterzahl definieren kann, was zum Beispiel für das url-Tag sinnvoll sein kann.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

codeparser.net 1.3 ist veröffentlicht ... siehe http://www.codeparser.net

Neu ist, dass konfiguriert werden kann, ob ungültige Tags (wie bisher) eine InvalidTagException auslösen, oder ob diese einfach ignoriert werden sollen.

Außerdem sind nun die Assemblyversionsinformationen korrekt gesetzt.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

Und gleich noch was ... ab sofort steht auch der Quellcode von codeparser.net zum Download zur Verfügung.

Der Quellcode steht unter der Microsoft Reference License (Ms-RL), die Einblick in den Quellcode ausschließlich zu Referenzzwecken erlaubt.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

codeparser.net 1.4 wird in den nächsten Tagen veröffentlicht, für nähere Infos siehe http://www.des-eisbaeren-blog.de/Blog/Permalink/codeparsernet14ToBeReleasedSoon.aspx

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

codeparser.net 1.4 ist veröffentlicht, wie immer unter http://www.codeparser.net ...

Neu in dieser Version sind Ausdrucksersetzungen, die es beispielsweise ermöglichen, alle Zeilenumbrüche durch ein <br /> zu ersetzen, Tabulatoren durch mehrere Leerzeichen und so weiter ... wobei allerdings die Bereiche, für die das parseContent-Attribut auf false gesetzt ist, ignoriert werden.

Einziger Nachteil im Moment ist noch, dass die Dokumentation noch nicht aktualisiert wurde. Ich denke, dies wird morgen oder spätestens übermorgen geschehen.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

K
1 Beiträge seit 2007
vor 16 Jahren
Listen?

Erst mal: Gratulation! codeparser.net ist sehr einfach zu handlen und nimmt mir viel Zeit ab. Danke für die viele Arbeit...

Nun aber eine Frage: wann oder wie werden Listen nach dem Schema*...

unterstützt?

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

Danke für die Anregung 🙂

Geplant ist noch nichts, aber ich werd's mir mal notieren ...

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

PS: War natürlich quatsch, geht jetzt schon (ist schon spät ^^).

Du musst einfach nur folgende Tags definieren:

[ list ] => <ul>
[ /list ] => </ul>
[ * ] => <li>

Und das war's schon 🙂 ... was wir natürlich machen können, ist, mal noch eine entsprechende Extension schreiben und zum Download anbieten ...

Viele Grüße,

Golo

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

PPS: Erledigt, siehe die Extension Text.Lists unter http://www.codeparser.net/Download.aspx

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Gelöschter Account
vor 16 Jahren

hallo Golo Roden,

Ich habe in einem privaten Projekt deine komponente intergriert. Dies funktioniert soweit sehr gut nur habe ich folgende effekte bemerkt:
(alle tests haben die einstellung throwExceptionOnInvalidTag= false und ich habe die version 1.4 getestet)

  1. wenn man z.b. [ url] eingibt (zu beachten ist das leerzeichen nach der ersten klammer), dann wirft er eine exception : Length cannot be less than zero.
    Parameter name: length.

das ist meiner meinung nach unschön, da meiner meinung nach dies nicht als bbcode geparst werden sollte, d.h. als normaler text betrachtet werden sollte.

weiters muss ein tag definitiv mit einem "[" beginnen. wenn man wie z.b. in myCSharp.de ein smilie einfügt das den string :" 😄 " enthält, muss man aufwändige und ressourcenfressende stringreplaces tätigen, damit der parser damit zurechtkommt. z.b. " 😄 " → " [:D] "

wenn man irgendwo im text einfach nur ein " [ " schreibt und diesen nicht schließt, dann kappt der parser allen nachfolgenden text einfach weg.
"hallo das ist ein [normaler text" -(parser)> "hallo das ist ein"

schließt man den "tag im beispiel (punkt 3) dann wirft er eine exception wie in punkt 1 -->"hallo das ist ein [normaler text]" -(parser)> exception (siehe punkt 1)

wenn man einen tag mit [I] eröffnet und mit [/i] schließt, dann wirft er eine
InvalidTagNestingException : Exception of type 'codeparser.net.Exceptions.InvalidTagNestingException' was thrown.

-> case sensitive
schön wäre wenn man z.b. wie bei "throwExceptionOnInvalidTag = false" sagen könnte : "CaseSenitiveTags = false"
momentan musste ich fast alle tags 2 mal definieren, da der user genausogut auch kleinschreibung verwenden darf.

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren
  1. wenn man z.b. [ url] eingibt (zu beachten ist das leerzeichen nach der ersten klammer), dann wirft er eine exception : Length cannot be less than zero.
    Parameter name: length.

das ist meiner meinung nach unschön, da meiner meinung nach dies nicht als bbcode geparst werden sollte, d.h. als normaler text betrachtet werden sollte.

Danke für den Hinweis. Wird mit der kommenden Version gefixt.

  1. weiters muss ein tag definitiv mit einem "[" beginnen. wenn man wie z.b. in myCSharp.de ein smilie einfügt das den string :" 😄 " enthält, muss man aufwändige und ressourcenfressende stringreplaces tätigen, damit der parser damit zurechtkommt. z.b. " 😄 " -> " [:D] "

Nein, das ist nicht nötig. Guck Dir mal die Expression Replacements an, die machen genau das.

  1. wenn man irgendwo im text einfach nur ein " [ " schreibt und diesen nicht schließt, dann kappt der parser allen nachfolgenden text einfach weg.
    "hallo das ist ein [normaler text" -(parser)> "hallo das ist ein"

Ups. Normalerweise sollte da eine Exception kommen. Wird auch gefixt.

  1. schließt man den "tag im beispiel (punkt 3) dann wirft er eine exception wie in punkt 1 -->"hallo das ist ein [normaler text]" -(parser)> exception (siehe punkt 1)

Ja, weil er das Tag dann nicht kennt. Das kannst Du ignorieren mit throwExceptionOnInvalidTag=true.

  1. wenn man einen tag mit _ eröffnet und mit _ schließt, dann wirft er eine
    InvalidTagNestingException : Exception of type 'codeparser.net.Exceptions.InvalidTagNestingException' was thrown.

-> case sensitive
schön wäre wenn man z.b. wie bei "throwExceptionOnInvalidTag = false" sagen könnte : "CaseSenitiveTags = false"
momentan musste ich fast alle tags 2 mal definieren, da der user genausogut auch kleinschreibung verwenden darf.

Auch eine gute Idee. Wird ebenfalls umgesetzt in der nächsten Version.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Gelöschter Account
vor 16 Jahren

Das kannst Du ignorieren mit throwExceptionOnInvalidTag=true

sollte es nicht genau dann eine exception werfen?

edit: habe gerade bemerkt, das es völlig egal ist wie die propertie gesetzt ist. das verhalten ist immer das selbe.

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

Ähm, stimmt natürlich .... hm, okay, dann ist das ein Bug. Danke für den Hinweis!

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Gelöschter Account
vor 16 Jahren

Hallo Golo Roden,

ich hab das teil so konstruiert, das es den code onthefly parst. deshalb teste ich es gerade relativ schnell auf viele möglichkeiten.


dieser string-> "as[B]dfasfdasdfasdfas[I]dfasdfas[/B]d[/I]f"
wirft auch eine exception

-> InvalidTagException

sonst konnte ich keine unerwünschte effekte feststellen. gute arbeit 👍

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren

Danke 🙂

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Gelöschter Account
vor 16 Jahren

Hallo Golo Roden,

noch etwas:

<expressionReplacement expression="\n" replacement="&lt;br /&gt;" />
      <expressionReplacement expression="\t" replacement="    " />

(die leerzeichen sind & # 1 6 0 ; )

mh... wollte auf vorschau klicken ob er das übernommen hat...

fortsetzung:

\n liest er korrekt ein -> expressionterm = \n
\t liest er falsch us der xml ein -> expressionterm = \t

edit2: und wie kann man erzwingen, das replacement & # 1 6 0 ; (ohne leerzeichen) ist?

edit 3: ich habs erstmal hardcoded gelöst, indem ich den expressionterm im code erstellt habe.

V
9 Beiträge seit 2007
vor 16 Jahren

Hallo Golo Roden,

ich hab das teil so konstruiert, das es den code onthefly parst. deshalb teste ich es gerade relativ schnell auf viele möglichkeiten.

  
dieser string-> "as[B]dfasfdasdfasdfas[I]dfasdfas[/B]d[/I]f"  
wirft auch eine exception  

-> InvalidTagException

Das ist soweit ich weis aber auch gewollt, da die HTML Tags, so verschachtelt wie in diesem Beispiel, nicht korrekt sind! Der Parser verhindert also das man 'falsches' HTML produziert.

Gelöschter Account
vor 16 Jahren

ja das problem ist, das mycsharp das beispielsweise generell mitmacht. und auch alle anderen mir bekannten foren machen das mit.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo JAck30lena, hallo vaneX, hallo Golo Roden,

naja, das ist ja eher kein Problem, sondern gerade ein Luxus, dass der myCSharp.de-Parser das mitmacht. Aus

as[B]dfasfdasdfasdfas[I]dfasdfas[/B]d[/I]f

wird korrekt

asdfasfdasdfasdfas_dfasdfasd_f

Der myCSharp.de-Parser erzeugt also gar kein falsches HTML, sondern löst die Überlappungen korrekt auf.

Es wäre sicher schön, wenn der "BBCode-Parser in .NET" das auch könnte.

herbivore

Gelöschter Account
vor 16 Jahren

es wäre sinnvoll, wenn er bei einem fehler nicht einfach eine exception wirft, sondern einfach weitermacht in bewusstsein, das da nicht alles geparst wurde/konnte.

das problem ist nämlich, das er z.b. bei einem sehr langen text bei einem fehler einfach eine exception wirft und man weiß als erstes nicht wo und weshalb. wenn schon eine exception dann wäre der index im string gut zu wissen, damit man dem user einen hinweis geben kann wo sein fehler liegt.

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 15 Jahren

Hallo,

seit gestern Abend steht codeparser.net 2.0 Beta 1 zur Verfügung, siehe http://www.des-eisbaeren-blog.de/Blog/Permalink/2008/04/22/codeparsernet20Beta1Available.aspx

Die meisten der genannten Fehler sollten damit behoben sein.

Ich würde mich über jegliches Feedback freuen 🙂.

Viele Grüße,

Golo

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Gelöschter Account
vor 15 Jahren

Hallo Golo Roden,

erstmal danke für die ankündigung. ich habe ein paar kleinere fragen.

  1. du schreibst zwar in deinem blog das man nur hardcoded konfigurieren kann, jedoch sagt er mir das er ParserConfiguration nicht kennt. ohne diese klasse ist es aber schwer zu konfigurieren?

  2. welche neuereungen gibt es? releasenotes?

  3. ich teste in einer 2.0 umgebung und die software soll im allgemeinen 2.0 lauffähig sein. was für komponenten verwendet ihr, welche evtl ein 3.5 benötigen sollten?

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 15 Jahren

Hallo,

danke für Dein Feedback.

Ad 1: Die Klasse ParserConfiguration gibt es nicht mehr, dies geschieht nun über die Klasse TagConfiguration und eventuell über ParserOptions.

Ad 2: Releasenotes stehen noch keine zur Verfügung, kurz gesagt: Neues Konfigurationsmodell, bessere Fehlerbehandlung, Unterstützung für verschiedene Syntaxhighlighter, Unterstützung für Transformationen im Code, Unterstützung für benannte Attribute, Unterstützung für regelbasierte Übersetzung, ... guck Dir mal die letzten Einträge in meinem Blog an, im Endeffekt wird dies dort ersichtlich.

Ad 3: Es wurden Lambdaausdrücke verwendet, und einiges anderes, was in .NET 3.5 neu ist - ich weiß allerdings nicht, inwieweit das auf bekannte Konstrukte umgesetzt wird. Hast Du es einfach mal versucht, das Ding unter .NET 2.0 anzubinden?

Viele Grüße,

Golo

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Gelöschter Account
vor 15 Jahren

ja ich bin nebenbei daran das ding in meinem programm unterzubringen. ist nur schade, das ich die alte konfiguration, die ja recht umfangreich bei mir mittlerweile ist, nicht mehr verwenden kann.

was die .net 2.0 geschichte betrifft, so werte ich mal eine vm rauskramen müssen, die ausschließlich 2.0 drauf hat, da mein rechner auch die 3.0 version installiert hat. deshalb wird es mit ziemlicher wahrscheinlichkeit auf meinem rechner laufen, jedoch bin ich mir nicht sicher ob es auf 2.0 only läuft.

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 15 Jahren

Na ja, es ist ja auch erst die Beta ... Laden (und Speichern) der Konfiguration als XML soll noch kommen, und auch die Abwärtskompatibilität sollte gewahrt werden ...

Also nicht verzweifeln 😉

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

_
227 Beiträge seit 2006
vor 13 Jahren

Hallo,
lebt das ganze noch?
Die Url ist (zumindest momentan bei mir) nicht erreichbar.

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 13 Jahren

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de