Kaydet (Commit) 71e021c4 authored tarafından Armin Weiss's avatar Armin Weiss

#81908# corrected and cleanedup import/export of int and double numbers

üst e6e6082e
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: xexptran.cxx,v $ * $RCSfile: xexptran.cxx,v $
* *
* $Revision: 1.3 $ * $Revision: 1.4 $
* *
* last change: $Author: aw $ $Date: 2000-12-07 15:15:53 $ * last change: $Author: aw $ $Date: 2000-12-13 11:02:34 $
* *
* The Contents of this file are made available subject to the terms of * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -86,7 +86,7 @@ using namespace ::com::sun::star; ...@@ -86,7 +86,7 @@ using namespace ::com::sun::star;
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
// parsing help functions, no class // parsing help functions for simple chars
void Imp_SkipSpaces(const UniString& rStr, xub_StrLen& rPos, const xub_StrLen nLen) void Imp_SkipSpaces(const UniString& rStr, xub_StrLen& rPos, const xub_StrLen nLen)
{ {
while(rPos < nLen while(rPos < nLen
...@@ -115,63 +115,51 @@ void Imp_SkipSpacesAndClosingBraces(const UniString& rStr, xub_StrLen& rPos, con ...@@ -115,63 +115,51 @@ void Imp_SkipSpacesAndClosingBraces(const UniString& rStr, xub_StrLen& rPos, con
rPos++; rPos++;
} }
sal_Bool Imp_IsOnNumberChar(const UniString& rStr, const xub_StrLen nPos, //////////////////////////////////////////////////////////////////////////////
BOOL bSignIsNumber = TRUE, BOOL bPointIsNumber = FALSE) //////////////////////////////////////////////////////////////////////////////
// parsing help functions for integer numbers
sal_Bool Imp_IsOnNumberChar(const UniString& rStr, const xub_StrLen nPos, BOOL bSignAllowed = TRUE)
{ {
sal_Unicode aChar(rStr.GetChar(nPos)); sal_Unicode aChar(rStr.GetChar(nPos));
if((sal_Unicode('0') <= aChar && sal_Unicode('9') >= aChar) if((sal_Unicode('0') <= aChar && sal_Unicode('9') >= aChar)
|| (bSignIsNumber && (sal_Unicode('-') == aChar || sal_Unicode('+') == aChar)) || (bSignAllowed && sal_Unicode('+') == aChar)
|| (bPointIsNumber && sal_Unicode('.') == aChar) || (bSignAllowed && sal_Unicode('-') == aChar)
) )
return TRUE; return TRUE;
return FALSE; return FALSE;
} }
void Imp_SkipNumber(const UniString& rStr, xub_StrLen& rPos, const xub_StrLen nLen, void Imp_SkipNumber(const UniString& rStr, xub_StrLen& rPos, const xub_StrLen nLen)
BOOL bSignIsNumber = TRUE, BOOL bPointIsNumber = FALSE)
{ {
sal_Bool bFirstSign(TRUE); BOOL bSignAllowed(TRUE);
while(rPos < nLen && Imp_IsOnNumberChar(rStr, rPos, bSignIsNumber && bFirstSign, bPointIsNumber)) while(rPos < nLen && Imp_IsOnNumberChar(rStr, rPos, bSignAllowed))
{ {
bSignAllowed = FALSE;
rPos++; rPos++;
bFirstSign = FALSE;
} }
} }
double Imp_GetNumberChar(const UniString& rStr, xub_StrLen& rPos, const xub_StrLen nLen, void Imp_SkipNumberAndSpacesAndCommas(const UniString& rStr, xub_StrLen& rPos,
const SvXMLUnitConverter& rConv, double fRetval, const xub_StrLen nLen)
BOOL bSignIsNumber = TRUE, BOOL bPointIsNumber = FALSE)
{ {
UniString aNumberStr; Imp_SkipNumber(rStr, rPos, nLen);
sal_Bool bFirstSign(TRUE); Imp_SkipSpacesAndCommas(rStr, rPos, nLen);
while(rPos < nLen && Imp_IsOnNumberChar(rStr, rPos, bSignIsNumber && bFirstSign, TRUE))
{
aNumberStr.Append(rStr.GetChar(rPos++));
bFirstSign = FALSE;
}
if(aNumberStr.Len())
{
rConv.convertNumber(fRetval, aNumberStr);
}
return fRetval;
} }
sal_Int32 Imp_GetNumberChar(const UniString& rStr, xub_StrLen& rPos, const xub_StrLen nLen, sal_Int32 Imp_GetNumberChar(const UniString& rStr, xub_StrLen& rPos, const xub_StrLen nLen,
const SvXMLUnitConverter& rConv, sal_Int32 nRetval, const SvXMLUnitConverter& rConv, sal_Int32 nRetval)
BOOL bSignIsNumber = TRUE, BOOL bPointIsNumber = FALSE)
{ {
UniString aNumberStr; UniString aNumberStr;
sal_Bool bFirstSign(TRUE); BOOL bCharValid(TRUE);
BOOL bSignAllowed(TRUE);
while(rPos < nLen && Imp_IsOnNumberChar(rStr, rPos, bSignIsNumber && bFirstSign, FALSE)) while(rPos < nLen && Imp_IsOnNumberChar(rStr, rPos, bSignAllowed))
{ {
bSignAllowed = FALSE;
aNumberStr.Append(rStr.GetChar(rPos++)); aNumberStr.Append(rStr.GetChar(rPos++));
bFirstSign = FALSE;
} }
if(aNumberStr.Len()) if(aNumberStr.Len())
...@@ -180,17 +168,65 @@ sal_Int32 Imp_GetNumberChar(const UniString& rStr, xub_StrLen& rPos, const xub_S ...@@ -180,17 +168,65 @@ sal_Int32 Imp_GetNumberChar(const UniString& rStr, xub_StrLen& rPos, const xub_S
return nRetval; return nRetval;
} }
void Imp_PutNumberChar(UniString& rStr, const SvXMLUnitConverter& rConv, double fValue) void Imp_PutNumberChar(UniString& rStr, const SvXMLUnitConverter& rConv, sal_Int32 nValue)
{ {
OUStringBuffer sStringBuffer; OUStringBuffer sStringBuffer;
rConv.convertNumber(sStringBuffer, fValue); rConv.convertNumber(sStringBuffer, nValue);
rStr += UniString(sStringBuffer.makeStringAndClear()); rStr += UniString(sStringBuffer.makeStringAndClear());
} }
void Imp_PutNumberChar(UniString& rStr, const SvXMLUnitConverter& rConv, sal_Int32 nValue) void Imp_PutNumberCharWithSpace(UniString& rStr, const SvXMLUnitConverter& rConv, sal_Int32 nValue)
{
const xub_StrLen aLen(rStr.Len());
if(aLen)
if(Imp_IsOnNumberChar(rStr, aLen - 1, FALSE) && nValue >= 0)
rStr += sal_Unicode(' ');
Imp_PutNumberChar(rStr, rConv, nValue);
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// parsing help functions for double numbers
sal_Bool Imp_IsOnDoubleChar(const UniString& rStr, const xub_StrLen nPos)
{
sal_Unicode aChar(rStr.GetChar(nPos));
if((sal_Unicode('0') <= aChar && sal_Unicode('9') >= aChar)
|| sal_Unicode('+') == aChar
|| sal_Unicode('-') == aChar
|| sal_Unicode('.') == aChar
|| sal_Unicode('e') == aChar
|| sal_Unicode('E') == aChar
)
return TRUE;
return FALSE;
}
void Imp_SkipDouble(const UniString& rStr, xub_StrLen& rPos, const xub_StrLen nLen)
{
while(rPos < nLen && Imp_IsOnDoubleChar(rStr, rPos))
rPos++;
}
double Imp_GetDoubleChar(const UniString& rStr, xub_StrLen& rPos, const xub_StrLen nLen,
const SvXMLUnitConverter& rConv, double fRetval)
{
UniString aNumberStr;
while(rPos < nLen && Imp_IsOnDoubleChar(rStr, rPos))
aNumberStr.Append(rStr.GetChar(rPos++));
if(aNumberStr.Len())
rConv.convertNumber(fRetval, aNumberStr);
return fRetval;
}
void Imp_PutDoubleChar(UniString& rStr, const SvXMLUnitConverter& rConv, double fValue)
{ {
OUStringBuffer sStringBuffer; OUStringBuffer sStringBuffer;
rConv.convertNumber(sStringBuffer, nValue); rConv.convertNumber(sStringBuffer, fValue);
rStr += UniString(sStringBuffer.makeStringAndClear()); rStr += UniString(sStringBuffer.makeStringAndClear());
} }
...@@ -332,7 +368,7 @@ const OUString& SdXMLImExTransform2D::GetExportString(const SvXMLUnitConverter& ...@@ -332,7 +368,7 @@ const OUString& SdXMLImExTransform2D::GetExportString(const SvXMLUnitConverter&
case IMP_SDXMLEXP_TRANSOBJ2D_ROTATE : case IMP_SDXMLEXP_TRANSOBJ2D_ROTATE :
{ {
aNewString += UniString::CreateFromAscii("rotate ("); aNewString += UniString::CreateFromAscii("rotate (");
Imp_PutNumberChar(aNewString, rConv, ((ImpSdXMLExpTransObj2DRotate*)pObj)->mfRotate); Imp_PutDoubleChar(aNewString, rConv, ((ImpSdXMLExpTransObj2DRotate*)pObj)->mfRotate);
aNewString += sal_Unicode(')'); aNewString += sal_Unicode(')');
break; break;
} }
...@@ -401,7 +437,7 @@ SdXMLImExTransform2D::SdXMLImExTransform2D(const OUString& rNew, const SvXMLUnit ...@@ -401,7 +437,7 @@ SdXMLImExTransform2D::SdXMLImExTransform2D(const OUString& rNew, const SvXMLUnit
nPos += 6; nPos += 6;
Imp_SkipSpacesAndOpeningBraces(aStr, nPos, nLen); Imp_SkipSpacesAndOpeningBraces(aStr, nPos, nLen);
fValue = Imp_GetNumberChar(aStr, nPos, nLen, rConv, fValue, TRUE, TRUE); fValue = Imp_GetDoubleChar(aStr, nPos, nLen, rConv, fValue);
if(fValue != 0.0) if(fValue != 0.0)
maList.Insert(new ImpSdXMLExpTransObj2DRotate(fValue), LIST_APPEND); maList.Insert(new ImpSdXMLExpTransObj2DRotate(fValue), LIST_APPEND);
...@@ -613,43 +649,43 @@ const OUString& SdXMLImExTransform3D::GetExportString(const SvXMLUnitConverter& ...@@ -613,43 +649,43 @@ const OUString& SdXMLImExTransform3D::GetExportString(const SvXMLUnitConverter&
case IMP_SDXMLEXP_TRANSOBJ3D_ROTATE_X : case IMP_SDXMLEXP_TRANSOBJ3D_ROTATE_X :
{ {
aNewString += UniString::CreateFromAscii("rotatex ("); aNewString += UniString::CreateFromAscii("rotatex (");
Imp_PutNumberChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DRotateX*)pObj)->mfRotateX); Imp_PutDoubleChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DRotateX*)pObj)->mfRotateX);
aNewString += sal_Unicode(')'); aNewString += sal_Unicode(')');
break; break;
} }
case IMP_SDXMLEXP_TRANSOBJ3D_ROTATE_Y : case IMP_SDXMLEXP_TRANSOBJ3D_ROTATE_Y :
{ {
aNewString += UniString::CreateFromAscii("rotatey ("); aNewString += UniString::CreateFromAscii("rotatey (");
Imp_PutNumberChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DRotateY*)pObj)->mfRotateY); Imp_PutDoubleChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DRotateY*)pObj)->mfRotateY);
aNewString += sal_Unicode(')'); aNewString += sal_Unicode(')');
break; break;
} }
case IMP_SDXMLEXP_TRANSOBJ3D_ROTATE_Z : case IMP_SDXMLEXP_TRANSOBJ3D_ROTATE_Z :
{ {
aNewString += UniString::CreateFromAscii("rotatez ("); aNewString += UniString::CreateFromAscii("rotatez (");
Imp_PutNumberChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DRotateZ*)pObj)->mfRotateZ); Imp_PutDoubleChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DRotateZ*)pObj)->mfRotateZ);
aNewString += sal_Unicode(')'); aNewString += sal_Unicode(')');
break; break;
} }
case IMP_SDXMLEXP_TRANSOBJ3D_SCALE : case IMP_SDXMLEXP_TRANSOBJ3D_SCALE :
{ {
aNewString += UniString::CreateFromAscii("scale ("); aNewString += UniString::CreateFromAscii("scale (");
Imp_PutNumberChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DScale*)pObj)->maScale.X()); Imp_PutDoubleChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DScale*)pObj)->maScale.X());
aNewString += sal_Unicode(' '); aNewString += sal_Unicode(' ');
Imp_PutNumberChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DScale*)pObj)->maScale.Y()); Imp_PutDoubleChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DScale*)pObj)->maScale.Y());
aNewString += sal_Unicode(' '); aNewString += sal_Unicode(' ');
Imp_PutNumberChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DScale*)pObj)->maScale.Z()); Imp_PutDoubleChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DScale*)pObj)->maScale.Z());
aNewString += sal_Unicode(')'); aNewString += sal_Unicode(')');
break; break;
} }
case IMP_SDXMLEXP_TRANSOBJ3D_TRANSLATE : case IMP_SDXMLEXP_TRANSOBJ3D_TRANSLATE :
{ {
aNewString += UniString::CreateFromAscii("translate ("); aNewString += UniString::CreateFromAscii("translate (");
Imp_PutNumberChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DTranslate*)pObj)->maTranslate.X()); Imp_PutDoubleChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DTranslate*)pObj)->maTranslate.X());
aNewString += sal_Unicode(' '); aNewString += sal_Unicode(' ');
Imp_PutNumberChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DTranslate*)pObj)->maTranslate.Y()); Imp_PutDoubleChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DTranslate*)pObj)->maTranslate.Y());
aNewString += sal_Unicode(' '); aNewString += sal_Unicode(' ');
Imp_PutNumberChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DTranslate*)pObj)->maTranslate.Z()); Imp_PutDoubleChar(aNewString, rConv, ((ImpSdXMLExpTransObj3DTranslate*)pObj)->maTranslate.Z());
aNewString += sal_Unicode(')'); aNewString += sal_Unicode(')');
break; break;
} }
...@@ -660,7 +696,7 @@ const OUString& SdXMLImExTransform3D::GetExportString(const SvXMLUnitConverter& ...@@ -660,7 +696,7 @@ const OUString& SdXMLImExTransform3D::GetExportString(const SvXMLUnitConverter&
{ {
for(sal_uInt16 b(0); b < 3; b++) for(sal_uInt16 b(0); b < 3; b++)
{ {
Imp_PutNumberChar(aNewString, rConv, Imp_PutDoubleChar(aNewString, rConv,
((ImpSdXMLExpTransObj3DMatrix*)pObj)->maMatrix[a][b]); ((ImpSdXMLExpTransObj3DMatrix*)pObj)->maMatrix[a][b]);
if(a != 2 || b != 2) if(a != 2 || b != 2)
aNewString += sal_Unicode(' '); aNewString += sal_Unicode(' ');
...@@ -709,7 +745,7 @@ SdXMLImExTransform3D::SdXMLImExTransform3D(const OUString& rNew, const SvXMLUnit ...@@ -709,7 +745,7 @@ SdXMLImExTransform3D::SdXMLImExTransform3D(const OUString& rNew, const SvXMLUnit
nPos += 7; nPos += 7;
Imp_SkipSpacesAndOpeningBraces(aStr, nPos, nLen); Imp_SkipSpacesAndOpeningBraces(aStr, nPos, nLen);
fValue = Imp_GetNumberChar(aStr, nPos, nLen, rConv, fValue, TRUE, TRUE); fValue = Imp_GetDoubleChar(aStr, nPos, nLen, rConv, fValue);
if(fValue != 0.0) if(fValue != 0.0)
maList.Insert(new ImpSdXMLExpTransObj3DRotateX(fValue), LIST_APPEND); maList.Insert(new ImpSdXMLExpTransObj3DRotateX(fValue), LIST_APPEND);
...@@ -722,7 +758,7 @@ SdXMLImExTransform3D::SdXMLImExTransform3D(const OUString& rNew, const SvXMLUnit ...@@ -722,7 +758,7 @@ SdXMLImExTransform3D::SdXMLImExTransform3D(const OUString& rNew, const SvXMLUnit
nPos += 7; nPos += 7;
Imp_SkipSpacesAndOpeningBraces(aStr, nPos, nLen); Imp_SkipSpacesAndOpeningBraces(aStr, nPos, nLen);
fValue = Imp_GetNumberChar(aStr, nPos, nLen, rConv, fValue, TRUE, TRUE); fValue = Imp_GetDoubleChar(aStr, nPos, nLen, rConv, fValue);
if(fValue != 0.0) if(fValue != 0.0)
maList.Insert(new ImpSdXMLExpTransObj3DRotateY(fValue), LIST_APPEND); maList.Insert(new ImpSdXMLExpTransObj3DRotateY(fValue), LIST_APPEND);
...@@ -735,7 +771,7 @@ SdXMLImExTransform3D::SdXMLImExTransform3D(const OUString& rNew, const SvXMLUnit ...@@ -735,7 +771,7 @@ SdXMLImExTransform3D::SdXMLImExTransform3D(const OUString& rNew, const SvXMLUnit
nPos += 7; nPos += 7;
Imp_SkipSpacesAndOpeningBraces(aStr, nPos, nLen); Imp_SkipSpacesAndOpeningBraces(aStr, nPos, nLen);
fValue = Imp_GetNumberChar(aStr, nPos, nLen, rConv, fValue, TRUE, TRUE); fValue = Imp_GetDoubleChar(aStr, nPos, nLen, rConv, fValue);
if(fValue != 0.0) if(fValue != 0.0)
maList.Insert(new ImpSdXMLExpTransObj3DRotateZ(fValue), LIST_APPEND); maList.Insert(new ImpSdXMLExpTransObj3DRotateZ(fValue), LIST_APPEND);
...@@ -748,11 +784,11 @@ SdXMLImExTransform3D::SdXMLImExTransform3D(const OUString& rNew, const SvXMLUnit ...@@ -748,11 +784,11 @@ SdXMLImExTransform3D::SdXMLImExTransform3D(const OUString& rNew, const SvXMLUnit
nPos += 5; nPos += 5;
Imp_SkipSpacesAndOpeningBraces(aStr, nPos, nLen); Imp_SkipSpacesAndOpeningBraces(aStr, nPos, nLen);
aValue.X() = Imp_GetNumberChar(aStr, nPos, nLen, rConv, aValue.X(), TRUE, TRUE); aValue.X() = Imp_GetDoubleChar(aStr, nPos, nLen, rConv, aValue.X());
Imp_SkipSpacesAndCommas(aStr, nPos, nLen); Imp_SkipSpacesAndCommas(aStr, nPos, nLen);
aValue.Y() = Imp_GetNumberChar(aStr, nPos, nLen, rConv, aValue.Y(), TRUE, TRUE); aValue.Y() = Imp_GetDoubleChar(aStr, nPos, nLen, rConv, aValue.Y());
Imp_SkipSpacesAndCommas(aStr, nPos, nLen); Imp_SkipSpacesAndCommas(aStr, nPos, nLen);
aValue.Z() = Imp_GetNumberChar(aStr, nPos, nLen, rConv, aValue.Z(), TRUE, TRUE); aValue.Z() = Imp_GetDoubleChar(aStr, nPos, nLen, rConv, aValue.Z());
if(aValue.X() != 1.0 || aValue.Y() != 1.0 || aValue.Z() != 1.0) if(aValue.X() != 1.0 || aValue.Y() != 1.0 || aValue.Z() != 1.0)
maList.Insert(new ImpSdXMLExpTransObj3DScale(aValue), LIST_APPEND); maList.Insert(new ImpSdXMLExpTransObj3DScale(aValue), LIST_APPEND);
...@@ -766,11 +802,11 @@ SdXMLImExTransform3D::SdXMLImExTransform3D(const OUString& rNew, const SvXMLUnit ...@@ -766,11 +802,11 @@ SdXMLImExTransform3D::SdXMLImExTransform3D(const OUString& rNew, const SvXMLUnit
nPos += 9; nPos += 9;
Imp_SkipSpacesAndOpeningBraces(aStr, nPos, nLen); Imp_SkipSpacesAndOpeningBraces(aStr, nPos, nLen);
aValue.X() = Imp_GetNumberChar(aStr, nPos, nLen, rConv, aValue.X(), TRUE, TRUE); aValue.X() = Imp_GetDoubleChar(aStr, nPos, nLen, rConv, aValue.X());
Imp_SkipSpacesAndCommas(aStr, nPos, nLen); Imp_SkipSpacesAndCommas(aStr, nPos, nLen);
aValue.Y() = Imp_GetNumberChar(aStr, nPos, nLen, rConv, aValue.Y(), TRUE, TRUE); aValue.Y() = Imp_GetDoubleChar(aStr, nPos, nLen, rConv, aValue.Y());
Imp_SkipSpacesAndCommas(aStr, nPos, nLen); Imp_SkipSpacesAndCommas(aStr, nPos, nLen);
aValue.Z() = Imp_GetNumberChar(aStr, nPos, nLen, rConv, aValue.Z(), TRUE, TRUE); aValue.Z() = Imp_GetDoubleChar(aStr, nPos, nLen, rConv, aValue.Z());
if(aValue.X() != 0.0 || aValue.Y() != 0.0 || aValue.Z() != 0.0) if(aValue.X() != 0.0 || aValue.Y() != 0.0 || aValue.Z() != 0.0)
maList.Insert(new ImpSdXMLExpTransObj3DTranslate(aValue), LIST_APPEND); maList.Insert(new ImpSdXMLExpTransObj3DTranslate(aValue), LIST_APPEND);
...@@ -789,7 +825,7 @@ SdXMLImExTransform3D::SdXMLImExTransform3D(const OUString& rNew, const SvXMLUnit ...@@ -789,7 +825,7 @@ SdXMLImExTransform3D::SdXMLImExTransform3D(const OUString& rNew, const SvXMLUnit
{ {
for(sal_uInt16 b(0); b < 3; b++) for(sal_uInt16 b(0); b < 3; b++)
{ {
aValue[a][b] = Imp_GetNumberChar(aStr, nPos, nLen, rConv, aValue[a][b], TRUE, TRUE); aValue[a][b] = Imp_GetDoubleChar(aStr, nPos, nLen, rConv, aValue[a][b]);
Imp_SkipSpacesAndCommas(aStr, nPos, nLen); Imp_SkipSpacesAndCommas(aStr, nPos, nLen);
} }
} }
...@@ -910,25 +946,25 @@ SdXMLImExViewBox::SdXMLImExViewBox(const OUString& rNew, const SvXMLUnitConverte ...@@ -910,25 +946,25 @@ SdXMLImExViewBox::SdXMLImExViewBox(const OUString& rNew, const SvXMLUnitConverte
Imp_SkipSpaces(aStr, nPos, nLen); Imp_SkipSpaces(aStr, nPos, nLen);
// get mX // get mX
mnX = Imp_GetNumberChar(aStr, nPos, nLen, rConv, mnX, TRUE, TRUE); mnX = Imp_GetNumberChar(aStr, nPos, nLen, rConv, mnX);
// skip spaces and commas // skip spaces and commas
Imp_SkipSpacesAndCommas(aStr, nPos, nLen); Imp_SkipSpacesAndCommas(aStr, nPos, nLen);
// get mY // get mY
mnY = Imp_GetNumberChar(aStr, nPos, nLen, rConv, mnY, TRUE, TRUE); mnY = Imp_GetNumberChar(aStr, nPos, nLen, rConv, mnY);
// skip spaces and commas // skip spaces and commas
Imp_SkipSpacesAndCommas(aStr, nPos, nLen); Imp_SkipSpacesAndCommas(aStr, nPos, nLen);
// get mW // get mW
mnW = Imp_GetNumberChar(aStr, nPos, nLen, rConv, mnW, TRUE, TRUE); mnW = Imp_GetNumberChar(aStr, nPos, nLen, rConv, mnW);
// skip spaces and commas // skip spaces and commas
Imp_SkipSpacesAndCommas(aStr, nPos, nLen); Imp_SkipSpacesAndCommas(aStr, nPos, nLen);
// get mH // get mH
mnH = Imp_GetNumberChar(aStr, nPos, nLen, rConv, mnH, TRUE, TRUE); mnH = Imp_GetNumberChar(aStr, nPos, nLen, rConv, mnH);
} }
} }
...@@ -1034,13 +1070,13 @@ SdXMLImExPointsElement::SdXMLImExPointsElement(const OUString& rNew, ...@@ -1034,13 +1070,13 @@ SdXMLImExPointsElement::SdXMLImExPointsElement(const OUString& rNew,
while(nPos < nLen) while(nPos < nLen)
{ {
// skip number // skip number
Imp_SkipNumber(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumber(aStr, nPos, nLen);
// skip spaces and commas // skip spaces and commas
Imp_SkipSpacesAndCommas(aStr, nPos, nLen); Imp_SkipSpacesAndCommas(aStr, nPos, nLen);
// get mY // get mY
Imp_SkipNumber(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumber(aStr, nPos, nLen);
// skip spaces and commas // skip spaces and commas
Imp_SkipSpacesAndCommas(aStr, nPos, nLen); Imp_SkipSpacesAndCommas(aStr, nPos, nLen);
...@@ -1073,13 +1109,13 @@ SdXMLImExPointsElement::SdXMLImExPointsElement(const OUString& rNew, ...@@ -1073,13 +1109,13 @@ SdXMLImExPointsElement::SdXMLImExPointsElement(const OUString& rNew,
sal_Int32 nY(0L); sal_Int32 nY(0L);
// get mX // get mX
nX = Imp_GetNumberChar(aStr, nPos, nLen, rConv, nX, TRUE, TRUE); nX = Imp_GetNumberChar(aStr, nPos, nLen, rConv, nX);
// skip spaces and commas // skip spaces and commas
Imp_SkipSpacesAndCommas(aStr, nPos, nLen); Imp_SkipSpacesAndCommas(aStr, nPos, nLen);
// get mY // get mY
nY = Imp_GetNumberChar(aStr, nPos, nLen, rConv, nY, TRUE, TRUE); nY = Imp_GetNumberChar(aStr, nPos, nLen, rConv, nY);
// skip spaces and commas // skip spaces and commas
Imp_SkipSpacesAndCommas(aStr, nPos, nLen); Imp_SkipSpacesAndCommas(aStr, nPos, nLen);
...@@ -1162,24 +1198,6 @@ void Imp_PrepareCoorExport(sal_Int32& nX, sal_Int32& nY, ...@@ -1162,24 +1198,6 @@ void Imp_PrepareCoorExport(sal_Int32& nX, sal_Int32& nY,
} }
} }
void Imp_PutNumberCharWithSpace(UniString& rStr, const SvXMLUnitConverter& rConv, double fValue)
{
const xub_StrLen aLen(rStr.Len());
if(aLen)
if(Imp_IsOnNumberChar(rStr, aLen - 1, FALSE, TRUE) && fValue >= 0.0)
rStr += sal_Unicode(' ');
Imp_PutNumberChar(rStr, rConv, fValue);
}
void Imp_PutNumberCharWithSpace(UniString& rStr, const SvXMLUnitConverter& rConv, sal_Int32 nValue)
{
const xub_StrLen aLen(rStr.Len());
if(aLen)
if(Imp_IsOnNumberChar(rStr, aLen - 1, FALSE, TRUE) && nValue >= 0)
rStr += sal_Unicode(' ');
Imp_PutNumberChar(rStr, rConv, nValue);
}
void SdXMLImExSvgDElement::AddPolygon( void SdXMLImExSvgDElement::AddPolygon(
drawing::PointSequence* pPoints, drawing::PointSequence* pPoints,
drawing::FlagSequence* pFlags, drawing::FlagSequence* pFlags,
...@@ -1483,19 +1501,11 @@ void SdXMLImExSvgDElement::AddPolygon( ...@@ -1483,19 +1501,11 @@ void SdXMLImExSvgDElement::AddPolygon(
msString = OUString(aNewString); msString = OUString(aNewString);
} }
void Imp_SkipNumberAndSpacesAndCommas(const UniString& rStr, xub_StrLen& rPos,
const xub_StrLen nLen, BOOL bSignIsNumber = TRUE, BOOL bPointIsNumber = FALSE)
{
Imp_SkipNumber(rStr, rPos, nLen, bSignIsNumber, bPointIsNumber);
Imp_SkipSpacesAndCommas(rStr, rPos, nLen);
}
sal_Int32 Imp_ImportNumberAndSpaces( sal_Int32 Imp_ImportNumberAndSpaces(
sal_Int32 nRetval, const UniString& rStr, xub_StrLen& rPos, sal_Int32 nRetval, const UniString& rStr, xub_StrLen& rPos,
const xub_StrLen nLen, const SvXMLUnitConverter& rConv, const xub_StrLen nLen, const SvXMLUnitConverter& rConv)
BOOL bSignIsNumber = TRUE, BOOL bPointIsNumber = FALSE)
{ {
nRetval = Imp_GetNumberChar(rStr, rPos, nLen, rConv, nRetval, bSignIsNumber, bPointIsNumber); nRetval = Imp_GetNumberChar(rStr, rPos, nLen, rConv, nRetval);
Imp_SkipSpacesAndCommas(rStr, rPos, nLen); Imp_SkipSpacesAndCommas(rStr, rPos, nLen);
return nRetval; return nRetval;
} }
...@@ -1625,8 +1635,7 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew, ...@@ -1625,8 +1635,7 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew,
} }
} }
if(bQuadraticBeziers || bEllipticalArc) DBG_ASSERT(!(bQuadraticBeziers || bEllipticalArc), "XMLIMP: non-interpreted tags in svg:d element!");
DBG_ERROR("XMLIMP: non-interpreted tags in svg:d element!");
if(nNumPolys) if(nNumPolys)
{ {
...@@ -1677,11 +1686,11 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew, ...@@ -1677,11 +1686,11 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew,
case 'l' : case 'l' :
{ {
nPos++; nPos++;
while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos, TRUE, TRUE)) while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos))
{ {
Imp_SkipSpaces(aStr, nPos, nLen); Imp_SkipSpaces(aStr, nPos, nLen);
Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen);
Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen);
nPointCount++; nPointCount++;
} }
break; break;
...@@ -1692,10 +1701,10 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew, ...@@ -1692,10 +1701,10 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew,
case 'v' : case 'v' :
{ {
nPos++; nPos++;
while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos, TRUE, TRUE)) while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos))
{ {
Imp_SkipSpaces(aStr, nPos, nLen); Imp_SkipSpaces(aStr, nPos, nLen);
Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen);
nPointCount++; nPointCount++;
} }
break; break;
...@@ -1704,13 +1713,13 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew, ...@@ -1704,13 +1713,13 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew,
case 's' : case 's' :
{ {
nPos++; nPos++;
while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos, TRUE, TRUE)) while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos))
{ {
Imp_SkipSpaces(aStr, nPos, nLen); Imp_SkipSpaces(aStr, nPos, nLen);
Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen);
Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen);
Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen);
Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen);
nPointCount += 3; nPointCount += 3;
} }
break; break;
...@@ -1719,15 +1728,15 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew, ...@@ -1719,15 +1728,15 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew,
case 'c' : case 'c' :
{ {
nPos++; nPos++;
while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos, TRUE, TRUE)) while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos))
{ {
Imp_SkipSpaces(aStr, nPos, nLen); Imp_SkipSpaces(aStr, nPos, nLen);
Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen);
Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen);
Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen);
Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen);
Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen);
Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen, TRUE, TRUE); Imp_SkipNumberAndSpacesAndCommas(aStr, nPos, nLen);
nPointCount += 3; nPointCount += 3;
} }
break; break;
...@@ -1796,11 +1805,11 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew, ...@@ -1796,11 +1805,11 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew,
nInnerIndex = 0L; nInnerIndex = 0L;
nPos++; nPos++;
while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos, TRUE, TRUE)) while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos))
{ {
Imp_SkipSpaces(aStr, nPos, nLen); Imp_SkipSpaces(aStr, nPos, nLen);
sal_Int32 nX(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nX(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
sal_Int32 nY(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nY(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
if(bRelative) if(bRelative)
{ {
...@@ -1826,11 +1835,11 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew, ...@@ -1826,11 +1835,11 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew,
case 'L' : case 'L' :
{ {
nPos++; nPos++;
while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos, TRUE, TRUE)) while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos))
{ {
Imp_SkipSpaces(aStr, nPos, nLen); Imp_SkipSpaces(aStr, nPos, nLen);
sal_Int32 nX(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nX(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
sal_Int32 nY(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nY(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
if(bRelative) if(bRelative)
{ {
...@@ -1856,10 +1865,10 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew, ...@@ -1856,10 +1865,10 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew,
case 'H' : case 'H' :
{ {
nPos++; nPos++;
while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos, TRUE, TRUE)) while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos))
{ {
Imp_SkipSpaces(aStr, nPos, nLen); Imp_SkipSpaces(aStr, nPos, nLen);
sal_Int32 nX(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nX(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
sal_Int32 nY(mnLastY); sal_Int32 nY(mnLastY);
if(bRelative) if(bRelative)
...@@ -1882,11 +1891,11 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew, ...@@ -1882,11 +1891,11 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew,
case 'V' : case 'V' :
{ {
nPos++; nPos++;
while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos, TRUE, TRUE)) while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos))
{ {
Imp_SkipSpaces(aStr, nPos, nLen); Imp_SkipSpaces(aStr, nPos, nLen);
sal_Int32 nX(mnLastX); sal_Int32 nX(mnLastX);
sal_Int32 nY(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nY(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
if(bRelative) if(bRelative)
nY += mnLastY; nY += mnLastY;
...@@ -1908,15 +1917,15 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew, ...@@ -1908,15 +1917,15 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew,
case 'S' : case 'S' :
{ {
nPos++; nPos++;
while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos, TRUE, TRUE)) while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos))
{ {
Imp_SkipSpaces(aStr, nPos, nLen); Imp_SkipSpaces(aStr, nPos, nLen);
sal_Int32 nX1; sal_Int32 nX1;
sal_Int32 nY1; sal_Int32 nY1;
sal_Int32 nX2(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nX2(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
sal_Int32 nY2(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nY2(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
sal_Int32 nX(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nX(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
sal_Int32 nY(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nY(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
if(bRelative) if(bRelative)
{ {
...@@ -1972,15 +1981,15 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew, ...@@ -1972,15 +1981,15 @@ SdXMLImExSvgDElement::SdXMLImExSvgDElement(const OUString& rNew,
case 'C' : case 'C' :
{ {
nPos++; nPos++;
while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos, TRUE, TRUE)) while(nPos < nLen && Imp_IsOnNumberChar(aStr, nPos))
{ {
Imp_SkipSpaces(aStr, nPos, nLen); Imp_SkipSpaces(aStr, nPos, nLen);
sal_Int32 nX1(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nX1(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
sal_Int32 nY1(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nY1(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
sal_Int32 nX2(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nX2(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
sal_Int32 nY2(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nY2(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
sal_Int32 nX(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nX(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
sal_Int32 nY(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv, TRUE, TRUE)); sal_Int32 nY(Imp_ImportNumberAndSpaces(0L, aStr, nPos, nLen, rConv));
if(bRelative) if(bRelative)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment