- fputc(border, out);
-}
-
-/**
- * Prints a wide string literal expression.
- *
- * @param wstr the wide string literal expression
- * @param border the border char
- * @param skip number of chars to skip at the end
- */
-static void print_quoted_wide_string(const wide_string_t *const wstr,
- char border, int skip)
-{
- fputc('L', out);
- fputc(border, out);
- const wchar_rep_t *end = wstr->begin + wstr->size - skip;
- for (const wchar_rep_t *c = wstr->begin; c != end; ++c) {
- switch (*c) {
- case L'\"': fputs("\\\"", out); break;
- case L'\\': fputs("\\\\", out); break;
- case L'\a': fputs("\\a", out); break;
- case L'\b': fputs("\\b", out); break;
- case L'\f': fputs("\\f", out); break;
- case L'\n': fputs("\\n", out); break;
- case L'\r': fputs("\\r", out); break;
- case L'\t': fputs("\\t", out); break;
- case L'\v': fputs("\\v", out); break;
- case L'\?': fputs("\\?", out); break;
- case 27:
- if (c_mode & _GNUC) {
- fputs("\\e", out); break;
- }
- /* FALLTHROUGH */
- default: {
- const unsigned tc = *c;
- if (tc < 0x80U) {
- if (isprint(*c)) {
- fputc(*c, out);
- } else {
- fprintf(out, "\\%03o", tc);
- }
- } else if (tc < 0x800) {
- fputc(0xC0 | (tc >> 6), out);
- fputc(0x80 | (tc & 0x3F), out);
- } else if (tc < 0x10000) {
- fputc(0xE0 | ( tc >> 12), out);
- fputc(0x80 | ((tc >> 6) & 0x3F), out);
- fputc(0x80 | ( tc & 0x3F), out);
- } else {
- fputc(0xF0 | ( tc >> 18), out);
- fputc(0x80 | ((tc >> 12) & 0x3F), out);
- fputc(0x80 | ((tc >> 6) & 0x3F), out);
- fputc(0x80 | ( tc & 0x3F), out);
- }
- }
- }
- }
- fputc(border, out);