Try something like:
[
Rebol []

Embed: function [String [string!]] [Rule Start Word End] [
    parse String: copy String Rule: [
        any [
            [
                Start: [#"$" | #"%"] #"(" [copy Word [Alpha some Alphadigit]
| Rule] #")" End: (
                    End: change/part Start get to-word Word End
                    ) :End
                ]
            | skip
            ]
        end
        ]
    String
    ]

a: "A"
n: "N"
s: "S"
ans: "Answer"
home: "HOME"
dir: "DIR"

homedir: "HOMEDIR"

foreach String [
    "The answer is: $(ans)"
    "The homedir is: %(homedir)"
    "The answer is: $($(a)$(n)$(s))"
    "The homedir is: %($(home)$(dir))"
    ] [
    print Embed String
    ]

halt

]

Which gives results like:

The answer is: Answer
The homedir is: HOMEDIR
The answer is: $($(a)$(n)$(s))
The homedir is: %(HOMEDIR)

I haven't got the recursion part right.

Andrew Martin
ICQ: 26227169 http://valley.150m.com/
-><-

----- Original Message -----
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, September 09, 2002 1:58 PM
Subject: [REBOL] Embedded macros ..


> Could someone give me an idea on how to parse something like embedded
macros in Rebol?
>
> Assume there are at least two types of macros one might find in a string:
>    $(RebolVariableorExpression)
>    %(EnvironmentVariable)
>
> Examples:
>
> "The answer is: $(ans)"
> "The homedir is: %(homedir)"
>
> Embedded examples:
>
> "The answer is: $($(a)$(n)$(s))"
> "The homedir is: %($(home)$(dir))
>
> where the variables:
>
> a:"a"
> n:"n"
> s:"s"
> ans:"Answer"
> home:"home"
> dir:"dir"
>
> Must be the age ??
> Dick
>
>
> Download NeoPlanet at http://www.neoplanet.com
>
> --
> 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