KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openlaszlo > iv > flash > util > Tokenizer


1 /*
2  * $Id: Tokenizer.java,v 1.2 2002/02/15 23:44:28 skavish Exp $
3  *
4  * ===========================================================================
5  *
6  * The JGenerator Software License, Version 1.0
7  *
8  * Copyright (c) 2000 Dmitry Skavish (skavish@usa.net). All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if
22  * any, must include the following acknowlegement:
23  * "This product includes software developed by Dmitry Skavish
24  * (skavish@usa.net, http://www.flashgap.com/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The name "The JGenerator" must not be used to endorse or promote
29  * products derived from this software without prior written permission.
30  * For written permission, please contact skavish@usa.net.
31  *
32  * 5. Products derived from this software may not be called "The JGenerator"
33  * nor may "The JGenerator" appear in their names without prior written
34  * permission of Dmitry Skavish.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL DMITRY SKAVISH OR THE OTHER
40  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  *
49  */

50
51 package org.openlaszlo.iv.flash.util;
52
53 /**
54  * Simple tokenizer of generator text datasources.
55  *
56  * @author Dmitry Skavish
57  */

58 public final class Tokenizer {
59
60     private String JavaDoc line;
61     private int cur;
62     private int length;
63
64     public Tokenizer( String JavaDoc line ) {
65         this.line = line;
66         cur = 0;
67         length = line.length();
68     }
69
70     private boolean skipBlanks() {
71         while( cur < length && line.charAt(cur) == ' ' ) cur++;
72         return cur >= length;
73     }
74
75     public String JavaDoc getToken() {
76         if( skipBlanks() ) return null;
77
78         boolean quotes;
79         int start;
80
81         char ch = line.charAt(cur);
82         if( ch == '\"' ) {
83             quotes = true;
84             start = ++cur;
85             if( cur >= length ) return null;
86             ch = line.charAt(cur);
87         } else {
88             quotes = false;
89             start = cur;
90         }
91         int end;
92
93     mainLoop:
94         for(;;) {
95             switch( ch ) {
96                 case '\\':
97                     cur++;
98                     if( cur >= length ) {
99                         end = cur;
100                         break mainLoop;
101                     }
102                     break;
103                 case '\"':
104                     if( quotes ) {
105                         end = cur++;
106                         if( skipBlanks() ) break mainLoop;
107                         if( line.charAt(cur) == ',' ) cur++;
108                         break mainLoop;
109                     }
110                     break;
111                 case ',':
112                     if( !quotes ) {
113                         end = cur++;
114                         break mainLoop;
115                     }
116                     break;
117                 default:
118                     break;
119             }
120             cur++;
121             if( cur >= length ) {
122                 end = cur;
123                 break;
124             }
125             ch = line.charAt(cur);
126         }
127
128         // trimming
129
while( start < end && line.charAt(end-1) == ' ' ) end--;
130
131         return line.substring(start, end);
132     }
133
134 }
135
Popular Tags