1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski #ifndef _STRINGCONVERSIONTOOLS_HXX
23*b1cdbd2cSJim Jagielski #define _STRINGCONVERSIONTOOLS_HXX
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski #include <sal/types.h>
26*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx>
27*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski namespace basegfx
30*b1cdbd2cSJim Jagielski {
31*b1cdbd2cSJim Jagielski     namespace internal
32*b1cdbd2cSJim Jagielski     {
33*b1cdbd2cSJim Jagielski         void lcl_skipSpaces(sal_Int32& 				io_rPos,
34*b1cdbd2cSJim Jagielski                             const ::rtl::OUString& 	rStr,
35*b1cdbd2cSJim Jagielski                             const sal_Int32 		nLen);
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski         void lcl_skipSpacesAndCommas(sal_Int32& 			io_rPos,
38*b1cdbd2cSJim Jagielski                                         const ::rtl::OUString& rStr,
39*b1cdbd2cSJim Jagielski                                         const sal_Int32 		nLen);
40*b1cdbd2cSJim Jagielski 
lcl_isOnNumberChar(const sal_Unicode aChar,bool bSignAllowed=true)41*b1cdbd2cSJim Jagielski         inline bool lcl_isOnNumberChar(const sal_Unicode aChar, bool bSignAllowed = true)
42*b1cdbd2cSJim Jagielski         {
43*b1cdbd2cSJim Jagielski             const bool bPredicate( (sal_Unicode('0') <= aChar && sal_Unicode('9') >= aChar)
44*b1cdbd2cSJim Jagielski                                     || (bSignAllowed && sal_Unicode('+') == aChar)
45*b1cdbd2cSJim Jagielski                                     || (bSignAllowed && sal_Unicode('-') == aChar) );
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski             return bPredicate;
48*b1cdbd2cSJim Jagielski         }
49*b1cdbd2cSJim Jagielski 
lcl_isOnNumberChar(const::rtl::OUString & rStr,const sal_Int32 nPos,bool bSignAllowed=true)50*b1cdbd2cSJim Jagielski         inline bool lcl_isOnNumberChar(const ::rtl::OUString& rStr, const sal_Int32 nPos, bool bSignAllowed = true)
51*b1cdbd2cSJim Jagielski         {
52*b1cdbd2cSJim Jagielski             return lcl_isOnNumberChar(rStr[nPos],
53*b1cdbd2cSJim Jagielski                                         bSignAllowed);
54*b1cdbd2cSJim Jagielski         }
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski         bool lcl_getDoubleChar(double& 					o_fRetval,
57*b1cdbd2cSJim Jagielski                                 sal_Int32& 				io_rPos,
58*b1cdbd2cSJim Jagielski                                 const ::rtl::OUString& 	rStr);
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski         bool lcl_importDoubleAndSpaces( double& 				o_fRetval,
61*b1cdbd2cSJim Jagielski                                         sal_Int32& 				io_rPos,
62*b1cdbd2cSJim Jagielski                                         const ::rtl::OUString& 	rStr,
63*b1cdbd2cSJim Jagielski                                         const sal_Int32 		nLen );
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski         bool lcl_importNumberAndSpaces(sal_Int32&                o_nRetval,
66*b1cdbd2cSJim Jagielski                                         sal_Int32& 				io_rPos,
67*b1cdbd2cSJim Jagielski                                         const ::rtl::OUString& 	rStr,
68*b1cdbd2cSJim Jagielski                                         const sal_Int32 		nLen);
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski         void lcl_skipNumber(sal_Int32& 				io_rPos,
71*b1cdbd2cSJim Jagielski                             const ::rtl::OUString& 	rStr,
72*b1cdbd2cSJim Jagielski                             const sal_Int32 		nLen);
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski         void lcl_skipDouble(sal_Int32& 				io_rPos,
75*b1cdbd2cSJim Jagielski                             const ::rtl::OUString& 	rStr);
76*b1cdbd2cSJim Jagielski 
lcl_skipNumberAndSpacesAndCommas(sal_Int32 & io_rPos,const::rtl::OUString & rStr,const sal_Int32 nLen)77*b1cdbd2cSJim Jagielski         inline void lcl_skipNumberAndSpacesAndCommas(sal_Int32& 				io_rPos,
78*b1cdbd2cSJim Jagielski                                                 const ::rtl::OUString& 	rStr,
79*b1cdbd2cSJim Jagielski                                                 const sal_Int32 			nLen)
80*b1cdbd2cSJim Jagielski         {
81*b1cdbd2cSJim Jagielski             lcl_skipNumber(io_rPos, rStr, nLen);
82*b1cdbd2cSJim Jagielski             lcl_skipSpacesAndCommas(io_rPos, rStr, nLen);
83*b1cdbd2cSJim Jagielski         }
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski         // #100617# Allow to skip doubles, too.
lcl_skipDoubleAndSpacesAndCommas(sal_Int32 & io_rPos,const::rtl::OUString & rStr,const sal_Int32 nLen)86*b1cdbd2cSJim Jagielski         inline void lcl_skipDoubleAndSpacesAndCommas(sal_Int32& 				io_rPos,
87*b1cdbd2cSJim Jagielski                                                 const ::rtl::OUString& 	rStr,
88*b1cdbd2cSJim Jagielski                                                 const sal_Int32 			nLen)
89*b1cdbd2cSJim Jagielski         {
90*b1cdbd2cSJim Jagielski             lcl_skipDouble(io_rPos, rStr);
91*b1cdbd2cSJim Jagielski             lcl_skipSpacesAndCommas(io_rPos, rStr, nLen);
92*b1cdbd2cSJim Jagielski         }
93*b1cdbd2cSJim Jagielski 
lcl_putNumberChar(::rtl::OUStringBuffer & rStr,double fValue)94*b1cdbd2cSJim Jagielski         inline void lcl_putNumberChar( ::rtl::OUStringBuffer& rStr,
95*b1cdbd2cSJim Jagielski                                 double 		 	       fValue )
96*b1cdbd2cSJim Jagielski         {
97*b1cdbd2cSJim Jagielski             rStr.append( fValue );
98*b1cdbd2cSJim Jagielski         }
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski         void lcl_putNumberCharWithSpace( ::rtl::OUStringBuffer& rStr,
101*b1cdbd2cSJim Jagielski                                             double 		        fValue,
102*b1cdbd2cSJim Jagielski                                             double 		        fOldValue,
103*b1cdbd2cSJim Jagielski                                             bool 			        bUseRelativeCoordinates );
104*b1cdbd2cSJim Jagielski 
lcl_getCommand(sal_Char cUpperCaseCommand,sal_Char cLowerCaseCommand,bool bUseRelativeCoordinates)105*b1cdbd2cSJim Jagielski         inline sal_Unicode lcl_getCommand( sal_Char cUpperCaseCommand,
106*b1cdbd2cSJim Jagielski                                             sal_Char cLowerCaseCommand,
107*b1cdbd2cSJim Jagielski                                             bool 	bUseRelativeCoordinates )
108*b1cdbd2cSJim Jagielski         {
109*b1cdbd2cSJim Jagielski             return bUseRelativeCoordinates ? cLowerCaseCommand : cUpperCaseCommand;
110*b1cdbd2cSJim Jagielski         }
111*b1cdbd2cSJim Jagielski     } // namespace internal
112*b1cdbd2cSJim Jagielski } // namespace basegfx
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski #endif /* _STRINGCONVERSIONTOOLS_HXX */
115