File: Reverse_Lines.bsh

package info (click to toggle)
jedit 5.3.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 14,252 kB
  • ctags: 11,190
  • sloc: java: 98,480; xml: 94,070; makefile: 52; sh: 42; cpp: 6; python: 6
file content (96 lines) | stat: -rw-r--r-- 2,955 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*
 * Reverse_Lines.bsh - a BeanShell macro script for reversing the order
 * of lines in a buffer.  If there are selections, the lines in the selections
 * will be reversed, otherwise the whole buffer will be reversed.
 * NOTE: Lines are not sorted or reverse sorted, simply reversed.
 *
 * Copyright (C) 2002-2004 Ollie Rutherfurd, oliver@rutherfurd.net
 *
 * :mode=beanshell:tabSize=4:indentSize=4:maxLineLen=0:noTabs=false:
 * :indentOnTab=true:indentOnEnter=true:folding=explicit:collapseFolds=1:
 *
 * $Id: Reverse_Lines.bsh 23971 2015-08-08 19:37:35Z daleanson $
 */

// Localization
final static String NotWorkingRectangularSelectionError = jEdit.getProperty("macro.rs.ReverseLines.NotWorkingRectangularSelection.error", "Sorry, this macro doesn't work with Rectangular Selections.");
final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable"); 

// Process 
void reverseLines(textArea)
{
	JEditBuffer buffer = textArea.getBuffer();
	Selection[] selections = textArea.getSelection();

	// doesn't work with rectangular selections, check for them up-front
	for(int i = 0; i < selections.length; i++)
	{
		if(selections[i] instanceof Selection.Rect)
		{
			Macros.error(view, NotWorkingRectangularSelectionError);
			return;
		}
	}

	// do whole buffer if no selections
	if(selections.length == 0)
	{
		StringBuffer sb = new StringBuffer(buffer.getLength());
		for(int i = buffer.getLineCount() - 1; i >= 0; i--)
		{
			String line = buffer.getLineText(i);
			sb.append(line);
			if(i > 0)	// don't append a newline for the last line
				sb.append('\n');
		}
		buffer.remove(0, buffer.getLength());
		buffer.insert(0, sb.toString());
	}
	// reverse all lines that are selected *NOT* just selected portions of lines
	else
	{
		for(int i = 0; i < selections.length; i++){

			int startLine = selections[i].getStartLine();
			int endLine = selections[i].getEndLine();
			int startOffset = buffer.getLineStartOffset(startLine);

			if(startLine < endLine)
			{
				StringBuffer sb = new StringBuffer();
				for(int i = endLine; i > startLine; i--)
				{
					String line = buffer.getLineText(i);
					sb.append(line).append('\n');
				}

				// appending first line here, so a check
				// can be made to see whether to append
				// a newline (don't if the original line
				// was the last line of the buffer)
				sb.append(buffer.getLineText(startLine));
				if(endLine < buffer.getLineCount() - 1)
					sb.append('\n');

				String reversed = sb.toString();
				buffer.remove(startOffset, reversed.length());
				buffer.insert(startOffset, reversed);
			}
		}
	}
}

	reverseLines(textArea);

/*
	Macro index entry (in DocBook XML)

<listitem>
	<para><filename>Reverse_Lines.bsh</filename></para>
	<abstract><para>
		Reverses the selected lines or the entire buffer if no
		lines are selected.  Does not support Rectangular
		Selections.
	</para></abstract>
</listitem>
*/