1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26
27
28 #include <com/sun/star/i18n/ScriptType.hpp>
29 #include <tools/string.hxx>
30 #include <svtools/htmlkywd.hxx>
31 #include <svtools/htmlout.hxx>
32 #include <svtools/htmltokn.h>
33 #include <fmtfld.hxx>
34 #include <doc.hxx>
35 #include <breakit.hxx>
36 #include <ndtxt.hxx>
37 #include <txtfld.hxx>
38 #include "fldbas.hxx"
39 #include "docufld.hxx"
40 #include "flddat.hxx"
41 #include "htmlfld.hxx"
42 #include "wrthtml.hxx"
43
44 using namespace nsSwDocInfoSubType;
45
GetNumFormat(sal_uInt16 nFmt)46 const sal_Char *SwHTMLWriter::GetNumFormat( sal_uInt16 nFmt )
47 {
48 const sal_Char *pFmtStr = 0;
49
50 switch( (SvxExtNumType)nFmt )
51 {
52 case SVX_NUM_CHARS_UPPER_LETTER: pFmtStr = OOO_STRING_SW_HTML_FF_uletter; break;
53 case SVX_NUM_CHARS_LOWER_LETTER: pFmtStr = OOO_STRING_SW_HTML_FF_lletter; break;
54 case SVX_NUM_ROMAN_UPPER: pFmtStr = OOO_STRING_SW_HTML_FF_uroman; break;
55 case SVX_NUM_ROMAN_LOWER: pFmtStr = OOO_STRING_SW_HTML_FF_lroman; break;
56 case SVX_NUM_ARABIC: pFmtStr = OOO_STRING_SW_HTML_FF_arabic; break;
57 case SVX_NUM_NUMBER_NONE: pFmtStr = OOO_STRING_SW_HTML_FF_none; break;
58 case SVX_NUM_CHAR_SPECIAL: pFmtStr = OOO_STRING_SW_HTML_FF_char; break;
59 case SVX_NUM_PAGEDESC: pFmtStr = OOO_STRING_SW_HTML_FF_page; break;
60 case SVX_NUM_CHARS_UPPER_LETTER_N: pFmtStr = OOO_STRING_SW_HTML_FF_ulettern; break;
61 case SVX_NUM_CHARS_LOWER_LETTER_N: pFmtStr = OOO_STRING_SW_HTML_FF_llettern; break;
62 default:
63 ;
64 }
65
66 return pFmtStr;
67 }
68
69 extern sal_Bool lcl_css1atr_equalFontItems( const SfxPoolItem& r1, const SfxPoolItem& r2 );
OutHTML_SwField(Writer & rWrt,const SwField * pFld,const SwTxtNode & rTxtNd,xub_StrLen nFldPos)70 static Writer& OutHTML_SwField( Writer& rWrt, const SwField* pFld,
71 const SwTxtNode& rTxtNd, xub_StrLen nFldPos )
72 {
73 SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
74
75 const SwFieldType* pFldTyp = pFld->GetTyp();
76 sal_uInt16 nField = pFldTyp->Which();
77 sal_uLong nFmt = pFld->GetFormat();
78
79 const sal_Char *pTypeStr=0, // TYPE
80 *pSubStr=0, // SUBTYPE
81 *pFmtStr=0; // FORMAT (SW)
82 String aValue; // VALUE (SW)
83 sal_Bool bNumFmt=sal_False; // SDNUM (Number-Formatter-Format)
84 sal_Bool bNumValue=sal_False; // SDVAL (Number-Formatter-Value)
85 double dNumValue = 0.0; // SDVAL (Number-Formatter-Value)
86 sal_Bool bFixed=sal_False; // SDFIXED
87 String aName; // NAME (CUSTOM)
88
89 switch( nField )
90 {
91 case RES_EXTUSERFLD:
92 pTypeStr = OOO_STRING_SW_HTML_FT_sender;
93 switch( (SwExtUserSubType)pFld->GetSubType() )
94 {
95 case EU_COMPANY: pSubStr = OOO_STRING_SW_HTML_FS_company; break;
96 case EU_FIRSTNAME: pSubStr = OOO_STRING_SW_HTML_FS_firstname; break;
97 case EU_NAME: pSubStr = OOO_STRING_SW_HTML_FS_name; break;
98 case EU_SHORTCUT: pSubStr = OOO_STRING_SW_HTML_FS_shortcut; break;
99 case EU_STREET: pSubStr = OOO_STRING_SW_HTML_FS_street; break;
100 case EU_COUNTRY: pSubStr = OOO_STRING_SW_HTML_FS_country; break;
101 case EU_ZIP: pSubStr = OOO_STRING_SW_HTML_FS_zip; break;
102 case EU_CITY: pSubStr = OOO_STRING_SW_HTML_FS_city; break;
103 case EU_TITLE: pSubStr = OOO_STRING_SW_HTML_FS_title; break;
104 case EU_POSITION: pSubStr = OOO_STRING_SW_HTML_FS_position; break;
105 case EU_PHONE_PRIVATE: pSubStr = OOO_STRING_SW_HTML_FS_pphone; break;
106 case EU_PHONE_COMPANY: pSubStr = OOO_STRING_SW_HTML_FS_cphone; break;
107 case EU_FAX: pSubStr = OOO_STRING_SW_HTML_FS_fax; break;
108 case EU_EMAIL: pSubStr = OOO_STRING_SW_HTML_FS_email; break;
109 case EU_STATE: pSubStr = OOO_STRING_SW_HTML_FS_state; break;
110 default:
111 ;
112 }
113 ASSERT( pSubStr, "ubekannter Subtyp fuer SwExtUserField" );
114 bFixed = ((const SwExtUserField*)pFld)->IsFixed();
115 break;
116
117 case RES_AUTHORFLD:
118 pTypeStr = OOO_STRING_SW_HTML_FT_author;
119 switch( (SwAuthorFormat)nFmt & 0xff)
120 {
121 case AF_NAME: pFmtStr = OOO_STRING_SW_HTML_FF_name; break;
122 case AF_SHORTCUT: pFmtStr = OOO_STRING_SW_HTML_FF_shortcut; break;
123 }
124 ASSERT( pFmtStr, "ubekanntes Format fuer SwAuthorField" );
125 bFixed = ((const SwAuthorField*)pFld)->IsFixed();
126 break;
127
128 case RES_DATETIMEFLD:
129 pTypeStr = OOO_STRING_SW_HTML_FT_datetime;
130 bNumFmt = sal_True;
131 if( ((SwDateTimeField*)pFld)->IsFixed() )
132 {
133 bNumValue = sal_True;
134 dNumValue = ((SwDateTimeField*)pFld)->GetValue();
135 }
136 break;
137
138 case RES_PAGENUMBERFLD:
139 {
140 pTypeStr = OOO_STRING_SW_HTML_FT_page;
141 SwPageNumSubType eSubType = (SwPageNumSubType)pFld->GetSubType();
142 switch( eSubType )
143 {
144 case PG_RANDOM: pSubStr = OOO_STRING_SW_HTML_FS_random; break;
145 case PG_NEXT: pSubStr = OOO_STRING_SW_HTML_FS_next; break;
146 case PG_PREV: pSubStr = OOO_STRING_SW_HTML_FS_prev; break;
147 }
148 ASSERT( pSubStr, "ubekannter Subtyp fuer SwPageNumberField" );
149 pFmtStr = SwHTMLWriter::GetNumFormat( static_cast< sal_uInt16 >(nFmt) );
150
151 if( (SvxExtNumType)nFmt==SVX_NUM_CHAR_SPECIAL )
152 {
153 aValue = ((const SwPageNumberField *)pFld)->GetUserString();
154 }
155 else
156 {
157 const String& rValue = pFld->GetPar2();
158 short nValue = (short)rValue.ToInt32();
159 if( (eSubType == PG_NEXT && nValue!=1) ||
160 (eSubType == PG_PREV && nValue!=-1) ||
161 (eSubType == PG_RANDOM && nValue!=0) )
162 {
163 aValue = rValue;
164 }
165 }
166 }
167 break;
168 case RES_DOCINFOFLD:
169 {
170 sal_uInt16 nSubType = pFld->GetSubType();
171 pTypeStr = OOO_STRING_SW_HTML_FT_docinfo;
172 sal_uInt16 nExtSubType = nSubType & 0x0f00;
173 nSubType &= 0x00ff;
174
175 switch( nSubType )
176 {
177 case DI_TITEL: pSubStr = OOO_STRING_SW_HTML_FS_title; break;
178 case DI_THEMA: pSubStr = OOO_STRING_SW_HTML_FS_theme; break;
179 case DI_KEYS: pSubStr = OOO_STRING_SW_HTML_FS_keys; break;
180 case DI_COMMENT: pSubStr = OOO_STRING_SW_HTML_FS_comment; break;
181 case DI_CREATE: pSubStr = OOO_STRING_SW_HTML_FS_create; break;
182 case DI_CHANGE: pSubStr = OOO_STRING_SW_HTML_FS_change; break;
183 case DI_CUSTOM: pSubStr = OOO_STRING_SW_HTML_FS_custom; break;
184 default: pTypeStr = 0; break;
185 }
186
187 if( DI_CUSTOM == nSubType ) {
188 aName = static_cast<const SwDocInfoField*>(pFld)->GetName();
189 }
190
191 if( DI_CREATE == nSubType || DI_CHANGE == nSubType )
192 {
193 switch( nExtSubType )
194 {
195 case DI_SUB_AUTHOR:
196 pFmtStr = OOO_STRING_SW_HTML_FF_author;
197 break;
198 case DI_SUB_TIME:
199 pFmtStr = OOO_STRING_SW_HTML_FF_time;
200 bNumFmt = sal_True;
201 break;
202 case DI_SUB_DATE:
203 pFmtStr = OOO_STRING_SW_HTML_FF_date;
204 bNumFmt = sal_True;
205 break;
206 }
207 }
208 bFixed = ((const SwDocInfoField*)pFld)->IsFixed();
209 if( bNumFmt )
210 {
211 if( bFixed )
212 {
213 // Fuer ein fixes Feld och den Num-Value ausgeben.
214 // Fixe Felder ohne Zahlenformate sollte es
215 // eigentlich nicht geben. ASSERT ist unten.
216 dNumValue = ((const SwDocInfoField*)pFld)->GetValue();
217 bNumValue = sal_True;
218 }
219 else if( !nFmt )
220 {
221 // Nicht fixe Felder muessen kein Zahlenformat haben,
222 // wenn sie aus 4.0-Dokumenten stammen.
223 bNumFmt = sal_False;
224 }
225 }
226 }
227 break;
228
229 case RES_DOCSTATFLD:
230 {
231 pTypeStr = OOO_STRING_SW_HTML_FT_docstat;
232 sal_uInt16 nSubType = pFld->GetSubType();
233 switch( nSubType )
234 {
235 case DS_PAGE: pSubStr = OOO_STRING_SW_HTML_FS_page; break;
236 case DS_PARA: pSubStr = OOO_STRING_SW_HTML_FS_para; break;
237 case DS_WORD: pSubStr = OOO_STRING_SW_HTML_FS_word; break;
238 case DS_CHAR: pSubStr = OOO_STRING_SW_HTML_FS_char; break;
239 case DS_TBL: pSubStr = OOO_STRING_SW_HTML_FS_tbl; break;
240 case DS_GRF: pSubStr = OOO_STRING_SW_HTML_FS_grf; break;
241 case DS_OLE: pSubStr = OOO_STRING_SW_HTML_FS_ole; break;
242 default: pTypeStr = 0; break;
243 }
244 pFmtStr = SwHTMLWriter::GetNumFormat( static_cast< sal_uInt16 >(nFmt) );
245 }
246 break;
247
248 case RES_FILENAMEFLD:
249 pTypeStr = OOO_STRING_SW_HTML_FT_filename;
250 switch( (SwFileNameFormat)(nFmt & ~FF_FIXED) )
251 {
252 case FF_NAME: pFmtStr = OOO_STRING_SW_HTML_FF_name; break;
253 case FF_PATHNAME: pFmtStr = OOO_STRING_SW_HTML_FF_pathname; break;
254 case FF_PATH: pFmtStr = OOO_STRING_SW_HTML_FF_path; break;
255 case FF_NAME_NOEXT: pFmtStr = OOO_STRING_SW_HTML_FF_name_noext; break;
256 default:
257 ;
258 }
259 bFixed = ((const SwFileNameField*)pFld)->IsFixed();
260 ASSERT( pFmtStr, "unbekanntes Format fuer SwFileNameField" );
261 break;
262 }
263
264 // <SDFIELD>-Tag ausgeben
265 if( pTypeStr )
266 {
267 ByteString sOut( '<' );
268 ((((sOut += OOO_STRING_SVTOOLS_HTML_sdfield) += ' ') += OOO_STRING_SVTOOLS_HTML_O_type) += '=')
269 += pTypeStr;
270 if( pSubStr )
271 (((sOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_subtype) += '=') += pSubStr;
272 if( pFmtStr )
273 (((sOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_format) += '=') += pFmtStr;
274 if( aName.Len() )
275 {
276 (((sOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_name) += "=\"");
277 rWrt.Strm() << sOut.GetBuffer();
278 HTMLOutFuncs::Out_String( rWrt.Strm(), aName, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
279 sOut = '\"';
280 }
281 if( aValue.Len() )
282 {
283 ((sOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_value) += "=\"";
284 rWrt.Strm() << sOut.GetBuffer();
285 HTMLOutFuncs::Out_String( rWrt.Strm(), aValue, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
286 sOut = '\"';
287 }
288 if( bNumFmt )
289 {
290 ASSERT( nFmt, "Zahlenformat ist 0" );
291 sOut = HTMLOutFuncs::CreateTableDataOptionsValNum( sOut,
292 bNumValue, dNumValue, nFmt,
293 *rHTMLWrt.pDoc->GetNumberFormatter(),
294 rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
295
296 }
297 if( bFixed )
298 (sOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_sdfixed;
299 sOut += '>';
300 rWrt.Strm() << sOut.GetBuffer();
301 }
302
303 // Inhalt des Feldes ausgeben
304 String const sExpand( pFld->ExpandField(true) );
305 sal_Bool bNeedsCJKProcessing = sal_False;
306 if( sExpand.Len() )
307 {
308 sal_uInt16 nScriptType = pBreakIt->GetBreakIter()->getScriptType( sExpand, 0 );
309 xub_StrLen nPos = (xub_StrLen)pBreakIt->GetBreakIter()->endOfScript( sExpand, 0,
310 nScriptType );
311
312 sal_uInt16 nScript =
313 SwHTMLWriter::GetCSS1ScriptForScriptType( nScriptType );
314 if( nPos < sExpand.Len() || nScript != rHTMLWrt.nCSS1Script )
315 {
316 bNeedsCJKProcessing = sal_True;
317 }
318 }
319
320 if( bNeedsCJKProcessing )
321 {
322 SfxItemSet aScriptItemSet( rWrt.pDoc->GetAttrPool(),
323 RES_CHRATR_FONT, RES_CHRATR_FONTSIZE,
324 RES_CHRATR_POSTURE, RES_CHRATR_POSTURE,
325 RES_CHRATR_WEIGHT, RES_CHRATR_WEIGHT,
326 RES_CHRATR_CJK_FONT, RES_CHRATR_CTL_WEIGHT,
327 0 );
328 rTxtNd.GetAttr( aScriptItemSet, nFldPos, nFldPos+1 );
329
330 sal_uInt16 aWesternWhichIds[4] =
331 { RES_CHRATR_FONT, RES_CHRATR_FONTSIZE,
332 RES_CHRATR_POSTURE, RES_CHRATR_WEIGHT };
333 sal_uInt16 aCJKWhichIds[4] =
334 { RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_FONTSIZE,
335 RES_CHRATR_CJK_POSTURE, RES_CHRATR_CJK_WEIGHT };
336 sal_uInt16 aCTLWhichIds[4] =
337 { RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_FONTSIZE,
338 RES_CHRATR_CTL_POSTURE, RES_CHRATR_CTL_WEIGHT };
339
340 sal_uInt16 *pRefWhichIds = 0;
341 switch( rHTMLWrt.nCSS1Script )
342 {
343 case CSS1_OUTMODE_WESTERN:
344 pRefWhichIds = aWesternWhichIds;
345 break;
346 case CSS1_OUTMODE_CJK:
347 pRefWhichIds = aCJKWhichIds;
348 break;
349 case CSS1_OUTMODE_CTL:
350 pRefWhichIds = aCTLWhichIds;
351 break;
352 }
353
354 xub_StrLen nPos = 0;
355 do
356 {
357 sal_uInt16 nScriptType = pBreakIt->GetBreakIter()->getScriptType( sExpand, nPos );
358 sal_uInt16 nScript =
359 SwHTMLWriter::GetCSS1ScriptForScriptType( nScriptType );
360 xub_StrLen nEndPos = (xub_StrLen)pBreakIt->GetBreakIter()->endOfScript(
361 sExpand, nPos, nScriptType );
362 if( nScript != CSS1_OUTMODE_ANY_SCRIPT &&
363 /* #108791# */ nScript != rHTMLWrt.nCSS1Script )
364 {
365 sal_uInt16 *pWhichIds = 0;
366 switch( nScript )
367 {
368 case CSS1_OUTMODE_WESTERN: pWhichIds = aWesternWhichIds; break;
369 case CSS1_OUTMODE_CJK: pWhichIds = aCJKWhichIds; break;
370 case CSS1_OUTMODE_CTL: pWhichIds = aCTLWhichIds; break;
371 }
372
373 rHTMLWrt.bTagOn = sal_True;
374 const SfxPoolItem *aItems[5];
375 sal_uInt16 nItems = 0;
376 for( sal_uInt16 i=0; i<4; i++ )
377 {
378 const SfxPoolItem *pRefItem =
379 aScriptItemSet.GetItem( pRefWhichIds[i] );
380 const SfxPoolItem *pItem =
381 aScriptItemSet.GetItem( pWhichIds[i] );
382 if( pRefItem && pItem &&
383 !(0==i ? lcl_css1atr_equalFontItems( *pRefItem, *pItem )
384 : *pRefItem == *pItem) )
385 {
386 Out( aHTMLAttrFnTab, *pItem, rHTMLWrt );
387 aItems[nItems++] = pItem;
388 }
389 }
390
391 HTMLOutFuncs::Out_String( rWrt.Strm(), sExpand.Copy( nPos, nEndPos ),
392 rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
393
394 rHTMLWrt.bTagOn = sal_False;
395 while( nItems )
396 Out( aHTMLAttrFnTab, *aItems[--nItems], rHTMLWrt );
397
398 }
399 else
400 {
401 HTMLOutFuncs::Out_String( rWrt.Strm(), sExpand.Copy( nPos, nEndPos ),
402 rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
403 }
404 nPos = nEndPos;
405 }
406 while( nPos < sExpand.Len() );
407 }
408 else
409 {
410 HTMLOutFuncs::Out_String( rWrt.Strm(), sExpand,
411 rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
412 }
413
414 // Off-Tag ausgeben
415 if( pTypeStr )
416 HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OOO_STRING_SVTOOLS_HTML_sdfield, sal_False );
417
418 return rWrt;
419 }
420
421
OutHTML_SwFmtFld(Writer & rWrt,const SfxPoolItem & rHt)422 Writer& OutHTML_SwFmtFld( Writer& rWrt, const SfxPoolItem& rHt )
423 {
424 SwFmtFld & rFld = (SwFmtFld&)rHt;
425 const SwField* pFld = rFld.GetField();
426 const SwFieldType* pFldTyp = pFld->GetTyp();
427
428 if( RES_SETEXPFLD == pFldTyp->Which() &&
429 (nsSwGetSetExpType::GSE_STRING & pFld->GetSubType()) )
430 {
431 int bOn = sal_False;
432 if( pFldTyp->GetName().EqualsAscii("HTML_ON" ) )
433 bOn = sal_True;
434 else if( !pFldTyp->GetName().EqualsAscii( "HTML_OFF" ) )
435 return rWrt;
436
437 String rTxt( pFld->GetPar2() );
438 rTxt.EraseLeadingChars().EraseTrailingChars();
439 rWrt.Strm() << '<';
440 if( !bOn )
441 rWrt.Strm() << '/';
442 // TODO: HTML-Tags are written without entitities, that for, characters
443 // not contained in the destination encoding are lost!
444 ByteString sTmp( rTxt, ((SwHTMLWriter&)rWrt).eDestEnc );
445 rWrt.Strm() << sTmp.GetBuffer() << '>';
446 }
447 else if( RES_POSTITFLD == pFldTyp->Which() )
448 {
449 // Kommentare werden im ANSI-Zeichensetz, aber mit System-Zeilen-
450 // Umbruechen gesschrieben.
451 const String& rComment = pFld->GetPar2();
452 sal_Bool bWritten = sal_False;
453
454 if( (rComment.Len() >= 6 && '<' == rComment.GetChar(0) &&
455 '>' == rComment.GetChar(rComment.Len()-1) &&
456 rComment.Copy( 1, 4 ).EqualsIgnoreCaseAscii(OOO_STRING_SVTOOLS_HTML_meta)) ||
457 (rComment.Len() >= 7 &&
458 rComment.Copy( 0, 4 ).EqualsAscii( "<!--" ) &&
459 rComment.Copy( rComment.Len()-3, 3 ).EqualsAscii( "-->" )) )
460 {
461 // META-Tags direkt ausgeben
462 String sComment( rComment );
463 sComment.ConvertLineEnd( GetSystemLineEnd() );
464 // TODO: HTML-Tags are written without entitities, that for,
465 // characters not contained in the destination encoding are lost!
466 ByteString sTmp( sComment, ((SwHTMLWriter&)rWrt).eDestEnc );
467 rWrt.Strm() << sTmp.GetBuffer();
468 bWritten = sal_True;
469 }
470 else if( rComment.Len() >= 7 &&
471 '>' == rComment.GetChar(rComment.Len()-1) &&
472 rComment.Copy(0,5).EqualsIgnoreCaseAscii("HTML:") )
473 {
474 String sComment( rComment.Copy(5) );
475 sComment.EraseLeadingChars();
476 if( '<' == sComment.GetChar(0) )
477 {
478 sComment.ConvertLineEnd( GetSystemLineEnd() );
479 // TODO: HTML-Tags are written without entitities, that for,
480 // characters not contained in the destination encoding are
481 // lost!
482 ByteString sTmp( sComment, ((SwHTMLWriter&)rWrt).eDestEnc );
483 rWrt.Strm() << sTmp.GetBuffer();
484 bWritten = sal_True;
485 }
486
487 }
488
489 if( !bWritten )
490 {
491 ByteString sOut( '<' );
492
493 String sComment( rComment );
494 sComment.ConvertLineEnd( GetSystemLineEnd() );
495 // TODO: ???
496 (((sOut += OOO_STRING_SVTOOLS_HTML_comment) += ' ')
497 += ByteString( sComment, ((SwHTMLWriter&)rWrt).eDestEnc ))
498 += " -->";
499 rWrt.Strm() << sOut.GetBuffer();
500 }
501 }
502 else if( RES_SCRIPTFLD == pFldTyp->Which() )
503 {
504 SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
505 if( rHTMLWrt.bLFPossible )
506 rHTMLWrt.OutNewLine( sal_True );
507
508 sal_Bool bURL = ((const SwScriptField *)pFld)->IsCodeURL();
509 const String& rType = pFld->GetPar1();
510 String aContents, aURL;
511 if(bURL)
512 aURL = pFld->GetPar2();
513 else
514 aContents = pFld->GetPar2();
515
516 // sonst ist es der Script-Inhalt selbst. Da nur noh JavaScript
517 // in Feldern landet, muss es sich um JavaSrript handeln ...:)
518 HTMLOutFuncs::OutScript( rWrt.Strm(), rWrt.GetBaseURL(), aContents, rType, JAVASCRIPT,
519 aURL, 0, 0, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
520
521 if( rHTMLWrt.bLFPossible )
522 rHTMLWrt.OutNewLine( sal_True );
523 }
524 else
525 {
526 const SwTxtFld *pTxtFld = rFld.GetTxtFld();
527 ASSERT( pTxtFld, "Where is the txt fld?" );
528 if( pTxtFld )
529 OutHTML_SwField( rWrt, pFld, pTxtFld->GetTxtNode(),
530 *pTxtFld->GetStart() );
531 }
532 return rWrt;
533 }
534
535
536