This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 249051
Collapse All | Expand All

(-)a/editor.document/src/org/netbeans/api/editor/document/LineDocumentUtils.java (+16 lines)
Lines 195-200 Link Here
195
    }
195
    }
196
196
197
    /**
197
    /**
198
     * Get start of a previous word in backward direction.
199
     * 
200
     * @param doc non-null document.
201
     * @param offset >= 0 offset in document.
202
     * @return previous word boundary offset.
203
     */
204
    public static int getPreviousWordStart(@NonNull LineDocument doc, int offset)
205
    throws BadLocationException
206
    {
207
        checkOffsetValid(doc, offset);
208
        CharClassifier classifier = getValidClassifier(doc);
209
        CharSequence docText = DocumentUtilities.getText(doc);
210
        return TextSearchUtils.getPreviousWordStart(docText, classifier, offset);
211
    }
212
213
    /**
198
     * Get first whitespace character in document in forward direction.
214
     * Get first whitespace character in document in forward direction.
199
     *
215
     *
200
     * @param doc document to operate on
216
     * @param doc document to operate on
(-)a/editor.document/src/org/netbeans/modules/editor/document/TextSearchUtils.java (+53 lines)
Lines 238-243 Link Here
238
    }
238
    }
239
239
240
    /**
240
    /**
241
     * Get start of a previous word.
242
     * 
243
     * @param text non-null text to search.
244
     * @param classifier non-null character classifier.
245
     * @param offset >= 0 offset in text.
246
     * @return previous word start offset.
247
     */
248
    public static int getPreviousWordStart(@NonNull CharSequence text, @NonNull CharClassifier classifier, int offset) {
249
        int limitOffset = 0;
250
        boolean inWhitespace = false;
251
        boolean inIdentifier = false;
252
        boolean inPunct = false;
253
        for (int i = offset - 1; i >= limitOffset; i--) {
254
            char ch = text.charAt(i);
255
            if (ch == '\n') {
256
                // If first char skip right below it
257
                return (i == offset - 1) ? i : i + 1;
258
            }
259
            if (classifier.isWhitespace(ch)) {
260
                if (inIdentifier) {
261
                    return i + 1;
262
                }
263
                inWhitespace = true; // Current impl skips WS after identifier
264
            } else {
265
                boolean identifierChar = classifier.isIdentifierPart(ch);
266
                if (inWhitespace) { // non-WS char in front of WS
267
                    if (identifierChar) {
268
                        // Search for identifier start
269
                        inIdentifier = true;
270
                        continue;
271
                    }
272
                }
273
                if (inIdentifier) {
274
                    if (!identifierChar) { // Start of ident
275
                        return i + 1;
276
                    }
277
                }
278
                if (inPunct) {
279
                    if (identifierChar) { // Identifier after punct
280
                        return i + 1;
281
                    }
282
                }
283
                if (identifierChar) {
284
                    inIdentifier = true;
285
                } else {
286
                    inPunct = true;
287
                }
288
            }
289
        }
290
        return limitOffset;
291
    }
292
293
    /**
241
     * Get first whitespace character in text in forward direction.
294
     * Get first whitespace character in text in forward direction.
242
     *
295
     *
243
     * @param text text to operate on.
296
     * @param text text to operate on.
(-)a/editor.document/test/unit/src/org/netbeans/modules/editor/document/TextSearchUtilsTest.java (+154 lines)
Line 0 Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2015 Oracle and/or its affiliates. All rights reserved.
5
 *
6
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
7
 * Other names may be trademarks of their respective owners.
8
 *
9
 * The contents of this file are subject to the terms of either the GNU
10
 * General Public License Version 2 only ("GPL") or the Common
11
 * Development and Distribution License("CDDL") (collectively, the
12
 * "License"). You may not use this file except in compliance with the
13
 * License. You can obtain a copy of the License at
14
 * http://www.netbeans.org/cddl-gplv2.html
15
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
16
 * specific language governing permissions and limitations under the
17
 * License.  When distributing the software, include this License Header
18
 * Notice in each file and include the License file at
19
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
20
 * particular file as subject to the "Classpath" exception as provided
21
 * by Oracle in the GPL Version 2 section of the License file that
22
 * accompanied this code. If applicable, add the following below the
23
 * License Header, with the fields enclosed by brackets [] replaced by
24
 * your own identifying information:
25
 * "Portions Copyrighted [year] [name of copyright owner]"
26
 *
27
 * If you wish your version of this file to be governed by only the CDDL
28
 * or only the GPL Version 2, indicate your decision by adding
29
 * "[Contributor] elects to include this software in this distribution
30
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
31
 * single choice of license, a recipient has the option to distribute
32
 * your version of this file under either the CDDL, the GPL Version 2 or
33
 * to extend the choice of license to its licensees as provided above.
34
 * However, if you add GPL Version 2 code and therefore, elected the GPL
35
 * Version 2 license, then the option applies only if the new code is
36
 * made subject to such option by the copyright holder.
37
 *
38
 * Contributor(s):
39
 *
40
 * Portions Copyrighted 2015 Sun Microsystems, Inc.
41
 */
42
package org.netbeans.modules.editor.document;
43
44
import org.junit.Test;
45
import static org.junit.Assert.*;
46
import org.netbeans.modules.editor.document.implspi.CharClassifier;
47
48
/**
49
 *
50
 * @author Miloslav Metelka
51
 */
52
public class TextSearchUtilsTest {
53
    
54
    public TextSearchUtilsTest() {
55
    }
56
57
    private static final String THREE_IDENTIFIERS_TEXT = "One Two Three";
58
    
59
    /**
60
     * Test of getWordStart method, of class TextSearchUtils.
61
     */
62
    @Test
63
    public void testGetWordStart() throws Exception {
64
    }
65
66
    /**
67
     * Test of getWordEnd method, of class TextSearchUtils.
68
     */
69
    @Test
70
    public void testGetWordEnd() {
71
    }
72
73
    /**
74
     * Test of getWord method, of class TextSearchUtils.
75
     */
76
    @Test
77
    public void testGetWord() throws Exception {
78
    }
79
80
    /**
81
     * Test of getNextWordStart method, of class TextSearchUtils.
82
     */
83
    @Test
84
    public void testGetNextWordStart() {
85
    }
86
87
    /**
88
     * Test of getPreviousWordEnd method, of class TextSearchUtils.
89
     */
90
    @Test
91
    public void testGetPreviousWordEnd() {
92
    }
93
94
    /**
95
     * Test of getPreviousWordBoundary method, of class TextSearchUtils.
96
     */
97
    @Test
98
    public void testGetPreviousWordStart() {
99
        assertEquals(8, TextSearchUtils.getPreviousWordStart(
100
                THREE_IDENTIFIERS_TEXT, TextSearchUtils.DEFAULT_CLASSIFIER, THREE_IDENTIFIERS_TEXT.length()));
101
        assertEquals(4, TextSearchUtils.getPreviousWordStart(
102
                THREE_IDENTIFIERS_TEXT, TextSearchUtils.DEFAULT_CLASSIFIER, 8));
103
    }
104
105
    /**
106
     * Test of getNextWhitespace method, of class TextSearchUtils.
107
     */
108
    @Test
109
    public void testGetNextWhitespace() {
110
    }
111
112
    /**
113
     * Test of getPreviousWhitespace method, of class TextSearchUtils.
114
     */
115
    @Test
116
    public void testGetPreviousWhitespace() {
117
    }
118
119
    /**
120
     * Test of getNextNonWhitespace method, of class TextSearchUtils.
121
     */
122
    @Test
123
    public void testGetNextNonWhitespace() {
124
    }
125
126
    /**
127
     * Test of getPreviousNonWhitespace method, of class TextSearchUtils.
128
     */
129
    @Test
130
    public void testGetPreviousNonWhitespace() {
131
    }
132
133
    /**
134
     * Test of getNextNonNewline method, of class TextSearchUtils.
135
     */
136
    @Test
137
    public void testGetNextNonNewline() {
138
    }
139
140
    /**
141
     * Test of getPreviousNonNewline method, of class TextSearchUtils.
142
     */
143
    @Test
144
    public void testGetPreviousNonNewline() {
145
    }
146
147
    /**
148
     * Test of isLineEmpty method, of class TextSearchUtils.
149
     */
150
    @Test
151
    public void testIsLineEmpty() {
152
    }
153
    
154
}
(-)a/editor.lib/src/org/netbeans/editor/Utilities.java (-1 / +1 lines)
Lines 446-452 Link Here
446
    @Deprecated
446
    @Deprecated
447
    public static int getPreviousWord(BaseDocument doc, int offset)
447
    public static int getPreviousWord(BaseDocument doc, int offset)
448
    throws BadLocationException {
448
    throws BadLocationException {
449
        return LineDocumentUtils.getPreviousWordEnd(doc, offset);
449
        return LineDocumentUtils.getPreviousWordStart(doc, offset);
450
    }
450
    }
451
451
452
    /** Get first white character in document in forward direction
452
    /** Get first white character in document in forward direction

Return to bug 249051