PRBool SVGLength::SetValueFromString(const nsAString &aValue) { float tmpValue; PRUint16 tmpUnit; NS_ConvertUTF16toUTF8 value(aValue); const char *str = value.get(); while (*str != '\0' && IsSVGWhitespace(*str)) { ++str; } char *unit; tmpValue = float(PR_strtod(str, &unit)); if (unit != str && NS_finite(tmpValue)) { char *theRest = unit; if (*unit != '\0' && !IsSVGWhitespace(*unit)) { while (*theRest != '\0' && !IsSVGWhitespace(*theRest)) { ++theRest; } nsCAutoString unitStr(unit, theRest - unit); tmpUnit = GetUnitTypeForString(unitStr.get()); if (tmpUnit == nsIDOMSVGLength::SVG_LENGTHTYPE_UNKNOWN) { // nsSVGUtils::ReportToConsole return PR_FALSE; } } else { tmpUnit = nsIDOMSVGLength::SVG_LENGTHTYPE_NUMBER; } while (*theRest && IsSVGWhitespace(*theRest)) { ++theRest; } if (!*theRest) { mValue = tmpValue; mUnit = tmpUnit; return PR_TRUE; } } return PR_FALSE; }
bool SVGLength::SetValueFromString(const nsAString &aValue) { float tmpValue; uint16_t tmpUnit; NS_ConvertUTF16toUTF8 value(aValue); const char *str = value.get(); while (*str != '\0' && IsSVGWhitespace(*str)) { ++str; } char *unit; tmpValue = float(PR_strtod(str, &unit)); if (unit != str && NS_finite(tmpValue)) { char *theRest = unit; while (*theRest != '\0' && !IsSVGWhitespace(*theRest)) { ++theRest; } tmpUnit = GetUnitTypeForString( Substring(aValue, unit - str, theRest - unit)); if (tmpUnit == nsIDOMSVGLength::SVG_LENGTHTYPE_UNKNOWN) { // SVGContentUtils::ReportToConsole return false; } while (*theRest && IsSVGWhitespace(*theRest)) { ++theRest; } if (!*theRest) { mValue = tmpValue; mUnit = tmpUnit; return true; } } return false; }
static inline char* SkipWhitespace(char* str) { while (IsSVGWhitespace(*str)) ++str; return str; }