.TH QUOTE 3
.SH NAME
quotestrdup, quoterunestrdup, unquotestrdup, unquoterunestrdup, quotestrfmt, quoterunestrfmt, quotefmtinstall, fmtdoquote \- quoted character strings
.SH SYNOPSIS
.B #include <utf.h>
.br
.B #include <fmt.h>
.PP
.B
char *quotestrdup(char *s)
.PP
.B
Rune *quoterunestrdup(Rune *s)
.PP
.B
char *unquotestrdup(char *s)
.PP
.B
Rune *unquoterunestrdup(Rune *s)
.PP
.B
int quotestrfmt(Fmt*)
.PP
.B
int quoterunestrfmt(Fmt*)
.PP
.B
void quotefmtinstall(void)
.PP
.B
int (*fmtdoquote)(int c)
.PP
.SH DESCRIPTION
These routines manipulate character strings, either adding or removing
quotes as necessary.
In the quoted form, the strings are in the style of
.IR rc (1) ,
with single quotes surrounding the string.
Embedded single quotes are indicated by a doubled single quote.
For instance,
.IP
.EX
Don't worry!
.EE
.PP
when quoted becomes
.IP
.EX
\&'Don''t worry!'
.EE
.PP
The empty string is represented by two quotes,
.BR '' .
.PP
The first four functions act as variants of
.B strdup
(see
.IR strcat (3)).
Each returns a
freshly allocated copy of the string, created using
.IR malloc (3).
.I Quotestrdup
returns a quoted copy of
.IR s ,
while
.I unquotestrdup
returns a copy of
.IR s
with the quotes evaluated.
The
.I rune
versions of these functions do the same for
.CW Rune
strings (see
.IR runestrcat (3)).
.PP
The string returned by
.I quotestrdup
or
.I quoterunestrdup
has the following properties:
.TP
1.
If the original string
.IR s
is empty, the returned string is
.BR '' .
.TP
2.
If
.I s
contains no quotes, blanks, or control characters,
the returned string is identical to
.IR s .
.TP
3.
If
.I s
needs quotes to be added, the first character of the returned
string will be a quote.
For example,
.B hello\ world
becomes
.B \&'hello\ world'
not
.BR hello'\ 'world .
.PP
The function pointer
.I fmtdoquote
is
.B nil
by default.
If it is non-nil, characters are passed to that function to see if they should
be quoted.
This mechanism allows programs to specify that
characters other than blanks, control characters, or quotes be quoted.
Regardless of the return value of
.IR *fmtdoquote ,
blanks, control characters, and quotes are always quoted.
.I Needsrcquote
is provided as a
.I fmtdoquote
function that flags any character special to
.IR rc (1).
.PP
.I Quotestrfmt
and
.I quoterunestrfmt
are
.IR print (3)
formatting routines that produce quoted strings as output.
They may be installed by hand, but
.I quotefmtinstall
installs them under the standard format characters
.B q
and
.BR Q .
(They are not installed automatically.)
If the format string includes the alternate format character
.BR # ,
for example
.BR %#q ,
the printed string will always be quoted; otherwise quotes will only be provided if necessary
to avoid ambiguity.
.SH SOURCE
.B http://swtch.com/plan9port/unix
.SH "SEE ALSO
.IR rc (1),
.IR malloc (3),
.IR print (3),
.IR strcat (3)
