Thread Grammatiken, Pattern Matching (1 answers)
Opened by sman at 2011-02-19 19:54

pq
 2011-02-19 21:09
#145781 #145781
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
als erste empfehlung: rückübersetzung halte ich nicht für sinnvoll. ich würde den originaltext immer abspeichern und den gerenderten text jedesmal erzeugen oder alternativ zusätzlich speichern. eventuell wird das sonst ziemlich haarig.

du kannst dir mein CPAN:Parse::BBCode anschauen. das kommt mit verschachtelungen klar und ist vom prinzip her aufgebaut wie deine grammatik.

Code: (dl )
1
2
3
fett mit FETT(fetter text) oder Links mit LINK(adresse,text) oder Überschrift HEAD(überschrift FETT(Nr 5)), usw.

fett mit [b]fetter text[/b] oder Links mit [link]adresse,text[/link] oder Überschrift [head]überschrift [b]Nr 5[/b])[/head], usw.


du würdest also statt [foo] nach FOO( suchen und statt [/foo] einfach nach ).

bei verschachtelungen kommt du jedenfalls mit regex nicht weit.

mein bbcode-parser funktioniert so, dass der text nach start-tags abgesucht wird und dann der inhalt bis zum nächsten schliessenden tag auf einen stack gepusht wird. es sei denn, es kommt ein weiteres start-tag. dann kommt dieses auch auf den stack. wenn es geschlossen ist, wird es aus dem stack genommen und als unterobjekt des zweitletzten stack-elements eingefügt.
ein objekt sieht also grob so aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
my $tag = {
    name => 'HEAD',
    content => [
        'überschrift ',
        {
            name => 'FETT',
            content => ['Nr 5'],
        },
    ],
};

der content ist also eine liste aus reinem text und verschachtelten objekten.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread Grammatiken, Pattern Matching