# 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); + } + }; + } + +}