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,
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 ************************************************************************/
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()
78 m_DocOptions
.nOptionFlag
= m_pObjStrm
->QuickReaduInt16();
80 m_DocOptions
.encrypt1password
.Read(m_pObjStrm
.get());
82 m_DocOptions
.encrypt2password
.Read(m_pObjStrm
.get());
84 m_DocOptions
.characterSet
.Read(m_pObjStrm
.get());
86 m_DocOptions
.grammerSet
.Read(m_pObjStrm
.get());
88 m_DocOptions
.nMarginMarks
= m_pObjStrm
->QuickReaduInt16();
89 //cMarginMarksLocation
90 m_DocOptions
.nMarginMarksLocation
= m_pObjStrm
->QuickReaduInt16();
92 m_DocOptions
.nMarginMarksChar
= m_pObjStrm
->QuickReaduInt16();
93 m_pObjStrm
->SkipExtra();
97 m_DocInfo
.description
.Read(m_pObjStrm
.get());
99 m_DocInfo
.keywords
.Read(m_pObjStrm
.get());
101 m_DocInfo
.createdBy
.Read(m_pObjStrm
.get());
103 m_DocInfo
.nCreationTime
= m_pObjStrm
->QuickReadInt32();
104 LtgLocalTime(m_DocInfo
.nCreationTime
,m_nCreationTime
);
106 m_DocInfo
.nLastRevisionTime
= m_pObjStrm
->QuickReadInt32();
107 LtgLocalTime(m_DocInfo
.nLastRevisionTime
,m_nLastRevisionTime
);
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;
115 m_DocInfo
.cpVerDocInfo
.ReadIndexed(m_pObjStrm
.get());
118 m_DocInfo
.nNumEditedBy
= m_pObjStrm
->QuickReaduInt16();
119 LwpAtomHolder
* pCDLNList
= new LwpAtomHolder
[m_DocInfo
.nNumEditedBy
];
120 LwpAtomHolder
* pEditorList
= new LwpAtomHolder
[m_DocInfo
.nNumEditedBy
];
122 for ( i
= 0; i
< m_DocInfo
.nNumEditedBy
; i
++)
125 pCDLNList
[i
].Read(m_pObjStrm
.get()); //cName
126 m_pObjStrm
->SkipExtra();
128 pEditorList
[i
].Read(m_pObjStrm
.get()); //cName
129 m_pObjStrm
->SkipExtra();
132 m_pObjStrm
->SkipExtra();
135 delete [] pEditorList
;
139 m_DocControl
.cGreeting
.Read(m_pObjStrm
.get());
141 m_DocControl
.nFlags
= m_pObjStrm
->QuickReaduInt16();
143 //cDocControlProtection
144 m_DocControl
.nDocControlProtection
= m_pObjStrm
->QuickReaduInt16();
146 m_DocControl
.nLen1
= m_pObjStrm
->QuickReaduInt16();
147 //skip doc control password string
148 m_pObjStrm
->SeekRel(m_DocControl
.nLen1
);
151 m_DocControl
.nFileProtection
= m_pObjStrm
->QuickReaduInt16();
153 m_DocControl
.nLen2
= m_pObjStrm
->QuickReaduInt16();
154 //skip file password string
155 m_pObjStrm
->SeekRel(m_DocControl
.nLen2
);
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();
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
);
175 xEditorAttr
->cName
.Read(m_pObjStrm
.get());
177 xEditorAttr
->cInitials
.Read(m_pObjStrm
.get());
179 xEditorAttr
->cHiLiteColor
.Read(m_pObjStrm
.get());
182 xEditorAttr
->nID
= m_pObjStrm
->QuickReaduInt16();
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();
218 xEditorAttr
->cInsFontOver
.cFaceName
.Read(m_pObjStrm
.get());
220 xEditorAttr
->cInsFontOver
.cAltFaceName
.Read(m_pObjStrm
.get());
221 m_pObjStrm
->SkipExtra();
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();
257 xEditorAttr
->cDelFontOver
.cFaceName
.Read(m_pObjStrm
.get());
259 xEditorAttr
->cDelFontOver
.cAltFaceName
.Read(m_pObjStrm
.get());
260 m_pObjStrm
->SkipExtra();
263 xEditorAttr
->nAbilities
= m_pObjStrm
->QuickReaduInt16();
265 xEditorAttr
->nLocks
= m_pObjStrm
->QuickReaduInt16();
267 xEditorAttr
->nSuggestions
= m_pObjStrm
->QuickReaduInt16();
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();
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";
303 OUString
LwpDocData::TimeToOUString(LtTm
const & dt
)
306 OUString aResult
= "PT" + OUString::number(dt
.tm_hour
) + "H" + OUString::number(dt
.tm_min
) + "M" + OUString::number(dt
.tm_sec
) + "S";
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>
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: */