return value;
case CSSPrimitiveValue.CSS_MM:
CSSContext ctx = engine.getCSSContext();
float v = value.getFloatValue();
return new FloatValue(CSSPrimitiveValue.CSS_NUMBER,
v / ctx.getPixelUnitToMillimeter());
case CSSPrimitiveValue.CSS_CM:
ctx = engine.getCSSContext();
v = value.getFloatValue();
return new FloatValue(CSSPrimitiveValue.CSS_NUMBER,
v * 10f / ctx.getPixelUnitToMillimeter());
case CSSPrimitiveValue.CSS_IN:
ctx = engine.getCSSContext();
v = value.getFloatValue();
return new FloatValue(CSSPrimitiveValue.CSS_NUMBER,
v * 25.4f / ctx.getPixelUnitToMillimeter());
case CSSPrimitiveValue.CSS_PT:
ctx = engine.getCSSContext();
v = value.getFloatValue();
return new FloatValue(CSSPrimitiveValue.CSS_NUMBER,
v * 25.4f /
(72f * ctx.getPixelUnitToMillimeter()));
case CSSPrimitiveValue.CSS_PC:
ctx = engine.getCSSContext();
v = value.getFloatValue();
return new FloatValue(CSSPrimitiveValue.CSS_NUMBER,
(v * 25.4f /
(6f * ctx.getPixelUnitToMillimeter())));
case CSSPrimitiveValue.CSS_EMS:
doParentRelative = true;
scale = value.getFloatValue();
break;
case CSSPrimitiveValue.CSS_EXS:
doParentRelative = true;
scale = value.getFloatValue()*0.5f; // !!! x-height
break;
case CSSPrimitiveValue.CSS_PERCENTAGE:
doParentRelative = true;
scale = value.getFloatValue()*0.01f;
break;
default:
}
if (value == ValueConstants.LARGER_VALUE) {
doParentRelative = true;
scale = 1.2f;
} else if (value == ValueConstants.SMALLER_VALUE) {
doParentRelative = true;
scale = 1/1.2f;
}
if (doParentRelative) {
sm.putParentRelative(idx, true);
CSSStylableElement p;
p = CSSEngine.getParentCSSStylableElement(elt);
float fs;
if (p == null) {
CSSContext ctx = engine.getCSSContext();
fs = ctx.getMediumFontSize();
} else {
fs = engine.getComputedStyle(p, null, idx).getFloatValue();
}
return new FloatValue(CSSPrimitiveValue.CSS_NUMBER, fs * scale);
}
// absolute identifiers
CSSContext ctx = engine.getCSSContext();
float fs = ctx.getMediumFontSize();
String s = value.getStringValue();
switch (s.charAt(0)) {
case 'm':
break;
case 's':
fs = (float)(fs / 1.2);
break;
case 'l':
fs = (float)(fs * 1.2);
break;
default: // 'x'
switch (s.charAt(1)) {
case 'x':
switch (s.charAt(3)) {
case 's':
fs = (float)(((fs / 1.2) / 1.2) / 1.2);
break;
default: // 'l'
fs = (float)(fs * 1.2 * 1.2 * 1.2);
}
break;
default: // '-'
switch (s.charAt(2)) {
case 's':
fs = (float)((fs / 1.2) / 1.2);
break;
default: // 'l'
fs = (float)(fs * 1.2 * 1.2);
}
}
}
return new FloatValue(CSSPrimitiveValue.CSS_NUMBER, fs);
}