gnucash unstable: Multiple changes pushed

Geert Janssens gjanssens at code.gnucash.org
Thu Mar 8 12:57:09 EST 2018


Updated	 via  https://github.com/Gnucash/gnucash/commit/25883b17 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/563d7161 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/b577a7da (commit)
	 via  https://github.com/Gnucash/gnucash/commit/751a3fec (commit)
	 via  https://github.com/Gnucash/gnucash/commit/e71f5612 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/6fe7d885 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/89c1534d (commit)
	 via  https://github.com/Gnucash/gnucash/commit/1449d4ca (commit)
	from  https://github.com/Gnucash/gnucash/commit/f8fd9dd2 (commit)



commit 25883b17ebba418a9100bc9fa3d531f21d80a769
Author: Carsten Rinke <carsten.rinke at gmx.de>
Date:   Sun Sep 17 13:16:21 2017 +0200

    Bug764245 - multi-column reports include incorrect sub-reports

diff --git a/gnucash/report/report-system/report.scm b/gnucash/report/report-system/report.scm
index 2e7712a..00b5a4c 100644
--- a/gnucash/report/report-system/report.scm
+++ b/gnucash/report/report-system/report.scm
@@ -374,9 +374,16 @@
 
 (define (gnc:restore-report-by-guid id template-id template-name options)
   (if options
-      (let ((r ((record-constructor <report>)
-		 template-id id options #t #t #f #f "")))
-	 (gnc-report-add r))
+      (let* (
+              (r ((record-constructor <report>)
+		    template-id id options #t #t #f #f ""))
+              (report-id (gnc-report-add r))
+            )
+	(if (number? report-id)
+          (gnc:report-set-id! r report-id)
+        )
+        report-id
+      )
       (begin
 	(gnc-error-dialog '() (string-append "Report Failed! One of your previously opened reports has failed to open. The template on which it was based: " template-name ", was not found."))
 	#f))
@@ -384,9 +391,16 @@
 
 (define (gnc:restore-report-by-guid-with-custom-template id template-id template-name custom-template-id options)
   (if options
-      (let ((r ((record-constructor <report>)
-                 template-id id options #t #t #f #f custom-template-id)))
-         (gnc-report-add r))
+      (let* (
+              (r ((record-constructor <report>)
+                 template-id id options #t #t #f #f custom-template-id))
+              (report-id (gnc-report-add r))
+            )
+	(if (number? report-id)
+          (gnc:report-set-id! r report-id)
+        )
+        report-id
+      )
       (begin
         (gnc-error-dialog '() (string-append "Report Failed! One of your previously opened reports has failed to open. The template on which it was based: " template-name ", was not found."))
         #f))
@@ -558,17 +572,67 @@
 (define (gnc:report-serialize-embedded embedded-reports)
   (let* ((result-string ""))
     (if embedded-reports
+      (begin
         (for-each
-         (lambda (subreport-id)
-           (let*
-               ((subreport (gnc-report-find subreport-id))
-                (subreport-options-text (gnc:report-serialize subreport)))
-             (set! result-string (string-append
-                                  result-string
-                                  ";;;; Options for embedded report\n"
-                                  subreport-options-text))))
-         embedded-reports))
-    result-string))
+          (lambda (subreport-id)
+            (let* (
+                    (subreport (gnc-report-find subreport-id))
+                    (subreport-type (gnc:report-type subreport))
+                    (subreport-template (hash-ref *gnc:_report-templates_* subreport-type))
+                    (subreport-template-name (gnc:report-template-name subreport-template))
+                    (thunk (gnc:report-template-options-cleanup-cb subreport-template))
+                  )
+              ;; clean up the options if necessary.  this is only needed
+              ;; in special cases.
+              (if thunk
+                (thunk subreport))
+              ;; save them
+              (set! result-string
+                (string-append
+                  result-string
+                  "\n      ;;;; Options for embedded report\n"
+                  "      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+                  (format #f "      ;; options for report ~S\n" (gnc:report-name subreport))
+                  (format #f "      (let ((options (gnc:report-template-new-options/report-guid ~S ~S)))"
+                    subreport-type
+                    subreport-template-name)
+                  (gnc:generate-restore-forms (gnc:report-options subreport) "options")
+                  (format #f "\n        (set! new-embedded-report-ids\n          (append\n            new-embedded-report-ids\n              (list (gnc:restore-report-by-guid-with-custom-template #f ~S ~S ~S options))\n          )\n        )\n"
+                    subreport-type
+                    subreport-template-name
+                    (gnc:report-custom-template subreport))
+                  "      )\n"
+                )
+              )
+            )
+          )
+          embedded-reports)
+        ;;(set! result-string (string-append result-string (gnc:update-section-general)))
+        (set! result-string
+          (string-append
+            result-string
+            "\n"
+            "      ;;;; Update Section: __general\n"
+            "      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+            "      (let*\n"
+            "        (\n"
+            "          (option (gnc:lookup-option options \"__general\" \"report-list\"))\n"
+            "          (saved-report-list (gnc:option-value option))\n"
+            "        )\n"
+            "        (\n"
+            "          (lambda (option)\n"
+            "            (if option ((gnc:option-setter option) (map (lambda (x y) (cons x (cdr y))) new-embedded-report-ids saved-report-list)))\n"
+            "          )\n"
+            "          option\n"
+            "        )\n"
+            "      )\n"
+          )
+        )
+      )
+    )
+    result-string
+  )
+)
 
 (define (gnc:report-template-serialize-internal name type templ-name options guid)
   (let* ((embedded-serialized (gnc:report-serialize-embedded (gnc:report-embedded-list options)))
@@ -577,15 +641,15 @@
    (format #f ";; Options for saved report ~S, based on template ~S\n"
            name type)
    (format
-    #f "(let ()\n (define (options-gen)\n  (let ((options (gnc:report-template-new-options/report-guid ~S ~S)))\n"
+    #f "(let ()\n  (define (options-gen)\n    (let\n         (\n           (options (gnc:report-template-new-options/report-guid ~S ~S))\n           (new-embedded-report-ids '()) ;; only used with Multicolumn View Reports\n         )"
     type templ-name)
    (gnc:generate-restore-forms options "options")
    (if embedded-serialized
        embedded-serialized
        "")
-   "  options))\n"
+   "\n      options\n    )\n  )\n"
    (format 
-    #f " (gnc:define-report \n  'version 1\n  'name ~S\n  'report-guid ~S\n  'parent-type ~S\n  'options-generator options-gen\n  'menu-path (list gnc:menuname-custom)\n  'renderer (gnc:report-template-renderer/report-guid ~S ~S)))\n\n"
+    #f "  (gnc:define-report \n    'version 1\n    'name ~S\n    'report-guid ~S\n    'parent-type ~S\n    'options-generator options-gen\n    'menu-path (list gnc:menuname-custom)\n    'renderer (gnc:report-template-renderer/report-guid ~S ~S)\n  )\n)\n\n"
     name
     (if guid
         guid

commit 563d7161610d8d44c9e047a25e1a33ce0d3e85ff
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Thu Mar 8 17:59:48 2018 +0100

    Csv imp settings - internalize prefix handling
    
    This information is not relevant outside of the settings code
    The way it's implemented now each settings module defines its
    own unique prefix and the generic code can just use it when
    needed.

diff --git a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.cpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.cpp
index d3d5e03..a49c7f0 100644
--- a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.cpp
@@ -42,7 +42,7 @@ extern "C"
 #include "gnc-ui-util.h"
 }
 
-const std::string settings_type{"PRICE"};
+constexpr auto group_prefix = "Import csv,price - ";
 
 #define CSV_COL_TYPES    "ColumnTypes"
 
@@ -57,7 +57,6 @@ static std::shared_ptr<CsvPriceImpSettings> create_int_no_preset(void)
 {
     auto preset = std::make_shared<CsvPriceImpSettings>();
     preset->m_name = get_no_settings();
-    preset->m_settings_type = settings_type;
 
     return preset;
 }
@@ -101,7 +100,7 @@ const preset_vec_price& get_import_presets_price (void)
     for (gsize i=0; i < grouplength; i++)
     {
         auto group = std::string(groups[i]);
-        auto gp = get_prefix() + settings_type + " - ";
+        auto gp = std::string {group_prefix};
         auto pos = group.find(gp);
         if (pos == std::string::npos)
             continue;
@@ -125,7 +124,6 @@ const preset_vec_price& get_import_presets_price (void)
     for (auto preset_name : preset_names)
     {
         auto preset = std::make_shared<CsvPriceImpSettings>();
-        preset->m_settings_type = settings_type;
         preset->m_name = preset_name;
         preset->load();
         presets_price.push_back(preset);
@@ -147,7 +145,7 @@ CsvPriceImpSettings::load (void)
     GError *key_error = nullptr;
     m_load_error = false;
     auto keyfile = gnc_state_get_current ();
-    auto group = get_prefix() + m_settings_type + " - " + m_name;
+    auto group = get_group_prefix() + m_name;
 
     // Start Loading the settings
     m_load_error = CsvImportSettings::load(); // load the common settings
@@ -210,7 +208,7 @@ CsvPriceImpSettings::save (void)
     }
 
     auto keyfile = gnc_state_get_current ();
-    auto group = get_prefix() + m_settings_type + " - " + m_name;
+    auto group = get_group_prefix() + m_name;
 
     // Drop previous saved settings with this name
     g_key_file_remove_group (keyfile, group.c_str(), nullptr);
@@ -256,3 +254,9 @@ CsvPriceImpSettings::remove (void)
 
     CsvImportSettings::remove();
 }
+
+const char*
+CsvPriceImpSettings::get_group_prefix (void)
+{
+    return group_prefix;
+}
diff --git a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.hpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.hpp
index f1833e5..ef15cdd 100644
--- a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.hpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.hpp
@@ -64,6 +64,9 @@ void remove (void);
 gnc_commodity *m_from_commodity;                    //  Price From Commodity
 gnc_commodity *m_to_currency;                       //  Price To Currency
 std::vector<GncPricePropType> m_column_types_price; // The Price Column types in order
+
+protected:
+    const char* get_group_prefix (void) override;
 };
 
 using preset_vec_price = std::vector<std::shared_ptr<CsvPriceImpSettings>>;
diff --git a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp
index ccac10b..a0a679a 100644
--- a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp
@@ -42,7 +42,7 @@ extern "C"
 #include "gnc-ui-util.h"
 }
 
-const std::string settings_type{"TRANS"};
+constexpr auto group_prefix = "Import csv,transaction - ";
 
 #define CSV_COL_TYPES    "ColumnTypes"
 
@@ -57,7 +57,6 @@ static std::shared_ptr<CsvTransImpSettings> create_int_no_preset(void)
 {
     auto preset = std::make_shared<CsvTransImpSettings>();
     preset->m_name = get_no_settings();
-    preset->m_settings_type = settings_type;
 
     return preset;
 }
@@ -114,7 +113,7 @@ const preset_vec_trans& get_import_presets_trans (void)
     for (gsize i=0; i < grouplength; i++)
     {
         auto group = std::string(groups[i]);
-        auto gp = get_prefix() + settings_type + " - ";
+        auto gp = std::string {group_prefix};
         auto pos = group.find(gp);
         if (pos == std::string::npos)
             continue;
@@ -138,7 +137,6 @@ const preset_vec_trans& get_import_presets_trans (void)
     for (auto preset_name : preset_names)
     {
         auto preset = std::make_shared<CsvTransImpSettings>();
-        preset->m_settings_type = settings_type;
         preset->m_name = preset_name;
         preset->load();
         presets_trans.push_back(preset);
@@ -160,7 +158,7 @@ CsvTransImpSettings::load (void)
     GError *key_error = nullptr;
     m_load_error = false;
     auto keyfile = gnc_state_get_current ();
-    auto group = get_prefix() + m_settings_type + " - " + m_name;
+    auto group = get_group_prefix() + m_name;
 
     // Start Loading the settings
     m_load_error = CsvImportSettings::load(); // load the common settings
@@ -225,7 +223,7 @@ CsvTransImpSettings::save (void)
     }
 
     auto keyfile = gnc_state_get_current ();
-    auto group = get_prefix() + m_settings_type + " - " + m_name;
+    auto group = get_group_prefix() + m_name;
 
     // Drop previous saved settings with this name
     g_key_file_remove_group (keyfile, group.c_str(), nullptr);
@@ -260,3 +258,9 @@ CsvTransImpSettings::remove (void)
 
     CsvImportSettings::remove();
 }
+
+const char*
+CsvTransImpSettings::get_group_prefix (void)
+{
+    return group_prefix;
+}
diff --git a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.hpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.hpp
index 254a41d..8d798f7 100644
--- a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.hpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.hpp
@@ -64,6 +64,9 @@ void remove (void);
 Account      *m_base_account;                 // Base account
 bool          m_multi_split;                  // Assume multiple lines per transaction
 std::vector<GncTransPropType> m_column_types; // The Column types in order
+
+protected:
+    const char* get_group_prefix (void) override;
 };
 
 using preset_vec_trans = std::vector<std::shared_ptr<CsvTransImpSettings>>;
diff --git a/gnucash/import-export/csv-imp/gnc-imp-settings-csv.cpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv.cpp
index 27b430a..29c28f3 100644
--- a/gnucash/import-export/csv-imp/gnc-imp-settings-csv.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv.cpp
@@ -106,11 +106,6 @@ std::string get_gnc_exp (void)
     return gnc_exp;
 }
 
-std::string get_prefix (void)
-{
-    return csv_group_prefix;
-}
-
 /**************************************************
  * load_common
  *
@@ -121,7 +116,7 @@ CsvImportSettings::load (void)
 {
     GError *key_error = nullptr;
     m_load_error = false;
-    auto group = csv_group_prefix + m_settings_type + " - " + m_name;
+    auto group = get_group_prefix() + m_name;
     auto keyfile = gnc_state_get_current ();
 
     m_skip_start_lines = g_key_file_get_integer (keyfile, group.c_str(), CSV_SKIP_START, &key_error);
@@ -189,7 +184,7 @@ bool
 CsvImportSettings::save (void)
 {
     auto keyfile = gnc_state_get_current ();
-    auto group = csv_group_prefix + m_settings_type + " - " + m_name;
+    auto group = get_group_prefix() + m_name;
 
     // Start Saving the Common settings
     g_key_file_set_string (keyfile, group.c_str(), CSV_NAME, m_name.c_str());
@@ -243,6 +238,6 @@ void
 CsvImportSettings::remove (void)
 {
     auto keyfile = gnc_state_get_current ();
-    auto group = csv_group_prefix + m_settings_type + " - " + m_name;
+    auto group = get_group_prefix() + m_name;
     g_key_file_remove_group (keyfile, group.c_str(), nullptr);
 }
diff --git a/gnucash/import-export/csv-imp/gnc-imp-settings-csv.hpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv.hpp
index d226a70..b7daed0 100644
--- a/gnucash/import-export/csv-imp/gnc-imp-settings-csv.hpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv.hpp
@@ -72,8 +72,6 @@ bool load (void);
  */
 void remove (void);
 
-std::string   m_settings_type;                // Settings Type, TRANS, PRICE etc.
-
 // Common Settings
 std::string   m_name;                         // Name given to this preset by the user
 GncImpFileFormat m_file_format;               // CSV import Format
@@ -86,11 +84,13 @@ bool          m_skip_alt_lines;               // Skip alternate rows
 std::string   m_separators;                   // Separators for csv format
 bool          m_load_error;                   // Was there an error while parsing the state file ?
 std::vector<uint32_t> m_column_widths;        // The Column widths
+
+protected:
+    virtual const char* get_group_prefix (void) = 0;
 };
 
 std::string get_no_settings (void);
 std::string get_gnc_exp (void);
-std::string get_prefix (void);
 
 /** Check whether name can be used as a preset name.
  *  The names of the internal presets are considered reserved.

commit b577a7daf1b2e878bece8a799ddfafaeb6a0f689
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Thu Mar 8 17:20:13 2018 +0100

    Csv import settings - undo rename of common methods
    
    Use C++-style to call method with same name in parent class

diff --git a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.cpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.cpp
index 0f985ed..d3d5e03 100644
--- a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.cpp
@@ -150,7 +150,7 @@ CsvPriceImpSettings::load (void)
     auto group = get_prefix() + m_settings_type + " - " + m_name;
 
     // Start Loading the settings
-    m_load_error = load_common(); // load the common settings
+    m_load_error = CsvImportSettings::load(); // load the common settings
 
     gchar *key_char = g_key_file_get_string (keyfile, group.c_str(), CSV_TO_CURR, &key_error);
     if (key_char && *key_char != '\0')
@@ -216,7 +216,7 @@ CsvPriceImpSettings::save (void)
     g_key_file_remove_group (keyfile, group.c_str(), nullptr);
 
     // Start Saving the settings
-    bool error = save_common(); // save the common settings
+    bool error = CsvImportSettings::save(); // save the common settings
 
     if (error)
         return error;
@@ -254,5 +254,5 @@ CsvPriceImpSettings::remove (void)
     if (preset_is_reserved_name (m_name))
         return;
 
-    remove_common();
+    CsvImportSettings::remove();
 }
diff --git a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp
index da08573..ccac10b 100644
--- a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp
@@ -163,7 +163,7 @@ CsvTransImpSettings::load (void)
     auto group = get_prefix() + m_settings_type + " - " + m_name;
 
     // Start Loading the settings
-    m_load_error = load_common(); // load the common settings
+    m_load_error = CsvImportSettings::load(); // load the common settings
 
     m_multi_split = g_key_file_get_boolean (keyfile, group.c_str(), CSV_MULTI_SPLIT, &key_error);
     m_load_error |= handle_load_error (&key_error, group);
@@ -231,7 +231,7 @@ CsvTransImpSettings::save (void)
     g_key_file_remove_group (keyfile, group.c_str(), nullptr);
 
     // Start Saving the settings
-    bool error = save_common(); // save the common settings
+    bool error = CsvImportSettings::save(); // save the common settings
 
     if (error)
         return error;
@@ -258,5 +258,5 @@ CsvTransImpSettings::remove (void)
     if (preset_is_reserved_name (m_name))
         return;
 
-    remove_common();
+    CsvImportSettings::remove();
 }
diff --git a/gnucash/import-export/csv-imp/gnc-imp-settings-csv.cpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv.cpp
index d0ab9e9..27b430a 100644
--- a/gnucash/import-export/csv-imp/gnc-imp-settings-csv.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv.cpp
@@ -117,7 +117,7 @@ std::string get_prefix (void)
  * load the settings from a state key file
  **************************************************/
 bool
-CsvImportSettings::load_common (void)
+CsvImportSettings::load (void)
 {
     GError *key_error = nullptr;
     m_load_error = false;
@@ -186,7 +186,7 @@ CsvImportSettings::load_common (void)
  * save settings to a key file
  **************************************************/
 bool
-CsvImportSettings::save_common (void)
+CsvImportSettings::save (void)
 {
     auto keyfile = gnc_state_get_current ();
     auto group = csv_group_prefix + m_settings_type + " - " + m_name;
@@ -240,7 +240,7 @@ CsvImportSettings::save_common (void)
 }
 
 void
-CsvImportSettings::remove_common (void)
+CsvImportSettings::remove (void)
 {
     auto keyfile = gnc_state_get_current ();
     auto group = csv_group_prefix + m_settings_type + " - " + m_name;
diff --git a/gnucash/import-export/csv-imp/gnc-imp-settings-csv.hpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv.hpp
index c051cc1..d226a70 100644
--- a/gnucash/import-export/csv-imp/gnc-imp-settings-csv.hpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv.hpp
@@ -60,17 +60,17 @@ struct CsvImportSettings
  *
  *  @return true if there was a problem in saving.
  */
-bool save_common (void);
+bool save (void);
 
 /** Load the widget properties from a key File.
  *
  *  @return true if there was a problem.
  */
-bool load_common (void);
+bool load (void);
 
 /** Remove the preset from the state file.
  */
-void remove_common (void);
+void remove (void);
 
 std::string   m_settings_type;                // Settings Type, TRANS, PRICE etc.
 

commit 751a3fec43a9740b842e0f5f4ea148fd47a9ea4e
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Thu Mar 8 17:12:31 2018 +0100

    Csv importer - align file names
    
    Done in a separate commit

diff --git a/gnucash/import-export/csv-imp/CMakeLists.txt b/gnucash/import-export/csv-imp/CMakeLists.txt
index a4355c6..5486049 100644
--- a/gnucash/import-export/csv-imp/CMakeLists.txt
+++ b/gnucash/import-export/csv-imp/CMakeLists.txt
@@ -15,17 +15,17 @@ SET(csv_import_SOURCES
   csv-account-import.c
   gnc-csv-account-map.c
   gnc-csv-gnumeric-popup.c
-  gnc-csv-tokenizer.cpp
-  gnc-csv-import-settings.cpp
-  gnc-csv-price-import-settings.cpp
-  gnc-csv-trans-import-settings.cpp
-  gnc-dummy-tokenizer.cpp
-  gnc-fw-tokenizer.cpp
-  gnc-price-import.cpp
-  gnc-price-props.cpp
+  gnc-imp-props-price.cpp
+  gnc-imp-props-tx.cpp
+  gnc-imp-settings-csv.cpp
+  gnc-imp-settings-csv-price.cpp
+  gnc-imp-settings-csv-tx.cpp
+  gnc-import-price.cpp
+  gnc-import-tx.cpp
   gnc-tokenizer.cpp
-  gnc-trans-props.cpp
-  gnc-tx-import.cpp
+  gnc-tokenizer-csv.cpp
+  gnc-tokenizer-dummy.cpp
+  gnc-tokenizer-fw.cpp
 )
 
 # Add dependency on config.h
@@ -45,17 +45,17 @@ SET(csv_import_noinst_HEADERS
   csv-account-import.h
   gnc-csv-account-map.h
   gnc-csv-gnumeric-popup.h
-  gnc-csv-tokenizer.hpp
-  gnc-csv-import-settings.hpp
-  gnc-csv-price-import-settings.hpp
-  gnc-csv-trans-import-settings.hpp
-  gnc-dummy-tokenizer.hpp
-  gnc-fw-tokenizer.hpp
-  gnc-price-import.hpp
-  gnc-price-props.hpp
+  gnc-imp-props-price.hpp
+  gnc-imp-props-tx.hpp
+  gnc-imp-settings-csv.hpp
+  gnc-imp-settings-csv-price.hpp
+  gnc-imp-settings-csv-tx.hpp
+  gnc-import-price.hpp
+  gnc-import-tx.hpp
   gnc-tokenizer.hpp
-  gnc-trans-props.hpp
-  gnc-tx-import.hpp
+  gnc-tokenizer-csv.hpp
+  gnc-tokenizer-dummy.hpp
+  gnc-tokenizer-fw.hpp
 )
 
 ADD_LIBRARY(gncmod-csv-import ${csv_import_noinst_HEADERS}
diff --git a/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp b/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp
index 0db5c64..a4a3ef7 100644
--- a/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp
+++ b/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp
@@ -1,5 +1,5 @@
 /*******************************************************************\
- * assistant-csv-price-import.c -- An assistant for importing       *
+ * assistant-csv-price-import.cpp -- An assistant for importing     *
  *                                     Prices from a file.          *
  *                                                                  *
  * Copyright (C) 2017 Robert Fewell                                 *
@@ -52,10 +52,10 @@ extern "C"
 #include "go-charmap-sel.h"
 }
 
-#include "gnc-csv-price-import-settings.hpp"
-#include "gnc-price-import.hpp"
-#include "gnc-fw-tokenizer.hpp"
-#include "gnc-csv-tokenizer.hpp"
+#include "gnc-imp-settings-csv-price.hpp"
+#include "gnc-import-price.hpp"
+#include "gnc-tokenizer-fw.hpp"
+#include "gnc-tokenizer-csv.hpp"
 
 #define MIN_COL_WIDTH 70
 #define GNC_PREFS_GROUP "dialogs.import.csv"
diff --git a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
index c9100de..397a353 100644
--- a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
+++ b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
@@ -59,10 +59,10 @@ extern "C"
 #include "go-charmap-sel.h"
 }
 
-#include "gnc-csv-trans-import-settings.hpp"
-#include "gnc-tx-import.hpp"
-#include "gnc-fw-tokenizer.hpp"
-#include "gnc-csv-tokenizer.hpp"
+#include "gnc-imp-settings-csv-tx.hpp"
+#include "gnc-import-tx.hpp"
+#include "gnc-tokenizer-fw.hpp"
+#include "gnc-tokenizer-csv.hpp"
 
 #include <boost/locale.hpp>
 
diff --git a/gnucash/import-export/csv-imp/gnc-price-props.cpp b/gnucash/import-export/csv-imp/gnc-imp-props-price.cpp
similarity index 98%
rename from gnucash/import-export/csv-imp/gnc-price-props.cpp
rename to gnucash/import-export/csv-imp/gnc-imp-props-price.cpp
index 151bd38..1a3ec7b 100644
--- a/gnucash/import-export/csv-imp/gnc-price-props.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-props-price.cpp
@@ -1,6 +1,6 @@
 /********************************************************************\
- * gnc-price-props.cpp - encapsulate price properties for use       *
- *                       in the csv importer                        *
+ * gnc-imp-props-price.cpp - encapsulate price properties for use   *
+ *                           in the csv importer                    *
  *                                                                  *
  * This program is free software; you can redistribute it and/or    *
  * modify it under the terms of the GNU General Public License as   *
@@ -37,7 +37,7 @@ extern "C" {
 #include <string>
 #include <boost/regex.hpp>
 #include <boost/regex/icu.hpp>
-#include "gnc-price-props.hpp"
+#include "gnc-imp-props-price.hpp"
 
 G_GNUC_UNUSED static QofLogModule log_module = GNC_MOD_IMPORT;
 
diff --git a/gnucash/import-export/csv-imp/gnc-price-props.hpp b/gnucash/import-export/csv-imp/gnc-imp-props-price.hpp
similarity index 95%
rename from gnucash/import-export/csv-imp/gnc-price-props.hpp
rename to gnucash/import-export/csv-imp/gnc-imp-props-price.hpp
index 3a35861..055cc4d 100644
--- a/gnucash/import-export/csv-imp/gnc-price-props.hpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-props-price.hpp
@@ -1,6 +1,6 @@
 /********************************************************************\
- * gnc-price-props.hpp - encapsulate price properties for use       *
- *                       in the csv importer                        *
+ * gnc-imp-props-price.hpp - encapsulate price properties for use   *
+ *                           in the csv importer                    *
  *                                                                  *
  * This program is free software; you can redistribute it and/or    *
  * modify it under the terms of the GNU General Public License as   *
@@ -58,7 +58,7 @@ enum class GncPricePropType {
 enum Result { FAILED, ADDED, DUPLICATED, REPLACED };
 
 /** Maps all column types to a string representation.
- *  The actual definition is in gnc-price-props.cpp.
+ *  The actual definition is in gnc-imp-props-price.cpp.
  *  Attention: that definition should be adjusted for any
  *  changes to enum class GncPricePropType ! */
 extern std::map<GncPricePropType, const char*> gnc_price_col_type_strs;
diff --git a/gnucash/import-export/csv-imp/gnc-trans-props.cpp b/gnucash/import-export/csv-imp/gnc-imp-props-tx.cpp
similarity index 99%
rename from gnucash/import-export/csv-imp/gnc-trans-props.cpp
rename to gnucash/import-export/csv-imp/gnc-imp-props-tx.cpp
index 2aaae34..650f4e9 100644
--- a/gnucash/import-export/csv-imp/gnc-trans-props.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-props-tx.cpp
@@ -1,5 +1,5 @@
 /********************************************************************\
- * gnc-csv-imp-trans.cpp - import transactions from csv files       *
+ * gnc-imp-props-tx.cpp - import transactions from csv files        *
  *                                                                  *
  * This program is free software; you can redistribute it and/or    *
  * modify it under the terms of the GNU General Public License as   *
@@ -41,7 +41,7 @@ extern "C" {
 #include <string>
 #include <boost/regex.hpp>
 #include <boost/regex/icu.hpp>
-#include "gnc-trans-props.hpp"
+#include "gnc-imp-props-tx.hpp"
 
 G_GNUC_UNUSED static QofLogModule log_module = GNC_MOD_IMPORT;
 
diff --git a/gnucash/import-export/csv-imp/gnc-trans-props.hpp b/gnucash/import-export/csv-imp/gnc-imp-props-tx.hpp
similarity index 98%
rename from gnucash/import-export/csv-imp/gnc-trans-props.hpp
rename to gnucash/import-export/csv-imp/gnc-imp-props-tx.hpp
index 47c23ba..ee00529 100644
--- a/gnucash/import-export/csv-imp/gnc-trans-props.hpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-props-tx.hpp
@@ -1,6 +1,6 @@
 /********************************************************************\
- * gnc-trans-props.hpp - encapsulate transaction properties for use *
- *                       in the csv importer                        *
+ * gnc-imp-props-tx.hpp - encapsulate transaction properties for    *
+ *                        use in the csv importer                   *
  *                                                                  *
  * This program is free software; you can redistribute it and/or    *
  * modify it under the terms of the GNU General Public License as   *
diff --git a/gnucash/import-export/csv-imp/gnc-csv-price-import-settings.cpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.cpp
similarity index 97%
rename from gnucash/import-export/csv-imp/gnc-csv-price-import-settings.cpp
rename to gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.cpp
index 8ebe9eb..0f985ed 100644
--- a/gnucash/import-export/csv-imp/gnc-csv-price-import-settings.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.cpp
@@ -1,5 +1,5 @@
 /*******************************************************************\
- * gnc-csv-price-import-settings.cpp -- Price CSV Import Settings   *
+ * gnc-imp-settings-csv-price.cpp -- Price CSV Import Settings      *
  *                                                                  *
  * Copyright (C) 2017 Robert Fewell                                 *
  *                                                                  *
@@ -20,14 +20,14 @@
  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
 \********************************************************************/
-/** @file gnc-csv-price-import-settings.cpp
+/** @file gnc-imp-settings-csv-price.cpp
     @brief CSV Import Settings
     @author Copyright (c) 2014 Robert Fewell
     @author Copyright (c) 2016 Geert Janssens
 */
 
-#include "gnc-csv-import-settings.hpp"
-#include "gnc-csv-price-import-settings.hpp"
+#include "gnc-imp-settings-csv.hpp"
+#include "gnc-imp-settings-csv-price.hpp"
 #include <sstream>
 
 extern "C"
diff --git a/gnucash/import-export/csv-imp/gnc-csv-price-import-settings.hpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.hpp
similarity index 94%
rename from gnucash/import-export/csv-imp/gnc-csv-price-import-settings.hpp
rename to gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.hpp
index e0d52b4..f1833e5 100644
--- a/gnucash/import-export/csv-imp/gnc-csv-price-import-settings.hpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.hpp
@@ -1,5 +1,5 @@
 /*******************************************************************\
- * gnc-csv-price-import-settings.hpp  -- Price CSV Import Settings  *
+ * gnc-imp-settings-csv-price.hpp  -- Price CSV Import Settings     *
  *                                                                  *
  * Copyright (C) 2017 Robert Fewell                                 *
  *                                                                  *
@@ -20,7 +20,7 @@
  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
 \********************************************************************/
-/** @file gnc-csv-price-import-settings.hpp
+/** @file gnc-imp-settings-csv-price.hpp
     @brief CSV Import Settings
     @author Copyright (c) 2014 Robert Fewell
     @author Copyright (c) 2016 Geert Janssens
@@ -36,9 +36,9 @@ extern "C" {
 
 #include <string>
 #include <vector>
-#include "gnc-price-props.hpp"
+#include "gnc-imp-props-price.hpp"
 #include "gnc-tokenizer.hpp"
-#include "gnc-csv-import-settings.hpp"
+#include "gnc-imp-settings-csv.hpp"
 
 struct CsvPriceImpSettings : public CsvImportSettings
 {
diff --git a/gnucash/import-export/csv-imp/gnc-csv-trans-import-settings.cpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp
similarity index 97%
rename from gnucash/import-export/csv-imp/gnc-csv-trans-import-settings.cpp
rename to gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp
index 17ac2b7..da08573 100644
--- a/gnucash/import-export/csv-imp/gnc-csv-trans-import-settings.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp
@@ -1,5 +1,5 @@
 /*******************************************************************\
- * gnc-csv-trans-import-settings.cpp -- Trans CSV Import Settings   *
+ * gnc-imp-settings-csv-tx.cpp -- Trans CSV Import Settings      *
  *                                                                  *
  * Copyright (C) 2014 Robert Fewell                                 *
  *                                                                  *
@@ -20,14 +20,14 @@
  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
 \********************************************************************/
-/** @file gnc-csv-trans-import-settings.cpp
+/** @file gnc-imp-settings-csv-tx.cpp
     @brief CSV Import Settings
     @author Copyright (c) 2014 Robert Fewell
     @author Copyright (c) 2016 Geert Janssens
 */
 
-#include "gnc-csv-import-settings.hpp"
-#include "gnc-csv-trans-import-settings.hpp"
+#include "gnc-imp-settings-csv.hpp"
+#include "gnc-imp-settings-csv-tx.hpp"
 #include <sstream>
 
 extern "C"
diff --git a/gnucash/import-export/csv-imp/gnc-csv-trans-import-settings.hpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.hpp
similarity index 93%
rename from gnucash/import-export/csv-imp/gnc-csv-trans-import-settings.hpp
rename to gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.hpp
index c93ef3a..254a41d 100644
--- a/gnucash/import-export/csv-imp/gnc-csv-trans-import-settings.hpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.hpp
@@ -1,5 +1,5 @@
 /*******************************************************************\
- * gnc-csv-trans-import-settings.hpp  -- Trans CSV Import Settings  *
+ * gnc-imp-settings-csv-tx.hpp  -- Trans CSV Import Settings  *
  *                                                                  *
  * Copyright (C) 2017 Robert Fewell                                 *
  *                                                                  *
@@ -20,7 +20,7 @@
  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
 \********************************************************************/
-/** @file gnc-csv-trans-import-settings.hpp
+/** @file gnc-imp-settings-csv-tx.hpp
     @brief CSV Import Settings
     @author Copyright (c) 2014 Robert Fewell
     @author Copyright (c) 2016 Geert Janssens
@@ -36,9 +36,9 @@ extern "C" {
 
 #include <string>
 #include <vector>
-#include "gnc-trans-props.hpp"
+#include "gnc-imp-props-tx.hpp"
 #include "gnc-tokenizer.hpp"
-#include "gnc-csv-import-settings.hpp"
+#include "gnc-imp-settings-csv.hpp"
 
 struct CsvTransImpSettings : public CsvImportSettings
 {
diff --git a/gnucash/import-export/csv-imp/gnc-csv-import-settings.cpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv.cpp
similarity index 98%
rename from gnucash/import-export/csv-imp/gnc-csv-import-settings.cpp
rename to gnucash/import-export/csv-imp/gnc-imp-settings-csv.cpp
index 7c5e362..d0ab9e9 100644
--- a/gnucash/import-export/csv-imp/gnc-csv-import-settings.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv.cpp
@@ -1,5 +1,5 @@
 /*******************************************************************\
- * gnc-csv-import-settings.cpp -- Save and Load CSV Import Settings *
+ * gnc-imp-settings-csv.cpp -- Save and Load CSV Import Settings *
  *                                                                  *
  * Copyright (C) 2014 Robert Fewell                                 *
  *                                                                  *
@@ -20,13 +20,13 @@
  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
 \********************************************************************/
-/** @file gnc-csv-import-settings.cpp
+/** @file gnc-imp-settings-csv.cpp
     @brief CSV Import Settings
     @author Copyright (c) 2014 Robert Fewell
     @author Copyright (c) 2016 Geert Janssens
 */
 
-#include "gnc-csv-import-settings.hpp"
+#include "gnc-imp-settings-csv.hpp"
 #include <sstream>
 
 extern "C"
diff --git a/gnucash/import-export/csv-imp/gnc-csv-import-settings.hpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv.hpp
similarity index 97%
rename from gnucash/import-export/csv-imp/gnc-csv-import-settings.hpp
rename to gnucash/import-export/csv-imp/gnc-imp-settings-csv.hpp
index 6102fed..c051cc1 100644
--- a/gnucash/import-export/csv-imp/gnc-csv-import-settings.hpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv.hpp
@@ -1,5 +1,5 @@
 /*******************************************************************\
- * gnc-csv-import-settings.hpp -- Save and Load CSV Import Settings *
+ * gnc-imp-settings-csv.hpp -- Save and Load CSV Import Settings *
  *                                                                  *
  * Copyright (C) 2014 Robert Fewell                                 *
  *                                                                  *
@@ -20,7 +20,7 @@
  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
 \********************************************************************/
-/** @file gnc-csv-import-settings.hpp
+/** @file gnc-imp-settings-csv.hpp
     @brief CSV Import Settings
     @author Copyright (c) 2014 Robert Fewell
     @author Copyright (c) 2016 Geert Janssens
diff --git a/gnucash/import-export/csv-imp/gnc-price-import.cpp b/gnucash/import-export/csv-imp/gnc-import-price.cpp
similarity index 99%
rename from gnucash/import-export/csv-imp/gnc-price-import.cpp
rename to gnucash/import-export/csv-imp/gnc-import-price.cpp
index 0bc1ead..f4aa645 100644
--- a/gnucash/import-export/csv-imp/gnc-price-import.cpp
+++ b/gnucash/import-export/csv-imp/gnc-import-price.cpp
@@ -1,5 +1,5 @@
 /********************************************************************\
- * gnc-price-import.cpp - import prices from csv files              *
+ * gnc-import-price.cpp - import prices from csv files              *
  *                                                                  *
  * This program is free software; you can redistribute it and/or    *
  * modify it under the terms of the GNU General Public License as   *
@@ -38,11 +38,11 @@ extern "C" {
 #include <boost/regex.hpp>
 #include <boost/regex/icu.hpp>
 
-#include "gnc-price-import.hpp"
-#include "gnc-price-props.hpp"
-#include "gnc-csv-tokenizer.hpp"
-#include "gnc-fw-tokenizer.hpp"
-#include "gnc-csv-price-import-settings.hpp"
+#include "gnc-import-price.hpp"
+#include "gnc-imp-props-price.hpp"
+#include "gnc-tokenizer-csv.hpp"
+#include "gnc-tokenizer-fw.hpp"
+#include "gnc-imp-settings-csv-price.hpp"
 
 G_GNUC_UNUSED static QofLogModule log_module = GNC_MOD_IMPORT;
 
diff --git a/gnucash/import-export/csv-imp/gnc-price-import.hpp b/gnucash/import-export/csv-imp/gnc-import-price.hpp
similarity index 97%
rename from gnucash/import-export/csv-imp/gnc-price-import.hpp
rename to gnucash/import-export/csv-imp/gnc-import-price.hpp
index 7d181ec..38f54cc 100644
--- a/gnucash/import-export/csv-imp/gnc-price-import.hpp
+++ b/gnucash/import-export/csv-imp/gnc-import-price.hpp
@@ -1,5 +1,5 @@
 /********************************************************************\
- * gnc-price-import.hpp - import prices from csv files              *
+ * gnc-import-price.hpp - import prices from csv files              *
  *                                                                  *
  * This program is free software; you can redistribute it and/or    *
  * modify it under the terms of the GNU General Public License as   *
@@ -22,7 +22,7 @@
 /** @file
      @brief Class to import prices from CSV or fixed width files
      *
-     gnc-price-import.hpp
+     gnc-import-price.hpp
      @author Copyright (c) 2015 Geert Janssens <geert at kobaltwit.be>
      @author Copyright (c) 2017 Robert Fewell
  */
@@ -41,8 +41,8 @@ extern "C" {
 #include <memory>
 
 #include "gnc-tokenizer.hpp"
-#include "gnc-price-props.hpp"
-#include "gnc-csv-price-import-settings.hpp"
+#include "gnc-imp-props-price.hpp"
+#include "gnc-imp-settings-csv-price.hpp"
 #include <boost/optional.hpp>
 
 /* A set of currency formats that the user sees. */
diff --git a/gnucash/import-export/csv-imp/gnc-tx-import.cpp b/gnucash/import-export/csv-imp/gnc-import-tx.cpp
similarity index 99%
rename from gnucash/import-export/csv-imp/gnc-tx-import.cpp
rename to gnucash/import-export/csv-imp/gnc-import-tx.cpp
index 3b65944..ae9383e 100644
--- a/gnucash/import-export/csv-imp/gnc-tx-import.cpp
+++ b/gnucash/import-export/csv-imp/gnc-import-tx.cpp
@@ -1,5 +1,5 @@
 /********************************************************************\
- * gnc-tx-import.cpp - import transactions from csv or fixed-width  *
+ * gnc-import-tx.cpp - import transactions from csv or fixed-width  *
  *                     files                                        *
  *                                                                  *
  * This program is free software; you can redistribute it and/or    *
@@ -35,11 +35,11 @@ extern "C" {
 #include <boost/regex.hpp>
 #include <boost/regex/icu.hpp>
 
-#include "gnc-tx-import.hpp"
-#include "gnc-trans-props.hpp"
-#include "gnc-csv-tokenizer.hpp"
-#include "gnc-fw-tokenizer.hpp"
-#include "gnc-csv-trans-import-settings.hpp"
+#include "gnc-import-tx.hpp"
+#include "gnc-imp-props-tx.hpp"
+#include "gnc-tokenizer-csv.hpp"
+#include "gnc-tokenizer-fw.hpp"
+#include "gnc-imp-settings-csv-tx.hpp"
 
 G_GNUC_UNUSED static QofLogModule log_module = GNC_MOD_IMPORT;
 
diff --git a/gnucash/import-export/csv-imp/gnc-tx-import.hpp b/gnucash/import-export/csv-imp/gnc-import-tx.hpp
similarity index 97%
rename from gnucash/import-export/csv-imp/gnc-tx-import.hpp
rename to gnucash/import-export/csv-imp/gnc-import-tx.hpp
index 4fc339c..0e20854 100644
--- a/gnucash/import-export/csv-imp/gnc-tx-import.hpp
+++ b/gnucash/import-export/csv-imp/gnc-import-tx.hpp
@@ -1,5 +1,5 @@
 /********************************************************************\
- * gnc-tx-import.hpp - import transactions from csv files       *
+ * gnc-import-tx.hpp - import transactions from csv files           *
  *                                                                  *
  * This program is free software; you can redistribute it and/or    *
  * modify it under the terms of the GNU General Public License as   *
@@ -22,7 +22,7 @@
 /** @file
      @brief Class to import transactions from CSV or fixed width files
      *
-     gnc-tx-import.hpp
+     gnc-import-tx.hpp
      @author Copyright (c) 2015 Geert Janssens <geert at kobaltwit.be>
  */
 
@@ -42,8 +42,8 @@ extern "C" {
 #include <memory>
 
 #include "gnc-tokenizer.hpp"
-#include "gnc-trans-props.hpp"
-#include "gnc-csv-trans-import-settings.hpp"
+#include "gnc-imp-props-tx.hpp"
+#include "gnc-imp-settings-csv-tx.hpp"
 #include <boost/optional.hpp>
 
 
diff --git a/gnucash/import-export/csv-imp/gnc-csv-tokenizer.cpp b/gnucash/import-export/csv-imp/gnc-tokenizer-csv.cpp
similarity index 98%
rename from gnucash/import-export/csv-imp/gnc-csv-tokenizer.cpp
rename to gnucash/import-export/csv-imp/gnc-tokenizer-csv.cpp
index 4812511..402900a 100644
--- a/gnucash/import-export/csv-imp/gnc-csv-tokenizer.cpp
+++ b/gnucash/import-export/csv-imp/gnc-tokenizer-csv.cpp
@@ -1,4 +1,4 @@
-#include "gnc-csv-tokenizer.hpp"
+#include "gnc-tokenizer-csv.hpp"
 
 #include <iostream>
 #include <fstream>      // fstream
diff --git a/gnucash/import-export/csv-imp/gnc-csv-tokenizer.hpp b/gnucash/import-export/csv-imp/gnc-tokenizer-csv.hpp
similarity index 96%
rename from gnucash/import-export/csv-imp/gnc-csv-tokenizer.hpp
rename to gnucash/import-export/csv-imp/gnc-tokenizer-csv.hpp
index af1f37b..ef75632 100644
--- a/gnucash/import-export/csv-imp/gnc-csv-tokenizer.hpp
+++ b/gnucash/import-export/csv-imp/gnc-tokenizer-csv.hpp
@@ -1,5 +1,5 @@
 /********************************************************************\
- * gnc-csv-tokenizer.hpp - takes a csv file and converts it into a  *
+ * gnc-tokenizer-csv.hpp - takes a csv file and converts it into a  *
  *                         two-dimensional vector of strings (table)*
  *                                                                  *
  * This program is free software; you can redistribute it and/or    *
@@ -27,7 +27,7 @@
      However, no gnucash specific interpretation is done yet, that's up
      to the code using this class.
      *
-     gnc-csv-tokenizer.hpp
+     gnc-tokenizer-csv.hpp
      @author Copyright (c) 2015 Geert Janssens <geert at kobaltwit.be>
  */
 
diff --git a/gnucash/import-export/csv-imp/gnc-dummy-tokenizer.cpp b/gnucash/import-export/csv-imp/gnc-tokenizer-dummy.cpp
similarity index 94%
rename from gnucash/import-export/csv-imp/gnc-dummy-tokenizer.cpp
rename to gnucash/import-export/csv-imp/gnc-tokenizer-dummy.cpp
index c54517e..1da593b 100644
--- a/gnucash/import-export/csv-imp/gnc-dummy-tokenizer.cpp
+++ b/gnucash/import-export/csv-imp/gnc-tokenizer-dummy.cpp
@@ -1,4 +1,4 @@
-#include "gnc-dummy-tokenizer.hpp"
+#include "gnc-tokenizer-dummy.hpp"
 
 #include <iostream>
 #include <fstream>      // fstream
diff --git a/gnucash/import-export/csv-imp/gnc-dummy-tokenizer.hpp b/gnucash/import-export/csv-imp/gnc-tokenizer-dummy.hpp
similarity index 91%
rename from gnucash/import-export/csv-imp/gnc-dummy-tokenizer.hpp
rename to gnucash/import-export/csv-imp/gnc-tokenizer-dummy.hpp
index 805d86e..5bedfee 100644
--- a/gnucash/import-export/csv-imp/gnc-dummy-tokenizer.hpp
+++ b/gnucash/import-export/csv-imp/gnc-tokenizer-dummy.hpp
@@ -1,8 +1,7 @@
 /********************************************************************\
- * gnc-dummy-tokenizer.hpp - takes a file and converts it into a       *
+ * gnc-tokenizer-dummy.hpp - takes a file and converts it into a    *
  *                        two-dimensional vector of strings (table) *
- *                        splitting the contents on fixed width     *
- *                        positions                                 *
+ *                        each row will only have one single column *
  *                                                                  *
  * This program is free software; you can redistribute it and/or    *
  * modify it under the terms of the GNU General Public License as   *
@@ -29,7 +28,7 @@
      This is just a dummy that can be used as long as the file format isn't
      specified yet by the user.
      *
-     gnc-dummy-tokenizer.hpp
+     gnc-tokenizer-dummy.hpp
      @author Copyright (c) 2016 Geert Janssens <geert at kobaltwit.be>
  */
 
diff --git a/gnucash/import-export/csv-imp/gnc-fw-tokenizer.cpp b/gnucash/import-export/csv-imp/gnc-tokenizer-fw.cpp
similarity index 99%
rename from gnucash/import-export/csv-imp/gnc-fw-tokenizer.cpp
rename to gnucash/import-export/csv-imp/gnc-tokenizer-fw.cpp
index 18fb2f5..9ec8612 100644
--- a/gnucash/import-export/csv-imp/gnc-fw-tokenizer.cpp
+++ b/gnucash/import-export/csv-imp/gnc-tokenizer-fw.cpp
@@ -1,4 +1,4 @@
-#include "gnc-fw-tokenizer.hpp"
+#include "gnc-tokenizer-fw.hpp"
 
 #include <iostream>
 #include <fstream>      // fstream
diff --git a/gnucash/import-export/csv-imp/gnc-fw-tokenizer.hpp b/gnucash/import-export/csv-imp/gnc-tokenizer-fw.hpp
similarity index 97%
rename from gnucash/import-export/csv-imp/gnc-fw-tokenizer.hpp
rename to gnucash/import-export/csv-imp/gnc-tokenizer-fw.hpp
index 6465a8c..d2eca2e 100644
--- a/gnucash/import-export/csv-imp/gnc-fw-tokenizer.hpp
+++ b/gnucash/import-export/csv-imp/gnc-tokenizer-fw.hpp
@@ -1,5 +1,5 @@
 /********************************************************************\
- * gnc-fw-tokenizer.hpp - takes a file and converts it into a       *
+ * gnc-tokenizer-fw.hpp - takes a file and converts it into a       *
  *                        two-dimensional vector of strings (table) *
  *                        splitting the contents on fixed width     *
  *                        positions                                 *
@@ -30,7 +30,7 @@
      However, no gnucash specific interpretation is done yet, that's up
      to the code using this class.
      *
-     gnc-fw-tokenizer.hpp
+     gnc-tokenizer-fw.hpp
      @author Copyright (c) 2015 Geert Janssens <geert at kobaltwit.be>
  */
 
diff --git a/gnucash/import-export/csv-imp/gnc-tokenizer.cpp b/gnucash/import-export/csv-imp/gnc-tokenizer.cpp
index f9f27e1..7b14a2d 100644
--- a/gnucash/import-export/csv-imp/gnc-tokenizer.cpp
+++ b/gnucash/import-export/csv-imp/gnc-tokenizer.cpp
@@ -1,7 +1,7 @@
 #include "gnc-tokenizer.hpp"
-#include "gnc-csv-tokenizer.hpp"
-#include "gnc-dummy-tokenizer.hpp"
-#include "gnc-fw-tokenizer.hpp"
+#include "gnc-tokenizer-csv.hpp"
+#include "gnc-tokenizer-dummy.hpp"
+#include "gnc-tokenizer-fw.hpp"
 
 #include <iostream>
 #include <fstream>      // fstream
diff --git a/gnucash/import-export/csv-imp/test/test-tokenizer.cpp b/gnucash/import-export/csv-imp/test/test-tokenizer.cpp
index 9778475..c97902a 100644
--- a/gnucash/import-export/csv-imp/test/test-tokenizer.cpp
+++ b/gnucash/import-export/csv-imp/test/test-tokenizer.cpp
@@ -26,8 +26,8 @@
 
 #include <guid.hpp>
 #include "../gnc-tokenizer.hpp"
-#include "../gnc-csv-tokenizer.hpp"
-#include "../gnc-fw-tokenizer.hpp"
+#include "../gnc-tokenizer-csv.hpp"
+#include "../gnc-tokenizer-fw.hpp"
 #include <gtest/gtest.h>
 #include <iostream>
 #include <fstream>      // fstream
diff --git a/gnucash/import-export/csv-imp/test/test-tx-import.cpp b/gnucash/import-export/csv-imp/test/test-tx-import.cpp
index 76a4362..60d7ec1 100644
--- a/gnucash/import-export/csv-imp/test/test-tx-import.cpp
+++ b/gnucash/import-export/csv-imp/test/test-tx-import.cpp
@@ -24,8 +24,8 @@
 
 #include <guid.hpp>
 #include "../gnc-tokenizer.hpp"
-#include "../gnc-csv-tokenizer.hpp"
-#include "../gnc-fw-tokenizer.hpp"
+#include "../gnc-tokenizer-csv.hpp"
+#include "../gnc-tokenizer-fw.hpp"
 #include <gtest/gtest.h>
 #include <iostream>
 #include <fstream>      // fstream
@@ -34,7 +34,7 @@
 #include <stdlib.h>     /* getenv */
 
 /* Add specific headers for this class */
-#include "../gnc-tx-import.hpp"
+#include "../gnc-import-tx.hpp"
 
 //typedef struct
 //{
diff --git a/po/POTFILES.in b/po/POTFILES.in
index d9f7bc8..0e02226 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -307,19 +307,19 @@ gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
 gnucash/import-export/csv-imp/csv-account-import.c
 gnucash/import-export/csv-imp/gnc-csv-account-map.c
 gnucash/import-export/csv-imp/gnc-csv-gnumeric-popup.c
-gnucash/import-export/csv-imp/gnc-csv-import-settings.cpp
-gnucash/import-export/csv-imp/gnc-csv-price-import-settings.cpp
-gnucash/import-export/csv-imp/gnc-csv-tokenizer.cpp
-gnucash/import-export/csv-imp/gnc-csv-trans-import-settings.cpp
-gnucash/import-export/csv-imp/gnc-dummy-tokenizer.cpp
-gnucash/import-export/csv-imp/gnc-fw-tokenizer.cpp
+gnucash/import-export/csv-imp/gnc-import-price.cpp
+gnucash/import-export/csv-imp/gnc-import-tx.cpp
+gnucash/import-export/csv-imp/gnc-imp-props-price.cpp
+gnucash/import-export/csv-imp/gnc-imp-props-tx.cpp
+gnucash/import-export/csv-imp/gnc-imp-settings-csv.cpp
+gnucash/import-export/csv-imp/gnc-imp-settings-csv-price.cpp
+gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp
 gnucash/import-export/csv-imp/gncmod-csv-import.c
 gnucash/import-export/csv-imp/gnc-plugin-csv-import.c
-gnucash/import-export/csv-imp/gnc-price-import.cpp
-gnucash/import-export/csv-imp/gnc-price-props.cpp
 gnucash/import-export/csv-imp/gnc-tokenizer.cpp
-gnucash/import-export/csv-imp/gnc-trans-props.cpp
-gnucash/import-export/csv-imp/gnc-tx-import.cpp
+gnucash/import-export/csv-imp/gnc-tokenizer-csv.cpp
+gnucash/import-export/csv-imp/gnc-tokenizer-dummy.cpp
+gnucash/import-export/csv-imp/gnc-tokenizer-fw.cpp
 gnucash/import-export/customer-import/dialog-customer-import.c
 gnucash/import-export/customer-import/dialog-customer-import-gui.c
 gnucash/import-export/customer-import/gncmod-customer-import.c

commit e71f561236787f0ca7d1bb812c5959d0c83476a8
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Thu Mar 8 15:31:12 2018 +0100

    Bug 793467 - GnuCash crashes when trying to open a binary file instead of a CSV
    
    The cause was an uncaught exception from boost::tokenizer.
    Fix and add test case.

diff --git a/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp b/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp
index 53643ee..0db5c64 100644
--- a/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp
+++ b/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp
@@ -717,7 +717,7 @@ CsvImpPriceAssist::file_confirm_cb ()
     catch (std::range_error &e)
     {
         /* Parsing failed ... */
-        gnc_error_dialog (GTK_WINDOW(csv_imp_asst), "%s", e.what());
+        gnc_error_dialog (GTK_WINDOW(csv_imp_asst), "%s", _(e.what()));
         return;
     }
     /* Get settings store and populate */
diff --git a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
index 0d33e11..c9100de 100644
--- a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
+++ b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
@@ -723,7 +723,7 @@ CsvImpTransAssist::file_confirm_cb ()
     catch (std::range_error &e)
     {
         /* Parsing failed ... */
-        gnc_error_dialog (GTK_WINDOW (csv_imp_asst), "%s", e.what());
+        gnc_error_dialog (GTK_WINDOW (csv_imp_asst), "%s", _(e.what()));
         return;
     }
 
diff --git a/gnucash/import-export/csv-imp/gnc-csv-tokenizer.cpp b/gnucash/import-export/csv-imp/gnc-csv-tokenizer.cpp
index 54532c7..4812511 100644
--- a/gnucash/import-export/csv-imp/gnc-csv-tokenizer.cpp
+++ b/gnucash/import-export/csv-imp/gnc-csv-tokenizer.cpp
@@ -11,6 +11,10 @@
 #include <boost/locale.hpp>
 #include <boost/algorithm/string.hpp>
 
+extern "C" {
+    #include <glib/gi18n.h>
+}
+
 void
 GncCsvTokenizer::set_separators(const std::string& separators)
 {
@@ -34,33 +38,40 @@ int GncCsvTokenizer::tokenize()
     m_tokenized_contents.clear();
     std::istringstream in_stream(m_utf8_contents);
 
-    while (std::getline (in_stream, buffer))
+    try
     {
-        // --- deal with line breaks in quoted strings
-        buffer = boost::trim_copy (buffer); // Removes trailing newline and spaces
-        last_quote = buffer.find_first_of('"');
-        while (last_quote != std::string::npos)
+        while (std::getline (in_stream, buffer))
         {
-            if (last_quote == 0) // Test separately because last_quote - 1 would be out of range
-                inside_quotes = !inside_quotes;
-            else if (buffer[ last_quote - 1 ] != '\\')
-                inside_quotes = !inside_quotes;
+            // --- deal with line breaks in quoted strings
+            buffer = boost::trim_copy (buffer); // Removes trailing newline and spaces
+            last_quote = buffer.find_first_of('"');
+            while (last_quote != std::string::npos)
+            {
+                if (last_quote == 0) // Test separately because last_quote - 1 would be out of range
+                    inside_quotes = !inside_quotes;
+                else if (buffer[ last_quote - 1 ] != '\\')
+                    inside_quotes = !inside_quotes;
 
-            last_quote = buffer.find_first_of('"',last_quote+1);
-        }
+                last_quote = buffer.find_first_of('"',last_quote+1);
+            }
 
-        line.append(buffer);
-        if (inside_quotes)
-        {
-            line.append(" ");
-            continue;
-        }
-        // ---
+            line.append(buffer);
+            if (inside_quotes)
+            {
+                line.append(" ");
+                continue;
+            }
+            // ---
 
-        Tokenizer tok(line, sep);
-        vec.assign(tok.begin(),tok.end());
-        m_tokenized_contents.push_back(vec);
-        line.clear();
+            Tokenizer tok(line, sep);
+            vec.assign(tok.begin(),tok.end());
+            m_tokenized_contents.push_back(vec);
+            line.clear();
+        }
+    }
+    catch (boost::escaped_list_error &e)
+    {
+        throw (std::range_error N_("There was an error parsing the file."));
     }
 
     return 0;
diff --git a/gnucash/import-export/csv-imp/gnc-tx-import.cpp b/gnucash/import-export/csv-imp/gnc-tx-import.cpp
index a43f29c..3b65944 100644
--- a/gnucash/import-export/csv-imp/gnc-tx-import.cpp
+++ b/gnucash/import-export/csv-imp/gnc-tx-import.cpp
@@ -404,7 +404,7 @@ void GncTxImport::tokenize (bool guessColTypes)
     /* If it failed, generate an error. */
     if (m_parsed_lines.size() == 0)
     {
-        throw (std::range_error ("Tokenizing failed."));
+        throw (std::range_error (N_("There was an error parsing the file.")));
         return;
     }
 
diff --git a/gnucash/import-export/csv-imp/test/test-tokenizer.cpp b/gnucash/import-export/csv-imp/test/test-tokenizer.cpp
index a4cf1a9..9778475 100644
--- a/gnucash/import-export/csv-imp/test/test-tokenizer.cpp
+++ b/gnucash/import-export/csv-imp/test/test-tokenizer.cpp
@@ -138,6 +138,17 @@ TEST_F (GncTokenizerTest, tokenize_from_csv_file)
  * independently.
  */
 
+/* First test whether we're properly catching boost::tokenizer throws
+ * This happens when the input data has invalid escape sequences */
+TEST_F (GncTokenizerTest, tokenize_binary_data)
+{
+    GncCsvTokenizer *csvtok = dynamic_cast<GncCsvTokenizer*>(csv_tok.get());
+    csvtok->set_separators (",");
+
+    set_utf8_contents (csv_tok, R"(\764Test,Something)");
+    EXPECT_THROW (csv_tok->tokenize(), std::range_error);
+}
+
 /* This helper function will run the parse step on the given data
  * with the parser as configured by the calling test function.
  * This allows the same code to be used with different csv test strings

commit 6fe7d8854836ceea2b58914511b7743b2dcdd1d4
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Thu Mar 8 14:24:02 2018 +0100

    Enable test to handle attempt to load non-existing file in csv importer

diff --git a/gnucash/import-export/csv-imp/gnc-tokenizer.hpp b/gnucash/import-export/csv-imp/gnc-tokenizer.hpp
index c7916df..fb68bd3 100644
--- a/gnucash/import-export/csv-imp/gnc-tokenizer.hpp
+++ b/gnucash/import-export/csv-imp/gnc-tokenizer.hpp
@@ -73,7 +73,7 @@ public:
     const std::string& encoding();
     virtual int  tokenize() = 0;
     const std::vector<StrVec>& get_tokens();
-    
+
 protected:
     std::string m_utf8_contents;
     std::vector<StrVec> m_tokenized_contents;
diff --git a/gnucash/import-export/csv-imp/test/test-tokenizer.cpp b/gnucash/import-export/csv-imp/test/test-tokenizer.cpp
index 65c2d27..a4cf1a9 100644
--- a/gnucash/import-export/csv-imp/test/test-tokenizer.cpp
+++ b/gnucash/import-export/csv-imp/test/test-tokenizer.cpp
@@ -84,16 +84,15 @@ std::string GncTokenizerTest::get_filepath(const std::string& filename)
         return std::string(srcdir) + "/" + filename;
 }
 
-//TEST_F (GncTokenizerTest, load_file_nonexisting)
-//{
-//
-//    auto file1 = get_filepath ("notexist.csv");
-//
-//    /* Test loading of a non-existing file */
-//    // FIXME determine what is actually thrown as I can't find it by trial and error
-//    EXPECT_THROW (fw_tok->load_file (file1), std::ios_base::failure);
-//    EXPECT_THROW (csv_tok->load_file (file1), std::ios_base::failure);
-//}
+TEST_F (GncTokenizerTest, load_file_nonexisting)
+{
+
+    auto file1 = get_filepath ("notexist.csv");
+
+    /* Test loading of a non-existing file */
+    EXPECT_THROW (fw_tok->load_file (file1), std::ios_base::failure);
+    EXPECT_THROW (csv_tok->load_file (file1), std::ios_base::failure);
+}
 
 TEST_F (GncTokenizerTest, load_file_existing)
 {

commit 89c1534d5184cd3f499fc8e3e654b8eb43583e1b
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Thu Mar 8 14:06:33 2018 +0100

    Csv import - improve memory handling in the assistant class
    
    Make it more RAII, in that whatever the class allocates, it should
    also deallocate. This simplifies a couple of memory handling cases.
    The only exception is the generic import matcher that for some reason
    has chosen to deallocate itself. To be fixed when more importers are
    converted to c++

diff --git a/gnucash/gtkbuilder/assistant-csv-price-import.glade b/gnucash/gtkbuilder/assistant-csv-price-import.glade
index d465787..ed111e6 100644
--- a/gnucash/gtkbuilder/assistant-csv-price-import.glade
+++ b/gnucash/gtkbuilder/assistant-csv-price-import.glade
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
+<!-- Generated with glade 3.20.2 -->
 <interface>
   <requires lib="gtk+" version="3.10"/>
   <object class="GtkAdjustment" id="end_row_adj">
@@ -39,17 +39,11 @@
     <property name="default_width">400</property>
     <property name="default_height">500</property>
     <signal name="apply" handler="csv_price_imp_assist_finish_cb" swapped="no"/>
-    <signal name="cancel" handler="csv_price_imp_assist_cancel_cb" swapped="no"/>
+    <signal name="cancel" handler="csv_price_imp_assist_close_cb" swapped="no"/>
     <signal name="close" handler="csv_price_imp_assist_close_cb" swapped="no"/>
-    <signal name="destroy" handler="csv_price_imp_assist_destroy_cb" swapped="no"/>
+    <signal name="destroy" handler="csv_price_imp_assist_close_cb" swapped="no"/>
     <signal name="prepare" handler="csv_price_imp_assist_prepare_cb" swapped="no"/>
     <child>
-      <placeholder/>
-    </child>
-    <child>
-      <placeholder/>
-    </child>
-    <child>
       <object class="GtkLabel" id="start_page">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
diff --git a/gnucash/gtkbuilder/assistant-csv-trans-import.glade b/gnucash/gtkbuilder/assistant-csv-trans-import.glade
index 3a7300b..157f25d 100644
--- a/gnucash/gtkbuilder/assistant-csv-trans-import.glade
+++ b/gnucash/gtkbuilder/assistant-csv-trans-import.glade
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
+<!-- Generated with glade 3.20.2 -->
 <interface>
   <requires lib="gtk+" version="3.10"/>
   <object class="GtkListStore" id="account_match_store">
@@ -29,9 +29,9 @@
     <property name="default_width">400</property>
     <property name="default_height">500</property>
     <signal name="apply" handler="csv_tximp_assist_finish_cb" swapped="no"/>
-    <signal name="cancel" handler="csv_tximp_assist_cancel_cb" swapped="no"/>
+    <signal name="cancel" handler="csv_tximp_assist_close_cb" swapped="no"/>
     <signal name="close" handler="csv_tximp_assist_close_cb" swapped="no"/>
-    <signal name="destroy" handler="csv_tximp_assist_destroy_cb" swapped="no"/>
+    <signal name="destroy" handler="csv_tximp_assist_close_cb" swapped="no"/>
     <signal name="prepare" handler="csv_tximp_assist_prepare_cb" swapped="no"/>
     <child>
       <object class="GtkLabel" id="start_page">
diff --git a/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp b/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp
index 6cf25bb..53643ee 100644
--- a/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp
+++ b/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp
@@ -76,7 +76,7 @@ class  CsvImpPriceAssist
 {
 public:
     CsvImpPriceAssist ();
-    ~CsvImpPriceAssist () = default;
+    ~CsvImpPriceAssist ();
 
     /* Delete copy and move constructor/assignments
      * We don't want gui elements to be moved around or copied at all */
@@ -188,8 +188,6 @@ private:
 extern "C"
 {
 void csv_price_imp_assist_prepare_cb (GtkAssistant  *assistant, GtkWidget *page, CsvImpPriceAssist* info);
-void csv_price_imp_assist_destroy_cb (GtkWidget *object, CsvImpPriceAssist* info);
-void csv_price_imp_assist_cancel_cb (GtkAssistant *gtkassistant, CsvImpPriceAssist* info);
 void csv_price_imp_assist_close_cb (GtkAssistant *gtkassistant, CsvImpPriceAssist* info);
 void csv_price_imp_assist_finish_cb (GtkAssistant *gtkassistant, CsvImpPriceAssist* info);
 void csv_price_imp_file_confirm_cb (GtkWidget *button, CsvImpPriceAssist *info);
@@ -219,19 +217,6 @@ csv_price_imp_assist_prepare_cb (GtkAssistant *assistant, GtkWidget *page,
 }
 
 void
-csv_price_imp_assist_destroy_cb (GtkWidget *object, CsvImpPriceAssist* info)
-{
-    gnc_unregister_gui_component_by_data (ASSISTANT_CSV_IMPORT_PRICE_CM_CLASS, info);
-    delete info;
-}
-
-void
-csv_price_imp_assist_cancel_cb (GtkAssistant *assistant, CsvImpPriceAssist* info)
-{
-    gnc_close_gui_component_by_data (ASSISTANT_CSV_IMPORT_PRICE_CM_CLASS, info);
-}
-
-void
 csv_price_imp_assist_close_cb (GtkAssistant *assistant, CsvImpPriceAssist* info)
 {
     gnc_close_gui_component_by_data (ASSISTANT_CSV_IMPORT_PRICE_CM_CLASS, info);
@@ -678,6 +663,14 @@ CsvImpPriceAssist::CsvImpPriceAssist ()
     gnc_window_adjust_for_screen (GTK_WINDOW(csv_imp_asst));
 }
 
+/*******************************************************
+ * Assistant Destructor
+ *******************************************************/
+CsvImpPriceAssist::~CsvImpPriceAssist ()
+{
+    gtk_widget_destroy (GTK_WIDGET(csv_imp_asst));
+}
+
 /**************************************************
  * Code related to the file chooser page
  **************************************************/
@@ -1847,14 +1840,15 @@ void
 CsvImpPriceAssist::assist_compmgr_close ()
 {
     gnc_save_window_size (GNC_PREFS_GROUP, GTK_WINDOW(csv_imp_asst));
-    gtk_widget_destroy (GTK_WIDGET(csv_imp_asst));
 }
 
 static void
 csv_price_imp_close_handler (gpointer user_data)
 {
     auto info = (CsvImpPriceAssist*)user_data;
+    gnc_unregister_gui_component_by_data (ASSISTANT_CSV_IMPORT_PRICE_CM_CLASS, info);
     info->assist_compmgr_close();
+    delete info;
 }
 
 /********************************************************************\
diff --git a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
index ecc11e4..0d33e11 100644
--- a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
+++ b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
@@ -79,45 +79,60 @@ static QofLogModule log_module = GNC_MOD_ASSISTANT;
 /* A note on memory management
  *
  * This source file is mixture of several completely different memory models
- * - it defines a c++ class, which is managed the c++ way
- * - the c++ class encapsulates a gtk based dialog, which is managed in
- *   a GObject memory management way.
- * - gnucash manages gui objects via its "Component Manager". Dialogs/windows are
+ * - it defines a c++ class which is managed the c++ way
+ * - the c++ class encapsulates a gtk based assistant which is managed according to
+ *   the GObject/Gtk memory model.
+ * - gnucash manages gui objects via its "Component Manager". Dialogs and windows are
  *   registered with this component manager when they are opened and the component
- *   manager handles the dialog's and window's lifecycle. When the dialog is closed
+ *   manager handles the lifecycle of toplevel widgets. When a dialog is closed
  *   the component manager invokes a close handler which is responsible for cleaning up.
  *
- * Care must be taken in places where these objects intersect. Here is how it is
+ * Care must be taken in places where these models intersect. Here is how it is
  * handled for this source file:
- * - There is only one entry point to start this assistant: gnc_file_csv_trans_import
- * - This function will create the C++ class using the c++ "new" method and will register the
- *   created class pointer in the component manager. This works because the component
- *   manager just stores the pointer, it doesn't act on it directly in any way.
- * - When the assistant finishes or is closed, the component manager will invoke a
+ * - First in the context of the import assistant the gnucash component manager is
+ *   merely a wrapper to keep track of which gui objects exist so they can be cleanly
+ *   destroyed. But the component manager itself doesn't do any memory management
+ *   on the objects it tracks. Instead it delegates this back to the objects themselves
+ *   via callbacks which the objects have to supply. It merely helps in the coordination.
+ *   So we can further ignore it in the memory management discussion.
+ *
+ * - Next there is only one entry point to start this assistant: gnc_file_csv_trans_import
+ * - The full assistant functionality is wrapped in a C++ class using RAII.
+ * - The entry point function will create one instance of this class using the c++
+ *   "new" method. This in turn will create several objects like a (GObject managed)
+ *   GtkAssistant, and a few C++ member objects.
+ * - The entry point function will also register the created object in the
+ *   component manager. This works because the (plain C) component manager just stores
+ *   the (C++) pointer to the object, it doesn't act on it directly in any way.
+ * - When the assistant is closed the component manager will invoke a
  *   close handler on the class pointer. We supply this close handler ourselves
- *   in csv_tximp_close_handler. That function will initiate the gtk dialog (more on that below)
- *   destruction, which in turn will trigger a c++ "delete" on the c++ class. It only
- *   happens after the widget destruction because it may still be used at that point.
- * - Note the component's manager only benefit in this context is that at gnucash shutdown
+ *   in csv_tximp_close_handler. Aside from some component management administration
+ *   the essential action of this function is to (c++) "delete"
+ *   the class object again. As the C++ class implements RAII this destruction will take care
+ *   of freeing all the member objects it manages.
+ * - Note the component manager's only benefit in this context is that at gnucash shutdown
  *   all still open dialogs can be closed cleanly. Whether this benefit is enough to
  *   justify the added complexity is debatable. However currently the calling code is not
- *   c++ yet, so an RAII based alternative using unique_ptr is currently not possible yet.
+ *   c++ yet so we can't use RAII in the calling object to better handle this right now.
  *
- * - Next the c++ class constructor will create widgets in a gobject way. The main widget
- *   is a GtkDialog. All other widgets are configured as children of this dialog widget, making
- *   the dialog responsible for the lifecycle of the widgets.
- * - When this dialog is closed, the component manager will call our "close"
- *   callback function. As mentioned before this close handler will trigger the dialog
- *   widget's destruction using gtk_widget_destroy (matching its gtk_widget_create called by
- *   gtkbuilder). This will free all memory used by the dialog and its child widgets.
- *   It will also will trigger the c++ based destruction of the c++ assistant object as written above.
+ * - Let's zoom in on the c++ member objects and in particular the GtkAssistant and related objects.
+ *   These are created the gtk way in the c++ class constructor. That means the main GtkAssistant widget
+ *   will be responsible for the lifecycle of its child widgets.
+ * - Thanks to the RAII implementation the destruction of this widget is commanded in the c++ class
+ *   destructor. This gets activated when the user clicks the assistant's close button via the component
+ *   manager callback mechanism as mentioned above.
  *
  * - There is one case that needs some additional attention. At some point the csv importer assistant hands
- *   over control to a generic importer (created via gnc_gen_trans_assist_new). This generic importer does
- *   its own memory management. gnc_gen_trans_assist_new creates the generic importer object via g_new0,
- *   so it should be freed at some point with g_free. This is done in the function gnc_gen_trans_list_delete.
- *   If the generic importer is allowed to take over that function will eventually be called internally,
- *   otherwise our own code will run it in CsvImpTransAssist::assist_finish.
+ *   over control to a generic import matcher (created via gnc_gen_trans_assist_new). This generic import
+ *   matcher unfortunately destroys itself when run. However it is not run in all our possible user scenarios.
+ *   This means we sometimes have to free it and sometimes we don't. This could have been
+ *   avoided if we didn't have to track the object across several gtk callback functions and
+ *   instead just create it only right before using it. To handle this we start with RAII:
+ *   the c++ class object assumes ownership of the generic import matcher object and the class destructor will
+ *   attempt to free it. This is safe both if the object is effectively allocated or when it's nullified.
+ *   Then to handle the case were the generic import matcher will free the matcher object, the c++ class object
+ *   will release ownership of the generic pointer object right before starting the generic import matcher.
+ *
  *   TODO this is pretty confusing and should be cleaned up when we rewrite the generic importer.
  */
 
@@ -125,7 +140,7 @@ class  CsvImpTransAssist
 {
 public:
     CsvImpTransAssist ();
-    ~CsvImpTransAssist () = default;
+    ~CsvImpTransAssist ();
 
     /* Delete copy and move constructor/assignments
      * We don't want gui elements to be moved around or copied at all */
@@ -141,7 +156,7 @@ public:
     void assist_doc_page_prepare ();
     void assist_match_page_prepare ();
     void assist_summary_page_prepare ();
-    void assist_finish (bool canceled);
+    void assist_finish ();
     void assist_compmgr_close ();
 
     void file_confirm_cb ();
@@ -252,8 +267,6 @@ private:
 extern "C"
 {
 void csv_tximp_assist_prepare_cb (GtkAssistant  *assistant, GtkWidget *page, CsvImpTransAssist* info);
-void csv_tximp_assist_destroy_cb (GtkWidget *object, CsvImpTransAssist* info);
-void csv_tximp_assist_cancel_cb (GtkAssistant *gtkassistant, CsvImpTransAssist* info);
 void csv_tximp_assist_close_cb (GtkAssistant *gtkassistant, CsvImpTransAssist* info);
 void csv_tximp_assist_finish_cb (GtkAssistant *gtkassistant, CsvImpTransAssist* info);
 void csv_tximp_file_confirm_cb (GtkWidget *button, CsvImpTransAssist *info);
@@ -285,20 +298,6 @@ csv_tximp_assist_prepare_cb (GtkAssistant *assistant, GtkWidget *page,
 }
 
 void
-csv_tximp_assist_destroy_cb (GtkWidget *object, CsvImpTransAssist* info)
-{
-    gnc_unregister_gui_component_by_data (ASSISTANT_CSV_IMPORT_TRANS_CM_CLASS, info);
-    delete info;
-}
-
-void
-csv_tximp_assist_cancel_cb (GtkAssistant *assistant, CsvImpTransAssist* info)
-{
-    info->assist_finish (true);
-    gnc_close_gui_component_by_data (ASSISTANT_CSV_IMPORT_TRANS_CM_CLASS, info);
-}
-
-void
 csv_tximp_assist_close_cb (GtkAssistant *assistant, CsvImpTransAssist* info)
 {
     gnc_close_gui_component_by_data (ASSISTANT_CSV_IMPORT_TRANS_CM_CLASS, info);
@@ -307,7 +306,7 @@ csv_tximp_assist_close_cb (GtkAssistant *assistant, CsvImpTransAssist* info)
 void
 csv_tximp_assist_finish_cb (GtkAssistant *assistant, CsvImpTransAssist* info)
 {
-    info->assist_finish (false);
+    info->assist_finish ();
 }
 
 
@@ -661,6 +660,21 @@ CsvImpTransAssist::CsvImpTransAssist ()
     new_book = gnc_is_new_book();
 }
 
+
+/*******************************************************
+ * Assistant Destructor
+ *******************************************************/
+CsvImpTransAssist::~CsvImpTransAssist ()
+{
+    /* This function is safe to call on a null pointer */
+    gnc_gen_trans_list_delete (gnc_csv_importer_gui);
+    /* The call above frees gnc_csv_importer_gui but can't nullify it.
+     * Do it here so noone accidentally can access it still */
+    gnc_csv_importer_gui = nullptr;
+    gtk_widget_destroy (GTK_WIDGET(csv_imp_asst));
+}
+
+
 /**************************************************
  * Code related to the file chooser page
  **************************************************/
@@ -1940,7 +1954,7 @@ CsvImpTransAssist::assist_doc_page_prepare ()
     cancel_button = gtk_button_new_with_mnemonic (_("_Cancel"));
     gtk_assistant_add_action_widget (csv_imp_asst, cancel_button);
     g_signal_connect (cancel_button, "clicked",
-                     G_CALLBACK(csv_tximp_assist_cancel_cb), this);
+                     G_CALLBACK(csv_tximp_assist_close_cb), this);
     gtk_widget_show (GTK_WIDGET(cancel_button));
 }
 
@@ -2031,18 +2045,21 @@ CsvImpTransAssist::assist_prepare_cb (GtkWidget *page)
 
 
 void
-CsvImpTransAssist::assist_finish (bool canceled)
+CsvImpTransAssist::assist_finish ()
 {
     /* Start the import */
-    if (canceled || tx_imp->m_transactions.empty())
+    if (!tx_imp->m_transactions.empty())
     {
-        gnc_gen_trans_list_delete (gnc_csv_importer_gui);
-        /* The call above frees gnc_csv_importer_gui. NULL it here
-         * so noone accidentally can use access it still */
-        gnc_csv_importer_gui = NULL;
+        /* The call to gnc_gen_trans_assist_start below will free the
+         * object passed into it. To avoid our c++ destructor from
+         * attempting a second free on that object, we'll release
+         * our own reference to it here  before passing it to
+         * gnc_gen_trans_assist_start.
+         */
+        auto local_csv_imp_gui = gnc_csv_importer_gui;
+        gnc_csv_importer_gui = nullptr;
+        gnc_gen_trans_assist_start (local_csv_imp_gui);
     }
-    else
-        gnc_gen_trans_assist_start (gnc_csv_importer_gui);
 }
 
 
@@ -2050,7 +2067,6 @@ void
 CsvImpTransAssist::assist_compmgr_close ()
 {
     gnc_save_window_size (GNC_PREFS_GROUP, GTK_WINDOW(csv_imp_asst));
-    gtk_widget_destroy (GTK_WIDGET(csv_imp_asst));
 }
 
 
@@ -2058,7 +2074,9 @@ static void
 csv_tximp_close_handler (gpointer user_data)
 {
     auto info = (CsvImpTransAssist*)user_data;
+    gnc_unregister_gui_component_by_data (ASSISTANT_CSV_IMPORT_TRANS_CM_CLASS, info);
     info->assist_compmgr_close();
+    delete info;
 }
 
 /********************************************************************\

commit 1449d4ca688bd41691d7854eae40574eef230b5e
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Thu Mar 8 10:46:07 2018 +0100

    Add some background info on memory management in CSV importers
    
    As the assistant code combines multiple memory management models care should be taken
    not to mix them up. The notes should give some insights in how to do this.
    
    Also fix a few minor issues
    - delete default copy and move constructor/assignment for the assistant gui class
    - nullify a freed pointer

diff --git a/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp b/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp
index cccbd24..6cf25bb 100644
--- a/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp
+++ b/gnucash/import-export/csv-imp/assistant-csv-price-import.cpp
@@ -64,10 +64,26 @@ extern "C"
 /* This static indicates the debugging module that this .o belongs to.  */
 static QofLogModule log_module = GNC_MOD_ASSISTANT;
 
+/* Note on memory management
+ *
+ * The same notes as for assistant-csv-trans-import.cpp appy to
+ * this assistant as well. Please read the note at the top of that
+ * file to understand important details about the use of several
+ * memory management models in one file.
+ */
+
 class  CsvImpPriceAssist
 {
 public:
     CsvImpPriceAssist ();
+    ~CsvImpPriceAssist () = default;
+
+    /* Delete copy and move constructor/assignments
+     * We don't want gui elements to be moved around or copied at all */
+    CsvImpPriceAssist(const CsvImpPriceAssist&) = delete;            // copy constructor
+    CsvImpPriceAssist& operator=(const CsvImpPriceAssist&) = delete; // copy assignment
+    CsvImpPriceAssist(CsvImpPriceAssist&&) = delete;                 // move constructor
+    CsvImpPriceAssist& operator=(CsvImpPriceAssist&&) = delete;      // move assignment
 
     void assist_prepare_cb (GtkWidget *page);
     void assist_file_page_prepare ();
diff --git a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
index 8b7c550..ecc11e4 100644
--- a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
+++ b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
@@ -75,10 +75,64 @@ namespace bl = boost::locale;
 /* This static indicates the debugging module that this .o belongs to.  */
 static QofLogModule log_module = GNC_MOD_ASSISTANT;
 
+
+/* A note on memory management
+ *
+ * This source file is mixture of several completely different memory models
+ * - it defines a c++ class, which is managed the c++ way
+ * - the c++ class encapsulates a gtk based dialog, which is managed in
+ *   a GObject memory management way.
+ * - gnucash manages gui objects via its "Component Manager". Dialogs/windows are
+ *   registered with this component manager when they are opened and the component
+ *   manager handles the dialog's and window's lifecycle. When the dialog is closed
+ *   the component manager invokes a close handler which is responsible for cleaning up.
+ *
+ * Care must be taken in places where these objects intersect. Here is how it is
+ * handled for this source file:
+ * - There is only one entry point to start this assistant: gnc_file_csv_trans_import
+ * - This function will create the C++ class using the c++ "new" method and will register the
+ *   created class pointer in the component manager. This works because the component
+ *   manager just stores the pointer, it doesn't act on it directly in any way.
+ * - When the assistant finishes or is closed, the component manager will invoke a
+ *   close handler on the class pointer. We supply this close handler ourselves
+ *   in csv_tximp_close_handler. That function will initiate the gtk dialog (more on that below)
+ *   destruction, which in turn will trigger a c++ "delete" on the c++ class. It only
+ *   happens after the widget destruction because it may still be used at that point.
+ * - Note the component's manager only benefit in this context is that at gnucash shutdown
+ *   all still open dialogs can be closed cleanly. Whether this benefit is enough to
+ *   justify the added complexity is debatable. However currently the calling code is not
+ *   c++ yet, so an RAII based alternative using unique_ptr is currently not possible yet.
+ *
+ * - Next the c++ class constructor will create widgets in a gobject way. The main widget
+ *   is a GtkDialog. All other widgets are configured as children of this dialog widget, making
+ *   the dialog responsible for the lifecycle of the widgets.
+ * - When this dialog is closed, the component manager will call our "close"
+ *   callback function. As mentioned before this close handler will trigger the dialog
+ *   widget's destruction using gtk_widget_destroy (matching its gtk_widget_create called by
+ *   gtkbuilder). This will free all memory used by the dialog and its child widgets.
+ *   It will also will trigger the c++ based destruction of the c++ assistant object as written above.
+ *
+ * - There is one case that needs some additional attention. At some point the csv importer assistant hands
+ *   over control to a generic importer (created via gnc_gen_trans_assist_new). This generic importer does
+ *   its own memory management. gnc_gen_trans_assist_new creates the generic importer object via g_new0,
+ *   so it should be freed at some point with g_free. This is done in the function gnc_gen_trans_list_delete.
+ *   If the generic importer is allowed to take over that function will eventually be called internally,
+ *   otherwise our own code will run it in CsvImpTransAssist::assist_finish.
+ *   TODO this is pretty confusing and should be cleaned up when we rewrite the generic importer.
+ */
+
 class  CsvImpTransAssist
 {
 public:
     CsvImpTransAssist ();
+    ~CsvImpTransAssist () = default;
+
+    /* Delete copy and move constructor/assignments
+     * We don't want gui elements to be moved around or copied at all */
+    CsvImpTransAssist(const CsvImpTransAssist&) = delete;            // copy constructor
+    CsvImpTransAssist& operator=(const CsvImpTransAssist&) = delete; // copy assignment
+    CsvImpTransAssist(CsvImpTransAssist&&) = delete;                 // move constructor
+    CsvImpTransAssist& operator=(CsvImpTransAssist&&) = delete;      // move assignment
 
     void assist_prepare_cb (GtkWidget *page);
     void assist_file_page_prepare ();
@@ -584,7 +638,10 @@ CsvImpTransAssist::CsvImpTransAssist ()
     match_page  = GTK_WIDGET(gtk_builder_get_object (builder, "match_page"));
     match_label = GTK_WIDGET(gtk_builder_get_object (builder, "match_label"));
 
-    /* Create the generic transaction importer GUI. */
+    /* Create the generic transaction importer GUI.
+       Note, this will call g_new0 internally. The returned object is g_freed again
+       either directly by the main matcher or in our assistant_finish code of the matcher
+       is never reached. */
     gnc_csv_importer_gui = gnc_gen_trans_assist_new (match_page, nullptr, false, 42);
 
     /* Summary Page */
@@ -1978,7 +2035,12 @@ CsvImpTransAssist::assist_finish (bool canceled)
 {
     /* Start the import */
     if (canceled || tx_imp->m_transactions.empty())
+    {
         gnc_gen_trans_list_delete (gnc_csv_importer_gui);
+        /* The call above frees gnc_csv_importer_gui. NULL it here
+         * so noone accidentally can use access it still */
+        gnc_csv_importer_gui = NULL;
+    }
     else
         gnc_gen_trans_assist_start (gnc_csv_importer_gui);
 }



Summary of changes:
 .../gtkbuilder/assistant-csv-price-import.glade    |  12 +-
 .../gtkbuilder/assistant-csv-trans-import.glade    |   6 +-
 gnucash/import-export/csv-imp/CMakeLists.txt       |  40 +++---
 .../csv-imp/assistant-csv-price-import.cpp         |  54 ++++----
 .../csv-imp/assistant-csv-trans-import.cpp         | 142 ++++++++++++++++-----
 .../import-export/csv-imp/gnc-csv-tokenizer.cpp    |  67 ----------
 ...gnc-price-props.cpp => gnc-imp-props-price.cpp} |   6 +-
 ...gnc-price-props.hpp => gnc-imp-props-price.hpp} |   6 +-
 .../{gnc-trans-props.cpp => gnc-imp-props-tx.cpp}  |   4 +-
 .../{gnc-trans-props.hpp => gnc-imp-props-tx.hpp}  |   4 +-
 ...settings.cpp => gnc-imp-settings-csv-price.cpp} |  30 +++--
 ...settings.hpp => gnc-imp-settings-csv-price.hpp} |  11 +-
 ...rt-settings.cpp => gnc-imp-settings-csv-tx.cpp} |  30 +++--
 ...rt-settings.hpp => gnc-imp-settings-csv-tx.hpp} |  11 +-
 ...mport-settings.cpp => gnc-imp-settings-csv.cpp} |  23 ++--
 ...mport-settings.hpp => gnc-imp-settings-csv.hpp} |  16 +--
 .../{gnc-price-import.cpp => gnc-import-price.cpp} |  12 +-
 .../{gnc-price-import.hpp => gnc-import-price.hpp} |   8 +-
 .../{gnc-tx-import.cpp => gnc-import-tx.cpp}       |  14 +-
 .../{gnc-tx-import.hpp => gnc-import-tx.hpp}       |   8 +-
 .../import-export/csv-imp/gnc-tokenizer-csv.cpp    |  78 +++++++++++
 ...gnc-csv-tokenizer.hpp => gnc-tokenizer-csv.hpp} |   4 +-
 ...dummy-tokenizer.cpp => gnc-tokenizer-dummy.cpp} |   2 +-
 ...dummy-tokenizer.hpp => gnc-tokenizer-dummy.hpp} |   7 +-
 .../{gnc-fw-tokenizer.cpp => gnc-tokenizer-fw.cpp} |   2 +-
 .../{gnc-fw-tokenizer.hpp => gnc-tokenizer-fw.hpp} |   4 +-
 gnucash/import-export/csv-imp/gnc-tokenizer.cpp    |   6 +-
 gnucash/import-export/csv-imp/gnc-tokenizer.hpp    |   2 +-
 .../import-export/csv-imp/test/test-tokenizer.cpp  |  34 +++--
 .../import-export/csv-imp/test/test-tx-import.cpp  |   6 +-
 gnucash/report/report-system/report.scm            | 102 ++++++++++++---
 po/POTFILES.in                                     |  20 +--
 32 files changed, 474 insertions(+), 297 deletions(-)
 delete mode 100644 gnucash/import-export/csv-imp/gnc-csv-tokenizer.cpp
 rename gnucash/import-export/csv-imp/{gnc-price-props.cpp => gnc-imp-props-price.cpp} (98%)
 rename gnucash/import-export/csv-imp/{gnc-price-props.hpp => gnc-imp-props-price.hpp} (95%)
 rename gnucash/import-export/csv-imp/{gnc-trans-props.cpp => gnc-imp-props-tx.cpp} (99%)
 rename gnucash/import-export/csv-imp/{gnc-trans-props.hpp => gnc-imp-props-tx.hpp} (98%)
 rename gnucash/import-export/csv-imp/{gnc-csv-price-import-settings.cpp => gnc-imp-settings-csv-price.cpp} (92%)
 rename gnucash/import-export/csv-imp/{gnc-csv-price-import-settings.hpp => gnc-imp-settings-csv-price.hpp} (92%)
 rename gnucash/import-export/csv-imp/{gnc-csv-trans-import-settings.cpp => gnc-imp-settings-csv-tx.cpp} (92%)
 rename gnucash/import-export/csv-imp/{gnc-csv-trans-import-settings.hpp => gnc-imp-settings-csv-tx.hpp} (92%)
 rename gnucash/import-export/csv-imp/{gnc-csv-import-settings.cpp => gnc-imp-settings-csv.cpp} (94%)
 rename gnucash/import-export/csv-imp/{gnc-csv-import-settings.hpp => gnc-imp-settings-csv.hpp} (93%)
 rename gnucash/import-export/csv-imp/{gnc-price-import.cpp => gnc-import-price.cpp} (99%)
 rename gnucash/import-export/csv-imp/{gnc-price-import.hpp => gnc-import-price.hpp} (97%)
 rename gnucash/import-export/csv-imp/{gnc-tx-import.cpp => gnc-import-tx.cpp} (99%)
 rename gnucash/import-export/csv-imp/{gnc-tx-import.hpp => gnc-import-tx.hpp} (97%)
 create mode 100644 gnucash/import-export/csv-imp/gnc-tokenizer-csv.cpp
 rename gnucash/import-export/csv-imp/{gnc-csv-tokenizer.hpp => gnc-tokenizer-csv.hpp} (96%)
 rename gnucash/import-export/csv-imp/{gnc-dummy-tokenizer.cpp => gnc-tokenizer-dummy.cpp} (94%)
 rename gnucash/import-export/csv-imp/{gnc-dummy-tokenizer.hpp => gnc-tokenizer-dummy.hpp} (91%)
 rename gnucash/import-export/csv-imp/{gnc-fw-tokenizer.cpp => gnc-tokenizer-fw.cpp} (99%)
 rename gnucash/import-export/csv-imp/{gnc-fw-tokenizer.hpp => gnc-tokenizer-fw.hpp} (97%)



More information about the gnucash-changes mailing list