xref: /aoo4110/main/svtools/source/misc/imap2.cxx (revision b1cdbd2c)
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 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_svtools.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <string.h>
28*b1cdbd2cSJim Jagielski // #include <math.h>
29*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
30*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
31*b1cdbd2cSJim Jagielski #ifndef _WRKWIN_HXX //autogen
32*b1cdbd2cSJim Jagielski #include <vcl/wrkwin.hxx>
33*b1cdbd2cSJim Jagielski #endif
34*b1cdbd2cSJim Jagielski #include <sot/formats.hxx>
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski #include "svl/urihelper.hxx"
37*b1cdbd2cSJim Jagielski #include <svtools/imap.hxx>
38*b1cdbd2cSJim Jagielski #include <svtools/imap.hxx>
39*b1cdbd2cSJim Jagielski #include <svtools/imapobj.hxx>
40*b1cdbd2cSJim Jagielski #include <svtools/imaprect.hxx>
41*b1cdbd2cSJim Jagielski #include <svtools/imapcirc.hxx>
42*b1cdbd2cSJim Jagielski #include <svtools/imappoly.hxx>
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski #include <string.h>
45*b1cdbd2cSJim Jagielski #include <math.h>
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski #define NOTEOL(c) ((c)!='\0')
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski TYPEINIT0_AUTOFACTORY( ImageMap );
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski /******************************************************************************/
54*b1cdbd2cSJim Jagielski /******************************************************************************/
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski /******************************************************************************
58*b1cdbd2cSJim Jagielski |*
59*b1cdbd2cSJim Jagielski |*
60*b1cdbd2cSJim Jagielski |*
61*b1cdbd2cSJim Jagielski \******************************************************************************/
62*b1cdbd2cSJim Jagielski 
AppendCERNCoords(const Point & rPoint100,ByteString & rStr) const63*b1cdbd2cSJim Jagielski void IMapObject::AppendCERNCoords( const Point& rPoint100, ByteString& rStr ) const
64*b1cdbd2cSJim Jagielski {
65*b1cdbd2cSJim Jagielski 	const Point	aPixPt( Application::GetDefaultDevice()->LogicToPixel( rPoint100, MapMode( MAP_100TH_MM ) ) );
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski 	rStr += '(';
68*b1cdbd2cSJim Jagielski 	rStr += ByteString::CreateFromInt32( aPixPt.X() );
69*b1cdbd2cSJim Jagielski 	rStr += ',';
70*b1cdbd2cSJim Jagielski 	rStr += ByteString::CreateFromInt32( aPixPt.Y() );
71*b1cdbd2cSJim Jagielski 	rStr += ") ";
72*b1cdbd2cSJim Jagielski }
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski /******************************************************************************
76*b1cdbd2cSJim Jagielski |*
77*b1cdbd2cSJim Jagielski |*
78*b1cdbd2cSJim Jagielski |*
79*b1cdbd2cSJim Jagielski \******************************************************************************/
80*b1cdbd2cSJim Jagielski 
AppendNCSACoords(const Point & rPoint100,ByteString & rStr) const81*b1cdbd2cSJim Jagielski void IMapObject::AppendNCSACoords( const Point& rPoint100, ByteString& rStr ) const
82*b1cdbd2cSJim Jagielski {
83*b1cdbd2cSJim Jagielski 	const Point	aPixPt( Application::GetDefaultDevice()->LogicToPixel( rPoint100, MapMode( MAP_100TH_MM ) ) );
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 	rStr += ByteString::CreateFromInt32( aPixPt.X() );
86*b1cdbd2cSJim Jagielski 	rStr += ',';
87*b1cdbd2cSJim Jagielski 	rStr += ByteString::CreateFromInt32( aPixPt.Y() );
88*b1cdbd2cSJim Jagielski 	rStr += ' ';
89*b1cdbd2cSJim Jagielski }
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski /******************************************************************************
93*b1cdbd2cSJim Jagielski |*
94*b1cdbd2cSJim Jagielski |*
95*b1cdbd2cSJim Jagielski |*
96*b1cdbd2cSJim Jagielski \******************************************************************************/
97*b1cdbd2cSJim Jagielski 
AppendCERNURL(ByteString & rStr,const String & rBaseURL) const98*b1cdbd2cSJim Jagielski void IMapObject::AppendCERNURL( ByteString& rStr, const String& rBaseURL ) const
99*b1cdbd2cSJim Jagielski {
100*b1cdbd2cSJim Jagielski     rStr += ByteString( String(URIHelper::simpleNormalizedMakeRelative( rBaseURL, aURL )), gsl_getSystemTextEncoding() );
101*b1cdbd2cSJim Jagielski }
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski /******************************************************************************
105*b1cdbd2cSJim Jagielski |*
106*b1cdbd2cSJim Jagielski |*
107*b1cdbd2cSJim Jagielski |*
108*b1cdbd2cSJim Jagielski \******************************************************************************/
109*b1cdbd2cSJim Jagielski 
AppendNCSAURL(ByteString & rStr,const String & rBaseURL) const110*b1cdbd2cSJim Jagielski void IMapObject::AppendNCSAURL( ByteString& rStr, const String& rBaseURL ) const
111*b1cdbd2cSJim Jagielski {
112*b1cdbd2cSJim Jagielski     rStr += ByteString( String(URIHelper::simpleNormalizedMakeRelative( rBaseURL, aURL )), gsl_getSystemTextEncoding() );
113*b1cdbd2cSJim Jagielski 	rStr += ' ';
114*b1cdbd2cSJim Jagielski }
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski /******************************************************************************/
118*b1cdbd2cSJim Jagielski /******************************************************************************/
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski /******************************************************************************
122*b1cdbd2cSJim Jagielski |*
123*b1cdbd2cSJim Jagielski |*
124*b1cdbd2cSJim Jagielski |*
125*b1cdbd2cSJim Jagielski \******************************************************************************/
126*b1cdbd2cSJim Jagielski 
WriteCERN(SvStream & rOStm,const String & rBaseURL) const127*b1cdbd2cSJim Jagielski void IMapRectangleObject::WriteCERN( SvStream& rOStm, const String& rBaseURL ) const
128*b1cdbd2cSJim Jagielski {
129*b1cdbd2cSJim Jagielski 	ByteString aStr( "rectangle " );
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski 	AppendCERNCoords( aRect.TopLeft(), aStr );
132*b1cdbd2cSJim Jagielski 	AppendCERNCoords( aRect.BottomRight(), aStr );
133*b1cdbd2cSJim Jagielski     AppendCERNURL( aStr, rBaseURL );
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 	rOStm.WriteLine( aStr );
136*b1cdbd2cSJim Jagielski }
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski /******************************************************************************
140*b1cdbd2cSJim Jagielski |*
141*b1cdbd2cSJim Jagielski |*
142*b1cdbd2cSJim Jagielski |*
143*b1cdbd2cSJim Jagielski \******************************************************************************/
144*b1cdbd2cSJim Jagielski 
WriteNCSA(SvStream & rOStm,const String & rBaseURL) const145*b1cdbd2cSJim Jagielski void IMapRectangleObject::WriteNCSA( SvStream& rOStm, const String& rBaseURL ) const
146*b1cdbd2cSJim Jagielski {
147*b1cdbd2cSJim Jagielski 	ByteString aStr( "rect " );
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski     AppendNCSAURL( aStr, rBaseURL );
150*b1cdbd2cSJim Jagielski 	AppendNCSACoords( aRect.TopLeft(), aStr );
151*b1cdbd2cSJim Jagielski 	AppendNCSACoords( aRect.BottomRight(), aStr );
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski 	rOStm.WriteLine( aStr );
154*b1cdbd2cSJim Jagielski }
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski /******************************************************************************/
158*b1cdbd2cSJim Jagielski /******************************************************************************/
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski /******************************************************************************
162*b1cdbd2cSJim Jagielski |*
163*b1cdbd2cSJim Jagielski |*
164*b1cdbd2cSJim Jagielski |*
165*b1cdbd2cSJim Jagielski \******************************************************************************/
166*b1cdbd2cSJim Jagielski 
WriteCERN(SvStream & rOStm,const String & rBaseURL) const167*b1cdbd2cSJim Jagielski void IMapCircleObject::WriteCERN( SvStream& rOStm, const String& rBaseURL ) const
168*b1cdbd2cSJim Jagielski {
169*b1cdbd2cSJim Jagielski 	ByteString aStr( "circle " );
170*b1cdbd2cSJim Jagielski 
171*b1cdbd2cSJim Jagielski 	AppendCERNCoords( aCenter, aStr );
172*b1cdbd2cSJim Jagielski     aStr += ByteString::CreateFromInt32(nRadius);
173*b1cdbd2cSJim Jagielski 	aStr += ' ';
174*b1cdbd2cSJim Jagielski     AppendCERNURL( aStr, rBaseURL );
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 	rOStm.WriteLine( aStr );
177*b1cdbd2cSJim Jagielski }
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski /******************************************************************************
181*b1cdbd2cSJim Jagielski |*
182*b1cdbd2cSJim Jagielski |*
183*b1cdbd2cSJim Jagielski |*
184*b1cdbd2cSJim Jagielski \******************************************************************************/
185*b1cdbd2cSJim Jagielski 
WriteNCSA(SvStream & rOStm,const String & rBaseURL) const186*b1cdbd2cSJim Jagielski void IMapCircleObject::WriteNCSA( SvStream& rOStm, const String& rBaseURL ) const
187*b1cdbd2cSJim Jagielski {
188*b1cdbd2cSJim Jagielski 	ByteString aStr( "circle " );
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski     AppendNCSAURL( aStr, rBaseURL );
191*b1cdbd2cSJim Jagielski 	AppendNCSACoords( aCenter, aStr );
192*b1cdbd2cSJim Jagielski 	AppendNCSACoords( aCenter + Point( nRadius, 0 ), aStr );
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski 	rOStm.WriteLine( aStr );
195*b1cdbd2cSJim Jagielski }
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski /******************************************************************************/
199*b1cdbd2cSJim Jagielski /******************************************************************************/
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski /******************************************************************************
203*b1cdbd2cSJim Jagielski |*
204*b1cdbd2cSJim Jagielski |*
205*b1cdbd2cSJim Jagielski |*
206*b1cdbd2cSJim Jagielski \******************************************************************************/
207*b1cdbd2cSJim Jagielski 
WriteCERN(SvStream & rOStm,const String & rBaseURL) const208*b1cdbd2cSJim Jagielski void IMapPolygonObject::WriteCERN( SvStream& rOStm, const String& rBaseURL  ) const
209*b1cdbd2cSJim Jagielski {
210*b1cdbd2cSJim Jagielski 	ByteString		aStr( "polygon " );
211*b1cdbd2cSJim Jagielski 	const sal_uInt16	nCount = aPoly.GetSize();
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 	for ( sal_uInt16 i = 0; i < nCount; i++ )
214*b1cdbd2cSJim Jagielski 		AppendCERNCoords( aPoly[ i ], aStr );
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski     AppendCERNURL( aStr, rBaseURL );
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski 	rOStm.WriteLine( aStr );
219*b1cdbd2cSJim Jagielski }
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski /******************************************************************************
223*b1cdbd2cSJim Jagielski |*
224*b1cdbd2cSJim Jagielski |*
225*b1cdbd2cSJim Jagielski |*
226*b1cdbd2cSJim Jagielski \******************************************************************************/
227*b1cdbd2cSJim Jagielski 
WriteNCSA(SvStream & rOStm,const String & rBaseURL) const228*b1cdbd2cSJim Jagielski void IMapPolygonObject::WriteNCSA( SvStream& rOStm, const String& rBaseURL  ) const
229*b1cdbd2cSJim Jagielski {
230*b1cdbd2cSJim Jagielski 	ByteString		aStr( "poly " );
231*b1cdbd2cSJim Jagielski 	const sal_uInt16	nCount = Min( aPoly.GetSize(), (sal_uInt16) 100 );
232*b1cdbd2cSJim Jagielski 
233*b1cdbd2cSJim Jagielski     AppendNCSAURL( aStr, rBaseURL );
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 	for ( sal_uInt16 i = 0; i < nCount; i++ )
236*b1cdbd2cSJim Jagielski 		AppendNCSACoords( aPoly[ i ], aStr );
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski 	rOStm.WriteLine( aStr );
239*b1cdbd2cSJim Jagielski }
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski /******************************************************************************/
243*b1cdbd2cSJim Jagielski /******************************************************************************/
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski /******************************************************************************
247*b1cdbd2cSJim Jagielski |*
248*b1cdbd2cSJim Jagielski |*
249*b1cdbd2cSJim Jagielski |*
250*b1cdbd2cSJim Jagielski \******************************************************************************/
251*b1cdbd2cSJim Jagielski 
Write(SvStream & rOStm,sal_uLong nFormat,const String & rBaseURL) const252*b1cdbd2cSJim Jagielski void ImageMap::Write( SvStream& rOStm, sal_uLong nFormat, const String& rBaseURL ) const
253*b1cdbd2cSJim Jagielski {
254*b1cdbd2cSJim Jagielski 	switch( nFormat )
255*b1cdbd2cSJim Jagielski 	{
256*b1cdbd2cSJim Jagielski         case( IMAP_FORMAT_BIN ) : Write( rOStm, rBaseURL );
257*b1cdbd2cSJim Jagielski         case( IMAP_FORMAT_CERN ) : ImpWriteCERN( rOStm, rBaseURL ); break;
258*b1cdbd2cSJim Jagielski         case( IMAP_FORMAT_NCSA ) : ImpWriteNCSA( rOStm, rBaseURL ); break;
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski 		default:
261*b1cdbd2cSJim Jagielski 		break;
262*b1cdbd2cSJim Jagielski 	}
263*b1cdbd2cSJim Jagielski }
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski /******************************************************************************
267*b1cdbd2cSJim Jagielski |*
268*b1cdbd2cSJim Jagielski |*
269*b1cdbd2cSJim Jagielski |*
270*b1cdbd2cSJim Jagielski \******************************************************************************/
271*b1cdbd2cSJim Jagielski 
ImpWriteCERN(SvStream & rOStm,const String & rBaseURL) const272*b1cdbd2cSJim Jagielski void ImageMap::ImpWriteCERN( SvStream& rOStm, const String& rBaseURL ) const
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski 	IMapObject* pObj;
275*b1cdbd2cSJim Jagielski 	sal_uInt16		nCount = (sal_uInt16) maList.Count();
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski 	for ( sal_uInt16 i = 0; i < nCount; i++ )
278*b1cdbd2cSJim Jagielski 	{
279*b1cdbd2cSJim Jagielski 		pObj = GetIMapObject( i );
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski 		switch( pObj->GetType() )
282*b1cdbd2cSJim Jagielski 		{
283*b1cdbd2cSJim Jagielski 			case( IMAP_OBJ_RECTANGLE ):
284*b1cdbd2cSJim Jagielski                 ( (IMapRectangleObject*) pObj )->WriteCERN( rOStm, rBaseURL );
285*b1cdbd2cSJim Jagielski 			break;
286*b1cdbd2cSJim Jagielski 
287*b1cdbd2cSJim Jagielski 			case( IMAP_OBJ_CIRCLE ):
288*b1cdbd2cSJim Jagielski                 ( (IMapCircleObject*) pObj )->WriteCERN( rOStm, rBaseURL );
289*b1cdbd2cSJim Jagielski 			break;
290*b1cdbd2cSJim Jagielski 
291*b1cdbd2cSJim Jagielski 			case( IMAP_OBJ_POLYGON ):
292*b1cdbd2cSJim Jagielski                 ( (IMapPolygonObject*) pObj )->WriteCERN( rOStm, rBaseURL );
293*b1cdbd2cSJim Jagielski 			break;
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski 			default:
296*b1cdbd2cSJim Jagielski 			break;
297*b1cdbd2cSJim Jagielski 		}
298*b1cdbd2cSJim Jagielski 	}
299*b1cdbd2cSJim Jagielski }
300*b1cdbd2cSJim Jagielski 
301*b1cdbd2cSJim Jagielski 
302*b1cdbd2cSJim Jagielski /******************************************************************************
303*b1cdbd2cSJim Jagielski |*
304*b1cdbd2cSJim Jagielski |*
305*b1cdbd2cSJim Jagielski |*
306*b1cdbd2cSJim Jagielski \******************************************************************************/
307*b1cdbd2cSJim Jagielski 
ImpWriteNCSA(SvStream & rOStm,const String & rBaseURL) const308*b1cdbd2cSJim Jagielski void ImageMap::ImpWriteNCSA( SvStream& rOStm, const String& rBaseURL  ) const
309*b1cdbd2cSJim Jagielski {
310*b1cdbd2cSJim Jagielski 	IMapObject* pObj;
311*b1cdbd2cSJim Jagielski 	sal_uInt16		nCount = (sal_uInt16) maList.Count();
312*b1cdbd2cSJim Jagielski 
313*b1cdbd2cSJim Jagielski 	for ( sal_uInt16 i = 0; i < nCount; i++ )
314*b1cdbd2cSJim Jagielski 	{
315*b1cdbd2cSJim Jagielski 		pObj = GetIMapObject( i );
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski 			switch( pObj->GetType() )
318*b1cdbd2cSJim Jagielski 		{
319*b1cdbd2cSJim Jagielski 			case( IMAP_OBJ_RECTANGLE ):
320*b1cdbd2cSJim Jagielski                 ( (IMapRectangleObject*) pObj )->WriteNCSA( rOStm, rBaseURL );
321*b1cdbd2cSJim Jagielski 			break;
322*b1cdbd2cSJim Jagielski 
323*b1cdbd2cSJim Jagielski 			case( IMAP_OBJ_CIRCLE ):
324*b1cdbd2cSJim Jagielski                 ( (IMapCircleObject*) pObj )->WriteNCSA( rOStm, rBaseURL );
325*b1cdbd2cSJim Jagielski 			break;
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski 			case( IMAP_OBJ_POLYGON ):
328*b1cdbd2cSJim Jagielski                 ( (IMapPolygonObject*) pObj )->WriteNCSA( rOStm, rBaseURL );
329*b1cdbd2cSJim Jagielski 			break;
330*b1cdbd2cSJim Jagielski 
331*b1cdbd2cSJim Jagielski 			default:
332*b1cdbd2cSJim Jagielski 			break;
333*b1cdbd2cSJim Jagielski 		}
334*b1cdbd2cSJim Jagielski 	}
335*b1cdbd2cSJim Jagielski }
336*b1cdbd2cSJim Jagielski 
337*b1cdbd2cSJim Jagielski 
338*b1cdbd2cSJim Jagielski /******************************************************************************
339*b1cdbd2cSJim Jagielski |*
340*b1cdbd2cSJim Jagielski |*
341*b1cdbd2cSJim Jagielski |*
342*b1cdbd2cSJim Jagielski \******************************************************************************/
343*b1cdbd2cSJim Jagielski 
Read(SvStream & rIStm,sal_uLong nFormat,const String & rBaseURL)344*b1cdbd2cSJim Jagielski sal_uLong ImageMap::Read( SvStream& rIStm, sal_uLong nFormat, const String& rBaseURL  )
345*b1cdbd2cSJim Jagielski {
346*b1cdbd2cSJim Jagielski 	sal_uLong nRet = IMAP_ERR_FORMAT;
347*b1cdbd2cSJim Jagielski 
348*b1cdbd2cSJim Jagielski 	if ( nFormat == IMAP_FORMAT_DETECT )
349*b1cdbd2cSJim Jagielski 		nFormat = ImpDetectFormat( rIStm );
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski 	switch ( nFormat )
352*b1cdbd2cSJim Jagielski 	{
353*b1cdbd2cSJim Jagielski         case ( IMAP_FORMAT_BIN )    : Read( rIStm, rBaseURL ); break;
354*b1cdbd2cSJim Jagielski         case ( IMAP_FORMAT_CERN )   : nRet = ImpReadCERN( rIStm, rBaseURL ); break;
355*b1cdbd2cSJim Jagielski         case ( IMAP_FORMAT_NCSA )   : nRet = ImpReadNCSA( rIStm, rBaseURL ); break;
356*b1cdbd2cSJim Jagielski 
357*b1cdbd2cSJim Jagielski 		default:
358*b1cdbd2cSJim Jagielski 		break;
359*b1cdbd2cSJim Jagielski 	}
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski 	if ( !rIStm.GetError() )
362*b1cdbd2cSJim Jagielski 		nRet = IMAP_ERR_OK;
363*b1cdbd2cSJim Jagielski 
364*b1cdbd2cSJim Jagielski 	return nRet;
365*b1cdbd2cSJim Jagielski }
366*b1cdbd2cSJim Jagielski 
367*b1cdbd2cSJim Jagielski 
368*b1cdbd2cSJim Jagielski /******************************************************************************
369*b1cdbd2cSJim Jagielski |*
370*b1cdbd2cSJim Jagielski |*
371*b1cdbd2cSJim Jagielski |*
372*b1cdbd2cSJim Jagielski \******************************************************************************/
373*b1cdbd2cSJim Jagielski 
ImpReadCERN(SvStream & rIStm,const String & rBaseURL)374*b1cdbd2cSJim Jagielski sal_uLong ImageMap::ImpReadCERN( SvStream& rIStm, const String& rBaseURL )
375*b1cdbd2cSJim Jagielski {
376*b1cdbd2cSJim Jagielski 	ByteString aStr;
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski 	// alten Inhalt loeschen
379*b1cdbd2cSJim Jagielski 	ClearImageMap();
380*b1cdbd2cSJim Jagielski 
381*b1cdbd2cSJim Jagielski 	while ( rIStm.ReadLine( aStr ) )
382*b1cdbd2cSJim Jagielski         ImpReadCERNLine( aStr, rBaseURL );
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski 	return IMAP_ERR_OK;
385*b1cdbd2cSJim Jagielski }
386*b1cdbd2cSJim Jagielski 
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski /******************************************************************************
389*b1cdbd2cSJim Jagielski |*
390*b1cdbd2cSJim Jagielski |*
391*b1cdbd2cSJim Jagielski |*
392*b1cdbd2cSJim Jagielski \******************************************************************************/
393*b1cdbd2cSJim Jagielski 
ImpReadCERNLine(const ByteString & rLine,const String & rBaseURL)394*b1cdbd2cSJim Jagielski void ImageMap::ImpReadCERNLine( const ByteString& rLine, const String& rBaseURL  )
395*b1cdbd2cSJim Jagielski {
396*b1cdbd2cSJim Jagielski 	ByteString	aStr( rLine );
397*b1cdbd2cSJim Jagielski 	ByteString	aToken;
398*b1cdbd2cSJim Jagielski 
399*b1cdbd2cSJim Jagielski 	aStr.EraseLeadingChars( ' ' );
400*b1cdbd2cSJim Jagielski 	aStr.EraseLeadingChars( '\t' );
401*b1cdbd2cSJim Jagielski 	aStr.EraseAllChars( ';' );
402*b1cdbd2cSJim Jagielski 	aStr.ToLowerAscii();
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski 	const char*	pStr = aStr.GetBuffer();
405*b1cdbd2cSJim Jagielski 	char		cChar = *pStr++;
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski 		// Anweisung finden
408*b1cdbd2cSJim Jagielski 	while( ( cChar >= 'a' ) && ( cChar <= 'z' ) && NOTEOL( cChar ) )
409*b1cdbd2cSJim Jagielski 	{
410*b1cdbd2cSJim Jagielski 		aToken += cChar;
411*b1cdbd2cSJim Jagielski 		cChar = *pStr++;
412*b1cdbd2cSJim Jagielski 	}
413*b1cdbd2cSJim Jagielski 
414*b1cdbd2cSJim Jagielski 	if ( NOTEOL( cChar ) )
415*b1cdbd2cSJim Jagielski 	{
416*b1cdbd2cSJim Jagielski 		if ( ( aToken == "rectangle" ) || ( aToken == "rect" ) )
417*b1cdbd2cSJim Jagielski 		{
418*b1cdbd2cSJim Jagielski 			const Point		aTopLeft( ImpReadCERNCoords( &pStr ) );
419*b1cdbd2cSJim Jagielski 			const Point		aBottomRight( ImpReadCERNCoords( &pStr ) );
420*b1cdbd2cSJim Jagielski             const String    aURL( ImpReadCERNURL( &pStr, rBaseURL ) );
421*b1cdbd2cSJim Jagielski 			const Rectangle	aRect( aTopLeft, aBottomRight );
422*b1cdbd2cSJim Jagielski 
423*b1cdbd2cSJim Jagielski 			IMapRectangleObject* pObj = new IMapRectangleObject( aRect, aURL, String(), String(), String(), String() );
424*b1cdbd2cSJim Jagielski 			maList.Insert( pObj, LIST_APPEND );
425*b1cdbd2cSJim Jagielski 		}
426*b1cdbd2cSJim Jagielski 		else if ( ( aToken == "circle" ) || ( aToken == "circ" ) )
427*b1cdbd2cSJim Jagielski 		{
428*b1cdbd2cSJim Jagielski 			const Point		aCenter( ImpReadCERNCoords( &pStr ) );
429*b1cdbd2cSJim Jagielski 			const long		nRadius = ImpReadCERNRadius( &pStr );
430*b1cdbd2cSJim Jagielski             const String    aURL( ImpReadCERNURL( &pStr, rBaseURL ) );
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski 			IMapCircleObject* pObj = new IMapCircleObject( aCenter, nRadius, aURL, String(), String(), String(), String() );
433*b1cdbd2cSJim Jagielski 			maList.Insert( pObj, LIST_APPEND );
434*b1cdbd2cSJim Jagielski 		}
435*b1cdbd2cSJim Jagielski 		else if ( ( aToken == "polygon" ) || ( aToken == "poly" ) )
436*b1cdbd2cSJim Jagielski 		{
437*b1cdbd2cSJim Jagielski 			const sal_uInt16	nCount = aStr.GetTokenCount( '(' ) - 1;
438*b1cdbd2cSJim Jagielski 			Polygon			aPoly( nCount );
439*b1cdbd2cSJim Jagielski 			String			aURL;
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski 			for ( sal_uInt16 i = 0; i < nCount; i++ )
442*b1cdbd2cSJim Jagielski 				aPoly[ i ] = ImpReadCERNCoords( &pStr );
443*b1cdbd2cSJim Jagielski 
444*b1cdbd2cSJim Jagielski             aURL = ImpReadCERNURL( &pStr, rBaseURL );
445*b1cdbd2cSJim Jagielski 
446*b1cdbd2cSJim Jagielski 			IMapPolygonObject* pObj = new IMapPolygonObject( aPoly, aURL, String(), String(), String(), String() );
447*b1cdbd2cSJim Jagielski 			maList.Insert( pObj, LIST_APPEND );
448*b1cdbd2cSJim Jagielski 		}
449*b1cdbd2cSJim Jagielski 	}
450*b1cdbd2cSJim Jagielski }
451*b1cdbd2cSJim Jagielski 
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski /******************************************************************************
454*b1cdbd2cSJim Jagielski |*
455*b1cdbd2cSJim Jagielski |*
456*b1cdbd2cSJim Jagielski |*
457*b1cdbd2cSJim Jagielski \******************************************************************************/
458*b1cdbd2cSJim Jagielski 
ImpReadCERNCoords(const char ** ppStr)459*b1cdbd2cSJim Jagielski Point ImageMap::ImpReadCERNCoords( const char** ppStr )
460*b1cdbd2cSJim Jagielski {
461*b1cdbd2cSJim Jagielski 	String	aStrX;
462*b1cdbd2cSJim Jagielski 	String	aStrY;
463*b1cdbd2cSJim Jagielski 	Point	aPt;
464*b1cdbd2cSJim Jagielski 	char	cChar = *(*ppStr)++;
465*b1cdbd2cSJim Jagielski 
466*b1cdbd2cSJim Jagielski 	while( NOTEOL( cChar ) && ( ( cChar < '0' ) || ( cChar > '9' ) ) )
467*b1cdbd2cSJim Jagielski 		cChar = *(*ppStr)++;
468*b1cdbd2cSJim Jagielski 
469*b1cdbd2cSJim Jagielski 	if ( NOTEOL( cChar ) )
470*b1cdbd2cSJim Jagielski 	{
471*b1cdbd2cSJim Jagielski 		while( NOTEOL( cChar ) && ( cChar >= '0' ) && ( cChar <= '9' ) )
472*b1cdbd2cSJim Jagielski 		{
473*b1cdbd2cSJim Jagielski 			aStrX += cChar;
474*b1cdbd2cSJim Jagielski 			cChar = *(*ppStr)++;
475*b1cdbd2cSJim Jagielski 		}
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski 		if ( NOTEOL( cChar ) )
478*b1cdbd2cSJim Jagielski 		{
479*b1cdbd2cSJim Jagielski 			while( NOTEOL( cChar ) && ( ( cChar < '0' ) || ( cChar > '9' ) ) )
480*b1cdbd2cSJim Jagielski 				cChar = *(*ppStr)++;
481*b1cdbd2cSJim Jagielski 
482*b1cdbd2cSJim Jagielski 			while( NOTEOL( cChar ) && ( cChar >= '0' ) && ( cChar <= '9' ) )
483*b1cdbd2cSJim Jagielski 			{
484*b1cdbd2cSJim Jagielski 				aStrY += cChar;
485*b1cdbd2cSJim Jagielski 				cChar = *(*ppStr)++;
486*b1cdbd2cSJim Jagielski 			}
487*b1cdbd2cSJim Jagielski 
488*b1cdbd2cSJim Jagielski 			if ( NOTEOL( cChar ) )
489*b1cdbd2cSJim Jagielski 				while( NOTEOL( cChar ) && ( cChar != ')' ) )
490*b1cdbd2cSJim Jagielski 					cChar = *(*ppStr)++;
491*b1cdbd2cSJim Jagielski 
492*b1cdbd2cSJim Jagielski 			aPt = Point( aStrX.ToInt32(), aStrY.ToInt32() );
493*b1cdbd2cSJim Jagielski 		}
494*b1cdbd2cSJim Jagielski 	}
495*b1cdbd2cSJim Jagielski 
496*b1cdbd2cSJim Jagielski 	return aPt;
497*b1cdbd2cSJim Jagielski }
498*b1cdbd2cSJim Jagielski 
499*b1cdbd2cSJim Jagielski 
500*b1cdbd2cSJim Jagielski /******************************************************************************
501*b1cdbd2cSJim Jagielski |*
502*b1cdbd2cSJim Jagielski |*
503*b1cdbd2cSJim Jagielski |*
504*b1cdbd2cSJim Jagielski \******************************************************************************/
505*b1cdbd2cSJim Jagielski 
ImpReadCERNRadius(const char ** ppStr)506*b1cdbd2cSJim Jagielski long ImageMap::ImpReadCERNRadius( const char** ppStr )
507*b1cdbd2cSJim Jagielski {
508*b1cdbd2cSJim Jagielski 	String	aStr;
509*b1cdbd2cSJim Jagielski 	char	cChar = *(*ppStr)++;
510*b1cdbd2cSJim Jagielski 
511*b1cdbd2cSJim Jagielski 	while( NOTEOL( cChar ) && ( ( cChar < '0' ) || ( cChar > '9' ) ) )
512*b1cdbd2cSJim Jagielski 		cChar = *(*ppStr)++;
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski 	if ( NOTEOL( cChar ) )
515*b1cdbd2cSJim Jagielski 	{
516*b1cdbd2cSJim Jagielski 		while( NOTEOL( cChar ) && ( cChar >= '0' ) && ( cChar <= '9' ) )
517*b1cdbd2cSJim Jagielski 		{
518*b1cdbd2cSJim Jagielski 			aStr += cChar;
519*b1cdbd2cSJim Jagielski 			cChar = *(*ppStr)++;
520*b1cdbd2cSJim Jagielski 		}
521*b1cdbd2cSJim Jagielski 	}
522*b1cdbd2cSJim Jagielski 
523*b1cdbd2cSJim Jagielski 	return aStr.ToInt32();
524*b1cdbd2cSJim Jagielski }
525*b1cdbd2cSJim Jagielski 
526*b1cdbd2cSJim Jagielski 
527*b1cdbd2cSJim Jagielski /******************************************************************************
528*b1cdbd2cSJim Jagielski |*
529*b1cdbd2cSJim Jagielski |*
530*b1cdbd2cSJim Jagielski |*
531*b1cdbd2cSJim Jagielski \******************************************************************************/
532*b1cdbd2cSJim Jagielski 
ImpReadCERNURL(const char ** ppStr,const String & rBaseURL)533*b1cdbd2cSJim Jagielski String ImageMap::ImpReadCERNURL( const char** ppStr, const String& rBaseURL )
534*b1cdbd2cSJim Jagielski {
535*b1cdbd2cSJim Jagielski 	String	aStr( String::CreateFromAscii( *ppStr ) );
536*b1cdbd2cSJim Jagielski 
537*b1cdbd2cSJim Jagielski 	aStr.EraseLeadingChars( ' ' );
538*b1cdbd2cSJim Jagielski 	aStr.EraseLeadingChars( '\t' );
539*b1cdbd2cSJim Jagielski 	aStr.EraseTrailingChars( ' ' );
540*b1cdbd2cSJim Jagielski 	aStr.EraseTrailingChars( '\t' );
541*b1cdbd2cSJim Jagielski 
542*b1cdbd2cSJim Jagielski     return INetURLObject::GetAbsURL( rBaseURL, aStr );
543*b1cdbd2cSJim Jagielski }
544*b1cdbd2cSJim Jagielski 
545*b1cdbd2cSJim Jagielski 
546*b1cdbd2cSJim Jagielski /******************************************************************************
547*b1cdbd2cSJim Jagielski |*
548*b1cdbd2cSJim Jagielski |*
549*b1cdbd2cSJim Jagielski |*
550*b1cdbd2cSJim Jagielski \******************************************************************************/
551*b1cdbd2cSJim Jagielski 
ImpReadNCSA(SvStream & rIStm,const String & rBaseURL)552*b1cdbd2cSJim Jagielski sal_uLong ImageMap::ImpReadNCSA( SvStream& rIStm, const String& rBaseURL )
553*b1cdbd2cSJim Jagielski {
554*b1cdbd2cSJim Jagielski 	ByteString aStr;
555*b1cdbd2cSJim Jagielski 
556*b1cdbd2cSJim Jagielski 	// alten Inhalt loeschen
557*b1cdbd2cSJim Jagielski 	ClearImageMap();
558*b1cdbd2cSJim Jagielski 
559*b1cdbd2cSJim Jagielski 	while ( rIStm.ReadLine( aStr ) )
560*b1cdbd2cSJim Jagielski         ImpReadNCSALine( aStr, rBaseURL );
561*b1cdbd2cSJim Jagielski 
562*b1cdbd2cSJim Jagielski 	return IMAP_ERR_OK;
563*b1cdbd2cSJim Jagielski }
564*b1cdbd2cSJim Jagielski 
565*b1cdbd2cSJim Jagielski 
566*b1cdbd2cSJim Jagielski /******************************************************************************
567*b1cdbd2cSJim Jagielski |*
568*b1cdbd2cSJim Jagielski |*
569*b1cdbd2cSJim Jagielski |*
570*b1cdbd2cSJim Jagielski \******************************************************************************/
571*b1cdbd2cSJim Jagielski 
ImpReadNCSALine(const ByteString & rLine,const String & rBaseURL)572*b1cdbd2cSJim Jagielski void ImageMap::ImpReadNCSALine( const ByteString& rLine, const String& rBaseURL )
573*b1cdbd2cSJim Jagielski {
574*b1cdbd2cSJim Jagielski 	ByteString	aStr( rLine );
575*b1cdbd2cSJim Jagielski 	ByteString	aToken;
576*b1cdbd2cSJim Jagielski 
577*b1cdbd2cSJim Jagielski 	aStr.EraseLeadingChars( ' ' );
578*b1cdbd2cSJim Jagielski 	aStr.EraseLeadingChars( '\t' );
579*b1cdbd2cSJim Jagielski 	aStr.EraseAllChars( ';' );
580*b1cdbd2cSJim Jagielski 	aStr.ToLowerAscii();
581*b1cdbd2cSJim Jagielski 
582*b1cdbd2cSJim Jagielski 	const char*	pStr = aStr.GetBuffer();
583*b1cdbd2cSJim Jagielski 	char		cChar = *pStr++;
584*b1cdbd2cSJim Jagielski 
585*b1cdbd2cSJim Jagielski 		// Anweisung finden
586*b1cdbd2cSJim Jagielski 	while( ( cChar >= 'a' ) && ( cChar <= 'z' ) && NOTEOL( cChar ) )
587*b1cdbd2cSJim Jagielski 	{
588*b1cdbd2cSJim Jagielski 		aToken += cChar;
589*b1cdbd2cSJim Jagielski 		cChar = *pStr++;
590*b1cdbd2cSJim Jagielski 	}
591*b1cdbd2cSJim Jagielski 
592*b1cdbd2cSJim Jagielski 	if ( NOTEOL( cChar ) )
593*b1cdbd2cSJim Jagielski 	{
594*b1cdbd2cSJim Jagielski 		if ( aToken == "rect" )
595*b1cdbd2cSJim Jagielski 		{
596*b1cdbd2cSJim Jagielski             const String    aURL( ImpReadNCSAURL( &pStr, rBaseURL ) );
597*b1cdbd2cSJim Jagielski 			const Point		aTopLeft( ImpReadNCSACoords( &pStr ) );
598*b1cdbd2cSJim Jagielski 			const Point		aBottomRight( ImpReadNCSACoords( &pStr ) );
599*b1cdbd2cSJim Jagielski 			const Rectangle	aRect( aTopLeft, aBottomRight );
600*b1cdbd2cSJim Jagielski 
601*b1cdbd2cSJim Jagielski 			IMapRectangleObject* pObj = new IMapRectangleObject( aRect, aURL, String(), String(), String(), String() );
602*b1cdbd2cSJim Jagielski 			maList.Insert( pObj, LIST_APPEND );
603*b1cdbd2cSJim Jagielski 		}
604*b1cdbd2cSJim Jagielski 		else if ( aToken == "circle" )
605*b1cdbd2cSJim Jagielski 		{
606*b1cdbd2cSJim Jagielski             const String    aURL( ImpReadNCSAURL( &pStr, rBaseURL ) );
607*b1cdbd2cSJim Jagielski 			const Point		aCenter( ImpReadNCSACoords( &pStr ) );
608*b1cdbd2cSJim Jagielski 			const Point		aDX( aCenter - ImpReadNCSACoords( &pStr ) );
609*b1cdbd2cSJim Jagielski 			long			nRadius = (long) sqrt( (double) aDX.X() * aDX.X() +
610*b1cdbd2cSJim Jagielski 												   (double) aDX.Y() * aDX.Y() );
611*b1cdbd2cSJim Jagielski 
612*b1cdbd2cSJim Jagielski 			IMapCircleObject* pObj = new IMapCircleObject( aCenter, nRadius, aURL, String(), String(), String(), String() );
613*b1cdbd2cSJim Jagielski 			maList.Insert( pObj, LIST_APPEND );
614*b1cdbd2cSJim Jagielski 		}
615*b1cdbd2cSJim Jagielski 		else if ( aToken == "poly" )
616*b1cdbd2cSJim Jagielski 		{
617*b1cdbd2cSJim Jagielski 			const sal_uInt16	nCount = aStr.GetTokenCount( ',' ) - 1;
618*b1cdbd2cSJim Jagielski             const String    aURL( ImpReadNCSAURL( &pStr, rBaseURL ) );
619*b1cdbd2cSJim Jagielski 			Polygon			aPoly( nCount );
620*b1cdbd2cSJim Jagielski 
621*b1cdbd2cSJim Jagielski 			for ( sal_uInt16 i = 0; i < nCount; i++ )
622*b1cdbd2cSJim Jagielski 				aPoly[ i ] = ImpReadNCSACoords( &pStr );
623*b1cdbd2cSJim Jagielski 
624*b1cdbd2cSJim Jagielski 			IMapPolygonObject* pObj = new IMapPolygonObject( aPoly, aURL, String(), String(), String(), String() );
625*b1cdbd2cSJim Jagielski 			maList.Insert( pObj, LIST_APPEND );
626*b1cdbd2cSJim Jagielski 		}
627*b1cdbd2cSJim Jagielski 	}
628*b1cdbd2cSJim Jagielski }
629*b1cdbd2cSJim Jagielski 
630*b1cdbd2cSJim Jagielski 
631*b1cdbd2cSJim Jagielski /******************************************************************************
632*b1cdbd2cSJim Jagielski |*
633*b1cdbd2cSJim Jagielski |*
634*b1cdbd2cSJim Jagielski |*
635*b1cdbd2cSJim Jagielski \******************************************************************************/
636*b1cdbd2cSJim Jagielski 
ImpReadNCSAURL(const char ** ppStr,const String & rBaseURL)637*b1cdbd2cSJim Jagielski String ImageMap::ImpReadNCSAURL( const char** ppStr, const String& rBaseURL )
638*b1cdbd2cSJim Jagielski {
639*b1cdbd2cSJim Jagielski 	String	aStr;
640*b1cdbd2cSJim Jagielski 	char	cChar = *(*ppStr)++;
641*b1cdbd2cSJim Jagielski 
642*b1cdbd2cSJim Jagielski 	while( NOTEOL( cChar ) && ( ( cChar == ' ' ) || ( cChar == '\t' ) ) )
643*b1cdbd2cSJim Jagielski 		cChar = *(*ppStr)++;
644*b1cdbd2cSJim Jagielski 
645*b1cdbd2cSJim Jagielski 	if ( NOTEOL( cChar ) )
646*b1cdbd2cSJim Jagielski 	{
647*b1cdbd2cSJim Jagielski 		while( NOTEOL( cChar ) && ( cChar != ' ' ) && ( cChar != '\t' ) )
648*b1cdbd2cSJim Jagielski 		{
649*b1cdbd2cSJim Jagielski 			aStr += cChar;
650*b1cdbd2cSJim Jagielski 			cChar = *(*ppStr)++;
651*b1cdbd2cSJim Jagielski 		}
652*b1cdbd2cSJim Jagielski 	}
653*b1cdbd2cSJim Jagielski 
654*b1cdbd2cSJim Jagielski     return INetURLObject::GetAbsURL( rBaseURL, aStr );
655*b1cdbd2cSJim Jagielski }
656*b1cdbd2cSJim Jagielski 
657*b1cdbd2cSJim Jagielski 
658*b1cdbd2cSJim Jagielski /******************************************************************************
659*b1cdbd2cSJim Jagielski |*
660*b1cdbd2cSJim Jagielski |*
661*b1cdbd2cSJim Jagielski |*
662*b1cdbd2cSJim Jagielski \******************************************************************************/
663*b1cdbd2cSJim Jagielski 
ImpReadNCSACoords(const char ** ppStr)664*b1cdbd2cSJim Jagielski Point ImageMap::ImpReadNCSACoords( const char** ppStr )
665*b1cdbd2cSJim Jagielski {
666*b1cdbd2cSJim Jagielski 	String	aStrX;
667*b1cdbd2cSJim Jagielski 	String	aStrY;
668*b1cdbd2cSJim Jagielski 	Point	aPt;
669*b1cdbd2cSJim Jagielski 	char	cChar = *(*ppStr)++;
670*b1cdbd2cSJim Jagielski 
671*b1cdbd2cSJim Jagielski 	while( NOTEOL( cChar ) && ( ( cChar < '0' ) || ( cChar > '9' ) ) )
672*b1cdbd2cSJim Jagielski 		cChar = *(*ppStr)++;
673*b1cdbd2cSJim Jagielski 
674*b1cdbd2cSJim Jagielski 	if ( NOTEOL( cChar ) )
675*b1cdbd2cSJim Jagielski 	{
676*b1cdbd2cSJim Jagielski 		while( NOTEOL( cChar ) && ( cChar >= '0' ) && ( cChar <= '9' ) )
677*b1cdbd2cSJim Jagielski 		{
678*b1cdbd2cSJim Jagielski 			aStrX += cChar;
679*b1cdbd2cSJim Jagielski 			cChar = *(*ppStr)++;
680*b1cdbd2cSJim Jagielski 		}
681*b1cdbd2cSJim Jagielski 
682*b1cdbd2cSJim Jagielski 		if ( NOTEOL( cChar ) )
683*b1cdbd2cSJim Jagielski 		{
684*b1cdbd2cSJim Jagielski 			while( NOTEOL( cChar ) && ( ( cChar < '0' ) || ( cChar > '9' ) ) )
685*b1cdbd2cSJim Jagielski 				cChar = *(*ppStr)++;
686*b1cdbd2cSJim Jagielski 
687*b1cdbd2cSJim Jagielski 			while( NOTEOL( cChar ) && ( cChar >= '0' ) && ( cChar <= '9' ) )
688*b1cdbd2cSJim Jagielski 			{
689*b1cdbd2cSJim Jagielski 				aStrY += cChar;
690*b1cdbd2cSJim Jagielski 				cChar = *(*ppStr)++;
691*b1cdbd2cSJim Jagielski 			}
692*b1cdbd2cSJim Jagielski 
693*b1cdbd2cSJim Jagielski 			aPt = Point( aStrX.ToInt32(), aStrY.ToInt32() );
694*b1cdbd2cSJim Jagielski 		}
695*b1cdbd2cSJim Jagielski 	}
696*b1cdbd2cSJim Jagielski 
697*b1cdbd2cSJim Jagielski 	return aPt;
698*b1cdbd2cSJim Jagielski }
699*b1cdbd2cSJim Jagielski 
700*b1cdbd2cSJim Jagielski 
701*b1cdbd2cSJim Jagielski /******************************************************************************
702*b1cdbd2cSJim Jagielski |*
703*b1cdbd2cSJim Jagielski |*
704*b1cdbd2cSJim Jagielski |*
705*b1cdbd2cSJim Jagielski \******************************************************************************/
706*b1cdbd2cSJim Jagielski 
ImpDetectFormat(SvStream & rIStm)707*b1cdbd2cSJim Jagielski sal_uLong ImageMap::ImpDetectFormat( SvStream& rIStm )
708*b1cdbd2cSJim Jagielski {
709*b1cdbd2cSJim Jagielski 	sal_uLong	nPos = rIStm.Tell();
710*b1cdbd2cSJim Jagielski 	sal_uLong	nRet = IMAP_FORMAT_BIN;
711*b1cdbd2cSJim Jagielski 	char	cMagic[6];
712*b1cdbd2cSJim Jagielski 
713*b1cdbd2cSJim Jagielski 	rIStm.Read( cMagic, sizeof( cMagic ) );
714*b1cdbd2cSJim Jagielski 
715*b1cdbd2cSJim Jagielski 	// Falls wir kein internes Format haben,
716*b1cdbd2cSJim Jagielski 	// untersuchen wir das Format
717*b1cdbd2cSJim Jagielski 	if ( memcmp( cMagic, IMAPMAGIC, sizeof( cMagic ) ) )
718*b1cdbd2cSJim Jagielski 	{
719*b1cdbd2cSJim Jagielski 		ByteString	aStr;
720*b1cdbd2cSJim Jagielski 		long		nCount = 128;
721*b1cdbd2cSJim Jagielski 
722*b1cdbd2cSJim Jagielski 		rIStm.Seek( nPos );
723*b1cdbd2cSJim Jagielski 		while ( rIStm.ReadLine( aStr ) && nCount-- )
724*b1cdbd2cSJim Jagielski 		{
725*b1cdbd2cSJim Jagielski 			aStr.ToLowerAscii();
726*b1cdbd2cSJim Jagielski 
727*b1cdbd2cSJim Jagielski 			if ( ( aStr.Search( "rect" ) != STRING_NOTFOUND ) ||
728*b1cdbd2cSJim Jagielski 				 ( aStr.Search( "circ" ) != STRING_NOTFOUND ) ||
729*b1cdbd2cSJim Jagielski 				 ( aStr.Search( "poly" ) != STRING_NOTFOUND ) )
730*b1cdbd2cSJim Jagielski 			{
731*b1cdbd2cSJim Jagielski 				if ( ( aStr.Search( '(' ) != STRING_NOTFOUND ) &&
732*b1cdbd2cSJim Jagielski 					 ( aStr.Search( ')' ) != STRING_NOTFOUND ) )
733*b1cdbd2cSJim Jagielski 				{
734*b1cdbd2cSJim Jagielski 					nRet = IMAP_FORMAT_CERN;
735*b1cdbd2cSJim Jagielski 				}
736*b1cdbd2cSJim Jagielski 				else
737*b1cdbd2cSJim Jagielski 					nRet = IMAP_FORMAT_NCSA;
738*b1cdbd2cSJim Jagielski 
739*b1cdbd2cSJim Jagielski 				break;
740*b1cdbd2cSJim Jagielski 			}
741*b1cdbd2cSJim Jagielski 		}
742*b1cdbd2cSJim Jagielski 	}
743*b1cdbd2cSJim Jagielski 
744*b1cdbd2cSJim Jagielski 	rIStm.Seek( nPos );
745*b1cdbd2cSJim Jagielski 
746*b1cdbd2cSJim Jagielski 	return nRet;
747*b1cdbd2cSJim Jagielski }
748