bump product version to 6.1.0.2
[LibreOffice.git] / lotuswordpro / source / filter / lwpdocdata.cxx
blob55d43f0e016b91e30e0cf4d61c5addaff602abfe
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*************************************************************************
4 * The Contents of this file are made available subject to the terms of
5 * either of the following licenses
7 * - GNU Lesser General Public License Version 2.1
8 * - Sun Industry Standards Source License Version 1.1
10 * Sun Microsystems Inc., October, 2000
12 * GNU Lesser General Public License Version 2.1
13 * =============================================
14 * Copyright 2000 by Sun Microsystems, Inc.
15 * 901 San Antonio Road, Palo Alto, CA 94303, USA
17 * This library is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU Lesser General Public
19 * License version 2.1, as published by the Free Software Foundation.
21 * This library is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 * Lesser General Public License for more details.
26 * You should have received a copy of the GNU Lesser General Public
27 * License along with this library; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
29 * MA 02111-1307 USA
32 * Sun Industry Standards Source License Version 1.1
33 * =================================================
34 * The contents of this file are subject to the Sun Industry Standards
35 * Source License Version 1.1 (the "License"); You may not use this file
36 * except in compliance with the License. You may obtain a copy of the
37 * License at http://www.openoffice.org/license.html.
39 * Software provided under this License is provided on an "AS IS" basis,
40 * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
41 * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
42 * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
43 * See the License for the specific provisions governing your rights and
44 * obligations concerning the Software.
46 * The Initial Developer of the Original Code is: IBM Corporation
48 * Copyright: 2008 by IBM Corporation
50 * All Rights Reserved.
52 * Contributor(s): _______________________________________
55 ************************************************************************/
56 #include <memory>
57 #include <lwpdocdata.hxx>
58 #include <xfilter/xfofficemeta.hxx>
59 #include <localtime.hxx>
60 #include <rtl/ustrbuf.hxx>
61 #include <lwpfilehdr.hxx>
62 #include <lwpglobalmgr.hxx>
64 LwpDocData::LwpDocData(LwpObjectHeader const &objHdr, LwpSvStream* pStrm)
65 :LwpObject(objHdr, pStrm)//m_pEditorAttrList(0)
68 LwpDocData::~LwpDocData()
72 void LwpDocData::Read()
74 //XFDateTime
76 //doc options
77 //cOptionFlag
78 m_DocOptions.nOptionFlag = m_pObjStrm->QuickReaduInt16();
79 //cEncrypt1Password
80 m_DocOptions.encrypt1password.Read(m_pObjStrm.get());
81 //cEncrypt2Password
82 m_DocOptions.encrypt2password.Read(m_pObjStrm.get());
83 //cCharecterSet
84 m_DocOptions.characterSet.Read(m_pObjStrm.get());
85 //cGrammerSet
86 m_DocOptions.grammerSet.Read(m_pObjStrm.get());
87 //cShowMarginMarks
88 m_DocOptions.nMarginMarks = m_pObjStrm->QuickReaduInt16();
89 //cMarginMarksLocation
90 m_DocOptions.nMarginMarksLocation = m_pObjStrm->QuickReaduInt16();
91 //cMarginMarksChar
92 m_DocOptions.nMarginMarksChar = m_pObjStrm->QuickReaduInt16();
93 m_pObjStrm->SkipExtra();
95 //doc info
96 //cDescription
97 m_DocInfo.description.Read(m_pObjStrm.get());
98 //cKeyWord
99 m_DocInfo.keywords.Read(m_pObjStrm.get());
100 //cCreatedBy
101 m_DocInfo.createdBy.Read(m_pObjStrm.get());
102 //cCreationTime
103 m_DocInfo.nCreationTime = m_pObjStrm->QuickReadInt32();
104 LtgLocalTime(m_DocInfo.nCreationTime,m_nCreationTime);
105 //cLastRevisionTime
106 m_DocInfo.nLastRevisionTime = m_pObjStrm->QuickReadInt32();
107 LtgLocalTime(m_DocInfo.nLastRevisionTime,m_nLastRevisionTime);
108 //cTotalEditTime
109 m_DocInfo.nTotalEditTime = m_pObjStrm->QuickReadInt32();
111 m_nTotalEditTime.tm_hour = m_DocInfo.nTotalEditTime / 60;
112 m_nTotalEditTime.tm_min = m_DocInfo.nTotalEditTime % 60;
113 m_nTotalEditTime.tm_sec = 0;
114 //cpVerDocInfo
115 m_DocInfo.cpVerDocInfo.ReadIndexed(m_pObjStrm.get());
117 //EditorList
118 m_DocInfo.nNumEditedBy = m_pObjStrm->QuickReaduInt16();
119 LwpAtomHolder* pCDLNList = new LwpAtomHolder[m_DocInfo.nNumEditedBy];
120 LwpAtomHolder* pEditorList = new LwpAtomHolder[m_DocInfo.nNumEditedBy];
121 sal_uInt16 i = 0;
122 for ( i = 0; i < m_DocInfo.nNumEditedBy; i++)
124 //CDLNList
125 pCDLNList[i].Read(m_pObjStrm.get()); //cName
126 m_pObjStrm->SkipExtra();
127 //CEditedBy
128 pEditorList[i].Read(m_pObjStrm.get()); //cName
129 m_pObjStrm->SkipExtra();
132 m_pObjStrm->SkipExtra();
134 delete [] pCDLNList;
135 delete [] pEditorList;
137 //doc control
138 //cGreeting
139 m_DocControl.cGreeting.Read(m_pObjStrm.get());
140 //cFlags
141 m_DocControl.nFlags = m_pObjStrm->QuickReaduInt16();
143 //cDocControlProtection
144 m_DocControl.nDocControlProtection = m_pObjStrm->QuickReaduInt16();
145 //Len
146 m_DocControl.nLen1 = m_pObjStrm->QuickReaduInt16();
147 //skip doc control password string
148 m_pObjStrm->SeekRel(m_DocControl.nLen1);
150 //cFileProtection
151 m_DocControl.nFileProtection = m_pObjStrm->QuickReaduInt16();
152 //Len
153 m_DocControl.nLen2 = m_pObjStrm->QuickReaduInt16();
154 //skip file password string
155 m_pObjStrm->SeekRel(m_DocControl.nLen2);
157 //cAutoVersioning
158 m_DocControl.nAutoVersioning = m_pObjStrm->QuickReaduInt16();
159 //cDocControlOnlyEditor
160 m_DocControl.cDocControlOnlyEditor.Read(m_pObjStrm.get());
161 //cEditorVerification
162 m_DocControl.nEditorVerification = m_pObjStrm->QuickReaduInt16();
164 m_pObjStrm->SkipExtra();
166 //editor list
167 //numeditors
168 sal_uInt16 numeditors = m_pObjStrm->QuickReaduInt16();
169 LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance();
171 for (i = 0;i<numeditors;i++)
173 std::unique_ptr<LwpEditorAttr> xEditorAttr(new LwpEditorAttr);
174 //cName
175 xEditorAttr->cName.Read(m_pObjStrm.get());
176 //cInitials
177 xEditorAttr->cInitials.Read(m_pObjStrm.get());
178 //cHiLite
179 xEditorAttr->cHiLiteColor.Read(m_pObjStrm.get());
181 //cID
182 xEditorAttr->nID = m_pObjStrm->QuickReaduInt16();
184 //cInsFontOver
185 //CFontAttributeOverride --cAttrBits
186 xEditorAttr->cInsFontOver.cFontAttributeOverride.cAttrBits = m_pObjStrm->QuickReaduInt16();
187 //CFontAttributeOverride --cAttrOverrideBits
188 xEditorAttr->cInsFontOver.cFontAttributeOverride.cAttrOverrideBits = m_pObjStrm->QuickReaduInt16();
189 //CFontAttributeOverride --cAttrApplyBits
190 xEditorAttr->cInsFontOver.cFontAttributeOverride.cAttrApplyBits = m_pObjStrm->QuickReaduInt16();
191 //CFontAttributeOverride --cAttrOverrideBits2
192 xEditorAttr->cInsFontOver.cFontAttributeOverride.cAttrOverrideBits2 = m_pObjStrm->QuickReaduInt8();
193 //CFontAttributeOverride --cAttrApplyBits2
194 xEditorAttr->cInsFontOver.cFontAttributeOverride.cAttrApplyBits2 = m_pObjStrm->QuickReaduInt8();
195 //CFontAttributeOverride --cCase
196 xEditorAttr->cInsFontOver.cFontAttributeOverride.cCase = m_pObjStrm->QuickReaduInt8();
197 //CFontAttributeOverride --cUnder
198 xEditorAttr->cInsFontOver.cFontAttributeOverride.cUnder = m_pObjStrm->QuickReaduInt8();
199 m_pObjStrm->SkipExtra();
200 //CFontDescriptionOverrideBase--cOverrideBits
201 xEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cOverrideBits = m_pObjStrm->QuickReaduInt8();
202 //CFontDescriptionOverrideBase--cApplyBits
203 xEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cApplyBits = m_pObjStrm->QuickReaduInt8();
204 //CFontDescriptionOverrideBase--cPointSize
205 xEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cPointSize = m_pObjStrm->QuickReadInt32();
206 //CFontDescriptionOverrideBase--cOverstrike
207 xEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cOverstrike = m_pObjStrm->QuickReaduInt8();
208 //CFontDescriptionOverrideBase--cTightness
209 xEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cTightness = m_pObjStrm->QuickReaduInt16();
210 //CFontDescriptionOverrideBase--cColor
211 xEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cColor.Read(m_pObjStrm.get());
213 //CFontDescriptionOverrideBase--cBackgroundColor
214 xEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cBackgroundColor.Read(m_pObjStrm.get());
216 m_pObjStrm->SkipExtra();
217 //cFaceName
218 xEditorAttr->cInsFontOver.cFaceName.Read(m_pObjStrm.get());
219 //cAltFaceName
220 xEditorAttr->cInsFontOver.cAltFaceName.Read(m_pObjStrm.get());
221 m_pObjStrm->SkipExtra();
223 //cDelFontOver
224 //CFontAttributeOverride --cAttrBits
225 xEditorAttr->cDelFontOver.cFontAttributeOverride.cAttrBits = m_pObjStrm->QuickReaduInt16();
226 //CFontAttributeOverride --cAttrOverrideBits
227 xEditorAttr->cDelFontOver.cFontAttributeOverride.cAttrOverrideBits = m_pObjStrm->QuickReaduInt16();
228 //CFontAttributeOverride --cAttrApplyBits
229 xEditorAttr->cDelFontOver.cFontAttributeOverride.cAttrApplyBits = m_pObjStrm->QuickReaduInt16();
230 //CFontAttributeOverride --cAttrOverrideBits2
231 xEditorAttr->cDelFontOver.cFontAttributeOverride.cAttrOverrideBits2 = m_pObjStrm->QuickReaduInt8();
232 //CFontAttributeOverride --cAttrApplyBits2
233 xEditorAttr->cDelFontOver.cFontAttributeOverride.cAttrApplyBits2 = m_pObjStrm->QuickReaduInt8();
234 //CFontAttributeOverride --cCase
235 xEditorAttr->cDelFontOver.cFontAttributeOverride.cCase = m_pObjStrm->QuickReaduInt8();
236 //CFontAttributeOverride --cUnder
237 xEditorAttr->cDelFontOver.cFontAttributeOverride.cUnder = m_pObjStrm->QuickReaduInt8();
238 m_pObjStrm->SkipExtra();
239 //CFontDescriptionOverrideBase--cOverrideBits
240 xEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cOverrideBits = m_pObjStrm->QuickReaduInt8();
241 //CFontDescriptionOverrideBase--cApplyBits
242 xEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cApplyBits = m_pObjStrm->QuickReaduInt8();
243 //CFontDescriptionOverrideBase--cPointSize
244 xEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cPointSize = m_pObjStrm->QuickReadInt32();
245 //CFontDescriptionOverrideBase--cOverstrike
246 xEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cOverstrike = m_pObjStrm->QuickReaduInt8();
247 //CFontDescriptionOverrideBase--cTightness
248 xEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cTightness = m_pObjStrm->QuickReaduInt16();
249 //CFontDescriptionOverrideBase--cColor
250 xEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cColor.Read(m_pObjStrm.get());
252 //CFontDescriptionOverrideBase--cBackgroundColor
253 xEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cBackgroundColor.Read(m_pObjStrm.get());
255 m_pObjStrm->SkipExtra();
256 //cFaceName
257 xEditorAttr->cDelFontOver.cFaceName.Read(m_pObjStrm.get());
258 //cAltFaceName
259 xEditorAttr->cDelFontOver.cAltFaceName.Read(m_pObjStrm.get());
260 m_pObjStrm->SkipExtra();
262 //cAbilities
263 xEditorAttr->nAbilities = m_pObjStrm->QuickReaduInt16();
264 //cLocks
265 xEditorAttr->nLocks = m_pObjStrm->QuickReaduInt16();
266 //cSuggestions
267 xEditorAttr->nSuggestions = m_pObjStrm->QuickReaduInt16();
269 //cDelTextAttr
270 //m_pEditorAttrList[i].cDelTextAttr.Read(m_pObjStrm);
271 if (m_pObjStrm->QuickReadBool())
273 xEditorAttr->cDelTextAttr.cOverride.cValues = m_pObjStrm->QuickReaduInt16();
274 xEditorAttr->cDelTextAttr.cOverride.cOverride = m_pObjStrm->QuickReaduInt16();
275 xEditorAttr->cDelTextAttr.cOverride.cApply = m_pObjStrm->QuickReaduInt16();
276 m_pObjStrm->SkipExtra();
277 xEditorAttr->cDelTextAttr.cHideLevels = m_pObjStrm->QuickReaduInt16();
279 if (LwpFileHeader::m_nFileRevision>= 0x000b)
281 xEditorAttr->cDelTextAttr.cBaselineOffset = m_pObjStrm->QuickReadInt32();
283 else
285 xEditorAttr->cDelTextAttr.cBaselineOffset = 0;
288 m_pObjStrm->SkipExtra();
290 m_pObjStrm->SkipExtra();
292 sal_uInt16 nID = xEditorAttr->nID;
293 pGlobal->SetEditorAttrMap(nID, xEditorAttr.release());
296 OUString LwpDocData::DateTimeToOUString(LtTm const & dt)
298 OUString aResult = OUString::number(dt.tm_year) + "-" + OUString::number(dt.tm_mon) + "-" + OUString::number(dt.tm_mday) +
299 "T" + OUString::number(dt.tm_hour) + ":" + OUString::number(dt.tm_min) + ":" + OUString::number(dt.tm_sec) + ".0";
301 return aResult;
303 OUString LwpDocData::TimeToOUString(LtTm const & dt)
305 //PT3H43M44S
306 OUString aResult = "PT" + OUString::number(dt.tm_hour) + "H" + OUString::number(dt.tm_min) + "M" + OUString::number(dt.tm_sec) + "S";
308 return aResult;
310 void LwpDocData::Parse(IXFStream *pOutputStream)
312 //<!DOCTYPE office:document-meta PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "office.dtd">
313 //<office:document-meta xmlns:office="http://openoffice.org/2000/office" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" office:version="1.0">
314 //</office:document-meta>
315 XFOfficeMeta xfMeta;
316 xfMeta.SetCreator(m_DocInfo.createdBy.str());
317 xfMeta.SetDescription(m_DocInfo.description.str());
318 xfMeta.SetKeywords(m_DocInfo.keywords.str());
319 xfMeta.SetCreationTime(DateTimeToOUString(m_nCreationTime));
320 xfMeta.SetLastTime(DateTimeToOUString(m_nLastRevisionTime));
321 xfMeta.SetEditTime(TimeToOUString(m_nTotalEditTime));
322 xfMeta.ToXml(pOutputStream);
325 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */