Commit 81bbbc55 authored by Maxime Doyen's avatar Maxime Doyen

5.0.6 rc

parent e52f768b
2015-10-xx Maxime Doyen
Made 5.0.6 release.
* bugfix: #1504514 next Previous buttons not translated when importing ofx file
* bugfix: #1504359 assignment with same name should not be possible
* bugfix: #1503682 app crash opening a file from previous version
* bugfix: #1502997 || input in split should not be possible
* bugfix: #1502496 auto assignment don't set payee on split txn
* bugfix: #1502444 auto assignment can mark untouched txn as changed
* bugfix: #1502034 translate homebank.appdata.xml
* bugfix: #1501968 splits without category are lost during QIF import
* bugfix: #1501962 statistics report crashes HomeBank after adding a new tag
* bugfix: #1501144 auto assignment changes split category when only payee is defined in assignment definition
* bugfix: #1501138 wrong number of txns in pop-up after auto assignment
* bugfix: #1501129 auto assignment dialog not active when no category defined
* bugfix: #1501098 litre symbol is not translatable
* bugfix: #1500043 remove period from short description
* bugfix: #1498622 translation: add developer note to FI Fee
* bugfix: #1497630 translation: typing errors
* bugfix: #1497521 txn dialog +/- button reset amount to 0
2015-09-19 Maxime Doyen
......@@ -11,7 +33,7 @@
Made 5.0.4 release.
* change: win32: upgraded to gtk+ 3.16
* change: win32: upgraded to gtk+ 3.16.6
* change: amount toggle sign button changed from text button to entry icon
* change: added/changed transaction are always showed by default filter
* bugfix: #1492634 using memo filter does not list memos in split catagories
......
* HomeBank is licensed under the GNU GENERAL PUBLIC LICENSE --
see the 'COPYING' file in this directory for details.
<?xml version="1.0" encoding="UTF-8"?>
<application>
<id type="desktop">homebank.desktop</id>
<licence>GPL-2.0+</licence>
<description>
<p>HomeBank is a free software (as in "free speech" and also as in "free beer") that will assist you to manage your personal accounting.</p>
<p>It is designed to easy to use and be able to analyse your personal finance in detail using powerful filtering tools and beautiful graphs.</p>
<p>If you are looking for a completely free and easy way to manage your personal accounting then HomeBank should be the software of choice.</p>
</description>
<screenshots>
<screenshot width="624" type="default" height="351">http://homebank.free.fr/img/homebank-appdata.png</screenshot>
</screenshots>
<url type="homepage">http://homebank.free.fr</url>
<updatecontact>homebank_at_free.fr</updatecontact>
</application>
\ No newline at end of file
[Desktop Entry]
_Name=HomeBank
_GenericName=Personal finance
_Comment=Free, easy, personal accounting for everyone
_Keywords=finance;accounting;budget;personal;money;
Exec=homebank %f
Terminal=false
StartupNotify=true
Type=Application
Icon=homebank
Categories=GNOME;GTK;Office;Finance;
MimeType=application/x-homebank;
......@@ -35,5 +35,6 @@ src/ui-filter.c
src/ui-hbfile.c
src/ui-payee.c
src/ui-pref.c
src/ui-split.c
src/ui-transaction.c
src/ui-widgets.c
......@@ -21,6 +21,8 @@ homebank_SOURCES = \
enums.h \
gtk-chart.c \
gtk-chart.h \
gtk-chart-colors.c \
gtk-chart-colors.h \
gtk-chart-stack.c \
gtk-chart-stack.h \
gtk-dateentry.c \
......@@ -45,7 +47,6 @@ homebank_SOURCES = \
hb-import.h \
hb-import-ofx.c \
hb-import-qif.c \
hb-import-qif.h \
hb-import-csv.c \
hb-misc.c \
hb-misc.h \
......@@ -57,6 +58,8 @@ homebank_SOURCES = \
hb-report.h \
hb-tag.c \
hb-tag.h \
hb-split.c \
hb-split.h \
hb-transaction.c \
hb-transaction.h \
hb-xml.c \
......@@ -107,12 +110,12 @@ homebank_SOURCES = \
ui-payee.h \
ui-pref.c \
ui-pref.h \
ui-split.c \
ui-split.h \
ui-transaction.c \
ui-transaction.h \
ui-widgets.c \
ui-widgets.h \
gtk-chart-colors.c \
gtk-chart-colors.h
ui-widgets.h
homebank_LDADD = $(DEPS_LIBS) \
$(LIBSOUP_LIBS)
......
......@@ -100,14 +100,15 @@ CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
am_homebank_OBJECTS = dsp_account.$(OBJEXT) dsp_mainwindow.$(OBJEXT) \
gtk-chart.$(OBJEXT) gtk-chart-stack.$(OBJEXT) \
gtk-dateentry.$(OBJEXT) hb-account.$(OBJEXT) \
hb-archive.$(OBJEXT) hb-assign.$(OBJEXT) hb-category.$(OBJEXT) \
hb-encoding.$(OBJEXT) hb-export.$(OBJEXT) hb-filter.$(OBJEXT) \
hb-hbfile.$(OBJEXT) hb-import.$(OBJEXT) \
hb-import-ofx.$(OBJEXT) hb-import-qif.$(OBJEXT) \
hb-import-csv.$(OBJEXT) hb-misc.$(OBJEXT) hb-payee.$(OBJEXT) \
hb-preferences.$(OBJEXT) hb-report.$(OBJEXT) hb-tag.$(OBJEXT) \
gtk-chart.$(OBJEXT) gtk-chart-colors.$(OBJEXT) \
gtk-chart-stack.$(OBJEXT) gtk-dateentry.$(OBJEXT) \
hb-account.$(OBJEXT) hb-archive.$(OBJEXT) hb-assign.$(OBJEXT) \
hb-category.$(OBJEXT) hb-encoding.$(OBJEXT) \
hb-export.$(OBJEXT) hb-filter.$(OBJEXT) hb-hbfile.$(OBJEXT) \
hb-import.$(OBJEXT) hb-import-ofx.$(OBJEXT) \
hb-import-qif.$(OBJEXT) hb-import-csv.$(OBJEXT) \
hb-misc.$(OBJEXT) hb-payee.$(OBJEXT) hb-preferences.$(OBJEXT) \
hb-report.$(OBJEXT) hb-tag.$(OBJEXT) hb-split.$(OBJEXT) \
hb-transaction.$(OBJEXT) hb-xml.$(OBJEXT) homebank.$(OBJEXT) \
language.$(OBJEXT) list_account.$(OBJEXT) \
list_operation.$(OBJEXT) list_topspending.$(OBJEXT) \
......@@ -118,8 +119,8 @@ am_homebank_OBJECTS = dsp_account.$(OBJEXT) dsp_mainwindow.$(OBJEXT) \
ui-assist-import.$(OBJEXT) ui-assist-start.$(OBJEXT) \
ui-budget.$(OBJEXT) ui-category.$(OBJEXT) ui-dialogs.$(OBJEXT) \
ui-filter.$(OBJEXT) ui-hbfile.$(OBJEXT) ui-payee.$(OBJEXT) \
ui-pref.$(OBJEXT) ui-transaction.$(OBJEXT) \
ui-widgets.$(OBJEXT) gtk-chart-colors.$(OBJEXT)
ui-pref.$(OBJEXT) ui-split.$(OBJEXT) ui-transaction.$(OBJEXT) \
ui-widgets.$(OBJEXT)
homebank_OBJECTS = $(am_homebank_OBJECTS)
am__DEPENDENCIES_1 =
homebank_DEPENDENCIES = $(am__DEPENDENCIES_1)
......@@ -316,6 +317,8 @@ homebank_SOURCES = \
enums.h \
gtk-chart.c \
gtk-chart.h \
gtk-chart-colors.c \
gtk-chart-colors.h \
gtk-chart-stack.c \
gtk-chart-stack.h \
gtk-dateentry.c \
......@@ -340,7 +343,6 @@ homebank_SOURCES = \
hb-import.h \
hb-import-ofx.c \
hb-import-qif.c \
hb-import-qif.h \
hb-import-csv.c \
hb-misc.c \
hb-misc.h \
......@@ -352,6 +354,8 @@ homebank_SOURCES = \
hb-report.h \
hb-tag.c \
hb-tag.h \
hb-split.c \
hb-split.h \
hb-transaction.c \
hb-transaction.h \
hb-xml.c \
......@@ -402,12 +406,12 @@ homebank_SOURCES = \
ui-payee.h \
ui-pref.c \
ui-pref.h \
ui-split.c \
ui-split.h \
ui-transaction.c \
ui-transaction.h \
ui-widgets.c \
ui-widgets.h \
gtk-chart-colors.c \
gtk-chart-colors.h
ui-widgets.h
homebank_LDADD = $(DEPS_LIBS) \
$(LIBSOUP_LIBS)
......@@ -524,6 +528,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hb-payee.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hb-preferences.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hb-report.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hb-split.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hb-tag.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hb-transaction.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hb-xml.Po@am__quote@
......@@ -550,6 +555,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-hbfile.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-payee.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-pref.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-split.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-transaction.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-widgets.Po@am__quote@
......
......@@ -191,29 +191,8 @@ gint result;
if(result == GTK_RESPONSE_OK)
{
GList *list;
list = g_list_first(GLOBALS->ope_list);
while (list != NULL)
{
Transaction *ope = list->data;
gdouble oldamount = ope->amount;
if(ope->kacc == data->accnum)
{
ope->amount = amount_to_euro(oldamount);
DB( g_print("%10.6f => %10.6f, %s\n", oldamount, ope->amount, ope->wording) );
}
list = g_list_next(list);
}
data->acc->initial = amount_to_euro(data->acc->initial);
data->acc->minimum = amount_to_euro(data->acc->minimum);
account_convert_euro(data->acc);
register_panel_update(data->LV_ope, GINT_TO_POINTER(UF_BALANCE));
}
}
......@@ -224,7 +203,6 @@ struct register_panel_data *data = user_data;
gint count;
gboolean usermode = TRUE;
count = transaction_auto_assign(GLOBALS->ope_list, data->accnum);
gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data->LV_ope));
GLOBALS->changes_count += count;
......
......@@ -2083,9 +2083,9 @@ gint flags;
sensitive = da_cat_length() > 1 ? TRUE : FALSE;
gtk_action_set_sensitive(gtk_ui_manager_get_action(data->manager, "/MenuBar/ManageMenu/Budget"), sensitive);
//#1501129
sensitive = ((da_cat_length() > 1) || (da_pay_length() > 1)) ? TRUE : FALSE;
gtk_action_set_sensitive(gtk_ui_manager_get_action(data->manager, "/MenuBar/ManageMenu/Assign"), sensitive);
//#1501129 no need to disable, P & C can be created from assigne dialog
//sensitive = ((da_cat_length() > 1) || (da_pay_length() > 1)) ? TRUE : FALSE;
//gtk_action_set_sensitive(gtk_ui_manager_get_action(data->manager, "/MenuBar/ManageMenu/Assign"), sensitive);
// empty archive list: disable scheduled check
sensitive = g_list_length(GLOBALS->arc_list) > 0 ? TRUE : FALSE;
......@@ -2551,7 +2551,7 @@ GError *error = NULL;
g_error_free (error);
}
//todo: this generate a warning
data->menubar = gtk_ui_manager_get_widget (manager, "/MenuBar");
gtk_box_pack_start (GTK_BOX (mainvbox),
data->menubar,
......@@ -2568,8 +2568,6 @@ GError *error = NULL;
/* recent files menu */
data->recent_manager = gtk_recent_manager_get_default ();
data->recent_menu = ui_mainwindow_create_recent_chooser_menu (data->recent_manager);
......
......@@ -181,7 +181,7 @@ GtkWidget *widget, *hbox, *scrollwin;
g_signal_connect( G_OBJECT(chart->drawarea), "scroll-event", G_CALLBACK(drawarea_scroll_event_callback), chart ) ;
g_signal_connect( G_OBJECT(chart->drawarea), "motion-notify-event", G_CALLBACK(drawarea_motionnotifyevent_callback), chart );
g_signal_connect (G_OBJECT(chart->adjustment), "value_changed", G_CALLBACK (ui_chart_stack_first_changed), chart);
g_signal_connect (G_OBJECT(chart->adjustment), "value-changed", G_CALLBACK (ui_chart_stack_first_changed), chart);
/*
g_signal_connect( G_OBJECT(chart->drawarea), "leave-notify-event", G_CALLBACK(ui_chart_stack_leave), chart );
......
......@@ -221,7 +221,7 @@ GtkWidget *scrollwin, *treeview;
g_signal_connect( G_OBJECT(chart->drawarea), "query-tooltip", G_CALLBACK(drawarea_querytooltip_callback), chart );
g_signal_connect( G_OBJECT(chart->drawarea), "motion-notify-event", G_CALLBACK(drawarea_motionnotifyevent_callback), chart );
#endif
g_signal_connect (G_OBJECT(chart->adjustment), "value_changed", G_CALLBACK (colchart_first_changed), chart);
g_signal_connect (G_OBJECT(chart->adjustment), "value-changed", G_CALLBACK (colchart_first_changed), chart);
//g_signal_connect( G_OBJECT(chart->drawarea), "map-event", G_CALLBACK(chart_map), chart ) ;
//g_signal_connect( G_OBJECT(chart->drawarea), "button-press-event", G_CALLBACK(chart_button_press), chart );
......@@ -2375,7 +2375,7 @@ GtkTreeViewColumn *column;
nfd = pango_font_description_copy(desc);
nfsize = pango_font_description_get_size (desc) / PANGO_SCALE;
pango_font_description_set_size(nfd, MAX(8, nfsize-2) * PANGO_SCALE);
gtk_widget_modify_font(GTK_WIDGET(view), nfd);
gtk_widget_override_font(GTK_WIDGET(view), nfd);
pango_font_description_free (nfd);
......
......@@ -35,26 +35,6 @@
extern struct HomeBank *GLOBALS;
Account *
da_acc_clone(Account *src_item)
{
Account *new_item = g_memdup(src_item, sizeof(Account));
DB( g_print("da_acc_clone\n") );
if(new_item)
{
//duplicate the string
new_item->name = g_strdup(src_item->name);
new_item->number = g_strdup(src_item->number);
new_item->bankname = g_strdup(src_item->bankname);
}
return new_item;
}
void
da_acc_free(Account *item)
{
......@@ -373,33 +353,6 @@ GList *list;
return FALSE;
}
void
account_move(guint32 key1, guint32 key2)
{
GList *list;
list = g_list_first(GLOBALS->ope_list);
while (list != NULL)
{
Transaction *entry = list->data;
if(entry->kacc == key1)
entry->kacc = key2;
if(entry->kxferacc == key1)
entry->kxferacc = key2;
list = g_list_next(list);
}
list = g_list_first(GLOBALS->arc_list);
while (list != NULL)
{
Archive *entry = list->data;
if(entry->kacc == key1)
entry->kacc = key2;
if(entry->kxferacc == key1)
entry->kxferacc = key2;
list = g_list_next(list);
}
}
static gchar *
account_get_stripname(gchar *name)
......@@ -590,6 +543,28 @@ Transaction *trn;
}
void account_convert_euro(Account *acc)
{
GList *list;
list = g_list_first(GLOBALS->ope_list);
while (list != NULL)
{
Transaction *ope = list->data;
gdouble oldamount = ope->amount;
if(ope->kacc == acc->key)
{
ope->amount = amount_to_euro(oldamount);
DB( g_print("%10.6f => %10.6f, %s\n", oldamount, ope->amount, ope->wording) );
}
list = g_list_next(list);
}
acc->initial = amount_to_euro(acc->initial);
acc->minimum = amount_to_euro(acc->minimum);
}
......@@ -30,22 +30,26 @@ struct _account
guint32 key;
gushort flags;
gushort type;
guint32 pos; //position in list
guint32 pos; //display position
//guint32 kcur;
gchar *name;
gchar *number;
gchar *bankname;
gdouble initial;
gdouble minimum;
guint32 cheque1;
guint32 cheque2;
//note ?
/* unsaved datas */
GtkWindow *window; //dsp_account window opened
gdouble bal_bank; //bank balance (reconciled transaction)
gdouble bal_today; //today balance (every transaction until today)
gdouble bal_future; //future balance (every transaction)
GtkWindow *window; //dsp_account window opened
gboolean filter; //true if selected into filter
// import datas
......@@ -83,7 +87,6 @@ enum
Account *da_acc_clone(Account *src_item);
Account *da_acc_malloc(void);
void da_acc_free(Account *item);
Account *da_acc_malloc(void);
......@@ -104,7 +107,6 @@ void da_acc_consistency(Account *item);
gboolean account_is_used(guint32 key);
void account_move(guint32 key1, guint32 key2);
gboolean account_exists(gchar *name);
gboolean account_rename(Account *item, gchar *newname);
void account_compute_balances(void);
......@@ -112,4 +114,6 @@ gboolean account_balances_add(Transaction *trn);
gboolean account_balances_sub(Transaction *trn);
GList *account_glist_sorted(gint column);
void account_convert_euro(Account *acc);
#endif
......@@ -21,6 +21,7 @@
#define __HB_ARCHIVE_H__
#include "hb-transaction.h"
#include "hb-split.h"
typedef struct _archive Archive;
......
......@@ -536,12 +536,30 @@ void da_cat_consistency(Category *item)
{
gboolean isIncome;
if((item->flags & GF_SUB) && item->key > 0)
{
//check for existing parent
if( da_cat_get(item->parent) == NULL )
{
Category *parent = da_cat_append_ifnew_by_fullname ("orphaned", FALSE);
item->parent = parent->key;
g_warning("category consistency: fixed missing parent %d", item->parent);
}
}
// ensure type equal for categories and its children
if(!(item->flags & GF_SUB) && item->key > 0)
{
isIncome = (item->flags & GF_INCOME) ? TRUE : FALSE;
category_change_type(item, isIncome);
if( category_change_type(item, isIncome) > 0 )
{
g_warning("category consistency: fixed type for child");
GLOBALS->changes_count++;
}
}
g_strstrip(item->name);
}
......@@ -1002,11 +1020,21 @@ GList *lcat, *list;
}
static gint category_change_type_eval(Category *item, gboolean isIncome)
{
if( (item->flags & (GF_INCOME)) && !isIncome )
return 1;
return 0;
}
gint category_change_type(Category *item, gboolean isIncome)
{
gint changes = 1;
gint changes = 0;
GList *lcat, *list;
changes += category_change_type_eval(item, isIncome);
item->flags &= ~(GF_INCOME); //delete flag
if(isIncome == TRUE)
item->flags |= GF_INCOME;
......@@ -1019,10 +1047,10 @@ GList *lcat, *list;
if(child->parent == item->key)
{
changes += category_change_type_eval(child, isIncome);
child->flags &= ~(GF_INCOME); //delete flag
if(isIncome == TRUE)
child->flags |= GF_INCOME;
changes++;
}
list = g_list_next(list);
}
......
......@@ -21,7 +21,6 @@
#include "hb-import.h"
#include "hb-import-qif.h"
/****************************************************************************/
......
......@@ -20,7 +20,7 @@
#include "homebank.h"
//#include "ui-assist-import.h"
#include "hb-import-qif.h"
#include "hb-import.h"
/****************************************************************************/
/* Debug macros */
......
/* HomeBank -- Free, easy, personal accounting for everyone.
* Copyright (C) 1995-2015 Maxime DOYEN
*
* This file is part of HomeBank.
*
* HomeBank 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; either version 2 of the License, or
* (at your option) any later version.
*
* HomeBank 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/>.
*/
#ifndef __HB_QIF__H__
#define __HB_QIF__H__
typedef struct _QifContext QifContext;
typedef struct _qif_split QIFSplit;
typedef struct _qif_tran QIF_Tran;
#define QIF_UNKNOW_ACCOUNT_NAME "(unknown)"
struct _QifContext
{
GList *q_acc;
GList *q_cat;
GList *q_pay;
GList *q_tra;
gboolean is_ccard;
};
struct _qif_split
{
gchar *category;
gdouble amount;
gchar *memo;
};
struct _qif_tran
{
gchar *account;
gchar *date;
gdouble amount;
gboolean reconciled;
gboolean cleared;
gchar *info;
gchar *payee;
gchar *memo;
gchar *category;
gint nb_splits;
QIFSplit splits[TXN_MAX_SPLIT];
};
enum QIF_Type
{
QIF_NONE,
QIF_HEADER,
QIF_ACCOUNT,
QIF_CATEGORY,
QIF_CLASS,
QIF_MEMORIZED,
QIF_TRANSACTION,
QIF_SECURITY,
QIF_PRICES
};
GList *account_import_qif(gchar *filename, ImportContext *ictx);
gdouble hb_qif_parser_get_amount(gchar *string);
#endif
\ No newline at end of file
......@@ -21,6 +21,8 @@
#define __HB_IMPORT_H__
typedef struct _OfxContext OfxContext;
struct _OfxContext
{
......@@ -48,6 +50,64 @@ struct _ImportContext
gint nb_duplicate;
};
typedef struct _QifContext QifContext;
typedef struct _qif_split QIFSplit;
typedef struct _qif_tran QIF_Tran;
#define QIF_UNKNOW_ACCOUNT_NAME "(unknown)"
struct _QifContext
{
GList *q_acc;
GList *q_cat;
GList *q_pay;
GList *q_tra;
gboolean is_ccard;
};
struct _qif_split
{
gchar *category;
gdouble amount;
gchar *memo;
};
struct _qif_tran
{
gchar *account;
gchar *date;
gdouble amount;
gboolean reconciled;
gboolean cleared;
gchar *info;
gchar *payee;
gchar *memo;
gchar *category;
gint nb_splits;
QIFSplit splits[TXN_MAX_SPLIT];
};
enum QIF_Type
{
QIF_NONE,
QIF_HEADER,
QIF_ACCOUNT,
QIF_CATEGORY,
QIF_CLASS,
QIF_MEMORIZED,
QIF_TRANSACTION,
QIF_SECURITY,
QIF_PRICES
};
GList *account_import_qif(gchar *filename, ImportContext *ictx);
gdouble hb_qif_parser_get_amount(gchar *string);
Account *import_create_account(gchar *name, gchar *number);
GList *homebank_ofx_import(gchar *filename, ImportContext *ictx);
......
......@@ -668,7 +668,7 @@ gchar *p = str;
}
void hb_string_replace_space(gchar *str)
void hb_string_replace_char(gchar c, gchar *str)
{
gchar *s = str;
gchar *d = str;
......@@ -677,7 +677,7 @@ gchar *d = str;
{
while( *s )
{
if( *s != ' ')
if( *s != c )
{
*d++ = *s;
}
......
......@@ -49,7 +49,7 @@ void hb_label_set_colvaluecurr(GtkLabel *label, gdouble value, guint32 currkey);
gint hb_string_utf8_compare(gchar *s1, gchar *s2);
void hb_string_strip_crlf(gchar *str);
void hb_string_replace_space(gchar *str);
void hb_string_replace_char(gchar c, gchar *str);
gchar* hb_strdup_nobrackets (const gchar *str);
gboolean hb_string_csv_valid(gchar *str, guint nbcolumns, gint *csvtype);
......
......@@ -53,6 +53,8 @@ struct lconv *lc = localeconv();
DB( g_print("\n[preferences] monetary unix\n") );
DB( g_print("int_curr_symbol '%s'\n", lc->int_curr_symbol) );
DB( g_print("mon_decimal_point is utf8: %d\n", g_utf8_validate(lc->mon_decimal_point, -1, NULL)) );
DB( g_print("mon_decimal_point '%s'\n", lc->mon_decimal_point) );
DB( g_print("mon_decimal_point %x %x %x %x\n", lc->mon_decimal_point[0], lc->mon_decimal_point[1], lc->mon_decimal_point[2], lc->mon_decimal_point[3]) );
......
/* HomeBank -- Free, easy, personal accounting for everyone.
* Copyright (C) 1995-2015 Maxime DOYEN
*
* This file is part of HomeBank.
*
* HomeBank is fre