This is on the right track.  But more complexity would arise... here is an
advanced XML structure...

y: [<tag0></tag0> <text> this and that <tag1>those </tag1>and
these</text><tag2></tag2><text>There and then</text>]
output would be...
out: [
<tag0>
</tag0>
<text> this and that
<tag1>
<text> those
</tag1>
<text> and these
</text>
<tag2>
</tag2>
<text> There and then
</text>
]


There is method to the madness, I've got the "madness" part down pat, now if
I could only come up with "the method".

Thanks
Terry Brownell

----- Original Message -----
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, March 08, 2001 4:17 PM
Subject: [REBOL] Re: Complex Series Parsing (Part 2)


>
> I'm not sure I understand what you are really trying to do.  Usually
> with parse, once you describe the format of what you want to parse and
> the output wou desire, the parse rules just fall out onto the screen.
> Correct me if I'm wrong:
>
> Input is a block with the following format:
> A <text> tag followed by a series of words with any number of non
> <text> or </text> tags interspersed and ends with a </text> tag.
>
> The desired output is the same block except that every place there is
> a non <text> tag in the block a <text> tag should be placed after it
> and before the next series of words.  The ending </text> tag should be
> removed.
>
> For this you don't need parse at all.  Just march through the block
> and insert the new <text> tag as needed:
> y: [
> <text> This is some text <tag> with a tag added </tag> and then some text
</text>
> ]
>
> forall y [
> all [tag? y/1 y/1 <> <text> y/1 <> </text> insert next y <text>]
> all [y/1 = </text> remove y y: back y]
> ]
>
> probe y: head y
>
> Perhaps your rules are a bit more complicated in which caase you need
> to define them and then see what's the best way to do it.  Parse may
> be necessary but this simple case can be done quickly another way.
>
> Sterling
>
> > Hello all.
> >
> > How do you parse this...
> > y: [
> > <text> This is some text <tag> with a tag added </tag> and then some
text </text>
> > ]
> >
> >
> > So that you get this
> >
> > n: [
> > <text> This is some text
> > <tag>
> > <text> with a tag added
> > </tag>
> > <text> and then some text
> > ]
> >
> > I tried this...
> >
> > n: []
> > z: parse y none
> >
> > foreach val z [
> > either find val "<" [append n val] [append n rejoin [{<text> } val]]
> > ]
> >
> > But then I get
> >
> > n: [
> > <text>
> > <text> This
> > <text> is
> > <text> some
> > <text> text
> > <tag>
> > <text> with
> > <text> a
> > <text> tag
> > <text> added
> > </tag>
> > <text> and
> > <text> then
> > <text> some
> > <text> text
> > </text>
> > ]
> >
> > So how do I "collect" all the text until the next "tag"?
> >
> > Terry Brownell
> >
> > --
> > To unsubscribe from this list, please send an email to
> > [EMAIL PROTECTED] with "unsubscribe" in the
> > subject, without the quotes.
> >
> >
>
> --
> To unsubscribe from this list, please send an email to
> [EMAIL PROTECTED] with "unsubscribe" in the
> subject, without the quotes.
>

-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to