01: /*
02: * WhitespaceRule.java
03: * :tabSize=8:indentSize=8:noTabs=false:
04: * :folding=explicit:collapseFolds=1:
05: *
06: * Copyright (C) 2007 Marcelo Vanzin
07: *
08: * This program is free software; you can redistribute it and/or
09: * modify it under the terms of the GNU General Public License
10: * as published by the Free Software Foundation; either version 2
11: * of the License, or any later version.
12: *
13: * This program is distributed in the hope that it will be useful,
14: * but WITHOUT ANY WARRANTY; without even the implied warranty of
15: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16: * GNU General Public License for more details.
17: *
18: * You should have received a copy of the GNU General Public License
19: * along with this program; if not, write to the Free Software
20: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21: */
22:
23: package org.gjt.sp.jedit.indent;
24:
25: import org.gjt.sp.jedit.TextUtilities;
26: import org.gjt.sp.jedit.buffer.JEditBuffer;
27:
28: import java.util.List;
29:
30: /**
31: * Whitespace rule. This rule cancels all indent actions in the
32: * following case:
33: *
34: * <ul>
35: * <li>The previous line is all whitespace</li>
36: * <li>The current line is not empty</li>
37: * </ul>
38: *
39: * <p>The result is that this rule won't allow the indentation to be
40: * increased, only decreased (by rules triggered by unindentThisLine).
41: * If the requirements above do not apply, this rule does nothing.</p>
42: *
43: * @author Marcelo Vanzin
44: * @version $Id: WhitespaceRule.java 9837 2007-06-23 21:41:32Z vanza $
45: * @since jEdit 4.3pre10
46: */
47: public class WhitespaceRule implements IndentRule {
48:
49: public void apply(JEditBuffer buffer, int this LineIndex,
50: int prevLineIndex, int prevPrevLineIndex,
51: List<IndentAction> indentActions) {
52: /* Don't apply this rule if the current line is empty. */
53: String current = buffer.getLineText(this LineIndex);
54: boolean found = false;
55: for (int i = 0; i < current.length(); i++) {
56: if (!Character.isWhitespace(current.charAt(i))) {
57: found = true;
58: break;
59: }
60: }
61: if (!found)
62: return;
63:
64: /* Check if the previous line is empty. */
65: if (prevLineIndex >= 0) {
66: String previous = buffer.getLineText(prevLineIndex);
67: for (int i = 0; i < previous.length(); i++) {
68: if (!Character.isWhitespace(previous.charAt(i)))
69: return;
70: }
71: }
72: indentActions.add(new IndentAction.NoIncrease());
73: }
74:
75: }
|