diff --git a/gnucash/gnome/gnucash.appdata.xml.in b/gnucash/gnome/gnucash.appdata.xml.in index d0cff4f95d..81aa28ade8 100644 --- a/gnucash/gnome/gnucash.appdata.xml.in +++ b/gnucash/gnome/gnucash.appdata.xml.in @@ -25,6 +25,7 @@
  • Perform financial calculations, such as a loan repayment
  • + GnuCash Project Finance diff --git a/gnucash/import-export/csv-imp/test/CMakeLists.txt b/gnucash/import-export/csv-imp/test/CMakeLists.txt index e9dc7bb9b9..217cbf3ed7 100644 --- a/gnucash/import-export/csv-imp/test/CMakeLists.txt +++ b/gnucash/import-export/csv-imp/test/CMakeLists.txt @@ -24,10 +24,11 @@ if (NOT WIN32) gtest_csv_imp_INCLUDES gtest_csv_imp_LIBS SRCDIR=${CMAKE_SOURCE_DIR}/gnucash/import-export/csv-imp/test) - set(test_tx_import_SOURCES - test-tx-import.cpp) - gnc_add_test(test-tx_import "${test_tx_import_SOURCES}" - gtest_csv_imp_INCLUDES gtest_csv_imp_LIBS) + # Disable for now - there are no tests added yet to this source file + #set(test_tx_import_SOURCES + # test-tx-import.cpp) + #gnc_add_test(test-tx_import "${test_tx_import_SOURCES}" + # gtest_csv_imp_INCLUDES gtest_csv_imp_LIBS) endif() set_dist_list(test_csv_import_DIST CMakeLists.txt diff --git a/gnucash/register/ledger-core/gncEntryLedgerLoad.c b/gnucash/register/ledger-core/gncEntryLedgerLoad.c index 3684755aa0..ac8b94cec4 100644 --- a/gnucash/register/ledger-core/gncEntryLedgerLoad.c +++ b/gnucash/register/ledger-core/gncEntryLedgerLoad.c @@ -34,8 +34,6 @@ #include "gnc-ui-util.h" #include "recncell.h" -#include "business-helpers.h" - #include "gncEntry.h" #include "gncEntryLedger.h" #include "gncEntryLedgerP.h" @@ -430,16 +428,16 @@ void gnc_entry_ledger_load (GncEntryLedger *ledger, GList *entry_list) switch (gncOwnerGetType (owner)) { case GNC_OWNER_CUSTOMER: - table = gnc_business_get_default_tax_table (ledger->book, - GNC_OWNER_CUSTOMER); + table = gncTaxTableGetDefault (ledger->book, + GNC_OWNER_CUSTOMER); if (gncCustomerGetTaxTableOverride (owner->owner.customer)) table = gncCustomerGetTaxTable (owner->owner.customer); break; case GNC_OWNER_VENDOR: - table = gnc_business_get_default_tax_table (ledger->book, - GNC_OWNER_VENDOR); + table = gncTaxTableGetDefault (ledger->book, + GNC_OWNER_VENDOR); if (gncVendorGetTaxTableOverride (owner->owner.vendor)) table = gncVendorGetTaxTable (owner->owner.vendor); diff --git a/gnucash/report/html-document.scm b/gnucash/report/html-document.scm index 58c73e92f1..550a66d822 100644 --- a/gnucash/report/html-document.scm +++ b/gnucash/report/html-document.scm @@ -151,7 +151,7 @@ ;;/gnucash/reports/data/balsheet-eg.eguile.scm: ;;/gnucash/reports/data/receipt.eguile.scm: - (push "\n") + (push "\n") (push "\n") (push "\n") (if style-text diff --git a/gnucash/report/html-fonts.scm b/gnucash/report/html-fonts.scm index e9ea98f35f..eb30fe726e 100644 --- a/gnucash/report/html-fonts.scm +++ b/gnucash/report/html-fonts.scm @@ -140,7 +140,7 @@ (string-append "h3 { " title-font-info " }\n" "a { " account-link-font-info " }\n" - "body, p, table, tr, td { text-align: left; vertical-align: top; " text-cell-font-info " }\n" + "body, p, table, tr, td { vertical-align: top; " text-cell-font-info " }\n" "tr.alternate-row { background: " alternate-row-color " }\n" "tr { page-break-inside: avoid !important;}\n" "th.column-heading-left { text-align: left; " number-header-font-info " }\n" diff --git a/gnucash/report/reports/standard/balsheet-eg.scm b/gnucash/report/reports/standard/balsheet-eg.scm index 4f815ff2aa..2978fee5fc 100644 --- a/gnucash/report/reports/standard/balsheet-eg.scm +++ b/gnucash/report/reports/standard/balsheet-eg.scm @@ -324,7 +324,7 @@ (opt-report-commodity (get-option commodities-page optname-report-commodity)) (opt-price-source (get-option commodities-page optname-price-source)) (opt-show-foreign? (get-option commodities-page optname-show-foreign)) - (opt-report-title (get-option general-page optname-report-title)) + (opt-report-title (get-option general-page gnc:optname-reportname)) (opt-date (gnc:time64-end-day-time (gnc:date-option-absolute-time (get-option general-page optname-date)))) @@ -563,6 +563,12 @@ (negstyle (nbsp mny-string))) (nbsp mny-string))) + (define (monetary-rounded mon) + (let ((c (gnc:gnc-monetary-commodity mon)) + (a (gnc:gnc-monetary-amount mon))) + (gnc:make-gnc-monetary + c (gnc-numeric-convert a (gnc-commodity-get-fraction c) GNC-RND-ROUND)))) + (define (format-monetary mny) ;; Format the given gnc:monetary value according to opt-neg-format ;; If mny's currency isn't the same as that of the report, @@ -576,10 +582,10 @@ (if (not (gnc-commodity-equiv comm opt-report-commodity)) (begin (if opt-show-foreign? - (set! answer (string-append (foreignstyle (neg-format (gnc:monetary->string mny) neg?)) " "))) + (set! answer (string-append (foreignstyle (neg-format (gnc:monetary->string (monetary-rounded mny)) neg?)) " "))) (set! mny (exchange-fn mny opt-report-commodity)))) ; main currency - converted if necessary - (set! answer (string-append answer (neg-format (gnc:monetary->string mny) neg?))) + (set! answer (string-append answer (neg-format (gnc:monetary->string (monetary-rounded mny)) neg?))) answer)) (define (format-comm-coll cc) @@ -598,7 +604,7 @@ (define (fmtmoney2 mny) ;; format a monetary amount in the given currency/commodity ;; !! this takes a gnc-monetary - (nbsp (gnc:monetary->string mny))) + (nbsp (gnc:monetary->string (monetary-rounded mny)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/gnucash/report/reports/standard/balsheet-pnl.scm b/gnucash/report/reports/standard/balsheet-pnl.scm index dcdd835ce4..adb0a3de08 100644 --- a/gnucash/report/reports/standard/balsheet-pnl.scm +++ b/gnucash/report/reports/standard/balsheet-pnl.scm @@ -879,10 +879,10 @@ also show overall period profit & loss.")) (lambda () (display report-title) (display " ") - (when (or incr (eq? report-type 'pnl)) - (display (qof-print-date startdate)) - (display (_ " to "))) - (display (qof-print-date enddate))))) + (if (or incr (eq? report-type 'pnl)) + (format #t (_ "~a to ~a") + (qof-print-date startdate) (qof-print-date enddate)) + (qof-print-date enddate))))) (if (eq? (get-option gnc:pagename-general optname-options-summary) 'always) (gnc:html-document-add-object! @@ -1057,9 +1057,9 @@ also show overall period profit & loss.")) multicol-table-right (_ "Equity") (append equity-accounts (list - (vector "Unrealized Gains" + (vector (_ "Unrealized Gains") unrealized-gain-fn) - (vector "Retained Earnings" + (vector (_ "Retained Earnings") retained-earnings-fn))) #:negate-amounts? #t) @@ -1074,7 +1074,7 @@ also show overall period profit & loss.")) (gnc:html-document-add-object! doc (gnc:make-html-text - (gnc:html-markup-anchor chart "Barchart")))))) + (gnc:html-markup-anchor chart (_ "Barchart"))))))) ((eq? report-type 'pnl) (let* ((closing-str (get-option pagename-entries optname-closing-pattern)) diff --git a/gnucash/report/reports/standard/general-journal.scm b/gnucash/report/reports/standard/general-journal.scm index fad6e6ca9e..1573f8f935 100644 --- a/gnucash/report/reports/standard/general-journal.scm +++ b/gnucash/report/reports/standard/general-journal.scm @@ -41,6 +41,7 @@ ;; report constructor (define (gnc:make-general-journal-report) + (issue-deprecation-warning "gnc:make-general-journal-report is unused.") (let* ((regrpt (gnc:make-report regrptguid))) regrpt)) @@ -90,14 +91,7 @@ ) ) ;; we'll leave query malloc'd in case this is required by the C side... - - ;; set options in the general tab... - (set-option! - gnc:pagename-general (N_ "Title") (_ reportname)) - ;; we can't (currently) set the Report name here - ;; because it is automatically set to the template - ;; name... :( - + ;; set options in the display tab... (for-each (lambda (l) @@ -126,7 +120,10 @@ (define (general-journal-renderer report-obj) ;; just delegate rendering to the Register Report renderer... - ((gnc:report-template-renderer/report-guid regrptguid regrptname) report-obj)) + (let* ((renderer (gnc:report-template-renderer/report-guid regrptguid #f)) + (doc (renderer report-obj))) + (gnc:html-document-set-title! doc (_ reportname)) + doc)) (gnc:define-report 'version 1 diff --git a/gnucash/report/reports/standard/general-ledger.scm b/gnucash/report/reports/standard/general-ledger.scm index 6806676248..2f86c930f4 100644 --- a/gnucash/report/reports/standard/general-ledger.scm +++ b/gnucash/report/reports/standard/general-ledger.scm @@ -30,7 +30,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-module (gnucash reports standard general-ledger)) -(export gnc:make-general-ledger-report) +(export gnc:make-general-ledger-report) ;deprecated (use-modules (gnucash utilities)) (use-modules (gnucash gnc-module)) (use-modules (gnucash gettext)) @@ -45,6 +45,7 @@ ;; report constructor (define (gnc:make-general-ledger-report) + (issue-deprecation-warning "gnc:make-general-ledger-report is unused") (let* ((xactrpt (gnc:make-report xactrptguid))) xactrpt)) @@ -147,7 +148,10 @@ (define (general-ledger-renderer report-obj) ;; just delegate rendering to the Transaction Report renderer... - ((gnc:report-template-renderer/report-guid xactrptguid xactrptname) report-obj)) + (let ((document ((gnc:report-template-renderer/report-guid xactrptguid xactrptname) + report-obj))) + (gnc:html-document-set-title! document (_ reportname)) + document)) (gnc:define-report 'version 1 diff --git a/gnucash/report/reports/support/balsheet-eg.css b/gnucash/report/reports/support/balsheet-eg.css index 83d6d5b437..5a8d4b8e2c 100644 --- a/gnucash/report/reports/support/balsheet-eg.css +++ b/gnucash/report/reports/support/balsheet-eg.css @@ -26,11 +26,9 @@ width: 1em; } td.accname { - text-align: left; vertical-align: top; } td.accnametotal { - text-align: left; vertical-align: top; font-weight: bold; } diff --git a/gnucash/report/reports/support/balsheet-eg.eguile.scm b/gnucash/report/reports/support/balsheet-eg.eguile.scm index c3bcfe9e13..23cd32e3c9 100644 --- a/gnucash/report/reports/support/balsheet-eg.eguile.scm +++ b/gnucash/report/reports/support/balsheet-eg.eguile.scm @@ -125,10 +125,10 @@ ?> - + -<?scm:d coyname ?> <?scm:d reportname ?> <?scm:d (qof-print-date opt-date) ?> +<?scm:d coyname ?> <?scm:d opt-report-title ?> <?scm:d (qof-print-date opt-date) ?> - + <?scm:d (_ "Invoice") ?> <?scm:d invoiceid ?> diff --git a/gnucash/report/reports/support/taxinvoice.eguile.scm b/gnucash/report/reports/support/taxinvoice.eguile.scm index 9a8036273d..1a14bc5088 100644 --- a/gnucash/report/reports/support/taxinvoice.eguile.scm +++ b/gnucash/report/reports/support/taxinvoice.eguile.scm @@ -125,7 +125,7 @@ - + <?scm:d (_ "Invoice") ?> <?scm:d invoiceid ?> diff --git a/gnucash/report/test/test-report-html.scm b/gnucash/report/test/test-report-html.scm index 04821ba453..3455791297 100644 --- a/gnucash/report/test/test-report-html.scm +++ b/gnucash/report/test/test-report-html.scm @@ -45,7 +45,7 @@ ) (define html-doc-header-no-title -"\n\ +"\n\ \n\ \n\ ") @@ -87,7 +87,7 @@ (gnc:html-document-set-title! test-doc "HTML Document Title") (test-equal "HTML Document - Render with title" -"\n\ +"\n\ \n\ \n\ \n\ diff --git a/libgnucash/app-utils/CMakeLists.txt b/libgnucash/app-utils/CMakeLists.txt index 0cdd51c9b2..b34ca641c8 100644 --- a/libgnucash/app-utils/CMakeLists.txt +++ b/libgnucash/app-utils/CMakeLists.txt @@ -11,7 +11,6 @@ set (app_utils_noinst_HEADERS set (app_utils_HEADERS QuickFill.h - business-helpers.h business-options.h file-utils.h gfec.h @@ -52,7 +51,6 @@ gnc_add_swig_python_command (swig-app-utils-python set (app_utils_SOURCES calculation/expression_parser.c calculation/fin.c - business-helpers.c business-options.c QuickFill.c file-utils.c diff --git a/libgnucash/app-utils/business-helpers.c b/libgnucash/app-utils/business-helpers.c deleted file mode 100644 index c63a7ef320..0000000000 --- a/libgnucash/app-utils/business-helpers.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * business-options.c -- non-GUI helper functions for business features - * - * Written By: Derek Atkins <warlord@MIT.EDU> - * Copyright (C) 2003 Derek Atkins - * - * 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; either version 2 of - * the License, or (at your option) any later version. - * - * 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, contact: - * - * Free Software Foundation Voice: +1-617-542-5942 - * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 - * Boston, MA 02110-1301, USA gnu@gnu.org - */ - -#include <config.h> - -#include "business-options.h" -#include "business-helpers.h" - -GncTaxTable* gnc_business_get_default_tax_table (QofBook *book, GncOwnerType ownertype) -{ - GncTaxTable *table = NULL; - GNCOptionDB *odb; - - odb = gnc_option_db_new_for_type (GNC_ID_BOOK); - qof_book_load_options (book, gnc_option_db_load, odb); - - switch (ownertype) - { - case GNC_OWNER_CUSTOMER: - table = gnc_option_db_lookup_taxtable_option (odb, - "Business", - "Default Customer TaxTable", - NULL); - break; - - case GNC_OWNER_VENDOR: - table = gnc_option_db_lookup_taxtable_option (odb, - "Business", - "Default Vendor TaxTable", - NULL); - break; - - default: - break; - } - - gnc_option_db_destroy (odb); - return table; -} diff --git a/libgnucash/app-utils/business-helpers.h b/libgnucash/app-utils/business-helpers.h deleted file mode 100644 index 25032d7173..0000000000 --- a/libgnucash/app-utils/business-helpers.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * business-helpers.h -- non-GUI helper functions for business features - * - * Written By: Derek Atkins <warlord@MIT.EDU> - * Copyright (C) 2003 Derek Atkins <warlord@MIT.EDU> - * - * 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; either version 2 of - * the License, or (at your option) any later version. - * - * 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, contact: - * - * Free Software Foundation Voice: +1-617-542-5942 - * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 - * Boston, MA 02110-1301, USA gnu@gnu.org - */ - -#ifndef GNC_BUSINESS_HELPERS_H_ -#define GNC_BUSINESS_HELPERS_H_ - -#include "gncTaxTable.h" -#include "gncOwner.h" - - -GncTaxTable* gnc_business_get_default_tax_table (QofBook *book, GncOwnerType ownertype); - - -#endif /* GNC_BUSINESS_HELPERS_H_ */ diff --git a/libgnucash/engine/gncTaxTable.c b/libgnucash/engine/gncTaxTable.c index 6159d12858..8fa17d1a01 100644 --- a/libgnucash/engine/gncTaxTable.c +++ b/libgnucash/engine/gncTaxTable.c @@ -681,6 +681,26 @@ GncTaxTable *gncTaxTableLookupByName (QofBook *book, const char *name) return NULL; } +GncTaxTable* +gncTaxTableGetDefault (QofBook *book, GncOwnerType type) +{ + GSList *path = NULL; + const GncGUID *guid = NULL; + const char *vendor = "Default Vendor TaxTable"; + const char *customer = "Default Customer TaxTable"; + const char *section = "Business"; + + g_return_val_if_fail (book != NULL, NULL); + g_return_val_if_fail (type == GNC_OWNER_CUSTOMER || \ + type == GNC_OWNER_VENDOR, NULL); + path = g_slist_prepend (path, type == GNC_OWNER_CUSTOMER ? (void*)customer : (void*)vendor); + path = g_slist_prepend (path, (void*)section); + + guid = qof_book_get_guid_option (book, path); + g_return_val_if_fail (guid, NULL); + return gncTaxTableLookup (book, guid); +} + GncTaxTableList * gncTaxTableGetTables (QofBook *book) { struct _book_info *bi; diff --git a/libgnucash/engine/gncTaxTable.h b/libgnucash/engine/gncTaxTable.h index 5215585e1f..4ec0dafb23 100644 --- a/libgnucash/engine/gncTaxTable.h +++ b/libgnucash/engine/gncTaxTable.h @@ -60,32 +60,6 @@ typedef struct _gncTaxTableClass GncTaxTableClass; }; */ -typedef struct _gncTaxTableEntry GncTaxTableEntry; - -typedef struct _gncAccountValue GncAccountValue; - -#include "Account.h" -#include "qof.h" -#ifdef GNUCASH_MAJOR_VERSION -#include "gncBusiness.h" -#endif - -#define GNC_ID_TAXTABLE "gncTaxTable" - -/* --- type macros --- */ -#define GNC_TYPE_TAXTABLE (gnc_taxtable_get_type ()) -#define GNC_TAXTABLE(o) \ - (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_TAXTABLE, GncTaxTable)) -#define GNC_TAXTABLE_CLASS(k) \ - (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_TAXTABLE, GncTaxTableClass)) -#define GNC_IS_TAXTABLE(o) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_TAXTABLE)) -#define GNC_IS_TAXTABLE_CLASS(k) \ - (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_TAXTABLE)) -#define GNC_TAXTABLE_GET_CLASS(o) \ - (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_TAXTABLE, GncTaxTableClass)) -GType gnc_taxtable_get_type(void); - /** * How to interpret the amount. * You can interpret it as a VALUE or a PERCENT. @@ -104,6 +78,32 @@ typedef enum GNC_TAXINCLUDED_USEGLOBAL, /**< use the global setting */ } GncTaxIncluded; +typedef struct _gncTaxTableEntry GncTaxTableEntry; + +typedef struct _gncAccountValue GncAccountValue; + +#include "Account.h" +#include "qof.h" +#include "gncBusiness.h" +#include "gncOwner.h" + +#define GNC_ID_TAXTABLE "gncTaxTable" + +/* --- type macros --- */ +#define GNC_TYPE_TAXTABLE (gnc_taxtable_get_type ()) +#define GNC_TAXTABLE(o) \ + (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_TAXTABLE, GncTaxTable)) +#define GNC_TAXTABLE_CLASS(k) \ + (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_TAXTABLE, GncTaxTableClass)) +#define GNC_IS_TAXTABLE(o) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_TAXTABLE)) +#define GNC_IS_TAXTABLE_CLASS(k) \ + (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_TAXTABLE)) +#define GNC_TAXTABLE_GET_CLASS(o) \ + (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_TAXTABLE, GncTaxTableClass)) +GType gnc_taxtable_get_type(void); + + const char * gncAmountTypeToString (GncAmountType type); gboolean gncAmountStringToType (const char *str, GncAmountType *type); @@ -151,6 +151,7 @@ static inline GncTaxTable *gncTaxTableLookup (const QofBook* book, const GncGUID } GncTaxTable *gncTaxTableLookupByName (QofBook *book, const char *name); +GncTaxTable *gncTaxTableGetDefault (QofBook *book, GncOwnerType type); typedef GList GncTaxTableList; GncTaxTableList * gncTaxTableGetTables (QofBook *book); diff --git a/libgnucash/engine/qofbook.cpp b/libgnucash/engine/qofbook.cpp index 8e7dc93cfe..0042778adf 100644 --- a/libgnucash/engine/qofbook.cpp +++ b/libgnucash/engine/qofbook.cpp @@ -1173,6 +1173,18 @@ qof_book_set_string_option(QofBook* book, const char* opt_name, const char* opt_ qof_book_commit_edit(book); } +const GncGUID* +qof_book_get_guid_option(QofBook* book, GSList* path) +{ + g_return_val_if_fail(book != nullptr, nullptr); + g_return_val_if_fail(path != nullptr, nullptr); + + auto table_value = qof_book_get_option(book, path); + if (!table_value) + return nullptr; + return table_value->get<GncGUID*>(); +} + void qof_book_option_frame_delete (QofBook *book, const char* opt_name) { diff --git a/libgnucash/engine/qofbook.h b/libgnucash/engine/qofbook.h index 39c21f8c31..bc315c80f8 100644 --- a/libgnucash/engine/qofbook.h +++ b/libgnucash/engine/qofbook.h @@ -375,6 +375,7 @@ char *qof_book_get_counter_format (const QofBook *book, const char* qof_book_get_string_option(const QofBook* book, const char* opt_name); void qof_book_set_string_option(QofBook* book, const char* opt_name, const char* opt_val); +const GncGUID* qof_book_get_guid_option(QofBook* book, GSList* path); void qof_book_option_frame_delete (QofBook *book, const char* opt_name); /** Access functions for reading and setting the used-features on this book. diff --git a/libgnucash/scm/utilities.scm b/libgnucash/scm/utilities.scm index 83a0ab1390..105f493413 100644 --- a/libgnucash/scm/utilities.scm +++ b/libgnucash/scm/utilities.scm @@ -194,3 +194,53 @@ ((null? (cdr lst)) (reverse (cons (car lst) result))) ((= (car lst) (cadr lst)) (lp (cdr lst) result)) (else (lp (cdr lst) (cons (car lst) result)))))) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; compatibility hack for fixing guile-2.0 string handling. this code +;; may be removed when minimum guile is 2.2 or later. see +;; https://lists.gnu.org/archive/html/guile-user/2019-04/msg00012.html +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(when (string=? (effective-version) "2.0") + ;; When using Guile 2.0.x, use monkey patching to change the + ;; behavior of string ports to use UTF-8 as the internal encoding. + ;; Note that this is the default behavior in Guile 2.2 or later. + (let* ((mod (resolve-module '(guile))) + (orig-open-input-string (module-ref mod 'open-input-string)) + (orig-open-output-string (module-ref mod 'open-output-string)) + (orig-object->string (module-ref mod 'object->string)) + (orig-simple-format (module-ref mod 'simple-format))) + + (define (open-input-string str) + (with-fluids ((%default-port-encoding "UTF-8")) + (orig-open-input-string str))) + + (define (open-output-string) + (with-fluids ((%default-port-encoding "UTF-8")) + (orig-open-output-string))) + + (define (object->string . args) + (with-fluids ((%default-port-encoding "UTF-8")) + (apply orig-object->string args))) + + (define (simple-format . args) + (with-fluids ((%default-port-encoding "UTF-8")) + (apply orig-simple-format args))) + + (define (call-with-input-string str proc) + (proc (open-input-string str))) + + (define (call-with-output-string proc) + (let ((port (open-output-string))) + (proc port) + (get-output-string port))) + + (module-set! mod 'open-input-string open-input-string) + (module-set! mod 'open-output-string open-output-string) + (module-set! mod 'object->string object->string) + (module-set! mod 'simple-format simple-format) + (module-set! mod 'call-with-input-string call-with-input-string) + (module-set! mod 'call-with-output-string call-with-output-string) + + (when (eqv? (module-ref mod 'format) orig-simple-format) + (module-set! mod 'format simple-format)))) diff --git a/po/POTFILES.in b/po/POTFILES.in index 9339bf3a38..36cc528b7b 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -501,7 +501,6 @@ gnucash/report/stylesheets/head-or-tail.scm gnucash/report/stylesheets/plain.scm gnucash/report/trep-engine.scm libgnucash/app-utils/app-utils.scm -libgnucash/app-utils/business-helpers.c libgnucash/app-utils/business-options.c libgnucash/app-utils/business-options.scm libgnucash/app-utils/business-prefs.scm