Mercurial > audlegacy-plugins
view src/song_change/formatter.c @ 3045:85f036d3e641
Added tag audacious-plugins-2.0-alpha1 for changeset c5fbafe09e1e
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Thu, 16 Apr 2009 16:53:42 -0500 |
parents | da77e1d2ca40 |
children |
line wrap: on
line source
/* Audacious * Copyright (C) 2005-2007 Audacious team * * XMMS - Cross-platform multimedia player * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas, * Thomas Nilsson and 4Front Technologies * Copyright (C) 1999-2003 Haavard Kvaalen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; under version 3 of the License. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses>. * * The Audacious team does not consider modular code linking to * Audacious or using our public API to be a derived work. */ #include "config.h" #include <glib.h> #include <string.h> #include "formatter.h" Formatter * formatter_new(void) { Formatter *formatter = g_slice_new0(Formatter); formatter_associate(formatter, '%', "%"); return formatter; } void formatter_destroy(Formatter * formatter) { int i; for (i = 0; i < 256; i++) if (formatter->values[i]) g_free(formatter->values[i]); g_slice_free(Formatter, formatter); } void formatter_associate(Formatter * formatter, const guchar id, const gchar *value) { formatter_dissociate(formatter, id); formatter->values[id] = g_strdup(value); } void formatter_dissociate(Formatter * formatter, const guchar id) { if (formatter->values[id]) g_free(formatter->values[id]); formatter->values[id] = 0; } gchar * formatter_format(Formatter * formatter, gchar *format) { gchar *p, *q, *buffer; gint len; for (p = format, len = 0; *p; p++) if (*p == '%') { if (formatter->values[(int) *++p]) len += strlen(formatter->values[(int) *p]); else if (!*p) { len += 1; p--; } else len += 2; } else len++; buffer = g_malloc(len + 1); for (p = format, q = buffer; *p; p++) if (*p == '%') { if (formatter->values[(int) *++p]) { g_strlcpy(q, formatter->values[(int) *p], len - 1); q += strlen(q); } else { *q++ = '%'; if (*p != '\0') *q++ = *p; else p--; } } else *q++ = *p; *q = 0; return buffer; }