plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

quote.3 (3210B)


      1 .TH QUOTE 3
      2 .SH NAME
      3 quotestrdup, quoterunestrdup, unquotestrdup, unquoterunestrdup, quotestrfmt, quoterunestrfmt, quotefmtinstall, doquote, needsrcquote \- quoted character strings
      4 .SH SYNOPSIS
      5 .B #include <u.h>
      6 .br
      7 .B #include <libc.h>
      8 .PP
      9 .B
     10 char *quotestrdup(char *s)
     11 .PP
     12 .B
     13 Rune *quoterunestrdup(Rune *s)
     14 .PP
     15 .B
     16 char *unquotestrdup(char *s)
     17 .PP
     18 .B
     19 Rune *unquoterunestrdup(Rune *s)
     20 .PP
     21 .B
     22 int quotestrfmt(Fmt*)
     23 .PP
     24 .B
     25 int quoterunestrfmt(Fmt*)
     26 .PP
     27 .B
     28 void quotefmtinstall(void)
     29 .PP
     30 .B
     31 int (*doquote)(int c)
     32 .PP
     33 .B
     34 int needsrcquote(int c)
     35 .PP
     36 .SH DESCRIPTION
     37 These routines manipulate character strings, either adding or removing
     38 quotes as necessary.
     39 In the quoted form, the strings are in the style of
     40 .IR rc (1) ,
     41 with single quotes surrounding the string.
     42 Embedded single quotes are indicated by a doubled single quote.
     43 For instance,
     44 .IP
     45 .EX
     46 Don't worry!
     47 .EE
     48 .PP
     49 when quoted becomes
     50 .IP
     51 .EX
     52 \&'Don''t worry!'
     53 .EE
     54 .PP
     55 The empty string is represented by two quotes,
     56 .BR '' .
     57 .PP
     58 The first four functions act as variants of
     59 .B strdup
     60 (see
     61 .MR strcat (3) ).
     62 Each returns a
     63 freshly allocated copy of the string, created using
     64 .MR malloc (3) .
     65 .I Quotestrdup
     66 returns a quoted copy of
     67 .IR s ,
     68 while
     69 .I unquotestrdup
     70 returns a copy of
     71 .IR s
     72 with the quotes evaluated.
     73 The
     74 .I rune
     75 versions of these functions do the same for
     76 .CW Rune
     77 strings (see
     78 .MR runestrcat (3) ).
     79 .PP
     80 The string returned by
     81 .I quotestrdup
     82 or
     83 .I quoterunestrdup
     84 has the following properties:
     85 .TP
     86 1.
     87 If the original string
     88 .IR s
     89 is empty, the returned string is
     90 .BR '' .
     91 .TP
     92 2.
     93 If
     94 .I s
     95 contains no quotes, blanks, or control characters,
     96 the returned string is identical to
     97 .IR s .
     98 .TP
     99 3.
    100 If
    101 .I s
    102 needs quotes to be added, the first character of the returned
    103 string will be a quote.
    104 For example,
    105 .B hello\ world
    106 becomes
    107 .B \&'hello\ world'
    108 not
    109 .BR hello'\ 'world .
    110 .PP
    111 The function pointer
    112 .I doquote
    113 is
    114 .B nil
    115 by default.
    116 If it is non-nil, characters are passed to that function to see if they should
    117 be quoted.
    118 This mechanism allows programs to specify that
    119 characters other than blanks, control characters, or quotes be quoted.
    120 Regardless of the return value of
    121 .IR *doquote ,
    122 blanks, control characters, and quotes are always quoted.
    123 .I Needsrcquote
    124 is provided as a
    125 .I doquote
    126 function that flags any character special to
    127 .MR rc (1) .
    128 .PP
    129 .I Quotestrfmt
    130 and
    131 .I quoterunestrfmt
    132 are
    133 .MR print (3)
    134 formatting routines that produce quoted strings as output.
    135 They may be installed by hand, but
    136 .I quotefmtinstall
    137 installs them under the standard format characters
    138 .B q
    139 and
    140 .BR Q .
    141 (They are not installed automatically.)
    142 If the format string includes the alternate format character
    143 .BR # ,
    144 for example
    145 .BR %#q ,
    146 the printed string will always be quoted; otherwise quotes will only be provided if necessary
    147 to avoid ambiguity.
    148 In
    149 .B <libc.h>
    150 there are
    151 .B #pragma
    152 statements so the compiler can type-check uses of
    153 .B %q
    154 and
    155 .B %Q
    156 in
    157 .MR print (3)
    158 format strings.
    159 .SH SOURCE
    160 .B \*9/src/lib9/quote.c
    161 .br
    162 .B \*9/src/lib9/fmt/fmtquote.c
    163 .SH "SEE ALSO
    164 .MR rc (1) ,
    165 .MR malloc (3) ,
    166 .MR print (3) ,
    167 .MR strcat (3)
    168 .SH BUGS
    169 Because it is provided by the format library,
    170 .I doquote
    171 is a preprocessor macro defined as
    172 .IR fmtdoquote ;
    173 see
    174 .MR intro (3) .