Index: xfa/fde/css/fde_cssdatatable.cpp |
diff --git a/xfa/fde/css/fde_cssdatatable.cpp b/xfa/fde/css/fde_cssdatatable.cpp |
index 3b090a2699200a84227754ff4b22b006bd3efe54..db4302b9fccf7c527b891c4486b466fe00adf883 100644 |
--- a/xfa/fde/css/fde_cssdatatable.cpp |
+++ b/xfa/fde/css/fde_cssdatatable.cpp |
@@ -11,6 +11,14 @@ |
#include "xfa/fgas/crt/fgas_codepage.h" |
#include "xfa/fgas/crt/fgas_system.h" |
+namespace { |
+ |
+uint8_t Hex2Dec(uint8_t hexHigh, uint8_t hexLow) { |
+ return (FXSYS_toHexDigit(hexHigh) << 4) + FXSYS_toHexDigit(hexLow); |
+} |
+ |
+} // namespace |
+ |
FX_BOOL FDE_CSSLengthToFloat(const FDE_CSSLENGTH& len, |
FX_FLOAT fPercentBase, |
FX_FLOAT& fResult) { |
@@ -666,16 +674,17 @@ FDE_LPCCSSCOLORTABLE FDE_GetCSSColorByName(const CFX_WideStringC& wsName) { |
} while (iStart <= iEnd); |
return NULL; |
} |
+ |
FX_BOOL FDE_ParseCSSNumber(const FX_WCHAR* pszValue, |
int32_t iValueLen, |
FX_FLOAT& fValue, |
FDE_CSSPRIMITIVETYPE& eUnit) { |
- ASSERT(pszValue != NULL && iValueLen > 0); |
+ ASSERT(pszValue && iValueLen > 0); |
int32_t iUsedLen = 0; |
fValue = FX_wcstof(pszValue, iValueLen, &iUsedLen); |
- if (iUsedLen <= 0) { |
+ if (iUsedLen <= 0) |
return FALSE; |
- } |
+ |
iValueLen -= iUsedLen; |
pszValue += iUsedLen; |
eUnit = FDE_CSSPRIMITIVETYPE_Number; |
@@ -684,9 +693,8 @@ FX_BOOL FDE_ParseCSSNumber(const FX_WCHAR* pszValue, |
} else if (iValueLen == 2) { |
FDE_LPCCSSLENGTHUNITTABLE pUnit = |
FDE_GetCSSLengthUnitByName(CFX_WideStringC(pszValue, 2)); |
- if (pUnit != NULL) { |
+ if (pUnit) |
eUnit = (FDE_CSSPRIMITIVETYPE)pUnit->wValue; |
- } |
} |
return TRUE; |
} |
@@ -726,57 +734,60 @@ FX_BOOL FDE_ParseCSSURI(const FX_WCHAR* pszValue, |
FX_BOOL FDE_ParseCSSColor(const FX_WCHAR* pszValue, |
int32_t iValueLen, |
FX_ARGB& dwColor) { |
- ASSERT(pszValue != NULL && iValueLen > 0); |
+ ASSERT(pszValue && iValueLen > 0); |
+ |
if (*pszValue == '#') { |
switch (iValueLen) { |
case 4: { |
- uint8_t red = FX_Hex2Dec((uint8_t)pszValue[1], (uint8_t)pszValue[1]); |
- uint8_t green = FX_Hex2Dec((uint8_t)pszValue[2], (uint8_t)pszValue[2]); |
- uint8_t blue = FX_Hex2Dec((uint8_t)pszValue[3], (uint8_t)pszValue[3]); |
+ uint8_t red = Hex2Dec((uint8_t)pszValue[1], (uint8_t)pszValue[1]); |
+ uint8_t green = Hex2Dec((uint8_t)pszValue[2], (uint8_t)pszValue[2]); |
+ uint8_t blue = Hex2Dec((uint8_t)pszValue[3], (uint8_t)pszValue[3]); |
dwColor = ArgbEncode(255, red, green, blue); |
- } |
return TRUE; |
+ } |
case 7: { |
- uint8_t red = FX_Hex2Dec((uint8_t)pszValue[1], (uint8_t)pszValue[2]); |
- uint8_t green = FX_Hex2Dec((uint8_t)pszValue[3], (uint8_t)pszValue[4]); |
- uint8_t blue = FX_Hex2Dec((uint8_t)pszValue[5], (uint8_t)pszValue[6]); |
+ uint8_t red = Hex2Dec((uint8_t)pszValue[1], (uint8_t)pszValue[2]); |
+ uint8_t green = Hex2Dec((uint8_t)pszValue[3], (uint8_t)pszValue[4]); |
+ uint8_t blue = Hex2Dec((uint8_t)pszValue[5], (uint8_t)pszValue[6]); |
dwColor = ArgbEncode(255, red, green, blue); |
- } |
return TRUE; |
+ } |
+ default: |
+ return FALSE; |
} |
- } else if (iValueLen >= 10) { |
- if (pszValue[iValueLen - 1] != ')' || FX_wcsnicmp(L"rgb(", pszValue, 4)) { |
+ } |
+ |
+ if (iValueLen >= 10) { |
+ if (pszValue[iValueLen - 1] != ')' || FX_wcsnicmp(L"rgb(", pszValue, 4)) |
return FALSE; |
- } |
+ |
uint8_t rgb[3] = {0}; |
FX_FLOAT fValue; |
FDE_CSSPRIMITIVETYPE eType; |
CFDE_CSSValueListParser list(pszValue + 4, iValueLen - 5, ','); |
for (int32_t i = 0; i < 3; ++i) { |
- if (!list.NextValue(eType, pszValue, iValueLen)) { |
+ if (!list.NextValue(eType, pszValue, iValueLen)) |
return FALSE; |
- } |
- if (eType != FDE_CSSPRIMITIVETYPE_Number) { |
+ if (eType != FDE_CSSPRIMITIVETYPE_Number) |
return FALSE; |
- } |
- if (!FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eType)) { |
+ if (!FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eType)) |
return FALSE; |
- } |
+ |
rgb[i] = eType == FDE_CSSPRIMITIVETYPE_Percent |
? FXSYS_round(fValue * 2.55f) |
: FXSYS_round(fValue); |
} |
dwColor = ArgbEncode(255, rgb[0], rgb[1], rgb[2]); |
return TRUE; |
- } else { |
- FDE_LPCCSSCOLORTABLE pColor = |
- FDE_GetCSSColorByName(CFX_WideStringC(pszValue, iValueLen)); |
- if (pColor != NULL) { |
- dwColor = pColor->dwValue; |
- return TRUE; |
- } |
} |
- return FALSE; |
+ |
+ FDE_LPCCSSCOLORTABLE pColor = |
+ FDE_GetCSSColorByName(CFX_WideStringC(pszValue, iValueLen)); |
+ if (!pColor) |
+ return FALSE; |
+ |
+ dwColor = pColor->dwValue; |
+ return TRUE; |
} |
CFDE_CSSValueList::CFDE_CSSValueList(IFX_MemoryAllocator* pStaticStore, |