/* * $Id: PathItem.java 341 2012-06-18 14:38:54Z blowagie $ * * This file is part of the iText (R) project. * Copyright (c) 1998-2012 1T3XT BVBA * Authors: VVB, Bruno Lowagie, et al. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License version 3 * as published by the Free Software Foundation with the addition of the * following permission added to Section 15 as permitted in Section 7(a): * FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY 1T3XT, * 1T3XT DISCLAIMS THE WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public License * along with this program; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA, 02110-1301 USA, or download the license from the following URL: * http://itextpdf.com/terms-of-use/ * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License. * * In accordance with Section 7(b) of the GNU Affero General Public License, * a covered work must retain the producer line in every PDF that is created * or manipulated using iText. * * You can be released from the requirements of the license by purchasing * a commercial license. Buying such a license is mandatory as soon as you * develop commercial activities involving the iText software without * disclosing the source code of your own applications. * These activities include: offering paid services to customers as an ASP, * serving PDFs on the fly in a web application, shipping iText with a closed * source product. * * For more information, please contact iText Software Corp. at this * address: sales@itextpdf.com */ package com.itextpdf.tool.xml.svg; import java.util.ArrayList; import java.util.List; public class PathItem { public static final char LINE = 'L'; public static final char MOVE = 'M'; public static final char LINE_RELATIVE = 'l'; public static final char CUBIC_BEZIER = 'C'; public static final char QUADRATIC_BEZIER = 'Q'; public static final char ARC = 'A'; public static class Builder{ private char type; private List<Float> coordinates; public Builder() { coordinates = new ArrayList<Float>(); } public void addCoordinate(String number){ try{ coordinates.add(Float.parseFloat(number)); }catch(Exception exp){ //TODO handle this exception coordinates.add(0f); } } public void setType(char type){ this.type = type; } public PathItem build(){ return new PathItem(coordinates, type); } } private char type; private List<Float> coordinates; public PathItem(List<Float> coordinates, char type){ this.type = type; this.coordinates = coordinates; } public boolean isMoveTo(){ return (type == 'M' || type == 'm'); } public boolean isCubicBezier(){ return (type == 'C' || type == 'c'); } public boolean isCubicBezierShorthand(){ return (type == 'S' || type == 's'); } public boolean isQuadraticBezier(){ return (type == 'Q' || type == 'q'); } public boolean isQuadraticBezierShorthand(){ return (type == 'T' || type == 't'); } public boolean isArcTo(){ return (type == 'A' || type == 'a'); } public boolean isLineTo(){ return (type == 'L' || type == 'l'); } public boolean isVerticalLineTo(){ return (type == 'V' || type == 'v'); } public boolean isHorizontalLineTo(){ return (type == 'H' || type == 'h'); } public boolean isClosePath(){ return (type == 'z' || type == 'Z'); } public boolean isRelative(){ return (Character.isLowerCase(type)); } public char getType(){ return type; } public List<Float> getCoordinates(){ return coordinates; } @Override public String toString() { StringBuffer str = new StringBuffer(); str.append(type).append(coordinates); return str.toString(); } }