01: /*
02: *
03: *
04: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
05: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
06: *
07: * This program is free software; you can redistribute it and/or
08: * modify it under the terms of the GNU General Public License version
09: * 2 only, as published by the Free Software Foundation.
10: *
11: * This program is distributed in the hope that it will be useful, but
12: * WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * General Public License version 2 for more details (a copy is
15: * included at /legal/license.txt).
16: *
17: * You should have received a copy of the GNU General Public License
18: * version 2 along with this work; if not, write to the Free Software
19: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20: * 02110-1301 USA
21: *
22: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
23: * Clara, CA 95054 or visit www.sun.com if you need additional
24: * information or have any questions.
25: */
26:
27: package com.sun.perseus.parser;
28:
29: /**
30: * The <code>ViewBoxParser</code> class converts attributes conforming to the
31: * SVG <a href="http://www.w3.org/TR/SVG11/paths.html#PathDataBNF">viewbox
32: * syntax</a>
33: * into an array of four floating point values corresponding to the input
34: * string.
35: *
36: * @version $Id: ViewBoxParser.java,v 1.3 2006/04/21 06:40:44 st125089 Exp $
37: */
38: public class ViewBoxParser extends NumberParser {
39: /**
40: * @param value the string containing the viewbox specification
41: * @return an array of four float corresponding to the input
42: * viewbox specification.
43: * The method throws an <code>IllegalArgumentException</code>
44: * if the viewbox string is malformed.
45: */
46: public float[][] parseViewBox(final String value) {
47: setString(value);
48: current = read();
49:
50: if (current == -1) {
51: return null;
52: }
53:
54: float[][] vb = new float[3][];
55: vb[0] = new float[2];
56: vb[1] = new float[1];
57: vb[2] = new float[1];
58: skipSpaces();
59: vb[0][0] = parseNumber();
60: skipCommaSpaces();
61: vb[0][1] = parseNumber();
62: skipCommaSpaces();
63: vb[1][0] = parseNumber();
64: skipCommaSpaces();
65: vb[2][0] = parseNumber();
66: skipSpaces();
67: if (current != -1) {
68: throw new IllegalArgumentException();
69: }
70:
71: // A negative value for <width> or <height> is an error
72: if (vb[1][0] < 0 || vb[2][0] < 0) {
73: throw new IllegalArgumentException();
74: }
75:
76: return vb;
77: }
78: }
|