Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

Rebol Programming/resolve

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

USAGE: RESOLVE target source /only from /all Example: >> reword "$1 is $2." [1 "This" 2 "that"] == "This is that." DESCRIPTION: Copy context by setting values in the target from those in the source. RESOLVE is a function value. ARGUMENTS target -- (Type: object port) source -- (Type: object port) REFINEMENTS /escape -- Choose your own escape char (no escape for block templates) char -- Use this escape char (default $) (Type: char any-string) /into -- Insert into a buffer instead (returns position after insert) output -- The buffer series (modified) (Type: any-string) SOURCE CODE 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 call ed 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] ]]