[plt-scheme] format string with named parts

From: Todd O'Bryan (toddobryan at gmail.com)
Date: Wed Feb 10 14:10:43 EST 2010

I didn't even think of using regexps, but you're right that it could
do what I want, in almost exactly the way you've outlined.

Todd

On Wed, Feb 10, 2010 at 12:36 PM, Laurent <laurent.orseau at gmail.com> wrote:
> Just a quick try not using @-exps. Does something like this look good?
>
> #lang scheme
>
> (define (py-format str couples)
>   (regexp-replace*
>    "~<([^>]*)>([aAsSvVeEcCbBoOxX])"
>    str
>    (lambda(all key str-format)
>      (let ([key-val (assoc key couples)])
>        (if key-val
>            (format (string-append "~" str-format) (second key-val))
>            (error "Key not found in py-format: " key))))))
>
> (py-format "~<x>a ~<y>a ~<z>s"
>            '(("x" "ola")
>              ("y" (hey "hey"))
>              ("z" "salute")))
>
> ; "ola (hey hey) \"salute\""
>
>
>
> On Wed, Feb 10, 2010 at 17:10, Todd O'Bryan <toddobryan at gmail.com> wrote:
>>
>> On Tue, Feb 9, 2010 at 10:40 PM, Eli Barzilay <eli at barzilay.org> wrote:
>> >
>> > Basic output:
>> >
>> >  #lang at-exp scheme
>> >  (require scribble/text)
>> >  (define foo "FOO")
>> >  (define bar "BAR")
>> >  (output @list{@foo and @bar})
>> >
>> > (It's easy to make it return a string instead, I just didn't provide
>> > another function (or a keyword argument or something) because there
>> > was no need and I didn't see any interface that was obviously better.)
>> >
>> > This is using the same functionality that the web server templates are
>> > using, but you don't need the extra overhead of using the web server
>> > or separate files.  Here's how you'd do it:
>> >
>> >  #lang scribble/text
>> >  @(define foo "FOO")
>> >  @(define bar "BAR")
>> >  @foo and @bar
>> >  @(define (choose x y) @list{@x before @y or @y before @|x|?})
>> >  @choose[foo bar]
>> >
>>
>> The nice thing about the Python version is that you can just have a
>> string with placeholders for values you're going to include later. Am
>> I correct that I really need to write a function (like choose above)
>> that expects the values I want to go into the string so that the
>> @-exprs don't get evaluated before they have values?
>>
>> Obviously, that's not much more difficult, but my brain just didn't go
>> there automatically. Clearly, I need to spend more time programming in
>> Scheme. :-)
>>
>> Todd
>> _________________________________________________
>>  For list-related administrative tasks:
>>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
>


Posted on the users mailing list.