/*-
* $Id: rr-beeperror.c,v 1.5 2002/05/11 17:54:00 jonas Exp $
*
* See the file LICENSE for redistribution information.
* If you have not received a copy of the license, please contact CodeFactory
* by email at info@codefactory.se, or on the web at http://www.codefactory.se/
* You may also write to: CodeFactory AB, SE-903 47, Umeå, Sweden.
*
* Copyright (c) 2002 Jonas Borgström <jonas@codefactory.se>
* Copyright (c) 2002 Daniel Lundin <daniel@codefactory.se>
* Copyright (c) 2002 CodeFactory AB. All rights reserved.
*/
#include <librr/rr.h>
#include <librr/rr-beeperror-priv.h>
extern const RRBeepLangIso rr_langs[];
extern const RRBeepError rr_errors_en[];
extern const RRBeepError rr_errors_sv[];
extern const RRBeepErrorTable rr_errors[];
static const gint rr_numlangs = sizeof (rr_langs) / sizeof (RRBeepLangIso);
GQuark
rr_beep_error_quark (void)
{
static GQuark quark;
if (!quark)
quark = g_quark_from_static_string ("rr_beep_error");
return quark;
}
RRBeepLang
rr_beep_error_get_supported_lang (const gchar *langtokens)
{
gchar **langs;
gchar **iso;
RRBeepLang lang = RR_BEEP_LANG_DEFAULT;
langs = g_strsplit (langtokens, " ", 0);
iso = langs;
while (*iso) {
g_print ("testing lang: %s\n", *iso);
lang = rr_beep_error_get_lang (*iso);
if (lang) {
g_print ("prefferred language: %s\n", *iso);
break;
}
iso++;
}
g_strfreev (langs);
return lang;
}
gchar *
rr_beep_error_get_lang_iso (RRBeepLang lang)
{
gint i;
for (i = 0; i < rr_numlangs; i++) {
if (rr_langs[i].lang == lang) {
return g_strdup (rr_langs[i].isocode);
}
}
return NULL;
}
RRBeepLang
rr_beep_error_get_lang (const gchar *isolang)
{
gint i;
if (isolang) {
for (i=0; i<rr_numlangs; i++) {
if (0 == g_ascii_strcasecmp (rr_langs[i].isocode,
isolang)) {
return rr_langs[i].lang;
}
}
}
return 0;
}
gchar *
rr_beep_error_get_message (RRBeepReplyCode code, RRBeepLang lang)
{
gint i;
gint errtable;
gint numerrs, numlangs;
numerrs = (sizeof (rr_errors_en) / sizeof (RRBeepError));
numlangs = (sizeof (rr_errors) / sizeof (RRBeepErrorTable));
errtable = 0;
while (errtable < numlangs && rr_errors[errtable].lang != lang) {
errtable++;
}
for (i = 0; i < numerrs; i++) {
if (rr_errors[errtable].errors[i].code == code) {
return g_strdup (rr_errors[errtable].errors[i].msg);
}
}
if (code != RR_BEEP_CODE_UNKNOWN) {
return rr_beep_error_get_message (RR_BEEP_CODE_UNKNOWN, lang);
}
return NULL;
}
gchar *
rr_beep_error_get_message_iso (RRBeepReplyCode code, const gchar *isolang)
{
return rr_beep_error_get_message (code,
rr_beep_error_get_lang (isolang));
}
syntax highlighted by Code2HTML, v. 0.9.1