angerangel edited this page Jan 7, 2013 · 1 revision

USAGE

   REWORD source values /escape char /into output

DESCRIPTION

Substitutes values into a template string, returning a new string.

REWORD is a function value.

ARGUMENTS

  • source -- Template series (or string with escape sequences) (any-string!)
  • values -- Pairs of values and replacements (will be called if functions) (map! object! block!)

REFINEMENTS

  • /escape -- Choose your own escape char (no escape for block templates)
    • char -- Use this escape char (default $) (char! any-string!)
  • /into -- Insert into a buffer instead (returns position after insert)
    • output -- The buffer series (modified) (any-string!)

#SOURCE

reword: make function! [  [
    {Substitutes values into a template string, returning a new string.}
    source [any-string!] "Template series (or string with escape sequences)"
    values [map! object! block!] {Pairs of values and replacements (will be called if functions)}
    /escape {Choose your own escape char (no escape for block templates)}
    char [char! any-string!] "Use this escape char (default $)"
    /into {Insert into a buffer instead (returns position after insert)}
    output [any-string!] "The buffer series (modified)"
    /local vals word a b c d
][
    output: any [output make source length? source]
    vals: make map! length? values
    foreach [w v] values [
        unless string? :w [w: to string! :w]
        unless empty? w [poke vals w unless unset? :v [:v] ]
    ]
    word: make block! 2 * length? vals
    foreach w vals [word: reduce/into [w '|] word]
    word: head remove back word
    escape: [c: word d: (
            output: insert insert/part output a b vals/(copy/part c d) :b
        ) a:]
    char: to string! any [char "$"]
    either empty? char [
        parse/all source [
            a: any [b: [escape | skip] ]
            to end (output: insert output a)
        ]
    ] [
        parse/all source [
            a: any [to char b: char [escape | none] ]
            to end (output: insert output a)
        ]
    ]
    either into [output] [head output]
] ]
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.