Make the new check printing code compile on systems that don't have

glib 2.12.


git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@15710 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
David Hampton 2007-03-13 15:18:11 +00:00
parent 2af48fcb16
commit fae458ad81
4 changed files with 202 additions and 2 deletions

View File

@ -247,6 +247,18 @@ then
else
AC_MSG_RESULT(no)
fi
AC_MSG_CHECKING(for GLIB - version >= 2.12.0)
if $PKG_CONFIG 'glib-2.0 >= 2.12.0'
then
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_GLIB_2_12,1,[System has glib 2.12.0 or better])
HAVE_GLIB_2_12=yes
else
AC_MSG_RESULT(no)
fi
AM_CONDITIONAL(HAVE_GLIB_2_8, test "x$HAVE_GLIB_2_8" = "xyes")
AC_MSG_CHECKING([for untested GLIB versions (glib >= 2.11.0)])
if $PKG_CONFIG 'glib-2.0 >= 2.11.0'
then

View File

@ -37,6 +37,7 @@
#include "config.h"
#include <glib.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h>
#include <string.h>
#include <errno.h>
@ -45,6 +46,180 @@
#include "gnc-gkeyfile-utils.h"
#ifndef HAVE_GLIB_2_12
/**********************************************************************
*
* The following functions are copied verbatim from the GLIB 2.12
* source code. If more glib 2.12 functions are included into
* gnucash,then they should all be consolidated in a lib/glib212
* directory.
*
**********************************************************************/
static gchar *
_g_utf8_make_valid (const gchar *name)
{
GString *string;
const gchar *remainder, *invalid;
gint remaining_bytes, valid_bytes;
string = NULL;
remainder = name;
remaining_bytes = strlen (name);
while (remaining_bytes != 0)
{
if (g_utf8_validate (remainder, remaining_bytes, &invalid))
break;
valid_bytes = invalid - remainder;
if (string == NULL)
string = g_string_sized_new (remaining_bytes);
g_string_append_len (string, remainder, valid_bytes);
/* append U+FFFD REPLACEMENT CHARACTER */
g_string_append (string, "\357\277\275");
remaining_bytes -= valid_bytes + 1;
remainder = invalid + 1;
}
if (string == NULL)
return g_strdup (name);
g_string_append (string, remainder);
g_assert (g_utf8_validate (string->str, -1, NULL));
return g_string_free (string, FALSE);
}
static gdouble
g_key_file_parse_value_as_double (GKeyFile *key_file,
const gchar *value,
GError **error)
{
gchar *end_of_valid_d;
gdouble double_value = 0;
double_value = g_ascii_strtod (value, &end_of_valid_d);
if (*end_of_valid_d != '\0' || end_of_valid_d == value)
{
gchar *value_utf8 = _g_utf8_make_valid (value);
g_set_error (error, G_KEY_FILE_ERROR,
G_KEY_FILE_ERROR_INVALID_VALUE,
_("Value '%s' cannot be interpreted "
"as a float number."),
value_utf8);
g_free (value_utf8);
}
return double_value;
}
gdouble
g_key_file_get_double (GKeyFile *key_file, const gchar *group_name,
const gchar *key, GError **error)
{
GError *key_file_error;
gchar *value;
gdouble double_value;
g_return_val_if_fail (key_file != NULL, -1);
g_return_val_if_fail (group_name != NULL, -1);
g_return_val_if_fail (key != NULL, -1);
key_file_error = NULL;
value = g_key_file_get_value (key_file, group_name, key, &key_file_error);
if (key_file_error)
{
g_propagate_error (error, key_file_error);
return 0;
}
double_value = g_key_file_parse_value_as_double (key_file, value,
&key_file_error);
g_free (value);
if (key_file_error)
{
if (g_error_matches (key_file_error,
G_KEY_FILE_ERROR,
G_KEY_FILE_ERROR_INVALID_VALUE))
{
g_set_error (error, G_KEY_FILE_ERROR,
G_KEY_FILE_ERROR_INVALID_VALUE,
_("Key file contains key '%s' in group '%s' "
"which has value that cannot be interpreted."), key,
group_name);
g_error_free (key_file_error);
}
else
g_propagate_error (error, key_file_error);
}
return double_value;
}
gdouble*
g_key_file_get_double_list (GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
gsize *length,
GError **error)
{
GError *key_file_error = NULL;
gchar **values;
gdouble *double_values;
gsize i, num_doubles;
g_return_val_if_fail (key_file != NULL, NULL);
g_return_val_if_fail (group_name != NULL, NULL);
g_return_val_if_fail (key != NULL, NULL);
values = g_key_file_get_string_list (key_file, group_name, key,
&num_doubles, &key_file_error);
if (key_file_error)
g_propagate_error (error, key_file_error);
if (!values)
return NULL;
double_values = g_new0 (gdouble, num_doubles);
for (i = 0; i < num_doubles; i++)
{
double_values[i] = g_key_file_parse_value_as_double (key_file,
values[i],
&key_file_error);
if (key_file_error)
{
g_propagate_error (error, key_file_error);
g_strfreev (values);
g_free (double_values);
return NULL;
}
}
g_strfreev (values);
if (length)
*length = num_doubles;
return double_values;
}
/**********************************************************************
*
* End of copied functions.
*
**********************************************************************/
#endif
GKeyFile *
gnc_key_file_load_from_file (const gchar *filename,
gboolean ignore_error,

View File

@ -38,6 +38,17 @@
#define GNC_GKEYFILE_UTILS_H
#ifndef HAVE_GLIB_2_12
gdouble
g_key_file_get_double (GKeyFile *key_file, const gchar *group_name,
const gchar *key, GError **error);
gdouble*
g_key_file_get_double_list (GKeyFile *key_file, const gchar *group_name,
const gchar *key, gsize *length, GError **error);
#endif
/** Open and read a key/value file from disk into memory.
*
* @param file The name of the file to load. This should be a fully

View File

@ -29,6 +29,8 @@
#include <libguile.h>
#include <locale.h>
#include "glib-compat.h"
#include "qof.h"
#include "gnc-date.h"
#include "gnc-gconf-utils.h"
@ -1242,7 +1244,7 @@ draw_page_items(GncPrintContext * context,
switch (item->type) {
case DATE:
date = g_date_new();
g_date_set_time(date, pcd->date);
g_date_set_time_t(date, pcd->date);
date_format =
gnc_date_format_get_custom(GNC_DATE_FORMAT
(pcd->date_format));
@ -1469,7 +1471,7 @@ draw_page_custom(GncPrintContext * context, gint page_nr, gpointer user_data)
item.x = multip * gtk_spin_button_get_value(pcd->date_x);
item.y = multip * gtk_spin_button_get_value(pcd->date_y);
date = g_date_new();
g_date_set_time(date, pcd->date);
g_date_set_time_t(date, pcd->date);
date_format = gnc_date_format_get_custom(GNC_DATE_FORMAT(pcd->date_format));
g_date_strftime(buf, 100, date_format, date);
draw_text(context, buf, &item, desc);