63 if (str_equal(addr,
"")) flagempty = 1;
64 if (str_equal(addr,
"@")) flagempty = 1;
66 flagbracket = flagempty;
69 if (!doit(
out,comment,str_len(comment),
"\"",
"\" "))
return 0;
73 if (flagbracket)
if (!stralloc_cats(
out,
"<"))
return 0;
76 i = str_rchr(addr,
'@');
77 quote = needquote(addr,i) ?
"\"" :
"";
78 if (!doit(
out,addr,i,quote,quote))
return 0;
81 if (*addr ==
'@') ++addr;
85 if (!stralloc_append(
out,
"@"))
return 0;
87 quote = needquote(addr,i) ?
"\"" :
"";
89 if (*quote && (i >= 2) && (addr[0] ==
'[') && (addr[i - 1] ==
']')) {
90 if (!doit(
out,addr + 1,i - 2,
"[",
"]"))
return 0;
93 if (!doit(
out,addr,i,quote,quote))
return 0;
97 if (flagbracket)
if (!stralloc_cats(
out,
">"))
return 0;
114 if (!stralloc_copys(
out,
""))
return 0;
118 for (j = i = 0;j < in->len;++j)
120 if (in->s[i] ==
'(') {
122 if (!doit(
out,in->s + comment,str_len(in->s + comment),
"\"",
"\": ;,\n "))
return 0;
125 else if (in->s[i] ==
'+') {
127 if (!stralloc_cats(
out,
",\n "))
return 0;
134 if (!doit(
out,in->s + comment,str_len(in->s + comment),
"\"",
"\": ;,\n "))
return 0;
136 if (
out->len && (
out->s[
out->len - 1] ==
' ')) --
out->len;
137 if (
out->len && (
out->s[
out->len - 1] ==
' ')) --
out->len;
138 if (
out->len && (
out->s[
out->len - 1] ==
'\n')) --
out->len;
139 if (
out->len && (
out->s[
out->len - 1] ==
',')) --
out->len;