static float findScaleValue(const String& keyString, const String& valueString, Document* document) { // 1) Non-negative number values are translated to <number> values. // 2) Negative number values are translated to auto. // 3) yes is translated to 1.0. // 4) device-width and device-height are translated to 10.0. // 5) no and unknown values are translated to 0.0 if (equalIgnoringCase(valueString, "yes")) return 1; if (equalIgnoringCase(valueString, "no")) return 0; if (equalIgnoringCase(valueString, "desktop-width")) return 10; if (equalIgnoringCase(valueString, "device-width")) return 10; if (equalIgnoringCase(valueString, "device-height")) return 10; float value = numericPrefix(keyString, valueString, document); if (value < 0) return ViewportArguments::ValueAuto; if (value > 10.0) reportViewportWarning(document, MaximumScaleTooLargeError, String(), String()); return value; }
static float findUserScalableValue(const String& keyString, const String& valueString, Document* document) { // yes and no are used as keywords. // Numbers >= 1, numbers <= -1, device-width and device-height are mapped to yes. // Numbers in the range <-1, 1>, and unknown values, are mapped to no. if (equalIgnoringCase(valueString, "yes")) return 1; if (equalIgnoringCase(valueString, "no")) return 0; if (equalIgnoringCase(valueString, "desktop-width")) return 1; if (equalIgnoringCase(valueString, "device-width")) return 1; if (equalIgnoringCase(valueString, "device-height")) return 1; bool ok; float value = numericPrefix(keyString, valueString, document, &ok); if (!ok) return 0; if (fabs(value) < 1) return 0; return 1; }
static float findSizeValue(const String& keyString, const String& valueString, Document* document) { // 1) Non-negative number values are translated to px lengths. // 2) Negative number values are translated to auto. // 3) device-width and device-height are used as keywords. // 4) Other keywords and unknown values translate to 0.0. if (equalIgnoringCase(valueString, "device-width")) return ViewportArguments::ValueDeviceWidth; if (equalIgnoringCase(valueString, "device-height")) return ViewportArguments::ValueDeviceHeight; float value = numericPrefix(keyString, valueString, document); if (value < 0) return ViewportArguments::ValueAuto; return value; }
static float findTargetDensityDPIValue(const String& keyString, const String& valueString, Document* document) { if (equalIgnoringCase(valueString, "device-dpi")) return ViewportArguments::ValueDeviceDPI; if (equalIgnoringCase(valueString, "low-dpi")) return ViewportArguments::ValueLowDPI; if (equalIgnoringCase(valueString, "medium-dpi")) return ViewportArguments::ValueMediumDPI; if (equalIgnoringCase(valueString, "high-dpi")) return ViewportArguments::ValueHighDPI; bool ok; float value = numericPrefix(keyString, valueString, document, &ok); if (!ok) return ViewportArguments::ValueAuto; if (value < 70 || value > 400) { reportViewportWarning(document, TargetDensityDpiTooSmallOrLargeError, String(), String()); return ViewportArguments::ValueAuto; } return value; }