[EMAIL PROTECTED] wrote:
> [EMAIL PROTECTED] wrote:
>
> > Okay, granted. Here's the same rule with a different word...
> >
> > headrule: [some
> > [thru "=== " copy header to newline
> > ( append header " (FIRST LEVEL)"
> > append full-contents header) |
> > thru "--- " copy header to newline
> > ( append header " (SECOND LEVEL)"
> > append full-contents header) ]
> > ]
> >
> > Now, I still only see FIRST LEVEL stored in full-contents while
> > it's a fact lines with "--- " exist in the file being used...
> >
>
> Aha, so I am sorry as I am not too skilled in grammar creation. The problem
> seems to be with "find this value OR that value", as string will be parsed
> thru first occurance of "===", and if "---" occured first, it will not be
> reflected. That would require some "parralel" searching for parser or what,
> so I am sorry I can't help. Anybody?
OK, commenting myself :-)
->> str: {some text here === some other text here --- and the rest of the
string}
->> ble: copy ""
->> parse str [thru "---" copy rest to end (insert ble rest) | thru "===" copy
rest to end (insert ble rest)]
== true
->> ble
== " and the rest of the string"
; So, as you can see, "===" was not found, now let's try to redefine above
parse expression using subrules
->> parse str [[thru "---" copy rest to end (insert ble rest)] | [thru "==="
copy rest to end (insert ble rest)]]
== true
->> ble
== " and the rest of the string"
; hmm, doesn't work for me too ...
->> parse str [thru ["---" "==="] copy rest to end (insert ble rest)]
** Script Error: Invalid argument: --- ===.
** Where: parse str [thru ["---" "==="] copy rest to end (insert ble rest)]
; Ouch, don't know what to do about it ...., sorry ...
; doc's are stating: [some ["a" "b"]] - It will match any combination of a's
and b's ... can't be used with 'thru probably ...
PS: pressed for the time now, but attaching one of Carl's emails a few months
back sent to beta mailing list .... It seems it's what you are looking for ...
-pekr-
---------------------------------
Here's another example of something useful to do with parse.
I use this script to avoid writing my docs directly in HTML
(or in an HTML editor... of which I've tried dozens but never
found a good one).
Here's what it does:
- the first line is the page title
- indented lines are examples (monospaced preformatted)
- lines starting with === are main sections
- lines starting with --- are sub-sections
- normal lines are just paragraphs (empty line for new)
There are a number of other features that I'll be adding,
but I thought I'd email it to you while it's still small and
cute. :)
I'll send you an example of the text in just a few minutes.
-Carl
(PS: Might be somewhat advanced for novices.)
REBOL [Title: "Text to HTML Converter" Author: "Carl" File: %text-html.r]
file: to-file ask "Filename? (w/o suffix) "
html: make string! 10000
emit: func [data] [append html reduce data]
space: charset " ^-"
chars: complement charset " ^-^/"
a+: <font face="arial,helvetica">
a-: </font>
parts: [newline | "===" section | "---" subsect | example | paragraph]
text-line: [copy text thru newline]
title: [text-line (emit [<html><title>text</title><body>a+<h2>text</h2>a-<p>])]
section: [text-line (emit [<p>a+<h3>trim text</h3>a-<p>]) newline]
subsect: [text-line (emit [<p>a+<i><h4>trim text</h4></i>a-<p>]) newline]
paragraph: [copy para some [chars thru newline] (emit [para<p>])]
indented: [some space thru newline]
example: [copy code some [indented | some newline indented]
(emit [<b><pre>code</pre></b><p>newline])]
done: [(emit [</body></html>])]
parse/all detab read join file ".txt" [title some parts done]
write join file ".html" html
quit