tquote.3 - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tquote.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) .