- implement handling of exponents (e+,e-,E+,E-) when parsing number
formats - fix a small cut'n'paste error in the comments
This commit is contained in:
parent
ff4ba9573c
commit
3b37099451
|
@ -275,8 +275,8 @@ typedef struct tagFMT_DATE_HEADER
|
||||||
#define FMT_NUM_COPY_SKIP 0x35 /* Copy 1 digit or skip if no digit */
|
#define FMT_NUM_COPY_SKIP 0x35 /* Copy 1 digit or skip if no digit */
|
||||||
#define FMT_NUM_DECIMAL 0x36 /* Decimal separator */
|
#define FMT_NUM_DECIMAL 0x36 /* Decimal separator */
|
||||||
#define FMT_NUM_EXP_POS_U 0x37 /* Scientific notation, uppercase, + sign */
|
#define FMT_NUM_EXP_POS_U 0x37 /* Scientific notation, uppercase, + sign */
|
||||||
#define FMT_NUM_EXP_NEG_U 0x38 /* Scientific notation, lowercase, - sign */
|
#define FMT_NUM_EXP_NEG_U 0x38 /* Scientific notation, uppercase, - sign */
|
||||||
#define FMT_NUM_EXP_POS_L 0x39 /* Scientific notation, uppercase, + sign */
|
#define FMT_NUM_EXP_POS_L 0x39 /* Scientific notation, lowercase, + sign */
|
||||||
#define FMT_NUM_EXP_NEG_L 0x3A /* Scientific notation, lowercase, - sign */
|
#define FMT_NUM_EXP_NEG_L 0x3A /* Scientific notation, lowercase, - sign */
|
||||||
#define FMT_NUM_CURRENCY 0x3B /* Currency symbol */
|
#define FMT_NUM_CURRENCY 0x3B /* Currency symbol */
|
||||||
#define FMT_NUM_TRUE_FALSE 0x3D /* Convert to "True" or "False" */
|
#define FMT_NUM_TRUE_FALSE 0x3D /* Convert to "True" or "False" */
|
||||||
|
@ -708,7 +708,35 @@ HRESULT WINAPI VarTokenizeFormatString(LPOLESTR lpszFormat, LPBYTE rgbTok,
|
||||||
pFormat++;
|
pFormat++;
|
||||||
TRACE("decimal sep\n");
|
TRACE("decimal sep\n");
|
||||||
}
|
}
|
||||||
/* FIXME: E+ E- e+ e- => Exponent */
|
else if ((*pFormat == 'e' || *pFormat == 'E') && (pFormat[1] == '-' ||
|
||||||
|
pFormat[1] == '+') && header->type == FMT_TYPE_NUMBER)
|
||||||
|
{
|
||||||
|
/* Number formats: Exponent specifier
|
||||||
|
* Other formats: Literal
|
||||||
|
*/
|
||||||
|
num_header->flags |= FMT_FLAG_EXPONENT;
|
||||||
|
NEED_SPACE(2 * sizeof(BYTE));
|
||||||
|
if (*pFormat == 'e') {
|
||||||
|
if (pFormat[1] == '+')
|
||||||
|
*pOut = FMT_NUM_EXP_POS_L;
|
||||||
|
else
|
||||||
|
*pOut = FMT_NUM_EXP_NEG_L;
|
||||||
|
} else {
|
||||||
|
if (pFormat[1] == '+')
|
||||||
|
*pOut = FMT_NUM_EXP_POS_U;
|
||||||
|
else
|
||||||
|
*pOut = FMT_NUM_EXP_NEG_U;
|
||||||
|
}
|
||||||
|
pFormat += 2;
|
||||||
|
*++pOut = 0x0;
|
||||||
|
while (*pFormat == '0')
|
||||||
|
{
|
||||||
|
*pOut = *pOut + 1;
|
||||||
|
pFormat++;
|
||||||
|
}
|
||||||
|
pOut++;
|
||||||
|
TRACE("exponent\n");
|
||||||
|
}
|
||||||
/* FIXME: %% => Divide by 1000 */
|
/* FIXME: %% => Divide by 1000 */
|
||||||
else if (*pFormat == ',' && header->type == FMT_TYPE_NUMBER)
|
else if (*pFormat == ',' && header->type == FMT_TYPE_NUMBER)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue