[geany/geany-plugins] 408d15: Merge pull request #560 from lschw/keep-unique-lines
Frank Lanitz
git-noreply at xxxxx
Wed Apr 12 21:10:38 UTC 2017
Branch: refs/heads/master
Author: Frank Lanitz <frank at frank.uvena.de>
Committer: GitHub <noreply at github.com>
Date: Wed, 12 Apr 2017 21:10:38 UTC
Commit: 408d153da89e256a14a637f6c82aa4b3d40b5847
https://github.com/geany/geany-plugins/commit/408d153da89e256a14a637f6c82aa4b3d40b5847
Log Message:
-----------
Merge pull request #560 from lschw/keep-unique-lines
Add Keep Unique Lines feature resolves #516
Modified Paths:
--------------
lineoperations/README
lineoperations/src/linefunctions.c
lineoperations/src/linefunctions.h
lineoperations/src/lineoperations.c
Modified: lineoperations/README
27 lines changed, 27 insertions(+), 0 deletions(-)
===================================================================
@@ -16,6 +16,7 @@ Features
* Remove Duplicate Lines, sorted
* Remove Duplicate Lines, ordered
* Remove Unique Lines
+* Keep Unique Lines
* Remove Empty Lines
* Remove Whitespace Lines
* Sort Lines Ascending
@@ -113,6 +114,32 @@ Removes all lines that appear only once.
Line 1
Line 2
+
+Keep Unique Lines
+-------------------
+
+Keep all lines that appear only once.
+
+ Example: Suppose a file has the following lines. (#comments added for
+ clarity)
+
+ ::
+
+ Line 4
+ Line 1 #removed
+ Line 2 #removed
+ Line 3
+ Line 1 #removed
+ Line 2 #removed
+
+ The **Keep Unique Lines** will change the file into this:
+
+ ::
+
+ Line 4
+ Line 3
+
+
Remove Empty Lines
------------------
Modified: lineoperations/src/linefunctions.c
44 lines changed, 44 insertions(+), 0 deletions(-)
===================================================================
@@ -159,6 +159,50 @@ rmunqln(gchar **lines, gint num_lines, gchar *new_file)
}
+/* Keep Unique Lines */
+gint
+kpunqln(gchar **lines, gint num_lines, gchar *new_file)
+{
+ gchar *nf_end = new_file; /* points to last char of new_file */
+ gint i = 0; /* iterator */
+ gint j = 0; /* iterator */
+ gboolean *to_remove = NULL; /* to 'mark' which lines to remove */
+ gint changed = 0; /* number of lines removed */
+
+
+ /* allocate and set *to_remove to all FALSE
+ * to_remove[i] represents whether lines[i] should be removed */
+ to_remove = g_malloc(sizeof(gboolean) * num_lines);
+ for(i = 0; i < num_lines; i++)
+ to_remove[i] = FALSE;
+
+ /* find all non unique lines and set them to TRUE (to be removed) */
+ for(i = 0; i < num_lines; i++)
+ /* make sure that the line is not already determined to be non unique */
+ if(!to_remove[i])
+ for(j = (i+1); j < num_lines; j++)
+ if(!to_remove[j] && strcmp(lines[i], lines[j]) == 0)
+ {
+ to_remove[i] = TRUE;
+ to_remove[j] = TRUE;
+ }
+
+ /* copy **lines into 'new_file' if it is not FALSE(not duplicate) */
+ for(i = 0; i < num_lines; i++)
+ if(!to_remove[i])
+ {
+ changed++; /* number of lines kept */
+ nf_end = g_stpcpy(nf_end, lines[i]);
+ }
+
+ /* free used memory */
+ g_free(to_remove);
+
+ /* return the number of lines deleted */
+ return -(num_lines - changed);
+}
+
+
/* Remove Empty Lines */
gint
rmemtyln(ScintillaObject *sci, gint line_num, gint end_line_num)
Modified: lineoperations/src/linefunctions.h
5 lines changed, 5 insertions(+), 0 deletions(-)
===================================================================
@@ -45,6 +45,11 @@ gint
rmunqln(gchar **lines, gint num_lines, gchar *new_file);
+/* Keep Unique Lines */
+gint
+kpunqln(gchar **lines, gint num_lines, gchar *new_file);
+
+
/* Remove Empty Lines */
gint
rmemtyln(ScintillaObject *sci, gint line_num, gint end_line_num);
Modified: lineoperations/src/lineoperations.c
2 lines changed, 2 insertions(+), 0 deletions(-)
===================================================================
@@ -257,6 +257,8 @@ lo_init(GeanyPlugin *plugin, gpointer gdata)
G_CALLBACK(action_indir_manip_item), (gpointer) rmdupln },
{ N_("Remove _Unique Lines"),
G_CALLBACK(action_indir_manip_item), (gpointer) rmunqln },
+ { N_("Keep _Unique Lines"),
+ G_CALLBACK(action_indir_manip_item), (gpointer) kpunqln },
{ NULL },
{ N_("Remove _Empty Lines"),
G_CALLBACK(action_sci_manip_item), (gpointer) rmemtyln },
--------------
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