in batik-parser/src/main/java/org/apache/batik/parser/LengthParser.java [85:354]
protected void parseLength() throws ParseException, IOException {
int mant = 0;
int mantDig = 0;
boolean mantPos = true;
boolean mantRead = false;
int exp = 0;
int expDig = 0;
int expAdj = 0;
boolean expPos = true;
int unitState = 0;
switch (current) {
case '-':
mantPos = false;
case '+':
current = reader.read();
}
m1: switch (current) {
default:
reportUnexpectedCharacterError( current );
return;
case '.':
break;
case '0':
mantRead = true;
l: for (;;) {
current = reader.read();
switch (current) {
case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
break l;
default:
break m1;
case '0':
}
}
case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
mantRead = true;
l: for (;;) {
if (mantDig < 9) {
mantDig++;
mant = mant * 10 + (current - '0');
} else {
expAdj++;
}
current = reader.read();
switch (current) {
default:
break l;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
}
}
}
if (current == '.') {
current = reader.read();
m2: switch (current) {
default:
case 'e': case 'E':
if (!mantRead) {
reportUnexpectedCharacterError( current );
return;
}
break;
case '0':
if (mantDig == 0) {
l: for (;;) {
current = reader.read();
expAdj--;
switch (current) {
case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
break l;
default:
break m2;
case '0':
}
}
}
case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
l: for (;;) {
if (mantDig < 9) {
mantDig++;
mant = mant * 10 + (current - '0');
expAdj--;
}
current = reader.read();
switch (current) {
default:
break l;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
}
}
}
}
boolean le = false;
es: switch (current) {
case 'e':
le = true;
case 'E':
current = reader.read();
switch (current) {
default:
reportUnexpectedCharacterError( current );
return;
case 'm':
if (!le) {
reportUnexpectedCharacterError( current );
return;
}
unitState = 1;
break es;
case 'x':
if (!le) {
reportUnexpectedCharacterError( current );
return;
}
unitState = 2;
break es;
case '-':
expPos = false;
case '+':
current = reader.read();
switch (current) {
default:
reportUnexpectedCharacterError( current );
return;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
}
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
}
en: switch (current) {
case '0':
l: for (;;) {
current = reader.read();
switch (current) {
case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
break l;
default:
break en;
case '0':
}
}
case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
l: for (;;) {
if (expDig < 3) {
expDig++;
exp = exp * 10 + (current - '0');
}
current = reader.read();
switch (current) {
default:
break l;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
}
}
}
default:
}
if (!expPos) {
exp = -exp;
}
exp += expAdj;
if (!mantPos) {
mant = -mant;
}
lengthHandler.lengthValue(NumberParser.buildFloat(mant, exp));
switch (unitState) {
case 1:
lengthHandler.em();
current = reader.read();
return;
case 2:
lengthHandler.ex();
current = reader.read();
return;
}
switch (current) {
case 'e':
current = reader.read();
switch (current) {
case 'm':
lengthHandler.em();
current = reader.read();
break;
case 'x':
lengthHandler.ex();
current = reader.read();
break;
default:
reportUnexpectedCharacterError( current );
}
break;
case 'p':
current = reader.read();
switch (current) {
case 'c':
lengthHandler.pc();
current = reader.read();
break;
case 't':
lengthHandler.pt();
current = reader.read();
break;
case 'x':
lengthHandler.px();
current = reader.read();
break;
default:
reportUnexpectedCharacterError( current );
}
break;
case 'i':
current = reader.read();
if (current != 'n') {
reportCharacterExpectedError( 'n', current );
break;
}
lengthHandler.in();
current = reader.read();
break;
case 'c':
current = reader.read();
if (current != 'm') {
reportCharacterExpectedError( 'm',current );
break;
}
lengthHandler.cm();
current = reader.read();
break;
case 'm':
current = reader.read();
if (current != 'm') {
reportCharacterExpectedError( 'm',current );
break;
}
lengthHandler.mm();
current = reader.read();
break;
case '%':
lengthHandler.percentage();
current = reader.read();
break;
}
}