# This patch is released under the Eclipse Public License v1.0.
diff -r 69aa3375f190 AnyEditTools/plugin.properties
--- a/AnyEditTools/plugin.properties
+++ b/AnyEditTools/plugin.properties
@@ -56,3 +56,11 @@
base64encode = To Base64
fromUnicode = From Unicode Notation
toUnicode = To Unicode Notation
+
+sort=Sort
+sortAlphabeticallyCaseSensitiveAscending=Sort Case-Sensitive A-Z
+sortAlphabeticallyCaseSensitiveDescending=Sort Case-Sensitive Z-A
+sortAlphabeticallyCaseInsensitiveAscending=Sort Case-Insensitive A-Z
+sortAlphabeticallyCaseInsensitiveDescending=Sort Case-Insensitive Z-A
+sortNumericallyAscending=Sort Numerically 0-9
+sortNumericallyDescending=Sort Numerically 9-0
diff -r 69aa3375f190 AnyEditTools/plugin.xml
--- a/AnyEditTools/plugin.xml
+++ b/AnyEditTools/plugin.xml
@@ -691,6 +691,41 @@
id="AnyEdit.replaceWith.editor"
name="%_replaceWithEditor"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
1) {
+ // Yes. So get the line delimiter from there.
+ delimiter = document.getLineDelimiter(n - 1);
+ if (delimiter != null) {
+ return delimiter;
+ }
+ }
+
+ // Last resort.
+ return System.getProperty("line.separator");
+ }
+
+ private void sortLines(List lines) {
+ Collections.sort(lines, getComparator());
+ }
+
+ private void addLines(TextReplaceResultSet results, List lineList) {
+ Iterator lines = lineList.iterator();
+ while (lines.hasNext()) {
+ results.add((LineReplaceResult) lines.next());
+ }
+ }
+
+ private ITextSelection getSelection() {
+ ISelectionProvider selectionProvider = getEditor().getSelectionProvider();
+ if (selectionProvider == null) {
+ return null;
+ }
+
+ ISelection selection = selectionProvider.getSelection();
+ if (selection == null) {
+ return null;
+ }
+
+ if (!(selection instanceof ITextSelection)) {
+ return null;
+ }
+
+ return (ITextSelection) selection;
+ }
+
+}
diff -r 69aa3375f190 AnyEditTools/src/de/loskutov/anyedit/actions/sort/AbstractSortComparator.java
--- /dev/null
+++ b/AnyEditTools/src/de/loskutov/anyedit/actions/sort/AbstractSortComparator.java
@@ -0,0 +1,50 @@
+package de.loskutov.anyedit.actions.sort;
+
+import java.math.BigInteger;
+import java.util.Comparator;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import de.loskutov.anyedit.util.LineReplaceResult;
+
+/**
+ * @author Clemens Fuchslocher
+ */
+public abstract class AbstractSortComparator implements Comparator {
+
+ private Pattern pattern = Pattern.compile("^\\s*(-?\\d+)");
+
+ protected int compareLineCaseInsensitive(Object left, Object right) {
+ int result = line(left).compareToIgnoreCase(line(right));
+ if (result == 0) {
+ result = line(left).compareTo(line(right));
+ }
+ return result;
+ }
+
+ protected String line(Object object) {
+ String line = ((LineReplaceResult) object).textToReplace;
+ if (line != null) {
+ return line;
+ }
+ return "";
+ }
+
+ protected int compareNumber(Object left, Object right) {
+ BigInteger l = number(left);
+ BigInteger r = number(right);
+ if (l == null || r == null) {
+ return 0;
+ }
+ return l.compareTo(r);
+ }
+
+ private BigInteger number(Object object) {
+ Matcher matcher = pattern.matcher(line(object));
+ if (matcher.find()) {
+ return new BigInteger(matcher.group(1));
+ }
+ return null;
+ }
+
+}
diff -r 69aa3375f190 AnyEditTools/src/de/loskutov/anyedit/actions/sort/SortAlphabeticallyCaseInsensitiveAscending.java
--- /dev/null
+++ b/AnyEditTools/src/de/loskutov/anyedit/actions/sort/SortAlphabeticallyCaseInsensitiveAscending.java
@@ -0,0 +1,18 @@
+package de.loskutov.anyedit.actions.sort;
+
+import java.util.Comparator;
+
+/**
+ * @author Clemens Fuchslocher
+ */
+public class SortAlphabeticallyCaseInsensitiveAscending extends AbstractSortAction {
+
+ protected Comparator getComparator() {
+ return new AbstractSortComparator() {
+ public int compare(Object left, Object right) {
+ return compareLineCaseInsensitive(left, right);
+ }
+ };
+ }
+
+}
diff -r 69aa3375f190 AnyEditTools/src/de/loskutov/anyedit/actions/sort/SortAlphabeticallyCaseInsensitiveDescending.java
--- /dev/null
+++ b/AnyEditTools/src/de/loskutov/anyedit/actions/sort/SortAlphabeticallyCaseInsensitiveDescending.java
@@ -0,0 +1,18 @@
+package de.loskutov.anyedit.actions.sort;
+
+import java.util.Comparator;
+
+/**
+ * @author Clemens Fuchslocher
+ */
+public class SortAlphabeticallyCaseInsensitiveDescending extends AbstractSortAction {
+
+ protected Comparator getComparator() {
+ return new AbstractSortComparator() {
+ public int compare(Object left, Object right) {
+ return -compareLineCaseInsensitive(left, right);
+ }
+ };
+ }
+
+}
diff -r 69aa3375f190 AnyEditTools/src/de/loskutov/anyedit/actions/sort/SortAlphabeticallyCaseSensitiveAscending.java
--- /dev/null
+++ b/AnyEditTools/src/de/loskutov/anyedit/actions/sort/SortAlphabeticallyCaseSensitiveAscending.java
@@ -0,0 +1,18 @@
+package de.loskutov.anyedit.actions.sort;
+
+import java.util.Comparator;
+
+/**
+ * @author Clemens Fuchslocher
+ */
+public class SortAlphabeticallyCaseSensitiveAscending extends AbstractSortAction {
+
+ protected Comparator getComparator() {
+ return new AbstractSortComparator() {
+ public int compare(Object left, Object right) {
+ return line(left).compareTo(line(right));
+ }
+ };
+ }
+
+}
diff -r 69aa3375f190 AnyEditTools/src/de/loskutov/anyedit/actions/sort/SortAlphabeticallyCaseSensitiveDescending.java
--- /dev/null
+++ b/AnyEditTools/src/de/loskutov/anyedit/actions/sort/SortAlphabeticallyCaseSensitiveDescending.java
@@ -0,0 +1,18 @@
+package de.loskutov.anyedit.actions.sort;
+
+import java.util.Comparator;
+
+/**
+ * @author Clemens Fuchslocher
+ */
+public class SortAlphabeticallyCaseSensitiveDescending extends AbstractSortAction {
+
+ protected Comparator getComparator() {
+ return new AbstractSortComparator() {
+ public int compare(Object left, Object right) {
+ return -line(left).compareTo(line(right));
+ }
+ };
+ }
+
+}
diff -r 69aa3375f190 AnyEditTools/src/de/loskutov/anyedit/actions/sort/SortNumericallyAscending.java
--- /dev/null
+++ b/AnyEditTools/src/de/loskutov/anyedit/actions/sort/SortNumericallyAscending.java
@@ -0,0 +1,18 @@
+package de.loskutov.anyedit.actions.sort;
+
+import java.util.Comparator;
+
+/**
+ * @author Clemens Fuchslocher
+ */
+public class SortNumericallyAscending extends AbstractSortAction {
+
+ protected Comparator getComparator() {
+ return new AbstractSortComparator() {
+ public int compare(Object left, Object right) {
+ return compareNumber(left, right);
+ }
+ };
+ }
+
+}
diff -r 69aa3375f190 AnyEditTools/src/de/loskutov/anyedit/actions/sort/SortNumericallyDescending.java
--- /dev/null
+++ b/AnyEditTools/src/de/loskutov/anyedit/actions/sort/SortNumericallyDescending.java
@@ -0,0 +1,18 @@
+package de.loskutov.anyedit.actions.sort;
+
+import java.util.Comparator;
+
+/**
+ * @author Clemens Fuchslocher
+ */
+public class SortNumericallyDescending extends AbstractSortAction {
+
+ protected Comparator getComparator() {
+ return new AbstractSortComparator() {
+ public int compare(Object left, Object right) {
+ return -compareNumber(left, right);
+ }
+ };
+ }
+
+}