blob: 6aec41f6fca42ea1c63cfd0e971eaea6210b2ce0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# CHICKEN-SCRATCH --- heredocs for CHICKEN
written by Case Duckworth <acdw@acdw.net> off an idea by evhan
Licensed under BSD-3. See COPYING for details.
CHICKEN has "[Multiline string constants with embedded expressions][multiline]"
syntax, which is basically shell here-doc syntax but schemier and with a real
programming langugage to embed. evhan's [beaker tool][beaker] (which is great,
btw) uses this facility to do a quick-and-dirty templating for wiki generation.
I realized that I could use the same facility for the same kind of heredoc-style
templating I have done in various other SSGs like [unk][] and [vienna][], but
with scheme. Thus, CHICKEN-SCRATCH was born.
[multiline]: http://wiki.call-cc.org/man/5/Extensions%20to%20the%20standard#multiline-string-constant-with-embedded-expressions
[beaker]: https://git.sr.ht/~evhan/beaker
[unk]: https://git.acdw.net/unk/
[vienna]: https://git.acdw.net/vienna/
## Usage
`expand-string` is the main entry point to this module. It takes a string and
returns a string with all `#( ... )` forms expanded according to the CHICKEN
rules. `expand-port` is a port version of `expand-string`.
To enable truly invisible definitions within the expanded string, the `def`
macro is provided which performs a `set!` on its variables, then returns a
string guaranteed not to be in the input string, which is then filtered out
in the expanded string.
Finally, to enable CHICKEN-SCRATCH to be used in a shebang, if the first line
of the input string begins with `#!`, it's deleted from the input.
## Installation
|