Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <stdlib.h>
30 : :
31 : : #include <stdio.h>
32 : : #include "hintids.hxx"
33 : : #include <tools/resid.hxx>
34 : : #include <svl/macitem.hxx>
35 : : #include <svl/zforlist.hxx>
36 : : #include <svl/zformat.hxx>
37 : : #include <svl/urihelper.hxx>
38 : : #include <sfx2/linkmgr.hxx>
39 : :
40 : : #include <editeng/lrspitem.hxx>
41 : : #include <editeng/tstpitem.hxx>
42 : : #include <fmtinfmt.hxx>
43 : : #include <fmtfld.hxx>
44 : : #include <frmatr.hxx>
45 : : #include "doc.hxx"
46 : : #include "docary.hxx"
47 : : #include "fldbas.hxx"
48 : : #include "flddat.hxx"
49 : : #include "docufld.hxx"
50 : : #include "chpfld.hxx"
51 : : #include "ddefld.hxx"
52 : : #include "expfld.hxx"
53 : : #include "reffld.hxx"
54 : : #include "usrfld.hxx"
55 : : #include "dbfld.hxx"
56 : : #include "txtfld.hxx"
57 : : #include "ndtxt.hxx"
58 : :
59 : : //really used ids from old sw3ids.hxx
60 : : #define SWG_INETBROWSER 0x000e // URL-Grf-Nodes, Browse-Flag, Format-Ums.
61 : : #define SWG_NEWFIELDS 0x0200 // Felder mit Numberformatter-Zahlenformat
62 : : #define SWG_EXPORT40 0x0110 // Version fuer 4.0-Export ab 5.0
63 : :
64 : : using namespace nsSwDocInfoSubType;
65 : :
66 : : struct OldFormats
67 : : {
68 : : NfIndexTableOffset eFormatIdx;
69 : : sal_uInt16 nOldFormat;
70 : : };
71 : :
72 : : static OldFormats aOldDateFmt40[] =
73 : : {
74 : : // Datumsfelder:
75 : : { NF_DATE_SYSTEM_SHORT, DFF_SSYS }, // Kurzes Systemdatum
76 : : { NF_DATE_SYSTEM_LONG, DFF_LSYS }, // Langes Systemdatum
77 : : { NF_DATE_SYS_DDMMYY, DFF_DMY }, // 06.10.64
78 : : { NF_DATE_SYS_DDMMYYYY, DFF_DMYY }, // 06.10.1964
79 : : { NF_DATE_SYS_DMMMYY, DFF_DMMY }, // 06. Okt 64
80 : : { NF_DATE_SYS_DMMMYYYY, DFF_DMMYY }, // 06. Okt 1964
81 : : { NF_DATE_DIN_DMMMMYYYY, DFF_DMMMYY }, // 06. Oktober 1964
82 : : { NF_DATE_DIN_DMMMMYYYY, DFF_DMMMY }, // 06. Oktober 64
83 : : { NF_DATE_SYS_NNDMMMYY, DFF_DDMMY }, // Di, 06. Okt 64
84 : : { NF_DATE_SYS_NNDMMMMYYYY, DFF_DDMMMY }, // Di, 06. Oktober 64
85 : : { NF_DATE_SYS_NNDMMMMYYYY, DFF_DDMMMYY }, // Di, 06. Oktober 1964
86 : : { NF_DATE_SYS_NNNNDMMMMYYYY, DFF_DDDMMMYY }, // Dienstag, 06. Oktober 1964
87 : : { NF_DATE_SYS_NNNNDMMMMYYYY, DFF_DDDMMMY }, // Dienstag, 06. Oktober 64
88 : : { NF_DATE_SYS_MMYY, DFF_MY }, // 10.64
89 : : { NF_DATE_DIN_MMDD, DFF_MD }, // 10-06
90 : : { NF_DATE_DIN_YYMMDD, DFF_YMD }, // 64-10-06
91 : : { NF_DATE_DIN_YYYYMMDD, DFF_YYMD }, // 1964-10-06
92 : :
93 : : { NF_NUMERIC_START, 0 } // Tabellenende
94 : : };
95 : :
96 : : static OldFormats aOldDateFmt30[] =
97 : : {
98 : : // Datumsfelder:
99 : : { NF_DATE_SYSTEM_SHORT, DFF_SSYS }, // Kurzes Systemdatum
100 : : { NF_DATE_SYSTEM_LONG, DFF_LSYS }, // Langes Systemdatum
101 : : { NF_DATE_SYS_DDMMYY, DFF_DMY }, // 06.10.64
102 : : { NF_DATE_SYS_DDMMYYYY, DFF_DMYY }, // 06.10.1964
103 : : { NF_DATE_SYS_DMMMYY, DFF_DMMY }, // 06. Okt 64
104 : : { NF_DATE_SYS_DMMMYYYY, 4 /*DFF_DMMYY*/ }, // 06. Okt 1964
105 : : { NF_DATE_DIN_DMMMMYYYY, 5 /*DFF_DMMMYY*/ }, // 06. Oktober 1964
106 : : { NF_DATE_DIN_DMMMMYYYY, 5 /*DFF_DMMMY*/ }, // 06. Oktober 64
107 : : { NF_DATE_SYS_NNDMMMMYYYY, 6 /*DFF_DDMMMYY*/ }, // Di, 06. Oktober 1964
108 : : { NF_DATE_SYS_NNDMMMYY, 6 /*DFF_DDMMY*/ }, // Di, 06. Okt 64
109 : : { NF_DATE_SYS_NNDMMMMYYYY, 6 /*DFF_DDMMMY*/ }, // Di, 06. Oktober 64
110 : : { NF_DATE_SYS_NNNNDMMMMYYYY, 7 /*DFF_DDDMMMYY*/ }, // Dienstag, 06. Oktober 1964
111 : : { NF_DATE_SYS_NNNNDMMMMYYYY, 7 /*DFF_DDDMMMY*/ }, // Dienstag, 06. Oktober 64
112 : : { NF_DATE_SYS_MMYY, 2 /*DFF_MY*/ }, // 10.64
113 : : { NF_DATE_DIN_MMDD, DFF_MD }, // 10-06
114 : : { NF_DATE_DIN_YYMMDD, DFF_YMD }, // 64-10-06
115 : : { NF_DATE_DIN_YYYYMMDD, DFF_YYMD }, // 1964-10-06
116 : :
117 : : { NF_NUMERIC_START, 0 } // Tabellenende
118 : : };
119 : :
120 : : static OldFormats aOldTimeFmt[] =
121 : : {
122 : : // Zeitfelder:
123 : : { NF_TIME_HHMMSS, TF_SYSTEM }, // Systemzeit
124 : : { NF_TIME_HHMM, TF_SSMM_24 }, // 23:25
125 : : { NF_TIME_HHMMAMPM, TF_SSMM_12 }, // 11:25 PM
126 : :
127 : : { NF_NUMERIC_START, 0 } // Tabellenende
128 : : };
129 : :
130 : : static OldFormats aOldGetSetExpFmt40[] =
131 : : {
132 : : { NF_TEXT, VVF_CMD }, // Kommando anzeigen
133 : : { NF_TEXT, VVF_INVISIBLE }, // unsichtbar
134 : : { NF_PERCENT_INT, VVF_XXP }, // 1234%
135 : : { NF_PERCENT_DEC2, VVF_XX_XXP }, // 1.234,56%
136 : : { NF_TEXT, VVF_CLEAR }, // ???
137 : :
138 : : { NF_NUMBER_SYSTEM, VVF_SYS }, // Zahlenformat aus der
139 : : // Systemeinstellung
140 : : { NF_NUMBER_INT, VVF_X }, // 1234
141 : : { NF_NUMBER_DEC2, VVF_X_X }, // 1234,5
142 : : { NF_NUMBER_DEC2, VVF_X_XX }, // 1245,56
143 : : { NF_NUMBER_1000DEC2, VVF_XX_XX }, // 1.234,56
144 : : { NF_NUMBER_1000DEC2, VVF_XX_X }, // 1.234,5
145 : : { NF_NUMBER_1000DEC2, VVF_XX_XXX }, // 1.234,567
146 : : { NF_CURRENCY_1000DEC2, VVF_SYS_CUR }, // W?hrungsformat aus der
147 : : // Systemeinstellung
148 : : // (1.234,00 DM)
149 : : { NF_CURRENCY_1000INT, VVF_X_CUR }, // 1234 DM
150 : : { NF_CURRENCY_1000DEC2, VVF_XX_XX_CUR }, // 1234,56 DM 1234,00 DM
151 : : { NF_CURRENCY_1000DEC2_DASHED, VVF_XX_X0_CUR }, // 1234,56 DM 1234,-- DM
152 : : { NF_CURRENCY_1000INT, VVF_CUR_X }, // DM 1234
153 : : { NF_CURRENCY_1000DEC2, VVF_CUR_XX_XX }, // DM 1234,56 DM 1234,00
154 : : { NF_CURRENCY_1000DEC2_DASHED, VVF_CUR_XX_X0 }, // DM 1234,56 DM 1234,--
155 : :
156 : : { NF_NUMERIC_START, 0 } // Tabellenende
157 : : };
158 : :
159 : : static OldFormats aOldGetSetExpFmt30[] =
160 : : {
161 : : { NF_TEXT, VVF_CMD }, // Kommando anzeigen
162 : : { NF_TEXT, VVF_INVISIBLE }, // unsichtbar
163 : : { NF_PERCENT_INT, VVF_XXP }, // 1234%
164 : : { NF_PERCENT_DEC2, VVF_XX_XXP }, // 1.234,56%
165 : : { NF_TEXT, VVF_CLEAR }, // ???
166 : :
167 : : { NF_NUMBER_SYSTEM, 0x0020 }, // Zahlenformat aus der
168 : : // Systemeinstellung
169 : : { NF_NUMBER_INT, 0x0080 }, // 1234
170 : : { NF_NUMBER_1000DEC2, 0x0100 }, // 1.234,56
171 : : { NF_NUMBER_DEC2, 0x0100 }, // 1234,5
172 : : { NF_NUMBER_DEC2, 0x0100 }, // 1245,56
173 : : { NF_NUMBER_1000DEC2, 0x0100 }, // 1.234,5
174 : : { NF_NUMBER_1000DEC2, 0x0100 }, // 1.234,567
175 : : { NF_CURRENCY_1000DEC2, 0x0200 }, // W?hrungsformat aus der
176 : : // Systemeinstellung
177 : : // (1.234,00 DM)
178 : : { NF_CURRENCY_1000INT, 0x1000 }, // 1234 DM
179 : : { NF_CURRENCY_1000DEC2, 0x1000 }, // 1234,56 DM 1234,00 DM
180 : : { NF_CURRENCY_1000DEC2_DASHED, 0x1000 }, // 1234,56 DM 1234,-- DM
181 : : { NF_CURRENCY_1000INT, 0x1000 }, // DM 1234
182 : : { NF_CURRENCY_1000DEC2, 0x1000 }, // DM 1234,56 DM 1234,00
183 : : { NF_CURRENCY_1000DEC2_DASHED, 0x1000 }, // DM 1234,56 DM 1234,--
184 : :
185 : : { NF_NUMERIC_START, 0 } // Tabellenende
186 : : };
187 : :
188 : 0 : SW_DLLPUBLIC void sw3io_ConvertFromOldField( SwDoc& rDoc, sal_uInt16& rWhich,
189 : : sal_uInt16& rSubType, sal_uLong &rFmt,
190 : : sal_uInt16 nVersion )
191 : : {
192 : 0 : const OldFormats *pOldFmt = 0L;
193 : :
194 [ # # # # : 0 : switch( rWhich )
# # ]
195 : : {
196 : : case RES_DATEFLD:
197 : : case RES_FIXDATEFLD:
198 [ # # ]: 0 : if( nVersion < SWG_NEWFIELDS )
199 : : {
200 : 0 : rSubType = DATEFLD;
201 [ # # ]: 0 : if( RES_FIXDATEFLD == rWhich )
202 : 0 : rSubType |= FIXEDFLD;
203 : 0 : rWhich = RES_DATETIMEFLD;
204 : : pOldFmt = nVersion<SWG_INETBROWSER ? aOldDateFmt30
205 [ # # ]: 0 : : aOldDateFmt40;
206 : : }
207 : 0 : break;
208 : :
209 : : case RES_TIMEFLD:
210 : : case RES_FIXTIMEFLD:
211 [ # # ]: 0 : if( nVersion < SWG_NEWFIELDS )
212 : : {
213 : 0 : rSubType = TIMEFLD;
214 [ # # ]: 0 : if( RES_FIXTIMEFLD == rWhich )
215 : 0 : rSubType |= FIXEDFLD;
216 : 0 : rWhich = RES_DATETIMEFLD;
217 : 0 : pOldFmt = aOldTimeFmt;
218 : : }
219 : 0 : break;
220 : :
221 : : case RES_DBFLD:
222 [ # # ]: 0 : if( nVersion < SWG_NEWFIELDS )
223 : : {
224 : 0 : rSubType = nsSwExtendedSubType::SUB_OWN_FMT;
225 : : pOldFmt = nVersion<SWG_INETBROWSER ? aOldGetSetExpFmt30
226 [ # # ]: 0 : : aOldGetSetExpFmt40;
227 : : }
228 : 0 : break;
229 : :
230 : : case RES_TABLEFLD:
231 : : case RES_GETEXPFLD:
232 : : case RES_SETEXPFLD:
233 : : case RES_USERFLD:
234 [ # # ]: 0 : if( nVersion < SWG_NEWFIELDS )
235 : : {
236 [ # # ]: 0 : if( rFmt == VVF_INVISIBLE )
237 : : {
238 : 0 : rSubType = nsSwExtendedSubType::SUB_INVISIBLE;
239 : 0 : rFmt = 0;
240 : : }
241 [ # # ]: 0 : else if( rFmt == VVF_CMD )
242 : : {
243 : 0 : rSubType = nsSwExtendedSubType::SUB_CMD;
244 : 0 : rFmt = 0;
245 : : }
246 : : else
247 : : {
248 : : // Kleiner Hack: Bei Numernkreisen wird das
249 : : // unkonvertierte Format noch benoetigt. Wir merken es
250 : : // uns voruebergehend mal im Subtyp, sofern es
251 : : // ueberhaupt als entsprechendes Format in Frage kommt.
252 [ # # ][ # # ]: 0 : if( RES_SETEXPFLD==rWhich &&
253 : : /*rFmt >= (sal_uInt16)SVX_NUM_CHARS_UPPER_LETTER && always true*/
254 : : rFmt <= (sal_uInt16)SVX_NUM_BITMAP )
255 : : {
256 : 0 : rSubType = (sal_uInt16)rFmt;
257 : : }
258 : : pOldFmt = nVersion<SWG_INETBROWSER ? aOldGetSetExpFmt30
259 [ # # ]: 0 : : aOldGetSetExpFmt40;
260 : : }
261 : : }
262 : 0 : break;
263 : : case RES_DOCINFOFLD:
264 [ # # ]: 0 : if( nVersion < SWG_NEWFIELDS )
265 : : {
266 [ # # # # : 0 : switch( rFmt )
# ]
267 : : {
268 : 0 : case RF_AUTHOR: rSubType = DI_SUB_AUTHOR; break;
269 : 0 : case RF_TIME: rSubType = DI_SUB_TIME; break;
270 : 0 : case RF_DATE: rSubType = DI_SUB_DATE; break;
271 : 0 : case RF_ALL: rSubType = DI_SUB_DATE; break;
272 : : }
273 : 0 : rFmt = 0;
274 : : }
275 : 0 : break;
276 : : }
277 : :
278 [ # # ]: 0 : if( pOldFmt )
279 : : {
280 : 0 : SvNumberFormatter *pFormatter = rDoc.GetNumberFormatter();
281 : 0 : sal_uInt16 i = 0;
282 : :
283 [ # # ][ # # ]: 0 : while( pOldFmt[i].eFormatIdx != NF_NUMERIC_START ||
[ # # ]
284 : 0 : pOldFmt[i].nOldFormat)
285 : : {
286 [ # # ]: 0 : if( rFmt == pOldFmt[i].nOldFormat )
287 : : {
288 : 0 : rFmt = pFormatter->GetFormatIndex(pOldFmt[i].eFormatIdx, LANGUAGE_SYSTEM);
289 : 0 : break;
290 : : }
291 : 0 : i++;
292 : : }
293 : : }
294 : 0 : }
295 : :
296 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|