diff options
-rw-r--r-- | svl/source/numbers/zformat.cxx | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx index c9f08ad20837..29402f801910 100644 --- a/svl/source/numbers/zformat.cxx +++ b/svl/source/numbers/zformat.cxx @@ -1110,13 +1110,18 @@ SvNumberformat::~SvNumberformat() * ---------------+-------------------+----------------------------+--------------- * Old State | Symbol read | Event | New state * ---------------+-------------------+----------------------------+--------------- - * SsStart | ; | Pos-- | SsGetString + * SsStart | " | Symbol += Character | SsGetQuoted + * | ; | Pos-- | SsGetString * | [ | Symbol += Character | SsGetBracketed * | ] | Error | SsStop * | BLANK | | * | Else | Symbol += Character | SsGetString * ---------------+-------------------+----------------------------+--------------- - * SsGetString | ; | | SsStop + * SsGetString | " | Symbol += Character | SsGetQuoted + * | ; | | SsStop + * | Else | Symbol += Character | + * ---------------+-------------------+----------------------------+--------------- + * SsGetQuoted | " | Symbol += Character | SsGetString * | Else | Symbol += Character | * ---------------+-------------------+----------------------------+--------------- * SsGetBracketed | <, > = | del [ | @@ -1147,7 +1152,8 @@ enum ScanState SsGetString, // format string SsGetPrefix, // color or NatNumN SsGetTime, // [HH] for time - SsGetBracketed // any [...] not decided yet + SsGetBracketed, // any [...] not decided yet + SsGetQuoted // quoted text }; // read a string until ']' and delete spaces in input @@ -1351,7 +1357,12 @@ short SvNumberformat::ImpNextSymbol(OUStringBuffer& rString, switch (eState) { case SsStart: - if (cToken == '[') + if (cToken == '\"') + { + eState = SsGetQuoted; + sBuffSymbol.append(cToken); + } + else if (cToken == '[') { eState = SsGetBracketed; sBuffSymbol.append(cToken); @@ -1479,7 +1490,12 @@ short SvNumberformat::ImpNextSymbol(OUStringBuffer& rString, } break; case SsGetString: - if (cToken == ';' && (nPos < 2 || !IsCombiningSymbol( rString, nPos-2))) + if (cToken == '\"') + { + eState = SsGetQuoted; + sBuffSymbol.append(cToken); + } + else if (cToken == ';' && (nPos < 2 || !IsCombiningSymbol( rString, nPos-2))) { eState = SsStop; } @@ -1488,6 +1504,17 @@ short SvNumberformat::ImpNextSymbol(OUStringBuffer& rString, sBuffSymbol.append(cToken); } break; + case SsGetQuoted: + if (cToken == '\"') + { + eState = SsGetString; + sBuffSymbol.append(cToken); + } + else + { + sBuffSymbol.append(cToken); + } + break; case SsGetTime: if (cToken == ']') { |