nss: upgrade to release 3.73
[LibreOffice.git] / filter / source / graphicfilter / idxf / dxftblrd.cxx
blob7820b04f4343700f8c37d57406847b255f83171c
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
21 #include "dxftblrd.hxx"
23 //----------------------------------DXFLType-----------------------------------
25 DXFLType::DXFLType()
26 : pSucc(nullptr)
27 , nFlags(0)
28 , nDashCount(0)
29 , fPatternLength(0.0)
33 void DXFLType::Read(DXFGroupReader & rDGR)
35 tools::Long nDashIndex=-1;
37 while (rDGR.Read()!=0)
39 switch (rDGR.GetG())
41 case 2:
42 m_sName = rDGR.GetS();
43 break;
44 case 3:
45 m_sDescription = rDGR.GetS();
46 break;
47 case 70:
48 nFlags=rDGR.GetI();
49 break;
50 case 73:
51 if (nDashIndex!=-1)
53 rDGR.SetError();
54 return;
56 nDashCount=rDGR.GetI();
57 if (nDashCount>DXF_MAX_DASH_COUNT)
59 nDashCount=DXF_MAX_DASH_COUNT;
61 nDashIndex=0;
62 break;
63 case 40: fPatternLength=rDGR.GetF(); break;
64 case 49:
65 if (nDashCount==-1)
67 rDGR.SetError();
68 return;
70 if (nDashIndex < nDashCount)
72 if (nDashIndex < 0)
74 rDGR.SetError();
75 return;
77 fDash[nDashIndex++] = rDGR.GetF();
79 break;
84 //----------------------------------DXFLayer-----------------------------------
86 DXFLayer::DXFLayer()
88 pSucc=nullptr;
89 nFlags=0;
90 nColor=-1;
93 void DXFLayer::Read(DXFGroupReader & rDGR)
95 while (rDGR.Read()!=0)
97 switch(rDGR.GetG())
99 case 2:
100 m_sName = rDGR.GetS();
101 break;
102 case 6:
103 m_sLineType = rDGR.GetS();
104 break;
105 case 70:
106 nFlags=rDGR.GetI();
107 break;
108 case 62:
109 nColor=rDGR.GetI();
110 break;
115 //----------------------------------DXFStyle-----------------------------------
117 DXFStyle::DXFStyle()
119 pSucc=nullptr;
120 nFlags=0;
121 fHeight=0.0;
122 fWidthFak=1.0;
123 fOblAngle=0.0;
124 nTextGenFlags=0;
125 fLastHeightUsed=0.0;
128 void DXFStyle::Read(DXFGroupReader & rDGR)
130 while (rDGR.Read()!=0)
132 switch(rDGR.GetG())
134 case 2:
135 m_sName = rDGR.GetS();
136 break;
137 case 3:
138 m_sPrimFontFile = rDGR.GetS();
139 break;
140 case 4:
141 m_sBigFontFile = rDGR.GetS();
142 break;
143 case 70:
144 nFlags=rDGR.GetI();
145 break;
146 case 40:
147 fHeight=rDGR.GetF();
148 break;
149 case 41:
150 fWidthFak=rDGR.GetF();
151 break;
152 case 42:
153 fLastHeightUsed=rDGR.GetF();
154 break;
155 case 50:
156 fOblAngle=rDGR.GetF();
157 break;
158 case 71:
159 nTextGenFlags=rDGR.GetI();
160 break;
165 //----------------------------------DXFVPort-----------------------------------
167 DXFVPort::DXFVPort()
168 : pSucc(nullptr)
169 , nFlags(0)
170 , fMinX(0.0)
171 , fMinY(0.0)
172 , fMaxX(0.0)
173 , fMaxY(0.0)
174 , fCenterX(0.0)
175 , fCenterY(0.0)
176 , fSnapBaseX(0.0)
177 , fSnapBaseY(0.0)
178 , fSnapSpacingX(0.0)
179 , fSnapSpacingY(0.0)
180 , fGridX(0.0)
181 , fGridY(0.0)
182 , aDirection(DXFVector(0.0, 0.0, 1.0))
183 , fHeight(0.0)
184 , fAspectRatio(0.0)
185 , fLensLength(0.0)
186 , fFrontClipPlane(0.0)
187 , fBackClipPlane(0.0)
188 , fTwistAngle(0.0)
189 , nStatus(0)
190 , nID(0)
191 , nMode(0)
192 , nCircleZoomPercent(0)
193 , nFastZoom(0)
194 , nUCSICON(0)
195 , nSnap(0)
196 , nGrid(0)
197 , nSnapStyle(0)
198 , nSnapIsopair(0)
202 void DXFVPort::Read(DXFGroupReader & rDGR)
204 while (rDGR.Read()!=0)
206 switch(rDGR.GetG())
208 case 2:
209 m_sName = rDGR.GetS();
210 break;
211 case 10: fMinX=rDGR.GetF(); break;
212 case 11: fMaxX=rDGR.GetF(); break;
213 case 12: fCenterX=rDGR.GetF(); break;
214 case 13: fSnapBaseX=rDGR.GetF(); break;
215 case 14: fSnapSpacingX=rDGR.GetF(); break;
216 case 15: fGridX=rDGR.GetF(); break;
217 case 16: aDirection.fx=rDGR.GetF(); break;
218 case 17: aTarget.fx=rDGR.GetF(); break;
219 case 20: fMinY=rDGR.GetF(); break;
220 case 21: fMaxY=rDGR.GetF(); break;
221 case 22: fCenterY=rDGR.GetF(); break;
222 case 23: fSnapBaseY=rDGR.GetF(); break;
223 case 24: fSnapSpacingY=rDGR.GetF(); break;
224 case 25: fGridY=rDGR.GetF(); break;
225 case 26: aDirection.fy=rDGR.GetF(); break;
226 case 27: aTarget.fy=rDGR.GetF(); break;
227 case 36: aDirection.fz=rDGR.GetF(); break;
228 case 37: aTarget.fz=rDGR.GetF(); break;
229 case 40: fHeight=rDGR.GetF(); break;
230 case 41: fAspectRatio=rDGR.GetF(); break;
231 case 42: fLensLength=rDGR.GetF(); break;
232 case 43: fFrontClipPlane=rDGR.GetF(); break;
233 case 44: fBackClipPlane=rDGR.GetF(); break;
234 case 51: fTwistAngle=rDGR.GetF(); break;
235 case 68: nStatus=rDGR.GetI(); break;
236 case 69: nID=rDGR.GetI(); break;
237 case 70: nFlags=rDGR.GetI(); break;
238 case 71: nMode=rDGR.GetI(); break;
239 case 72: nCircleZoomPercent=rDGR.GetI(); break;
240 case 73: nFastZoom=rDGR.GetI(); break;
241 case 74: nUCSICON=rDGR.GetI(); break;
242 case 75: nSnap=rDGR.GetI(); break;
243 case 76: nGrid=rDGR.GetI(); break;
244 case 77: nSnapStyle=rDGR.GetI(); break;
245 case 78: nSnapIsopair=rDGR.GetI(); break;
250 //----------------------------------DXFTables----------------------------------
253 DXFTables::DXFTables()
255 pLTypes=nullptr;
256 pLayers=nullptr;
257 pStyles=nullptr;
258 pVPorts=nullptr;
262 DXFTables::~DXFTables()
264 Clear();
268 void DXFTables::Read(DXFGroupReader & rDGR)
270 DXFLType * * ppLT, * pLT;
271 DXFLayer * * ppLa, * pLa;
272 DXFStyle * * ppSt, * pSt;
273 DXFVPort * * ppVP, * pVP;
275 ppLT=&pLTypes;
276 while(*ppLT!=nullptr) ppLT=&((*ppLT)->pSucc);
278 ppLa=&pLayers;
279 while(*ppLa!=nullptr) ppLa=&((*ppLa)->pSucc);
281 ppSt=&pStyles;
282 while(*ppSt!=nullptr) ppSt=&((*ppSt)->pSucc);
284 ppVP=&pVPorts;
285 while(*ppVP!=nullptr) ppVP=&((*ppVP)->pSucc);
287 for (;;) {
288 while (rDGR.GetG()!=0) rDGR.Read();
289 if (rDGR.GetS() == "EOF" ||
290 rDGR.GetS() == "ENDSEC") break;
291 else if (rDGR.GetS() == "LTYPE") {
292 pLT=new DXFLType;
293 pLT->Read(rDGR);
294 *ppLT=pLT;
295 ppLT=&(pLT->pSucc);
297 else if (rDGR.GetS() == "LAYER") {
298 pLa=new DXFLayer;
299 pLa->Read(rDGR);
300 *ppLa=pLa;
301 ppLa=&(pLa->pSucc);
303 else if (rDGR.GetS() == "STYLE") {
304 pSt=new DXFStyle;
305 pSt->Read(rDGR);
306 *ppSt=pSt;
307 ppSt=&(pSt->pSucc);
309 else if (rDGR.GetS() == "VPORT") {
310 pVP=new DXFVPort;
311 pVP->Read(rDGR);
312 *ppVP=pVP;
313 ppVP=&(pVP->pSucc);
315 else rDGR.Read();
320 void DXFTables::Clear()
322 DXFLType * pLT;
323 DXFLayer * pLa;
324 DXFStyle * pSt;
325 DXFVPort * pVP;
327 while (pStyles!=nullptr) {
328 pSt=pStyles;
329 pStyles=pSt->pSucc;
330 delete pSt;
332 while (pLayers!=nullptr) {
333 pLa=pLayers;
334 pLayers=pLa->pSucc;
335 delete pLa;
337 while (pLTypes!=nullptr) {
338 pLT=pLTypes;
339 pLTypes=pLT->pSucc;
340 delete pLT;
342 while (pVPorts!=nullptr) {
343 pVP=pVPorts;
344 pVPorts=pVP->pSucc;
345 delete pVP;
350 DXFLType * DXFTables::SearchLType(OString const& rName) const
352 DXFLType * p;
353 for (p=pLTypes; p!=nullptr; p=p->pSucc) {
354 if (rName == p->m_sName) break;
356 return p;
360 DXFLayer * DXFTables::SearchLayer(OString const& rName) const
362 DXFLayer * p;
363 for (p=pLayers; p!=nullptr; p=p->pSucc) {
364 if (rName == p->m_sName) break;
366 return p;
370 DXFVPort * DXFTables::SearchVPort(OString const& rName) const
372 DXFVPort * p;
373 for (p=pVPorts; p!=nullptr; p=p->pSucc) {
374 if (rName == p->m_sName) break;
376 return p;
380 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */