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 <svtools/htmlout.hxx>
30 : : #include <svtools/htmlkywd.hxx>
31 : : #include <rtl/strbuf.hxx>
32 : : #include <ndindex.hxx>
33 : : #include <fmtftn.hxx>
34 : : #include <txtftn.hxx>
35 : : #include <ftninfo.hxx>
36 : : #include <doc.hxx>
37 : : #include <ndtxt.hxx>
38 : : #include <charfmt.hxx>
39 : :
40 : : #include "swhtml.hxx"
41 : : #include "wrthtml.hxx"
42 : :
43 [ # # ][ # # ]: 0 : struct SwHTMLFootEndNote_Impl
[ # # ][ # # ]
[ # # ]
44 : : {
45 : : SwHTMLTxtFtns aTxtFtns;
46 : : std::vector<String> aNames;
47 : :
48 : : String sName;
49 : : String sContent; // Infos fuer die letzte Fussnote
50 : : sal_Bool bEndNote;
51 : : sal_Bool bFixed;
52 : : };
53 : :
54 : :
55 : 0 : xub_StrLen lcl_html_getNextPart( String& rPart, const String& rContent,
56 : : xub_StrLen nPos )
57 : : {
58 : 0 : rPart = aEmptyStr;
59 : 0 : xub_StrLen nLen = rContent.Len();
60 [ # # ]: 0 : if( nPos >= nLen )
61 : : {
62 : 0 : nPos = STRING_MAXLEN;
63 : : }
64 : : else
65 : : {
66 : 0 : sal_Bool bQuoted = sal_False, bDone = sal_False;
67 [ # # ][ # # ]: 0 : for( ; nPos < nLen && !bDone; nPos++ )
[ # # ]
68 : : {
69 : 0 : sal_Unicode c = rContent.GetChar( nPos );
70 [ # # # ]: 0 : switch( c )
71 : : {
72 : : case '\\':
73 [ # # ]: 0 : if( bQuoted )
74 : 0 : rPart += c;
75 : 0 : bQuoted = !bQuoted;
76 : 0 : break;
77 : :
78 : : case ';':
79 [ # # ]: 0 : if( bQuoted )
80 : 0 : rPart += c;
81 : : else
82 : 0 : bDone = sal_True;
83 : 0 : bQuoted = sal_False;
84 : 0 : break;
85 : :
86 : : default:
87 : 0 : rPart += c;
88 : 0 : bQuoted = sal_False;
89 : 0 : break;
90 : : }
91 : : }
92 : : }
93 : :
94 : 0 : return nPos;
95 : : }
96 : :
97 : 0 : xub_StrLen lcl_html_getEndNoteInfo( SwEndNoteInfo& rInfo,
98 : : const String& rContent,
99 : : sal_Bool bEndNote )
100 : : {
101 : 0 : xub_StrLen nStrPos = 0;
102 [ # # ]: 0 : for( sal_uInt16 nPart = 0; nPart < 4; nPart++ )
103 : : {
104 [ # # ]: 0 : String aPart;
105 [ # # ]: 0 : if( STRING_MAXLEN != nStrPos )
106 [ # # ]: 0 : nStrPos = lcl_html_getNextPart( aPart, rContent, nStrPos );
107 : :
108 [ # # # # : 0 : switch( nPart )
# ]
109 : : {
110 : : case 0:
111 [ # # ]: 0 : rInfo.aFmt.SetNumberingType( static_cast< sal_Int16 >(bEndNote ? SVX_NUM_ROMAN_LOWER : SVX_NUM_ARABIC));
112 [ # # ]: 0 : if( aPart.Len() )
113 : : rInfo.aFmt.SetNumberingType(SwHTMLParser::GetNumType( aPart,
114 [ # # ]: 0 : rInfo.aFmt.GetNumberingType() ));
115 : 0 : break;
116 : :
117 : : case 1:
118 [ # # ][ # # ]: 0 : rInfo.nFtnOffset = aPart.Len() == 0 ? 0 : (sal_uInt16)aPart.ToInt32();
119 : 0 : break;
120 : :
121 : : case 2:
122 [ # # ]: 0 : rInfo.SetPrefix( aPart );
123 : 0 : break;
124 : :
125 : : case 3:
126 [ # # ]: 0 : rInfo.SetSuffix( aPart );
127 : 0 : break;
128 : : }
129 [ # # ]: 0 : }
130 : :
131 : 0 : return nStrPos;
132 : : }
133 : :
134 : 0 : void SwHTMLParser::FillEndNoteInfo( const String& rContent )
135 : : {
136 [ # # ]: 0 : SwEndNoteInfo aInfo( pDoc->GetEndNoteInfo() );
137 [ # # ]: 0 : lcl_html_getEndNoteInfo( aInfo, rContent, sal_True );
138 [ # # ][ # # ]: 0 : pDoc->SetEndNoteInfo( aInfo );
139 : 0 : }
140 : :
141 : 0 : void SwHTMLParser::FillFootNoteInfo( const String& rContent )
142 : : {
143 [ # # ]: 0 : SwFtnInfo aInfo( pDoc->GetFtnInfo() );
144 : :
145 [ # # ]: 0 : xub_StrLen nStrPos = lcl_html_getEndNoteInfo( aInfo, rContent, sal_False );
146 : :
147 [ # # ]: 0 : for( sal_uInt16 nPart = 4; nPart < 8; nPart++ )
148 : : {
149 [ # # ]: 0 : String aPart;
150 [ # # ]: 0 : if( STRING_MAXLEN != nStrPos )
151 [ # # ]: 0 : nStrPos = lcl_html_getNextPart( aPart, rContent, nStrPos );
152 : :
153 [ # # # # : 0 : switch( nPart )
# ]
154 : : {
155 : : case 4:
156 : 0 : aInfo.eNum = FTNNUM_DOC;
157 [ # # ]: 0 : if( aPart.Len() )
158 : : {
159 [ # # # # ]: 0 : switch( aPart.GetChar(0) )
160 : : {
161 : 0 : case 'D': aInfo.eNum = FTNNUM_DOC; break;
162 : 0 : case 'C': aInfo.eNum = FTNNUM_CHAPTER; break;
163 : 0 : case 'P': aInfo.eNum = FTNNUM_PAGE; break;
164 : : }
165 : : }
166 : 0 : break;
167 : :
168 : : case 5:
169 : 0 : aInfo.ePos = FTNPOS_PAGE;
170 [ # # ]: 0 : if( aPart.Len() )
171 : : {
172 [ # # # ]: 0 : switch( aPart.GetChar(0) )
173 : : {
174 : 0 : case 'C': aInfo.ePos = FTNPOS_CHAPTER; break;
175 : 0 : case 'P': aInfo.ePos = FTNPOS_PAGE; break;
176 : : }
177 : : }
178 : 0 : break;
179 : :
180 : : case 6:
181 [ # # ]: 0 : aInfo.aQuoVadis = aPart;
182 : 0 : break;
183 : :
184 : : case 7:
185 [ # # ]: 0 : aInfo.aErgoSum = aPart;
186 : 0 : break;
187 : : }
188 [ # # ]: 0 : }
189 : :
190 [ # # ][ # # ]: 0 : pDoc->SetFtnInfo( aInfo );
191 : 0 : }
192 : :
193 : 0 : void SwHTMLParser::InsertFootEndNote( const String& rName, sal_Bool bEndNote,
194 : : sal_Bool bFixed )
195 : : {
196 [ # # ]: 0 : if( !pFootEndNoteImpl )
197 [ # # ]: 0 : pFootEndNoteImpl = new SwHTMLFootEndNote_Impl;
198 : :
199 : 0 : pFootEndNoteImpl->sName = rName;
200 [ # # ]: 0 : if( pFootEndNoteImpl->sName.Len() > 3 )
201 : 0 : pFootEndNoteImpl->sName.Erase( pFootEndNoteImpl->sName.Len() - 3 );
202 : : // TODO: ToUpperAscii???
203 : 0 : pFootEndNoteImpl->sName.ToUpperAscii();
204 : :
205 : 0 : pFootEndNoteImpl->bEndNote = bEndNote;
206 : 0 : pFootEndNoteImpl->bFixed = bFixed;
207 : 0 : pFootEndNoteImpl->sContent = aEmptyStr;
208 : 0 : }
209 : :
210 : 0 : void SwHTMLParser::FinishFootEndNote()
211 : : {
212 [ # # ]: 0 : if( !pFootEndNoteImpl )
213 : 0 : return;
214 : :
215 [ # # ]: 0 : SwFmtFtn aFtn( pFootEndNoteImpl->bEndNote );
216 [ # # ]: 0 : if( pFootEndNoteImpl->bFixed )
217 [ # # ]: 0 : aFtn.SetNumStr( pFootEndNoteImpl->sContent );
218 : :
219 [ # # ]: 0 : pDoc->InsertPoolItem( *pPam, aFtn, 0 );
220 : : SwTxtFtn * const pTxtFtn = static_cast<SwTxtFtn *>(
221 : : pPam->GetNode()->GetTxtNode()->GetTxtAttrForCharAt(
222 [ # # ]: 0 : pPam->GetPoint()->nContent.GetIndex() - 1, RES_TXTATR_FTN ) );
223 : : // In Kopf- und Fusszeilen duerfen keine Fussnoten eingefuegt werden.
224 [ # # ]: 0 : if( pTxtFtn )
225 : : {
226 [ # # ]: 0 : pFootEndNoteImpl->aTxtFtns.push_back( pTxtFtn );
227 [ # # ]: 0 : pFootEndNoteImpl->aNames.push_back(pFootEndNoteImpl->sName);
228 : : }
229 [ # # ]: 0 : pFootEndNoteImpl->sName = aEmptyStr;
230 [ # # ]: 0 : pFootEndNoteImpl->sContent = aEmptyStr;
231 [ # # ]: 0 : pFootEndNoteImpl->bFixed = sal_False;
232 : : }
233 : :
234 : 0 : void SwHTMLParser::InsertFootEndNoteText()
235 : : {
236 [ # # ][ # # ]: 0 : if( pFootEndNoteImpl && pFootEndNoteImpl->bFixed )
237 : 0 : pFootEndNoteImpl->sContent += aToken;
238 : 0 : }
239 : :
240 : 2 : void SwHTMLParser::DeleteFootEndNoteImpl()
241 : : {
242 [ - + ]: 2 : delete pFootEndNoteImpl;
243 : 2 : pFootEndNoteImpl = 0;
244 : 2 : }
245 : :
246 : 0 : SwNodeIndex *SwHTMLParser::GetFootEndNoteSection( const String& rName )
247 : : {
248 : 0 : SwNodeIndex *pStartNodeIdx = 0;
249 : :
250 [ # # ]: 0 : if( pFootEndNoteImpl )
251 : : {
252 [ # # ]: 0 : String aName( rName );
253 [ # # ]: 0 : aName.ToUpperAscii();
254 : :
255 : 0 : size_t nCount = pFootEndNoteImpl->aNames.size();
256 [ # # ]: 0 : for(size_t i = 0; i < nCount; ++i)
257 : : {
258 [ # # ][ # # ]: 0 : if(pFootEndNoteImpl->aNames[i] == aName)
[ # # ]
259 : : {
260 [ # # ]: 0 : pStartNodeIdx = pFootEndNoteImpl->aTxtFtns[i]->GetStartNode();
261 [ # # ][ # # ]: 0 : pFootEndNoteImpl->aNames.erase(pFootEndNoteImpl->aNames.begin() + i);
262 [ # # ][ # # ]: 0 : pFootEndNoteImpl->aTxtFtns.erase( pFootEndNoteImpl->aTxtFtns.begin() + i );
263 [ # # ]: 0 : if(pFootEndNoteImpl->aNames.empty())
264 : : {
265 [ # # ][ # # ]: 0 : delete pFootEndNoteImpl;
266 : 0 : pFootEndNoteImpl = 0;
267 : : }
268 : :
269 : 0 : break;
270 : : }
271 [ # # ]: 0 : }
272 : : }
273 : :
274 : 0 : return pStartNodeIdx;
275 : : }
276 : :
277 : 0 : Writer& OutHTML_SwFmtFtn( Writer& rWrt, const SfxPoolItem& rHt )
278 : : {
279 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
280 : :
281 : 0 : SwFmtFtn& rFmtFtn = (SwFmtFtn&)rHt;
282 : 0 : SwTxtFtn *pTxtFtn = rFmtFtn.GetTxtFtn();
283 [ # # ]: 0 : if( !pTxtFtn )
284 : 0 : return rWrt;
285 : :
286 [ # # ][ # # ]: 0 : String sFtnName, sClass;
287 : : sal_uInt16 nPos;
288 [ # # ]: 0 : if( rFmtFtn.IsEndNote() )
289 : : {
290 [ # # ]: 0 : nPos = rHTMLWrt.pFootEndNotes ? rHTMLWrt.pFootEndNotes->size() : 0;
291 : : OSL_ENSURE( nPos == rHTMLWrt.nFootNote + rHTMLWrt.nEndNote,
292 : : "OutHTML_SwFmtFtn: Position falsch" );
293 [ # # ]: 0 : sClass.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdendnote_anc );
294 [ # # ]: 0 : sFtnName.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdendnote );
295 [ # # ][ # # ]: 0 : sFtnName += String::CreateFromInt32( (sal_Int32)(++rHTMLWrt.nEndNote) );
[ # # ]
296 : : }
297 : : else
298 : : {
299 : 0 : nPos = rHTMLWrt.nFootNote;
300 [ # # ]: 0 : sClass.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdfootnote_anc );
301 [ # # ]: 0 : sFtnName.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdfootnote);
302 [ # # ][ # # ]: 0 : sFtnName += String::CreateFromInt32( (sal_Int32)(++rHTMLWrt.nFootNote));
[ # # ]
303 : : }
304 : :
305 [ # # ]: 0 : if( !rHTMLWrt.pFootEndNotes )
306 [ # # ][ # # ]: 0 : rHTMLWrt.pFootEndNotes = new SwHTMLTxtFtns;
307 [ # # ][ # # ]: 0 : rHTMLWrt.pFootEndNotes->insert( rHTMLWrt.pFootEndNotes->begin() + nPos, pTxtFtn );
308 : :
309 : 0 : rtl::OStringBuffer sOut;
310 [ # # ][ # # ]: 0 : sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_anchor).append(' ')
[ # # ]
311 [ # # ][ # # ]: 0 : .append(OOO_STRING_SVTOOLS_HTML_O_class).append("=\"");
312 [ # # ][ # # ]: 0 : rWrt.Strm() << sOut.makeStringAndClear().getStr();
313 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_String( rWrt.Strm(), sClass, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
314 [ # # ][ # # ]: 0 : sOut.append("\" ").append(OOO_STRING_SVTOOLS_HTML_O_name).append("=\"");
[ # # ]
315 [ # # ][ # # ]: 0 : rWrt.Strm() << sOut.makeStringAndClear().getStr();
316 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_String( rWrt.Strm(), sFtnName, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
317 [ # # ][ # # ]: 0 : sOut.append(OOO_STRING_SVTOOLS_HTML_FTN_anchor).append("\" ")
318 [ # # ][ # # ]: 0 : .append(OOO_STRING_SVTOOLS_HTML_O_href).append("=\"#");
319 [ # # ][ # # ]: 0 : rWrt.Strm() << sOut.makeStringAndClear().getStr();
320 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_String( rWrt.Strm(), sFtnName, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
321 [ # # ][ # # ]: 0 : sOut.append(OOO_STRING_SVTOOLS_HTML_FTN_symbol).append('\"');
322 [ # # ]: 0 : if( rFmtFtn.GetNumStr().Len() )
323 [ # # ][ # # ]: 0 : sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_sdfixed);
324 [ # # ]: 0 : sOut.append('>');
325 [ # # ][ # # ]: 0 : rWrt.Strm() << sOut.makeStringAndClear().getStr();
326 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OOO_STRING_SVTOOLS_HTML_superscript, sal_True );
327 : :
328 [ # # ]: 0 : HTMLOutFuncs::Out_String( rWrt.Strm(), rFmtFtn.GetViewNumStr(*rWrt.pDoc),
329 [ # # ][ # # ]: 0 : rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
[ # # ]
330 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OOO_STRING_SVTOOLS_HTML_superscript, sal_False );
331 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OOO_STRING_SVTOOLS_HTML_anchor, sal_False );
332 : :
333 [ # # ][ # # ]: 0 : return rWrt;
334 : : }
335 : :
336 : 0 : void SwHTMLWriter::OutFootEndNotes()
337 : : {
338 : : OSL_ENSURE( pFootEndNotes,
339 : : "SwHTMLWriter::OutFootEndNotes(): unnoetiger Aufruf" );
340 [ # # ]: 0 : if( !pFootEndNotes )
341 : 0 : return;
342 : :
343 : : #if OSL_DEBUG_LEVEL > 0
344 : : sal_uInt16 nFtn = nFootNote, nEn = nEndNote;
345 : : #endif
346 : 0 : nFootNote = 0, nEndNote = 0;
347 : :
348 [ # # ]: 0 : for( sal_uInt16 i=0; i<pFootEndNotes->size(); i++ )
349 : : {
350 [ # # ]: 0 : SwTxtFtn *pTxtFtn = (*pFootEndNotes)[i];
351 : 0 : pFmtFtn = &pTxtFtn->GetFtn();
352 : :
353 [ # # ][ # # ]: 0 : String sFtnName, sClass;
354 [ # # ]: 0 : if( pFmtFtn->IsEndNote() )
355 : : {
356 [ # # ]: 0 : sClass.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdendnote );
357 [ # # ]: 0 : sFtnName.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdendnote );
358 [ # # ][ # # ]: 0 : sFtnName.Append( String::CreateFromInt32((sal_Int32)(++nEndNote)) );
[ # # ]
359 : : }
360 : : else
361 : : {
362 [ # # ]: 0 : sClass.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdfootnote );
363 [ # # ]: 0 : sFtnName.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdfootnote );
364 [ # # ][ # # ]: 0 : sFtnName.Append( String::CreateFromInt32((sal_Int32)(++nFootNote)));
[ # # ]
365 : : }
366 : :
367 [ # # ]: 0 : if( bLFPossible )
368 [ # # ]: 0 : OutNewLine();
369 : 0 : rtl::OStringBuffer sOut;
370 [ # # ][ # # ]: 0 : sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_division)
371 [ # # ][ # # ]: 0 : .append(' ').append(OOO_STRING_SVTOOLS_HTML_O_id).append("=\"");
[ # # ]
372 [ # # ][ # # ]: 0 : Strm() << sOut.makeStringAndClear().getStr();
373 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_String( Strm(), sFtnName, eDestEnc, &aNonConvertableCharacters );
374 [ # # ][ # # ]: 0 : Strm() << "\">";
375 : :
376 : 0 : bLFPossible = sal_True;
377 : 0 : IncIndentLevel(); // Inhalt von <DIV> einruecken
378 : :
379 : : OSL_ENSURE( pTxtFtn, "SwHTMLWriter::OutFootEndNotes: SwTxtFtn fehlt" );
380 : 0 : SwNodeIndex *pSttNdIdx = pTxtFtn->GetStartNode();
381 : : OSL_ENSURE( pSttNdIdx,
382 : : "SwHTMLWriter::OutFootEndNotes: StartNode-Index fehlt" );
383 [ # # ]: 0 : if( pSttNdIdx )
384 : : {
385 : 0 : HTMLSaveData aSaveData( *this, pSttNdIdx->GetIndex()+1,
386 [ # # ]: 0 : pSttNdIdx->GetNode().EndOfSectionIndex(), sal_False );
387 [ # # ][ # # ]: 0 : Out_SwDoc( pCurPam );
388 : : }
389 : :
390 : 0 : DecIndentLevel(); // Inhalt von <DIV> einruecken
391 [ # # ]: 0 : if( bLFPossible )
392 [ # # ]: 0 : OutNewLine();
393 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_AsciiTag( Strm(), OOO_STRING_SVTOOLS_HTML_division, sal_False );
394 : 0 : bLFPossible = sal_True;
395 : :
396 : : OSL_ENSURE( !pFmtFtn,
397 : : "SwHTMLWriter::OutFootEndNotes: Ftn wurde nicht ausgegeben" );
398 [ # # ]: 0 : if( pFmtFtn )
399 : : {
400 [ # # ]: 0 : if( pFmtFtn->IsEndNote() )
401 : 0 : nEndNote++;
402 : : else
403 : 0 : nFootNote++;
404 : :
405 : 0 : pFmtFtn = 0;
406 : : }
407 [ # # ][ # # ]: 0 : }
408 : :
409 : : #if OSL_DEBUG_LEVEL > 0
410 : : OSL_ENSURE( nFtn == nFootNote,
411 : : "SwHTMLWriter::OutFootEndNotes: Anzahl Fussnoten stimmt nicht" );
412 : : OSL_ENSURE( nEn == nEndNote,
413 : : "SwHTMLWriter::OutFootEndNotes: Anzahl Endnoten stimmt nicht" );
414 : : #endif
415 : :
416 [ # # ]: 0 : delete pFootEndNotes;
417 : 0 : pFootEndNotes = 0;
418 : 0 : nFootNote = nEndNote = 0;
419 : : }
420 : :
421 : 0 : String SwHTMLWriter::GetFootEndNoteSym( const SwFmtFtn& rFmtFtn )
422 : : {
423 : 0 : const SwEndNoteInfo * pInfo = 0;
424 [ # # ]: 0 : if( rFmtFtn.GetNumStr().Len() == 0 )
425 : 0 : pInfo = rFmtFtn.IsEndNote() ? &pDoc->GetEndNoteInfo()
426 [ # # ]: 0 : : &pDoc->GetFtnInfo();
427 : :
428 : 0 : String sRet;
429 [ # # ]: 0 : if( pInfo )
430 [ # # ]: 0 : sRet = pInfo->GetPrefix();
431 [ # # ][ # # ]: 0 : sRet += rFmtFtn.GetViewNumStr( *pDoc );
[ # # ]
432 [ # # ]: 0 : if( pInfo )
433 [ # # ]: 0 : sRet += pInfo->GetSuffix();
434 : :
435 : 0 : return sRet;
436 : : }
437 : :
438 : 0 : void SwHTMLWriter::OutFootEndNoteSym( const SwFmtFtn& rFmtFtn,
439 : : const String& rNum,
440 : : sal_uInt16 nScript )
441 : : {
442 : : const SwEndNoteInfo *pInfo;
443 : :
444 [ # # ][ # # ]: 0 : String sFtnName, sClass, sPrefix, sSuffix;
[ # # ][ # # ]
445 [ # # ]: 0 : if( rFmtFtn.IsEndNote() )
446 : : {
447 [ # # ]: 0 : sClass.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdendnote_sym );
448 [ # # ]: 0 : sFtnName.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdendnote );
449 [ # # ][ # # ]: 0 : sFtnName.Append( String::CreateFromInt32((sal_Int32)nEndNote) );
[ # # ]
450 : 0 : pInfo = &pDoc->GetEndNoteInfo();
451 : : }
452 : : else
453 : : {
454 [ # # ]: 0 : sClass.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdfootnote_sym );
455 [ # # ]: 0 : sFtnName.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdfootnote );
456 [ # # ][ # # ]: 0 : sFtnName.Append( String::CreateFromInt32((sal_Int32)nFootNote));
[ # # ]
457 : 0 : pInfo = &pDoc->GetFtnInfo();
458 : : }
459 : :
460 [ # # ]: 0 : const SwCharFmt *pSymCharFmt = pInfo->GetCharFmt( *pDoc );
461 [ # # ][ # # ]: 0 : if( pSymCharFmt && 0 != aScriptTextStyles.count( pSymCharFmt->GetName() ) )
[ # # ][ # # ]
462 : : {
463 [ # # # # ]: 0 : switch( nScript )
464 : : {
465 : : case CSS1_OUTMODE_WESTERN:
466 [ # # ]: 0 : sClass.AppendAscii( RTL_CONSTASCII_STRINGPARAM("-western") );
467 : 0 : break;
468 : : case CSS1_OUTMODE_CJK:
469 [ # # ]: 0 : sClass.AppendAscii( RTL_CONSTASCII_STRINGPARAM("-cjk") );
470 : 0 : break;
471 : : case CSS1_OUTMODE_CTL:
472 [ # # ]: 0 : sClass.AppendAscii( RTL_CONSTASCII_STRINGPARAM("-ctl") );
473 : 0 : break;
474 : : }
475 : : }
476 : :
477 : 0 : rtl::OStringBuffer sOut;
478 [ # # ][ # # ]: 0 : sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_anchor).append(' ')
[ # # ]
479 [ # # ][ # # ]: 0 : .append(OOO_STRING_SVTOOLS_HTML_O_class).append("=\"");
480 [ # # ][ # # ]: 0 : Strm() << sOut.makeStringAndClear().getStr();
481 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_String( Strm(), sClass, eDestEnc, &aNonConvertableCharacters );
482 [ # # ][ # # ]: 0 : sOut.append("\" ").append(OOO_STRING_SVTOOLS_HTML_O_name).append("=\"");
[ # # ]
483 [ # # ][ # # ]: 0 : Strm() << sOut.makeStringAndClear().getStr();
484 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_String( Strm(), sFtnName, eDestEnc, &aNonConvertableCharacters );
485 [ # # ][ # # ]: 0 : sOut.append(OOO_STRING_SVTOOLS_HTML_FTN_symbol).append("\" ")
486 [ # # ][ # # ]: 0 : .append(OOO_STRING_SVTOOLS_HTML_O_href).append("=\"#");
487 [ # # ][ # # ]: 0 : Strm() << sOut.makeStringAndClear().getStr();
488 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_String( Strm(), sFtnName, eDestEnc, &aNonConvertableCharacters );
489 [ # # ][ # # ]: 0 : sOut.append(OOO_STRING_SVTOOLS_HTML_FTN_anchor).append("\">");
490 [ # # ][ # # ]: 0 : Strm() << sOut.makeStringAndClear().getStr();
491 : :
492 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_String( Strm(), rNum, eDestEnc, &aNonConvertableCharacters );
493 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_AsciiTag( Strm(), OOO_STRING_SVTOOLS_HTML_anchor, sal_False );
[ # # ][ # # ]
[ # # ][ # # ]
494 : 0 : }
495 : :
496 : 4 : sal_uInt16 lcl_html_fillEndNoteInfo( const SwEndNoteInfo& rInfo,
497 : : String *pParts,
498 : : sal_Bool bEndNote )
499 : : {
500 : 4 : sal_uInt16 nParts = 0;
501 : 4 : sal_Int16 eFmt = rInfo.aFmt.GetNumberingType();
502 [ - + ][ + + ]: 4 : if( (bEndNote ? SVX_NUM_ROMAN_LOWER : SVX_NUM_ARABIC) != eFmt )
503 : : {
504 : 0 : const sal_Char *pStr = SwHTMLWriter::GetNumFormat( eFmt );
505 [ # # ]: 0 : if( pStr )
506 : : {
507 [ # # ]: 0 : pParts[0] = rtl::OUString::createFromAscii( pStr );
508 : 0 : nParts = 1;
509 : : }
510 : : }
511 [ - + ]: 4 : if( rInfo.nFtnOffset > 0 )
512 : : {
513 [ # # ]: 0 : pParts[1] = rtl::OUString::valueOf(static_cast<sal_Int32>(rInfo.nFtnOffset));
514 : 0 : nParts = 2;
515 : : }
516 [ - + ]: 4 : if( !rInfo.GetPrefix().isEmpty() )
517 : : {
518 : 0 : pParts[2] = rInfo.GetPrefix();
519 : 0 : nParts = 3;
520 : : }
521 [ - + ]: 4 : if( !rInfo.GetSuffix().isEmpty() )
522 : : {
523 : 0 : pParts[3] = rInfo.GetSuffix();
524 : 0 : nParts = 4;
525 : : }
526 : :
527 : 4 : return nParts;
528 : : }
529 : :
530 : 0 : void lcl_html_outFootEndNoteInfo( Writer& rWrt, String *pParts,
531 : : sal_uInt16 nParts, const sal_Char *pName )
532 : : {
533 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
534 : :
535 [ # # ]: 0 : String aContent;
536 [ # # ]: 0 : for( sal_uInt16 i=0; i<nParts; i++ )
537 : : {
538 : 0 : xub_StrLen nPos = 0;
539 [ # # ]: 0 : String aTmp( pParts[i] );
540 : 0 : rtl::OUString aRep("\\\\");
541 [ # # ][ # # ]: 0 : while( STRING_NOTFOUND != (nPos = aTmp.SearchAndReplaceAscii( "\\",
542 [ # # ][ # # ]: 0 : aRep, nPos ) ) )
543 : 0 : nPos += 2;
544 : 0 : nPos = 0;
545 : 0 : aRep = rtl::OUString("\\;");
546 [ # # ][ # # ]: 0 : while( STRING_NOTFOUND != (nPos = aTmp.SearchAndReplaceAscii( ";",
547 [ # # ][ # # ]: 0 : aRep, nPos ) ) )
548 : 0 : nPos += 2;
549 [ # # ]: 0 : if( i > 0 )
550 [ # # ]: 0 : aContent += ';';
551 [ # # ]: 0 : aContent += aTmp;
552 [ # # ]: 0 : }
553 : :
554 [ # # ]: 0 : rHTMLWrt.OutNewLine();
555 : 0 : rtl::OStringBuffer sOut;
556 [ # # ][ # # ]: 0 : sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_meta).append(' ')
[ # # ]
557 [ # # ][ # # ]: 0 : .append(OOO_STRING_SVTOOLS_HTML_O_name).append("=\"").append(pName)
[ # # ]
558 [ # # ][ # # ]: 0 : .append("\" ").append(OOO_STRING_SVTOOLS_HTML_O_content).append("=\"");
[ # # ]
559 [ # # ][ # # ]: 0 : rWrt.Strm() << sOut.makeStringAndClear().getStr();
560 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_String( rWrt.Strm(), aContent, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
561 [ # # ][ # # ]: 0 : rWrt.Strm() << "\">";
[ # # ]
562 : 0 : }
563 : :
564 : 2 : void SwHTMLWriter::OutFootEndNoteInfo()
565 : : {
566 : : // Nummerntyp (1 bzw. i)
567 : : // Offset (0)
568 : : // Davor
569 : : // Dahinter
570 : : // Dok/Seite/Kap (D)
571 : : // Position (S)
572 : : // Folgeseite
573 : : // Beginn
574 : :
575 : : {
576 : 2 : const SwFtnInfo& rInfo = pDoc->GetFtnInfo();
577 [ + - ][ + + ]: 34 : String aParts[8];
[ + - # #
# # ]
578 [ + - ]: 2 : sal_uInt16 nParts = lcl_html_fillEndNoteInfo( rInfo, aParts, sal_False );
579 [ - + ]: 2 : if( rInfo.eNum != FTNNUM_DOC )
580 : : {
581 [ # # ][ # # ]: 0 : aParts[4] = rInfo.eNum == FTNNUM_CHAPTER ? 'C' : 'P';
582 : 0 : nParts = 5;
583 : : }
584 [ - + ]: 2 : if( rInfo.ePos != FTNPOS_PAGE)
585 : : {
586 [ # # ]: 0 : aParts[5] = 'C';
587 : 0 : nParts = 6;
588 : : }
589 [ - + ]: 2 : if( rInfo.aQuoVadis.Len() > 0 )
590 : : {
591 [ # # ]: 0 : aParts[6] = rInfo.aQuoVadis;
592 : 0 : nParts = 7;
593 : : }
594 [ - + ]: 2 : if( rInfo.aErgoSum.Len() > 0 )
595 : : {
596 [ # # ]: 0 : aParts[7] = rInfo.aErgoSum;
597 : 0 : nParts = 8;
598 : : }
599 [ - + ]: 2 : if( nParts > 0 )
600 : : lcl_html_outFootEndNoteInfo( *this, aParts, nParts,
601 [ # # ][ + + ]: 18 : OOO_STRING_SVTOOLS_HTML_META_sdfootnote );
[ # # ]
602 : : }
603 : :
604 : : {
605 : 2 : const SwEndNoteInfo& rInfo = pDoc->GetEndNoteInfo();
606 [ + - ][ + + ]: 18 : String aParts[4];
[ + - # #
# # ]
607 [ + - ]: 2 : sal_uInt16 nParts = lcl_html_fillEndNoteInfo( rInfo, aParts, sal_True );
608 [ - + ]: 2 : if( nParts > 0 )
609 : : lcl_html_outFootEndNoteInfo( *this, aParts, nParts,
610 [ # # ][ + + ]: 10 : OOO_STRING_SVTOOLS_HTML_META_sdendnote );
[ # # ]
611 : : }
612 : 2 : }
613 : :
614 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|