123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /* $Id$ */
-
- package org.apache.fop.render.intermediate;
-
- import java.awt.geom.AffineTransform;
- import java.io.Reader;
- import java.util.List;
-
- import org.apache.batik.parser.ParseException;
- import org.apache.batik.parser.TransformListHandler;
- import org.apache.batik.parser.TransformListParser;
-
- /**
- * This class parses a sequence of transformations into an array of {@link AffineTransform}
- * instances.
- */
- public class AffineTransformArrayParser implements TransformListHandler {
-
- private static final AffineTransform[] EMPTY_ARRAY = new AffineTransform[0];
-
- private List transforms;
-
- /**
- * Utility method for creating an AffineTransform array.
- * @param r The reader used to read the transform specification.
- * @return the AffineTransform array
- * @throws ParseException if there's a parse error
- */
- public static AffineTransform[] createAffineTransform(Reader r)
- throws ParseException {
- TransformListParser p = new TransformListParser();
- AffineTransformArrayParser th = new AffineTransformArrayParser();
-
- p.setTransformListHandler(th);
- p.parse(r);
-
- return th.getAffineTransforms();
- }
-
- /**
- * Utility method for creating an AffineTransform.
- * @param s The transform specification.
- * @return the AffineTransform array
- * @throws ParseException if there's a parse error
- */
- public static AffineTransform[] createAffineTransform(String s)
- throws ParseException {
- if (s == null) {
- return EMPTY_ARRAY;
- }
- TransformListParser p = new TransformListParser();
- AffineTransformArrayParser th = new AffineTransformArrayParser();
-
- p.setTransformListHandler(th);
- p.parse(s);
-
- return th.getAffineTransforms();
- }
-
- /**
- * Returns the AffineTransform array initialized during the last parsing.
- * @return the array or null if this handler has not been used by
- * a parser.
- */
- public AffineTransform[] getAffineTransforms() {
- if (this.transforms == null) {
- return null;
- } else {
- int count = this.transforms.size();
- return (AffineTransform[])this.transforms.toArray(new AffineTransform[count]);
- }
- }
-
- /** {@inheritDoc} */
- public void startTransformList() throws ParseException {
- this.transforms = new java.util.ArrayList();
- }
-
- /** {@inheritDoc} */
- public void matrix(float a, float b, float c, float d, float e, float f)
- throws ParseException {
- this.transforms.add(new AffineTransform(a, b, c, d, e, f));
- }
-
- /** {@inheritDoc} */
- public void rotate(float theta) throws ParseException {
- this.transforms.add(AffineTransform.getRotateInstance(Math.toRadians(theta)));
- }
-
- /** {@inheritDoc} */
- public void rotate(float theta, float cx, float cy) throws ParseException {
- AffineTransform at
- = AffineTransform.getRotateInstance(Math.toRadians(theta), cx, cy);
- this.transforms.add(at);
- }
-
- /** {@inheritDoc} */
- public void translate(float tx) throws ParseException {
- AffineTransform at = AffineTransform.getTranslateInstance(tx, 0);
- this.transforms.add(at);
- }
-
- /** {@inheritDoc} */
- public void translate(float tx, float ty) throws ParseException {
- AffineTransform at = AffineTransform.getTranslateInstance(tx, ty);
- this.transforms.add(at);
- }
-
- /** {@inheritDoc} */
- public void scale(float sx) throws ParseException {
- this.transforms.add(AffineTransform.getScaleInstance(sx, sx));
- }
-
- /** {@inheritDoc} */
- public void scale(float sx, float sy) throws ParseException {
- this.transforms.add(AffineTransform.getScaleInstance(sx, sy));
- }
-
- /** {@inheritDoc} */
- public void skewX(float skx) throws ParseException {
- this.transforms.add(
- AffineTransform.getShearInstance(Math.tan(Math.toRadians(skx)), 0));
- }
-
- /** {@inheritDoc} */
- public void skewY(float sky) throws ParseException {
- this.transforms.add(
- AffineTransform.getShearInstance(0, Math.tan(Math.toRadians(sky))));
- }
-
- /** {@inheritDoc} */
- public void endTransformList() throws ParseException {
- }
- }
|