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