[geany/geany-plugins] db6789: TableConvert: Adding DokuWiki as first non-Geany filetype for TableConvert and clean logic up so it should support also other wiki syntaxes in future
Frank Lanitz
git-noreply at xxxxx
Mon Oct 20 18:24:58 UTC 2014
Branch: refs/heads/master
Author: Frank Lanitz <frank at frank.uvena.de>
Committer: Frank Lanitz <frank at frank.uvena.de>
Date: Mon, 20 Oct 2014 18:24:58 UTC
Commit: db67897fa1daf89fa728d5db25c6f11de32e829e
https://github.com/geany/geany-plugins/commit/db67897fa1daf89fa728d5db25c6f11de32e829e
Log Message:
-----------
TableConvert: Adding DokuWiki as first non-Geany filetype for TableConvert and clean logic up so it should support also other wiki syntaxes in future
Modified Paths:
--------------
tableconvert/src/tableconvert.c
tableconvert/src/tableconvert.h
Modified: tableconvert/src/tableconvert.c
196 lines changed, 123 insertions(+), 73 deletions(-)
===================================================================
@@ -39,70 +39,94 @@ GeanyFunctions *geany_functions;
TableConvertRule tablerules[] = {
/* LaTeX */
{
- N_("LaTeX"),
- "\\begin{table}[h]\n\\begin{tabular}{}\n",
- "",
- "",
- "",
- "",
- " & ",
- "\t",
- "\\\\",
- "",
- "\\end{tabular}\n\\end{table}"
+ N_("LaTeX"), /* type */
+ "\\begin{table}[h]\n\\begin{tabular}{}\n", /* start */
+ "\t", /* header_start */
+ "", /* header_stop */
+ " & ", /* header_columnsplit */
+ "", /* header_linestart */
+ "\\\\ \\hline", /* header_lineend */
+ "", /* body_start */
+ "", /* body_end */
+ " & ", /* columnsplit */
+ "\t", /* linestart */
+ "\\\\", /* lineend */
+ "", /* linesplit */
+ "\\end{tabular}\n\\end{table}" /* end */
},
/* HTML */
{
- N_("HTML"),
- "<table>\n",
- "<thead>\n",
- "</thead>\n",
- "<tbody>\n",
- "\n</tbody>",
- "</td>\n\t<td>",
- "<tr>\n\t<td>",
- "</td>\n</tr>",
- "",
- "\n</table>"
+ N_("HTML"), /* type */
+ "<table>\n", /* start */
+ "<thead>\n", /* header_start */
+ "</thead>\n", /* header_stop */
+ "</td>\n\t<td>", /* header_columnsplit */
+ "<tr>\n\t<td>", /* header_linestart */
+ "</td>\n</tr>\n", /* header_lineend */
+ "<tbody>\n", /* body_start */
+ "\n</tbody>", /* body_end */
+ "</td>\n\t<td>", /* columnsplit */
+ "<tr>\n\t<td>", /* linestart */
+ "</td>\n</tr>", /* lineend */
+ "", /* linesplit */
+ "\n</table>" /* end */
},
/* SQL */
+ /* Header not yet supported, so treated as normal
+ * "Body"-SQL. This is handled on function logic
+ * */
{
- N_("SQL"),
- "",
- "",
- "",
- "",
- "",
- "','",
- "\t('",
- "')",
- ",",
- ";"
- }
+ N_("SQL"), /* type */
+ "", /* start */
+ "", /* header_start */
+ "", /* header_stop */
+ "", /* header_columnsplit */
+ "", /* header_linestart */
+ "", /* header_lineend */
+ "", /* body_start */
+ "", /* body_end */
+ "','", /* columnsplit */
+ "\t('", /* linestart */
+ "')", /* lineend */
+ ",", /* linesplit */
+ ";" /* end */
+ },
+ /* DokuWiki */
+ {
+ N_("DokuWiki"), /* type */
+ "", /* start */
+ "", /* header_start */
+ "", /* header_stop */
+ " ^ ", /* header_columnsplit */
+ "^ ", /* header_linestart */
+ " ^", /* header_lineend */
+ "", /* body_start */
+ "", /* body_end */
+ " | ", /* columnsplit */
+ "| ", /* linestart */
+ " |", /* lineend */
+ "", /* linesplit */
+ "", /* end */
+ }
};
static gchar* convert_to_table_worker(gchar **rows, gboolean header,
- const TableConvertRule *rule)
+ gint file_type)
{
guint i;
guint j;
GString *replacement_str = NULL;
GeanyDocument *doc = NULL;
+ TableConvertRule *rule = &tablerules[file_type];
doc = document_get_current();
g_return_val_if_fail(rows != NULL, NULL);
+ g_return_if_fail(rule != NULL);
/* Adding start of table to replacement */
replacement_str = g_string_new(rule->start);
- /* Adding special header if requested
- * e.g. <thead> */
- if (header == TRUE)
- {
- 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++)
@@ -110,46 +134,67 @@ static gchar* convert_to_table_worker(gchar **rows, gboolean header,
gchar **columns = NULL;
columns = g_strsplit_set(rows[i], "\t", -1);
- if (i == 1 &&
+ /* Putting in some header if needed */
+ if (i == 0 &&
header == TRUE)
{
- 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);
- }
+ /* header_start */
+ g_string_append(replacement_str, rule->header_start);
- g_string_append(replacement_str, rule->linestart);
+ /* header_linestart */
+ g_string_append(replacement_str, rule->header_linestart);
- for (j = 0; columns[j] != NULL; j++)
- {
- if (j > 0)
+ /* header_columnsplit + columncontent */
+ for (j = 0; columns[j] != NULL; j++)
{
- g_string_append(replacement_str, rule->columnsplit);
+ if (j > 0)
+ {
+ g_string_append(replacement_str, rule->header_columnsplit);
+ }
+ g_string_append(replacement_str, columns[j]);
}
- g_string_append(replacement_str, columns[j]);
- }
- if (utils_str_equal(rule->lineend, ""))
- {
+ /* header_lineend */
+ g_string_append(replacement_str, rule->header_lineend);
+
+ /* header_stop */
+ g_string_append(replacement_str, rule->header_stop);
+
+ /* Adding a new line of header assuming it's something
+ * relevant for every typ */
g_string_append(replacement_str, editor_get_eol_char(doc->editor));
+
+ /* body_start */
+ /* Only insert explicit body start if there is a header */
+ g_string_append(replacement_str, rule->body_start);
}
- else
+ if (i > 0 ||
+ header == FALSE)
{
- g_string_append(replacement_str, rule->lineend);
- if (doc->file_type->id == GEANY_FILETYPES_SQL ||
- doc->file_type->id == GEANY_FILETYPES_LATEX)
+ /* linestart */
+ g_string_append(replacement_str, rule->linestart);
+
+ /* columnsplit + column */
+ for (j = 0; columns[j] != NULL; j++)
{
- g_string_append(replacement_str, editor_get_eol_char(doc->editor));
+ if (j > 0)
+ {
+ g_string_append(replacement_str, rule->columnsplit);
+ }
+ g_string_append(replacement_str, columns[j]);
}
- }
- if (rows[i+1] != NULL)
- {
- g_string_append(replacement_str, rule->linesplit);
+ /* lineend */
+ g_string_append(replacement_str, rule->lineend);
+
+ /* linesplit */
+ if (rows[i+1] != NULL && utils_str_equal(rule->linesplit, ""))
+ {
+ g_string_append(replacement_str, rule->linesplit);
+ }
+ g_string_append(replacement_str, editor_get_eol_char(doc->editor));
+ g_strfreev(columns);
}
- g_strfreev(columns);
}
if (header == TRUE)
@@ -163,6 +208,7 @@ static gchar* convert_to_table_worker(gchar **rows, gboolean header,
return g_string_free(replacement_str, FALSE);
}
+
void convert_to_table(gboolean header, gint file_type)
{
GeanyDocument *doc = NULL;
@@ -207,22 +253,22 @@ void convert_to_table(gboolean header, gint file_type)
{
replacement = convert_to_table_worker(rows,
header,
- &tablerules[TC_HTML]);
+ TC_HTML);
break;
}
case GEANY_FILETYPES_LATEX:
{
replacement = convert_to_table_worker(rows,
header,
- &tablerules[TC_LATEX]);
+ TC_LATEX);
break;
}
case GEANY_FILETYPES_SQL:
{
/* TODO: Check for INTEGER and other datatypes on SQL */
replacement = convert_to_table_worker(rows,
- header,
- &tablerules[TC_SQL]);
+ FALSE,
+ TC_SQL);
break;
}
default:
@@ -233,9 +279,13 @@ void convert_to_table(gboolean header, gint file_type)
}
else
{
+ if (file_type == TC_SQL)
+ {
+ header = FALSE;
+ }
replacement = convert_to_table_worker(rows,
header,
- &tablerules[file_type]);
+ file_type);
}
}
Modified: tableconvert/src/tableconvert.h
4 lines changed, 4 insertions(+), 0 deletions(-)
===================================================================
@@ -45,6 +45,9 @@ typedef struct {
const gchar *start;
const gchar *header_start;
const gchar *header_stop;
+ const gchar *header_columnsplit;
+ const gchar *header_linestart;
+ const gchar *header_lineend;
const gchar *body_start;
const gchar *body_end;
const gchar *columnsplit;
@@ -60,6 +63,7 @@ enum {
TC_LATEX = 0,
TC_HTML,
TC_SQL,
+ TC_DOKUWIKI,
TC_END
};
--------------
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