Separate out C and html quoting into separate functions.

Dot sometimes wants normal C quotes, othertimes html. Quite annoying,
really, but this is cleaner anyway.
This commit is contained in:
Bill Currie 2012-10-30 12:24:03 +09:00
parent f680521e0f
commit f8bdd909cc
3 changed files with 54 additions and 8 deletions

View file

@ -55,6 +55,7 @@ const char *save_string (const char *str);
const char *make_string (char *token, char **end);
const char *html_string (const char *str);
const char *quote_string (const char *str);
#endif//__strpool_h

View file

@ -53,10 +53,10 @@ static void
flow_statement (dstring_t *dstr, statement_t *s)
{
dasprintf (dstr, " <tr>");
dasprintf (dstr, "<td>%s</td>", quote_string (s->opcode));
dasprintf (dstr, "<td>%s</td>", operand_string (s->opa));
dasprintf (dstr, "<td>%s</td>", operand_string (s->opb));
dasprintf (dstr, "<td>%s</td>", operand_string (s->opc));
dasprintf (dstr, "<td>%s</td>", html_string(quote_string (s->opcode)));
dasprintf (dstr, "<td>%s</td>", html_string(operand_string (s->opa)));
dasprintf (dstr, "<td>%s</td>", html_string(operand_string (s->opb)));
dasprintf (dstr, "<td>%s</td>", html_string(operand_string (s->opc)));
dasprintf (dstr, "</tr>\n");
}

View file

@ -360,7 +360,7 @@ make_string (char *token, char **end)
}
const char *
quote_string (const char *str)
html_string (const char *str)
{
static dstring_t *q;
char c[2] = {0, 0};
@ -372,9 +372,6 @@ quote_string (const char *str)
dstring_clearstr (q);
while ((c[0] = *str++)) {
switch (c[0]) {
case '\n':
dstring_appendstr (q, "\\\\n");
break;
case '<':
dstring_appendstr (q, "&lt;");
break;
@ -387,6 +384,54 @@ quote_string (const char *str)
case '"':
dstring_appendstr (q, "&quot;");
break;
default:
dstring_appendstr (q, c);
break;
}
}
return q->str;
}
const char *
quote_string (const char *str)
{
static dstring_t *q;
char c[2] = {0, 0};
if (!str)
return "(null)";
if (!q)
q = dstring_new ();
dstring_clearstr (q);
while ((c[0] = *str++)) {
switch (c[0]) {
case '\a':
dstring_appendstr (q, "\\a");
break;
case '\b':
dstring_appendstr (q, "\\b");
break;
case '\f':
dstring_appendstr (q, "\\f");
break;
case '\n':
dstring_appendstr (q, "\\n");
break;
case '\r':
dstring_appendstr (q, "\\r");
break;
case '\t':
dstring_appendstr (q, "\\t");
break;
case '\\':
dstring_appendstr (q, "\\\\");
break;
case '\'':
dstring_appendstr (q, "\\'");
break;
case '\"':
dstring_appendstr (q, "\\\"");
break;
default:
if (c[0] >= 127 || c[0] < 32)
dasprintf (q, "\\\\x%02d", (byte) c[0]);