[ASP] Hoe mijn UBB Parser intelligenter maken ??

Pagina: 1
Acties:

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
Ben vandaag een beetje aan het stoeien met ASP en hoe ik daar een forumpje voor kan schrijven....

Ja, ik weet er zijn er al genoeg, maar het zelf doen is nog altijd het allerleukst...

Nu dacht ik, ik ga even een UBB Parsertje schrijven omdat dat toch wel leuk is... Op zich gaat alles goed, maar ik loop tegen het volgende aan...

Ik gebruik de volgende functie, welke ik gevonden heb op het internet met de volgende syntax om een gedeelte van de code te parsen....
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
strOutput = TagParse(strOutput, "[b]", "[/b]", "<b>", "</b>")

function TagParse(StringToCode, BeginTag, EndTag, BeginRTag, EndRTag)
    BeginTagPos = Instr(1, StringToCode, BeginTag, 1)
    EndTagPos = Instr(1, StringToCode, EndTag, 1)
    while (EndTagPos > 0 and BeginTagPos > 0)
        StringToCode = replace(StringToCode, BeginTag, BeginRTag, 1, 1, 1)
        StringToCode = replace(StringToCode, EndTag, EndRTag, 1, 1, 1)
        BeginTagPos = Instr(1, StringToCode, BeginTag, 1)
        EndTagPos = Instr(1, StringToCode, EndTag, 1)
    wend
    TagParse = StringToCode
end function

Om dan de string te parsen doe ik eerst:

1. Bold Tag vervangen;
2. Strike Tag vervangen;
3. Italic Tag vervangen;
4. etc
xx. de Quote/Code tag vervangen;

Dit gaat allemaal perfect, en dubbelquoten is geeneens een probleem... Dus ik ben er erg tevreden mee...

Het probleem zit hem mij in het feit dat het niet helemaal goed gaat met de CODE Tag...

Hoe kan ik ervoor zorgen dat de Bold, Italic, etc. vervangingen geen invloed hebben op een CODE stuk :? , want nu is het zo dat de Tags wel gewoon werken in het CODE stukje en dat wil ik niet.... Weet iemand hiervoor een oplossing of weet iemand een goede voorbeeld ASP UBB Parser waarin dit wel werkt?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

doorgaans is het zo dat in op replace-gebaseerde parsers de code "even weggezet" wordt, tijdens het parsen van de andere tags. Dus het wordt tijdelijk vervangen door een hash of andere identifier van de inhoud van de tags, en de andere replaces worden gedaan, daarna wordt de code weer geformat teruggezet.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Gaan trouwens nog wel meer dingen mis. Zet maar eens eerst een [/b] neer en vervolgens een [b]..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
drm:
doorgaans is het zo dat in op replace-gebaseerde parsers de code "even weggezet" wordt, tijdens het parsen van de andere tags. Dus het wordt tijdelijk vervangen door een hash of andere identifier van de inhoud van de tags, en de andere replaces worden gedaan, daarna wordt de code weer geformat teruggezet.
Ja, daar had ik nog niet aan gedacht... Dus de eerste stap is om alle informatie die tussen de CODE Tag (en de tag zelf) in een array te zetten met een bepaalde identifier...

Maar dit is dus eigenlijk niet goed op te lossen met plain ASP/VBScript code :? Hiervoor kan je dus beter gebruik gaan maken van een regex?

Die identifier zet je ook in de tekst en als laatste zet je de geformateerde tekst dus weer terug en delete je de array...

/Edit: stukje toegevoegd...

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Sowieso zijn regexp's veeeel eenvoudiger dan allerlei "gewone" replaces achter elkaar. Je hikt gauw tegen regexp's op omdat het er zo enorm cryptisch uitziet, maar als je klein begint dan is het allemaal niet zo moeilijk. kwestie van oefenen.

zie ook [topic=469314]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Je kunt ook de string teken-voor-teken verwerken, en de geopende tags onthouden met een stack. Als je dan een nieuwe tag tegenkomst, kijk je gewoon of deze tag binnen de laatste tag toegestaan is.

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
drm:
Sowieso zijn regexp's veeeel eenvoudiger dan allerlei "gewone" replaces achter elkaar. Je hikt gauw tegen regexp's op omdat het er zo enorm cryptisch uitziet, maar als je klein begint dan is het allemaal niet zo moeilijk. kwestie van oefenen.
Je hebt helemaal gelijk.... Ik dacht laat ik het gewoon even snel en eenvoudig oplossen omdat ik Regex nog niet zo beheers....

Weet jij (of iemand anders) niet een hele lijst met voorbeeld regexp's voor forum gebruik.... Was al aan het zoeken om even te kijken hoe dat was opgelost, maar kom niet zo snel tot een eenvoudige lijst....

Ik denk dan aan:
  • Regexp voor Bold Tag(s)
    Hier dan de regexp
  • Regexp voor Italic Tag(s)
Degene die ik vind zijn met name Formulier checks en ik kan degene voor string replacements niet echt vinden....

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

[search=ubb tags]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
Op dinsdag 16 april 2002 14:04 schreef drm het volgende:
[search=ubb tags]
Thanx, die had ik nog niet geprobeerd.... Ik zocht steeds naar [search=ASP UBB Parser] en dan vond ik niet echt hetgeen wat ik wilde...

Ik zie alleen wel dat er eigenlijk nog niemand ooit zo'n parser voor ASP geschreven heeft, want op het net vind ik alleen oplossingen welke gekozen hebben voor de Replace functie en niet voor een regexp oplossing, jammer hoor...

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Regular expressions zullen in grote lijnen in ASP hetzelfde werken als in elke andere omgeving.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Inderdaad kan je het ook in asp heel makkelijk doen. ik heb wel een voorbeeldje in c# dus je moet wel asp.net gebruiken maar het zal wel ongeveer hetzelfde werken in asp.

voor dik

Regex dik = new Regex(@"\\[b\](?<dik>.*?)\\[/b\]");
output = dik.Replace(input,"<b>${dik}</b>");

voor italic

Regex italic = new Regex(@"\\[i\](?<italic>.*?)\\[/i\]");
output = italic.Replace(input,"<i>${italic}</i>");

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

/offtopic
just curious :)
apart, die '@' voor een string...

wat betekent dat?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Op dinsdag 16 april 2002 16:40 schreef drm het volgende:
/offtopic
just curious :)
apart, die '@' voor een string...

wat betekent dat?
dat betekent dat het een literal string is en dat hij dus de \'s laat staan :) anders moet je de hele tijd \\ typen

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Op dinsdag 16 april 2002 16:44 schreef rwb het volgende:

[..]

dat betekent dat het een literal string is en dat hij dus de \'s laat staan :) anders moet je de hele tijd \\ typen
C# heeft dat ook 8-)

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Op dinsdag 16 april 2002 16:47 schreef Zef het volgende:

[..]

C# heeft dat ook 8-)
:) ja inderdaad en als je mijn post leest dan staat daar dat het ook in c# is :)

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Zef: C# heeft dat ook 8-)
whaa :D spuit elf ;)
rwb:
dat betekent dat het een literal string is en dat hij dus de \'s laat staan :) anders moet je de hele tijd \\ typen
nice :) thnx ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
drm:
Regular expressions zullen in grote lijnen in ASP hetzelfde werken als in elke andere omgeving.
Ik ga wel even proberen om de Parser die ACM gemaakt heeft beschikbaar te maken voor ASP.....

Dat is denk ik wel een goede oefening....

Verwijderd

Ik heb een ubb-parser in javascript geschreven (server-side en client-side hetzelfde gedrag). Zonder RegEx, maar met Stack.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Doekman:
Ik heb een ubb-parser in javascript geschreven (server-side en client-side hetzelfde gedrag). Zonder RegEx, maar met Stack.
very nice :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • tomato
  • Registratie: November 1999
  • Niet online
Doekman: Ik heb een ubb-parser in javascript geschreven (server-side en client-side hetzelfde gedrag). Zonder RegEx, maar met Stack.
He, dat idee loop ik al 2 jaar te verkondigen, alleen bleek niemand behoeft te hebben het te implementeren :)

Erg cool gedaan, mijn complimenten (hoewel ik je source nog moet bekijken ;)).

Verwijderd

Nog niet alles werkt. De [list] tag is bv. een gekke. Ik ga uit van "well-formed-UBB" (alle geopende tags moeten gesloten worden).

Verder waren er nog wat issues geloof ik. Als je opmerkingen heb, mail ze maar. Da's weer een impuls om het af te maken :)
Pagina: 1