/* GTK - The GIMP Toolkit * Copyright (C) 2011 Benjamin Otte * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . */ #include "config.h" #include "gtkcssserializerprivate.h" /* Escape a string so that it can be parsed * as a css string again. */ void gtk_css_print_string (GString *str, const char *string, gboolean multiline) { gsize len; g_return_if_fail (str != NULL); g_return_if_fail (string != NULL); g_string_append_c (str, '"'); do { len = strcspn (string, "\\\"\n\r\f"); g_string_append_len (str, string, len); string += len; switch (*string) { case '\0': goto out; case '\n': if (multiline) g_string_append (str, "\\A\\\n"); else g_string_append (str, "\\A "); break; case '\r': g_string_append (str, "\\D "); break; case '\f': g_string_append (str, "\\C "); break; case '\"': g_string_append (str, "\\\""); break; case '\\': g_string_append (str, "\\\\"); break; default: g_assert_not_reached (); break; } string++; } while (*string); out: g_string_append_c (str, '"'); }