protected AnimatableValue parseValue()

in batik-bridge/src/main/java/org/apache/batik/bridge/SVGAnimateTransformElementBridge.java [111:230]


    protected AnimatableValue parseValue(String s, short type,
                                         AnimationTarget target) {
        float val1, val2 = 0, val3 = 0;
        int i = 0;
        char c = ',';
        int len = s.length();
        while (i < len) {
            c = s.charAt(i);
            if (c == ' ' || c == ',') {
                break;
            }
            i++;
        }
        val1 = Float.parseFloat(s.substring(0, i));
        if (i < len) {
            i++;
        }
        int count = 1;
        if (i < len && c == ' ') {
            while (i < len) {
                c = s.charAt(i);
                if (c != ' ') {
                    break;
                }
                i++;
            }
            if (c == ',') {
                i++;
            }
        }
        while (i < len && s.charAt(i) == ' ') {
            i++;
        }
        int j = i;
        if (i < len
                && type != SVGTransform.SVG_TRANSFORM_SKEWX
                && type != SVGTransform.SVG_TRANSFORM_SKEWY) {
            while (i < len) {
                c = s.charAt(i);
                if (c == ' ' || c == ',') {
                    break;
                }
                i++;
            }
            val2 = Float.parseFloat(s.substring(j, i));
            if (i < len) {
                i++;
            }
            count++;
            if (i < len && c == ' ') {
                while (i < len) {
                    c = s.charAt(i);
                    if (c != ' ') {
                        break;
                    }
                    i++;
                }
                if (c == ',') {
                    i++;
                }
            }
            while (i < len && s.charAt(i) == ' ') {
                i++;
            }
            j = i;
            if (i < len && type == SVGTransform.SVG_TRANSFORM_ROTATE) {
                while (i < len) {
                    c = s.charAt(i);
                    if (c == ',' || c == ' ') {
                        break;
                    }
                    i++;
                }
                val3 = Float.parseFloat(s.substring(j, i));
                if (i < len) {
                    i++;
                }
                count++;
                while (i < len && s.charAt(i) == ' ') {
                    i++;
                }
            }
        }

        if (i != len) {
            return null;
        }

        SVGOMTransform t = new SVGOMTransform();
        switch (type) {
            case SVGTransform.SVG_TRANSFORM_TRANSLATE:
                if (count == 2) {
                    t.setTranslate(val1, val2);
                } else {
                    t.setTranslate(val1, 0f);
                }
                break;
            case SVGTransform.SVG_TRANSFORM_SCALE:
                if (count == 2) {
                    t.setScale(val1, val2);
                } else {
                    t.setScale(val1, val1);
                }
                break;
            case SVGTransform.SVG_TRANSFORM_ROTATE:
                if (count == 3) {
                    t.setRotate(val1, val2, val3);
                } else {
                    t.setRotate(val1, 0f, 0f);
                }
                break;
            case SVGTransform.SVG_TRANSFORM_SKEWX:
                t.setSkewX(val1);
                break;
            case SVGTransform.SVG_TRANSFORM_SKEWY:
                t.setSkewY(val1);
                break;
        }
        return new AnimatableTransformListValue(target, t);
    }