2 * Copyright (C) 2001, 2002 The Mir-coders group
4 * This file is part of Mir.
6 * Mir is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * Mir is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Mir; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * In addition, as a special exception, The Mir-coders gives permission to link
21 * the code of this program with any library licensed under the Apache Software License,
22 * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
23 * (or with modified versions of the above that use the same license as the above),
24 * and distribute linked combinations including the two. You must obey the
25 * GNU General Public License in all respects for all of the code used other than
26 * the above mentioned libraries. If you modify this file, you may extend this
27 * exception to your version of the file, but you are not obligated to do so.
28 * If you do not wish to do so, delete this exception statement from your version.
33 import java.util.HashMap;
35 import java.util.List;
36 import java.util.ArrayList;
38 public class StringParseRoutines {
40 private final static String SPACE = "[\t\n\r ]*";
41 private final static String IDENTIFIER = "[a-zA-Z_][a-zA-Z0-9_]*";
42 private final static String EQUALS = "=";
43 private final static String VALUE = "[^;]*";
44 private final static String SEMICOLON = ";";
47 * Parses an expression of the form " a = b ; c = d" into a map
49 public static Map parseValueList(String anExpression) throws SimpleParser.SimpleParserFailure, SimpleParser.SimpleParserExc {
52 Map result = new HashMap();
53 SimpleParser parser = new SimpleParser(anExpression);
56 while (!parser.isAtEnd()) {
57 key = parser.parse(IDENTIFIER, "key expected");
59 parser.parse(EQUALS, "'=' expected");
61 value = parser.parse(VALUE, "value expected");
63 result.put(key, value);
66 if (!parser.isAtEnd()) {
67 parser.parse(SEMICOLON, "; expected");
75 * Utility function for {@link #parseBracketedExpression}:
76 * Adds a single part of a bracketed expression by looking for a
79 private static int findNextBracketedPart(String anExpression, int aStartingPosition, char anEscape, String aTerminator, List aResult) {
80 int position = aStartingPosition;
81 StringBuffer result = new StringBuffer();
83 while (position<anExpression.length()) {
84 if (anExpression.charAt(position)==anEscape && position+1<anExpression.length()) {
85 result.append(anExpression.charAt(position+1));
89 else if (anExpression.startsWith(aTerminator, position)) {
90 aResult.add(result.toString());
94 result.append(anExpression.charAt(position));
99 aResult.add(result.toString());
104 * Parses a "bracketed expression" into parts.
105 * "Bracketed" here means the expression consists of plain text and bracketed
106 * parts. e.g. <code>"some string {some expression} some string"</code>.
107 * { here starts a bracket, } ends one.
109 public static List parseBracketedExpression(String anExpression, char anEscape,
110 String anOpeningBracket, String aClosingBracket) {
111 List result = new ArrayList();
115 position = findNextBracketedPart(anExpression, position, anEscape, anOpeningBracket, result);
117 position+=anOpeningBracket.length();
118 position = findNextBracketedPart(anExpression, position, anEscape, aClosingBracket, result);
120 position+=aClosingBracket.length();
123 } while (position>=0);