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);
}