namespace tokenizer { TokenizerMethod tokenRules[] = { { "symbol", create_regex(operator_regex()), [](const ematch_result& match, token_list_t& list) { list.push_back(Token(token::type::symbol, estring(match[0]))); } }, { "number", create_regex("\\d+\\.\\d*"), [](const ematch_result& match, token_list_t& list) { list.push_back(Token(token::type::number, estring(match[0]))); } }, { "integer", create_regex("\\d+"), [](const ematch_result& match, token_list_t& list) { list.push_back(Token(token::type::integer, estring(match[0]))); } }, { "word", create_regex("\\w+"), [](const ematch_result& match, token_list_t& list) { list.push_back(Token(token::type::word, estring(match[0]))); } }, { "text", create_regex("\"([^\"]*)\""), [](const ematch_result& match, token_list_t& list) { list.push_back(Token(token::type::text, estring(match[1]))); } }, }; unsigned int tokenRulesSize = sizeof(tokenRules) / sizeof(TokenizerMethod); }
/******************************************************* * csv_import_sep_cb * * call back for type of separartor required *******************************************************/ void csv_import_sep_cb (GtkWidget *radio, gpointer user_data) { CsvImportInfo *info = user_data; const gchar *name; gchar *temp; gchar *sep = NULL; if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(radio))) { LEAVE("1st callback of pair. Defer to 2nd callback."); return; } name = gtk_buildable_get_name (GTK_BUILDABLE(radio)); if (g_strcmp0 (name, "radio_semi") == 0) sep = ";"; else if (g_strcmp0 (name, "radio_colon") == 0) sep = ":"; else sep = ","; /* Use as default as well */ create_regex (info->regexp, sep); if (g_strcmp0 (name, "radio_custom") == 0) { temp = gnc_input_dialog (0, _("Adjust regular expression used for import"), _("This regular expression is used to parse the import file. Modify according to your needs.\n"), info->regexp->str); if (temp) { g_string_assign (info->regexp, temp); g_free (temp); } } /* Generate preview */ gtk_list_store_clear (info->store); if (csv_import_read_file (info->file_name, info->regexp->str, info->store, 11) == MATCH_FOUND) gtk_widget_set_sensitive (info->header_row_spin, TRUE); else gtk_widget_set_sensitive (info->header_row_spin, FALSE); /* Reset Header spin to 0 */ gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->header_row_spin), 0); }
/******************************************************* * Create the Assistant *******************************************************/ static GtkWidget * csv_import_assistant_create (CsvImportInfo *info) { GtkBuilder *builder; GtkWidget *window; GtkWidget *box, *h_box; GtkWidget *button; GtkCellRenderer *renderer; GtkTreeViewColumn *column; gchar *mnemonic_desc = NULL; builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "assistant-csv-account-import.glade", "num_hrows_adj"); gnc_builder_add_from_file (builder, "assistant-csv-account-import.glade", "csv_account_import_assistant"); window = GTK_WIDGET(gtk_builder_get_object (builder, "csv_account_import_assistant")); info->window = window; // Set the style context for this dialog so it can be easily manipulated with css gnc_widget_set_style_context (GTK_WIDGET(window), "GncAssistAccountImport"); /* Load default settings */ load_settings (info); /* Enable buttons on all page. */ gtk_assistant_set_page_complete (GTK_ASSISTANT(window), GTK_WIDGET(gtk_builder_get_object(builder, "start_page")), TRUE); gtk_assistant_set_page_complete (GTK_ASSISTANT(window), GTK_WIDGET(gtk_builder_get_object(builder, "file_page")), FALSE); gtk_assistant_set_page_complete (GTK_ASSISTANT(window), GTK_WIDGET(gtk_builder_get_object(builder, "import_tree_page")), TRUE); gtk_assistant_set_page_complete (GTK_ASSISTANT(window), GTK_WIDGET(gtk_builder_get_object(builder, "end_page")), FALSE); gtk_assistant_set_page_complete (GTK_ASSISTANT(window), GTK_WIDGET(gtk_builder_get_object(builder, "summary_page")), TRUE); /* Start Page */ /* File chooser Page */ info->file_chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_OPEN); g_signal_connect (G_OBJECT(info->file_chooser), "file-activated", G_CALLBACK(csv_import_file_chooser_confirm_cb), info); button = gtk_button_new_with_mnemonic (_("_OK")); gtk_widget_set_size_request (button, 100, -1); gtk_widget_show (button); h_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous (GTK_BOX (h_box), TRUE); gtk_widget_set_hexpand (GTK_WIDGET(h_box), TRUE); gtk_box_pack_start (GTK_BOX(h_box), button, FALSE, FALSE, 0); gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(info->file_chooser), h_box); g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(csv_import_file_chooser_confirm_cb), info); box = GTK_WIDGET(gtk_builder_get_object(builder, "file_page")); gtk_box_pack_start (GTK_BOX(box), info->file_chooser, TRUE, TRUE, 6); gtk_widget_show (info->file_chooser); /* Account Tree Page */ info->header_row_spin = GTK_WIDGET(gtk_builder_get_object (builder, "num_hrows")); info->tree_view = GTK_WIDGET(gtk_builder_get_object (builder, "treeview")); /* Comma Separated file default */ info->regexp = g_string_new (""); create_regex (info->regexp, ","); /* create model and bind to view */ info->store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model (GTK_TREE_VIEW(info->tree_view), GTK_TREE_MODEL(info->store)); #define CREATE_COLUMN(description,column_id) \ renderer = gtk_cell_renderer_text_new (); \ mnemonic_desc = mnemonic_escape (_(description)); \ column = gtk_tree_view_column_new_with_attributes (mnemonic_desc, renderer, "text", column_id, NULL); \ gtk_tree_view_column_add_attribute (column, renderer, "background", ROW_COLOR); \ gtk_tree_view_column_set_resizable (column, TRUE); \ gtk_tree_view_append_column (GTK_TREE_VIEW(info->tree_view), column); \ g_free (mnemonic_desc); CREATE_COLUMN ("type", TYPE); CREATE_COLUMN ("full_name", FULL_NAME); CREATE_COLUMN ("name", NAME); CREATE_COLUMN ("code", CODE); CREATE_COLUMN ("description", DESCRIPTION); CREATE_COLUMN ("color", COLOR); CREATE_COLUMN ("notes", NOTES); CREATE_COLUMN ("commoditym", COMMODITYM); CREATE_COLUMN ("commodityn", COMMODITYN); CREATE_COLUMN ("hidden", HIDDEN); CREATE_COLUMN ("tax", TAX); CREATE_COLUMN ("place_holder", PLACE_HOLDER); /* Finish Page */ info->finish_label = GTK_WIDGET(gtk_builder_get_object (builder, "end_page")); /* Summary Page */ info->summary_label = GTK_WIDGET(gtk_builder_get_object (builder, "summary_label")); info->summary_error_view = GTK_WIDGET(gtk_builder_get_object (builder, "summary_error_view")); g_signal_connect (G_OBJECT(window), "destroy", G_CALLBACK(csv_import_assistant_destroy_cb), info); gnc_restore_window_size (GNC_PREFS_GROUP, GTK_WINDOW(info->window)); gtk_builder_connect_signals (builder, info); g_object_unref (G_OBJECT(builder)); return window; }