01: package org.ofbiz.rules.parse.tokens;
02:
03: import java.io.*;
04:
05: /**
06: * <p><b>Title:</b> Whitespace State
07: * <p><b>Description:</b> None
08: * <p>Copyright (c) 1999 Steven J. Metsker.
09: * <p>Copyright (c) 2001 The Open For Business Project - www.ofbiz.org
10: *
11: * <p>Permission is hereby granted, free of charge, to any person obtaining a
12: * copy of this software and associated documentation files (the "Software"),
13: * to deal in the Software without restriction, including without limitation
14: * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15: * and/or sell copies of the Software, and to permit persons to whom the
16: * Software is furnished to do so, subject to the following conditions:
17: *
18: * <p>The above copyright notice and this permission notice shall be included
19: * in all copies or substantial portions of the Software.
20: *
21: * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22: * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
24: * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
25: * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
26: * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
27: * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28: *
29: * <br>
30: * A whitespace state ignores whitespace (such as blanks
31: * and tabs), and returns the tokenizer's next token. By
32: * default, all characters from 0 to 32 are whitespace.
33: *
34: * @author Steven J. Metsker
35: * @version 1.0
36: */
37: public class WhitespaceState extends TokenizerState {
38: protected boolean whitespaceChar[] = new boolean[256];
39:
40: /**
41: * Constructs a whitespace state with a default idea of what
42: * characters are, in fact, whitespace.
43: *
44: * @return a state for ignoring whitespace
45: */
46: public WhitespaceState() {
47: setWhitespaceChars(0, ' ', true);
48: }
49:
50: /**
51: * Ignore whitespace (such as blanks and tabs), and return
52: * the tokenizer's next token.
53: *
54: * @return the tokenizer's next token
55: */
56: public Token nextToken(PushbackReader r, int aWhitespaceChar,
57: Tokenizer t) throws IOException {
58:
59: int c;
60:
61: do {
62: c = r.read();
63: } while (c >= 0 && c < whitespaceChar.length
64: && whitespaceChar[c]);
65:
66: if (c >= 0) {
67: r.unread(c);
68: }
69: return t.nextToken();
70: }
71:
72: /**
73: * Establish the given characters as whitespace to ignore.
74: *
75: * @param first char
76: *
77: * @param second char
78: *
79: * @param boolean true, if this state should ignore
80: * characters in the given range
81: */
82: public void setWhitespaceChars(int from, int to, boolean b) {
83: for (int i = from; i <= to; i++) {
84: if (i >= 0 && i < whitespaceChar.length) {
85: whitespaceChar[i] = b;
86: }
87: }
88: }
89: }
|