[geany/geany-plugins] e4e387: Merge pull request #82 from frlan/Tableconvert_more_generic_rework
Frank Lanitz
git-noreply at geany.org
Fri Feb 1 06:47:18 UTC 2013
Branch: refs/heads/master
Author: Frank Lanitz <frank at frank.uvena.de>
Committer: Frank Lanitz <frank at frank.uvena.de>
Date: Fri, 01 Feb 2013 06:47:18 UTC
Commit: e4e387563ab822bc2a5a9ec98cafe09a894b6ea4
https://github.com/geany/geany-plugins/commit/e4e387563ab822bc2a5a9ec98cafe09a894b6ea4
Log Message:
-----------
Merge pull request #82 from frlan/Tableconvert_more_generic_rework
Tableconvert more generic rework
Modified Paths:
--------------
tableconvert/src/tableconvert.c
tableconvert/testfiles/test.html
tableconvert/testfiles/test.sql
tableconvert/testfiles/test.tex
Modified: tableconvert/src/tableconvert.c
226 files changed, 108 insertions(+), 118 deletions(-)
===================================================================
@@ -1,7 +1,7 @@
/*
* tableconvert.c
*
- * Copyright 2011-2012 Frank Lanitz <frank(at)frank(dot)uvena(dot)de>
+ * Copyright 2011-2013 Frank Lanitz <frank(at)frank(dot)uvena(dot)de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -41,11 +41,72 @@ enum
COUNT_KB
};
+typedef struct {
+ const gchar *start;
+ const gchar *header_start;
+ const gchar *header_stop;
+ const gchar *body_start;
+ const gchar *body_end;
+ const gchar *columnsplit;
+ const gchar *linestart;
+ const gchar *lineend;
+ const gchar *linesplit;
+ const gchar *end;
+} TableConvertRule;
+
+enum {
+ TC_LATEX = 0,
+ TC_HTML,
+ TC_SQL
+};
-static GtkWidget *main_menu_item = NULL;
+TableConvertRule tablerules[] = {
+ /* LaTeX */
+ {
+ "\\begin{table}[h]\n\\begin{tabular}{}\n",
+ "",
+ "",
+ "",
+ "",
+ " & ",
+ "\t",
+ "\\\\",
+ "\n",
+ "\\end{tabular}\n\\end{table}"
+ },
+ /* HTML */
+ {
+ "<table>\n",
+ "<thead>\n",
+ "</thead>\n",
+ "<tbody>\n",
+ "\n</tbody>",
+ "</td>\n\t<td>",
+ "<tr>\n\t<td>",
+ "</td>\n</tr>",
+ "\n",
+ "\n</table>"
+ },
+ /* SQL */
+ {
+ "",
+ "",
+ "",
+ "",
+ "",
+ ",",
+ "\t(",
+ ")",
+ ",\n",
+ ";"
+ }
+};
-static GString* convert_to_table_html(gchar **rows, gboolean header)
+static GtkWidget *main_menu_item = NULL;
+
+static gchar* convert_to_table_worker(gchar **rows, gboolean header,
+ const TableConvertRule *rule)
{
guint i;
guint j;
@@ -53,138 +114,62 @@ static GString* convert_to_table_html(gchar **rows, gboolean header)
g_return_val_if_fail(rows != NULL, NULL);
- /* Adding header to replacement */
- replacement_str = g_string_new("<table>\n");
+ /* Adding start of table to replacement */
+ replacement_str = g_string_new(rule->start);
- /* Adding <thead> if requested */
+ /* Adding special header if requested
+ * e.g. <thead> */
if (header == TRUE)
{
- g_string_append(replacement_str, "<thead>\n");
+ g_string_append(replacement_str, rule->header_start);
}
/* Iteration onto rows and building up lines of table for
* replacement */
- for (i = 0; rows[i] != NULL ; i++)
+ for (i = 0; rows[i] != NULL; i++)
{
gchar **columns = NULL;
columns = g_strsplit_set(rows[i], "\t", -1);
- /* Adding <tbody> after first line if header and body
- * is requested */
if (i == 1 &&
header == TRUE)
{
- g_string_append(replacement_str, "<tbody>\n");
- }
-
- g_string_append(replacement_str, "\t<tr>\n");
- for (j = 0; columns[j] != NULL; j++)
- {
- g_string_append(replacement_str, "\t\t<td>");
- g_string_append(replacement_str, columns[j]);
- g_string_append(replacement_str, "</td>\n");
- }
-
- g_string_append(replacement_str, "\t</tr>\n");
-
- /* Adding closing </thead> after first row if header
- * is requested */
- if (i == 0 &&
- header == TRUE)
- {
- g_string_append(replacement_str, "</thead>\n");
+ g_string_append(replacement_str, rule->header_stop);
+ /* We are assuming, that if someone inserts a head,
+ * only in this case we will insert some special body.
+ * Might needs to be discussed further */
+ g_string_append(replacement_str, rule->body_start);
}
- g_free(columns);
- }
-
- /* Adding the footer of table */
- /* Closing </tbody> if requested */
- if (header == TRUE)
- {
- g_string_append(replacement_str, "</tbody>\n");
- }
- g_string_append(replacement_str, "</table>\n");
- return replacement_str;
-}
-
-static GString* convert_to_table_latex(gchar** rows, gboolean header)
-{
- guint i;
- guint j;
- GString *replacement_str = NULL;
-
- g_return_val_if_fail(rows != NULL, NULL);
-
- /* Adding header to replacement */
- replacement_str = g_string_new("\\begin{table}[h]\n\\begin{tabular}{}\n");
-
- /* 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);
+ g_string_append(replacement_str, rule->linestart);
for (j = 0; columns[j] != NULL; j++)
{
if (j > 0)
{
- g_string_append(replacement_str, " & ");
+ g_string_append(replacement_str, rule->columnsplit);
}
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\\end{table}");
- return replacement_str;
-}
-
-static GString* convert_to_table_sql(gchar** rows)
-{
- guint i;
- guint j;
- GString *replacement_str = NULL;
-
- g_return_val_if_fail(rows != NULL, NULL);
-
- /* Adding start */
- replacement_str = g_string_new("");
-
- /* Iteration onto rows and building up lines for replacement */
- for (i = 0; rows[i] != NULL ; i++)
- {
- gchar **columns = NULL;
-
- g_string_append(replacement_str, "\t('");
- 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, rule->lineend);
if (rows[i+1] != NULL)
{
- g_string_append(replacement_str, "'),\n");
- }
- else
- {
- g_string_append(replacement_str, "')\n");
+ g_string_append(replacement_str, rule->linesplit);
}
+ g_strfreev(columns);
+ }
- g_free(columns);
+ if (header == TRUE)
+ {
+ g_string_append(replacement_str, rule->body_end);
}
- return replacement_str;
+
+ /* Adding the footer of table */
+ g_string_append(replacement_str, rule->end);
+
+ return g_string_free(replacement_str, FALSE);
}
static void convert_to_table(gboolean header)
@@ -198,7 +183,6 @@ static void convert_to_table(gboolean header)
{
gchar *selection = NULL;
gchar **rows = NULL;
- GString *replacement_str = NULL;
gchar *replacement = NULL;
/* Actually grabbing selection and splitting it into single
@@ -214,57 +198,63 @@ static void convert_to_table(gboolean header)
{
case GEANY_FILETYPES_NONE:
{
- g_free(rows);
- g_free(replacement);
+ g_strfreev(rows);
return;
}
case GEANY_FILETYPES_HTML:
{
- replacement_str = convert_to_table_html(rows, header);
+ replacement = convert_to_table_worker(rows,
+ header,
+ &tablerules[TC_HTML]);
break;
}
case GEANY_FILETYPES_LATEX:
{
- replacement_str = convert_to_table_latex(rows, header);
+ replacement = convert_to_table_worker(rows,
+ header,
+ &tablerules[TC_LATEX]);
break;
}
case GEANY_FILETYPES_SQL:
{
- replacement_str = convert_to_table_sql(rows);
+ replacement = convert_to_table_worker(rows,
+ header,
+ &tablerules[TC_SQL]);
break;
}
default:
{
- replacement_str = NULL;
+ /* We just don't do anything */
}
} /* filetype switch */
}
else
{
/* OK. Something went not as expected.
- * We did have a selection but cannot parse it into rows.
- * Aborting */
+ * We did have a selection but cannot parse it into rows.
+ * Aborting */
g_warning(_("Something went wrong on parsing selection. Aborting"));
return;
}
/* The replacement should have been prepared at this point. Let's go
- * on and put it into document and replace selection with it. */
- if (replacement_str != NULL)
+ * on and put it into document and replace selection with it. */
+ if (replacement != NULL)
{
- replacement = g_string_free(replacement_str, FALSE);
sci_replace_sel(doc->editor->sci, replacement);
}
- g_free(rows);
+ g_strfreev(rows);
g_free(replacement);
}
/* in case of there was no selection we are just doing nothing */
return;
}
+
static void kb_convert_to_table(G_GNUC_UNUSED guint key_id)
{
g_return_if_fail(document_get_current() != NULL);
+
convert_to_table(TRUE);
}
@@ -292,7 +282,7 @@ void plugin_init(GeanyData *data)
gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu), main_menu_item);
ui_widget_set_tooltip_text(main_menu_item,
_("Converts current marked list to a table."));
- g_signal_connect(G_OBJECT(main_menu_item), "activate", G_CALLBACK(convert_to_table), NULL);
+ g_signal_connect(G_OBJECT(main_menu_item), "activate", G_CALLBACK(cb_table_convert), NULL);
gtk_widget_show_all(main_menu_item);
ui_add_document_sensitive(main_menu_item);
}
Modified: tableconvert/testfiles/test.html
10 files changed, 10 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,10 @@
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
Modified: tableconvert/testfiles/test.sql
10 files changed, 10 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,10 @@
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
Modified: tableconvert/testfiles/test.tex
10 files changed, 10 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,10 @@
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
+aaaa bbbbb ccccc ddddd fffff
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Plugins-Commits
mailing list