xref: /aoo4110/main/sw/source/filter/html/htmlfld.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_sw.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XDocumentProperties.hpp>
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski #include "docsh.hxx"
33*b1cdbd2cSJim Jagielski #include <svtools/htmltokn.h>
34*b1cdbd2cSJim Jagielski #include <svl/zformat.hxx>
35*b1cdbd2cSJim Jagielski #include <unotools/useroptions.hxx>
36*b1cdbd2cSJim Jagielski #include <fmtfld.hxx>
37*b1cdbd2cSJim Jagielski #include <ndtxt.hxx>
38*b1cdbd2cSJim Jagielski #include <doc.hxx>
39*b1cdbd2cSJim Jagielski #include <fldbas.hxx>
40*b1cdbd2cSJim Jagielski #include <docufld.hxx>
41*b1cdbd2cSJim Jagielski #include <flddat.hxx>
42*b1cdbd2cSJim Jagielski #include <htmlfld.hxx>
43*b1cdbd2cSJim Jagielski #include <swhtml.hxx>
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski using namespace nsSwDocInfoSubType;
46*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski struct HTMLNumFmtTblEntry
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski 	const sal_Char *pName;
51*b1cdbd2cSJim Jagielski 	NfIndexTableOffset eFmt;
52*b1cdbd2cSJim Jagielski };
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski static HTMLOptionEnum __FAR_DATA aHTMLFldTypeTable[] =
55*b1cdbd2cSJim Jagielski {
56*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FT_author,	RES_AUTHORFLD		},
57*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FT_sender,	RES_EXTUSERFLD		},
58*b1cdbd2cSJim Jagielski 	{ "DATE",    RES_DATEFLD			},
59*b1cdbd2cSJim Jagielski 	{ "TIME",    RES_TIMEFLD			},
60*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FT_datetime,RES_DATETIMEFLD		},
61*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FT_page,	RES_PAGENUMBERFLD	},
62*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FT_docinfo, RES_DOCINFOFLD		},
63*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FT_docstat, RES_DOCSTATFLD		},
64*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FT_filename,RES_FILENAMEFLD		},
65*b1cdbd2cSJim Jagielski 	{ 0,				0					}
66*b1cdbd2cSJim Jagielski };
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski static HTMLNumFmtTblEntry __FAR_DATA aHTMLDateFldFmtTable[] =
69*b1cdbd2cSJim Jagielski {
70*b1cdbd2cSJim Jagielski 	{ "SSYS", 		NF_DATE_SYSTEM_SHORT 	},
71*b1cdbd2cSJim Jagielski 	{ "LSYS", 		NF_DATE_SYSTEM_LONG 	},
72*b1cdbd2cSJim Jagielski 	{ "DMY", 		NF_DATE_SYS_DDMMYY, 	},
73*b1cdbd2cSJim Jagielski 	{ "DMYY", 		NF_DATE_SYS_DDMMYYYY, 	},
74*b1cdbd2cSJim Jagielski 	{ "DMMY", 		NF_DATE_SYS_DMMMYY, 	},
75*b1cdbd2cSJim Jagielski 	{ "DMMYY", 		NF_DATE_SYS_DMMMYYYY, 	},
76*b1cdbd2cSJim Jagielski 	{ "DMMMY", 		NF_DATE_DIN_DMMMMYYYY 	},
77*b1cdbd2cSJim Jagielski 	{ "DMMMYY", 		NF_DATE_DIN_DMMMMYYYY 	},
78*b1cdbd2cSJim Jagielski 	{ "DDMMY", 		NF_DATE_SYS_NNDMMMYY 	},
79*b1cdbd2cSJim Jagielski 	{ "DDMMMY", 		NF_DATE_SYS_NNDMMMMYYYY },
80*b1cdbd2cSJim Jagielski 	{ "DDMMMYY", 	NF_DATE_SYS_NNDMMMMYYYY },
81*b1cdbd2cSJim Jagielski 	{ "DDDMMMY", 	NF_DATE_SYS_NNNNDMMMMYYYY },
82*b1cdbd2cSJim Jagielski 	{ "DDDMMMYY", 	NF_DATE_SYS_NNNNDMMMMYYYY },
83*b1cdbd2cSJim Jagielski 	{ "MY", 			NF_DATE_SYS_MMYY 		},
84*b1cdbd2cSJim Jagielski 	{ "MD", 			NF_DATE_DIN_MMDD 		},
85*b1cdbd2cSJim Jagielski 	{ "YMD", 		NF_DATE_DIN_YYMMDD 		},
86*b1cdbd2cSJim Jagielski 	{ "YYMD", 		NF_DATE_DIN_YYYYMMDD 	},
87*b1cdbd2cSJim Jagielski 	{ 0,					NF_NUMERIC_START }
88*b1cdbd2cSJim Jagielski };
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski static HTMLNumFmtTblEntry __FAR_DATA aHTMLTimeFldFmtTable[] =
91*b1cdbd2cSJim Jagielski {
92*b1cdbd2cSJim Jagielski 	{ "SYS", 	 NF_TIME_HHMMSS },
93*b1cdbd2cSJim Jagielski 	{ "SSMM24", 	 NF_TIME_HHMM },
94*b1cdbd2cSJim Jagielski 	{ "SSMM12", 	 NF_TIME_HHMMAMPM },
95*b1cdbd2cSJim Jagielski 	{ 0,				 NF_NUMERIC_START }
96*b1cdbd2cSJim Jagielski };
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski static HTMLOptionEnum __FAR_DATA aHTMLPageNumFldFmtTable[] =
99*b1cdbd2cSJim Jagielski {
100*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_uletter, 	 SVX_NUM_CHARS_UPPER_LETTER },
101*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_lletter, 	 SVX_NUM_CHARS_LOWER_LETTER },
102*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_uroman, 		 SVX_NUM_ROMAN_UPPER },
103*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_lroman, 		 SVX_NUM_ROMAN_LOWER },
104*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_arabic,	 	 SVX_NUM_ARABIC },
105*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_none, 		 SVX_NUM_NUMBER_NONE },
106*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_char, 		 SVX_NUM_CHAR_SPECIAL },
107*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_page, 		 SVX_NUM_PAGEDESC },
108*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_ulettern, 	 SVX_NUM_CHARS_UPPER_LETTER_N },
109*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_llettern, 	 SVX_NUM_CHARS_LOWER_LETTER_N },
110*b1cdbd2cSJim Jagielski 	{ 0,					 0 }
111*b1cdbd2cSJim Jagielski };
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski static HTMLOptionEnum __FAR_DATA aHTMLExtUsrFldSubTable[] =
115*b1cdbd2cSJim Jagielski {
116*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_company,		 EU_COMPANY },
117*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_firstname,	 EU_FIRSTNAME },
118*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_name,		 EU_NAME },
119*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_shortcut,	 EU_SHORTCUT },
120*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_street,		 EU_STREET },
121*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_country,      EU_COUNTRY },
122*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_zip,          EU_ZIP },
123*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_city,         EU_CITY },
124*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_title,        EU_TITLE },
125*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_position,     EU_POSITION },
126*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_pphone,       EU_PHONE_PRIVATE },
127*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_cphone,       EU_PHONE_COMPANY },
128*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_fax,          EU_FAX },
129*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_email,        EU_EMAIL },
130*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_state,        EU_STATE },
131*b1cdbd2cSJim Jagielski 	{ 0,					 0 }
132*b1cdbd2cSJim Jagielski };
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski static HTMLOptionEnum __FAR_DATA aHTMLAuthorFldFmtTable[] =
135*b1cdbd2cSJim Jagielski {
136*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_name,		 AF_NAME },
137*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_shortcut,	 AF_SHORTCUT },
138*b1cdbd2cSJim Jagielski 	{ 0,					 0 }
139*b1cdbd2cSJim Jagielski };
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski static HTMLOptionEnum __FAR_DATA aHTMLPageNumFldSubTable[] =
142*b1cdbd2cSJim Jagielski {
143*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_random,		 PG_RANDOM },
144*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_next,		 PG_NEXT },
145*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_prev,		 PG_PREV },
146*b1cdbd2cSJim Jagielski 	{ 0,					 0	}
147*b1cdbd2cSJim Jagielski };
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski // UGLY: these are extensions of nsSwDocInfoSubType (in inc/docufld.hxx)
150*b1cdbd2cSJim Jagielski //       these are necessary for importing document info fields written by
151*b1cdbd2cSJim Jagielski //       older versions of OOo (< 3.0) which did not have DI_CUSTOM fields
152*b1cdbd2cSJim Jagielski 	const SwDocInfoSubType DI_INFO1			=  DI_SUBTYPE_END + 1;
153*b1cdbd2cSJim Jagielski 	const SwDocInfoSubType DI_INFO2			=  DI_SUBTYPE_END + 2;
154*b1cdbd2cSJim Jagielski 	const SwDocInfoSubType DI_INFO3			=  DI_SUBTYPE_END + 3;
155*b1cdbd2cSJim Jagielski 	const SwDocInfoSubType DI_INFO4			=  DI_SUBTYPE_END + 4;
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski static HTMLOptionEnum __FAR_DATA aHTMLDocInfoFldSubTable[] =
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_title, 	 DI_TITEL },
160*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_theme, 	 DI_THEMA },
161*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_keys, 	 DI_KEYS },
162*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_comment,  DI_COMMENT },
163*b1cdbd2cSJim Jagielski 	{ "INFO1", 	 DI_INFO1 },
164*b1cdbd2cSJim Jagielski 	{ "INFO2", 	 DI_INFO2 },
165*b1cdbd2cSJim Jagielski 	{ "INFO3", 	 DI_INFO3 },
166*b1cdbd2cSJim Jagielski 	{ "INFO4", 	 DI_INFO4 },
167*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_custom, 	 DI_CUSTOM },
168*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_create, 	 DI_CREATE },
169*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_change, 	 DI_CHANGE },
170*b1cdbd2cSJim Jagielski 	{ 0,				 0 }
171*b1cdbd2cSJim Jagielski };
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski static HTMLOptionEnum __FAR_DATA aHTMLDocInfoFldFmtTable[] =
174*b1cdbd2cSJim Jagielski {
175*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_author, 	 DI_SUB_AUTHOR },
176*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_time, 	 DI_SUB_TIME },
177*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_date, 	 DI_SUB_DATE },
178*b1cdbd2cSJim Jagielski 	{ 0,				 0 }
179*b1cdbd2cSJim Jagielski };
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski static HTMLOptionEnum __FAR_DATA aHTMLDocStatFldSubTable[] =
182*b1cdbd2cSJim Jagielski {
183*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_page, 	 DS_PAGE },
184*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_para, 	 DS_PARA },
185*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_word, 	 DS_WORD },
186*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_char, 	 DS_CHAR },
187*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_tbl, 	 DS_TBL },
188*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_grf, 	 DS_GRF },
189*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FS_ole, 	 DS_OLE },
190*b1cdbd2cSJim Jagielski 	{ 0,				 0 }
191*b1cdbd2cSJim Jagielski };
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski static HTMLOptionEnum __FAR_DATA aHTMLFileNameFldFmtTable[] =
194*b1cdbd2cSJim Jagielski {
195*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_name, 	 	FF_NAME },
196*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_pathname, 	FF_PATHNAME },
197*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_path, 	 	FF_PATH },
198*b1cdbd2cSJim Jagielski 	{ OOO_STRING_SW_HTML_FF_name_noext,	FF_NAME_NOEXT },
199*b1cdbd2cSJim Jagielski 	{ 0,				 	0 }
200*b1cdbd2cSJim Jagielski };
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski /*  */
203*b1cdbd2cSJim Jagielski 
GetNumType(const String & rStr,sal_uInt16 nDfltType)204*b1cdbd2cSJim Jagielski sal_uInt16 SwHTMLParser::GetNumType( const String& rStr, sal_uInt16 nDfltType )
205*b1cdbd2cSJim Jagielski {
206*b1cdbd2cSJim Jagielski 	sal_uInt16 nType = nDfltType;
207*b1cdbd2cSJim Jagielski 	const HTMLOptionEnum *pOptEnums = aHTMLPageNumFldFmtTable;
208*b1cdbd2cSJim Jagielski 	while( pOptEnums->pName )
209*b1cdbd2cSJim Jagielski 		if( !rStr.EqualsIgnoreCaseAscii( pOptEnums->pName ) )
210*b1cdbd2cSJim Jagielski 			pOptEnums++;
211*b1cdbd2cSJim Jagielski 		else
212*b1cdbd2cSJim Jagielski 			break;
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski 	if( pOptEnums->pName )
215*b1cdbd2cSJim Jagielski 		nType = pOptEnums->nValue;
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski 	return nType;
218*b1cdbd2cSJim Jagielski }
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski 
NewField()221*b1cdbd2cSJim Jagielski void SwHTMLParser::NewField()
222*b1cdbd2cSJim Jagielski {
223*b1cdbd2cSJim Jagielski 	sal_Bool bKnownType = sal_False, bFixed = sal_False,
224*b1cdbd2cSJim Jagielski 		 bHasNumFmt = sal_False, bHasNumValue = sal_False;
225*b1cdbd2cSJim Jagielski     sal_uInt16 nType = 0;
226*b1cdbd2cSJim Jagielski 	String aValue, aNumFmt, aNumValue, aName;
227*b1cdbd2cSJim Jagielski 	const HTMLOption *pSubOption=0, *pFmtOption=0;
228*b1cdbd2cSJim Jagielski 
229*b1cdbd2cSJim Jagielski 	const HTMLOptions *pHTMLOptions = GetOptions();
230*b1cdbd2cSJim Jagielski 	sal_uInt16 i;
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski 	for( i = pHTMLOptions->Count(); i; )
233*b1cdbd2cSJim Jagielski 	{
234*b1cdbd2cSJim Jagielski 		const HTMLOption *pOption = (*pHTMLOptions)[--i];
235*b1cdbd2cSJim Jagielski 		switch( pOption->GetToken() )
236*b1cdbd2cSJim Jagielski 		{
237*b1cdbd2cSJim Jagielski 		case HTML_O_TYPE:
238*b1cdbd2cSJim Jagielski 			bKnownType = pOption->GetEnum( nType, aHTMLFldTypeTable );
239*b1cdbd2cSJim Jagielski 			break;
240*b1cdbd2cSJim Jagielski 		case HTML_O_SUBTYPE:
241*b1cdbd2cSJim Jagielski 			pSubOption = pOption;
242*b1cdbd2cSJim Jagielski 			break;
243*b1cdbd2cSJim Jagielski 		case HTML_O_FORMAT:
244*b1cdbd2cSJim Jagielski 			pFmtOption = pOption;
245*b1cdbd2cSJim Jagielski 			break;
246*b1cdbd2cSJim Jagielski 		case HTML_O_NAME:
247*b1cdbd2cSJim Jagielski 			aName = pOption->GetString();
248*b1cdbd2cSJim Jagielski 			break;
249*b1cdbd2cSJim Jagielski 		case HTML_O_VALUE:
250*b1cdbd2cSJim Jagielski 			aValue = pOption->GetString();
251*b1cdbd2cSJim Jagielski 			break;
252*b1cdbd2cSJim Jagielski 		case HTML_O_SDNUM:
253*b1cdbd2cSJim Jagielski 			aNumFmt = pOption->GetString();
254*b1cdbd2cSJim Jagielski 			bHasNumFmt = sal_True;
255*b1cdbd2cSJim Jagielski 			break;
256*b1cdbd2cSJim Jagielski 		case HTML_O_SDVAL:
257*b1cdbd2cSJim Jagielski 			aNumValue = pOption->GetString();
258*b1cdbd2cSJim Jagielski 			bHasNumValue = sal_True;
259*b1cdbd2cSJim Jagielski 			break;
260*b1cdbd2cSJim Jagielski 		case HTML_O_SDFIXED:
261*b1cdbd2cSJim Jagielski 			bFixed = sal_True;
262*b1cdbd2cSJim Jagielski 			break;
263*b1cdbd2cSJim Jagielski 		}
264*b1cdbd2cSJim Jagielski 	}
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski 	if( !bKnownType )
267*b1cdbd2cSJim Jagielski 		return;
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski 	// Autor und Absender werden nur als als variables Feld eingefuegt,
270*b1cdbd2cSJim Jagielski 	// wenn man das Dok selbst als letztes geaendert hat oder es noch
271*b1cdbd2cSJim Jagielski 	// niemend geandert hat und man das Dok erstellt hat. Sonst
272*b1cdbd2cSJim Jagielski 	// wird ein Fixed-Feld daraus gemacht.
273*b1cdbd2cSJim Jagielski 	if( !bFixed &&
274*b1cdbd2cSJim Jagielski 		(RES_EXTUSERFLD == (RES_FIELDS)nType ||
275*b1cdbd2cSJim Jagielski 		 RES_AUTHORFLD == (RES_FIELDS)nType) )
276*b1cdbd2cSJim Jagielski 	{
277*b1cdbd2cSJim Jagielski 		SvtUserOptions aOpt;
278*b1cdbd2cSJim Jagielski 		const String& rUser = aOpt.GetFullName();
279*b1cdbd2cSJim Jagielski         SwDocShell *pDocShell(pDoc->GetDocShell());
280*b1cdbd2cSJim Jagielski         DBG_ASSERT(pDocShell, "no SwDocShell");
281*b1cdbd2cSJim Jagielski         if (pDocShell) {
282*b1cdbd2cSJim Jagielski             uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
283*b1cdbd2cSJim Jagielski                 pDocShell->GetModel(), uno::UNO_QUERY_THROW);
284*b1cdbd2cSJim Jagielski             uno::Reference<document::XDocumentProperties> xDocProps(
285*b1cdbd2cSJim Jagielski                 xDPS->getDocumentProperties());
286*b1cdbd2cSJim Jagielski             DBG_ASSERT(xDocProps.is(), "Doc has no DocumentProperties");
287*b1cdbd2cSJim Jagielski             const String& rChanged = xDocProps->getModifiedBy();
288*b1cdbd2cSJim Jagielski             const String& rCreated = xDocProps->getAuthor();
289*b1cdbd2cSJim Jagielski             if( !rUser.Len() ||
290*b1cdbd2cSJim Jagielski                 (rChanged.Len() ? rUser != rChanged : rUser != rCreated) )
291*b1cdbd2cSJim Jagielski                 bFixed = sal_True;
292*b1cdbd2cSJim Jagielski         }
293*b1cdbd2cSJim Jagielski 	}
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = nType;
296*b1cdbd2cSJim Jagielski 	if( RES_DATEFLD==nType || RES_TIMEFLD==nType )
297*b1cdbd2cSJim Jagielski 		nWhich = RES_DATETIMEFLD;
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski 	SwFieldType* pType = pDoc->GetSysFldType( nWhich );
300*b1cdbd2cSJim Jagielski 	SwField *pFld = 0;
301*b1cdbd2cSJim Jagielski 	sal_Bool bInsOnEndTag = sal_False;
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski 	switch( (RES_FIELDS)nType )
304*b1cdbd2cSJim Jagielski 	{
305*b1cdbd2cSJim Jagielski 	case RES_EXTUSERFLD:
306*b1cdbd2cSJim Jagielski 		if( pSubOption )
307*b1cdbd2cSJim Jagielski 		{
308*b1cdbd2cSJim Jagielski 			sal_uInt16 nSub;
309*b1cdbd2cSJim Jagielski 			sal_uLong nFmt = 0;
310*b1cdbd2cSJim Jagielski 			if( bFixed )
311*b1cdbd2cSJim Jagielski 			{
312*b1cdbd2cSJim Jagielski 				nFmt |= AF_FIXED;
313*b1cdbd2cSJim Jagielski 				bInsOnEndTag = sal_True;
314*b1cdbd2cSJim Jagielski 			}
315*b1cdbd2cSJim Jagielski 			if( pSubOption->GetEnum( nSub, aHTMLExtUsrFldSubTable ) )
316*b1cdbd2cSJim Jagielski 				pFld = new SwExtUserField( (SwExtUserFieldType*)pType,
317*b1cdbd2cSJim Jagielski 										   nSub, nFmt );
318*b1cdbd2cSJim Jagielski 		}
319*b1cdbd2cSJim Jagielski 		break;
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski 	case RES_AUTHORFLD:
322*b1cdbd2cSJim Jagielski 		{
323*b1cdbd2cSJim Jagielski 			sal_uInt16 nFmt = AF_NAME;
324*b1cdbd2cSJim Jagielski 			if( pFmtOption )
325*b1cdbd2cSJim Jagielski 				pFmtOption->GetEnum( nFmt, aHTMLAuthorFldFmtTable );
326*b1cdbd2cSJim Jagielski 			if( bFixed )
327*b1cdbd2cSJim Jagielski 			{
328*b1cdbd2cSJim Jagielski 				nFmt |= AF_FIXED;
329*b1cdbd2cSJim Jagielski 				bInsOnEndTag = sal_True;
330*b1cdbd2cSJim Jagielski 			}
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski 			pFld = new SwAuthorField( (SwAuthorFieldType *)pType, nFmt );
333*b1cdbd2cSJim Jagielski 		}
334*b1cdbd2cSJim Jagielski 		break;
335*b1cdbd2cSJim Jagielski 
336*b1cdbd2cSJim Jagielski 	case RES_DATEFLD:
337*b1cdbd2cSJim Jagielski 	case RES_TIMEFLD:
338*b1cdbd2cSJim Jagielski 		{
339*b1cdbd2cSJim Jagielski             sal_uLong nNumFmt = 0;
340*b1cdbd2cSJim Jagielski 			sal_uLong nTime = Time().GetTime(), nDate = Date().GetDate();
341*b1cdbd2cSJim Jagielski             sal_uInt16 nSub = 0;
342*b1cdbd2cSJim Jagielski 			sal_Bool bValidFmt = sal_False;
343*b1cdbd2cSJim Jagielski 			HTMLNumFmtTblEntry * pFmtTbl;
344*b1cdbd2cSJim Jagielski 
345*b1cdbd2cSJim Jagielski 			if( RES_DATEFLD==nType )
346*b1cdbd2cSJim Jagielski 			{
347*b1cdbd2cSJim Jagielski 				nSub = DATEFLD;
348*b1cdbd2cSJim Jagielski 				pFmtTbl = aHTMLDateFldFmtTable;
349*b1cdbd2cSJim Jagielski 				if( aValue.Len() )
350*b1cdbd2cSJim Jagielski 					nDate = (sal_uLong)aValue.ToInt32();
351*b1cdbd2cSJim Jagielski 			}
352*b1cdbd2cSJim Jagielski 			else
353*b1cdbd2cSJim Jagielski 			{
354*b1cdbd2cSJim Jagielski 				nSub = TIMEFLD;
355*b1cdbd2cSJim Jagielski 				pFmtTbl = aHTMLTimeFldFmtTable;
356*b1cdbd2cSJim Jagielski 				if( aValue.Len() )
357*b1cdbd2cSJim Jagielski 					nTime = (sal_uLong)aValue.ToInt32();
358*b1cdbd2cSJim Jagielski 			}
359*b1cdbd2cSJim Jagielski 			if( aValue.Len() )
360*b1cdbd2cSJim Jagielski 				nSub |= FIXEDFLD;
361*b1cdbd2cSJim Jagielski 
362*b1cdbd2cSJim Jagielski 			SvNumberFormatter *pFormatter =	pDoc->GetNumberFormatter();
363*b1cdbd2cSJim Jagielski 			if( pFmtOption )
364*b1cdbd2cSJim Jagielski 			{
365*b1cdbd2cSJim Jagielski 				const String& rFmt = pFmtOption->GetString();
366*b1cdbd2cSJim Jagielski 				for( sal_uInt16 k = 0; pFmtTbl[k].pName; k++ )
367*b1cdbd2cSJim Jagielski 				{
368*b1cdbd2cSJim Jagielski 					if( rFmt.EqualsIgnoreCaseAscii( pFmtTbl[k].pName ) )
369*b1cdbd2cSJim Jagielski 					{
370*b1cdbd2cSJim Jagielski 						nNumFmt = pFormatter->GetFormatIndex(
371*b1cdbd2cSJim Jagielski 										pFmtTbl[k].eFmt, LANGUAGE_SYSTEM);
372*b1cdbd2cSJim Jagielski 						bValidFmt = sal_True;
373*b1cdbd2cSJim Jagielski 						break;
374*b1cdbd2cSJim Jagielski 					}
375*b1cdbd2cSJim Jagielski 				}
376*b1cdbd2cSJim Jagielski 			}
377*b1cdbd2cSJim Jagielski 			if( !bValidFmt )
378*b1cdbd2cSJim Jagielski 				nNumFmt = pFormatter->GetFormatIndex( pFmtTbl[i].eFmt,
379*b1cdbd2cSJim Jagielski 													  LANGUAGE_SYSTEM);
380*b1cdbd2cSJim Jagielski 
381*b1cdbd2cSJim Jagielski 			pFld = new SwDateTimeField( (SwDateTimeFieldType *)pType,
382*b1cdbd2cSJim Jagielski 										  nSub, nNumFmt );
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski 			if (nSub & FIXEDFLD)
385*b1cdbd2cSJim Jagielski                 ((SwDateTimeField *)pFld)->SetDateTime( DateTime(Date(nDate), Time(nTime)) );
386*b1cdbd2cSJim Jagielski 		}
387*b1cdbd2cSJim Jagielski 		break;
388*b1cdbd2cSJim Jagielski 
389*b1cdbd2cSJim Jagielski 	case RES_DATETIMEFLD:
390*b1cdbd2cSJim Jagielski 		if( bHasNumFmt )
391*b1cdbd2cSJim Jagielski 		{
392*b1cdbd2cSJim Jagielski 			sal_uInt16 nSub = 0;
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski 			SvNumberFormatter *pFormatter =	pDoc->GetNumberFormatter();
395*b1cdbd2cSJim Jagielski 			sal_uInt32 nNumFmt;
396*b1cdbd2cSJim Jagielski 			LanguageType eLang;
397*b1cdbd2cSJim Jagielski 			double dValue = GetTableDataOptionsValNum(
398*b1cdbd2cSJim Jagielski 								nNumFmt, eLang, aNumValue, aNumFmt,
399*b1cdbd2cSJim Jagielski 								*pDoc->GetNumberFormatter() );
400*b1cdbd2cSJim Jagielski 			short nFmtType = pFormatter->GetType( nNumFmt );
401*b1cdbd2cSJim Jagielski 			switch( nFmtType )
402*b1cdbd2cSJim Jagielski 			{
403*b1cdbd2cSJim Jagielski 			case NUMBERFORMAT_DATE:	nSub = DATEFLD;	break;
404*b1cdbd2cSJim Jagielski 			case NUMBERFORMAT_TIME: nSub = TIMEFLD; break;
405*b1cdbd2cSJim Jagielski 			}
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski 			if( nSub )
408*b1cdbd2cSJim Jagielski 			{
409*b1cdbd2cSJim Jagielski 				if( bHasNumValue )
410*b1cdbd2cSJim Jagielski 					nSub |= FIXEDFLD;
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski 				pFld = new SwDateTimeField( (SwDateTimeFieldType *)pType,
413*b1cdbd2cSJim Jagielski 												  nSub, nNumFmt );
414*b1cdbd2cSJim Jagielski 				if( bHasNumValue )
415*b1cdbd2cSJim Jagielski 					((SwDateTimeField *)pFld)->SetValue( dValue );
416*b1cdbd2cSJim Jagielski 			}
417*b1cdbd2cSJim Jagielski 		}
418*b1cdbd2cSJim Jagielski 		break;
419*b1cdbd2cSJim Jagielski 
420*b1cdbd2cSJim Jagielski 	case RES_PAGENUMBERFLD:
421*b1cdbd2cSJim Jagielski 		if( pSubOption )
422*b1cdbd2cSJim Jagielski 		{
423*b1cdbd2cSJim Jagielski 			sal_uInt16 nSub;
424*b1cdbd2cSJim Jagielski 			if( pSubOption->GetEnum( nSub, aHTMLPageNumFldSubTable ) )
425*b1cdbd2cSJim Jagielski 			{
426*b1cdbd2cSJim Jagielski 				sal_uInt16 nFmt = SVX_NUM_PAGEDESC;
427*b1cdbd2cSJim Jagielski 				if( pFmtOption )
428*b1cdbd2cSJim Jagielski 					pFmtOption->GetEnum( nFmt, aHTMLPageNumFldFmtTable );
429*b1cdbd2cSJim Jagielski 
430*b1cdbd2cSJim Jagielski 				short nOff = 0;
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski 				if( (SvxExtNumType)nFmt!=SVX_NUM_CHAR_SPECIAL && aValue.Len() )
433*b1cdbd2cSJim Jagielski 					nOff = (short)aValue.ToInt32();
434*b1cdbd2cSJim Jagielski 				else if( (SwPageNumSubType)nSub == PG_NEXT  )
435*b1cdbd2cSJim Jagielski 					nOff = 1;
436*b1cdbd2cSJim Jagielski 				else if( (SwPageNumSubType)nSub == PG_PREV  )
437*b1cdbd2cSJim Jagielski 					nOff = -1;
438*b1cdbd2cSJim Jagielski 
439*b1cdbd2cSJim Jagielski 				if( (SvxExtNumType)nFmt==SVX_NUM_CHAR_SPECIAL &&
440*b1cdbd2cSJim Jagielski 					(SwPageNumSubType)nSub==PG_RANDOM )
441*b1cdbd2cSJim Jagielski 					nFmt = SVX_NUM_PAGEDESC;
442*b1cdbd2cSJim Jagielski 
443*b1cdbd2cSJim Jagielski 				pFld = new SwPageNumberField( (SwPageNumberFieldType *)pType, nSub, nFmt, nOff );
444*b1cdbd2cSJim Jagielski 				if( (SvxExtNumType)nFmt==SVX_NUM_CHAR_SPECIAL )
445*b1cdbd2cSJim Jagielski 					((SwPageNumberField *)pFld)->SetUserString( aValue );
446*b1cdbd2cSJim Jagielski 			}
447*b1cdbd2cSJim Jagielski 		}
448*b1cdbd2cSJim Jagielski 		break;
449*b1cdbd2cSJim Jagielski 
450*b1cdbd2cSJim Jagielski 	case RES_DOCINFOFLD:
451*b1cdbd2cSJim Jagielski 		if( pSubOption )
452*b1cdbd2cSJim Jagielski 		{
453*b1cdbd2cSJim Jagielski 			sal_uInt16 nSub;
454*b1cdbd2cSJim Jagielski 			if( pSubOption->GetEnum( nSub, aHTMLDocInfoFldSubTable ) )
455*b1cdbd2cSJim Jagielski 			{
456*b1cdbd2cSJim Jagielski 				sal_uInt16 nExtSub = 0;
457*b1cdbd2cSJim Jagielski 				if( DI_CREATE==(SwDocInfoSubType)nSub ||
458*b1cdbd2cSJim Jagielski 					DI_CHANGE==(SwDocInfoSubType)nSub )
459*b1cdbd2cSJim Jagielski 				{
460*b1cdbd2cSJim Jagielski 					nExtSub = DI_SUB_AUTHOR;
461*b1cdbd2cSJim Jagielski 					if( pFmtOption )
462*b1cdbd2cSJim Jagielski 						pFmtOption->GetEnum( nExtSub, aHTMLDocInfoFldFmtTable );
463*b1cdbd2cSJim Jagielski 					nSub |= nExtSub;
464*b1cdbd2cSJim Jagielski 				}
465*b1cdbd2cSJim Jagielski 
466*b1cdbd2cSJim Jagielski 				sal_uInt32 nNumFmt = 0;
467*b1cdbd2cSJim Jagielski 				double dValue = 0;
468*b1cdbd2cSJim Jagielski 				if( bHasNumFmt && (DI_SUB_DATE==nExtSub || DI_SUB_TIME==nExtSub) )
469*b1cdbd2cSJim Jagielski 				{
470*b1cdbd2cSJim Jagielski 					LanguageType eLang;
471*b1cdbd2cSJim Jagielski 					dValue = GetTableDataOptionsValNum(
472*b1cdbd2cSJim Jagielski 									nNumFmt, eLang, aNumValue, aNumFmt,
473*b1cdbd2cSJim Jagielski 									*pDoc->GetNumberFormatter() );
474*b1cdbd2cSJim Jagielski 					bFixed &= bHasNumValue;
475*b1cdbd2cSJim Jagielski 				}
476*b1cdbd2cSJim Jagielski 				else
477*b1cdbd2cSJim Jagielski 					bHasNumValue = sal_False;
478*b1cdbd2cSJim Jagielski 
479*b1cdbd2cSJim Jagielski                 if( nSub >= DI_INFO1 && nSub <= DI_INFO4 && aName.Len() == 0 )
480*b1cdbd2cSJim Jagielski                 {
481*b1cdbd2cSJim Jagielski                     // backward compatibility for OOo 2:
482*b1cdbd2cSJim Jagielski                     // map to names stored in AddMetaUserDefined
483*b1cdbd2cSJim Jagielski                     aName = m_InfoNames[nSub - DI_INFO1];
484*b1cdbd2cSJim Jagielski                     nSub = DI_CUSTOM;
485*b1cdbd2cSJim Jagielski                 }
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski 				if( bFixed )
488*b1cdbd2cSJim Jagielski 				{
489*b1cdbd2cSJim Jagielski 					nSub |= DI_SUB_FIXED;
490*b1cdbd2cSJim Jagielski 					bInsOnEndTag = sal_True;
491*b1cdbd2cSJim Jagielski 				}
492*b1cdbd2cSJim Jagielski 
493*b1cdbd2cSJim Jagielski 				pFld = new SwDocInfoField( (SwDocInfoFieldType *)pType,
494*b1cdbd2cSJim Jagielski 											 nSub, aName, nNumFmt );
495*b1cdbd2cSJim Jagielski 				if( bHasNumValue )
496*b1cdbd2cSJim Jagielski 					((SwDocInfoField*)pFld)->SetValue( dValue );
497*b1cdbd2cSJim Jagielski 			}
498*b1cdbd2cSJim Jagielski 		}
499*b1cdbd2cSJim Jagielski 		break;
500*b1cdbd2cSJim Jagielski 
501*b1cdbd2cSJim Jagielski 	case RES_DOCSTATFLD:
502*b1cdbd2cSJim Jagielski 		if( pSubOption )
503*b1cdbd2cSJim Jagielski 		{
504*b1cdbd2cSJim Jagielski 			sal_uInt16 nSub;
505*b1cdbd2cSJim Jagielski 			if( pSubOption->GetEnum( nSub, aHTMLDocStatFldSubTable ) )
506*b1cdbd2cSJim Jagielski 			{
507*b1cdbd2cSJim Jagielski 				sal_uInt16 nFmt = SVX_NUM_ARABIC;
508*b1cdbd2cSJim Jagielski 				if( pFmtOption )
509*b1cdbd2cSJim Jagielski 					pFmtOption->GetEnum( nFmt, aHTMLPageNumFldFmtTable );
510*b1cdbd2cSJim Jagielski 				pFld = new SwDocStatField( (SwDocStatFieldType *)pType,
511*b1cdbd2cSJim Jagielski 											 nSub, nFmt );
512*b1cdbd2cSJim Jagielski 				bUpdateDocStat |= (DS_PAGE != nFmt);
513*b1cdbd2cSJim Jagielski 			}
514*b1cdbd2cSJim Jagielski 		}
515*b1cdbd2cSJim Jagielski 		break;
516*b1cdbd2cSJim Jagielski 
517*b1cdbd2cSJim Jagielski 	case RES_FILENAMEFLD:
518*b1cdbd2cSJim Jagielski 		{
519*b1cdbd2cSJim Jagielski 			sal_uInt16 nFmt = FF_NAME;
520*b1cdbd2cSJim Jagielski 			if( pFmtOption )
521*b1cdbd2cSJim Jagielski 				pFmtOption->GetEnum( nFmt, aHTMLFileNameFldFmtTable );
522*b1cdbd2cSJim Jagielski 			if( bFixed )
523*b1cdbd2cSJim Jagielski 			{
524*b1cdbd2cSJim Jagielski 				nFmt |= FF_FIXED;
525*b1cdbd2cSJim Jagielski 				bInsOnEndTag = sal_True;
526*b1cdbd2cSJim Jagielski 			}
527*b1cdbd2cSJim Jagielski 
528*b1cdbd2cSJim Jagielski 			pFld = new SwFileNameField( (SwFileNameFieldType *)pType, nFmt );
529*b1cdbd2cSJim Jagielski 		}
530*b1cdbd2cSJim Jagielski 		break;
531*b1cdbd2cSJim Jagielski 	default:
532*b1cdbd2cSJim Jagielski 		;
533*b1cdbd2cSJim Jagielski 	}
534*b1cdbd2cSJim Jagielski 
535*b1cdbd2cSJim Jagielski 	if( pFld )
536*b1cdbd2cSJim Jagielski 	{
537*b1cdbd2cSJim Jagielski 		if( bInsOnEndTag )
538*b1cdbd2cSJim Jagielski 		{
539*b1cdbd2cSJim Jagielski 			pField = pFld;
540*b1cdbd2cSJim Jagielski 		}
541*b1cdbd2cSJim Jagielski 		else
542*b1cdbd2cSJim Jagielski 		{
543*b1cdbd2cSJim Jagielski             pDoc->InsertPoolItem( *pPam, SwFmtFld(*pFld), 0 );
544*b1cdbd2cSJim Jagielski 			delete pFld;
545*b1cdbd2cSJim Jagielski 		}
546*b1cdbd2cSJim Jagielski 		bInField = sal_True;
547*b1cdbd2cSJim Jagielski 	}
548*b1cdbd2cSJim Jagielski }
549*b1cdbd2cSJim Jagielski 
EndField()550*b1cdbd2cSJim Jagielski void SwHTMLParser::EndField()
551*b1cdbd2cSJim Jagielski {
552*b1cdbd2cSJim Jagielski 	if( pField )
553*b1cdbd2cSJim Jagielski 	{
554*b1cdbd2cSJim Jagielski 		switch( pField->Which() )
555*b1cdbd2cSJim Jagielski 		{
556*b1cdbd2cSJim Jagielski 		case RES_DOCINFOFLD:
557*b1cdbd2cSJim Jagielski 			ASSERT( ((SwDocInfoField*)pField)->IsFixed(),
558*b1cdbd2cSJim Jagielski 					"DokInfo-Feld haette nicht gemerkt werden muessen" );
559*b1cdbd2cSJim Jagielski 			((SwDocInfoField*)pField)->SetExpansion( aContents );
560*b1cdbd2cSJim Jagielski 			break;
561*b1cdbd2cSJim Jagielski 
562*b1cdbd2cSJim Jagielski 		case RES_EXTUSERFLD:
563*b1cdbd2cSJim Jagielski 			ASSERT( ((SwExtUserField*)pField)->IsFixed(),
564*b1cdbd2cSJim Jagielski 					"ExtUser-Feld haette nicht gemerkt werden muessen" );
565*b1cdbd2cSJim Jagielski 			((SwExtUserField*)pField)->SetExpansion( aContents );
566*b1cdbd2cSJim Jagielski 			break;
567*b1cdbd2cSJim Jagielski 
568*b1cdbd2cSJim Jagielski 		case RES_AUTHORFLD:
569*b1cdbd2cSJim Jagielski 			ASSERT( ((SwAuthorField*)pField)->IsFixed(),
570*b1cdbd2cSJim Jagielski 					"Author-Feld haette nicht gemerkt werden muessen" );
571*b1cdbd2cSJim Jagielski 			((SwAuthorField*)pField)->SetExpansion( aContents );
572*b1cdbd2cSJim Jagielski 			break;
573*b1cdbd2cSJim Jagielski 
574*b1cdbd2cSJim Jagielski 		case RES_FILENAMEFLD:
575*b1cdbd2cSJim Jagielski 			ASSERT( ((SwFileNameField*)pField)->IsFixed(),
576*b1cdbd2cSJim Jagielski 					"FileName-Feld haette nicht gemerkt werden muessen" );
577*b1cdbd2cSJim Jagielski 			((SwFileNameField*)pField)->SetExpansion( aContents );
578*b1cdbd2cSJim Jagielski 			break;
579*b1cdbd2cSJim Jagielski 		}
580*b1cdbd2cSJim Jagielski 
581*b1cdbd2cSJim Jagielski         pDoc->InsertPoolItem( *pPam, SwFmtFld(*pField), 0 );
582*b1cdbd2cSJim Jagielski 		delete pField;
583*b1cdbd2cSJim Jagielski 		pField = 0;
584*b1cdbd2cSJim Jagielski 	}
585*b1cdbd2cSJim Jagielski 
586*b1cdbd2cSJim Jagielski 	bInField = sal_False;
587*b1cdbd2cSJim Jagielski 	aContents.Erase();
588*b1cdbd2cSJim Jagielski }
589*b1cdbd2cSJim Jagielski 
InsertFieldText()590*b1cdbd2cSJim Jagielski void SwHTMLParser::InsertFieldText()
591*b1cdbd2cSJim Jagielski {
592*b1cdbd2cSJim Jagielski 	if( pField )
593*b1cdbd2cSJim Jagielski 	{
594*b1cdbd2cSJim Jagielski 		// das aktuelle Textstueck an den Text anhaengen
595*b1cdbd2cSJim Jagielski 		aContents += aToken;
596*b1cdbd2cSJim Jagielski 	}
597*b1cdbd2cSJim Jagielski }
598*b1cdbd2cSJim Jagielski 
InsertCommentText(const sal_Char * pTag)599*b1cdbd2cSJim Jagielski void SwHTMLParser::InsertCommentText( const sal_Char *pTag )
600*b1cdbd2cSJim Jagielski {
601*b1cdbd2cSJim Jagielski 	sal_Bool bEmpty = aContents.Len() == 0;
602*b1cdbd2cSJim Jagielski 	if( !bEmpty )
603*b1cdbd2cSJim Jagielski 		aContents += '\n';
604*b1cdbd2cSJim Jagielski 
605*b1cdbd2cSJim Jagielski 	aContents += aToken;
606*b1cdbd2cSJim Jagielski 	if( bEmpty && pTag )
607*b1cdbd2cSJim Jagielski 	{
608*b1cdbd2cSJim Jagielski 		String aTmp( aContents );
609*b1cdbd2cSJim Jagielski 		aContents.AssignAscii( "HTML: <" );
610*b1cdbd2cSJim Jagielski 		aContents.AppendAscii( pTag );
611*b1cdbd2cSJim Jagielski 		aContents.Append( '>' );
612*b1cdbd2cSJim Jagielski 		aContents.Append( aTmp );
613*b1cdbd2cSJim Jagielski 	}
614*b1cdbd2cSJim Jagielski }
615*b1cdbd2cSJim Jagielski 
InsertComment(const String & rComment,const sal_Char * pTag)616*b1cdbd2cSJim Jagielski void SwHTMLParser::InsertComment( const String& rComment, const sal_Char *pTag )
617*b1cdbd2cSJim Jagielski {
618*b1cdbd2cSJim Jagielski     String aComment( rComment );
619*b1cdbd2cSJim Jagielski     if( pTag )
620*b1cdbd2cSJim Jagielski     {
621*b1cdbd2cSJim Jagielski         aComment.AppendAscii( "</" );
622*b1cdbd2cSJim Jagielski         aComment.AppendAscii( pTag );
623*b1cdbd2cSJim Jagielski         aComment.Append( '>' );
624*b1cdbd2cSJim Jagielski     }
625*b1cdbd2cSJim Jagielski 
626*b1cdbd2cSJim Jagielski     // MIB 24.06.97: Wenn ein PostIt nach einen Space eingefuegt
627*b1cdbd2cSJim Jagielski     // werden soll, fuegen wir es vor dem Space ein. Dann gibt es
628*b1cdbd2cSJim Jagielski     // weniger Probleme beim Formatieren (bug #40483#)
629*b1cdbd2cSJim Jagielski     xub_StrLen nPos = pPam->GetPoint()->nContent.GetIndex();
630*b1cdbd2cSJim Jagielski     SwTxtNode *pTxtNd = pPam->GetNode()->GetTxtNode();
631*b1cdbd2cSJim Jagielski     sal_Bool bMoveFwd = sal_False;
632*b1cdbd2cSJim Jagielski     if( nPos>0 && pTxtNd && ' '==pTxtNd->GetTxt().GetChar(nPos-1) )
633*b1cdbd2cSJim Jagielski     {
634*b1cdbd2cSJim Jagielski         bMoveFwd = sal_True;
635*b1cdbd2cSJim Jagielski 
636*b1cdbd2cSJim Jagielski         sal_uLong nNodeIdx = pPam->GetPoint()->nNode.GetIndex();
637*b1cdbd2cSJim Jagielski         xub_StrLen nIdx = pPam->GetPoint()->nContent.GetIndex();
638*b1cdbd2cSJim Jagielski         for( sal_uInt16 i = aSetAttrTab.Count(); i > 0; )
639*b1cdbd2cSJim Jagielski         {
640*b1cdbd2cSJim Jagielski             _HTMLAttr *pAttr = aSetAttrTab[--i];
641*b1cdbd2cSJim Jagielski             if( pAttr->GetSttParaIdx() != nNodeIdx ||
642*b1cdbd2cSJim Jagielski                 pAttr->GetSttCnt() != nIdx )
643*b1cdbd2cSJim Jagielski                 break;
644*b1cdbd2cSJim Jagielski 
645*b1cdbd2cSJim Jagielski             if( RES_TXTATR_FIELD == pAttr->pItem->Which() &&
646*b1cdbd2cSJim Jagielski                 RES_SCRIPTFLD == ((const SwFmtFld *)pAttr->pItem)->GetField()->GetTyp()->Which() )
647*b1cdbd2cSJim Jagielski             {
648*b1cdbd2cSJim Jagielski                 bMoveFwd = sal_False;
649*b1cdbd2cSJim Jagielski                 break;
650*b1cdbd2cSJim Jagielski             }
651*b1cdbd2cSJim Jagielski         }
652*b1cdbd2cSJim Jagielski 
653*b1cdbd2cSJim Jagielski         if( bMoveFwd )
654*b1cdbd2cSJim Jagielski             pPam->Move( fnMoveBackward );
655*b1cdbd2cSJim Jagielski     }
656*b1cdbd2cSJim Jagielski 
657*b1cdbd2cSJim Jagielski     SwPostItField aPostItFld(
658*b1cdbd2cSJim Jagielski         (SwPostItFieldType*)pDoc->GetSysFldType( RES_POSTITFLD ),
659*b1cdbd2cSJim Jagielski         aComment,
660*b1cdbd2cSJim Jagielski         aEmptyStr,
661*b1cdbd2cSJim Jagielski         aEmptyStr,
662*b1cdbd2cSJim Jagielski         aEmptyStr,
663*b1cdbd2cSJim Jagielski         DateTime() );
664*b1cdbd2cSJim Jagielski     InsertAttr( SwFmtFld( aPostItFld ) );
665*b1cdbd2cSJim Jagielski 
666*b1cdbd2cSJim Jagielski     if( bMoveFwd )
667*b1cdbd2cSJim Jagielski         pPam->Move( fnMoveForward );
668*b1cdbd2cSJim Jagielski }
669*b1cdbd2cSJim Jagielski 
670