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 #include "PageBordersHandler.hxx"
24 
25 #include <dmapper/DomainMapper.hxx>
26 #include <resourcemodel/ResourceModelHelper.hxx>
27 #include <DomainMapper_Impl.hxx>
28 #include <ConversionHelper.hxx>
29 #include <NumberingManager.hxx>
30 #include <ThemeTable.hxx>
31 #include <ModelEventListener.hxx>
32 #include <MeasureHandler.hxx>
33 #include <OLEHandler.hxx>
34 #include <i18npool/mslangid.hxx>
35 #include <i18npool/paper.hxx>
36 #include <ooxml/OOXMLFastTokens.hxx>
37 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
38 #include <com/sun/star/document/XOOXMLDocumentPropertiesImporter.hpp>
39 #include <com/sun/star/text/HoriOrientation.hpp>
40 #include <com/sun/star/text/RelOrientation.hpp>
41 #include <com/sun/star/text/VertOrientation.hpp>
42 #include <com/sun/star/text/WrapTextMode.hpp>
43 #include <com/sun/star/text/SizeType.hpp>
44 #include <com/sun/star/text/XEndnotesSupplier.hpp>
45 #include <com/sun/star/text/XFootnotesSupplier.hpp>
46 #include <com/sun/star/text/XLineNumberingProperties.hpp>
47 #include <com/sun/star/text/XTextDocument.hpp>
48 #include <com/sun/star/text/XTextCursor.hpp>
49 #include <com/sun/star/text/XTextPortionAppend.hpp>
50 #include <com/sun/star/text/XParagraphAppend.hpp>
51 #include <com/sun/star/text/FontEmphasis.hpp>
52 #include <com/sun/star/awt/FontRelief.hpp>
53 #include <com/sun/star/awt/FontWeight.hpp>
54 #include <com/sun/star/awt/FontUnderline.hpp>
55 #include <com/sun/star/awt/FontStrikeout.hpp>
56 #include <com/sun/star/awt/FontSlant.hpp>
57 #include <com/sun/star/container/XIndexReplace.hpp>
58 #include <com/sun/star/drawing/XShape.hpp>
59 #include <com/sun/star/document/XEventBroadcaster.hpp>
60 #include <com/sun/star/style/ParagraphAdjust.hpp>
61 #include <com/sun/star/style/BreakType.hpp>
62 #include <com/sun/star/style/CaseMap.hpp>
63 #include <com/sun/star/style/LineSpacing.hpp>
64 #include <com/sun/star/style/LineSpacingMode.hpp>
65 #include <com/sun/star/table/BorderLine.hpp>
66 #include <com/sun/star/text/TextGridMode.hpp>
67 #include <com/sun/star/text/XDocumentIndexesSupplier.hpp>
68 #include <com/sun/star/text/WritingMode.hpp>
69 #include <com/sun/star/text/WritingMode2.hpp>
70 #include <com/sun/star/text/XFootnote.hpp>
71 #include <com/sun/star/style/NumberingType.hpp>
72 #include <comphelper/types.hxx>
73 #include <comphelper/storagehelper.hxx>
74 
75 #include <rtl/ustrbuf.hxx>
76 #include <boost/shared_ptr.hpp>
77 #include <com/sun/star/uno/Any.hxx>
78 #include <tools/color.hxx>
79 #include <BorderHandler.hxx>
80 #include <CellColorHandler.hxx>
81 #include <SectionColumnHandler.hxx>
82 #include <vector>
83 #include <iostream>
84 
85 #if OSL_DEBUG_LEVEL > 0
86 #include <resourcemodel/QNameToString.hxx>
87 #endif
88 
89 #include <resourcemodel/TagLogger.hxx>
90 
91 using namespace ::com::sun::star;
92 using namespace ::rtl;
93 
94 namespace writerfilter {
95 
96 using resourcemodel::resolveSprmProps;
97 using resourcemodel::resolveAttributeProperties;
98 
99 namespace dmapper{
100 
101 TagLogger::Pointer_t dmapper_logger(TagLogger::getInstance("DOMAINMAPPER"));
102 
103 /* ---- Fridrich's mess begins here ---- */
104 struct _PageSz
105 {
106     sal_Int32 code;
107     sal_Int32 h;
108     bool      orient;
109     sal_Int32 w;
110 } CT_PageSz;
111 
112 
113 /* ---- Fridrich's mess (hopefully) ends here ---- */
114 
115 /*-- 09.06.2006 09:52:11---------------------------------------------------
116 
117   -----------------------------------------------------------------------*/
118 DomainMapper::DomainMapper( const uno::Reference< uno::XComponentContext >& xContext,
119                             uno::Reference< io::XInputStream > xInputStream,
120                             uno::Reference< lang::XComponent > xModel,
121                             SourceDocumentType eDocumentType) :
122     LoggedProperties(dmapper_logger, "DomainMapper"),
123     LoggedTable(dmapper_logger, "DomainMapper"),
124     LoggedStream(dmapper_logger, "DomainMapper"),
125     m_pImpl( new DomainMapper_Impl( *this, xContext, xModel, eDocumentType )),
126     mnBackgroundColor(0), mbIsHighlightSet(false)
127 {
128     // #i24363# tab stops relative to indent
129     m_pImpl->SetDocumentSettingsProperty(
130         PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_TABS_RELATIVE_TO_INDENT ),
131         uno::makeAny( false ) );
132 
133     m_pImpl->SetDocumentSettingsProperty(
134         PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_ADD_PARA_TABLE_SPACING ),
135         uno::makeAny( false ) );
136 
137 	//import document properties
138 
139 	try
140 	{
141 	    uno::Reference< lang::XMultiServiceFactory > xFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW);
142         uno::Reference< embed::XStorage > xDocumentStorage =
143             (comphelper::OStorageHelper::GetStorageOfFormatFromInputStream(OFOPXML_STORAGE_FORMAT_STRING, xInputStream));
144 
145         uno::Reference< uno::XInterface > xTemp = xContext->getServiceManager()->createInstanceWithContext(
146                                 ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.OOXMLDocumentPropertiesImporter")),
147                                 xContext);
148 
149         uno::Reference< document::XOOXMLDocumentPropertiesImporter > xImporter( xTemp, uno::UNO_QUERY_THROW );
150         uno::Reference< document::XDocumentPropertiesSupplier > xPropSupplier( xModel, uno::UNO_QUERY_THROW);
151         xImporter->importProperties( xDocumentStorage, xPropSupplier->getDocumentProperties() );
152 	}
153 	catch( const uno::Exception& rEx )
154 	{
155 	    (void)rEx;
156 	}
157 }
158 /*-- 09.06.2006 09:52:12---------------------------------------------------
159 
160 -----------------------------------------------------------------------*/
161 DomainMapper::~DomainMapper()
162 {
163     try
164     {
165         uno::Reference< text::XDocumentIndexesSupplier> xIndexesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
166         uno::Reference< container::XIndexAccess > xIndexes = xIndexesSupplier->getDocumentIndexes();
167         sal_Int32 nIndexes = xIndexes->getCount();
168         if( nIndexes )
169         {
170             //index update has to wait until first view is created
171             uno::Reference< document::XEventBroadcaster > xBroadcaster(xIndexesSupplier, uno::UNO_QUERY);
172             xBroadcaster->addEventListener(uno::Reference< document::XEventListener >(new ModelEventListener));
173         }
174 
175 
176         // Apply the document settings after everything else
177         m_pImpl->GetSettingsTable()->ApplyProperties( m_pImpl->GetTextDocument( ) );
178     }
179     catch( const uno::Exception& rEx )
180     {
181         (void)rEx;
182     }
183 
184     delete m_pImpl;
185 }
186 /*-- 09.06.2006 09:52:12---------------------------------------------------
187 
188 -----------------------------------------------------------------------*/
189 void DomainMapper::lcl_attribute(Id nName, Value & val)
190 {
191     static ::rtl::OUString sLocalBookmarkName;
192     sal_Int32 nIntValue = val.getInt();
193     rtl::OUString sStringValue = val.getString();
194 
195     SectionPropertyMap * pSectionContext = m_pImpl->GetSectionContext();
196 
197     // printf ( "DomainMapper::attribute(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nName, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
198     if( nName >= NS_rtf::LN_WIDENT && nName <= NS_rtf::LN_LCBSTTBFUSSR )
199         m_pImpl->GetFIB().SetData( nName, nIntValue );
200     else //if( !m_pImpl->getTableManager().attribute( nName, val) )
201     {
202 
203 
204         /* WRITERFILTERSTATUS: table: attributedata */
205         switch( nName )
206         {
207             /* attributes to be ignored */
208         case NS_rtf::LN_UNUSED1_3:
209             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
210 
211         case NS_rtf::LN_UNUSED1_7:
212             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
213 
214         case NS_rtf::LN_UNUSED8_3:
215             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
216 
217         case NS_rtf::LN_FWRITERESERVATION:
218             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
219 
220         case NS_rtf::LN_FLOADOVERRIDE:
221             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
222 
223         case NS_rtf::LN_FFAREAST:
224             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
225 
226         case NS_rtf::LN_FCRYPTO:
227             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
228 
229         case NS_rtf::LN_NFIBBACK:
230             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
231 
232         case NS_rtf::LN_LKEY:
233             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
234 
235         case NS_rtf::LN_ENVR:
236             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
237 
238         case NS_rtf::LN_FMAC:
239             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
240 
241         case NS_rtf::LN_FWORD97SAVED:
242             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
243 
244         case NS_rtf::LN_FCMAC:
245             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
246 
247         case NS_rtf::LN_PNFBPCHPFIRST_W6:
248             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
249 
250         case NS_rtf::LN_PNCHPFIRST_W6:
251             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
252 
253         case NS_rtf::LN_CPNBTECHP_W6:
254             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
255 
256         case NS_rtf::LN_PNFBPPAPFIRST_W6:
257             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
258 
259         case NS_rtf::LN_PNPAPFIRST_W6:
260             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
261 
262         case NS_rtf::LN_CPNBTEPAP_W6:
263             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
264 
265         case NS_rtf::LN_PNFBPLVCFIRST_W6:
266             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
267 
268         case NS_rtf::LN_PNLVCFIRST_W6:
269             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
270 
271         case NS_rtf::LN_CPNBTELVC_W6:
272             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
273 
274         case NS_rtf::LN_CBMAC:
275             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
276 
277         case NS_rtf::LN_LPRODUCTCREATED:
278             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
279 
280         case NS_rtf::LN_LPRODUCTREVISED:
281             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
282 
283         case NS_rtf::LN_CCPMCR:
284             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
285 
286         case NS_rtf::LN_PNFBPCHPFIRST:
287             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
288 
289         case NS_rtf::LN_PNFBPPAPFIRST:
290             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
291 
292         case NS_rtf::LN_PNFBPLVCFIRST:
293             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
294 
295         case NS_rtf::LN_FCISLANDFIRST:
296             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
297 
298         case NS_rtf::LN_FCISLANDLIM:
299             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
300 
301         case NS_rtf::LN_FCSTSHFORIG:
302             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
303 
304         case NS_rtf::LN_LCBSTSHFORIG:
305             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
306 
307         case NS_rtf::LN_FCPLCFPAD:
308             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
309 
310         case NS_rtf::LN_LCBPLCFPAD:
311             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
312 
313         case NS_rtf::LN_FCSTTBFGLSY:
314             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
315 
316         case NS_rtf::LN_LCBSTTBFGLSY:
317             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
318 
319         case NS_rtf::LN_FCPLCFGLSY:
320             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
321 
322         case NS_rtf::LN_LCBPLCFGLSY:
323             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
324 
325         case NS_rtf::LN_FCPLCFSEA:
326             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
327 
328         case NS_rtf::LN_LCBPLCFSEA:
329             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
330 
331         case NS_rtf::LN_FCPLCFFLDMCR:
332             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
333 
334         case NS_rtf::LN_LCBPLCFFLDMCR:
335             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
336 
337         case NS_rtf::LN_FCCMDS:
338             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
339 
340         case NS_rtf::LN_LCBCMDS:
341             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
342 
343         case NS_rtf::LN_FCPLCMCR:
344             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
345 
346         case NS_rtf::LN_LCBPLCMCR:
347             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
348 
349         case NS_rtf::LN_FCSTTBFMCR:
350             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
351 
352         case NS_rtf::LN_LCBSTTBFMCR:
353             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
354 
355         case NS_rtf::LN_FCPRDRVR:
356             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
357 
358         case NS_rtf::LN_LCBPRDRVR:
359             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
360 
361         case NS_rtf::LN_FCPRENVPORT:
362             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
363 
364         case NS_rtf::LN_LCBPRENVPORT:
365             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
366 
367         case NS_rtf::LN_FCPRENVLAND:
368             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
369 
370         case NS_rtf::LN_LCBPRENVLAND:
371             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
372 
373         case NS_rtf::LN_FCWSS:
374             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
375 
376         case NS_rtf::LN_LCBWSS:
377             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
378 
379         case NS_rtf::LN_FCPLCFPGDFTN:
380             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
381 
382         case NS_rtf::LN_LCBPLCFPGDFTN:
383             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
384 
385         case NS_rtf::LN_FCAUTOSAVESOURCE:
386             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
387 
388         case NS_rtf::LN_LCBAUTOSAVESOURCE:
389             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
390 
391         case NS_rtf::LN_FCPLCDOAMOM:
392             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
393 
394         case NS_rtf::LN_LCBPLCDOAMOM:
395             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
396 
397         case NS_rtf::LN_FCPLCDOAHDR:
398             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
399 
400         case NS_rtf::LN_LCBPLCDOAHDR:
401             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
402 
403         case NS_rtf::LN_FCPMS:
404             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
405 
406         case NS_rtf::LN_LCBPMS:
407             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
408 
409         case NS_rtf::LN_FCPLCFPGDEDN:
410             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
411 
412         case NS_rtf::LN_LCBPLCFPGDEDN:
413             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
414 
415         case NS_rtf::LN_FCPLCFWKB:
416             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
417 
418         case NS_rtf::LN_LCBPLCFWKB:
419             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
420 
421         case NS_rtf::LN_FCPLCFSPL:
422             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
423 
424         case NS_rtf::LN_LCBPLCFSPL:
425             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
426 
427         case NS_rtf::LN_FCSTWUSER:
428             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
429 
430         case NS_rtf::LN_LCBSTWUSER:
431             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
432 
433         case NS_rtf::LN_FCUNUSED:
434             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
435 
436         case NS_rtf::LN_LCBUNUSED:
437             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
438 
439         case NS_rtf::LN_FCSTTBFINTLFLD:
440             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
441 
442         case NS_rtf::LN_LCBSTTBFINTLFLD:
443             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
444 
445         case NS_rtf::LN_FCROUTESLIP:
446             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
447 
448         case NS_rtf::LN_LCBROUTESLIP:
449             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
450 
451         case NS_rtf::LN_FCSTTBSAVEDBY:
452             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
453 
454         case NS_rtf::LN_LCBSTTBSAVEDBY:
455             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
456 
457         case NS_rtf::LN_FCSTTBFNM:
458             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
459 
460         case NS_rtf::LN_LCBSTTBFNM:
461             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
462 
463         case NS_rtf::LN_FCDOCUNDO:
464             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
465 
466         case NS_rtf::LN_LCBDOCUNDO:
467             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
468 
469         case NS_rtf::LN_FCRGBUSE:
470             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
471 
472         case NS_rtf::LN_LCBRGBUSE:
473             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
474 
475         case NS_rtf::LN_FCUSP:
476             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
477 
478         case NS_rtf::LN_LCBUSP:
479             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
480 
481         case NS_rtf::LN_FCUSKF:
482             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
483 
484         case NS_rtf::LN_LCBUSKF:
485             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
486 
487         case NS_rtf::LN_FCPLCUPCRGBUSE:
488             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
489 
490         case NS_rtf::LN_LCBPLCUPCRGBUSE:
491             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
492 
493         case NS_rtf::LN_FCPLCUPCUSP:
494             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
495 
496         case NS_rtf::LN_LCBPLCUPCUSP:
497             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
498 
499         case NS_rtf::LN_FCPLGOSL:
500             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
501 
502         case NS_rtf::LN_LCBPLGOSL:
503             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
504 
505         case NS_rtf::LN_FCPLCOCX:
506             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
507 
508         case NS_rtf::LN_LCBPLCOCX:
509             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
510 
511         case NS_rtf::LN_DWLOWDATETIME:
512             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
513 
514         case NS_rtf::LN_DWHIGHDATETIME:
515             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
516 
517         case NS_rtf::LN_FCPLCASUMY:
518             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
519 
520         case NS_rtf::LN_LCBPLCASUMY:
521             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
522 
523         case NS_rtf::LN_FCPLCFGRAM:
524             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
525 
526         case NS_rtf::LN_LCBPLCFGRAM:
527             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
528 
529         case NS_rtf::LN_FCSTTBFUSSR:
530             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
531             break;
532 
533         case NS_rtf::LN_ISTD: //index of applied style
534             /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
535             {
536             //search for the style with the given id and apply it
537             //as CharStyleName or ParaStyleName
538             //if the style is a user defined style then it must have an ISTD - built-in styles might not have it
539             StyleSheetTablePtr pStyleSheets = m_pImpl->GetStyleSheetTable();
540             ::rtl::OUString sValue = ::rtl::OUString::valueOf(nIntValue, 16);
541             const StyleSheetEntryPtr pEntry = pStyleSheets->FindStyleSheetByISTD(sValue);
542             if( pEntry.get( ) )
543             {
544                 bool bParaStyle = (pEntry->nStyleTypeCode == STYLE_TYPE_PARA);
545                 if(bParaStyle)
546                     m_pImpl->SetCurrentParaStyleId(::rtl::OUString::valueOf(static_cast<sal_Int32>(nIntValue), 16));
547                 if (m_pImpl->GetTopContext() && m_pImpl->GetTopContextType() != CONTEXT_SECTION)
548 	                m_pImpl->GetTopContext()->Insert(
549                                                  bParaStyle ?
550                                                  PROP_PARA_STYLE_NAME  : PROP_CHAR_STYLE_NAME,
551                                                  true,
552                                                  uno::makeAny(
553                                                  m_pImpl->GetStyleSheetTable()->ConvertStyleName( pEntry->sStyleName ) ) );
554             }
555         }
556         break;
557         case NS_rtf::LN_ISTARTAT:
558             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
559             break;
560         case NS_rtf::LN_NFC:
561             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
562             break;
563         case NS_rtf::LN_FLEGAL:
564             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
565             break;
566         case NS_rtf::LN_FNORESTART:
567             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
568             break;
569         case NS_rtf::LN_FIDENTSAV:
570             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
571             break;
572         case NS_rtf::LN_FCONVERTED:
573             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
574             break;
575         case NS_rtf::LN_FTENTATIVE:
576             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
577             break;
578         case NS_rtf::LN_RGBXCHNUMS:
579             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
580             break;
581         case NS_rtf::LN_IXCHFOLLOW:
582             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
583             break;
584         case NS_rtf::LN_DXASPACE:
585             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
586             break;
587         case NS_rtf::LN_DXAINDENT:
588             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
589             break;
590         case NS_rtf::LN_CBGRPPRLCHPX:
591             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
592             break;
593         case NS_rtf::LN_CBGRPPRLPAPX:
594             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
595             break;
596         case NS_rtf::LN_LSID:
597             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
598             break;
599         case NS_rtf::LN_TPLC:
600             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
601             break;
602         case NS_rtf::LN_RGISTD:
603             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
604             break;
605         case NS_rtf::LN_FSIMPLELIST:
606             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
607             break;
608         case NS_rtf::LN_fAutoNum:
609             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
610             break;
611         case NS_rtf::LN_fHybrid:
612             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
613             break;
614         case NS_rtf::LN_ILVL:
615             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
616             break;
617         case NS_rtf::LN_FSTARTAT:
618             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
619             break;
620         case NS_rtf::LN_FFORMATTING:
621             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
622             break;
623         case NS_rtf::LN_UNSIGNED4_6:
624             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
625             break;
626         case NS_rtf::LN_clfolvl:
627             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
628             break;
629         case NS_rtf::LN_CBFFNM1:
630             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
631             break;
632         case NS_rtf::LN_PRQ:
633             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
634             break;
635         case NS_rtf::LN_FTRUETYPE:
636             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
637             break;
638         case NS_rtf::LN_FF:
639             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
640             break;
641         case NS_rtf::LN_WWEIGHT:
642             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
643             break;
644         case NS_rtf::LN_CHS:
645             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
646 
647             {
648                 m_pImpl->GetFIB().SetLNCHS( nIntValue );
649             }
650             break;
651         case NS_rtf::LN_IXCHSZALT:
652             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
653             break;
654         case NS_rtf::LN_PANOSE:
655             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
656             break;
657         case NS_rtf::LN_FS:
658             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
659             break;
660         case NS_rtf::LN_STI:
661             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
662             break;
663         case NS_rtf::LN_FSCRATCH:
664             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
665             break;
666         case NS_rtf::LN_FINVALHEIGHT:
667             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
668             break;
669         case NS_rtf::LN_FHASUPE:
670             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
671             break;
672         case NS_rtf::LN_FMASSCOPY:
673             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
674             break;
675         case NS_rtf::LN_SGC:
676             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
677             break;
678         case NS_rtf::LN_ISTDBASE:
679             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
680             break;
681         case NS_rtf::LN_CUPX:
682             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
683             break;
684         case NS_rtf::LN_ISTDNEXT:
685             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
686             break;
687         case NS_rtf::LN_BCHUPE:
688             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
689             break;
690         case NS_rtf::LN_FAUTOREDEF:
691             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
692             break;
693         case NS_rtf::LN_FHIDDEN:
694             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
695             break;
696         case NS_rtf::LN_CSTD:
697             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
698             break;
699         case NS_rtf::LN_CBSTDBASEINFILE:
700             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
701             break;
702         case NS_rtf::LN_FSTDSTYLENAMESWRITTEN:
703             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
704             break;
705         case NS_rtf::LN_UNUSED4_2:
706             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
707             break;
708         case NS_rtf::LN_STIMAXWHENSAVED:
709             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
710             break;
711         case NS_rtf::LN_ISTDMAXFIXEDWHENSAVED:
712             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
713             break;
714         case NS_rtf::LN_NVERBUILTINNAMESWHENSAVED:
715             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
716             break;
717         case NS_rtf::LN_RGFTCSTANDARDCHPSTSH:
718             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
719             break;
720         case NS_rtf::LN_WIDENT:
721             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
722 
723         case NS_rtf::LN_NFIB:
724             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
725 
726         case NS_rtf::LN_NPRODUCT:
727             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
728         case NS_rtf::LN_LID:
729             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
730         case NS_rtf::LN_PNNEXT:
731             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
732         case NS_rtf::LN_FDOT:
733             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
734         case NS_rtf::LN_FGLSY:
735             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
736         case NS_rtf::LN_FCOMPLEX:
737             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
738         case NS_rtf::LN_FHASPIC:
739             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
740 
741         case NS_rtf::LN_CQUICKSAVES:
742             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
743 
744         case NS_rtf::LN_FENCRYPTED:
745             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
746 
747         case NS_rtf::LN_FWHICHTBLSTM:
748             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
749 
750         case NS_rtf::LN_FREADONLYRECOMMENDED:
751             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
752 
753         case NS_rtf::LN_FEXTCHAR:
754             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
755 
756         case NS_rtf::LN_FEMPTYSPECIAL:
757             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
758 
759         case NS_rtf::LN_FLOADOVERRIDEPAGE:
760             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
761 
762         case NS_rtf::LN_FFUTURESAVEDUNDO:
763             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
764 
765         case NS_rtf::LN_FSPARE0:
766             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
767 
768         case NS_rtf::LN_CHSTABLES:
769             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
770 
771         case NS_rtf::LN_FCMIN:
772             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
773 
774         case NS_rtf::LN_CSW:
775             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
776 
777         case NS_rtf::LN_WMAGICCREATED:
778             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
779 
780         case NS_rtf::LN_WMAGICREVISED:
781             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
782 
783         case NS_rtf::LN_WMAGICCREATEDPRIVATE:
784             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
785 
786 
787         case NS_rtf::LN_WMAGICREVISEDPRIVATE:
788             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
789 
790         case NS_rtf::LN_LIDFE:
791             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
792 
793         case NS_rtf::LN_CLW:
794             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
795 
796         case NS_rtf::LN_CCPTEXT:
797             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
798 
799 
800         case NS_rtf::LN_CCPFTN:
801             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
802 
803         case NS_rtf::LN_CCPHDD:
804             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
805 
806         case NS_rtf::LN_CCPATN:
807             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
808 
809         case NS_rtf::LN_CCPEDN:
810             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
811 
812         case NS_rtf::LN_CCPTXBX:
813             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
814 
815         case NS_rtf::LN_CCPHDRTXBX:
816             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
817 
818         case NS_rtf::LN_PNCHPFIRST:
819             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
820 
821         case NS_rtf::LN_CPNBTECHP:
822             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
823 
824         case NS_rtf::LN_PNPAPFIRST:
825             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
826 
827         case NS_rtf::LN_CPNBTEPAP:
828             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
829 
830         case NS_rtf::LN_PNLVCFIRST:
831             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
832 
833         case NS_rtf::LN_CPNBTELVC:
834             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
835 
836         case NS_rtf::LN_CFCLCB:
837             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
838 
839         case NS_rtf::LN_FCSTSHF:
840             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
841 
842         case NS_rtf::LN_LCBSTSHF:
843             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
844 
845         case NS_rtf::LN_FCPLCFFNDREF:
846             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
847 
848         case NS_rtf::LN_LCBPLCFFNDREF:
849             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
850 
851         case NS_rtf::LN_FCPLCFFNDTXT:
852             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
853 
854         case NS_rtf::LN_LCBPLCFFNDTXT:
855             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
856 
857         case NS_rtf::LN_FCPLCFANDREF:
858             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
859 
860         case NS_rtf::LN_LCBPLCFANDREF:
861             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
862 
863         case NS_rtf::LN_FCPLCFANDTXT:
864             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
865 
866         case NS_rtf::LN_LCBPLCFANDTXT:
867             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
868 
869         case NS_rtf::LN_FCPLCFSED:
870             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
871 
872         case NS_rtf::LN_LCBPLCFSED:
873             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
874 
875         case NS_rtf::LN_FCPLCFPHE:
876             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
877 
878         case NS_rtf::LN_LCBPLCFPHE:
879             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
880 
881         case NS_rtf::LN_FCPLCFHDD:
882             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
883 
884         case NS_rtf::LN_LCBPLCFHDD:
885             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
886 
887         case NS_rtf::LN_FCPLCFBTECHPX:
888             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
889 
890         case NS_rtf::LN_LCBPLCFBTECHPX:
891             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
892 
893 
894         case NS_rtf::LN_FCPLCFBTEPAPX:
895             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
896 
897         case NS_rtf::LN_LCBPLCFBTEPAPX:
898             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
899 
900         case NS_rtf::LN_FCSTTBFFFN:
901             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
902 
903         case NS_rtf::LN_LCBSTTBFFFN:
904             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
905 
906         case NS_rtf::LN_FCPLCFFLDMOM:
907             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
908 
909         case NS_rtf::LN_LCBPLCFFLDMOM:
910             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
911 
912         case NS_rtf::LN_FCPLCFFLDHDR:
913             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
914 
915         case NS_rtf::LN_LCBPLCFFLDHDR:
916             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
917 
918 
919         case NS_rtf::LN_FCPLCFFLDFTN:
920             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
921 
922         case NS_rtf::LN_LCBPLCFFLDFTN:
923             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
924 
925         case NS_rtf::LN_FCPLCFFLDATN:
926             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
927 
928         case NS_rtf::LN_LCBPLCFFLDATN:
929             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
930 
931         case NS_rtf::LN_FCSTTBFBKMK:
932             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
933 
934         case NS_rtf::LN_LCBSTTBFBKMK:
935             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
936 
937         case NS_rtf::LN_FCPLCFBKF:
938             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
939 
940         case NS_rtf::LN_LCBPLCFBKF:
941             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
942 
943         case NS_rtf::LN_FCPLCFBKL:
944             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
945 
946         case NS_rtf::LN_LCBPLCFBKL:
947             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
948 
949         case NS_rtf::LN_FCDOP:
950             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
951 
952         case NS_rtf::LN_LCBDOP:
953             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
954 
955         case NS_rtf::LN_FCSTTBFASSOC:
956             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
957 
958         case NS_rtf::LN_LCBSTTBFASSOC:
959             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
960 
961         case NS_rtf::LN_FCCLX:
962             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
963 
964         case NS_rtf::LN_LCBCLX:
965             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
966 
967         case NS_rtf::LN_FCGRPXSTATNOWNERS:
968             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
969 
970         case NS_rtf::LN_LCBGRPXSTATNOWNERS:
971             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
972 
973         case NS_rtf::LN_FCSTTBFATNBKMK:
974             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
975 
976         case NS_rtf::LN_LCBSTTBFATNBKMK:
977             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
978 
979         case NS_rtf::LN_FCPLCSPAMOM:
980             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
981 
982         case NS_rtf::LN_LCBPLCSPAMOM:
983             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
984 
985         case NS_rtf::LN_FCPLCSPAHDR:
986             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
987 
988 
989         case NS_rtf::LN_LCBPLCSPAHDR:
990             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
991 
992         case NS_rtf::LN_FCPLCFATNBKF:
993             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
994 
995         case NS_rtf::LN_LCBPLCFATNBKF:
996             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
997 
998         case NS_rtf::LN_FCPLCFATNBKL:
999             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1000 
1001         case NS_rtf::LN_LCBPLCFATNBKL:
1002             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1003 
1004         case NS_rtf::LN_FCFORMFLDSTTBF:
1005             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1006 
1007         case NS_rtf::LN_LCBFORMFLDSTTBF:
1008             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1009 
1010         case NS_rtf::LN_FCPLCFENDREF:
1011             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1012 
1013 
1014         case NS_rtf::LN_LCBPLCFENDREF:
1015             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1016 
1017         case NS_rtf::LN_FCPLCFENDTXT:
1018             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1019 
1020         case NS_rtf::LN_LCBPLCFENDTXT:
1021             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1022 
1023         case NS_rtf::LN_FCPLCFFLDEDN:
1024             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1025 
1026         case NS_rtf::LN_LCBPLCFFLDEDN:
1027             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1028 
1029         case NS_rtf::LN_FCDGGINFO:
1030             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1031 
1032         case NS_rtf::LN_LCBDGGINFO:
1033             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1034 
1035         case NS_rtf::LN_FCSTTBFRMARK:
1036             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1037 
1038 
1039         case NS_rtf::LN_LCBSTTBFRMARK:
1040             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1041 
1042         case NS_rtf::LN_FCSTTBFCAPTION:
1043             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1044 
1045         case NS_rtf::LN_LCBSTTBFCAPTION:
1046             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1047 
1048         case NS_rtf::LN_FCSTTBFAUTOCAPTION:
1049             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1050 
1051         case NS_rtf::LN_LCBSTTBFAUTOCAPTION:
1052             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1053 
1054         case NS_rtf::LN_LCBPLCFTXBXTXT:
1055             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1056 
1057         case NS_rtf::LN_FCPLCFFLDTXBX:
1058             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1059 
1060         case NS_rtf::LN_LCBPLCFFLDTXBX:
1061             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1062 
1063         case NS_rtf::LN_FCPLCFHDRTXBXTXT:
1064             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1065 
1066         case NS_rtf::LN_LCBPLCFHDRTXBXTXT:
1067             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1068 
1069         case NS_rtf::LN_FCPLCFFLDHDRTXBX:
1070             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1071 
1072         case NS_rtf::LN_LCBPLCFFLDHDRTXBX:
1073             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1074 
1075         case NS_rtf::LN_FCSTTBTTMBD:
1076             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1077 
1078         case NS_rtf::LN_LCBSTTBTTMBD:
1079             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1080 
1081         case NS_rtf::LN_FCPGDMOTHER:
1082             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1083 
1084         case NS_rtf::LN_LCBPGDMOTHER:
1085             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1086 
1087         case NS_rtf::LN_FCBKDMOTHER:
1088             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1089 
1090         case NS_rtf::LN_LCBBKDMOTHER:
1091             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1092 
1093         case NS_rtf::LN_FCPGDFTN:
1094             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1095 
1096         case NS_rtf::LN_LCBPGDFTN:
1097             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1098 
1099         case NS_rtf::LN_FCBKDFTN:
1100             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1101 
1102         case NS_rtf::LN_LCBBKDFTN:
1103             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1104 
1105         case NS_rtf::LN_FCPGDEDN:
1106             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1107 
1108         case NS_rtf::LN_LCBPGDEDN:
1109             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1110 
1111 
1112         case NS_rtf::LN_FCBKDEDN:
1113             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1114 
1115         case NS_rtf::LN_LCBBKDEDN:
1116             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1117 
1118         case NS_rtf::LN_FCPLCFLST:
1119             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1120 
1121 
1122         case NS_rtf::LN_LCBPLCFLST:
1123             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1124 
1125         case NS_rtf::LN_FCPLFLFO:
1126             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1127 
1128         case NS_rtf::LN_LCBPLFLFO:
1129             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1130 
1131         case NS_rtf::LN_FCPLCFTXBXBKD:
1132             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1133 
1134         case NS_rtf::LN_LCBPLCFTXBXBKD:
1135             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1136 
1137         case NS_rtf::LN_FCPLCFTXBXHDRBKD:
1138             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1139 
1140         case NS_rtf::LN_LCBPLCFTXBXHDRBKD:
1141             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1142 
1143         case NS_rtf::LN_FCSTTBGLSYSTYLE:
1144             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1145 
1146 
1147         case NS_rtf::LN_LCBSTTBGLSYSTYLE:
1148             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1149 
1150         case NS_rtf::LN_FCPLCFBTELVC:
1151             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1152 
1153         case NS_rtf::LN_LCBPLCFBTELVC:
1154             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1155 
1156         case NS_rtf::LN_FCPLCFLVC:
1157             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1158 
1159         case NS_rtf::LN_LCBPLCFLVC:
1160             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1161 
1162         case NS_rtf::LN_FCSTTBLISTNAMES:
1163             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1164 
1165         case NS_rtf::LN_LCBSTTBLISTNAMES:
1166             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1167 
1168         case NS_rtf::LN_LCBSTTBFUSSR:
1169             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1170             {
1171                 m_pImpl->GetFIB().SetData( nName, nIntValue );
1172             }
1173             break;
1174         case NS_rtf::LN_FN:
1175             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1176 
1177         case NS_rtf::LN_FCSEPX:
1178             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1179 
1180         case NS_rtf::LN_FNMPR:
1181             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1182 
1183         case NS_rtf::LN_FCMPR:
1184             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1185 
1186             //section descriptor, unused or internally used
1187             break;
1188         case NS_rtf::LN_ICOFORE:
1189             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1190             break;
1191         case NS_rtf::LN_ICOBACK:
1192             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1193             break;
1194         case NS_rtf::LN_IPAT:
1195             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1196             break;
1197         case NS_rtf::LN_SHDFORECOLOR:
1198             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1199             break;
1200         case NS_rtf::LN_SHDBACKCOLOR:
1201             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1202             break;
1203         case NS_rtf::LN_SHDPATTERN:
1204             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1205             break;
1206         case NS_rtf::LN_DPTLINEWIDTH:
1207             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1208             break;
1209         case NS_rtf::LN_BRCTYPE:
1210             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1211             break;
1212         case NS_rtf::LN_ICO:
1213             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1214             break;
1215         case NS_rtf::LN_DPTSPACE:
1216             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1217             break;
1218         case NS_rtf::LN_FSHADOW:
1219             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1220             break;
1221         case NS_rtf::LN_FFRAME:
1222             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1223             break;
1224         case NS_rtf::LN_UNUSED2_15:
1225             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1226             break;
1227         case NS_rtf::LN_FFIRSTMERGED:
1228             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1229             break;
1230         case NS_rtf::LN_FMERGED:
1231             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1232             break;
1233         case NS_rtf::LN_FVERTICAL:
1234             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1235             break;
1236         case NS_rtf::LN_FBACKWARD:
1237             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1238             break;
1239         case NS_rtf::LN_FROTATEFONT:
1240             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1241             break;
1242         case NS_rtf::LN_FVERTMERGE:
1243             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1244             break;
1245         case NS_rtf::LN_FVERTRESTART:
1246             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1247             break;
1248         case NS_rtf::LN_VERTALIGN:
1249             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1250             break;
1251         case NS_rtf::LN_FUNUSED:
1252             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1253             break;
1254         case NS_rtf::LN_BRCTOP:
1255             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1256         case NS_rtf::LN_BRCLEFT:
1257             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1258         case NS_rtf::LN_BRCBOTTOM:
1259             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1260         case NS_rtf::LN_BRCRIGHT:
1261             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1262         {
1263             table::BorderLine aBorderLine;
1264             sal_Int32 nLineDistance = ConversionHelper::MakeBorderLine( nIntValue, aBorderLine );
1265             (void)nLineDistance;
1266             PropertyIds eBorderId = PROP_LEFT_BORDER;
1267             PropertyIds eBorderDistId = PROP_LEFT_BORDER_DISTANCE  ;
1268             switch( nName )
1269             {
1270                 case NS_rtf::LN_BRCTOP:
1271                     eBorderId = PROP_TOP_BORDER            ;
1272                     eBorderDistId = PROP_TOP_BORDER_DISTANCE;
1273                 break;
1274                 case NS_rtf::LN_BRCLEFT:
1275 //                    eBorderId = PROP_LEFT_BORDER;
1276 //                    eBorderDistId = PROP_LEFT_BORDER_DISTANCE  ;
1277                 break;
1278                 case NS_rtf::LN_BRCBOTTOM:
1279                     eBorderId = PROP_BOTTOM_BORDER         ;
1280                     eBorderDistId = PROP_BOTTOM_BORDER_DISTANCE;
1281                 break;
1282                 case NS_rtf::LN_BRCRIGHT:
1283                     eBorderId = PROP_RIGHT_BORDER          ;
1284                     eBorderDistId = PROP_RIGHT_BORDER_DISTANCE ;
1285                 break;
1286                 default:;
1287             }
1288             //todo: where to put the border properties
1289             //rContext->Insert(eBorderId, uno::makeAny( aBorderLine ));
1290             //rContext->Insert(eBorderDistId, uno::makeAny( nLineDistance ));
1291         }
1292         break;
1293         case NS_rtf::LN_ITCFIRST:
1294             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1295             break;
1296         case NS_rtf::LN_FPUB:
1297             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1298             break;
1299         case NS_rtf::LN_ITCLIM:
1300             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1301             break;
1302         case NS_rtf::LN_FCOL:
1303             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1304             break;
1305         case NS_rtf::LN_LINECOLOR:
1306             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1307             break;
1308         case NS_rtf::LN_LINEWIDTH:
1309             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1310             break;
1311         case NS_rtf::LN_LINETYPE:
1312             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1313             break;
1314         case NS_rtf::LN_MM:
1315             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1316             break;
1317         case NS_rtf::LN_XEXT:
1318             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1319             break;
1320         case NS_rtf::LN_YEXT:
1321             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1322             break;
1323         case NS_rtf::LN_HMF:
1324             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1325             break;
1326         case NS_rtf::LN_LCB:
1327             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1328             break;
1329         case NS_rtf::LN_CBHEADER:
1330             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1331             break;
1332         case NS_rtf::LN_MFP:
1333             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1334             break;
1335         case NS_rtf::LN_BM_RCWINMF:
1336             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1337             break;
1338         case NS_rtf::LN_DXAGOAL:
1339             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1340             break;
1341         case NS_rtf::LN_DYAGOAL:
1342             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1343             break;
1344         case NS_rtf::LN_MX:
1345             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1346             break;
1347         case NS_rtf::LN_MY:
1348             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1349             break;
1350         case NS_rtf::LN_DXACROPLEFT:
1351             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1352             break;
1353         case NS_rtf::LN_DYACROPTOP:
1354             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1355             break;
1356         case NS_rtf::LN_DXACROPRIGHT:
1357             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1358             break;
1359         case NS_rtf::LN_DYACROPBOTTOM:
1360             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1361             break;
1362         case NS_rtf::LN_BRCL:
1363             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1364             break;
1365         case NS_rtf::LN_FFRAMEEMPTY:
1366             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1367             break;
1368         case NS_rtf::LN_FBITMAP:
1369             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1370             break;
1371         case NS_rtf::LN_FDRAWHATCH:
1372             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1373             break;
1374         case NS_rtf::LN_FERROR:
1375             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1376             break;
1377         case NS_rtf::LN_BPP:
1378             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1379             break;
1380         case NS_rtf::LN_DXAORIGIN:
1381             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1382             break;
1383         case NS_rtf::LN_DYAORIGIN:
1384             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1385             break;
1386         case NS_rtf::LN_CPROPS:
1387             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1388             break;
1389         case NS_rtf::LN_LINEPROPSTOP:
1390             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1391             break;
1392         case NS_rtf::LN_LINEPROPSLEFT:
1393             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1394             break;
1395         case NS_rtf::LN_LINEPROPSBOTTOM:
1396             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1397             break;
1398         case NS_rtf::LN_LINEPROPSRIGHT:
1399             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1400             break;
1401         case NS_rtf::LN_LINEPROPSHORIZONTAL:
1402             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1403             break;
1404         case NS_rtf::LN_LINEPROPSVERTICAL:
1405             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1406             break;
1407         case NS_rtf::LN_headerr:
1408             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1409             break;
1410         case NS_rtf::LN_footerr:
1411             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1412             break;
1413         case NS_rtf::LN_endnote:
1414             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1415             break;
1416         case NS_rtf::LN_BOOKMARKNAME:
1417             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1418             // sStringValue contains the bookmark name
1419             sLocalBookmarkName = sStringValue;
1420         break;
1421         case NS_rtf::LN_IBKL:
1422             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0.5 */
1423             //contains the bookmark identifier - has to be added to the bookmark name imported before
1424             //if it is already available then the bookmark should be inserted
1425             m_pImpl->AddBookmark( sLocalBookmarkName, sStringValue );
1426             sLocalBookmarkName = ::rtl::OUString();
1427         break;
1428         case NS_rtf::LN_LISTLEVEL:
1429             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1430             break;
1431         case NS_rtf::LN_LFOData:
1432             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1433             break;
1434         case NS_rtf::LN_F:
1435             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1436             break;
1437         case NS_rtf::LN_ALTFONTNAME:
1438             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1439             break;
1440         case NS_rtf::LN_XSZFFN:
1441             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1442             break;
1443         case NS_rtf::LN_XSTZNAME:
1444             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1445             break;
1446         case NS_rtf::LN_XSTZNAME1:
1447             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1448             break;
1449         case NS_rtf::LN_UPXSTART:
1450             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1451             break;
1452         case NS_rtf::LN_UPX:
1453             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1454             break;
1455         case NS_rtf::LN_sed:
1456             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1457             //section properties
1458             resolveAttributeProperties(*this, val);
1459             break;
1460         case NS_rtf::LN_tbdAdd:
1461             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1462             //
1463             {
1464                 writerfilter::Reference<Properties>::Pointer_t pProperties = val.getProperties();
1465                 if( pProperties.get())
1466                 {
1467                     pProperties->resolve(*this);
1468                     //increment to the next tab stop
1469                     m_pImpl->NextTabStop();
1470                 }
1471             }
1472             break;
1473         case NS_rtf::LN_dxaDel:
1474             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1475             //deleted tab
1476         case NS_rtf::LN_dxaAdd:
1477             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1478             //set tab
1479         case NS_rtf::LN_TLC:
1480             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1481             //tab leading characters - for decimal tabs
1482         case NS_rtf::LN_JC:
1483             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1484             //tab justification
1485             m_pImpl->ModifyCurrentTabStop(nName, nIntValue);
1486             break;
1487         case NS_rtf::LN_UNUSED0_6:
1488             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
1489             // really unused
1490             break;
1491         case NS_rtf::LN_rgbrc:
1492             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1493             break;
1494         case NS_rtf::LN_shd:
1495             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1496             break;
1497         case NS_rtf::LN_cellShd:
1498             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1499             break;
1500         case NS_rtf::LN_cellTopColor:
1501         case NS_rtf::LN_cellLeftColor:
1502         case NS_rtf::LN_cellBottomColor:
1503         case NS_rtf::LN_cellRightColor:
1504             OSL_ASSERT("handled by DomainMapperTableManager");
1505         break;
1506 
1507         case NS_rtf::LN_LISTTABLE:
1508             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1509             break;
1510         case NS_rtf::LN_LFOTABLE:
1511             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1512             break;
1513         case NS_rtf::LN_FONTTABLE:
1514             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1515             break;
1516         case NS_rtf::LN_STYLESHEET:
1517             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1518             break;
1519 
1520         case NS_rtf::LN_fcEastAsianLayout:
1521             /* WRITERFILTERSTATUS: done: 50, planned: 0.5, spent: 0 */
1522         /*  it seems that the value is following:
1523                 ???? XX YYYY ZZ
1524             where
1525                 XX seems to be the run id
1526                 ZZ is the length of the function that is normally 6
1527                 Lower byte of YYYY determines whether it is
1528                     vertical text flow (0x01), or
1529                     two lines in one layout (0x02).
1530                 For 0x01, if the higher byte of YYYY is zero, the text is not scaled to fit the line height,
1531                     in oposite case, it is to be scaled.
1532                 For 0x02, the higher byte of YYYY is determinig the prefix and suffix of the run:
1533                     no brackets (0x00) ,
1534                     () round brackets (0x01),
1535                     [] square backets (0x02),
1536                     <> angle brackets (0x03) and
1537                     {} curly brackets (0x04).
1538                 ???? is different and we do not know its signification
1539           */
1540 
1541             if ((nIntValue & 0x000000FF) == 6)
1542             {
1543                 switch ((nIntValue & 0x0000FF00) >> 8)
1544                 {
1545                 case 1: // vertical text
1546 					if (m_pImpl->GetTopContext())
1547 					{
1548 	                    m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION, true, uno::makeAny ( sal_Int16(900) ));
1549     	                m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION_IS_FIT_TO_LINE, true, uno::makeAny (((nIntValue & 0x00FF0000) >> 16) != 0));
1550 					}
1551                     break;
1552                 case 2: // two lines in one
1553 					if (m_pImpl->GetTopContext())
1554 					{
1555 	                    m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_IS_ON, true, uno::makeAny ( true ));
1556 	                    m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_PREFIX, true, uno::makeAny ( getBracketStringFromEnum((nIntValue & 0x00FF0000) >> 16)));
1557 	                    m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_SUFFIX, true, uno::makeAny ( getBracketStringFromEnum((nIntValue & 0x00FF0000) >> 16, false)));
1558 					}
1559                     break;
1560                 default:
1561                     break;
1562                 }
1563             }
1564             break;
1565         case NS_rtf::LN_FRD :
1566             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1567             //footnote reference descriptor, if nIntValue > 0 then automatic, custom otherwise
1568             //ignored
1569         break;
1570         case NS_rtf::LN_FONT: //font of footnote symbol
1571             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1572 			if (m_pImpl->GetTopContext())
1573 	            m_pImpl->GetTopContext()->SetFootnoteFontId( nIntValue );
1574         break;
1575         case NS_ooxml::LN_CT_Sym_char:
1576             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1577         if( m_pImpl->GetTopContext() && m_pImpl->GetTopContext()->GetFootnote().is())
1578         {
1579             m_pImpl->GetTopContext()->GetFootnote()->setLabel(::rtl::OUString( sal_Unicode(nIntValue)));
1580             break;
1581         }
1582         else //it's a _real_ symbol
1583         {
1584             utext( reinterpret_cast < const sal_uInt8 * >( &nIntValue ), 1 );
1585         }
1586         break;
1587         case NS_rtf::LN_CHAR: //footnote symbol character
1588             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1589 			if (m_pImpl->GetTopContext())
1590 	            m_pImpl->GetTopContext()->SetFootnoteSymbol( sal_Unicode(nIntValue));
1591         break;
1592         case NS_ooxml::LN_CT_Sym_font:
1593             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1594             //the footnote symbol and font are provided after the footnote is already inserted
1595         if( m_pImpl->GetTopContext() && m_pImpl->GetTopContext()->GetFootnote().is())
1596         {
1597             uno::Reference< beans::XPropertySet > xAnchorProps( m_pImpl->GetTopContext()->GetFootnote()->getAnchor(), uno::UNO_QUERY );
1598             xAnchorProps->setPropertyValue(
1599                 PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_CHAR_FONT_NAME),
1600                 uno::makeAny( sStringValue ));
1601         }
1602         else //a real symbol
1603 			if (m_pImpl->GetTopContext())
1604 	            m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( sStringValue ));
1605         break;
1606         case NS_ooxml::LN_CT_Underline_val:
1607             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1608             handleUnderlineType(nIntValue, m_pImpl->GetTopContext());
1609             break;
1610         case NS_ooxml::LN_CT_Color_val:
1611             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1612 			if (m_pImpl->GetTopContext())
1613 	            m_pImpl->GetTopContext()->Insert(PROP_CHAR_COLOR, true, uno::makeAny( nIntValue ) );
1614             break;
1615         case NS_ooxml::LN_CT_Underline_color:
1616             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1617 			if (m_pImpl->GetTopContext())
1618 			{
1619 	            m_pImpl->GetTopContext()->Insert(PROP_CHAR_UNDERLINE_HAS_COLOR, true, uno::makeAny( true ) );
1620 	            m_pImpl->GetTopContext()->Insert(PROP_CHAR_UNDERLINE_COLOR, true, uno::makeAny( nIntValue ) );
1621 			}
1622             break;
1623 
1624         case NS_ooxml::LN_CT_TabStop_val:
1625             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1626             if (sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_ST_TabJc_clear)
1627             {
1628                 m_pImpl->m_aCurrentTabStop.bDeleted = true;
1629             }
1630             else
1631             {
1632                 m_pImpl->m_aCurrentTabStop.bDeleted = false;
1633                 m_pImpl->m_aCurrentTabStop.Alignment = getTabAlignFromValue(nIntValue);
1634             }
1635             break;
1636         case NS_ooxml::LN_CT_TabStop_leader:
1637             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1638             m_pImpl->m_aCurrentTabStop.FillChar = getFillCharFromValue(nIntValue);
1639             break;
1640         case NS_ooxml::LN_CT_TabStop_pos:
1641             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1642             m_pImpl->m_aCurrentTabStop.Position = ConversionHelper::convertTwipToMM100(nIntValue);
1643             break;
1644 
1645         case NS_ooxml::LN_CT_Fonts_ascii:
1646             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1647 			if (m_pImpl->GetTopContext())
1648 	            m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( sStringValue ));
1649             break;
1650         case NS_ooxml::LN_CT_Fonts_asciiTheme:
1651             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1652 			if (m_pImpl->GetTopContext())
1653 	            m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( m_pImpl->GetThemeTable()->getFontNameForTheme(nIntValue) ));
1654             break;
1655         case NS_ooxml::LN_CT_Fonts_hAnsi:
1656             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1657             break;//unsupported
1658         case NS_ooxml::LN_CT_Fonts_hAnsiTheme:
1659             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1660             break; //unsupported
1661         case NS_ooxml::LN_CT_Fonts_eastAsia:
1662             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1663 			if (m_pImpl->GetTopContext())
1664 	            m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_ASIAN, true, uno::makeAny( sStringValue ));
1665             break;
1666     case NS_ooxml::LN_CT_Fonts_eastAsiaTheme:
1667         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1668 		if (m_pImpl->GetTopContext())
1669         	m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_COMPLEX, true, uno::makeAny( m_pImpl->GetThemeTable()->getFontNameForTheme(nIntValue) ) );
1670         break;
1671         case NS_ooxml::LN_CT_Fonts_cs:
1672             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1673 			if (m_pImpl->GetTopContext())
1674 	            m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_COMPLEX, true, uno::makeAny( sStringValue ));
1675             break;
1676         case NS_ooxml::LN_CT_Fonts_cstheme:
1677             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1678 			if (m_pImpl->GetTopContext())
1679 	            m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_COMPLEX, true, uno::makeAny( m_pImpl->GetThemeTable()->getFontNameForTheme(nIntValue) ));
1680         break;
1681         case NS_ooxml::LN_CT_Spacing_before:
1682             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1683 			if (m_pImpl->GetTopContext())
1684 	            m_pImpl->GetTopContext()->Insert(PROP_PARA_TOP_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
1685             break;
1686         case NS_ooxml::LN_CT_Spacing_beforeLines:
1687             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1688             break;
1689         case NS_ooxml::LN_CT_Spacing_after:
1690             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1691 			if (m_pImpl->GetTopContext())
1692 	            m_pImpl->GetTopContext()->Insert(PROP_PARA_BOTTOM_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
1693             break;
1694         case NS_ooxml::LN_CT_Spacing_afterLines:
1695             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1696             break;
1697         case NS_ooxml::LN_CT_Spacing_line: //91434
1698             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1699         case NS_ooxml::LN_CT_Spacing_lineRule: //91435
1700             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1701         {
1702 #define SINGLE_LINE_SPACING 240
1703             style::LineSpacing aSpacing;
1704             PropertyMapPtr pTopContext = m_pImpl->GetTopContext();
1705             PropertyMap::iterator aLineSpacingIter = pTopContext->find(PropertyDefinition( PROP_PARA_LINE_SPACING, true ) );
1706             if( aLineSpacingIter != pTopContext->end())
1707             {
1708                 aLineSpacingIter->second >>= aSpacing;
1709             }
1710             else
1711             {
1712                 //default to single line spacing
1713                 aSpacing.Mode = style::LineSpacingMode::FIX;
1714                 aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100( SINGLE_LINE_SPACING ));
1715             }
1716             if( nName == NS_ooxml::LN_CT_Spacing_line )
1717             {
1718                 //now set the value depending on the Mode
1719                 if( aSpacing.Mode == style::LineSpacingMode::PROP )
1720                     aSpacing.Height = sal_Int16(sal_Int32(nIntValue) * 100 / SINGLE_LINE_SPACING );
1721                 else
1722                     aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100( nIntValue ));
1723             }
1724             else //NS_ooxml::LN_CT_Spacing_lineRule:
1725             {
1726                     // exactly, atLeast, auto
1727                     if( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_LineSpacingRule_auto)
1728                     {
1729                         aSpacing.Mode = style::LineSpacingMode::PROP;
1730                         //reinterpret the already set value
1731                         aSpacing.Height = sal_Int16( aSpacing.Height * 100 /  ConversionHelper::convertTwipToMM100( SINGLE_LINE_SPACING ));
1732                     }
1733                     else if( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_LineSpacingRule_atLeast)
1734                         aSpacing.Mode = style::LineSpacingMode::MINIMUM;
1735                     else // NS_ooxml::LN_Value_wordprocessingml_ST_LineSpacingRule_exact
1736                         aSpacing.Mode = style::LineSpacingMode::FIX;
1737             }
1738             pTopContext->Insert(PROP_PARA_LINE_SPACING, true, uno::makeAny( aSpacing ));
1739         }
1740         break;
1741         case NS_ooxml::LN_CT_Ind_left:
1742             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1743 			if (m_pImpl->GetTopContext())
1744 	            m_pImpl->GetTopContext()->Insert(
1745     	            PROP_PARA_LEFT_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
1746             break;
1747         case NS_ooxml::LN_CT_Ind_right:
1748             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1749 			if (m_pImpl->GetTopContext())
1750 	            m_pImpl->GetTopContext()->Insert(
1751     	            PROP_PARA_RIGHT_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
1752             break;
1753         case NS_ooxml::LN_CT_Ind_hanging:
1754             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1755 			if (m_pImpl->GetTopContext())
1756             {
1757                 sal_Int32 nValue = ConversionHelper::convertTwipToMM100( nIntValue );
1758 	            m_pImpl->GetTopContext()->Insert(
1759                     PROP_PARA_FIRST_LINE_INDENT, true, uno::makeAny( - nValue ));
1760             }
1761             break;
1762         case NS_ooxml::LN_CT_Ind_firstLine:
1763             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1764 			if (m_pImpl->GetTopContext())
1765 	            m_pImpl->GetTopContext()->Insert(
1766     	            PROP_PARA_FIRST_LINE_INDENT, true, uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
1767             break;
1768 
1769         case NS_ooxml::LN_CT_EastAsianLayout_id:
1770             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1771             break;
1772         case NS_ooxml::LN_CT_EastAsianLayout_combine:
1773             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1774 			if (m_pImpl->GetTopContext())
1775 	            m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_IS_ON, true, uno::makeAny ( nIntValue ? true : false ));
1776             break;
1777         case NS_ooxml::LN_CT_EastAsianLayout_combineBrackets:
1778             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1779 			if (m_pImpl->GetTopContext())
1780             {
1781                 rtl::OUString sCombinePrefix = getBracketStringFromEnum(nIntValue);
1782                 rtl::OUString sCombineSuffix = getBracketStringFromEnum(nIntValue, false);
1783                 m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_PREFIX, true, uno::makeAny ( sCombinePrefix ));
1784                 m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_SUFFIX, true, uno::makeAny ( sCombineSuffix ));
1785             }
1786             break;
1787         case NS_ooxml::LN_CT_EastAsianLayout_vert:
1788             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1789 			if (m_pImpl->GetTopContext())
1790             {
1791                 sal_Int16 nRotationAngle = (nIntValue ? 900 : 0);
1792                 m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION, true, uno::makeAny ( nRotationAngle ));
1793             }
1794             break;
1795         case NS_ooxml::LN_CT_EastAsianLayout_vertCompress:
1796             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1797 			if (m_pImpl->GetTopContext())
1798 	            m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION_IS_FIT_TO_LINE, true, uno::makeAny ( nIntValue ? true : false));
1799             break;
1800 
1801         case NS_ooxml::LN_CT_PageSz_code:
1802             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1803             CT_PageSz.code = nIntValue;
1804             break;
1805         case NS_ooxml::LN_CT_PageSz_h:
1806             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1807             {
1808                 sal_Int32 nHeight = ConversionHelper::convertTwipToMM100(nIntValue);
1809                 CT_PageSz.h = PaperInfo::sloppyFitPageDimension(nHeight);
1810             }
1811             break;
1812         case NS_ooxml::LN_CT_PageSz_orient:
1813             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1814             CT_PageSz.orient = (nIntValue != 0);
1815             break;
1816         case NS_ooxml::LN_CT_PageSz_w:
1817             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1818             {
1819                 sal_Int32 nWidth = ConversionHelper::convertTwipToMM100(nIntValue);
1820                 CT_PageSz.w = PaperInfo::sloppyFitPageDimension(nWidth);
1821             }
1822             break;
1823 
1824         case NS_ooxml::LN_CT_PageMar_top:
1825             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1826             m_pImpl->SetPageMarginTwip( PAGE_MAR_TOP, nIntValue );
1827         break;
1828         case NS_ooxml::LN_CT_PageMar_right:
1829             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1830             m_pImpl->SetPageMarginTwip( PAGE_MAR_RIGHT, nIntValue );
1831         break;
1832         case NS_ooxml::LN_CT_PageMar_bottom:
1833             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1834             m_pImpl->SetPageMarginTwip( PAGE_MAR_BOTTOM, nIntValue );
1835         break;
1836         case NS_ooxml::LN_CT_PageMar_left:
1837             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1838             m_pImpl->SetPageMarginTwip( PAGE_MAR_LEFT, nIntValue );
1839         break;
1840         case NS_ooxml::LN_CT_PageMar_header:
1841             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1842             m_pImpl->SetPageMarginTwip( PAGE_MAR_HEADER, nIntValue );
1843         break;
1844         case NS_ooxml::LN_CT_PageMar_footer:
1845             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1846             m_pImpl->SetPageMarginTwip( PAGE_MAR_FOOTER, nIntValue );
1847         break;
1848         case NS_ooxml::LN_CT_PageMar_gutter:
1849             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1850             m_pImpl->SetPageMarginTwip( PAGE_MAR_GUTTER, nIntValue );
1851         break;
1852         case NS_ooxml::LN_CT_Language_val: //90314
1853             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1854         case NS_ooxml::LN_CT_Language_eastAsia: //90315
1855             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1856         case NS_ooxml::LN_CT_Language_bidi: //90316
1857             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1858         {
1859             LanguageType eLang = MsLangId::convertIsoStringToLanguage( sStringValue );
1860             lang::Locale aLocale = MsLangId::convertLanguageToLocale( eLang );
1861 			if (m_pImpl->GetTopContext())
1862 	            m_pImpl->GetTopContext()->Insert(NS_ooxml::LN_CT_Language_val== nName ? PROP_CHAR_LOCALE :
1863                              NS_ooxml::LN_CT_Language_eastAsia == nName ? PROP_CHAR_LOCALE_ASIAN : PROP_CHAR_LOCALE_COMPLEX,
1864                              true,
1865                              uno::makeAny( aLocale ) );
1866         }
1867         break;
1868 #define AUTO_PARA_SPACING sal_Int32(49)
1869         case NS_ooxml::LN_CT_Spacing_beforeAutospacing:
1870             /* WRITERFILTERSTATUS: done: 80, planned: 0.5, spent: 0.2 */
1871             //TODO: autospacing depends on some document property (called fDontUseHTMLAutoSpacing in old ww8 filter) 100 or 280 twip
1872             //and should be set to 0 on start of page
1873             m_pImpl->GetTopContext()->Insert( PROP_PARA_TOP_MARGIN, false, uno::makeAny( AUTO_PARA_SPACING ) );
1874         break;
1875         case NS_ooxml::LN_CT_Spacing_afterAutospacing:
1876             /* WRITERFILTERSTATUS: done: 80, planned: 0.5, spent: 0.2 */
1877             //TODO: autospacing depends on some document property (called fDontUseHTMLAutoSpacing in old ww8 filter) 100 or 280 twip
1878             m_pImpl->GetTopContext()->Insert( PROP_PARA_BOTTOM_MARGIN, false, uno::makeAny( AUTO_PARA_SPACING ) );
1879         break;
1880         case NS_ooxml::LN_CT_SmartTagRun_uri:
1881         case NS_ooxml::LN_CT_SmartTagRun_element:
1882             /* WRITERFILTERSTATUS: done: 0, planned: 1, spent: 0 */
1883             //TODO: add handling of SmartTags
1884         break;
1885         case NS_ooxml::LN_CT_Br_type :
1886             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
1887             //TODO: attributes for break (0x12) are not supported
1888         break;
1889         case NS_ooxml::LN_CT_Fonts_hint :
1890             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
1891             /*  assigns script type to ambigous characters, values can be:
1892                 NS_ooxml::LN_Value_ST_Hint_default
1893                 NS_ooxml::LN_Value_ST_Hint_eastAsia
1894                 NS_ooxml::LN_Value_ST_Hint_cs
1895              */
1896             //TODO: unsupported?
1897         break;
1898         case NS_ooxml::LN_CT_TblCellMar_right: // 92375;
1899             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1900         case NS_ooxml::LN_CT_TblBorders_top: // 92377;
1901             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1902         case NS_ooxml::LN_CT_TblBorders_left: // 92378;
1903             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1904         case NS_ooxml::LN_CT_TblBorders_bottom: // 92379;
1905             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
1906         //todo: handle cell mar
1907         break;
1908         case NS_rtf::LN_blip: // contains the binary graphic
1909             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1910         case NS_ooxml::LN_shape:
1911             /* WRITERFILTERSTATUS: done: 50, planned: 0.5, spent: 0 */
1912         {
1913             //looks a bit like a hack - and it is. The graphic import is split into the inline_inline part and
1914             //afterwards the adding of the binary data.
1915             m_pImpl->GetGraphicImport( IMPORT_AS_DETECTED_INLINE )->attribute(nName, val);
1916             m_pImpl->ImportGraphic( val.getProperties(), IMPORT_AS_DETECTED_INLINE );
1917         }
1918         break;
1919         case NS_ooxml::LN_CT_FramePr_dropCap:
1920         case NS_ooxml::LN_CT_FramePr_lines:
1921         case NS_ooxml::LN_CT_FramePr_hAnchor:
1922         case NS_ooxml::LN_CT_FramePr_vAnchor:
1923         case NS_ooxml::LN_CT_FramePr_x:
1924         case NS_ooxml::LN_CT_FramePr_xAlign:
1925         case NS_ooxml::LN_CT_FramePr_y:
1926         case NS_ooxml::LN_CT_FramePr_yAlign:
1927         case NS_ooxml::LN_CT_FramePr_hRule:
1928         case NS_sprm::LN_PWr:
1929         case NS_sprm::LN_PDxaWidth:
1930         case NS_sprm::LN_PWHeightAbs:
1931         case NS_sprm::LN_PDxaFromText:
1932         case NS_sprm::LN_PDyaFromText:
1933         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1934         {
1935             ParagraphProperties* pParaProperties = dynamic_cast< ParagraphProperties*>(m_pImpl->GetTopContext().get());
1936             if( pParaProperties )
1937             {
1938                 switch( nName )
1939                 {
1940                     case NS_ooxml::LN_CT_FramePr_dropCap:
1941                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1942                         pParaProperties->SetDropCap( nIntValue );
1943                     break;
1944                     case NS_ooxml::LN_CT_FramePr_lines:
1945                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1946                         pParaProperties->SetLines( nIntValue );
1947                     break;
1948                     case NS_ooxml::LN_CT_FramePr_hAnchor:
1949                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1950                         switch(nIntValue)
1951                         {
1952                             case  NS_ooxml::LN_Value_wordprocessingml_ST_HAnchor_text:   //relative to column
1953                                 nIntValue = text::RelOrientation::FRAME; break;
1954                             case  NS_ooxml::LN_Value_wordprocessingml_ST_HAnchor_margin: nIntValue = text::RelOrientation::PAGE_PRINT_AREA; break;
1955                             case  NS_ooxml::LN_Value_wordprocessingml_ST_HAnchor_page:   nIntValue = text::RelOrientation::PAGE_FRAME; break;
1956                             default:;
1957                         }
1958                         pParaProperties->SethAnchor( nIntValue );
1959                     break;
1960                     case NS_ooxml::LN_CT_FramePr_vAnchor:
1961                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1962                         switch(nIntValue)
1963                         {
1964                             case  NS_ooxml::LN_Value_wordprocessingml_ST_VAnchor_text:  //relative to paragraph
1965                                     nIntValue = text::RelOrientation::FRAME; break;
1966                             case  NS_ooxml::LN_Value_wordprocessingml_ST_VAnchor_margin:nIntValue = text::RelOrientation::PAGE_PRINT_AREA ; break;
1967                             case  NS_ooxml::LN_Value_wordprocessingml_ST_VAnchor_page: nIntValue = text::RelOrientation::PAGE_FRAME; break;
1968                             default:;
1969                         }
1970                         pParaProperties->SetvAnchor( nIntValue );
1971                     break;
1972                     case NS_ooxml::LN_CT_FramePr_x:
1973                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1974                         pParaProperties->Setx( ConversionHelper::convertTwipToMM100(nIntValue ));
1975                     break;
1976                     case NS_ooxml::LN_CT_FramePr_xAlign:
1977                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1978                         switch( nIntValue )
1979                         {
1980                             case  NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_center  : nIntValue = text::HoriOrientation::CENTER; break;
1981                             case  NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_right   : nIntValue = text::HoriOrientation::RIGHT; break;
1982                             case  NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_inside  : nIntValue = text::HoriOrientation::INSIDE; break;
1983                             case  NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_outside : nIntValue = text::HoriOrientation::OUTSIDE; break;
1984                             case  NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_left    : nIntValue = text::HoriOrientation::LEFT; break;
1985                             default:    nIntValue = text::HoriOrientation::NONE;
1986                         }
1987                         pParaProperties->SetxAlign( nIntValue );
1988                     break;
1989                     case NS_ooxml::LN_CT_FramePr_y:
1990                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1991                         pParaProperties->Sety( ConversionHelper::convertTwipToMM100(nIntValue ));
1992                     break;
1993                     case NS_ooxml::LN_CT_FramePr_yAlign:
1994                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
1995                         switch( nIntValue )
1996                         {
1997                             case  NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_top     :
1998                             case  NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_inside  :nIntValue = text::VertOrientation::TOP; break;
1999                             case  NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_center  :nIntValue = text::VertOrientation::CENTER;break;
2000                             case  NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_bottom  :
2001                             case  NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_outside :nIntValue = text::VertOrientation::BOTTOM;break;
2002                             case  NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_inline  ://todo: what to do with inline - no avail. in WW97 and WW2007
2003                             //no break;
2004                             default:nIntValue = text::VertOrientation::NONE;
2005                         }
2006                         pParaProperties->SetyAlign( nIntValue );
2007                     break;
2008                     case NS_ooxml::LN_CT_FramePr_hRule:
2009                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2010                          switch( nIntValue )
2011                          {
2012                             case NS_ooxml::LN_Value_wordprocessingml_ST_HeightRule_exact:
2013                                 nIntValue = text::SizeType::FIX;
2014                             break;
2015                             case NS_ooxml::LN_Value_wordprocessingml_ST_HeightRule_atLeast:
2016                                 nIntValue = text::SizeType::MIN;
2017                             break;
2018                             case NS_ooxml::LN_Value_wordprocessingml_ST_HeightRule_auto:
2019                             //no break;
2020                             default:;
2021                                 nIntValue = text::SizeType::VARIABLE;
2022                          }
2023                         pParaProperties->SethRule( nIntValue );
2024                     break;
2025                     case NS_sprm::LN_PWr:
2026                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2027                     {
2028                         //should be either LN_Value_wordprocessingml_ST_Wrap_notBeside or LN_Value_wordprocessingml_ST_Wrap_around
2029                         OSL_ENSURE( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_Wrap_around ||
2030                                     sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_Wrap_notBeside,
2031                             "wrap not around or not_Beside?");
2032                         pParaProperties->SetWrap(sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_Wrap_around ?
2033                                                  text::WrapTextMode_DYNAMIC : text::WrapTextMode_NONE );
2034                     }
2035                     break;
2036                     case NS_sprm::LN_PDxaWidth:
2037                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2038                         pParaProperties->Setw(ConversionHelper::convertTwipToMM100(nIntValue));
2039                     break;
2040                     case NS_sprm::LN_PWHeightAbs:
2041                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2042                         pParaProperties->Seth(ConversionHelper::convertTwipToMM100(nIntValue));
2043                     break;
2044                     case NS_sprm::LN_PDxaFromText:
2045                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2046                         pParaProperties->SethSpace( ConversionHelper::convertTwipToMM100(nIntValue ));
2047                     break;
2048                     case NS_sprm::LN_PDyaFromText:
2049                         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2050                         pParaProperties->SetvSpace( ConversionHelper::convertTwipToMM100(nIntValue ));
2051                     break;
2052                     default:;
2053                 }
2054             }
2055             else
2056             {
2057                 //TODO: how to handle frame properties at styles
2058             }
2059         }
2060         break;
2061         case NS_ooxml::LN_CT_LineNumber_start:
2062         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
2063         case NS_ooxml::LN_CT_LineNumber_distance:
2064         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
2065         case NS_ooxml::LN_CT_TrackChange_author:
2066             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2067             m_pImpl->SetCurrentRedlineAuthor( sStringValue );
2068         break;
2069         case NS_ooxml::LN_CT_TrackChange_date:
2070             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2071             m_pImpl->SetCurrentRedlineDate( sStringValue );
2072         break;
2073         case NS_ooxml::LN_CT_Markup_id:
2074             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2075             m_pImpl->SetCurrentRedlineId( nIntValue );
2076         break;
2077         case NS_ooxml::LN_CT_Comment_initials:
2078             m_pImpl->SetCurrentRedlineInitials(sStringValue);
2079         break;
2080         case NS_ooxml::LN_EG_RangeMarkupElements_commentRangeStart:
2081             m_pImpl->AddAnnotationPosition( true, nIntValue );
2082         break;
2083         case NS_ooxml::LN_EG_RangeMarkupElements_commentRangeEnd:
2084             m_pImpl->AddAnnotationPosition( false, nIntValue );
2085         break;
2086         case NS_ooxml::LN_token:
2087             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2088             m_pImpl->SetCurrentRedlineToken( nIntValue );
2089         break;
2090         case NS_ooxml::LN_CT_LineNumber_countBy:
2091         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
2092         case NS_ooxml::LN_CT_LineNumber_restart:
2093         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
2094         {
2095             //line numbering in Writer is a global document setting
2096             //in Word is a section setting
2097             //if line numbering is switched on anywhere in the document it's set at the global settings
2098             LineNumberSettings aSettings = m_pImpl->GetLineNumberSettings();
2099             switch( nName )
2100             {
2101                 case NS_ooxml::LN_CT_LineNumber_countBy:
2102                     /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2103                     aSettings.nInterval = nIntValue;
2104                 break;
2105                 case NS_ooxml::LN_CT_LineNumber_start:
2106                     /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2107                     aSettings.nStartValue = nIntValue; // todo: has to be set at (each) first paragraph
2108                 break;
2109                 case NS_ooxml::LN_CT_LineNumber_distance:
2110                     /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2111                     aSettings.nDistance = ConversionHelper::convertTwipToMM100( nIntValue );
2112                 break;
2113                 case NS_ooxml::LN_CT_LineNumber_restart:
2114                     /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2115                     //page:empty, probably 0,section:1,continuous:2;
2116                     aSettings.bRestartAtEachPage = nIntValue < 1;
2117                 break;
2118                 default:;
2119             }
2120             m_pImpl->SetLineNumberSettings( aSettings );
2121         }
2122         break;
2123         case NS_ooxml::LN_CT_FtnEdnRef_customMarkFollows:
2124             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2125             m_pImpl->SetCustomFtnMark( true );
2126         break;
2127         case NS_ooxml::LN_CT_FtnEdnRef_id:
2128             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
2129             // footnote or endnote reference id - not needed
2130         case NS_ooxml::LN_CT_Color_themeColor:
2131             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
2132         case NS_ooxml::LN_CT_Color_themeTint:
2133             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
2134         case NS_ooxml::LN_CT_Color_themeShade:
2135             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
2136             //unsupported
2137         break;
2138     case NS_ooxml::LN_endtrackchange:
2139         m_pImpl->RemoveCurrentRedline( );
2140     break;
2141     case NS_ooxml::LN_CT_DocGrid_linePitch:
2142             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2143             {
2144                 //see SwWW8ImplReader::SetDocumentGrid
2145                 OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
2146                 if(pSectionContext)
2147                 {
2148                     pSectionContext->SetGridLinePitch( ConversionHelper::convertTwipToMM100( nIntValue ) );
2149                 }
2150             }
2151         break;
2152             case NS_ooxml::LN_CT_DocGrid_charSpace:
2153                 /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2154             {
2155                 OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
2156                 if(pSectionContext)
2157                 {
2158                     pSectionContext->SetDxtCharSpace( nIntValue );
2159                 }
2160             }
2161             break;
2162             case NS_ooxml::LN_CT_DocGrid_type:
2163                 /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2164             {
2165                 if (pSectionContext != NULL)
2166                 {
2167                     pSectionContext->SetGridType(nIntValue);
2168                 }
2169             }
2170             break;
2171         default:
2172             {
2173 #if OSL_DEBUG_LEVEL > 0
2174             ::rtl::OString sMessage( "DomainMapper::attribute() - Id: ");
2175             sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 10 );
2176             sMessage += ::rtl::OString(" / 0x");
2177             sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 16 );
2178 //            sMessage += ::rtl::OString(" / ");
2179 //            sMessage += ::rtl::OString
2180 //                ((*QNameToString::Instance())(nName).c_str());
2181             sMessage += ::rtl::OString(" value: ");
2182             sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 10 );
2183             sMessage += ::rtl::OString(" / 0x");
2184             sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 16 );
2185             OSL_ENSURE( false, sMessage.getStr()); //
2186 #endif
2187             }
2188         }
2189     }
2190 }
2191 /*-- 09.06.2006 09:52:12---------------------------------------------------
2192 
2193 -----------------------------------------------------------------------*/
2194 void DomainMapper::lcl_sprm(Sprm & rSprm)
2195 {
2196     if( !m_pImpl->getTableManager().sprm(rSprm))
2197         sprmWithProps( rSprm, m_pImpl->GetTopContext() );
2198 }
2199 /*-- 20.06.2006 09:58:33---------------------------------------------------
2200 
2201   -----------------------------------------------------------------------*/
2202 void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmType )
2203 {
2204     OSL_ENSURE(rContext.get(), "PropertyMap has to be valid!");
2205     if(!rContext.get())
2206         return ;
2207 
2208     sal_uInt32 nSprmId = rSprm.getId();
2209     //needed for page properties
2210     SectionPropertyMap * pSectionContext = m_pImpl->GetSectionContext();
2211 
2212     //TODO: In rtl-paragraphs the meaning of left/right are to be exchanged
2213     bool bExchangeLeftRight = false;
2214     // if( nSprmId == NS_sprm::LN_PJcExtra && AlreadyInRTLPara() )
2215     //      bExchangeLeftRight = true;
2216     Value::Pointer_t pValue = rSprm.getValue();
2217     sal_Int32 nIntValue = pValue->getInt();
2218     const rtl::OUString sStringValue = pValue->getString();
2219     // printf ( "DomainMapper::sprm(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nSprmId, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
2220     /* WRITERFILTERSTATUS: table: sprmdata */
2221 
2222     switch(nSprmId)
2223     {
2224     case 2:  // sprmPIstd
2225         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2226     case 0x4600:
2227         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2228         break;  // sprmPIstd - style code
2229     case 3: // "sprmPIstdPermute
2230     case NS_sprm::LN_PIstdPermute:
2231         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2232         break;  // sprmPIstdPermute
2233     case NS_sprm::LN_PIncLvl:
2234         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2235         break;  // sprmPIncLvl
2236     case NS_sprm::LN_PJcExtra: // sprmPJc Asian (undocumented)
2237         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2238     case NS_sprm::LN_PJc: // sprmPJc
2239         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2240         handleParaJustification(nIntValue, rContext, bExchangeLeftRight);
2241         break;
2242     case NS_sprm::LN_PFSideBySide:
2243         /* WRITERFILTERSTATUS: done: 0, planned: 3, spent: 0 */
2244         /* WRITERFILTERSTATUS: comment: */
2245         break;  // sprmPFSideBySide
2246 
2247     case NS_sprm::LN_PFKeep:   // sprmPFKeep
2248         /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
2249         /* WRITERFILTERSTATUS: comment: */
2250         rContext->Insert(PROP_PARA_SPLIT, true, uno::makeAny(nIntValue ? false : true));
2251         break;
2252     case NS_sprm::LN_PFKeepFollow:   // sprmPFKeepFollow
2253         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
2254         /* WRITERFILTERSTATUS: comment:  */
2255         rContext->Insert(PROP_PARA_KEEP_TOGETHER, true, uno::makeAny( nIntValue ? true : false) );
2256         break;
2257 
2258     case NS_sprm::LN_PFPageBreakBefore:
2259         if ( nIntValue == 1 )
2260         {
2261             rContext->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE ) );
2262         }
2263     break;  // sprmPFPageBreakBefore
2264 
2265     case NS_sprm::LN_PBrcl:
2266         break;  // sprmPBrcl
2267     case NS_sprm::LN_PBrcp:
2268         break;  // sprmPBrcp
2269 
2270     case NS_sprm::LN_PIlvl: // sprmPIlvl
2271         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
2272         /* WRITERFILTERSTATUS: comment:  */
2273         {
2274             StyleSheetPropertyMap* pStyleSheetPropertyMap = NULL;
2275             if ( m_pImpl->IsStyleSheetImport() )
2276             {
2277                 pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
2278             }
2279 
2280             if ( pStyleSheetPropertyMap != NULL )
2281             {
2282                 pStyleSheetPropertyMap->SetListLevel( (sal_Int16)nIntValue );
2283             }
2284             else
2285             {
2286                 rContext->Insert( PROP_NUMBERING_LEVEL, true, uno::makeAny( (sal_Int16)nIntValue ));
2287             }
2288         }
2289         break;
2290 
2291     case NS_sprm::LN_PIlfo: // sprmPIlfo
2292         /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 1 */
2293         /* WRITERFILTERSTATUS: comment:  */
2294         {
2295             //convert the ListTable entry to a NumberingRules propery and apply it
2296             StyleSheetPropertyMap* pStyleSheetPropertyMap = NULL;
2297             if ( m_pImpl->IsStyleSheetImport() )
2298             {
2299                 pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
2300             }
2301 
2302             ListsManager::Pointer pListTable = m_pImpl->GetListTable();
2303             ListDef::Pointer pList = pListTable->GetList( nIntValue );
2304             if( pList.get( ) )
2305             {
2306                 if ( pStyleSheetPropertyMap != NULL )
2307                 {
2308                     pStyleSheetPropertyMap->SetListId( nIntValue );
2309                 }
2310                 else
2311                 {
2312                     uno::Any aRules = uno::makeAny( pList->GetNumberingRules( ) );
2313                     rContext->Insert( PROP_NUMBERING_RULES, true, aRules );
2314                 }
2315             }
2316             else
2317             {
2318                 if ( pStyleSheetPropertyMap != NULL )
2319                 {
2320                     // set the number id for AbstractNum references
2321                     pStyleSheetPropertyMap->SetNumId( nIntValue );
2322                 }
2323                 else
2324                 {
2325                     rtl::OUString sNone;
2326                     rContext->Insert( PROP_NUMBERING_STYLE_NAME, true, uno::makeAny( sNone ) );
2327                 }
2328             }
2329         }
2330         break;
2331 
2332     case NS_sprm::LN_PFNoLineNumb:   // sprmPFNoLineNumb
2333         rContext->Insert(PROP_PARA_LINE_NUMBER_COUNT, true, uno::makeAny( nIntValue != 0 ? false : true) );
2334         break;
2335 
2336     case NS_sprm::LN_PChgTabsPapx:   // sprmPChgTabsPapx
2337         /* WRITERFILTERSTATUS: done: 90, planned: 8, spent: 8 */
2338         /* WRITERFILTERSTATUS: comment: bar tab stops a unavailable */
2339         {
2340             // Initialize tab stop vector from style sheet
2341             uno::Any aValue = m_pImpl->GetPropertyFromStyleSheet(PROP_PARA_TAB_STOPS);
2342             uno::Sequence< style::TabStop > aStyleTabStops;
2343             if(aValue >>= aStyleTabStops)
2344             {
2345                 m_pImpl->InitTabStopFromStyle( aStyleTabStops );
2346             }
2347 
2348             //create a new tab stop property - this is done with the contained properties
2349             resolveSprmProps(*this, rSprm);
2350             //add this property
2351             rContext->Insert(PROP_PARA_TAB_STOPS, true, uno::makeAny( m_pImpl->GetCurrentTabStopAndClear()));
2352         }
2353         break;
2354     case 0x845d:    //right margin Asian - undocumented
2355     case 0x845e:    //left margin Asian - undocumented
2356     case 16:      // sprmPDxaRight - right margin
2357     case NS_sprm::LN_PDxaRight:   // sprmPDxaRight - right margin
2358     case 17:
2359     case NS_sprm::LN_PDxaLeft:   // sprmPDxaLeft
2360         /* WRITERFILTERSTATUS: done: 50, planned: 5, spent: 1 */
2361         if( NS_sprm::LN_PDxaLeft == nSprmId || 0x17 == nSprmId|| (bExchangeLeftRight && nSprmId == 0x845d) || ( !bExchangeLeftRight && nSprmId == 0x845e))
2362             rContext->Insert(
2363                              eSprmType == SPRM_DEFAULT ? PROP_PARA_LEFT_MARGIN : PROP_LEFT_MARGIN,
2364                              true,
2365                              uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
2366         else if(eSprmType == SPRM_DEFAULT)
2367             rContext->Insert(
2368                              PROP_PARA_RIGHT_MARGIN, true,
2369                              uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
2370         //TODO: what happens to the right margins in numberings?
2371         break;
2372     case 18: // sprmPNest
2373     case NS_sprm::LN_PNest: // sprmPNest
2374         //not handled in the old WW8 filter
2375         break;
2376     case NS_sprm::LN_PDxaLeft1:    // sprmPDxaLeft1
2377     case 19:
2378     case NS_sprm::LN_PDxaLeft180:   // sprmPDxaLeft180
2379         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
2380         rContext->Insert(
2381                          eSprmType == SPRM_DEFAULT ? PROP_PARA_FIRST_LINE_INDENT : PROP_FIRST_LINE_OFFSET,
2382                          true,
2383                          uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
2384         break;
2385     case 20 : // sprmPDyaLine
2386     case NS_sprm::LN_PDyaLine:   // sprmPDyaLine
2387         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
2388         {
2389             style::LineSpacing aSpacing;
2390             sal_Int16 nDistance = sal_Int16(nIntValue & 0xffff);
2391             if(nIntValue & 0xffff0000)
2392             {
2393                 // single line in Writer is 100, in Word it is 240
2394                 aSpacing.Mode = style::LineSpacingMode::PROP;
2395                 aSpacing.Height = sal_Int16(sal_Int32(nDistance) * 100 /240);
2396             }
2397             else
2398             {
2399                 if(nDistance < 0)
2400                 {
2401                     aSpacing.Mode = style::LineSpacingMode::FIX;
2402                     aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100(-nDistance));
2403                 }
2404                 else if(nDistance >0)
2405                 {
2406                     aSpacing.Mode = style::LineSpacingMode::MINIMUM;
2407                     aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100(nDistance));
2408                 }
2409             }
2410             rContext->Insert(PROP_PARA_LINE_SPACING, true, uno::makeAny( aSpacing ));
2411         }
2412         break;
2413     case 21 : // legacy version
2414     case NS_sprm::LN_PDyaBefore:   // sprmPDyaBefore
2415         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
2416         rContext->Insert(PROP_PARA_TOP_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
2417         break;
2418     case 22 :
2419     case NS_sprm::LN_PDyaAfter:   // sprmPDyaAfter
2420         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
2421         rContext->Insert(PROP_PARA_BOTTOM_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
2422         break;
2423 
2424     case  23: //sprmPChgTabs
2425     case NS_sprm::LN_PChgTabs: // sprmPChgTabs
2426         /* WRITERFILTERSTATUS: done: 0, planned: 3, spent: 0 */
2427         OSL_ENSURE( false, "unhandled");
2428         //tabs of list level?
2429         break;
2430     case 24: // "sprmPFInTable"
2431     case NS_sprm::LN_PFInTable:
2432         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2433         break;  // sprmPFInTable
2434     case NS_sprm::LN_PTableDepth: //sprmPTableDepth
2435         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
2436         //not handled via sprm but via text( 0x07 )
2437     break;
2438     case 25: // "sprmPTtp" pap.fTtp
2439     case NS_sprm::LN_PFTtp:   // sprmPFTtp  was: Read_TabRowEnd
2440         break;
2441     case 26:  // "sprmPDxaAbs
2442     case NS_sprm::LN_PDxaAbs:
2443         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2444         break;  // sprmPDxaAbs
2445     case 27: //sprmPDyaAbs
2446     case NS_sprm::LN_PDyaAbs:
2447         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2448         break;  // sprmPDyaAbs
2449     case NS_sprm::LN_PDxaWidth:
2450         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2451         break;  // sprmPDxaWidth
2452     case NS_sprm::LN_PPc:
2453         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2454         break;  // sprmPPc
2455     case NS_sprm::LN_PBrcTop10:
2456         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2457         break;  // sprmPBrcTop10
2458     case NS_sprm::LN_PBrcLeft10:
2459         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2460         break;  // sprmPBrcLeft10
2461     case NS_sprm::LN_PBrcBottom10:
2462         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2463         break;  // sprmPBrcBottom10
2464     case NS_sprm::LN_PBrcRight10:
2465         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2466         break;  // sprmPBrcRight10
2467     case NS_sprm::LN_PBrcBetween10:
2468         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2469         break;  // sprmPBrcBetween10
2470     case NS_sprm::LN_PBrcBar10:
2471         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2472         break;  // sprmPBrcBar10
2473     case NS_sprm::LN_PDxaFromText10:
2474         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2475         break;  // sprmPDxaFromText10
2476     case NS_sprm::LN_PWr:
2477         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2478         break;  // sprmPWr
2479 
2480     case NS_ooxml::LN_CT_PrBase_pBdr: //paragraph border
2481         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2482         resolveSprmProps(*this, rSprm);
2483     break;
2484         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2485     case NS_sprm::LN_PBrcTop:   // sprmPBrcTop
2486         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2487         /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
2488     case NS_sprm::LN_PBrcLeft:   // sprmPBrcLeft
2489         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2490         /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
2491     case NS_sprm::LN_PBrcBottom:   // sprmPBrcBottom
2492         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2493         /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
2494     case NS_sprm::LN_PBrcRight:   // sprmPBrcRight
2495         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2496         /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
2497     case NS_sprm::LN_PBrcBetween:   // sprmPBrcBetween
2498         /* WRITERFILTERSTATUS: done: 0, planned: 8, spent: 0 */
2499         /* WRITERFILTERSTATUS: comment:  */
2500         {
2501             //in binary format the borders are directly provided in OOXML they are inside of properties
2502             if( IsOOXMLImport() )
2503             {
2504                 writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
2505                 if( pProperties.get())
2506                 {
2507                     BorderHandlerPtr pBorderHandler( new BorderHandler( true ) );
2508                     pProperties->resolve(*pBorderHandler);
2509                     PropertyIds eBorderId = PropertyIds( 0 );
2510                     PropertyIds eBorderDistId = PropertyIds( 0 );
2511                     switch( nSprmId )
2512                     {
2513                         case NS_sprm::LN_PBrcTop:
2514                             /* WRITERFILTERSTATUS: */
2515                             eBorderId = PROP_TOP_BORDER;
2516                             eBorderDistId = PROP_TOP_BORDER_DISTANCE;
2517                         break;
2518                         case NS_sprm::LN_PBrcLeft:
2519                             /* WRITERFILTERSTATUS: */
2520                             eBorderId = PROP_LEFT_BORDER;
2521                             eBorderDistId = PROP_LEFT_BORDER_DISTANCE;
2522                         break;
2523                         case NS_sprm::LN_PBrcBottom:
2524                             /* WRITERFILTERSTATUS: */
2525                             eBorderId = PROP_BOTTOM_BORDER         ;
2526                             eBorderDistId = PROP_BOTTOM_BORDER_DISTANCE;
2527                         break;
2528                         case NS_sprm::LN_PBrcRight:
2529                             /* WRITERFILTERSTATUS: */
2530                             eBorderId = PROP_RIGHT_BORDER;
2531                             eBorderDistId = PROP_RIGHT_BORDER_DISTANCE ;
2532                         break;
2533                         case NS_sprm::LN_PBrcBetween:
2534                             /* WRITERFILTERSTATUS: */
2535                             //not supported
2536                         break;
2537                         default:;
2538                     }
2539                     if( eBorderId )
2540                         rContext->Insert( eBorderId, true, uno::makeAny( pBorderHandler->getBorderLine()) , true);
2541                     if(eBorderDistId)
2542                         rContext->Insert(eBorderDistId, true, uno::makeAny( pBorderHandler->getLineDistance()), true);
2543                 }
2544             }
2545             else
2546             {
2547                 table::BorderLine aBorderLine;
2548                 sal_Int32 nLineDistance = ConversionHelper::MakeBorderLine( nIntValue, aBorderLine );
2549                 PropertyIds eBorderId = PROP_LEFT_BORDER;
2550                 PropertyIds eBorderDistId = PROP_LEFT_BORDER_DISTANCE  ;
2551                 switch( nSprmId )
2552                 {
2553                 case NS_sprm::LN_PBrcBetween:   // sprmPBrcBetween
2554                     /* WRITERFILTERSTATUS: */
2555                     OSL_ENSURE( false, "TODO: inner border is not handled");
2556                     break;
2557                 case NS_sprm::LN_PBrcLeft:   // sprmPBrcLeft
2558                     /* WRITERFILTERSTATUS: */
2559                     eBorderId = PROP_LEFT_BORDER;
2560                     eBorderDistId = PROP_LEFT_BORDER_DISTANCE  ;
2561                     break;
2562                 case NS_sprm::LN_PBrcRight:   // sprmPBrcRight
2563                     /* WRITERFILTERSTATUS: */
2564                     eBorderId = PROP_RIGHT_BORDER          ;
2565                     eBorderDistId = PROP_RIGHT_BORDER_DISTANCE ;
2566                     break;
2567                 case NS_sprm::LN_PBrcTop:   // sprmPBrcTop
2568                     /* WRITERFILTERSTATUS: */
2569                     eBorderId = PROP_TOP_BORDER            ;
2570                     eBorderDistId = PROP_TOP_BORDER_DISTANCE;
2571                     break;
2572                 case NS_sprm::LN_PBrcBottom:   // sprmPBrcBottom
2573                     /* WRITERFILTERSTATUS: */
2574                 default:
2575                     eBorderId = PROP_BOTTOM_BORDER         ;
2576                     eBorderDistId = PROP_BOTTOM_BORDER_DISTANCE;
2577                 }
2578                 rContext->Insert(eBorderId, true, uno::makeAny( aBorderLine ));
2579                 rContext->Insert(eBorderDistId, true, uno::makeAny( nLineDistance ));
2580             }
2581         }
2582     break;
2583     case NS_sprm::LN_PBorderTop:
2584         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2585         /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
2586     case NS_sprm::LN_PBorderLeft:
2587         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2588         /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
2589     case NS_sprm::LN_PBorderBottom:
2590         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2591         /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
2592     case NS_sprm::LN_PBorderRight:
2593         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2594         /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
2595         OSL_ENSURE( false, "TODO: border color definition");
2596         break;
2597     case NS_sprm::LN_PBrcBar:
2598         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2599         break;  // sprmPBrcBar
2600 
2601     case NS_sprm::LN_PFNoAutoHyph:   // sprmPFNoAutoHyph
2602         rContext->Insert(PROP_PARA_IS_HYPHENATION, true, uno::makeAny( nIntValue != 0 ? false : true ));
2603         break;
2604 
2605     case NS_sprm::LN_PWHeightAbs:
2606         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2607         break;  // sprmPWHeightAbs
2608     case NS_sprm::LN_PDcs:
2609         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2610         break;  // sprmPDcs
2611 
2612     case NS_sprm::LN_PShd: // sprmPShd
2613         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 2 */
2614     {
2615         //contains fore color, back color and shadow percentage, results in a brush
2616         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
2617         if( pProperties.get())
2618         {
2619             CellColorHandlerPtr pCellColorHandler( new CellColorHandler );
2620             pCellColorHandler->setParagraph();
2621             pProperties->resolve(*pCellColorHandler);
2622             rContext->insert( pCellColorHandler->getProperties(), true );
2623         }
2624     }
2625     break;
2626     case NS_sprm::LN_PDyaFromText:
2627         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2628         break;  // sprmPDyaFromText
2629     case NS_sprm::LN_PDxaFromText:
2630         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2631         break;  // sprmPDxaFromText
2632     case NS_sprm::LN_PFLocked:
2633         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2634         break;  // sprmPFLocked
2635 
2636     case NS_sprm::LN_PFWidowControl:
2637     case NS_ooxml::LN_CT_PPrBase_widowControl:
2638     {
2639         uno::Any aVal( uno::makeAny( sal_Int8(nIntValue != 0 ? 2 : 0 )));
2640         rContext->Insert( PROP_PARA_WIDOWS, true, aVal );
2641         rContext->Insert( PROP_PARA_ORPHANS, true, aVal );
2642     }
2643     break;  // sprmPFWidowControl
2644 
2645     case NS_sprm::LN_PRuler:
2646         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2647         break;  // sprmPRuler
2648     case NS_sprm::LN_PFKinsoku:
2649         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2650         break;  // sprmPFKinsoku
2651     case NS_sprm::LN_PFWordWrap:
2652         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2653         break;  // sprmPFWordWrap
2654     case NS_sprm::LN_PFOverflowPunct: ;  // sprmPFOverflowPunct - hanging punctuation
2655         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2656         rContext->Insert(PROP_PARA_IS_HANGING_PUNCTUATION, true, uno::makeAny( nIntValue ? false : true ));
2657         break;
2658     case NS_sprm::LN_PFTopLinePunct:
2659         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2660         break;  // sprmPFTopLinePunct
2661     case NS_sprm::LN_PFAutoSpaceDE:
2662         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2663         break;  // sprmPFAutoSpaceDE
2664     case NS_sprm::LN_PFAutoSpaceDN:
2665         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2666         break;  // sprmPFAutoSpaceDN
2667     case NS_sprm::LN_PWAlignFont:
2668         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2669         break;  // sprmPWAlignFont
2670     case NS_sprm::LN_PFrameTextFlow:
2671         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2672         break;  // sprmPFrameTextFlow
2673     case NS_sprm::LN_PISnapBaseLine:
2674         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2675         break;  // sprmPISnapBaseLine
2676     case NS_sprm::LN_PAnld:
2677         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2678         break;  // sprmPAnld
2679     case NS_sprm::LN_PPropRMark:
2680         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2681         break;  // sprmPPropRMark
2682 
2683     case NS_sprm::LN_POutLvl:
2684         {
2685             // - nIntValue == WW_OUTLINE_MAX --> no outline level
2686             // - WW_OUTLINE_MIN <= nIntValue < WW_OUTLINE_MAX --> outline level = nIntValue+1
2687             // - nIntValue > WW_OUTLINE_MAX are treated as no outline level
2688             const sal_Int16 nOutlineLevel = nIntValue >= WW_OUTLINE_MIN && nIntValue < WW_OUTLINE_MAX
2689                                             ? static_cast< sal_Int16 >(nIntValue+1)
2690                                             : 0;
2691             StyleSheetPropertyMap* pStyleSheetPropertyMap = NULL;
2692             if ( m_pImpl->IsStyleSheetImport() )
2693             {
2694                 pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
2695             }
2696             if ( pStyleSheetPropertyMap != 0 )
2697             {
2698                 pStyleSheetPropertyMap->SetOutlineLevel( nOutlineLevel );
2699             }
2700             else
2701             {
2702                 rContext->Insert(PROP_OUTLINE_LEVEL, true, uno::makeAny ( nOutlineLevel ));
2703             }
2704         }
2705         break;  // sprmPOutLvl
2706 
2707     case NS_sprm::LN_PFBiDi:
2708         if ( nIntValue == 1 )
2709         {
2710             rContext->Insert(PROP_WRITING_MODE, false, uno::makeAny( text::WritingMode2::RL_TB ));
2711             rContext->Insert(PROP_PARA_ADJUST, false, uno::makeAny( style::ParagraphAdjust_RIGHT ));
2712         }
2713         break;  // sprmPFBiDi
2714 
2715     case NS_ooxml::LN_EG_SectPrContents_bidi:
2716         if ( nIntValue == 1 )
2717         {
2718             if ( pSectionContext != NULL )
2719                 pSectionContext->Insert( PROP_WRITING_MODE, false, uno::makeAny( text::WritingMode2::RL_TB ) );
2720         }
2721         break;
2722 
2723     case NS_sprm::LN_PFNumRMIns:
2724         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2725         break;  // sprmPFNumRMIns
2726     case NS_sprm::LN_PCrLf:
2727         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2728         break;  // sprmPCrLf
2729     case NS_sprm::LN_PNumRM:
2730         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2731         break;  // sprmPNumRM
2732     case NS_sprm::LN_PHugePapx:
2733         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2734         break;  // sprmPHugePapx
2735     case NS_sprm::LN_PFUsePgsuSettings:
2736         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2737         break;  // sprmPFUsePgsuSettings
2738     case NS_sprm::LN_PFAdjustRight:
2739         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2740         break;  // sprmPFAdjustRight
2741     case NS_sprm::LN_CFRMarkDel:
2742         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2743         break;  // sprmCFRMarkDel
2744     case NS_sprm::LN_CFRMark:
2745         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2746         break;  // sprmCFRMark
2747     case NS_sprm::LN_CFFldVanish:
2748         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2749         break;  // sprmCFFldVanish
2750     case NS_sprm::LN_CFSpec:   // sprmCFSpec
2751         break;
2752     case NS_sprm::LN_CPicLocation:   // sprmCPicLocation
2753             //is being resolved on the tokenizer side
2754         break;
2755     case NS_sprm::LN_CIbstRMark:
2756         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2757         break;  // sprmCIbstRMark
2758     case NS_sprm::LN_CDttmRMark:
2759         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2760         break;  // sprmCDttmRMark
2761     case NS_sprm::LN_CFData:
2762         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2763         break;  // sprmCFData
2764     case NS_sprm::LN_CIdslRMark:
2765         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2766         break;  // sprmCIdslRMark
2767     case NS_sprm::LN_CChs:
2768         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2769         break;  // sprmCChs
2770     case NS_sprm::LN_CSymbol: // sprmCSymbol
2771         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2772         resolveSprmProps(*this, rSprm); //resolves LN_FONT and LN_CHAR
2773     break;
2774     case NS_sprm::LN_CFOle2:
2775         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2776         break;  // sprmCFOle2
2777     case NS_sprm::LN_CIdCharType:
2778         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2779         break;  // sprmCIdCharType
2780     case NS_sprm::LN_CHighlight:
2781         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2782         {
2783             sal_Int32 nColor = 0;
2784             if(true ==( mbIsHighlightSet = getColorFromIndex(nIntValue, nColor)))
2785                 rContext->Insert(PROP_CHAR_BACK_COLOR, true, uno::makeAny( nColor ));
2786             else if (mnBackgroundColor)
2787                 rContext->Insert(PROP_CHAR_BACK_COLOR, true, uno::makeAny( mnBackgroundColor ));
2788         }
2789         break;  // sprmCHighlight
2790     case NS_sprm::LN_CObjLocation:
2791         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2792         break;  // sprmCObjLocation
2793     case NS_sprm::LN_CFFtcAsciSymb:
2794         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2795         break;  // sprmCFFtcAsciSymb
2796     case NS_sprm::LN_CIstd:
2797         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2798         break;  // sprmCIstd
2799     case NS_sprm::LN_CIstdPermute:
2800         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2801         break;  // sprmCIstdPermute
2802     case NS_sprm::LN_CDefault:
2803         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2804         break;  // sprmCDefault
2805     case NS_sprm::LN_CPlain:
2806         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2807         break;  // sprmCPlain
2808     case NS_sprm::LN_CKcd:
2809         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2810         rContext->Insert(PROP_CHAR_EMPHASIS, true, uno::makeAny ( getEmphasisValue (nIntValue)));
2811         break;  // sprmCKcd
2812 
2813     case NS_sprm::LN_CFEmboss:// sprmCFEmboss
2814     case 60:// sprmCFBold
2815     case NS_sprm::LN_CFBoldBi:// sprmCFBoldBi    (offset 0x27 to normal bold)
2816     case NS_sprm::LN_CFItalicBi:// sprmCFItalicBi  (offset 0x27 to normal italic)
2817     case NS_sprm::LN_CFBold: //sprmCFBold
2818     case 61: /*sprmCFItalic*/
2819     case NS_sprm::LN_CFItalic: //sprmCFItalic
2820     case NS_sprm::LN_CFStrike: //sprmCFStrike
2821     case NS_sprm::LN_CFOutline: //sprmCFOutline
2822     case NS_sprm::LN_CFShadow: //sprmCFShadow
2823     case NS_sprm::LN_CFSmallCaps: //sprmCFSmallCaps
2824     case NS_sprm::LN_CFCaps: //sprmCFCaps
2825     case NS_sprm::LN_CFVanish: //sprmCFVanish
2826     case NS_sprm::LN_CFDStrike:   // sprmCFDStrike
2827         {
2828             PropertyIds ePropertyId = PROP_CHAR_WEIGHT; //initialized to prevent warning!
2829             switch( nSprmId )
2830             {
2831             case 60:// sprmCFBold
2832             case NS_sprm::LN_CFBold: /*sprmCFBold*/
2833                 ePropertyId = PROP_CHAR_WEIGHT;
2834                 break;
2835             case NS_sprm::LN_CFBoldBi: // sprmCFBoldBi
2836                 ePropertyId = PROP_CHAR_WEIGHT_COMPLEX;
2837                 break;
2838 
2839             case 61: /*sprmCFItalic*/
2840             case NS_sprm::LN_CFItalicBi: // sprmCFItalicBi
2841             case NS_sprm::LN_CFItalic: /*sprmCFItalic*/
2842                 ePropertyId = nSprmId == 0x836 ? PROP_CHAR_POSTURE : PROP_CHAR_POSTURE_COMPLEX;
2843                 break;
2844 
2845             case NS_sprm::LN_CFStrike: /*sprmCFStrike*/
2846             case NS_sprm::LN_CFDStrike : /*sprmCFDStrike double strike through*/
2847                 ePropertyId = PROP_CHAR_STRIKEOUT;
2848                 break;
2849 
2850             case NS_sprm::LN_CFOutline: /*sprmCFOutline*/
2851                 ePropertyId = PROP_CHAR_CONTOURED;
2852                 break;
2853 
2854             case NS_sprm::LN_CFShadow: /*sprmCFShadow*/
2855                 ePropertyId = PROP_CHAR_SHADOWED;
2856                 break;
2857 
2858             case NS_sprm::LN_CFSmallCaps: /*sprmCFSmallCaps*/
2859             case NS_sprm::LN_CFCaps: /*sprmCFCaps*/
2860                 ePropertyId = PROP_CHAR_CASE_MAP;
2861                 break;
2862 
2863             case NS_sprm::LN_CFVanish: /*sprmCFVanish*/
2864                 ePropertyId = PROP_CHAR_HIDDEN;
2865                 break;
2866 
2867             case NS_sprm::LN_CFEmboss: /*sprmCFEmboss*/
2868                 ePropertyId = PROP_CHAR_RELIEF;
2869                 break;
2870             }
2871             //expected: 0,1,128,129
2872             if(nIntValue != 128) //inherited from paragraph - ignore
2873             {
2874                 if( nIntValue == 129) //inverted style sheet value
2875                 {
2876                     //get value from style sheet and invert it
2877                     sal_Int16 nStyleValue = 0;
2878                     double fDoubleValue = 0;
2879                     uno::Any aStyleVal = m_pImpl->GetPropertyFromStyleSheet(ePropertyId);
2880                     if( !aStyleVal.hasValue() )
2881                     {
2882                         nIntValue = 0x83a == nSprmId ?
2883                             4 : 1;
2884                     }
2885                     else if(aStyleVal.getValueTypeClass() == uno::TypeClass_FLOAT )
2886                     {
2887                         //only in case of awt::FontWeight
2888                         aStyleVal >>= fDoubleValue;
2889                         nIntValue = fDoubleValue  > 100. ?  0 : 1;
2890                     }
2891                     else if((aStyleVal >>= nStyleValue) ||
2892                             (nStyleValue = (sal_Int16)comphelper::getEnumAsINT32(aStyleVal)) >= 0 )
2893                     {
2894                         nIntValue = 0x83a == nSprmId ?
2895                             nStyleValue ? 0 : 4 :
2896                             nStyleValue ? 0 : 1;
2897                     }
2898                     else
2899                     {
2900                         OSL_ENSURE( false, "what type was it");
2901                     }
2902                 }
2903 
2904                 switch( nSprmId )
2905                 {
2906                     case 60:/*sprmCFBold*/
2907                     case NS_sprm::LN_CFBold: /*sprmCFBold*/
2908                     case NS_sprm::LN_CFBoldBi: // sprmCFBoldBi
2909                     {
2910                         uno::Any aBold( uno::makeAny( nIntValue != 0 ? awt::FontWeight::BOLD : awt::FontWeight::NORMAL ) );
2911 
2912                         rContext->Insert(ePropertyId, true, aBold );
2913                         if( nSprmId != NS_sprm::LN_CFBoldBi ) // sprmCFBoldBi
2914                             rContext->Insert(PROP_CHAR_WEIGHT_ASIAN, true, aBold );
2915                     }
2916                     break;
2917 
2918                     case 61: /*sprmCFItalic*/
2919                     case NS_sprm::LN_CFItalic: /*sprmCFItalic*/
2920                     case NS_sprm::LN_CFItalicBi: // sprmCFItalicBi
2921                     {
2922                         uno::Any aPosture( uno::makeAny( nIntValue != 0 ? awt::FontSlant_ITALIC : awt::FontSlant_NONE ) );
2923                         rContext->Insert( ePropertyId, true, aPosture );
2924                         if( nSprmId != NS_sprm::LN_CFItalicBi ) // sprmCFItalicBi
2925                             rContext->Insert(PROP_CHAR_POSTURE_ASIAN, true, aPosture );
2926                     }
2927                     break;
2928 
2929                     case NS_sprm::LN_CFStrike: /*sprmCFStrike*/
2930                         rContext->Insert(ePropertyId, true,
2931                                          uno::makeAny( nIntValue != 0 ? awt::FontStrikeout::SINGLE : awt::FontStrikeout::NONE ) );
2932                     break;
2933 
2934                     case NS_sprm::LN_CFDStrike : /*sprmCFDStrike double strike through*/
2935                         rContext->Insert(ePropertyId, true,
2936                                          uno::makeAny( nIntValue != 0 ? awt::FontStrikeout::DOUBLE : awt::FontStrikeout::NONE ) );
2937                     break;
2938 
2939                     case NS_sprm::LN_CFOutline: /*sprmCFOutline*/
2940                     case NS_sprm::LN_CFShadow: /*sprmCFShadow*/
2941                     case NS_sprm::LN_CFVanish: /*sprmCFVanish*/
2942                         rContext->Insert(ePropertyId, true, uno::makeAny( nIntValue != 0 ? true : false ));
2943                     break;
2944 
2945                     case NS_sprm::LN_CFSmallCaps: /*sprmCFSmallCaps*/
2946                         rContext->Insert(ePropertyId, true,
2947                                          uno::makeAny( nIntValue != 0 ? style::CaseMap::SMALLCAPS : style::CaseMap::NONE));
2948                     break;
2949 
2950                     case NS_sprm::LN_CFCaps: /*sprmCFCaps*/
2951                         rContext->Insert(ePropertyId, true,
2952                                          uno::makeAny( nIntValue != 0 ? style::CaseMap::UPPERCASE : style::CaseMap::NONE));
2953                     break;
2954 
2955                     case NS_sprm::LN_CFEmboss: /*sprmCFEmboss*/
2956                         rContext->Insert(ePropertyId, true,
2957                                          uno::makeAny( nIntValue != 0 ? awt::FontRelief::EMBOSSED : awt::FontRelief::NONE ));
2958                     break;
2959 
2960                 }
2961             }
2962         }
2963         break;
2964     case NS_sprm::LN_CFtcDefault:
2965         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2966         break;  // sprmCFtcDefault
2967     case NS_sprm::LN_CKul: // sprmCKul
2968         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2969         {
2970             // Parameter:  0 = none,    1 = single,  2 = by Word,
2971             // 3 = double,  4 = dotted,  5 = hidden
2972             // 6 = thick,   7 = dash,    8 = dot(not used)
2973             // 9 = dotdash 10 = dotdotdash 11 = wave
2974             handleUnderlineType(nIntValue, rContext);
2975         }
2976         break;
2977     case NS_sprm::LN_CSizePos:
2978         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2979         break;  // sprmCSizePos
2980     case NS_sprm::LN_CLid:
2981         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2982         break;  // sprmCLid
2983     case NS_sprm::LN_CIco:
2984         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2985         {
2986             sal_Int32 nColor = 0;
2987             if (getColorFromIndex(nIntValue, nColor))
2988                 rContext->Insert(PROP_CHAR_COLOR, true, uno::makeAny( nColor ) );
2989         }
2990         break;  // sprmCIco
2991     case NS_sprm::LN_CHpsBi:    // sprmCHpsBi
2992     case NS_sprm::LN_CHps:    // sprmCHps
2993         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2994         {
2995             //multiples of half points (12pt == 24)
2996             double fVal = double(nIntValue) / 2.;
2997             uno::Any aVal = uno::makeAny( fVal );
2998             if( NS_sprm::LN_CHpsBi == nSprmId )
2999                 rContext->Insert( PROP_CHAR_HEIGHT_COMPLEX, true, aVal );
3000             else
3001             {
3002                 //Asian get the same value as Western
3003                 rContext->Insert( PROP_CHAR_HEIGHT, true, aVal );
3004                 rContext->Insert( PROP_CHAR_HEIGHT_ASIAN, true, aVal );
3005             }
3006         }
3007         break;
3008     case NS_sprm::LN_CHpsInc:
3009         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3010         break;  // sprmCHpsInc
3011 
3012     case NS_sprm::LN_CHpsPos:
3013         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3014         {
3015         // FIXME: ww8 filter in ww8par6.cxx has a Read_SubSuperProp function
3016         // that counts the escapement from this value and font size. So it will be
3017         // on our TODO list
3018             sal_Int16 nEscapement = 0;
3019             sal_Int8 nProp  = 100;
3020             if (nIntValue < 0)
3021                 nEscapement = -58;
3022             else if (nIntValue > 0)
3023                 nEscapement = 58;
3024             else /* (nIntValue == 0) */
3025                 nProp = 0;
3026             rContext->Insert(PROP_CHAR_ESCAPEMENT,         true, uno::makeAny( nEscapement ) );
3027             rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT,  true, uno::makeAny( nProp ) );
3028         }
3029         break;  // sprmCHpsPos
3030 
3031     case NS_sprm::LN_CHpsPosAdj:
3032         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3033         break;  // sprmCHpsPosAdj
3034     case NS_sprm::LN_CMajority:
3035         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3036         break;  // sprmCMajority
3037     case NS_sprm::LN_CIss:   // sprmCIss
3038         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3039         {
3040             //sub/super script 1: super, 2: sub, 0: normal
3041             sal_Int16 nEscapement = 0;
3042             sal_Int8 nProp  = 58;
3043             switch(nIntValue)
3044             {
3045             case 1: //super
3046                 nEscapement = 101;
3047                 break;
3048             case 2: //sub
3049                 nEscapement = -101;
3050                 break;
3051             case 0: nProp = 0;break; //none
3052             }
3053             rContext->Insert(PROP_CHAR_ESCAPEMENT,         true, uno::makeAny( nEscapement ) );
3054             rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT,  true, uno::makeAny( nProp ) );
3055         }
3056         break;
3057     case NS_sprm::LN_CHpsNew50:
3058         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3059         break;  // sprmCHpsNew50
3060     case NS_sprm::LN_CHpsInc1:
3061         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3062         break;  // sprmCHpsInc1
3063     case 71 : //"sprmCDxaSpace"
3064     case 96 : //"sprmCDxaSpace"
3065     case NS_sprm::LN_CDxaSpace:  // sprmCDxaSpace
3066         {
3067             /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
3068             //Kerning half point values
3069             //TODO: there are two kerning values -
3070             // in ww8par6.cxx NS_sprm::LN_CHpsKern is used as boolean AutoKerning
3071             sal_Int16 nResult = static_cast<sal_Int16>(ConversionHelper::convertTwipToMM100(nIntValue));
3072             if (m_pImpl->IsInComments())
3073             {
3074                 nResult = static_cast<sal_Int16>(nIntValue);
3075             }
3076             rContext->Insert(PROP_CHAR_CHAR_KERNING, true, uno::makeAny(nResult));
3077         }
3078         break;
3079 
3080     case NS_sprm::LN_CHpsKern:  // sprmCHpsKern    auto kerning is bound to a minimum font size in Word - but not in Writer :-(
3081         rContext->Insert(PROP_CHAR_AUTO_KERNING, true, uno::makeAny( true ) );
3082         break;
3083 
3084     case NS_sprm::LN_CMajority50:
3085         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3086         break;  // sprmCMajority50
3087     case NS_sprm::LN_CHpsMul:
3088         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3089         break;  // sprmCHpsMul
3090     case NS_sprm::LN_CYsri:
3091         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3092         break;  // sprmCYsri
3093     case NS_sprm::LN_CRgFtc0:  // sprmCRgFtc0     //ascii font index
3094         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3095     case NS_sprm::LN_CRgFtc1:  // sprmCRgFtc1     //Asian font index
3096         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3097     case NS_sprm::LN_CRgFtc2:  // sprmCRgFtc2     //CTL font index
3098         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3099     case NS_sprm::LN_CFtcBi: // sprmCFtcBi      //font index of a CTL font
3100         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3101         {
3102             FontTablePtr pFontTable = m_pImpl->GetFontTable();
3103             if(nIntValue >= 0 && pFontTable->size() > sal_uInt32(nIntValue))
3104             {
3105                 PropertyIds eFontName    = PROP_CHAR_FONT_NAME;
3106                 PropertyIds eFontStyle   = PROP_CHAR_FONT_STYLE;
3107                 PropertyIds eFontFamily  = PROP_CHAR_FONT_FAMILY;
3108                 PropertyIds eFontCharSet = PROP_CHAR_FONT_CHAR_SET;
3109                 PropertyIds eFontPitch   = PROP_CHAR_FONT_PITCH;
3110                 switch(nSprmId)
3111                 {
3112                 case NS_sprm::LN_CRgFtc0:
3113                     //already initialized
3114                     break;
3115                 case NS_sprm::LN_CRgFtc1:
3116                     eFontName =     PROP_CHAR_FONT_NAME_ASIAN;
3117                     eFontStyle =    PROP_CHAR_FONT_STYLE_ASIAN;
3118                     eFontFamily =   PROP_CHAR_FONT_FAMILY_ASIAN;
3119                     eFontCharSet =  PROP_CHAR_FONT_CHAR_SET_ASIAN;
3120                     eFontPitch =    PROP_CHAR_FONT_PITCH_ASIAN;
3121                     break;
3122                 case NS_sprm::LN_CRgFtc2:
3123                 case NS_sprm::LN_CFtcBi:
3124                     eFontName =     PROP_CHAR_FONT_NAME_COMPLEX;
3125                     eFontStyle =    PROP_CHAR_FONT_STYLE_COMPLEX;
3126                     eFontFamily =   PROP_CHAR_FONT_FAMILY_COMPLEX;
3127                     eFontCharSet =  PROP_CHAR_FONT_CHAR_SET_COMPLEX;
3128                     eFontPitch =    PROP_CHAR_FONT_PITCH_COMPLEX;
3129                     break;
3130                 }
3131                 const FontEntry::Pointer_t pFontEntry(pFontTable->getFontEntry(sal_uInt32(nIntValue)));
3132                 rContext->Insert(eFontName, true, uno::makeAny( pFontEntry->sFontName  ));
3133                 //                rContext->Insert(eFontStyle, uno::makeAny( pFontEntry->  ));
3134                 //                rContext->Insert(eFontFamily, uno::makeAny( pFontEntry->  ));
3135                 rContext->Insert(eFontCharSet, true, uno::makeAny( (sal_Int16)pFontEntry->nTextEncoding  ));
3136                 rContext->Insert(eFontPitch, true, uno::makeAny( pFontEntry->nPitchRequest  ));
3137             }
3138         }
3139         break;
3140 
3141     case NS_sprm::LN_CCharScale:  // sprmCCharScale
3142         rContext->Insert( PROP_CHAR_SCALE_WIDTH, true, uno::makeAny( sal_Int16(nIntValue) ));
3143         break;
3144 
3145     case NS_sprm::LN_CFImprint: // sprmCFImprint   1 or 0
3146         // FontRelief: NONE, EMBOSSED, ENGRAVED
3147         rContext->Insert(PROP_CHAR_RELIEF, true,
3148                          uno::makeAny( nIntValue != 0 ? awt::FontRelief::ENGRAVED : awt::FontRelief::NONE ));
3149         break;
3150 
3151     case NS_sprm::LN_CFObj:
3152         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3153         break;  // sprmCFObj
3154     case NS_sprm::LN_CPropRMark:
3155         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3156         break;  // sprmCPropRMark
3157     case NS_sprm::LN_CSfxText:
3158         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3159         // The file-format has many character animations. We have only
3160         // one, so we use it always. Suboptimal solution though.
3161         if (nIntValue)
3162             rContext->Insert(PROP_CHAR_FLASH, true, uno::makeAny( true ));
3163         else
3164             rContext->Insert(PROP_CHAR_FLASH, true, uno::makeAny( false ));
3165         break;  // sprmCSfxText
3166     case NS_sprm::LN_CFBiDi:
3167         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3168         break;  // sprmCFBiDi
3169     case NS_sprm::LN_CFDiacColor:
3170         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3171         break;  // sprmCFDiacColor
3172     case NS_sprm::LN_CIcoBi:
3173         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3174         break;  // sprmCIcoBi
3175     case NS_sprm::LN_CDispFldRMark:
3176         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3177         break;  // sprmCDispFldRMark
3178     case NS_sprm::LN_CIbstRMarkDel:
3179         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3180         break;  // sprmCIbstRMarkDel
3181     case NS_sprm::LN_CDttmRMarkDel:
3182         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3183         break;  // sprmCDttmRMarkDel
3184     case NS_sprm::LN_CBrc:
3185         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3186         break;  // sprmCBrc
3187     case NS_sprm::LN_CShd:
3188         /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
3189         break;  // sprmCShd
3190     case NS_sprm::LN_CIdslRMarkDel:
3191         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3192         break;  // sprmCIdslRMarkDel
3193     case NS_sprm::LN_CFUsePgsuSettings:
3194         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3195         break;  // sprmCFUsePgsuSettings
3196     case NS_sprm::LN_CCpg:
3197         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3198         break;  // sprmCCpg
3199     case NS_sprm::LN_CLidBi:  // sprmCLidBi      language complex
3200         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3201     case NS_sprm::LN_CRgLid0_80: //sprmCRgLid0_80
3202         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 1 */
3203         //undocumented but interpreted as western language
3204     case NS_sprm::LN_CRgLid0:   // sprmCRgLid0    language Western
3205         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3206     case NS_sprm::LN_CRgLid1:   // sprmCRgLid1    language Asian
3207         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3208         {
3209             lang::Locale aLocale;
3210             MsLangId::convertLanguageToLocale( (LanguageType)nIntValue, aLocale );
3211             rContext->Insert(NS_sprm::LN_CRgLid0 == nSprmId ? PROP_CHAR_LOCALE :
3212                              NS_sprm::LN_CRgLid1 == nSprmId ? PROP_CHAR_LOCALE_ASIAN : PROP_CHAR_LOCALE_COMPLEX,
3213                              true,
3214                              uno::makeAny( aLocale ) );
3215         }
3216         break;
3217 
3218     case NS_sprm::LN_CIdctHint:   // sprmCIdctHint
3219         //list table - text offset???
3220         break;
3221     case NS_sprm::LN_PicBrcl:
3222         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3223         break;  // sprmPicBrcl
3224     case NS_sprm::LN_PicScale:
3225         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3226         break;  // sprmPicScale
3227     case NS_sprm::LN_PicBrcTop:
3228         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3229         break;  // sprmPicBrcTop
3230     case NS_sprm::LN_PicBrcLeft:
3231         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3232         break;  // sprmPicBrcLeft
3233     case NS_sprm::LN_PicBrcBottom:
3234         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3235         break;  // sprmPicBrcBoConversionHelper::convertTwipToMM100ttom
3236     case NS_sprm::LN_PicBrcRight:
3237         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3238         break;  // sprmPicBrcRight
3239     case NS_sprm::LN_ScnsPgn:
3240         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3241         break;  // sprmScnsPgn
3242     case NS_sprm::LN_SiHeadingPgn:
3243         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3244         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3245         if(pSectionContext)
3246             pSectionContext->SetEvenlySpaced( nIntValue > 0 );
3247 
3248         break;  // sprmSiHeadingPgn
3249     case NS_sprm::LN_SOlstAnm:
3250         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3251         break;  // sprmSOlstAnm
3252     case 136:
3253     case NS_sprm::LN_SDxaColWidth: // sprmSDxaColWidth
3254         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3255         // contains the twip width of the column as 3-byte-code
3256         // the lowet byte contains the index
3257         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3258         if(pSectionContext)
3259             pSectionContext->AppendColumnWidth( ConversionHelper::convertTwipToMM100( (nIntValue & 0xffff00) >> 8 ));
3260         break;
3261     case NS_sprm::LN_SDxaColSpacing: // sprmSDxaColSpacing
3262         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3263         // the lowet byte contains the index
3264         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3265         if(pSectionContext)
3266             pSectionContext->AppendColumnSpacing( ConversionHelper::convertTwipToMM100( (nIntValue & 0xffff00) >> 8 ));
3267         break;
3268     case 138:
3269     case NS_sprm::LN_SFEvenlySpaced:
3270         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3271         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3272         if(pSectionContext)
3273             pSectionContext->SetEvenlySpaced( nIntValue > 0 );
3274         break;  // sprmSFEvenlySpaced
3275     case NS_sprm::LN_SFProtected: // sprmSFProtected
3276         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3277         //todo: missing feature - unlocked sections in protected documents
3278         break;
3279     case NS_sprm::LN_SDmBinFirst: // sprmSDmBinFirst
3280         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3281         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3282         if(pSectionContext)
3283             pSectionContext->SetFirstPaperBin(nIntValue);
3284         break;
3285     case NS_sprm::LN_SDmBinOther: // sprmSDmBinOther
3286         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3287         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3288         if(pSectionContext)
3289             pSectionContext->SetPaperBin( nIntValue );
3290         break;
3291     case NS_sprm::LN_SBkc: // sprmSBkc
3292         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
3293         /* break type
3294           0 - No break
3295           1 - New Column
3296           2 - New page
3297           3 - Even page
3298           4 - odd page
3299         */
3300         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3301         if(pSectionContext)
3302             pSectionContext->SetBreakType( nIntValue );
3303         break;
3304     case 143:
3305     case NS_sprm::LN_SFTitlePage: // sprmSFTitlePage
3306     case NS_ooxml::LN_EG_SectPrContents_titlePg:
3307         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3308     {
3309         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3310         if(pSectionContext)
3311             pSectionContext->SetTitlePage( nIntValue > 0 ? true : false );//section has title page
3312     }
3313     break;
3314     case 144:
3315     case NS_sprm::LN_SCcolumns: // sprmSCcolumns
3316         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3317         //no of columns - 1
3318         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3319         if(pSectionContext)
3320             pSectionContext->SetColumnCount( (sal_Int16) nIntValue );
3321     break;
3322     case 145:
3323     case NS_sprm::LN_SDxaColumns:           // sprmSDxaColumns
3324         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3325         //column distance - default 708 twip
3326         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3327         if(pSectionContext)
3328             pSectionContext->SetColumnDistance( ConversionHelper::convertTwipToMM100( nIntValue ) );
3329         break;
3330     case NS_sprm::LN_SFAutoPgn:
3331         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3332         break;  // sprmSFAutoPgn
3333     case 147:
3334     case NS_sprm::LN_SNfcPgn: // sprmSNfcPgn
3335         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3336         //page numbering 0 - Arab, 1 - ROMAN, 2 - roman, 3 - ABC, 4 abc
3337         sal_Int16 nNumbering;
3338         switch( nIntValue )
3339         {
3340             case 1:  nNumbering = style::NumberingType::ROMAN_UPPER;
3341             case 2:  nNumbering = style::NumberingType::ROMAN_LOWER;
3342             case 3:  nNumbering = style::NumberingType::CHARS_UPPER_LETTER;
3343             case 4:  nNumbering = style::NumberingType::CHARS_LOWER_LETTER;
3344             case 0:
3345             default:
3346                     nNumbering = style::NumberingType::ARABIC;
3347         }
3348         rContext->Insert( PROP_NUMBERING_TYPE, false, uno::makeAny( nNumbering ) );
3349     break;
3350     case NS_sprm::LN_SDyaPgn:
3351         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3352         break;  // sprmSDyaPgn
3353     case NS_sprm::LN_SDxaPgn:
3354         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3355         break;  // sprmSDxaPgn
3356     case 150:
3357     case NS_sprm::LN_SFPgnRestart: // sprmSFPgnRestart
3358     {
3359         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3360         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3361         if(pSectionContext)
3362             pSectionContext->SetPageNoRestart( nIntValue > 0 );
3363     }
3364     break;
3365     case NS_sprm::LN_SFEndnote:
3366         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3367         break;  // sprmSFEndnote
3368     case 154:
3369     case NS_sprm::LN_SNLnnMod:// sprmSNLnnMod
3370         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3371         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3372         if( pSectionContext )
3373             pSectionContext->SetLnnMod( nIntValue );
3374     break;
3375     case 155:
3376     case NS_sprm::LN_SDxaLnn: // sprmSDxaLnn
3377         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3378         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3379         if( pSectionContext )
3380             pSectionContext->SetdxaLnn( nIntValue );
3381     break;
3382     case 152:
3383     case NS_sprm::LN_SLnc:// sprmSLnc
3384         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3385         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3386         if( pSectionContext )
3387             pSectionContext->SetLnc( nIntValue );
3388     break;
3389     case 160:
3390     case NS_sprm::LN_SLnnMin: // sprmSLnnMin
3391         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3392         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3393         if( pSectionContext )
3394             pSectionContext->SetLnnMin( nIntValue );
3395     break;
3396 
3397     case NS_sprm::LN_SGprfIhdt:
3398         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3399         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3400         //flags about header/footer sharing and footnotes?
3401         /* ww8scan.hxx:
3402          * WW8_HEADER_EVEN = 0x01, WW8_HEADER_ODD = 0x02, WW8_FOOTER_EVEN = 0x04,
3403          * WW8_FOOTER_ODD = 0x08, WW8_HEADER_FIRST = 0x10, WW8_FOOTER_FIRST = 0x20
3404          */
3405 
3406 //        if(pSectionContext)
3407     break;  // sprmSGprfIhdt
3408     case NS_sprm::LN_SDyaHdrTop: // sprmSDyaHdrTop
3409         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3410         // default 720 twip
3411         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3412         if(pSectionContext)
3413             pSectionContext->SetHeaderTop( ConversionHelper::convertTwipToMM100( nIntValue ));
3414     break;
3415     case NS_sprm::LN_SDyaHdrBottom: // sprmSDyaHdrBottom
3416         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3417         // default 720 twip
3418         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3419         if(pSectionContext)
3420             pSectionContext->SetHeaderBottom( ConversionHelper::convertTwipToMM100( nIntValue ) );
3421     break;
3422     case 158:
3423     case NS_sprm::LN_SLBetween: // sprmSLBetween
3424         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3425         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3426         if(pSectionContext)
3427             pSectionContext->SetSeparatorLine( nIntValue > 0 );
3428     break;
3429     case NS_sprm::LN_SVjc:
3430         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3431         break;  // sprmSVjc
3432     case 161:
3433     case NS_sprm::LN_SPgnStart: // sprmSPgnStart
3434         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3435         //page number
3436         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3437         if(pSectionContext)
3438             pSectionContext->SetPageNumber( nIntValue );
3439     break;
3440     case 162:
3441     case NS_sprm::LN_SBOrientation:
3442         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3443         //todo: the old filter assumed that a value of 2 points to double-pages layout
3444         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3445         if(pSectionContext)
3446             pSectionContext->SetLandscape( nIntValue > 0 );
3447         rContext->Insert( PROP_IS_LANDSCAPE , false, uno::makeAny( nIntValue > 0 ));
3448     break;  // sprmSBOrientation
3449     case NS_sprm::LN_SBCustomize:
3450         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3451         break;  // sprmSBCustomize
3452     case 165:
3453     case NS_sprm::LN_SYaPage: // sprmSYaPage
3454     {
3455         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3456         //page height, rounded to default values, default: 0x3dc0 twip
3457         sal_Int32 nHeight = ConversionHelper::convertTwipToMM100( nIntValue );
3458         rContext->Insert( PROP_HEIGHT, false, uno::makeAny( PaperInfo::sloppyFitPageDimension( nHeight ) ) );
3459     }
3460     break;
3461     case NS_sprm::LN_SXaPage:   // sprmSXaPage
3462     {
3463         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3464         //page width, rounded to default values, default 0x2fd0 twip
3465         sal_Int32 nWidth = ConversionHelper::convertTwipToMM100( nIntValue );
3466         rContext->Insert( PROP_WIDTH, false, uno::makeAny( PaperInfo::sloppyFitPageDimension( nWidth ) ) );
3467     }
3468     break;
3469     case 166:
3470     case NS_sprm::LN_SDxaLeft:  // sprmSDxaLeft
3471     {
3472         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3473         //left page margin default 0x708 twip
3474         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3475         sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( nIntValue );
3476         if(pSectionContext)
3477             pSectionContext->SetLeftMargin( nConverted );
3478         rContext->Insert( PROP_LEFT_MARGIN, false, uno::makeAny( nConverted ));
3479     }
3480     break;
3481     case 167:
3482     case NS_sprm::LN_SDxaRight: // sprmSDxaRight
3483     {
3484         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3485         //right page margin default 0x708 twip
3486         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3487         sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( nIntValue );
3488         if(pSectionContext)
3489             pSectionContext->SetRightMargin( nConverted );
3490         rContext->Insert( PROP_RIGHT_MARGIN, false, uno::makeAny( nConverted ));
3491     }
3492     break;
3493     case 168:
3494     case NS_sprm::LN_SDyaTop: // sprmSDyaTop
3495     {
3496         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3497         //top page margin default 1440 twip
3498         //todo: check cast of SVBT16
3499         sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( static_cast< sal_Int16 >( nIntValue ) );
3500         rContext->Insert( PROP_TOP_MARGIN, false, uno::makeAny( nConverted ) );
3501         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3502         if(pSectionContext)
3503             pSectionContext->SetTopMargin( nConverted );
3504     }
3505     break;
3506     case 169:
3507     case NS_sprm::LN_SDyaBottom: // sprmSDyaBottom
3508     {
3509         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3510         //bottom page margin default 1440 twip
3511         //todo: check cast of SVBT16
3512         sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( static_cast< sal_Int16 >( nIntValue ) );
3513         rContext->Insert( PROP_BOTTOM_MARGIN, false, uno::makeAny( nConverted) );
3514         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3515         if(pSectionContext)
3516             pSectionContext->SetBottomMargin( nConverted );
3517     }
3518     break;
3519     case 170:
3520     case NS_sprm::LN_SDzaGutter:   // sprmSDzaGutter
3521     {
3522         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3523         // gutter is added to one of the margins of a section depending on RTL, can be placed on top either
3524         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3525         if(pSectionContext)
3526         {
3527             pSectionContext->SetDzaGutter( ConversionHelper::convertTwipToMM100( nIntValue  ) );
3528         }
3529     }
3530     break;
3531     case NS_sprm::LN_SDmPaperReq:   // sprmSDmPaperReq
3532         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
3533         //paper code - no handled in old filter
3534         break;
3535     case NS_sprm::LN_SPropRMark:
3536         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3537         break;  // sprmSPropRMark
3538     case NS_sprm::LN_SFBiDi:// sprmSFBiDi
3539     {
3540         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
3541         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3542         if(pSectionContext)
3543             pSectionContext->SetSFBiDi( nIntValue > 0 );
3544     }
3545     break;
3546     case NS_sprm::LN_SFFacingCol:
3547         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3548         break;  // sprmSFFacingCol
3549     case NS_sprm::LN_SFRTLGutter: // sprmSFRTLGutter
3550     {
3551         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3552         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3553         if(pSectionContext)
3554             pSectionContext->SetGutterRTL( nIntValue > 0 );
3555     }
3556     break;
3557     case NS_sprm::LN_SBrcTop:   // sprmSBrcTop
3558         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3559     case NS_sprm::LN_SBrcLeft:   // sprmSBrcLeft
3560         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3561     case NS_sprm::LN_SBrcBottom:  // sprmSBrcBottom
3562         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3563     case NS_sprm::LN_SBrcRight:  // sprmSBrcRight
3564         /* WRITERFILTERSTATUS: Sectiondone: 100, planned: 0.5, spent: 0 */
3565         {
3566             table::BorderLine aBorderLine;
3567             sal_Int32 nLineDistance = ConversionHelper::MakeBorderLine( nIntValue, aBorderLine );
3568             OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3569             if(pSectionContext)
3570             {
3571                 static const BorderPosition aPositions[4] =
3572                     {
3573                         BORDER_TOP,
3574                         BORDER_LEFT,
3575                         BORDER_BOTTOM,
3576                         BORDER_RIGHT
3577                     };
3578                 pSectionContext->SetBorder( aPositions[nSprmId - NS_sprm::LN_SBrcTop], nLineDistance, aBorderLine );
3579             }
3580         }
3581         break;
3582 
3583     case NS_sprm::LN_SPgbProp:  // sprmSPgbProp
3584         {
3585             OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3586             if(pSectionContext)
3587             {
3588                 pSectionContext->ApplyBorderToPageStyles( m_pImpl->GetPageStyles(), m_pImpl->GetTextFactory(), nIntValue );
3589             }
3590         }
3591         break;
3592     case NS_sprm::LN_SDxtCharSpace:
3593     {
3594         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3595         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3596         if(pSectionContext)
3597         {
3598             pSectionContext->SetDxtCharSpace( nIntValue );
3599         }
3600     }
3601     break;  // sprmSDxtCharSpace
3602     case NS_sprm::LN_SDyaLinePitch:   // sprmSDyaLinePitch
3603     {
3604         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3605         //see SwWW8ImplReader::SetDocumentGrid
3606         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3607         if(pSectionContext)
3608         {
3609             pSectionContext->SetGridLinePitch( ConversionHelper::convertTwipToMM100( nIntValue ) );
3610         }
3611     }
3612     break;
3613     case 0x703a: //undocumented, grid related?
3614         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3615         OSL_ENSURE( false, "TODO: not handled yet"); //nIntValue like 0x008a2373 ?
3616         break;
3617     case NS_sprm::LN_SClm:
3618     {
3619         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3620         sal_Int16 nGridType = text::TextGridMode::NONE;
3621         switch( nIntValue )
3622         {
3623             case 0:
3624                 nGridType = text::TextGridMode::NONE;
3625             break;
3626             case 3:
3627                 //Text snaps to char grid, this doesn't make a lot of sense to
3628                 //me. This is closer than LINES_CHARS
3629                 nGridType = text::TextGridMode::LINES;
3630             break;
3631             case 1:
3632                 nGridType = text::TextGridMode::LINES_AND_CHARS;
3633             break;
3634             case 2:
3635                 nGridType = text::TextGridMode::LINES;
3636             break;
3637             default:;
3638         }
3639         rContext->Insert( PROP_GRID_MODE, false, uno::makeAny( nGridType ) );
3640 
3641     //Seems to force this behaviour in word ?
3642     if(nGridType != text::TextGridMode::NONE)
3643         m_pImpl->SetDocumentSettingsProperty(
3644             PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_ADD_EXTERNAL_LEADING ),
3645             uno::makeAny( true ) );
3646     }
3647     break;  // sprmSClm
3648     case NS_sprm::LN_STextFlow:
3649     case NS_ooxml::LN_EG_SectPrContents_textDirection:
3650         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3651     {
3652         /* 0 HoriLR 1 Vert TR 2 Vert TR 3 Vert TT 4 HoriLT
3653             only 0 and 1 can be imported correctly
3654           */
3655         sal_Int16 nDirection = text::WritingMode_LR_TB;
3656         switch( nIntValue )
3657         {
3658             case 0:
3659             case 4:
3660                 nDirection = text::WritingMode_LR_TB;
3661             break;
3662             case 1:
3663             case 2:
3664             case 3:
3665                 nDirection = text::WritingMode_TB_RL;
3666             break;
3667             default:;
3668         }
3669 
3670         PropertyMap * pTargetContext = rContext.get();
3671 
3672         if (pSectionContext != NULL &&
3673             nSprmId == NS_ooxml::LN_EG_SectPrContents_textDirection)
3674         {
3675             pTargetContext = pSectionContext;
3676         }
3677 
3678         pTargetContext->Insert(PROP_WRITING_MODE, false, uno::makeAny( nDirection ) );
3679     }
3680     break;  // sprmSTextFlow
3681     case NS_sprm::LN_TJc: // sprmTJc
3682     case NS_sprm::LN_TDxaLeft:
3683     case NS_sprm::LN_TDxaGapHalf:
3684     case NS_sprm::LN_TFCantSplit:
3685     case NS_sprm::LN_TTableHeader:
3686     case NS_sprm::LN_TTableBorders: // sprmTTableBorders
3687     {
3688         OSL_ENSURE( false, "table propeties should be handled by the table manager");
3689     }
3690     break;
3691     case NS_sprm::LN_TDefTable10:
3692         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3693         break;  // sprmTDefTable10
3694     case NS_sprm::LN_TDyaRowHeight:
3695         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3696         break;  // sprmTDyaRowHeight
3697     case NS_sprm::LN_TDefTable:
3698         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3699         break;  // sprmTDefTable
3700     case NS_sprm::LN_TDefTableShd:
3701         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3702         break;  // sprmTDefTableShd
3703     case NS_sprm::LN_TTlp:
3704         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3705         break;  // sprmTTlp
3706     case NS_sprm::LN_TFBiDi:
3707         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3708         break;  // sprmTFBiDi
3709     case NS_sprm::LN_THTMLProps:
3710         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3711         break;  // sprmTHTMLProps
3712     case NS_sprm::LN_TSetBrc:
3713         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3714         break;  // sprmTSetBrc
3715     case NS_sprm::LN_TInsert:
3716         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3717         break;  // sprmTInsert
3718     case NS_sprm::LN_TDelete:
3719         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3720         break;  // sprmTDelete
3721     case NS_sprm::LN_TDxaCol:
3722         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3723         break;  // sprmTDxaCol
3724     case NS_sprm::LN_TMerge:
3725         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3726         break;  // sprmTMerge
3727     case NS_sprm::LN_TSplit:
3728         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3729         break;  // sprmTSplit
3730     case NS_sprm::LN_TSetBrc10:
3731         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3732         break;  // sprmTSetBrc10
3733     case 164: // sprmTSetShd
3734     case NS_sprm::LN_TSetShd:
3735         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3736         break;  // sprmTSetShd
3737     case NS_sprm::LN_TSetShdOdd:
3738         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3739         break;  // sprmTSetShdOdd
3740     case NS_sprm::LN_TTextFlow:
3741         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3742         break;  // sprmTTextFlow
3743     case NS_sprm::LN_TDiagLine:
3744         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3745         break;  // sprmTDiagLine
3746     case NS_sprm::LN_TVertMerge:
3747         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3748         break;  // sprmTVertMerge
3749     case NS_sprm::LN_TVertAlign:
3750         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3751         break;  // sprmTVertAlign
3752         // the following are not part of the official documentation
3753     case 0x6870: //TxtForeColor
3754         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3755         {
3756             //contains a color as 0xTTRRGGBB while SO uses 0xTTRRGGBB
3757             sal_Int32 nColor = ConversionHelper::ConvertColor(nIntValue);
3758             rContext->Insert(PROP_CHAR_COLOR, true, uno::makeAny( nColor ) );
3759         }
3760         break;
3761     case 0x4874:
3762         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3763         break; //seems to be a language id for Asian text - undocumented
3764     case 0x6877: //underlining color
3765         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3766         {
3767             sal_Int32 nColor = ConversionHelper::ConvertColor(nIntValue);
3768             rContext->Insert(PROP_CHAR_UNDERLINE_HAS_COLOR, true, uno::makeAny( true ) );
3769             rContext->Insert(PROP_CHAR_UNDERLINE_COLOR, true, uno::makeAny( nColor ) );
3770         }
3771         break;
3772     case 0x6815:
3773         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3774         break; //undocumented
3775     case NS_sprm::LN_CIndrsid:
3776         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3777         break; //undocumented
3778     case 0x6467:
3779         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3780         break; //undocumented
3781     case 0xF617:
3782         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3783         break; //undocumented
3784     case 0xd634: // sprmTNewSpacing - table spacing ( see WW8TabBandDesc::ProcessSpacing() )
3785         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3786         break;
3787     case NS_sprm::LN_TTRLeft:
3788         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3789         break; //undocumented
3790     case 0x4888:
3791         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3792     case 0x6887:
3793         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3794         //properties of list levels - undocumented
3795         break;
3796     case 0xd234:
3797         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3798     case 0xd235:
3799         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3800     case 0xd236:
3801         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3802     case 0xd237:
3803         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3804         break;//undocumented section properties
3805     case NS_sprm::LN_CEastAsianLayout:
3806         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3807         resolveSprmProps(*this, rSprm);
3808         break;
3809     case NS_ooxml::LN_CT_Tabs_tab:
3810         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3811         resolveSprmProps(*this, rSprm);
3812         m_pImpl->IncorporateTabStop(m_pImpl->m_aCurrentTabStop);
3813         m_pImpl->m_aCurrentTabStop = DeletableTabStop();
3814     break;
3815     case NS_ooxml::LN_CT_PPrBase_tabs:
3816         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3817     {
3818         // Initialize tab stop vector from style sheet
3819         if( !m_pImpl->IsStyleSheetImport() )
3820         {
3821             uno::Any aValue = m_pImpl->GetPropertyFromStyleSheet(PROP_PARA_TAB_STOPS);
3822             uno::Sequence< style::TabStop > aStyleTabStops;
3823             if(aValue >>= aStyleTabStops)
3824             {
3825                 m_pImpl->InitTabStopFromStyle( aStyleTabStops );
3826             }
3827         }
3828         resolveSprmProps(*this, rSprm);
3829         rContext->Insert(PROP_PARA_TAB_STOPS, true, uno::makeAny( m_pImpl->GetCurrentTabStopAndClear()));
3830     }
3831     break;
3832 
3833     case NS_ooxml::LN_CT_PPr_sectPr:
3834         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3835     case NS_ooxml::LN_EG_RPrBase_color:
3836         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3837     case NS_ooxml::LN_EG_RPrBase_rFonts:
3838         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3839     case NS_ooxml::LN_EG_RPrBase_bdr:
3840         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3841     case NS_ooxml::LN_EG_RPrBase_eastAsianLayout:
3842         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3843     case NS_ooxml::LN_EG_RPrBase_u:
3844         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3845     case NS_ooxml::LN_EG_RPrBase_lang:
3846         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3847     case NS_ooxml::LN_CT_PPrBase_spacing:
3848         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3849     case NS_ooxml::LN_CT_PPrBase_ind:
3850         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3851     case NS_ooxml::LN_CT_RPrDefault_rPr:
3852         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3853     case NS_ooxml::LN_CT_PPrDefault_pPr:
3854         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3855     case NS_ooxml::LN_CT_DocDefaults_pPrDefault:
3856         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3857     case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
3858         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3859     case NS_ooxml::LN_CT_Style_pPr:
3860         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3861     case NS_ooxml::LN_CT_Style_rPr:
3862         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3863     case NS_ooxml::LN_CT_PPr_rPr:
3864         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3865     case NS_ooxml::LN_CT_PPrBase_numPr:
3866         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3867         resolveSprmProps(*this, rSprm);
3868     break;
3869 
3870     case NS_ooxml::LN_EG_SectPrContents_footnotePr:
3871         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3872     case NS_ooxml::LN_EG_SectPrContents_endnotePr:
3873         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3874         m_pImpl->SetInFootnoteProperties( NS_ooxml::LN_EG_SectPrContents_footnotePr == nSprmId );
3875         resolveSprmProps(*this, rSprm);
3876     break;
3877 
3878     case NS_ooxml::LN_EG_SectPrContents_lnNumType:
3879         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3880     {
3881         resolveSprmProps(*this, rSprm);
3882         LineNumberSettings aSettings = m_pImpl->GetLineNumberSettings();
3883         aSettings.bIsOn = true;
3884         m_pImpl->SetLineNumberSettings( aSettings );
3885         //apply settings at XLineNumberingProperties
3886         try
3887         {
3888             uno::Reference< text::XLineNumberingProperties > xLineNumberingProperties( m_pImpl->GetTextDocument(), uno::UNO_QUERY_THROW );
3889             uno::Reference< beans::XPropertySet > xLineNumberingPropSet = xLineNumberingProperties->getLineNumberingProperties();
3890             PropertyNameSupplier& rNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
3891             xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_IS_ON ), uno::makeAny(true) );
3892             if( aSettings.nInterval )
3893                 xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_INTERVAL ), uno::makeAny((sal_Int16)aSettings.nInterval) );
3894             if( aSettings.nDistance )
3895                 xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_DISTANCE ), uno::makeAny(aSettings.nDistance) );
3896             xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_RESTART_AT_EACH_PAGE ), uno::makeAny(aSettings.bRestartAtEachPage) );
3897         }
3898         catch( const uno::Exception& )
3899         {
3900         }
3901 
3902     }
3903     break;
3904     case NS_ooxml::LN_CT_PPrBase_framePr:
3905         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3906     {
3907         PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
3908         if( pContext.get() )
3909         {
3910             ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pContext.get() );
3911             pParaContext->SetFrameMode();
3912 
3913         }
3914         else
3915         {
3916             //TODO: What about style sheet import of frame properties
3917         }
3918         resolveSprmProps(*this, rSprm);
3919     }
3920     break;
3921     case NS_ooxml::LN_EG_SectPrContents_pgSz:
3922         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3923         CT_PageSz.code = 0;
3924         {
3925             PaperInfo aLetter(PAPER_LETTER);
3926             CT_PageSz.w = aLetter.getWidth();
3927             CT_PageSz.h = aLetter.getHeight();
3928         }
3929         CT_PageSz.orient = false;
3930         resolveSprmProps(*this, rSprm);
3931         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3932         if(pSectionContext)
3933         {
3934             pSectionContext->Insert( PROP_HEIGHT, false, uno::makeAny( CT_PageSz.h ) );
3935             pSectionContext->Insert( PROP_IS_LANDSCAPE, false, uno::makeAny( CT_PageSz.orient ));
3936             pSectionContext->Insert( PROP_WIDTH, false, uno::makeAny( CT_PageSz.w ) );
3937             pSectionContext->SetLandscape( CT_PageSz.orient );
3938         }
3939         break;
3940 
3941     case NS_ooxml::LN_EG_SectPrContents_pgMar:
3942         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3943         m_pImpl->InitPageMargins();
3944         resolveSprmProps(*this, rSprm);
3945         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3946         if(pSectionContext)
3947         {
3948             const _PageMar& rPageMar = m_pImpl->GetPageMargins();
3949             pSectionContext->SetTopMargin( rPageMar.top );
3950             pSectionContext->SetRightMargin( rPageMar.right );
3951             pSectionContext->SetBottomMargin( rPageMar.bottom );
3952             pSectionContext->SetLeftMargin( rPageMar.left );
3953             pSectionContext->SetHeaderTop( rPageMar.header );
3954             pSectionContext->SetHeaderBottom( rPageMar.footer );
3955         }
3956         break;
3957 
3958     case NS_ooxml::LN_EG_SectPrContents_cols:
3959         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3960     {
3961         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
3962         if( pProperties.get())
3963         {
3964 
3965             SectionColumnHandlerPtr pSectHdl( new SectionColumnHandler );
3966             pProperties->resolve(*pSectHdl);
3967             if(pSectionContext)
3968             {
3969                 if( pSectHdl->IsEqualWidth() )
3970                 {
3971                     pSectionContext->SetEvenlySpaced( true );
3972                     pSectionContext->SetColumnCount( (sal_Int16) (pSectHdl->GetNum() - 1) );
3973                     pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
3974                     pSectionContext->SetSeparatorLine( pSectHdl->IsSeparator() );
3975                 }
3976                 else if( !pSectHdl->GetColumns().empty() )
3977                 {
3978                     pSectionContext->SetEvenlySpaced( false );
3979                     pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
3980                     pSectionContext->SetColumnCount( (sal_Int16)(pSectHdl->GetColumns().size() -1));
3981                     std::vector<_Column>::const_iterator tmpIter = pSectHdl->GetColumns().begin();
3982                     for (; tmpIter != pSectHdl->GetColumns().end(); tmpIter++)
3983                     {
3984                         pSectionContext->AppendColumnWidth( tmpIter->nWidth );
3985                         if ((tmpIter != pSectHdl->GetColumns().end() - 1) || (tmpIter->nSpace > 0))
3986                             pSectionContext->AppendColumnSpacing( tmpIter->nSpace );
3987                     }
3988                     pSectionContext->SetSeparatorLine( pSectHdl->IsSeparator() );
3989                 }
3990                 else if( pSectHdl->GetNum() > 0 )
3991                 {
3992                     pSectionContext->SetColumnCount( (sal_Int16)pSectHdl->GetNum() - 1 );
3993                     pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
3994                 }
3995             }
3996         }
3997     }
3998     break;
3999     case NS_ooxml::LN_EG_SectPrContents_docGrid:
4000         resolveSprmProps(*this, rSprm);
4001     break;
4002     case NS_ooxml::LN_EG_SectPrContents_pgBorders:
4003     {
4004         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
4005         if( pProperties.get( ) && pSectionContext )
4006         {
4007             PageBordersHandlerPtr pHandler( new PageBordersHandler );
4008             pProperties->resolve( *pHandler );
4009 
4010             // Set the borders to the context and apply them to the styles
4011             pHandler->SetBorders( pSectionContext );
4012             pSectionContext->SetBorderParams( pHandler->GetDisplayOffset( ) );
4013         }
4014     }
4015     break;
4016 
4017     case NS_ooxml::LN_CT_PPrBase_pStyle:
4018         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4019     {
4020         m_pImpl->SetCurrentParaStyleId( sStringValue );
4021         StyleSheetTablePtr pStyleTable = m_pImpl->GetStyleSheetTable();
4022         const ::rtl::OUString sConvertedStyleName = pStyleTable->ConvertStyleName( sStringValue, true );
4023 		if (m_pImpl->GetTopContext() && m_pImpl->GetTopContextType() != CONTEXT_SECTION)
4024 	        m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, true, uno::makeAny( sConvertedStyleName ));
4025         const StyleSheetEntryPtr pEntry = pStyleTable->FindStyleSheetByISTD(sStringValue);
4026         //apply numbering to paragraph if it was set at the style
4027         OSL_ENSURE( pEntry.get(), "no style sheet found" );
4028         const StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<const StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : 0);
4029 
4030         if( pStyleSheetProperties && pStyleSheetProperties->GetListId() >= 0 )
4031             rContext->Insert( PROP_NUMBERING_STYLE_NAME, true, uno::makeAny(
4032                         ListDef::GetStyleName( pStyleSheetProperties->GetListId( ) ) ), false);
4033 
4034         if( pStyleSheetProperties && pStyleSheetProperties->GetListLevel() >= 0 )
4035             rContext->Insert( PROP_NUMBERING_LEVEL, true, uno::makeAny(pStyleSheetProperties->GetListLevel()), false);
4036     }
4037     break;
4038     case NS_ooxml::LN_EG_RPrBase_rStyle:
4039         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4040         {
4041             rtl::OUString sConvertedName( m_pImpl->GetStyleSheetTable()->ConvertStyleName( sStringValue, true ) );
4042             // First check if the style exists in the document.
4043             StyleSheetEntryPtr pEntry = m_pImpl->GetStyleSheetTable( )->FindStyleSheetByStyleName( sConvertedName );
4044             bool bExists = pEntry.get( ) && ( pEntry->nStyleTypeCode == STYLE_TYPE_CHAR );
4045 
4046             // Add the property if the style exists
4047             if ( bExists && m_pImpl->GetTopContext() )
4048                 m_pImpl->GetTopContext()->Insert( PROP_CHAR_STYLE_NAME, true, uno::makeAny( sConvertedName ) );
4049         }
4050     break;
4051     case NS_ooxml::LN_CT_TblPrBase_tblCellMar: //cell margins
4052         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4053     {
4054         resolveSprmProps(*this, rSprm);//contains LN_CT_TblCellMar_top, LN_CT_TblCellMar_left, LN_CT_TblCellMar_bottom, LN_CT_TblCellMar_right
4055     }
4056     break;
4057     case NS_ooxml::LN_CT_TblCellMar_top:
4058             /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
4059     case NS_ooxml::LN_CT_TblCellMar_left:
4060             /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
4061     case NS_ooxml::LN_CT_TblCellMar_bottom:
4062             /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
4063     case NS_ooxml::LN_CT_TblCellMar_right:
4064             /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
4065     {
4066         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
4067         if( pProperties.get())
4068         {
4069             MeasureHandlerPtr pMeasureHandler( new MeasureHandler );
4070             pProperties->resolve(*pMeasureHandler);
4071             sal_Int32 nMeasureValue = pMeasureHandler->getMeasureValue();
4072             PropertyIds eId = META_PROP_CELL_MAR_TOP;
4073             switch(nSprmId)
4074             {
4075                 case NS_ooxml::LN_CT_TblCellMar_top:
4076                     /* WRITERFILTERSTATUS: */
4077                 break;
4078                 case NS_ooxml::LN_CT_TblCellMar_left:
4079                     /* WRITERFILTERSTATUS: */
4080                     eId = META_PROP_CELL_MAR_LEFT;
4081                 break;
4082                 case NS_ooxml::LN_CT_TblCellMar_bottom:
4083                     /* WRITERFILTERSTATUS: */
4084                     eId = META_PROP_CELL_MAR_BOTTOM;
4085                 break;
4086                 case NS_ooxml::LN_CT_TblCellMar_right:
4087                     /* WRITERFILTERSTATUS: */
4088                     eId = META_PROP_CELL_MAR_RIGHT;
4089                 break;
4090                 default:;
4091             }
4092             rContext->Insert( eId, false, uno::makeAny(nMeasureValue), false);
4093         }
4094     }
4095     break;
4096     case NS_sprm::LN_CFNoProof: //0x875 no grammar and spell checking, unsupported
4097         /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
4098     break;
4099     case NS_ooxml::LN_anchor_anchor: // at_character drawing
4100         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4101     case NS_ooxml::LN_inline_inline: // as_character drawing
4102         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4103     {
4104         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
4105         if( pProperties.get())
4106         {
4107             GraphicImportType eGraphicType =
4108                 (NS_ooxml::LN_anchor_anchor ==
4109                  sal::static_int_cast<Id>(nSprmId)) ?
4110                 IMPORT_AS_DETECTED_ANCHOR :
4111                 IMPORT_AS_DETECTED_INLINE;
4112             GraphicImportPtr pGraphicImport =
4113                 m_pImpl->GetGraphicImport(eGraphicType);
4114             pProperties->resolve(*pGraphicImport);
4115             m_pImpl->ImportGraphic(pProperties, eGraphicType);
4116             if( !pGraphicImport->IsGraphic() )
4117             {
4118                 m_pImpl->ResetGraphicImport();
4119                 // todo: It's a shape, now start shape import
4120             }
4121         }
4122     }
4123     break;
4124 
4125     case NS_ooxml::LN_EG_RPrBase_vertAlign:
4126         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4127     {
4128         sal_Int16 nEscapement = 0;
4129         sal_Int8 nProp  = 58;
4130         if( sStringValue.equalsAscii( "superscript" ))
4131                 nEscapement = 101;
4132         else if( sStringValue.equalsAscii( "subscript" ))
4133                 nEscapement = -101;
4134         else
4135             nProp = 100;
4136 
4137         rContext->Insert(PROP_CHAR_ESCAPEMENT,         true, uno::makeAny( nEscapement ) );
4138         rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT,  true, uno::makeAny( nProp ) );
4139     }
4140     break;
4141 
4142 //    case NS_ooxml::LN_CT_FtnEdn_type
4143         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4144 //    case NS_ooxml::LN_CT_FtnEdn_id
4145         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4146 //    case NS_ooxml::LN_EG_FtnEdnNumProps_numRestart
4147     case NS_ooxml::LN_CT_FtnProps_pos:
4148             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4149     //footnotes in word can be at page end or beneath text - writer supports only the first
4150     //endnotes in word can be at section end or document end - writer supports only the latter
4151     // -> so this property can be ignored
4152     break;
4153     case NS_ooxml::LN_EG_FtnEdnNumProps_numStart:
4154             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4155     case NS_ooxml::LN_CT_FtnProps_numFmt:
4156             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4157     case NS_ooxml::LN_CT_EdnProps_numFmt:
4158             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4159     {
4160         try
4161         {
4162             uno::Reference< beans::XPropertySet >  xFtnEdnSettings;
4163             if( m_pImpl->IsInFootnoteProperties() )
4164             {
4165                 uno::Reference< text::XFootnotesSupplier> xFootnotesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
4166                 xFtnEdnSettings = xFootnotesSupplier->getFootnoteSettings();
4167             }
4168             else
4169             {
4170                 uno::Reference< text::XEndnotesSupplier> xEndnotesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
4171                 xFtnEdnSettings = xEndnotesSupplier->getEndnoteSettings();
4172             }
4173             if( NS_ooxml::LN_EG_FtnEdnNumProps_numStart == nSprmId )
4174             {
4175                 xFtnEdnSettings->setPropertyValue(
4176                     PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_START_AT),
4177                                                                     uno::makeAny( sal_Int16( nIntValue - 1 )));
4178             }
4179             else
4180             {
4181                 sal_Int16 nNumType = ConversionHelper::ConvertNumberingType( nIntValue );
4182                 xFtnEdnSettings->setPropertyValue(
4183                     PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_NUMBERING_TYPE),
4184                                                                     uno::makeAny( nNumType ));
4185             }
4186         }
4187         catch( const uno::Exception& )
4188         {
4189         }
4190     }
4191     break;
4192     case NS_ooxml::LN_paratrackchange:
4193         m_pImpl->StartParaChange( );
4194     case NS_ooxml::LN_trackchange:
4195         /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
4196     case NS_ooxml::LN_EG_RPrContent_rPrChange:
4197         /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
4198     {
4199         m_pImpl->AddNewRedline( );
4200         resolveSprmProps(*this, rSprm );
4201         // now the properties author, date and id should be available
4202         sal_Int32 nToken = m_pImpl->GetCurrentRedlineToken();
4203         switch( nToken & 0xffff )
4204         {
4205             case ooxml::OOXML_mod :
4206             case ooxml::OOXML_ins :
4207             case ooxml::OOXML_del : break;
4208             default: OSL_ENSURE( false, "redline token other than mod, ins or del" );
4209         }
4210         m_pImpl->EndParaChange( );
4211     }
4212     break;
4213     case NS_ooxml::LN_CT_RPrChange_rPr:
4214         /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
4215     break;
4216     /* WRITERFILTERSTATUS: done: 0, planned: 4, spent: 0 */
4217     case NS_ooxml::LN_object:
4218     {
4219         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
4220         if( pProperties.get( ) )
4221         {
4222             OLEHandlerPtr pOLEHandler( new OLEHandler );
4223             pProperties->resolve(*pOLEHandler);
4224             if ( pOLEHandler->isOLEObject( ) )
4225             {
4226                 ::rtl::OUString sStreamName = pOLEHandler->copyOLEOStream( m_pImpl->GetTextDocument() );
4227                 if( sStreamName.getLength() )
4228                 {
4229                     m_pImpl->appendOLE( sStreamName, pOLEHandler );
4230                 }
4231             }
4232         }
4233     }
4234     break;
4235 //    case NS_ooxml::LN_CT_EdnProps_pos
4236         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4237 //    case NS_ooxml::LN_CT_EdnProps_numFmt
4238         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4239 //    case NS_ooxml::LN_CT_FtnDocProps_footnote
4240         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4241 //    case NS_ooxml::LN_CT_EdnDocProps_endnote
4242         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4243     //break;
4244     case NS_ooxml::LN_EG_HdrFtrReferences_headerReference: // header reference - not needed
4245         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4246     case NS_ooxml::LN_EG_HdrFtrReferences_footerReference: // footer reference - not needed
4247         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4248     break;
4249     case NS_ooxml::LN_EG_RPrBase_snapToGrid: // "Use document grid  settings for inter-paragraph spacing"
4250             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4251     break;
4252     case NS_sprm::LN_PContextualSpacing:
4253         //TODO: determines whether top/bottom paragraph spacing is added if equal styles are following - unsupported
4254     break;
4255     case NS_ooxml::LN_EG_SectPrContents_formProt: //section protection, only form editing is enabled - unsupported
4256     case NS_ooxml::LN_EG_SectPrContents_vAlign:
4257     case NS_ooxml::LN_EG_RPrBase_fitText:
4258             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
4259     break;
4260     case NS_ooxml::LN_ffdata:
4261     {
4262         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
4263         if (pProperties.get() != NULL)
4264         {
4265             FFDataHandler::Pointer_t pFFDataHandler(new FFDataHandler());
4266 
4267             pProperties->resolve(*pFFDataHandler);
4268             m_pImpl->SetFieldFFData(pFFDataHandler);
4269         }
4270     }
4271     break;
4272     default:
4273         {
4274 #ifdef DEBUG_DOMAINMAPPER
4275             dmapper_logger->startElement("unhandled");
4276             dmapper_logger->attribute("id", nSprmId);
4277             dmapper_logger->endElement("unhandled");
4278 #endif
4279         }
4280     }
4281 }
4282 /*-- 09.06.2006 09:52:13---------------------------------------------------
4283 
4284 -----------------------------------------------------------------------*/
4285 void DomainMapper::lcl_entry(int /*pos*/,
4286                          writerfilter::Reference<Properties>::Pointer_t ref)
4287 {
4288     ref->resolve(*this);
4289 }
4290 /*-- 09.06.2006 09:52:13---------------------------------------------------
4291 
4292 -----------------------------------------------------------------------*/
4293 void DomainMapper::data(const sal_uInt8* /*buf*/, size_t /*len*/,
4294                         writerfilter::Reference<Properties>::Pointer_t /*ref*/)
4295 {
4296 }
4297 /*-- 09.06.2006 09:52:13---------------------------------------------------
4298 
4299 -----------------------------------------------------------------------*/
4300 void DomainMapper::lcl_startSectionGroup()
4301 {
4302     m_pImpl->PushProperties(CONTEXT_SECTION);
4303 }
4304 /*-- 09.06.2006 09:52:13---------------------------------------------------
4305 
4306 -----------------------------------------------------------------------*/
4307 void DomainMapper::lcl_endSectionGroup()
4308 {
4309     PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_SECTION);
4310     SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
4311     OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
4312     if(pSectionContext)
4313         pSectionContext->CloseSectionGroup( *m_pImpl );
4314     m_pImpl->PopProperties(CONTEXT_SECTION);
4315 }
4316 /*-- 09.06.2006 09:52:13---------------------------------------------------
4317 
4318 -----------------------------------------------------------------------*/
4319 void DomainMapper::lcl_startParagraphGroup()
4320 {
4321     m_pImpl->getTableManager().startParagraphGroup();
4322     m_pImpl->PushProperties(CONTEXT_PARAGRAPH);
4323     static ::rtl::OUString sDefault( ::rtl::OUString::createFromAscii("Standard") );
4324 	if (m_pImpl->GetTopContext())
4325 	{
4326 	    m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, true, uno::makeAny( sDefault ) );
4327     	if (m_pImpl->isBreakDeferred(PAGE_BREAK))
4328        		m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
4329     	else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
4330         	m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
4331 	}
4332     m_pImpl->clearDeferredBreaks();
4333 }
4334 /*-- 09.06.2006 09:52:14---------------------------------------------------
4335 
4336 -----------------------------------------------------------------------*/
4337 void DomainMapper::lcl_endParagraphGroup()
4338 {
4339     m_pImpl->PopProperties(CONTEXT_PARAGRAPH);
4340     m_pImpl->getTableManager().endParagraphGroup();
4341     //frame conversion has to be executed after table conversion
4342     m_pImpl->ExecuteFrameConversion();
4343 }
4344 
4345 void DomainMapper::markLastParagraphInSection( )
4346 {
4347     m_pImpl->SetIsLastParagraphInSection( true );
4348 }
4349 
4350 void DomainMapper::lcl_startShape( uno::Reference< drawing::XShape > xShape )
4351 {
4352     m_pImpl->PushShapeContext( xShape );
4353 }
4354 
4355 void DomainMapper::lcl_endShape( )
4356 {
4357     m_pImpl->PopShapeContext( );
4358 }
4359 
4360 /*-- 13.06.2007 16:15:55---------------------------------------------------
4361 
4362   -----------------------------------------------------------------------*/
4363 void DomainMapper::PushStyleSheetProperties( PropertyMapPtr pStyleProperties, bool bAffectTableMngr )
4364 {
4365     m_pImpl->PushStyleProperties( pStyleProperties );
4366     if ( bAffectTableMngr )
4367         m_pImpl->getTableManager( ).SetStyleProperties( pStyleProperties );
4368 }
4369 /*-- 13.06.2007 16:15:55---------------------------------------------------
4370 
4371   -----------------------------------------------------------------------*/
4372 void DomainMapper::PopStyleSheetProperties( bool bAffectTableMngr )
4373 {
4374     m_pImpl->PopProperties( CONTEXT_STYLESHEET );
4375     if ( bAffectTableMngr )
4376     {
4377         PropertyMapPtr emptyPtr;
4378         m_pImpl->getTableManager( ).SetStyleProperties( emptyPtr );
4379     }
4380 }
4381 /*-- 28.01.2008 14:52:33---------------------------------------------------
4382 
4383   -----------------------------------------------------------------------*/
4384 void DomainMapper::PushListProperties( ::boost::shared_ptr<PropertyMap> pListProperties )
4385 {
4386     m_pImpl->PushListProperties( pListProperties );
4387 }
4388 /*-- 28.01.2008 14:52:33---------------------------------------------------
4389 
4390   -----------------------------------------------------------------------*/
4391 void DomainMapper::PopListProperties()
4392 {
4393     m_pImpl->PopProperties( CONTEXT_LIST );
4394 }
4395 /*-- 09.06.2006 09:52:14---------------------------------------------------
4396 
4397 -----------------------------------------------------------------------*/
4398 
4399 void DomainMapper::lcl_startCharacterGroup()
4400 {
4401     m_pImpl->PushProperties(CONTEXT_CHARACTER);
4402 }
4403 /*-- 09.06.2006 09:52:14---------------------------------------------------
4404 
4405 -----------------------------------------------------------------------*/
4406 void DomainMapper::lcl_endCharacterGroup()
4407 {
4408     m_pImpl->PopProperties(CONTEXT_CHARACTER);
4409 }
4410 /*-- 09.06.2006 09:52:14---------------------------------------------------
4411 
4412 -----------------------------------------------------------------------*/
4413 void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len)
4414 {
4415     //TODO: Determine the right text encoding (FIB?)
4416     ::rtl::OUString sText( (const sal_Char*) data_, len, RTL_TEXTENCODING_MS_1252 );
4417 #ifdef DEBUG_DOMAINMAPPER
4418     dmapper_logger->startElement("text");
4419     dmapper_logger->chars(sText);
4420     dmapper_logger->endElement("text");
4421 #endif
4422 
4423     try
4424     {
4425         if(len == 1)
4426         {
4427             switch(*data_)
4428             {
4429                 case 0x02: return; //footnote character
4430                 case 0x0c: //page break
4431                     m_pImpl->deferBreak(PAGE_BREAK);
4432                     return;
4433                 case 0x0e: //column break
4434                     m_pImpl->deferBreak(COLUMN_BREAK);
4435                     return;
4436                 case 0x07:
4437                     m_pImpl->getTableManager().text(data_, len);
4438                 case 0x0d:
4439                     m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH));
4440                     return;
4441                 case 0x13:
4442                     m_pImpl->PushFieldContext();
4443                     return;
4444                 case 0x14:
4445                     // delimiter not necessarily available
4446                     // appears only if field contains further content
4447                     m_pImpl->CloseFieldCommand();
4448                     return;
4449                 case 0x15: /* end of field */
4450                     m_pImpl->PopFieldContext();
4451                     return;
4452                 default:
4453                     break;
4454             }
4455         }
4456 
4457         PropertyMapPtr pContext = m_pImpl->GetTopContext();
4458 	if ( pContext && !pContext->GetFootnote().is() )
4459 	{
4460 	    if (m_pImpl->isBreakDeferred(PAGE_BREAK))
4461                 m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
4462             else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
4463                 m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
4464             m_pImpl->clearDeferredBreaks();
4465         }
4466 
4467         if( pContext->GetFootnote().is() && m_pImpl->IsCustomFtnMark() )
4468         {
4469             pContext->GetFootnote()->setLabel( sText );
4470             m_pImpl->SetCustomFtnMark( false );
4471             //otherwise ignore sText
4472         }
4473         else if( m_pImpl->IsOpenFieldCommand() )
4474             m_pImpl->AppendFieldCommand(sText);
4475         else if( m_pImpl->IsOpenField() && m_pImpl->IsFieldResultAsString())
4476              /*depending on the success of the field insert operation this result will be
4477               set at the field or directly inserted into the text*/
4478             m_pImpl->SetFieldResult( sText );
4479         else
4480         {
4481             //--> debug
4482             //sal_uInt32 nSize = pContext->size();
4483             //<--
4484 
4485             if( !bool(pContext))
4486                 pContext.reset(new PropertyMap());
4487 
4488             m_pImpl->appendTextPortion( sText, pContext );
4489         }
4490     }
4491     catch( const uno::RuntimeException& )
4492     {
4493         std::clog << __FILE__ << "(l" << __LINE__ << ")" << std::endl;
4494     }
4495 }
4496 /*-- 09.06.2006 09:52:15---------------------------------------------------
4497 
4498 -----------------------------------------------------------------------*/
4499 void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
4500 {
4501     OUString sText;
4502     OUStringBuffer aBuffer = OUStringBuffer(len);
4503     aBuffer.append( (const sal_Unicode *) data_, len);
4504     sText = aBuffer.makeStringAndClear();
4505 
4506     try
4507     {
4508         m_pImpl->getTableManager().utext(data_, len);
4509 
4510         if(len == 1 && ((*data_) == 0x0d || (*data_) == 0x07))
4511             m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH));
4512         else
4513         {
4514 
4515             PropertyMapPtr pContext = m_pImpl->GetTopContext();
4516             if ( pContext && !pContext->GetFootnote().is() )
4517             {
4518                 if (m_pImpl->isBreakDeferred(PAGE_BREAK))
4519                     m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
4520                 else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
4521                     m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
4522                 m_pImpl->clearDeferredBreaks();
4523             }
4524 
4525             /* doesn't seem to be working
4526             if( pContext->GetFootnote().is() )
4527             {
4528                 //todo: the check for 0x0a is a hack!
4529                 if( *data_ != 0x0a && !pContext->GetFootnoteSymbol() )
4530                     pContext->GetFootnote()->setLabel( sText );
4531                 //otherwise ignore sText
4532             }
4533             else */
4534             if( pContext && pContext->GetFootnote().is() )
4535             {
4536                 if( !pContext->GetFootnoteSymbol() )
4537                     pContext->GetFootnote()->setLabel( sText );
4538                 //otherwise ignore sText
4539             }
4540             else if( m_pImpl->IsOpenFieldCommand() )
4541                 m_pImpl->AppendFieldCommand(sText);
4542             else if( m_pImpl->IsOpenField() && m_pImpl->IsFieldResultAsString())
4543                 /*depending on the success of the field insert operation this result will be
4544                   set at the field or directly inserted into the text*/
4545                 m_pImpl->SetFieldResult( sText );
4546             else
4547             {
4548                 if( !bool(pContext))
4549                     pContext.reset(new PropertyMap());
4550 
4551                 m_pImpl->appendTextPortion( sText, pContext );
4552             }
4553 
4554         }
4555     }
4556     catch( const uno::RuntimeException& )
4557     {
4558     }
4559 }
4560 /*-- 09.06.2006 09:52:15---------------------------------------------------
4561 
4562 -----------------------------------------------------------------------*/
4563 void DomainMapper::lcl_props(writerfilter::Reference<Properties>::Pointer_t ref)
4564 {
4565     string sType = ref->getType();
4566     if( sType == "PICF" )
4567     {
4568         m_pImpl->ImportGraphic(ref, IMPORT_AS_GRAPHIC);
4569     }
4570     else if( sType == "FSPA" )
4571     {
4572         m_pImpl->ImportGraphic(ref, IMPORT_AS_SHAPE);
4573     }
4574     else
4575         ref->resolve(*this);
4576 }
4577 /*-- 09.06.2006 09:52:15---------------------------------------------------
4578 
4579 -----------------------------------------------------------------------*/
4580 void DomainMapper::lcl_table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
4581 {
4582     // printf ( "DomainMapper::table(0x%.4x)\n", (unsigned int)name);
4583     m_pImpl->SetAnyTableImport(true);
4584     /* WRITERFILTERSTATUS: table: attributedata */
4585     switch(name)
4586     {
4587     case NS_rtf::LN_FONTTABLE:
4588         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4589 
4590         // create a font table object that listens to the attributes
4591         // each entry call inserts a new font entry
4592         ref->resolve( *m_pImpl->GetFontTable() );
4593         break;
4594     case NS_rtf::LN_STYLESHEET:
4595         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4596         //same as above to import style sheets
4597         m_pImpl->SetStyleSheetImport( true );
4598         ref->resolve( *m_pImpl->GetStyleSheetTable() );
4599         m_pImpl->GetStyleSheetTable()->ApplyStyleSheets(m_pImpl->GetFontTable());
4600         m_pImpl->SetStyleSheetImport( false );
4601         break;
4602     case NS_ooxml::LN_NUMBERING:
4603     case NS_rtf::LN_LISTTABLE:
4604         {
4605             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4606 
4607             //the same for list tables
4608             ref->resolve( *m_pImpl->GetListTable() );
4609             m_pImpl->GetListTable( )->CreateNumberingRules( );
4610         }
4611         break;
4612     case NS_rtf::LN_LFOTABLE:
4613         {
4614             m_pImpl->GetListTable( )->SetLFOImport( true );
4615             ref->resolve( *m_pImpl->GetListTable() );
4616             m_pImpl->GetListTable( )->CreateNumberingRules( );
4617             m_pImpl->GetListTable( )->SetLFOImport( false );
4618         }
4619         break;
4620     case NS_ooxml::LN_THEMETABLE:
4621         ref->resolve ( *m_pImpl->GetThemeTable() );
4622     break;
4623     case NS_ooxml::LN_settings_settings:
4624         ref->resolve ( *m_pImpl->GetSettingsTable() );
4625         m_pImpl->ApplySettingsTable();
4626     break;
4627     default:
4628         OSL_ENSURE( false, "which table is to be filled here?");
4629     }
4630     m_pImpl->SetAnyTableImport(false);
4631 }
4632 /*-- 09.06.2006 09:52:16---------------------------------------------------
4633 
4634 -----------------------------------------------------------------------*/
4635 void DomainMapper::lcl_substream(Id rName, ::writerfilter::Reference<Stream>::Pointer_t ref)
4636 {
4637     m_pImpl->appendTableManager( );
4638     m_pImpl->getTableManager().startLevel();
4639 
4640     //->debug
4641     //string sName = (*QNameToString::Instance())(rName);
4642     //--<debug
4643     //import of page header/footer
4644 
4645     /* WRITERFILTERSTATUS: table: attributedata */
4646     switch( rName )
4647     {
4648     case NS_rtf::LN_headerl:
4649         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4650 
4651         m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_LEFT);
4652         break;
4653     case NS_rtf::LN_headerr:
4654         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4655 
4656         m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_RIGHT);
4657         break;
4658     case NS_rtf::LN_headerf:
4659         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4660 
4661         m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_FIRST);
4662         break;
4663     case NS_rtf::LN_footerl:
4664         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4665 
4666         m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_LEFT);
4667         break;
4668     case NS_rtf::LN_footerr:
4669         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4670 
4671         m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_RIGHT);
4672         break;
4673     case NS_rtf::LN_footerf:
4674         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4675 
4676         m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_FIRST);
4677         break;
4678     case NS_rtf::LN_footnote:
4679     case NS_rtf::LN_endnote:
4680         m_pImpl->PushFootOrEndnote( NS_rtf::LN_footnote == rName );
4681     break;
4682     case NS_rtf::LN_annotation :
4683         m_pImpl->PushAnnotation();
4684     break;
4685     }
4686     ref->resolve(*this);
4687     switch( rName )
4688     {
4689     case NS_rtf::LN_headerl:
4690     case NS_rtf::LN_headerr:
4691     case NS_rtf::LN_headerf:
4692     case NS_rtf::LN_footerl:
4693     case NS_rtf::LN_footerr:
4694     case NS_rtf::LN_footerf:
4695         m_pImpl->PopPageHeaderFooter();
4696     break;
4697     case NS_rtf::LN_footnote:
4698     case NS_rtf::LN_endnote:
4699         m_pImpl->PopFootOrEndnote();
4700     break;
4701     case NS_rtf::LN_annotation :
4702         m_pImpl->PopAnnotation();
4703     break;
4704     }
4705 
4706     m_pImpl->getTableManager().endLevel();
4707     m_pImpl->popTableManager( );
4708 }
4709 /*-- 09.06.2006 09:52:16---------------------------------------------------
4710 
4711 -----------------------------------------------------------------------*/
4712 void DomainMapper::lcl_info(const string & /*info_*/)
4713 {
4714 }
4715 
4716 void DomainMapper::handleUnderlineType(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext)
4717 {
4718     sal_Int16 eUnderline = awt::FontUnderline::NONE;
4719 
4720     switch(nIntValue)
4721     {
4722     case 0: eUnderline = awt::FontUnderline::NONE; break;
4723     case 2: pContext->Insert(PROP_CHAR_WORD_MODE, true, uno::makeAny( true ) ); // TODO: how to get rid of it?
4724     case 1: eUnderline = awt::FontUnderline::SINGLE;       break;
4725     case 3: eUnderline = awt::FontUnderline::DOUBLE;       break;
4726     case 4: eUnderline = awt::FontUnderline::DOTTED;       break;
4727     case 7: eUnderline = awt::FontUnderline::DASH;         break;
4728     case 9: eUnderline = awt::FontUnderline::DASHDOT;      break;
4729     case 10:eUnderline = awt::FontUnderline::DASHDOTDOT;   break;
4730     case 6: eUnderline = awt::FontUnderline::BOLD;         break;
4731     case 11:eUnderline = awt::FontUnderline::WAVE;         break;
4732     case 20:eUnderline = awt::FontUnderline::BOLDDOTTED;   break;
4733     case 23:eUnderline = awt::FontUnderline::BOLDDASH;     break;
4734     case 39:eUnderline = awt::FontUnderline::LONGDASH;     break;
4735     case 55:eUnderline = awt::FontUnderline::BOLDLONGDASH; break;
4736     case 25:eUnderline = awt::FontUnderline::BOLDDASHDOT;  break;
4737     case 26:eUnderline = awt::FontUnderline::BOLDDASHDOTDOT;break;
4738     case 27:eUnderline = awt::FontUnderline::BOLDWAVE;     break;
4739     case 43:eUnderline = awt::FontUnderline::DOUBLEWAVE;   break;
4740     default: ;
4741     }
4742     pContext->Insert(PROP_CHAR_UNDERLINE, true, uno::makeAny( eUnderline ) );
4743 }
4744 
4745 void DomainMapper::handleParaJustification(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext, const bool bExchangeLeftRight)
4746 {
4747     sal_Int16 nAdjust = 0;
4748     sal_Int16 nLastLineAdjust = 0;
4749     switch(nIntValue)
4750     {
4751     case 1:
4752         nAdjust = style::ParagraphAdjust_CENTER;
4753         break;
4754     case 2:
4755         nAdjust = static_cast< sal_Int16 > (bExchangeLeftRight ? style::ParagraphAdjust_LEFT : style::ParagraphAdjust_RIGHT);
4756         break;
4757     case 4:
4758         nLastLineAdjust = style::ParagraphAdjust_BLOCK;
4759         //no break;
4760     case 3:
4761         nAdjust = style::ParagraphAdjust_BLOCK;
4762         break;
4763     case 0:
4764     default:
4765         nAdjust = static_cast< sal_Int16 > (bExchangeLeftRight ? style::ParagraphAdjust_RIGHT : style::ParagraphAdjust_LEFT);
4766         break;
4767     }
4768     pContext->Insert( PROP_PARA_ADJUST, true, uno::makeAny( nAdjust ) );
4769     pContext->Insert( PROP_PARA_LAST_LINE_ADJUST, true, uno::makeAny( nLastLineAdjust ) );
4770 }
4771 
4772 bool DomainMapper::getColorFromIndex(const sal_Int32 nIndex, sal_Int32 &nColor)
4773 {
4774     nColor = 0;
4775     if ((nIndex < 1) || (nIndex > 16))
4776         return false;
4777 
4778     switch (nIndex)
4779     {
4780     case 1: nColor=0x000000; break; //black
4781     case 2: nColor=0x0000ff; break; //blue
4782     case 3: nColor=0x00ffff; break; //cyan
4783     case 4: nColor=0x00ff00; break; //green
4784     case 5: nColor=0xff00ff; break; //magenta
4785     case 6: nColor=0xff0000; break; //red
4786     case 7: nColor=0xffff00; break; //yellow
4787     case 8: nColor=0xffffff; break; //white
4788     case 9: nColor=0x000080;  break;//dark blue
4789     case 10: nColor=0x008080; break; //dark cyan
4790     case 11: nColor=0x008000; break; //dark green
4791     case 12: nColor=0x800080; break; //dark magenta
4792     case 13: nColor=0x800000; break; //dark red
4793     case 14: nColor=0x808000; break; //dark yellow
4794     case 15: nColor=0x808080; break; //dark gray
4795     case 16: nColor=0xC0C0C0; break; //light gray
4796     default:
4797         return false;
4798     }
4799     return true;
4800 }
4801 
4802 sal_Int16 DomainMapper::getEmphasisValue(const sal_Int32 nIntValue)
4803 {
4804     switch (nIntValue)
4805     {
4806     case 1:
4807         return com::sun::star::text::FontEmphasis::DOT_ABOVE;
4808     case 2:
4809         return com::sun::star::text::FontEmphasis::ACCENT_ABOVE;
4810     case 3:
4811         return com::sun::star::text::FontEmphasis::CIRCLE_ABOVE;
4812     case 4:
4813         return com::sun::star::text::FontEmphasis::DOT_BELOW;
4814     default:
4815         return com::sun::star::text::FontEmphasis::NONE;
4816     }
4817 }
4818 
4819 rtl::OUString DomainMapper::getBracketStringFromEnum(const sal_Int32 nIntValue, const bool bIsPrefix)
4820 {
4821     switch(nIntValue)
4822     {
4823     case 1:
4824         if (bIsPrefix)
4825             return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "(" ));
4826         return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( ")" ));
4827 
4828     case 2:
4829         if (bIsPrefix)
4830             return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "[" ));
4831         return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "]" ));
4832 
4833     case 3:
4834         if (bIsPrefix)
4835             return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "<" ));
4836         return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( ">" ));
4837 
4838     case 4:
4839         if (bIsPrefix)
4840             return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "{" ));
4841         return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "}" ));
4842 
4843     case 0:
4844     default:
4845         return rtl::OUString();
4846     }
4847 }
4848 
4849 com::sun::star::style::TabAlign DomainMapper::getTabAlignFromValue(const sal_Int32 nIntValue)
4850 {
4851     switch (nIntValue)
4852     {
4853     case 0:
4854     case 4: // bar not supported
4855     case 5: // num not supported
4856         return com::sun::star::style::TabAlign_LEFT;
4857     case 1:
4858         return com::sun::star::style::TabAlign_CENTER;
4859     case 2:
4860         return com::sun::star::style::TabAlign_RIGHT;
4861     case 3:
4862         return com::sun::star::style::TabAlign_DECIMAL;
4863     }
4864     return com::sun::star::style::TabAlign_LEFT;
4865 }
4866 
4867 sal_Unicode DomainMapper::getFillCharFromValue(const sal_Int32 nIntValue)
4868 {
4869     switch (nIntValue)
4870     {
4871     case 1: // dot
4872         return sal_Unicode(0x002e);
4873     case 2: // hyphen
4874         return sal_Unicode(0x002d);
4875     case 3: // underscore
4876     case 4: // heavy FIXME ???
4877         return sal_Unicode(0x005f);
4878     case NS_ooxml::LN_Value_ST_TabTlc_middleDot: // middleDot
4879         return sal_Unicode(0x00b7);
4880     case 0: // none
4881     default:
4882         return sal_Unicode(0x0020); // blank space
4883     }
4884 }
4885 /*-- 18.07.2007 14:59:00---------------------------------------------------
4886 
4887   -----------------------------------------------------------------------*/
4888 bool DomainMapper::IsOOXMLImport() const
4889 {
4890     return m_pImpl->IsOOXMLImport();
4891 }
4892 /*-- 18.07.2007 16:03:14---------------------------------------------------
4893 
4894   -----------------------------------------------------------------------*/
4895 uno::Reference < lang::XMultiServiceFactory > DomainMapper::GetTextFactory() const
4896 {
4897     return m_pImpl->GetTextFactory();
4898 }
4899 /*-- 12.11.2007 10:41:01---------------------------------------------------
4900 
4901   -----------------------------------------------------------------------*/
4902 /*-- 31.01.2008 18:19:44---------------------------------------------------
4903 
4904   -----------------------------------------------------------------------*/
4905 uno::Reference< text::XTextRange > DomainMapper::GetCurrentTextRange()
4906 {
4907     return m_pImpl->GetTopTextAppend()->getEnd();
4908 }
4909 
4910 /*-- 05.02.2008 10:26:26---------------------------------------------------
4911 
4912   -----------------------------------------------------------------------*/
4913 ::rtl::OUString DomainMapper::getOrCreateCharStyle( PropertyValueVector_t& rCharProperties )
4914 {
4915     StyleSheetTablePtr pStyleSheets = m_pImpl->GetStyleSheetTable();
4916     return pStyleSheets->getOrCreateCharStyle( rCharProperties );
4917 }
4918 
4919 ListsManager::Pointer DomainMapper::GetListTable( )
4920 {
4921     return m_pImpl->GetListTable( );
4922 }
4923 
4924 StyleSheetTablePtr DomainMapper::GetStyleSheetTable( )
4925 {
4926     return m_pImpl->GetStyleSheetTable( );
4927 }
4928 
4929 } //namespace dmapper
4930 } //namespace writerfilter
4931