[geany/geany-plugins] 41a53a: Added Comments/documentation
Sylvan Mostert
git-noreply at xxxxx
Sun Jan 10 05:44:15 UTC 2016
Branch: refs/heads/master
Author: Sylvan Mostert <smostert.dev at gmail.com>
Committer: Sylvan Mostert <smostert.dev at gmail.com>
Date: Sun, 10 Jan 2016 05:44:15 UTC
Commit: 41a53a4e079a78e9eee5aacdbc8f440be7b13ddf
https://github.com/geany/geany-plugins/commit/41a53a4e079a78e9eee5aacdbc8f440be7b13ddf
Log Message:
-----------
Added Comments/documentation
Signed-off-by: Sylvan Mostert <smostert.dev at gmail.com>
Modified Paths:
--------------
lineoperations/README
lineoperations/README.md
lineoperations/src/linefunctions.c
lineoperations/src/linefunctions.h
Modified: lineoperations/README
68 lines changed, 0 insertions(+), 68 deletions(-)
===================================================================
@@ -1,68 +0,0 @@
-LineOperations
-==============
-
-.. contents::
-
-About
-=====
-
-Line Operations is a plugin for Geany that gives a convenient option to
-remove duplicate lines, remove unique lines, remove empty lines,
-remove lines with only whitespace, and sort lines.
-
-
-Features
---------
-
-* Remove dupulicate lines
-* Remove unique lines
-* Remove empty lines
-* Remove whitespace lines
-* Sort lines ascending
-* Sort lines descending
-
-Usage
------
-
-After the plugins has been installed successfully, load the plugin via
-Geany's plugin manager and a new menu item in the Tools menu will appear.
-
-Remove Duplicate Lines
-^^^^^^^^^^^^^^^^^^^^^^
-
-The first occurance of each duplicate line will remain in the file.
-
-e.g. If a file has the following lines:
-Line 2
-Line 1
-Line 2
-
-The 'Remove Duplicate Lines' will change the file into this:
-Line 2
-Line 1
-
-Remove Unique Lines
-^^^^^^^^^^^^^^^^^^^
-
-
-
-License
--------
-
-The Line Operations plugin is distributed under the terms of the
-GNU General Public License as published by the Free Software Foundation;
-either version 2 of the License, or (at your option) any later version.
-A copy of this license can be found in the file COPYING included with the
-source code of this program.
-
-Ideas, questions, patches and bug reports
------------------------------------------
-
-Please direct all questions, bug reports and patches to the plugin author using the
-email address listed below or to the Geany mailing list to get some help from other
-Geany users.
-
-
-or report them at https://github.com/geany/geany-plugins/issues.
-
-
Modified: lineoperations/README.md
186 lines changed, 186 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,186 @@
+# LineOperations #
+
+
+## About ##
+
+*Line Operations* is a plugin for *Geany* that gives a convenient option to apply some useful line operations on an open file.
+
+### Features ###
+
+* [Remove Duplicate Lines, sorted](#remove-duplicate-lines)
+* [Remove Duplicate Lines, ordered](#remove-duplicate-lines)
+* [Remove Unique Lines](#remove-unique-lines)
+* [Remove Empty Lines](#remove-empty-lines)
+* [Remove Whitespace Lines](#remove-whitespace-lines)
+* [Sort Lines Ascending](#sort-lines)
+* [Sort Lines Descending](#sort-lines)
+
+## Usage ##
+
+After the plugins has been installed successfully, load the plugin via
+Geany's plugin manager and a new menu item in the Tools menu will appear. Click on each menu item to apply operation on whole file. See descriptions below to see operations for each menu item.
+
+### Notes ###
+
+1. Line Operations will **not** make changes to a file until you save the file.
+
+2. New line characters are considered to be part of the line. If the last line does not contain new line characters it will be considered different from a line with new line character(s).
+
+ line 1
+
+ is not the same as:
+
+ line 1\r\n
+
+
+### Operation Details ###
+
+#### Remove Duplicate Lines ####
+
+The first occurrence of each duplicate line will remain in the file.**Sorted** option will sort the file and remove duplicate lines **[fast]**. **Ordered** option will keep the same order of lines **[slow]**.
+
+**Example:** Suppose a file has the following lines. (#comments added for clarity)
+
+ Line 2
+ Line 1
+ Line 2 #removed
+ Line 3
+ Line 1 #removed
+ Line 2 #removed
+
+The **Remove Duplicate Lines, sorted** will change the file into this:
+
+ Line 1
+ Line 2
+ Line 3
+
+The **Remove Duplicate Lines, ordered** will change the file into this:
+
+ Line 2
+ Line 1
+ Line 3
+
+
+
+#### Remove Unique Lines ####
+
+Removes all lines that appear only once.
+
+**Example:** Suppose a file has the following lines. (#comments added for clarity)
+
+ Line 2
+ Line 1
+ Line 2
+ Line 3 #removed
+ Line 1
+ Line 2
+
+The 'Remove Unique Lines' will change the file into this:
+
+ Line 2
+ Line 1
+ Line 2
+ Line 1
+ Line 2
+
+#### Remove Empty Lines ####
+
+Removes all lines that end with a newline character(s) AND do not have any other characters.
+
+**Example:** Suppose a file has the following lines. (#comments, and \n newline characters added for clarity)
+
+ Line 2\n
+ Line 1\n
+ \n #removed
+ \n #NOT removed (contains spaces)
+ Line 1\n
+ Line 2\n
+
+The 'Remove Unique Lines' will change the file into this:
+
+ Line 2\n
+ Line 1\n
+ \n
+ Line 1\n
+ Line 2\n
+
+
+#### Remove Whitespace Lines ####
+
+Removes all lines that have only white space characters.
+
+A **white space character** is one of:
+
+1. ```' '``` : space
+2. ```'\t'```: horizontal tab
+3. ```'\f'```: form feed
+4. ```'\v'```: vertical tab
+5. ```'\r'```: cartridge return
+6. ```'\n'```: newline character
+
+**Example:** Suppose a file has the following lines. (#comments, and \n newline characters added for clarity)
+
+ Line 2\n
+ Line 1\n
+ \n #removed
+ \n #removed (contains only whitespace chars)
+ \t \n #removed (contains only whitespace chars)
+ Line 1\n #NOT removed (contains non whitespace chars)
+ Line 2\n
+
+The 'Remove Unique Lines' will change the file into this:
+
+ Line 2\n
+ Line 1\n
+ Line 1\n
+ Line 2\n
+
+#### Sort Lines ####
+
+Sorts lines ascending or descending based on ASCII values (lexicographic sort)
+
+
+**Example:** Suppose a file has the following lines.
+
+ line 1
+ line 2
+ line
+ line 3
+ line
+
+The **Sort Lines Ascending** will change the file into this:
+
+ line
+ line
+ line 1
+ line 2
+ line 3
+
+
+The **Sort Lines Descending** will change the file into this:
+
+ line 3
+ line 2
+ line 1
+ line
+ line
+
+
+## License ##
+
+The Line Operations plugin is distributed under the terms of the
+GNU General Public License as published by the Free Software Foundation;
+either version 2 of the License, or (at your option) any later version.
+A copy of this license can be found in the file COPYING included with the
+source code of this program.
+
+## Ideas, questions, patches and bug reports ##
+
+Please direct all questions, bug reports and patches to the plugin author using the
+email address listed below or to the *Geany* mailing list to get some help from other
+*Geany* users.
+
+
+or report them at https://github.com/geany/geany-plugins/issues.
+
+
Modified: lineoperations/src/linefunctions.c
79 lines changed, 43 insertions(+), 36 deletions(-)
===================================================================
@@ -22,10 +22,11 @@
#include "linefunctions.h"
-// isspace() without newline comparisons
+// isspace()
gboolean issp(gchar c)
{
- return (c == ' ' || c == '\t' || c == '\f' || c == '\v');
+ return (c == ' ' || c == '\t' || c == '\f' ||
+ c == '\v' || c == '\r' || c == '\n');
}
@@ -75,9 +76,9 @@ void rmdupst(GeanyDocument *doc) {
nfposn = 0;
k = 0;
- if(newfile && lines) // verify memory allocation worked
+ if(newfile && lines) // verify memory allocation
{
- // put contents of document into **lines array
+ // copy *all* lines into **lines array
for(i = 0; i < totalnumlines; i++)
lines[numlines++] = sci_get_line(doc->editor->sci, i);
@@ -95,12 +96,12 @@ void rmdupst(GeanyDocument *doc) {
newfile[nfposn++] = lines[i][j];
k = i;
}
+
newfile[nfposn] = '\0';
+ sci_set_text(doc->editor->sci, newfile); // set new document
}
- // set the *newfile as current document
- sci_set_text(doc->editor->sci, newfile);
// free used memory
for(i = 0; i < numlines; i++)
@@ -130,9 +131,9 @@ void rmdupln(GeanyDocument *doc) {
nfposn = 0;
toremove = NULL;
- if(newfile && lines)
+ if(newfile && lines) // verify memory allocation
{
- // put contents of document into **lines array
+ // copy *all* lines into **lines array
for(i = 0; i < totalnumlines; i++)
lines[numlines++] = sci_get_line(doc->editor->sci, i);
@@ -148,11 +149,12 @@ void rmdupln(GeanyDocument *doc) {
for(j = (i+1); j < numlines; j++)
if(!toremove[j])
if(strcmp(lines[i], lines[j]) == 0) {
- toremove[j] = TRUE;
- //toremove[i] = TRUE;//remove all occurrances
+ toremove[j] = TRUE; // this line is duplicate,
+ // mark to remove
+ //toremove[i] = TRUE; //remove all occurrances
}
- // copy line into 'newfile' if it is not FALSE(unique)
+ // copy line into 'newfile' if it is not FALSE(not duplicate)
for(i = 0; i < numlines; i++)
{
if(!toremove[i])
@@ -160,10 +162,11 @@ void rmdupln(GeanyDocument *doc) {
newfile[nfposn++] = lines[i][j];
if(lines[i]) g_free(lines[i]);
}
+
newfile[nfposn] = '\0';
+ sci_set_text(doc->editor->sci, newfile); // set new document
}
- newfile[nfposn] = '\0';
- sci_set_text(doc->editor->sci, newfile);
+
// each line is freed in above for-loop
if(lines) g_free(lines);
@@ -192,12 +195,13 @@ void rmunqln(GeanyDocument *doc) {
nfposn = 0;
toremove = NULL;
- if(newfile && lines)
+ if(newfile && lines) // verify memory allocation
{
// copy *all* lines into **lines array
for(i = 0; i < totalnumlines; i++)
lines[numlines++] = sci_get_line(doc->editor->sci, i);
+ // allocate and set *toremove to all TRUE
toremove = g_malloc(sizeof(gboolean) * numlines);
for(i = 0; i < (numlines); i++)
toremove[i] = TRUE;
@@ -223,10 +227,11 @@ void rmunqln(GeanyDocument *doc) {
newfile[nfposn++] = lines[i][j];
if(lines[i]) g_free(lines[i]);
}
+
newfile[nfposn] = '\0';
+ sci_set_text(doc->editor->sci, newfile); // set new document
}
- newfile[nfposn] = '\0';
- sci_set_text(doc->editor->sci, newfile);
+
// each line is freed in above for-loop
if(lines) g_free(lines);
@@ -241,7 +246,7 @@ void rmemtyln(GeanyDocument *doc) {
gint totalnumlines; // number of lines in the document
gchar *line; // temporary line
gint linelen; // length of *line
- gchar *newfile; // pointer for new document
+ gchar *newfile; // *final* string to replace current document
gint nfposn; // position to the last character in newfile
gint i; // temporary iterator number
gint j; // iterator
@@ -257,7 +262,7 @@ void rmemtyln(GeanyDocument *doc) {
newfile = g_malloc(sizeof(gchar) * (totalnumchars+1));
nfposn = 0;
- if(newfile) // make sure newfile memory allocation has not failed (NULL)
+ if(newfile) // verify memory allocation
{
for(i = 0; i < totalnumlines; i++) // loop through opened doc char by char
{
@@ -268,35 +273,36 @@ void rmemtyln(GeanyDocument *doc) {
line = sci_get_line(doc->editor->sci, i);
if(line[0] != '\r')
+ // copy current line into *newfile
for(j = 0; line[j] != '\0'; j++)
newfile[nfposn++] = line[j];
}
- else if(linelen != 1) {
+ else if(linelen != 1)
+ {
line = sci_get_line(doc->editor->sci, i);
+ // copy current line into *newfile
for(j = 0; line[j] != '\0'; j++)
newfile[nfposn++] = line[j];
}
}
newfile[nfposn] = '\0';
+ sci_set_text(doc->editor->sci, newfile); // set new document
- // set old file with new file
- sci_set_text(doc->editor->sci, newfile);
-
g_free(newfile);
}
}
-
+// Remove Whitespace Lines
void rmwhspln(GeanyDocument *doc) {
gint totalnumchars; // number of characters in the document
gint totalnumlines; // number of lines in the document
gchar *line; // temporary line
gint linelen; // length of *line
- gchar *newfile; // pointer for new document
+ gchar *newfile; // *final* string to replace current document
gint nfposn; // position to the last character in newfile
gint i; // temporary iterator number
gint j; // iterator
@@ -312,9 +318,9 @@ void rmwhspln(GeanyDocument *doc) {
newfile = g_malloc(sizeof(gchar) * (totalnumchars+1));
nfposn = 0;
- if(newfile) // make sure newfile memory allocation has not failed (NULL)
+ if(newfile) // verify memory allocation
{
- for(i = 0; i < totalnumlines; i++) // loop through opened doc char by char
+ for(i = 0; i < totalnumlines; i++) // loop through opened doc
{
linelen = sci_get_line_length(doc->editor->sci, i);
@@ -323,29 +329,30 @@ void rmwhspln(GeanyDocument *doc) {
line = sci_get_line(doc->editor->sci, i);
if(line[0] != '\r')
+ // copy current line into *newfile
for(j = 0; line[j] != '\0'; j++)
newfile[nfposn++] = line[j];
}
- else if(linelen != 1) {
+ else if(linelen != 1)
+ {
line = sci_get_line(doc->editor->sci, i);
+
if(!iswhitespaceline(line))
+ // copy current line into *newfile
for(j = 0; line[j] != '\0'; j++)
newfile[nfposn++] = line[j];
}
}
newfile[nfposn] = '\0';
-
-
- // set old file with new file
- sci_set_text(doc->editor->sci, newfile);
+ sci_set_text(doc->editor->sci, newfile); // set new document
g_free(newfile);
}
}
-
+// Sort Lines Ascending and Descending
void sortlines(GeanyDocument *doc, gboolean asc) {
gint totalnumchars; // number of characters in the document
gint totalnumlines; // number of lines in the document
@@ -365,15 +372,17 @@ void sortlines(GeanyDocument *doc, gboolean asc) {
if(newfile && lines) // verify memory allocation worked
{
+ // copy *all* lines into **lines array
for(i = 0; i < totalnumlines; i++)
lines[numlines++] = sci_get_line(doc->editor->sci, i);
+ // sort **lines array
if(asc)
qsort(lines, numlines, sizeof(gchar *), compareasc);
else
qsort(lines, numlines, sizeof(gchar *), comparedesc);
-
+ // copy **lines array into *newfile
for(i = 0; i < numlines; i++)
{
for(j = 0; lines[i][j] != '\0'; j++)
@@ -382,12 +391,10 @@ void sortlines(GeanyDocument *doc, gboolean asc) {
if(lines[i]) g_free(lines[i]);
}
newfile[nfposn] = '\0';
+ sci_set_text(doc->editor->sci, newfile); // set new document
}
- sci_set_text(doc->editor->sci, newfile);
-
-
// each line is freed in above for-loop
if(lines) g_free(lines);
if(newfile) g_free(newfile);
Modified: lineoperations/src/linefunctions.h
12 lines changed, 12 insertions(+), 0 deletions(-)
===================================================================
@@ -28,16 +28,28 @@
//#include <ctype.h> /* isspace */
#include <stdlib.h> /* qsort */
+
+// Remove Duplicate Lines, sorted
void rmdupst(GeanyDocument *doc);
+
+// Remove Duplicate Lines, ordered
void rmdupln(GeanyDocument *doc);
+
+// Remove Unique Lines
void rmunqln(GeanyDocument *doc);
+
+// Remove Empty Lines
void rmemtyln(GeanyDocument *doc);
+
+// Remove Whitespace Lines
void rmwhspln(GeanyDocument *doc);
+
+// Sort Lines Ascending and Descending
void sortlines(GeanyDocument *doc, gboolean asc);
#endif
--------------
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