Revision: 1886 http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=1886&view=re... Author: frlan Date: 2011-01-29 13:40:55 +0000 (Sat, 29 Jan 2011)
Log Message: ----------- GeanyLaTeX: Backport update from convert to table function from HTMLTable-plugin
Modified Paths: -------------- trunk/geanylatex/ChangeLog trunk/geanylatex/src/latexkeybindings.c trunk/geanylatex/src/latexutils.c trunk/geanylatex/src/latexutils.h
Modified: trunk/geanylatex/ChangeLog =================================================================== --- trunk/geanylatex/ChangeLog 2011-01-29 13:40:33 UTC (rev 1885) +++ trunk/geanylatex/ChangeLog 2011-01-29 13:40:55 UTC (rev 1886) @@ -1,3 +1,8 @@ +2011-01-29 Frank Lanitz <frank(at)frank(dot)uvena(dot)de> + + * Backport update from convert to table function from HTMLTable-plugin + + 2011-01-23 Frank Lanitz <frank(at)frank(dot)uvena(dot)de>
* Adding a feature which is converting a tabulator separated list into
Modified: trunk/geanylatex/src/latexkeybindings.c =================================================================== --- trunk/geanylatex/src/latexkeybindings.c 2011-01-29 13:40:33 UTC (rev 1885) +++ trunk/geanylatex/src/latexkeybindings.c 2011-01-29 13:40:55 UTC (rev 1886) @@ -30,7 +30,7 @@
void glatex_kbref_insert(G_GNUC_UNUSED guint key_id) { - g_return_if_fail(document_get_current() != NULL); + g_return_if_fail(document_get_current() != NULL); glatex_insert_ref_activated(NULL, NULL); }
@@ -167,5 +167,5 @@ void glatex_kb_convert_to_table(G_GNUC_UNUSED guint key_id) { g_return_if_fail(document_get_current() != NULL); - glatex_convert_to_table(); + glatex_convert_to_table(FALSE); }
Modified: trunk/geanylatex/src/latexutils.c =================================================================== --- trunk/geanylatex/src/latexutils.c 2011-01-29 13:40:33 UTC (rev 1885) +++ trunk/geanylatex/src/latexutils.c 2011-01-29 13:40:55 UTC (rev 1886) @@ -26,10 +26,10 @@ { gchar **result = NULL; gchar *data; - - g_return_val_if_fail((filename != NULL), NULL); + + g_return_val_if_fail((filename != NULL), NULL); g_return_val_if_fail(g_file_get_contents(filename, &data, NULL, NULL), NULL); - + if (data != NULL) { result = g_strsplit_set(data, "\r\n", -1); @@ -147,7 +147,7 @@
if (entity != NULL) { - + g_string_append(replacement, entity); } else @@ -163,38 +163,79 @@ }
-void glatex_convert_to_table() +/* Based on reimplementation at HTMLTable plugin of Geany-Plugins package + * originally in GPL2+ */ +/* gboolean header is not yet used but to don't break API later its already + * defined */ +void glatex_convert_to_table(G_GNUC_UNUSED gboolean header) { GeanyDocument *doc = NULL; doc = document_get_current();
g_return_if_fail(doc != NULL); - if (sci_has_selection(doc->editor->sci)) { gchar *selection = NULL; - gchar *new = NULL; - gchar *rowending = NULL; - GString *table = NULL; - GString *inner_table = NULL; + gchar **rows = NULL; + GString *replacement_str = NULL; + gchar *replacement = NULL;
+ /* Actually grabbing selection and splitting it into single + * lines we will work on later */ selection = sci_get_selection_contents(doc->editor->sci); - inner_table = g_string_new(selection); - utils_string_replace_all(inner_table, "\t", " & "); - rowending = g_strconcat(" \\", editor_get_eol_char(doc->editor), NULL); - utils_string_replace_all(inner_table, editor_get_eol_char(doc->editor), rowending); - new = g_string_free(inner_table, FALSE); + rows = g_strsplit_set(selection, "\r\n", -1); + g_free(selection);
- table = g_string_new(NULL); - g_string_printf(table, "\begin{tabular}\n%s\n\end{tabular}", new); + /* Checking whether we do have something we can work on - Returning if not */ + if (rows != NULL) + { + /* Adding header to replacement */ + guint i; + guint j;
- g_free(new); - - new = g_string_free(table, FALSE); - sci_replace_sel(doc->editor->sci, new); + replacement_str = g_string_new("\begin{tabular}{}\n");
- g_free(selection); - g_free(new); - g_free(rowending); + /* Iteration onto rows and building up lines of table for + * replacement */ + for (i = 0; rows[i] != NULL ; i++) + { + gchar **columns = NULL; + columns = g_strsplit_set(rows[i], "\t", -1); + + for (j = 0; columns[j] != NULL; j++) + { + if (j > 0) + { + g_string_append(replacement_str, " & "); + } + g_string_append(replacement_str, columns[j]); + } + + g_string_append(replacement_str, "\\\n"); + + g_free(columns); + } + } + + /* Adding the footer of table */ + + g_string_append(replacement_str, "\end{tabular}\n"); + + /* Replacing selection with new table */ + replacement = g_string_free(replacement_str, FALSE); + sci_replace_sel(doc->editor->sci, replacement); + + g_free(rows); + g_free(replacement); } + else + { + /* OK. Something went not as expected. + * We did have a selection but cannot parse it into rows. + * Aborting */ + g_warning(_("Something went went wrong on parsing selection. Aborting")); + return; + } /* Selection was given -- end + * in case of there was no selection we are just doing nothing */ + return; }
Modified: trunk/geanylatex/src/latexutils.h =================================================================== --- trunk/geanylatex/src/latexutils.h 2011-01-29 13:40:33 UTC (rev 1885) +++ trunk/geanylatex/src/latexutils.h 2011-01-29 13:40:55 UTC (rev 1886) @@ -28,6 +28,6 @@ void glatex_enter_key_pressed_in_entry(G_GNUC_UNUSED GtkWidget *widget, gpointer dialog); void glatex_insert_string(const gchar *string, gboolean reset_position); void glatex_replace_special_character(void); -void glatex_convert_to_table(); +void glatex_convert_to_table(G_GNUC_UNUSED gboolean header);
#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.