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_token:
2078             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2079             m_pImpl->SetCurrentRedlineToken( nIntValue );
2080         break;
2081         case NS_ooxml::LN_CT_LineNumber_countBy:
2082         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
2083         case NS_ooxml::LN_CT_LineNumber_restart:
2084         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
2085         {
2086             //line numbering in Writer is a global document setting
2087             //in Word is a section setting
2088             //if line numbering is switched on anywhere in the document it's set at the global settings
2089             LineNumberSettings aSettings = m_pImpl->GetLineNumberSettings();
2090             switch( nName )
2091             {
2092                 case NS_ooxml::LN_CT_LineNumber_countBy:
2093                     /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2094                     aSettings.nInterval = nIntValue;
2095                 break;
2096                 case NS_ooxml::LN_CT_LineNumber_start:
2097                     /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2098                     aSettings.nStartValue = nIntValue; // todo: has to be set at (each) first paragraph
2099                 break;
2100                 case NS_ooxml::LN_CT_LineNumber_distance:
2101                     /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2102                     aSettings.nDistance = ConversionHelper::convertTwipToMM100( nIntValue );
2103                 break;
2104                 case NS_ooxml::LN_CT_LineNumber_restart:
2105                     /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2106                     //page:empty, probably 0,section:1,continuous:2;
2107                     aSettings.bRestartAtEachPage = nIntValue < 1;
2108                 break;
2109                 default:;
2110             }
2111             m_pImpl->SetLineNumberSettings( aSettings );
2112         }
2113         break;
2114         case NS_ooxml::LN_CT_FtnEdnRef_customMarkFollows:
2115             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2116             m_pImpl->SetCustomFtnMark( true );
2117         break;
2118         case NS_ooxml::LN_CT_FtnEdnRef_id:
2119             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
2120             // footnote or endnote reference id - not needed
2121         case NS_ooxml::LN_CT_Color_themeColor:
2122             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
2123         case NS_ooxml::LN_CT_Color_themeTint:
2124             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
2125         case NS_ooxml::LN_CT_Color_themeShade:
2126             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
2127             //unsupported
2128         break;
2129     case NS_ooxml::LN_endtrackchange:
2130         m_pImpl->RemoveCurrentRedline( );
2131     break;
2132     case NS_ooxml::LN_CT_DocGrid_linePitch:
2133             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
2134             {
2135                 //see SwWW8ImplReader::SetDocumentGrid
2136                 OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
2137                 if(pSectionContext)
2138                 {
2139                     pSectionContext->SetGridLinePitch( ConversionHelper::convertTwipToMM100( nIntValue ) );
2140                 }
2141             }
2142         break;
2143             case NS_ooxml::LN_CT_DocGrid_charSpace:
2144                 /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2145             {
2146                 OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
2147                 if(pSectionContext)
2148                 {
2149                     pSectionContext->SetDxtCharSpace( nIntValue );
2150                 }
2151             }
2152             break;
2153             case NS_ooxml::LN_CT_DocGrid_type:
2154                 /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2155             {
2156                 if (pSectionContext != NULL)
2157                 {
2158                     pSectionContext->SetGridType(nIntValue);
2159                 }
2160             }
2161             break;
2162         default:
2163             {
2164 #if OSL_DEBUG_LEVEL > 0
2165             ::rtl::OString sMessage( "DomainMapper::attribute() - Id: ");
2166             sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 10 );
2167             sMessage += ::rtl::OString(" / 0x");
2168             sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 16 );
2169 //            sMessage += ::rtl::OString(" / ");
2170 //            sMessage += ::rtl::OString
2171 //                ((*QNameToString::Instance())(nName).c_str());
2172             sMessage += ::rtl::OString(" value: ");
2173             sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 10 );
2174             sMessage += ::rtl::OString(" / 0x");
2175             sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 16 );
2176             OSL_ENSURE( false, sMessage.getStr()); //
2177 #endif
2178             }
2179         }
2180     }
2181 }
2182 /*-- 09.06.2006 09:52:12---------------------------------------------------
2183 
2184 -----------------------------------------------------------------------*/
2185 void DomainMapper::lcl_sprm(Sprm & rSprm)
2186 {
2187     if( !m_pImpl->getTableManager().sprm(rSprm))
2188         sprmWithProps( rSprm, m_pImpl->GetTopContext() );
2189 }
2190 /*-- 20.06.2006 09:58:33---------------------------------------------------
2191 
2192   -----------------------------------------------------------------------*/
2193 void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmType )
2194 {
2195     OSL_ENSURE(rContext.get(), "PropertyMap has to be valid!");
2196     if(!rContext.get())
2197         return ;
2198 
2199     sal_uInt32 nSprmId = rSprm.getId();
2200     //needed for page properties
2201     SectionPropertyMap * pSectionContext = m_pImpl->GetSectionContext();
2202 
2203     //TODO: In rtl-paragraphs the meaning of left/right are to be exchanged
2204     bool bExchangeLeftRight = false;
2205     // if( nSprmId == NS_sprm::LN_PJcExtra && AlreadyInRTLPara() )
2206     //      bExchangeLeftRight = true;
2207     Value::Pointer_t pValue = rSprm.getValue();
2208     sal_Int32 nIntValue = pValue->getInt();
2209     rtl::OUString sStringValue = pValue->getString();
2210     // printf ( "DomainMapper::sprm(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nSprmId, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
2211     /* WRITERFILTERSTATUS: table: sprmdata */
2212 
2213     switch(nSprmId)
2214     {
2215     case 2:  // sprmPIstd
2216         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2217     case 0x4600:
2218         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2219         break;  // sprmPIstd - style code
2220     case 3: // "sprmPIstdPermute
2221     case NS_sprm::LN_PIstdPermute:
2222         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2223         break;  // sprmPIstdPermute
2224     case NS_sprm::LN_PIncLvl:
2225         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2226         break;  // sprmPIncLvl
2227     case NS_sprm::LN_PJcExtra: // sprmPJc Asian (undocumented)
2228         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2229     case NS_sprm::LN_PJc: // sprmPJc
2230         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2231         handleParaJustification(nIntValue, rContext, bExchangeLeftRight);
2232         break;
2233     case NS_sprm::LN_PFSideBySide:
2234         /* WRITERFILTERSTATUS: done: 0, planned: 3, spent: 0 */
2235         /* WRITERFILTERSTATUS: comment: */
2236         break;  // sprmPFSideBySide
2237 
2238     case NS_sprm::LN_PFKeep:   // sprmPFKeep
2239         /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
2240         /* WRITERFILTERSTATUS: comment: */
2241         rContext->Insert(PROP_PARA_SPLIT, true, uno::makeAny(nIntValue ? false : true));
2242         break;
2243     case NS_sprm::LN_PFKeepFollow:   // sprmPFKeepFollow
2244         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
2245         /* WRITERFILTERSTATUS: comment:  */
2246         rContext->Insert(PROP_PARA_KEEP_TOGETHER, true, uno::makeAny( nIntValue ? true : false) );
2247         break;
2248     case NS_sprm::LN_PFPageBreakBefore:
2249         /* WRITERFILTERSTATUS: done: 100, planned: 3, spent: 0 */
2250         /* WRITERFILTERSTATUS: comment:  */
2251         rContext->Insert(PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE ) );
2252     break;  // sprmPFPageBreakBefore
2253     case NS_sprm::LN_PBrcl:
2254         break;  // sprmPBrcl
2255     case NS_sprm::LN_PBrcp:
2256         break;  // sprmPBrcp
2257     case NS_sprm::LN_PIlvl: // sprmPIlvl
2258         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
2259         /* WRITERFILTERSTATUS: comment:  */
2260         //todo: Numbering level will be implemented in the near future (OOo 3.0?)
2261             if( m_pImpl->IsStyleSheetImport() )
2262             {
2263                 //style sheets cannot have a numbering rule attached
2264                 StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
2265                 pStyleSheetPropertyMap->SetListLevel( (sal_Int16)nIntValue );
2266             }
2267             else
2268                 rContext->Insert( PROP_NUMBERING_LEVEL, true, uno::makeAny( (sal_Int16)nIntValue ));
2269         break;
2270     case NS_sprm::LN_PIlfo: // sprmPIlfo
2271         /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 1 */
2272         /* WRITERFILTERSTATUS: comment:  */
2273         {
2274             //convert the ListTable entry to a NumberingRules propery and apply it
2275             ListsManager::Pointer pListTable = m_pImpl->GetListTable();
2276             ListDef::Pointer pList = pListTable->GetList( nIntValue );
2277             if( pList.get( ) )
2278             {
2279                 if( m_pImpl->IsStyleSheetImport() )
2280                 {
2281                     //style sheets cannot have a numbering rule attached
2282                     StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
2283                     pStyleSheetPropertyMap->SetListId( nIntValue );
2284                 }
2285                 else
2286                 {
2287                     uno::Any aRules = uno::makeAny( pList->GetNumberingRules( ) );
2288                     rContext->Insert( PROP_NUMBERING_RULES, true, aRules );
2289                 }
2290             }
2291             else if ( !m_pImpl->IsStyleSheetImport( ) )
2292             {
2293                 rtl::OUString sNone;
2294                 rContext->Insert( PROP_NUMBERING_STYLE_NAME, true, uno::makeAny( sNone ) );
2295             }
2296         }
2297         break;
2298     case NS_sprm::LN_PFNoLineNumb:   // sprmPFNoLineNumb
2299         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
2300         /* WRITERFILTERSTATUS: comment:  */
2301         rContext->Insert(PROP_PARA_LINE_NUMBER_COUNT, true, uno::makeAny( nIntValue ? false : true) );
2302         break;
2303     case NS_sprm::LN_PChgTabsPapx:   // sprmPChgTabsPapx
2304         /* WRITERFILTERSTATUS: done: 90, planned: 8, spent: 8 */
2305         /* WRITERFILTERSTATUS: comment: bar tab stops a unavailable */
2306         {
2307             // Initialize tab stop vector from style sheet
2308             uno::Any aValue = m_pImpl->GetPropertyFromStyleSheet(PROP_PARA_TAB_STOPS);
2309             uno::Sequence< style::TabStop > aStyleTabStops;
2310             if(aValue >>= aStyleTabStops)
2311             {
2312                 m_pImpl->InitTabStopFromStyle( aStyleTabStops );
2313             }
2314 
2315             //create a new tab stop property - this is done with the contained properties
2316             resolveSprmProps(*this, rSprm);
2317             //add this property
2318             rContext->Insert(PROP_PARA_TAB_STOPS, true, uno::makeAny( m_pImpl->GetCurrentTabStopAndClear()));
2319         }
2320         break;
2321     case 0x845d:    //right margin Asian - undocumented
2322     case 0x845e:    //left margin Asian - undocumented
2323     case 16:      // sprmPDxaRight - right margin
2324     case NS_sprm::LN_PDxaRight:   // sprmPDxaRight - right margin
2325     case 17:
2326     case NS_sprm::LN_PDxaLeft:   // sprmPDxaLeft
2327         /* WRITERFILTERSTATUS: done: 50, planned: 5, spent: 1 */
2328         if( NS_sprm::LN_PDxaLeft == nSprmId || 0x17 == nSprmId|| (bExchangeLeftRight && nSprmId == 0x845d) || ( !bExchangeLeftRight && nSprmId == 0x845e))
2329             rContext->Insert(
2330                              eSprmType == SPRM_DEFAULT ? PROP_PARA_LEFT_MARGIN : PROP_LEFT_MARGIN,
2331                              true,
2332                              uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
2333         else if(eSprmType == SPRM_DEFAULT)
2334             rContext->Insert(
2335                              PROP_PARA_RIGHT_MARGIN, true,
2336                              uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
2337         //TODO: what happens to the right margins in numberings?
2338         break;
2339     case 18: // sprmPNest
2340     case NS_sprm::LN_PNest: // sprmPNest
2341         //not handled in the old WW8 filter
2342         break;
2343     case NS_sprm::LN_PDxaLeft1:    // sprmPDxaLeft1
2344     case 19:
2345     case NS_sprm::LN_PDxaLeft180:   // sprmPDxaLeft180
2346         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
2347         rContext->Insert(
2348                          eSprmType == SPRM_DEFAULT ? PROP_PARA_FIRST_LINE_INDENT : PROP_FIRST_LINE_OFFSET,
2349                          true,
2350                          uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
2351         break;
2352     case 20 : // sprmPDyaLine
2353     case NS_sprm::LN_PDyaLine:   // sprmPDyaLine
2354         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
2355         {
2356             style::LineSpacing aSpacing;
2357             sal_Int16 nDistance = sal_Int16(nIntValue & 0xffff);
2358             if(nIntValue & 0xffff0000)
2359             {
2360                 // single line in Writer is 100, in Word it is 240
2361                 aSpacing.Mode = style::LineSpacingMode::PROP;
2362                 aSpacing.Height = sal_Int16(sal_Int32(nDistance) * 100 /240);
2363             }
2364             else
2365             {
2366                 if(nDistance < 0)
2367                 {
2368                     aSpacing.Mode = style::LineSpacingMode::FIX;
2369                     aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100(-nDistance));
2370                 }
2371                 else if(nDistance >0)
2372                 {
2373                     aSpacing.Mode = style::LineSpacingMode::MINIMUM;
2374                     aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100(nDistance));
2375                 }
2376             }
2377             rContext->Insert(PROP_PARA_LINE_SPACING, true, uno::makeAny( aSpacing ));
2378         }
2379         break;
2380     case 21 : // legacy version
2381     case NS_sprm::LN_PDyaBefore:   // sprmPDyaBefore
2382         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
2383         rContext->Insert(PROP_PARA_TOP_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
2384         break;
2385     case 22 :
2386     case NS_sprm::LN_PDyaAfter:   // sprmPDyaAfter
2387         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
2388         rContext->Insert(PROP_PARA_BOTTOM_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
2389         break;
2390 
2391     case  23: //sprmPChgTabs
2392     case NS_sprm::LN_PChgTabs: // sprmPChgTabs
2393         /* WRITERFILTERSTATUS: done: 0, planned: 3, spent: 0 */
2394         OSL_ENSURE( false, "unhandled");
2395         //tabs of list level?
2396         break;
2397     case 24: // "sprmPFInTable"
2398     case NS_sprm::LN_PFInTable:
2399         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2400         break;  // sprmPFInTable
2401     case NS_sprm::LN_PTableDepth: //sprmPTableDepth
2402         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
2403         //not handled via sprm but via text( 0x07 )
2404     break;
2405     case 25: // "sprmPTtp" pap.fTtp
2406     case NS_sprm::LN_PFTtp:   // sprmPFTtp  was: Read_TabRowEnd
2407         break;
2408     case 26:  // "sprmPDxaAbs
2409     case NS_sprm::LN_PDxaAbs:
2410         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2411         break;  // sprmPDxaAbs
2412     case 27: //sprmPDyaAbs
2413     case NS_sprm::LN_PDyaAbs:
2414         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2415         break;  // sprmPDyaAbs
2416     case NS_sprm::LN_PDxaWidth:
2417         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2418         break;  // sprmPDxaWidth
2419     case NS_sprm::LN_PPc:
2420         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2421         break;  // sprmPPc
2422     case NS_sprm::LN_PBrcTop10:
2423         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2424         break;  // sprmPBrcTop10
2425     case NS_sprm::LN_PBrcLeft10:
2426         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2427         break;  // sprmPBrcLeft10
2428     case NS_sprm::LN_PBrcBottom10:
2429         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2430         break;  // sprmPBrcBottom10
2431     case NS_sprm::LN_PBrcRight10:
2432         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2433         break;  // sprmPBrcRight10
2434     case NS_sprm::LN_PBrcBetween10:
2435         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2436         break;  // sprmPBrcBetween10
2437     case NS_sprm::LN_PBrcBar10:
2438         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2439         break;  // sprmPBrcBar10
2440     case NS_sprm::LN_PDxaFromText10:
2441         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2442         break;  // sprmPDxaFromText10
2443     case NS_sprm::LN_PWr:
2444         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2445         break;  // sprmPWr
2446 
2447     case NS_ooxml::LN_CT_PrBase_pBdr: //paragraph border
2448         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2449         resolveSprmProps(*this, rSprm);
2450     break;
2451         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2452     case NS_sprm::LN_PBrcTop:   // sprmPBrcTop
2453         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2454         /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
2455     case NS_sprm::LN_PBrcLeft:   // sprmPBrcLeft
2456         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2457         /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
2458     case NS_sprm::LN_PBrcBottom:   // sprmPBrcBottom
2459         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2460         /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
2461     case NS_sprm::LN_PBrcRight:   // sprmPBrcRight
2462         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2463         /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
2464     case NS_sprm::LN_PBrcBetween:   // sprmPBrcBetween
2465         /* WRITERFILTERSTATUS: done: 0, planned: 8, spent: 0 */
2466         /* WRITERFILTERSTATUS: comment:  */
2467         {
2468             //in binary format the borders are directly provided in OOXML they are inside of properties
2469             if( IsOOXMLImport() )
2470             {
2471                 writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
2472                 if( pProperties.get())
2473                 {
2474                     BorderHandlerPtr pBorderHandler( new BorderHandler( true ) );
2475                     pProperties->resolve(*pBorderHandler);
2476                     PropertyIds eBorderId = PropertyIds( 0 );
2477                     PropertyIds eBorderDistId = PropertyIds( 0 );
2478                     switch( nSprmId )
2479                     {
2480                         case NS_sprm::LN_PBrcTop:
2481                             /* WRITERFILTERSTATUS: */
2482                             eBorderId = PROP_TOP_BORDER;
2483                             eBorderDistId = PROP_TOP_BORDER_DISTANCE;
2484                         break;
2485                         case NS_sprm::LN_PBrcLeft:
2486                             /* WRITERFILTERSTATUS: */
2487                             eBorderId = PROP_LEFT_BORDER;
2488                             eBorderDistId = PROP_LEFT_BORDER_DISTANCE;
2489                         break;
2490                         case NS_sprm::LN_PBrcBottom:
2491                             /* WRITERFILTERSTATUS: */
2492                             eBorderId = PROP_BOTTOM_BORDER         ;
2493                             eBorderDistId = PROP_BOTTOM_BORDER_DISTANCE;
2494                         break;
2495                         case NS_sprm::LN_PBrcRight:
2496                             /* WRITERFILTERSTATUS: */
2497                             eBorderId = PROP_RIGHT_BORDER;
2498                             eBorderDistId = PROP_RIGHT_BORDER_DISTANCE ;
2499                         break;
2500                         case NS_sprm::LN_PBrcBetween:
2501                             /* WRITERFILTERSTATUS: */
2502                             //not supported
2503                         break;
2504                         default:;
2505                     }
2506                     if( eBorderId )
2507                         rContext->Insert( eBorderId, true, uno::makeAny( pBorderHandler->getBorderLine()) , true);
2508                     if(eBorderDistId)
2509                         rContext->Insert(eBorderDistId, true, uno::makeAny( pBorderHandler->getLineDistance()), true);
2510                 }
2511             }
2512             else
2513             {
2514                 table::BorderLine aBorderLine;
2515                 sal_Int32 nLineDistance = ConversionHelper::MakeBorderLine( nIntValue, aBorderLine );
2516                 PropertyIds eBorderId = PROP_LEFT_BORDER;
2517                 PropertyIds eBorderDistId = PROP_LEFT_BORDER_DISTANCE  ;
2518                 switch( nSprmId )
2519                 {
2520                 case NS_sprm::LN_PBrcBetween:   // sprmPBrcBetween
2521                     /* WRITERFILTERSTATUS: */
2522                     OSL_ENSURE( false, "TODO: inner border is not handled");
2523                     break;
2524                 case NS_sprm::LN_PBrcLeft:   // sprmPBrcLeft
2525                     /* WRITERFILTERSTATUS: */
2526                     eBorderId = PROP_LEFT_BORDER;
2527                     eBorderDistId = PROP_LEFT_BORDER_DISTANCE  ;
2528                     break;
2529                 case NS_sprm::LN_PBrcRight:   // sprmPBrcRight
2530                     /* WRITERFILTERSTATUS: */
2531                     eBorderId = PROP_RIGHT_BORDER          ;
2532                     eBorderDistId = PROP_RIGHT_BORDER_DISTANCE ;
2533                     break;
2534                 case NS_sprm::LN_PBrcTop:   // sprmPBrcTop
2535                     /* WRITERFILTERSTATUS: */
2536                     eBorderId = PROP_TOP_BORDER            ;
2537                     eBorderDistId = PROP_TOP_BORDER_DISTANCE;
2538                     break;
2539                 case NS_sprm::LN_PBrcBottom:   // sprmPBrcBottom
2540                     /* WRITERFILTERSTATUS: */
2541                 default:
2542                     eBorderId = PROP_BOTTOM_BORDER         ;
2543                     eBorderDistId = PROP_BOTTOM_BORDER_DISTANCE;
2544                 }
2545                 rContext->Insert(eBorderId, true, uno::makeAny( aBorderLine ));
2546                 rContext->Insert(eBorderDistId, true, uno::makeAny( nLineDistance ));
2547             }
2548         }
2549     break;
2550     case NS_sprm::LN_PBorderTop:
2551         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2552         /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
2553     case NS_sprm::LN_PBorderLeft:
2554         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2555         /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
2556     case NS_sprm::LN_PBorderBottom:
2557         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2558         /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
2559     case NS_sprm::LN_PBorderRight:
2560         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2561         /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
2562         OSL_ENSURE( false, "TODO: border color definition");
2563         break;
2564     case NS_sprm::LN_PBrcBar:
2565         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2566         break;  // sprmPBrcBar
2567     case NS_sprm::LN_PFNoAutoHyph:   // sprmPFNoAutoHyph
2568         /* WRITERFILTERSTATUS: done: 100, planned: 1, spent: 0 */
2569         rContext->Insert(PROP_PARA_IS_HYPHENATION, true, uno::makeAny( nIntValue ? false : true ));
2570         break;
2571     case NS_sprm::LN_PWHeightAbs:
2572         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2573         break;  // sprmPWHeightAbs
2574     case NS_sprm::LN_PDcs:
2575         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2576         break;  // sprmPDcs
2577 
2578     case NS_sprm::LN_PShd: // sprmPShd
2579         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 2 */
2580     {
2581         //contains fore color, back color and shadow percentage, results in a brush
2582         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
2583         if( pProperties.get())
2584         {
2585             CellColorHandlerPtr pCellColorHandler( new CellColorHandler );
2586             pCellColorHandler->setParagraph();
2587             pProperties->resolve(*pCellColorHandler);
2588             rContext->insert( pCellColorHandler->getProperties(), true );
2589         }
2590     }
2591     break;
2592     case NS_sprm::LN_PDyaFromText:
2593         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2594         break;  // sprmPDyaFromText
2595     case NS_sprm::LN_PDxaFromText:
2596         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2597         break;  // sprmPDxaFromText
2598     case NS_sprm::LN_PFLocked:
2599         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2600         break;  // sprmPFLocked
2601     case NS_sprm::LN_PFWidowControl:
2602     case NS_ooxml::LN_CT_PPrBase_widowControl:
2603         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2604     {
2605         uno::Any aVal( uno::makeAny( sal_Int8(nIntValue ? 2 : 0 )));
2606         rContext->Insert( PROP_PARA_WIDOWS, true, aVal );
2607         rContext->Insert( PROP_PARA_ORPHANS, true, aVal );
2608     }
2609     break;  // sprmPFWidowControl
2610     case NS_sprm::LN_PRuler:
2611         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2612         break;  // sprmPRuler
2613     case NS_sprm::LN_PFKinsoku:
2614         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2615         break;  // sprmPFKinsoku
2616     case NS_sprm::LN_PFWordWrap:
2617         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2618         break;  // sprmPFWordWrap
2619     case NS_sprm::LN_PFOverflowPunct: ;  // sprmPFOverflowPunct - hanging punctuation
2620         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2621         rContext->Insert(PROP_PARA_IS_HANGING_PUNCTUATION, true, uno::makeAny( nIntValue ? false : true ));
2622         break;
2623     case NS_sprm::LN_PFTopLinePunct:
2624         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2625         break;  // sprmPFTopLinePunct
2626     case NS_sprm::LN_PFAutoSpaceDE:
2627         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2628         break;  // sprmPFAutoSpaceDE
2629     case NS_sprm::LN_PFAutoSpaceDN:
2630         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2631         break;  // sprmPFAutoSpaceDN
2632     case NS_sprm::LN_PWAlignFont:
2633         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2634         break;  // sprmPWAlignFont
2635     case NS_sprm::LN_PFrameTextFlow:
2636         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2637         break;  // sprmPFrameTextFlow
2638     case NS_sprm::LN_PISnapBaseLine:
2639         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2640         break;  // sprmPISnapBaseLine
2641     case NS_sprm::LN_PAnld:
2642         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2643         break;  // sprmPAnld
2644     case NS_sprm::LN_PPropRMark:
2645         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2646         break;  // sprmPPropRMark
2647     case NS_sprm::LN_POutLvl:
2648         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2649         {
2650             sal_Int16 nLvl = static_cast< sal_Int16 >( nIntValue );
2651             if( m_pImpl->IsStyleSheetImport() )
2652             {
2653 
2654                 StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
2655                 pStyleSheetPropertyMap->SetOutlineLevel( nLvl );
2656             }
2657             else
2658             {
2659                 nLvl = nLvl >= WW_OUTLINE_MIN && nLvl < WW_OUTLINE_MAX? nLvl+1 : 0; //0 means no outline level set on
2660                 rContext->Insert(PROP_OUTLINE_LEVEL, true, uno::makeAny ( nLvl ));
2661             }
2662         }
2663         break;  // sprmPOutLvl
2664     case NS_sprm::LN_PFBiDi:
2665         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2666             rContext->Insert(PROP_WRITING_MODE, false, uno::makeAny( text::WritingMode2::RL_TB ));
2667             rContext->Insert(PROP_PARA_ADJUST, false, uno::makeAny( style::ParagraphAdjust_RIGHT ));
2668 
2669         break;  // sprmPFBiDi
2670     case NS_ooxml::LN_EG_SectPrContents_bidi:
2671         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2672         if (pSectionContext != NULL)
2673             pSectionContext->Insert(PROP_WRITING_MODE,false, uno::makeAny( text::WritingMode2::RL_TB));
2674         break;
2675     case NS_sprm::LN_PFNumRMIns:
2676         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2677         break;  // sprmPFNumRMIns
2678     case NS_sprm::LN_PCrLf:
2679         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2680         break;  // sprmPCrLf
2681     case NS_sprm::LN_PNumRM:
2682         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2683         break;  // sprmPNumRM
2684     case NS_sprm::LN_PHugePapx:
2685         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2686         break;  // sprmPHugePapx
2687     case NS_sprm::LN_PFUsePgsuSettings:
2688         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2689         break;  // sprmPFUsePgsuSettings
2690     case NS_sprm::LN_PFAdjustRight:
2691         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2692         break;  // sprmPFAdjustRight
2693     case NS_sprm::LN_CFRMarkDel:
2694         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2695         break;  // sprmCFRMarkDel
2696     case NS_sprm::LN_CFRMark:
2697         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2698         break;  // sprmCFRMark
2699     case NS_sprm::LN_CFFldVanish:
2700         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2701         break;  // sprmCFFldVanish
2702     case NS_sprm::LN_CFSpec:   // sprmCFSpec
2703         break;
2704     case NS_sprm::LN_CPicLocation:   // sprmCPicLocation
2705             //is being resolved on the tokenizer side
2706         break;
2707     case NS_sprm::LN_CIbstRMark:
2708         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2709         break;  // sprmCIbstRMark
2710     case NS_sprm::LN_CDttmRMark:
2711         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2712         break;  // sprmCDttmRMark
2713     case NS_sprm::LN_CFData:
2714         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2715         break;  // sprmCFData
2716     case NS_sprm::LN_CIdslRMark:
2717         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2718         break;  // sprmCIdslRMark
2719     case NS_sprm::LN_CChs:
2720         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2721         break;  // sprmCChs
2722     case NS_sprm::LN_CSymbol: // sprmCSymbol
2723         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2724         resolveSprmProps(*this, rSprm); //resolves LN_FONT and LN_CHAR
2725     break;
2726     case NS_sprm::LN_CFOle2:
2727         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2728         break;  // sprmCFOle2
2729     case NS_sprm::LN_CIdCharType:
2730         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2731         break;  // sprmCIdCharType
2732     case NS_sprm::LN_CHighlight:
2733         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2734         {
2735             sal_Int32 nColor = 0;
2736             if(true ==( mbIsHighlightSet = getColorFromIndex(nIntValue, nColor)))
2737                 rContext->Insert(PROP_CHAR_BACK_COLOR, true, uno::makeAny( nColor ));
2738             else if (mnBackgroundColor)
2739                 rContext->Insert(PROP_CHAR_BACK_COLOR, true, uno::makeAny( mnBackgroundColor ));
2740         }
2741         break;  // sprmCHighlight
2742     case NS_sprm::LN_CObjLocation:
2743         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2744         break;  // sprmCObjLocation
2745     case NS_sprm::LN_CFFtcAsciSymb:
2746         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2747         break;  // sprmCFFtcAsciSymb
2748     case NS_sprm::LN_CIstd:
2749         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2750         break;  // sprmCIstd
2751     case NS_sprm::LN_CIstdPermute:
2752         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2753         break;  // sprmCIstdPermute
2754     case NS_sprm::LN_CDefault:
2755         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2756         break;  // sprmCDefault
2757     case NS_sprm::LN_CPlain:
2758         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2759         break;  // sprmCPlain
2760     case NS_sprm::LN_CKcd:
2761         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2762         rContext->Insert(PROP_CHAR_EMPHASIS, true, uno::makeAny ( getEmphasisValue (nIntValue)));
2763         break;  // sprmCKcd
2764     case NS_sprm::LN_CFEmboss:// sprmCFEmboss
2765         /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
2766     case 60:// sprmCFBold
2767     case NS_sprm::LN_CFBoldBi:// sprmCFBoldBi    (offset 0x27 to normal bold)
2768         /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
2769     case NS_sprm::LN_CFItalicBi:// sprmCFItalicBi  (offset 0x27 to normal italic)
2770         /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
2771     case NS_sprm::LN_CFBold: //sprmCFBold
2772         /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
2773     case 61: /*sprmCFItalic*/
2774         /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
2775     case NS_sprm::LN_CFItalic: //sprmCFItalic
2776         /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
2777     case NS_sprm::LN_CFStrike: //sprmCFStrike
2778         /* WRITERFILTERSTATUS: done: 100, planned: , spent:  0.5*/
2779     case NS_sprm::LN_CFOutline: //sprmCFOutline
2780         /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
2781     case NS_sprm::LN_CFShadow: //sprmCFShadow
2782         /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
2783     case NS_sprm::LN_CFSmallCaps: //sprmCFSmallCaps
2784         /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
2785     case NS_sprm::LN_CFCaps: //sprmCFCaps
2786         /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
2787     case NS_sprm::LN_CFVanish: //sprmCFVanish
2788         /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
2789     case NS_sprm::LN_CFDStrike:   // sprmCFDStrike
2790         /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
2791         {
2792             PropertyIds ePropertyId = PROP_CHAR_WEIGHT; //initialized to prevent warning!
2793             switch( nSprmId )
2794             {
2795             case 60:// sprmCFBold
2796             case NS_sprm::LN_CFBoldBi: // sprmCFBoldBi
2797             case NS_sprm::LN_CFBold: /*sprmCFBold*/
2798                 /* WRITERFILTERSTATUS: */
2799                 ePropertyId = nSprmId != NS_sprm::LN_CFBoldBi ? PROP_CHAR_WEIGHT : PROP_CHAR_WEIGHT_COMPLEX;
2800                 break;
2801             case 61: /*sprmCFItalic*/
2802             case NS_sprm::LN_CFItalicBi: // sprmCFItalicBi
2803             case NS_sprm::LN_CFItalic: /*sprmCFItalic*/
2804                 /* WRITERFILTERSTATUS: */
2805                 ePropertyId = nSprmId == 0x836 ? PROP_CHAR_POSTURE : PROP_CHAR_POSTURE_COMPLEX;
2806                 break;
2807             case NS_sprm::LN_CFStrike: /*sprmCFStrike*/
2808             case NS_sprm::LN_CFDStrike : /*sprmCFDStrike double strike through*/
2809                 /* WRITERFILTERSTATUS: */
2810                 ePropertyId = PROP_CHAR_STRIKEOUT;
2811                 break;
2812             case NS_sprm::LN_CFOutline: /*sprmCFOutline*/
2813                 /* WRITERFILTERSTATUS: */
2814                 ePropertyId = PROP_CHAR_CONTOURED;
2815                 break;
2816             case NS_sprm::LN_CFShadow: /*sprmCFShadow*/
2817                 /* WRITERFILTERSTATUS: */
2818                 ePropertyId = PROP_CHAR_SHADOWED;
2819                 break;
2820             case NS_sprm::LN_CFSmallCaps: /*sprmCFSmallCaps*/
2821             case NS_sprm::LN_CFCaps: /*sprmCFCaps*/
2822                 /* WRITERFILTERSTATUS: */
2823                 ePropertyId = PROP_CHAR_CASE_MAP;
2824                 break;
2825             case NS_sprm::LN_CFVanish: /*sprmCFVanish*/
2826                 /* WRITERFILTERSTATUS: */
2827                 ePropertyId = PROP_CHAR_HIDDEN;
2828                 break;
2829             case NS_sprm::LN_CFEmboss: /*sprmCFEmboss*/
2830                 /* WRITERFILTERSTATUS: */
2831                 ePropertyId = PROP_CHAR_RELIEF;
2832                 break;
2833             }
2834             //expected: 0,1,128,129
2835             if(nIntValue != 128) //inherited from paragraph - ignore
2836             {
2837                 if( nIntValue == 129) //inverted style sheet value
2838                 {
2839                     //get value from style sheet and invert it
2840                     sal_Int16 nStyleValue = 0;
2841                     double fDoubleValue;
2842                     uno::Any aStyleVal = m_pImpl->GetPropertyFromStyleSheet(ePropertyId);
2843                     if( !aStyleVal.hasValue() )
2844                     {
2845                         nIntValue = 0x83a == nSprmId ?
2846                             4 : 1;
2847                     }
2848                     else if(aStyleVal.getValueTypeClass() == uno::TypeClass_FLOAT )
2849                     {
2850                         //only in case of awt::FontWeight
2851                         aStyleVal >>= fDoubleValue;
2852                         nIntValue = fDoubleValue  > 100. ?  0 : 1;
2853                     }
2854                     else if((aStyleVal >>= nStyleValue) ||
2855                             (nStyleValue = (sal_Int16)comphelper::getEnumAsINT32(aStyleVal)) >= 0 )
2856                     {
2857                         nIntValue = 0x83a == nSprmId ?
2858                             nStyleValue ? 0 : 4 :
2859                             nStyleValue ? 0 : 1;
2860                     }
2861                     else
2862                     {
2863                         OSL_ENSURE( false, "what type was it");
2864                     }
2865                 }
2866 
2867                 switch( nSprmId )
2868                 {
2869                     case 60:/*sprmCFBold*/
2870                     case NS_sprm::LN_CFBold: /*sprmCFBold*/
2871                     case NS_sprm::LN_CFBoldBi: // sprmCFBoldBi
2872                         /* WRITERFILTERSTATUS: */
2873                     {
2874                         uno::Any aBold( uno::makeAny( nIntValue ? awt::FontWeight::BOLD : awt::FontWeight::NORMAL ) );
2875 
2876                         rContext->Insert(ePropertyId, true, aBold );
2877                         if( nSprmId != NS_sprm::LN_CFBoldBi ) // sprmCFBoldBi
2878                             rContext->Insert(PROP_CHAR_WEIGHT_ASIAN, true, aBold );
2879                     }
2880                     break;
2881                     case 61: /*sprmCFItalic*/
2882                     case NS_sprm::LN_CFItalic: /*sprmCFItalic*/
2883                     case NS_sprm::LN_CFItalicBi: // sprmCFItalicBi
2884                         /* WRITERFILTERSTATUS: */
2885                     {
2886                         uno::Any aPosture( uno::makeAny( nIntValue ? awt::FontSlant_ITALIC : awt::FontSlant_NONE ) );
2887                         rContext->Insert( ePropertyId, true, aPosture );
2888                         if( nSprmId != NS_sprm::LN_CFItalicBi ) // sprmCFItalicBi
2889                             rContext->Insert(PROP_CHAR_POSTURE_ASIAN, true, aPosture );
2890                     }
2891                     break;
2892                     case NS_sprm::LN_CFStrike: /*sprmCFStrike*/
2893                         /* WRITERFILTERSTATUS: */
2894                         rContext->Insert(ePropertyId, true,
2895                                          uno::makeAny( nIntValue ? awt::FontStrikeout::SINGLE : awt::FontStrikeout::NONE ) );
2896                     break;
2897                     case NS_sprm::LN_CFDStrike : /*sprmCFDStrike double strike through*/
2898                         /* WRITERFILTERSTATUS: */
2899                         rContext->Insert(ePropertyId, true,
2900                                          uno::makeAny( awt::FontStrikeout::DOUBLE ) );
2901                     break;
2902                     case NS_sprm::LN_CFOutline: /*sprmCFOutline*/
2903                     case NS_sprm::LN_CFShadow: /*sprmCFShadow*/
2904                     case NS_sprm::LN_CFVanish: /*sprmCFVanish*/
2905                         /* WRITERFILTERSTATUS: */
2906                         rContext->Insert(ePropertyId, true, uno::makeAny( nIntValue ? true : false ));
2907                     break;
2908                     case NS_sprm::LN_CFSmallCaps: /*sprmCFSmallCaps*/
2909                         /* WRITERFILTERSTATUS: */
2910                         rContext->Insert(ePropertyId, true,
2911                                          uno::makeAny( nIntValue ? style::CaseMap::SMALLCAPS : style::CaseMap::NONE));
2912                     break;
2913                     case NS_sprm::LN_CFCaps: /*sprmCFCaps*/
2914                         /* WRITERFILTERSTATUS: */
2915                         rContext->Insert(ePropertyId, true,
2916                                          uno::makeAny( nIntValue ? style::CaseMap::UPPERCASE : style::CaseMap::NONE));
2917                     break;
2918                     case NS_sprm::LN_CFEmboss: /*sprmCFEmboss*/
2919                         /* WRITERFILTERSTATUS: */
2920                         rContext->Insert(ePropertyId, true,
2921                                          uno::makeAny( nIntValue ? awt::FontRelief::EMBOSSED : awt::FontRelief::NONE ));
2922                     break;
2923 
2924                 }
2925             }
2926         }
2927         break;
2928     case NS_sprm::LN_CFtcDefault:
2929         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2930         break;  // sprmCFtcDefault
2931     case NS_sprm::LN_CKul: // sprmCKul
2932         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2933         {
2934             // Parameter:  0 = none,    1 = single,  2 = by Word,
2935             // 3 = double,  4 = dotted,  5 = hidden
2936             // 6 = thick,   7 = dash,    8 = dot(not used)
2937             // 9 = dotdash 10 = dotdotdash 11 = wave
2938             handleUnderlineType(nIntValue, rContext);
2939         }
2940         break;
2941     case NS_sprm::LN_CSizePos:
2942         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2943         break;  // sprmCSizePos
2944     case NS_sprm::LN_CLid:
2945         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2946         break;  // sprmCLid
2947     case NS_sprm::LN_CIco:
2948         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2949         {
2950             sal_Int32 nColor = 0;
2951             if (getColorFromIndex(nIntValue, nColor))
2952                 rContext->Insert(PROP_CHAR_COLOR, true, uno::makeAny( nColor ) );
2953         }
2954         break;  // sprmCIco
2955     case NS_sprm::LN_CHpsBi:    // sprmCHpsBi
2956     case NS_sprm::LN_CHps:    // sprmCHps
2957         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
2958         {
2959             //multiples of half points (12pt == 24)
2960             double fVal = double(nIntValue) / 2.;
2961             uno::Any aVal = uno::makeAny( fVal );
2962             if( NS_sprm::LN_CHpsBi == nSprmId )
2963                 rContext->Insert( PROP_CHAR_HEIGHT_COMPLEX, true, aVal );
2964             else
2965             {
2966                 //Asian get the same value as Western
2967                 rContext->Insert( PROP_CHAR_HEIGHT, true, aVal );
2968                 rContext->Insert( PROP_CHAR_HEIGHT_ASIAN, true, aVal );
2969             }
2970         }
2971         break;
2972     case NS_sprm::LN_CHpsInc:
2973         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2974         break;  // sprmCHpsInc
2975     case NS_sprm::LN_CHpsPos:
2976         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2977         {
2978         // FIXME: ww8 filter in ww8par6.cxx has a Read_SubSuperProp function
2979         // that counts the escapement from this value and font size. So it will be
2980         // on our TODO list
2981             sal_Int16 nEscapement = 0;
2982             sal_Int8 nProp  = 100;
2983             if (nIntValue < 0)
2984                 nEscapement = -58;
2985             else if (nIntValue > 0)
2986                 nEscapement = 58;
2987             else /* (nIntValue == 0) */
2988                 nProp = 0;
2989             rContext->Insert(PROP_CHAR_ESCAPEMENT,         true, uno::makeAny( nEscapement ) );
2990             rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT,  true, uno::makeAny( nProp ) );
2991         }
2992         break;  // sprmCHpsPos
2993     case NS_sprm::LN_CHpsPosAdj:
2994         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2995         break;  // sprmCHpsPosAdj
2996     case NS_sprm::LN_CMajority:
2997         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
2998         break;  // sprmCMajority
2999     case NS_sprm::LN_CIss:   // sprmCIss
3000         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3001         {
3002             //sub/super script 1: super, 2: sub, 0: normal
3003             sal_Int16 nEscapement = 0;
3004             sal_Int8 nProp  = 58;
3005             switch(nIntValue)
3006             {
3007             case 1: //super
3008                 nEscapement = 101;
3009                 break;
3010             case 2: //sub
3011                 nEscapement = -101;
3012                 break;
3013             case 0: nProp = 0;break; //none
3014             }
3015             rContext->Insert(PROP_CHAR_ESCAPEMENT,         true, uno::makeAny( nEscapement ) );
3016             rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT,  true, uno::makeAny( nProp ) );
3017         }
3018         break;
3019     case NS_sprm::LN_CHpsNew50:
3020         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3021         break;  // sprmCHpsNew50
3022     case NS_sprm::LN_CHpsInc1:
3023         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3024         break;  // sprmCHpsInc1
3025     case 71 : //"sprmCDxaSpace"
3026     case 96 : //"sprmCDxaSpace"
3027     case NS_sprm::LN_CDxaSpace:  // sprmCDxaSpace
3028         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
3029         //Kerning half point values
3030         //TODO: there are two kerning values -
3031         // in ww8par6.cxx NS_sprm::LN_CHpsKern is used as boolean AutoKerning
3032         rContext->Insert(PROP_CHAR_CHAR_KERNING, true, uno::makeAny( sal_Int16(ConversionHelper::convertTwipToMM100(sal_Int16(nIntValue))) ) );
3033         break;
3034     case NS_sprm::LN_CHpsKern:  // sprmCHpsKern    auto kerning is bound to a minimum font size in Word - but not in Writer :-(
3035         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3036         rContext->Insert(PROP_CHAR_AUTO_KERNING, true, uno::makeAny( true ) );
3037         break;
3038     case NS_sprm::LN_CMajority50:
3039         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3040         break;  // sprmCMajority50
3041     case NS_sprm::LN_CHpsMul:
3042         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3043         break;  // sprmCHpsMul
3044     case NS_sprm::LN_CYsri:
3045         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3046         break;  // sprmCYsri
3047     case NS_sprm::LN_CRgFtc0:  // sprmCRgFtc0     //ascii font index
3048         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3049     case NS_sprm::LN_CRgFtc1:  // sprmCRgFtc1     //Asian font index
3050         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3051     case NS_sprm::LN_CRgFtc2:  // sprmCRgFtc2     //CTL font index
3052         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3053     case NS_sprm::LN_CFtcBi: // sprmCFtcBi      //font index of a CTL font
3054         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3055         {
3056             FontTablePtr pFontTable = m_pImpl->GetFontTable();
3057             if(nIntValue >= 0 && pFontTable->size() > sal_uInt32(nIntValue))
3058             {
3059                 PropertyIds eFontName    = PROP_CHAR_FONT_NAME;
3060                 PropertyIds eFontStyle   = PROP_CHAR_FONT_STYLE;
3061                 PropertyIds eFontFamily  = PROP_CHAR_FONT_FAMILY;
3062                 PropertyIds eFontCharSet = PROP_CHAR_FONT_CHAR_SET;
3063                 PropertyIds eFontPitch   = PROP_CHAR_FONT_PITCH;
3064                 switch(nSprmId)
3065                 {
3066                 case NS_sprm::LN_CRgFtc0:
3067                     //already initialized
3068                     break;
3069                 case NS_sprm::LN_CRgFtc1:
3070                     eFontName =     PROP_CHAR_FONT_NAME_ASIAN;
3071                     eFontStyle =    PROP_CHAR_FONT_STYLE_ASIAN;
3072                     eFontFamily =   PROP_CHAR_FONT_FAMILY_ASIAN;
3073                     eFontCharSet =  PROP_CHAR_FONT_CHAR_SET_ASIAN;
3074                     eFontPitch =    PROP_CHAR_FONT_PITCH_ASIAN;
3075                     break;
3076                 case NS_sprm::LN_CRgFtc2:
3077                 case NS_sprm::LN_CFtcBi:
3078                     eFontName =     PROP_CHAR_FONT_NAME_COMPLEX;
3079                     eFontStyle =    PROP_CHAR_FONT_STYLE_COMPLEX;
3080                     eFontFamily =   PROP_CHAR_FONT_FAMILY_COMPLEX;
3081                     eFontCharSet =  PROP_CHAR_FONT_CHAR_SET_COMPLEX;
3082                     eFontPitch =    PROP_CHAR_FONT_PITCH_COMPLEX;
3083                     break;
3084                 }
3085                 const FontEntry::Pointer_t pFontEntry(pFontTable->getFontEntry(sal_uInt32(nIntValue)));
3086                 rContext->Insert(eFontName, true, uno::makeAny( pFontEntry->sFontName  ));
3087                 //                rContext->Insert(eFontStyle, uno::makeAny( pFontEntry->  ));
3088                 //                rContext->Insert(eFontFamily, uno::makeAny( pFontEntry->  ));
3089                 rContext->Insert(eFontCharSet, true, uno::makeAny( (sal_Int16)pFontEntry->nTextEncoding  ));
3090                 rContext->Insert(eFontPitch, true, uno::makeAny( pFontEntry->nPitchRequest  ));
3091             }
3092         }
3093         break;
3094     case NS_sprm::LN_CCharScale:  // sprmCCharScale
3095         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3096         rContext->Insert(PROP_CHAR_SCALE_WIDTH, true,
3097                          uno::makeAny( sal_Int16(nIntValue) ));
3098         break;
3099     case NS_sprm::LN_CFImprint: // sprmCFImprint   1 or 0
3100         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3101         // FontRelief: NONE, EMBOSSED, ENGRAVED
3102         rContext->Insert(PROP_CHAR_RELIEF, true,
3103                          uno::makeAny( nIntValue ? awt::FontRelief::ENGRAVED : awt::FontRelief::NONE ));
3104         break;
3105     case NS_sprm::LN_CFObj:
3106         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3107         break;  // sprmCFObj
3108     case NS_sprm::LN_CPropRMark:
3109         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3110         break;  // sprmCPropRMark
3111     case NS_sprm::LN_CSfxText:
3112         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3113         // The file-format has many character animations. We have only
3114         // one, so we use it always. Suboptimal solution though.
3115         if (nIntValue)
3116             rContext->Insert(PROP_CHAR_FLASH, true, uno::makeAny( true ));
3117         else
3118             rContext->Insert(PROP_CHAR_FLASH, true, uno::makeAny( false ));
3119         break;  // sprmCSfxText
3120     case NS_sprm::LN_CFBiDi:
3121         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3122         break;  // sprmCFBiDi
3123     case NS_sprm::LN_CFDiacColor:
3124         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3125         break;  // sprmCFDiacColor
3126     case NS_sprm::LN_CIcoBi:
3127         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3128         break;  // sprmCIcoBi
3129     case NS_sprm::LN_CDispFldRMark:
3130         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3131         break;  // sprmCDispFldRMark
3132     case NS_sprm::LN_CIbstRMarkDel:
3133         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3134         break;  // sprmCIbstRMarkDel
3135     case NS_sprm::LN_CDttmRMarkDel:
3136         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3137         break;  // sprmCDttmRMarkDel
3138     case NS_sprm::LN_CBrc:
3139         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3140         break;  // sprmCBrc
3141     case NS_sprm::LN_CShd:
3142         /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
3143         break;  // sprmCShd
3144     case NS_sprm::LN_CIdslRMarkDel:
3145         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3146         break;  // sprmCIdslRMarkDel
3147     case NS_sprm::LN_CFUsePgsuSettings:
3148         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3149         break;  // sprmCFUsePgsuSettings
3150     case NS_sprm::LN_CCpg:
3151         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3152         break;  // sprmCCpg
3153     case NS_sprm::LN_CLidBi:  // sprmCLidBi      language complex
3154         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3155     case NS_sprm::LN_CRgLid0_80: //sprmCRgLid0_80
3156         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 1 */
3157         //undocumented but interpreted as western language
3158     case NS_sprm::LN_CRgLid0:   // sprmCRgLid0    language Western
3159         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3160     case NS_sprm::LN_CRgLid1:   // sprmCRgLid1    language Asian
3161         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3162         {
3163             lang::Locale aLocale;
3164             MsLangId::convertLanguageToLocale( (LanguageType)nIntValue, aLocale );
3165             rContext->Insert(NS_sprm::LN_CRgLid0 == nSprmId ? PROP_CHAR_LOCALE :
3166                              NS_sprm::LN_CRgLid1 == nSprmId ? PROP_CHAR_LOCALE_ASIAN : PROP_CHAR_LOCALE_COMPLEX,
3167                              true,
3168                              uno::makeAny( aLocale ) );
3169         }
3170         break;
3171 
3172     case NS_sprm::LN_CIdctHint:   // sprmCIdctHint
3173         //list table - text offset???
3174         break;
3175     case NS_sprm::LN_PicBrcl:
3176         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3177         break;  // sprmPicBrcl
3178     case NS_sprm::LN_PicScale:
3179         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3180         break;  // sprmPicScale
3181     case NS_sprm::LN_PicBrcTop:
3182         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3183         break;  // sprmPicBrcTop
3184     case NS_sprm::LN_PicBrcLeft:
3185         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3186         break;  // sprmPicBrcLeft
3187     case NS_sprm::LN_PicBrcBottom:
3188         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3189         break;  // sprmPicBrcBoConversionHelper::convertTwipToMM100ttom
3190     case NS_sprm::LN_PicBrcRight:
3191         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3192         break;  // sprmPicBrcRight
3193     case NS_sprm::LN_ScnsPgn:
3194         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3195         break;  // sprmScnsPgn
3196     case NS_sprm::LN_SiHeadingPgn:
3197         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3198         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3199         if(pSectionContext)
3200             pSectionContext->SetEvenlySpaced( nIntValue > 0 );
3201 
3202         break;  // sprmSiHeadingPgn
3203     case NS_sprm::LN_SOlstAnm:
3204         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3205         break;  // sprmSOlstAnm
3206     case 136:
3207     case NS_sprm::LN_SDxaColWidth: // sprmSDxaColWidth
3208         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3209         // contains the twip width of the column as 3-byte-code
3210         // the lowet byte contains the index
3211         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3212         if(pSectionContext)
3213             pSectionContext->AppendColumnWidth( ConversionHelper::convertTwipToMM100( (nIntValue & 0xffff00) >> 8 ));
3214         break;
3215     case NS_sprm::LN_SDxaColSpacing: // sprmSDxaColSpacing
3216         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3217         // the lowet byte contains the index
3218         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3219         if(pSectionContext)
3220             pSectionContext->AppendColumnSpacing( ConversionHelper::convertTwipToMM100( (nIntValue & 0xffff00) >> 8 ));
3221         break;
3222     case 138:
3223     case NS_sprm::LN_SFEvenlySpaced:
3224         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3225         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3226         if(pSectionContext)
3227             pSectionContext->SetEvenlySpaced( nIntValue > 0 );
3228         break;  // sprmSFEvenlySpaced
3229     case NS_sprm::LN_SFProtected: // sprmSFProtected
3230         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3231         //todo: missing feature - unlocked sections in protected documents
3232         break;
3233     case NS_sprm::LN_SDmBinFirst: // sprmSDmBinFirst
3234         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3235         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3236         if(pSectionContext)
3237             pSectionContext->SetFirstPaperBin(nIntValue);
3238         break;
3239     case NS_sprm::LN_SDmBinOther: // sprmSDmBinOther
3240         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3241         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3242         if(pSectionContext)
3243             pSectionContext->SetPaperBin( nIntValue );
3244         break;
3245     case NS_sprm::LN_SBkc: // sprmSBkc
3246         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
3247         /* break type
3248           0 - No break
3249           1 - New Colunn
3250           2 - New page
3251           3 - Even page
3252           4 - odd page
3253         */
3254         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3255         if(pSectionContext)
3256             pSectionContext->SetBreakType( nIntValue );
3257         break;
3258     case 143:
3259     case NS_sprm::LN_SFTitlePage: // sprmSFTitlePage
3260     case NS_ooxml::LN_EG_SectPrContents_titlePg:
3261         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3262     {
3263         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3264         if(pSectionContext)
3265             pSectionContext->SetTitlePage( nIntValue > 0 ? true : false );//section has title page
3266     }
3267     break;
3268     case 144:
3269     case NS_sprm::LN_SCcolumns: // sprmSCcolumns
3270         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3271         //no of columns - 1
3272         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3273         if(pSectionContext)
3274             pSectionContext->SetColumnCount( (sal_Int16) nIntValue );
3275     break;
3276     case 145:
3277     case NS_sprm::LN_SDxaColumns:           // sprmSDxaColumns
3278         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3279         //column distance - default 708 twip
3280         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3281         if(pSectionContext)
3282             pSectionContext->SetColumnDistance( ConversionHelper::convertTwipToMM100( nIntValue ) );
3283         break;
3284     case NS_sprm::LN_SFAutoPgn:
3285         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3286         break;  // sprmSFAutoPgn
3287     case 147:
3288     case NS_sprm::LN_SNfcPgn: // sprmSNfcPgn
3289         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3290         //page numbering 0 - Arab, 1 - ROMAN, 2 - roman, 3 - ABC, 4 abc
3291         sal_Int16 nNumbering;
3292         switch( nIntValue )
3293         {
3294             case 1:  nNumbering = style::NumberingType::ROMAN_UPPER;
3295             case 2:  nNumbering = style::NumberingType::ROMAN_LOWER;
3296             case 3:  nNumbering = style::NumberingType::CHARS_UPPER_LETTER;
3297             case 4:  nNumbering = style::NumberingType::CHARS_LOWER_LETTER;
3298             case 0:
3299             default:
3300                     nNumbering = style::NumberingType::ARABIC;
3301         }
3302         rContext->Insert( PROP_NUMBERING_TYPE, false, uno::makeAny( nNumbering ) );
3303     break;
3304     case NS_sprm::LN_SDyaPgn:
3305         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3306         break;  // sprmSDyaPgn
3307     case NS_sprm::LN_SDxaPgn:
3308         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3309         break;  // sprmSDxaPgn
3310     case 150:
3311     case NS_sprm::LN_SFPgnRestart: // sprmSFPgnRestart
3312     {
3313         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3314         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3315         if(pSectionContext)
3316             pSectionContext->SetPageNoRestart( nIntValue > 0 );
3317     }
3318     break;
3319     case NS_sprm::LN_SFEndnote:
3320         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3321         break;  // sprmSFEndnote
3322     case 154:
3323     case NS_sprm::LN_SNLnnMod:// sprmSNLnnMod
3324         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3325         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3326         if( pSectionContext )
3327             pSectionContext->SetLnnMod( nIntValue );
3328     break;
3329     case 155:
3330     case NS_sprm::LN_SDxaLnn: // sprmSDxaLnn
3331         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3332         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3333         if( pSectionContext )
3334             pSectionContext->SetdxaLnn( nIntValue );
3335     break;
3336     case 152:
3337     case NS_sprm::LN_SLnc:// sprmSLnc
3338         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3339         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3340         if( pSectionContext )
3341             pSectionContext->SetLnc( nIntValue );
3342     break;
3343     case 160:
3344     case NS_sprm::LN_SLnnMin: // sprmSLnnMin
3345         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3346         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3347         if( pSectionContext )
3348             pSectionContext->SetLnnMin( nIntValue );
3349     break;
3350 
3351     case NS_sprm::LN_SGprfIhdt:
3352         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3353         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3354         //flags about header/footer sharing and footnotes?
3355         /* ww8scan.hxx:
3356          * WW8_HEADER_EVEN = 0x01, WW8_HEADER_ODD = 0x02, WW8_FOOTER_EVEN = 0x04,
3357          * WW8_FOOTER_ODD = 0x08, WW8_HEADER_FIRST = 0x10, WW8_FOOTER_FIRST = 0x20
3358          */
3359 
3360 //        if(pSectionContext)
3361     break;  // sprmSGprfIhdt
3362     case NS_sprm::LN_SDyaHdrTop: // sprmSDyaHdrTop
3363         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3364         // default 720 twip
3365         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3366         if(pSectionContext)
3367             pSectionContext->SetHeaderTop( ConversionHelper::convertTwipToMM100( nIntValue ));
3368     break;
3369     case NS_sprm::LN_SDyaHdrBottom: // sprmSDyaHdrBottom
3370         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3371         // default 720 twip
3372         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3373         if(pSectionContext)
3374             pSectionContext->SetHeaderBottom( ConversionHelper::convertTwipToMM100( nIntValue ) );
3375     break;
3376     case 158:
3377     case NS_sprm::LN_SLBetween: // sprmSLBetween
3378         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3379         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3380         if(pSectionContext)
3381             pSectionContext->SetSeparatorLine( nIntValue > 0 );
3382     break;
3383     case NS_sprm::LN_SVjc:
3384         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3385         break;  // sprmSVjc
3386     case 161:
3387     case NS_sprm::LN_SPgnStart: // sprmSPgnStart
3388         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3389         //page number
3390         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3391         if(pSectionContext)
3392             pSectionContext->SetPageNumber( nIntValue );
3393     break;
3394     case 162:
3395     case NS_sprm::LN_SBOrientation:
3396         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3397         //todo: the old filter assumed that a value of 2 points to double-pages layout
3398         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3399         if(pSectionContext)
3400             pSectionContext->SetLandscape( nIntValue > 0 );
3401         rContext->Insert( PROP_IS_LANDSCAPE , false, uno::makeAny( nIntValue > 0 ));
3402     break;  // sprmSBOrientation
3403     case NS_sprm::LN_SBCustomize:
3404         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3405         break;  // sprmSBCustomize
3406     case 165:
3407     case NS_sprm::LN_SYaPage: // sprmSYaPage
3408     {
3409         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3410         //page height, rounded to default values, default: 0x3dc0 twip
3411         sal_Int32 nHeight = ConversionHelper::convertTwipToMM100( nIntValue );
3412         rContext->Insert( PROP_HEIGHT, false, uno::makeAny( PaperInfo::sloppyFitPageDimension( nHeight ) ) );
3413     }
3414     break;
3415     case NS_sprm::LN_SXaPage:   // sprmSXaPage
3416     {
3417         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3418         //page width, rounded to default values, default 0x2fd0 twip
3419         sal_Int32 nWidth = ConversionHelper::convertTwipToMM100( nIntValue );
3420         rContext->Insert( PROP_WIDTH, false, uno::makeAny( PaperInfo::sloppyFitPageDimension( nWidth ) ) );
3421     }
3422     break;
3423     case 166:
3424     case NS_sprm::LN_SDxaLeft:  // sprmSDxaLeft
3425     {
3426         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3427         //left page margin default 0x708 twip
3428         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3429         sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( nIntValue );
3430         if(pSectionContext)
3431             pSectionContext->SetLeftMargin( nConverted );
3432         rContext->Insert( PROP_LEFT_MARGIN, false, uno::makeAny( nConverted ));
3433     }
3434     break;
3435     case 167:
3436     case NS_sprm::LN_SDxaRight: // sprmSDxaRight
3437     {
3438         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3439         //right page margin default 0x708 twip
3440         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3441         sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( nIntValue );
3442         if(pSectionContext)
3443             pSectionContext->SetRightMargin( nConverted );
3444         rContext->Insert( PROP_RIGHT_MARGIN, false, uno::makeAny( nConverted ));
3445     }
3446     break;
3447     case 168:
3448     case NS_sprm::LN_SDyaTop: // sprmSDyaTop
3449     {
3450         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3451         //top page margin default 1440 twip
3452         //todo: check cast of SVBT16
3453         sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( static_cast< sal_Int16 >( nIntValue ) );
3454         rContext->Insert( PROP_TOP_MARGIN, false, uno::makeAny( nConverted ) );
3455         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3456         if(pSectionContext)
3457             pSectionContext->SetTopMargin( nConverted );
3458     }
3459     break;
3460     case 169:
3461     case NS_sprm::LN_SDyaBottom: // sprmSDyaBottom
3462     {
3463         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3464         //bottom page margin default 1440 twip
3465         //todo: check cast of SVBT16
3466         sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( static_cast< sal_Int16 >( nIntValue ) );
3467         rContext->Insert( PROP_BOTTOM_MARGIN, false, uno::makeAny( nConverted) );
3468         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3469         if(pSectionContext)
3470             pSectionContext->SetBottomMargin( nConverted );
3471     }
3472     break;
3473     case 170:
3474     case NS_sprm::LN_SDzaGutter:   // sprmSDzaGutter
3475     {
3476         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3477         // gutter is added to one of the margins of a section depending on RTL, can be placed on top either
3478         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3479         if(pSectionContext)
3480         {
3481             pSectionContext->SetDzaGutter( ConversionHelper::convertTwipToMM100( nIntValue  ) );
3482         }
3483     }
3484     break;
3485     case NS_sprm::LN_SDmPaperReq:   // sprmSDmPaperReq
3486         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
3487         //paper code - no handled in old filter
3488         break;
3489     case NS_sprm::LN_SPropRMark:
3490         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3491         break;  // sprmSPropRMark
3492     case NS_sprm::LN_SFBiDi:// sprmSFBiDi
3493     {
3494         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
3495         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3496         if(pSectionContext)
3497             pSectionContext->SetSFBiDi( nIntValue > 0 );
3498     }
3499     break;
3500     case NS_sprm::LN_SFFacingCol:
3501         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3502         break;  // sprmSFFacingCol
3503     case NS_sprm::LN_SFRTLGutter: // sprmSFRTLGutter
3504     {
3505         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3506         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3507         if(pSectionContext)
3508             pSectionContext->SetGutterRTL( nIntValue > 0 );
3509     }
3510     break;
3511     case NS_sprm::LN_SBrcTop:   // sprmSBrcTop
3512         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3513     case NS_sprm::LN_SBrcLeft:   // sprmSBrcLeft
3514         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3515     case NS_sprm::LN_SBrcBottom:  // sprmSBrcBottom
3516         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3517     case NS_sprm::LN_SBrcRight:  // sprmSBrcRight
3518         /* WRITERFILTERSTATUS: Sectiondone: 100, planned: 0.5, spent: 0 */
3519         {
3520             table::BorderLine aBorderLine;
3521             sal_Int32 nLineDistance = ConversionHelper::MakeBorderLine( nIntValue, aBorderLine );
3522             OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3523             if(pSectionContext)
3524             {
3525                 static const BorderPosition aPositions[4] =
3526                     {
3527                         BORDER_TOP,
3528                         BORDER_LEFT,
3529                         BORDER_BOTTOM,
3530                         BORDER_RIGHT
3531                     };
3532                 pSectionContext->SetBorder( aPositions[nSprmId - NS_sprm::LN_SBrcTop], nLineDistance, aBorderLine );
3533             }
3534         }
3535         break;
3536 
3537     case NS_sprm::LN_SPgbProp:  // sprmSPgbProp
3538         {
3539             OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3540             if(pSectionContext)
3541             {
3542                 pSectionContext->ApplyBorderToPageStyles( m_pImpl->GetPageStyles(), m_pImpl->GetTextFactory(), nIntValue );
3543             }
3544         }
3545         break;
3546     case NS_sprm::LN_SDxtCharSpace:
3547     {
3548         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3549         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3550         if(pSectionContext)
3551         {
3552             pSectionContext->SetDxtCharSpace( nIntValue );
3553         }
3554     }
3555     break;  // sprmSDxtCharSpace
3556     case NS_sprm::LN_SDyaLinePitch:   // sprmSDyaLinePitch
3557     {
3558         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3559         //see SwWW8ImplReader::SetDocumentGrid
3560         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3561         if(pSectionContext)
3562         {
3563             pSectionContext->SetGridLinePitch( ConversionHelper::convertTwipToMM100( nIntValue ) );
3564         }
3565     }
3566     break;
3567     case 0x703a: //undocumented, grid related?
3568         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3569         OSL_ENSURE( false, "TODO: not handled yet"); //nIntValue like 0x008a2373 ?
3570         break;
3571     case NS_sprm::LN_SClm:
3572     {
3573         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3574         sal_Int16 nGridType = text::TextGridMode::NONE;
3575         switch( nIntValue )
3576         {
3577             case 0:
3578                 nGridType = text::TextGridMode::NONE;
3579             break;
3580             case 3:
3581                 //Text snaps to char grid, this doesn't make a lot of sense to
3582                 //me. This is closer than LINES_CHARS
3583                 nGridType = text::TextGridMode::LINES;
3584             break;
3585             case 1:
3586                 nGridType = text::TextGridMode::LINES_AND_CHARS;
3587             break;
3588             case 2:
3589                 nGridType = text::TextGridMode::LINES;
3590             break;
3591             default:;
3592         }
3593         rContext->Insert( PROP_GRID_MODE, false, uno::makeAny( nGridType ) );
3594 
3595     //Seems to force this behaviour in word ?
3596     if(nGridType != text::TextGridMode::NONE)
3597         m_pImpl->SetDocumentSettingsProperty(
3598             PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_ADD_EXTERNAL_LEADING ),
3599             uno::makeAny( true ) );
3600     }
3601     break;  // sprmSClm
3602     case NS_sprm::LN_STextFlow:
3603     case NS_ooxml::LN_EG_SectPrContents_textDirection:
3604         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3605     {
3606         /* 0 HoriLR 1 Vert TR 2 Vert TR 3 Vert TT 4 HoriLT
3607             only 0 and 1 can be imported correctly
3608           */
3609         sal_Int16 nDirection = text::WritingMode_LR_TB;
3610         switch( nIntValue )
3611         {
3612             case 0:
3613             case 4:
3614                 nDirection = text::WritingMode_LR_TB;
3615             break;
3616             case 1:
3617             case 2:
3618             case 3:
3619                 nDirection = text::WritingMode_TB_RL;
3620             break;
3621             default:;
3622         }
3623 
3624         PropertyMap * pTargetContext = rContext.get();
3625 
3626         if (pSectionContext != NULL &&
3627             nSprmId == NS_ooxml::LN_EG_SectPrContents_textDirection)
3628         {
3629             pTargetContext = pSectionContext;
3630         }
3631 
3632         pTargetContext->Insert(PROP_WRITING_MODE, false, uno::makeAny( nDirection ) );
3633     }
3634     break;  // sprmSTextFlow
3635     case NS_sprm::LN_TJc: // sprmTJc
3636     case NS_sprm::LN_TDxaLeft:
3637     case NS_sprm::LN_TDxaGapHalf:
3638     case NS_sprm::LN_TFCantSplit:
3639     case NS_sprm::LN_TTableHeader:
3640     case NS_sprm::LN_TTableBorders: // sprmTTableBorders
3641     {
3642         OSL_ENSURE( false, "table propeties should be handled by the table manager");
3643     }
3644     break;
3645     case NS_sprm::LN_TDefTable10:
3646         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3647         break;  // sprmTDefTable10
3648     case NS_sprm::LN_TDyaRowHeight:
3649         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3650         break;  // sprmTDyaRowHeight
3651     case NS_sprm::LN_TDefTable:
3652         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3653         break;  // sprmTDefTable
3654     case NS_sprm::LN_TDefTableShd:
3655         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3656         break;  // sprmTDefTableShd
3657     case NS_sprm::LN_TTlp:
3658         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3659         break;  // sprmTTlp
3660     case NS_sprm::LN_TFBiDi:
3661         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3662         break;  // sprmTFBiDi
3663     case NS_sprm::LN_THTMLProps:
3664         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3665         break;  // sprmTHTMLProps
3666     case NS_sprm::LN_TSetBrc:
3667         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3668         break;  // sprmTSetBrc
3669     case NS_sprm::LN_TInsert:
3670         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3671         break;  // sprmTInsert
3672     case NS_sprm::LN_TDelete:
3673         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3674         break;  // sprmTDelete
3675     case NS_sprm::LN_TDxaCol:
3676         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3677         break;  // sprmTDxaCol
3678     case NS_sprm::LN_TMerge:
3679         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3680         break;  // sprmTMerge
3681     case NS_sprm::LN_TSplit:
3682         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3683         break;  // sprmTSplit
3684     case NS_sprm::LN_TSetBrc10:
3685         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3686         break;  // sprmTSetBrc10
3687     case 164: // sprmTSetShd
3688     case NS_sprm::LN_TSetShd:
3689         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3690         break;  // sprmTSetShd
3691     case NS_sprm::LN_TSetShdOdd:
3692         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3693         break;  // sprmTSetShdOdd
3694     case NS_sprm::LN_TTextFlow:
3695         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3696         break;  // sprmTTextFlow
3697     case NS_sprm::LN_TDiagLine:
3698         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3699         break;  // sprmTDiagLine
3700     case NS_sprm::LN_TVertMerge:
3701         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3702         break;  // sprmTVertMerge
3703     case NS_sprm::LN_TVertAlign:
3704         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3705         break;  // sprmTVertAlign
3706         // the following are not part of the official documentation
3707     case 0x6870: //TxtForeColor
3708         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3709         {
3710             //contains a color as 0xTTRRGGBB while SO uses 0xTTRRGGBB
3711             sal_Int32 nColor = ConversionHelper::ConvertColor(nIntValue);
3712             rContext->Insert(PROP_CHAR_COLOR, true, uno::makeAny( nColor ) );
3713         }
3714         break;
3715     case 0x4874:
3716         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3717         break; //seems to be a language id for Asian text - undocumented
3718     case 0x6877: //underlining color
3719         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3720         {
3721             sal_Int32 nColor = ConversionHelper::ConvertColor(nIntValue);
3722             rContext->Insert(PROP_CHAR_UNDERLINE_HAS_COLOR, true, uno::makeAny( true ) );
3723             rContext->Insert(PROP_CHAR_UNDERLINE_COLOR, true, uno::makeAny( nColor ) );
3724         }
3725         break;
3726     case 0x6815:
3727         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3728         break; //undocumented
3729     case NS_sprm::LN_CIndrsid:
3730         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3731         break; //undocumented
3732     case 0x6467:
3733         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3734         break; //undocumented
3735     case 0xF617:
3736         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3737         break; //undocumented
3738     case 0xd634: // sprmTNewSpacing - table spacing ( see WW8TabBandDesc::ProcessSpacing() )
3739         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3740         break;
3741     case NS_sprm::LN_TTRLeft:
3742         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3743         break; //undocumented
3744     case 0x4888:
3745         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3746     case 0x6887:
3747         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3748         //properties of list levels - undocumented
3749         break;
3750     case 0xd234:
3751         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3752     case 0xd235:
3753         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3754     case 0xd236:
3755         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3756     case 0xd237:
3757         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3758         break;//undocumented section properties
3759     case NS_sprm::LN_CEastAsianLayout:
3760         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3761         resolveSprmProps(*this, rSprm);
3762         break;
3763     case NS_ooxml::LN_CT_Tabs_tab:
3764         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3765         resolveSprmProps(*this, rSprm);
3766         m_pImpl->IncorporateTabStop(m_pImpl->m_aCurrentTabStop);
3767         m_pImpl->m_aCurrentTabStop = DeletableTabStop();
3768     break;
3769     case NS_ooxml::LN_CT_PPrBase_tabs:
3770         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3771     {
3772         // Initialize tab stop vector from style sheet
3773         if( !m_pImpl->IsStyleSheetImport() )
3774         {
3775             uno::Any aValue = m_pImpl->GetPropertyFromStyleSheet(PROP_PARA_TAB_STOPS);
3776             uno::Sequence< style::TabStop > aStyleTabStops;
3777             if(aValue >>= aStyleTabStops)
3778             {
3779                 m_pImpl->InitTabStopFromStyle( aStyleTabStops );
3780             }
3781         }
3782         resolveSprmProps(*this, rSprm);
3783         rContext->Insert(PROP_PARA_TAB_STOPS, true, uno::makeAny( m_pImpl->GetCurrentTabStopAndClear()));
3784     }
3785     break;
3786 
3787     case NS_ooxml::LN_CT_PPr_sectPr:
3788         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3789     case NS_ooxml::LN_EG_RPrBase_color:
3790         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3791     case NS_ooxml::LN_EG_RPrBase_rFonts:
3792         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3793     case NS_ooxml::LN_EG_RPrBase_bdr:
3794         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3795     case NS_ooxml::LN_EG_RPrBase_eastAsianLayout:
3796         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3797     case NS_ooxml::LN_EG_RPrBase_u:
3798         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3799     case NS_ooxml::LN_EG_RPrBase_lang:
3800         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3801     case NS_ooxml::LN_CT_PPrBase_spacing:
3802         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3803     case NS_ooxml::LN_CT_PPrBase_ind:
3804         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3805     case NS_ooxml::LN_CT_RPrDefault_rPr:
3806         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3807     case NS_ooxml::LN_CT_PPrDefault_pPr:
3808         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3809     case NS_ooxml::LN_CT_DocDefaults_pPrDefault:
3810         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3811     case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
3812         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3813     case NS_ooxml::LN_CT_Style_pPr:
3814         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3815     case NS_ooxml::LN_CT_Style_rPr:
3816         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3817     case NS_ooxml::LN_CT_PPr_rPr:
3818         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3819     case NS_ooxml::LN_CT_PPrBase_numPr:
3820         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3821         resolveSprmProps(*this, rSprm);
3822     break;
3823     case NS_ooxml::LN_EG_SectPrContents_footnotePr:
3824         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3825     case NS_ooxml::LN_EG_SectPrContents_endnotePr:
3826         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3827         m_pImpl->SetInFootnoteProperties( NS_ooxml::LN_EG_SectPrContents_footnotePr == nSprmId );
3828         resolveSprmProps(*this, rSprm);
3829     break;
3830     case NS_ooxml::LN_EG_SectPrContents_lnNumType:
3831         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3832     {
3833         resolveSprmProps(*this, rSprm);
3834         LineNumberSettings aSettings = m_pImpl->GetLineNumberSettings();
3835         aSettings.bIsOn = true;
3836         m_pImpl->SetLineNumberSettings( aSettings );
3837         //apply settings at XLineNumberingProperties
3838         try
3839         {
3840             uno::Reference< text::XLineNumberingProperties > xLineNumberingProperties( m_pImpl->GetTextDocument(), uno::UNO_QUERY_THROW );
3841             uno::Reference< beans::XPropertySet > xLineNumberingPropSet = xLineNumberingProperties->getLineNumberingProperties();
3842             PropertyNameSupplier& rNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
3843             xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_IS_ON ), uno::makeAny(true) );
3844             if( aSettings.nInterval )
3845                 xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_INTERVAL ), uno::makeAny((sal_Int16)aSettings.nInterval) );
3846             if( aSettings.nDistance )
3847                 xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_DISTANCE ), uno::makeAny(aSettings.nDistance) );
3848             xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_RESTART_AT_EACH_PAGE ), uno::makeAny(aSettings.bRestartAtEachPage) );
3849         }
3850         catch( const uno::Exception& )
3851         {
3852         }
3853 
3854     }
3855     break;
3856     case NS_ooxml::LN_CT_PPrBase_framePr:
3857         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3858     {
3859         PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
3860         if( pContext.get() )
3861         {
3862             ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pContext.get() );
3863             pParaContext->SetFrameMode();
3864 
3865         }
3866         else
3867         {
3868             //TODO: What about style sheet import of frame properties
3869         }
3870         resolveSprmProps(*this, rSprm);
3871     }
3872     break;
3873     case NS_ooxml::LN_EG_SectPrContents_pgSz:
3874         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3875         CT_PageSz.code = 0;
3876         {
3877             PaperInfo aLetter(PAPER_LETTER);
3878             CT_PageSz.w = aLetter.getWidth();
3879             CT_PageSz.h = aLetter.getHeight();
3880         }
3881         CT_PageSz.orient = false;
3882         resolveSprmProps(*this, rSprm);
3883         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3884         if(pSectionContext)
3885         {
3886             pSectionContext->Insert( PROP_HEIGHT, false, uno::makeAny( CT_PageSz.h ) );
3887             pSectionContext->Insert( PROP_IS_LANDSCAPE, false, uno::makeAny( CT_PageSz.orient ));
3888             pSectionContext->Insert( PROP_WIDTH, false, uno::makeAny( CT_PageSz.w ) );
3889             pSectionContext->SetLandscape( CT_PageSz.orient );
3890         }
3891         break;
3892 
3893     case NS_ooxml::LN_EG_SectPrContents_pgMar:
3894         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3895         m_pImpl->InitPageMargins();
3896         resolveSprmProps(*this, rSprm);
3897         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3898         if(pSectionContext)
3899         {
3900             const _PageMar& rPageMar = m_pImpl->GetPageMargins();
3901             pSectionContext->SetTopMargin( rPageMar.top );
3902             pSectionContext->SetRightMargin( rPageMar.right );
3903             pSectionContext->SetBottomMargin( rPageMar.bottom );
3904             pSectionContext->SetLeftMargin( rPageMar.left );
3905             pSectionContext->SetHeaderTop( rPageMar.header );
3906             pSectionContext->SetHeaderBottom( rPageMar.footer );
3907         }
3908         break;
3909 
3910     case NS_ooxml::LN_EG_SectPrContents_cols:
3911         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3912     {
3913         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
3914         if( pProperties.get())
3915         {
3916 
3917             SectionColumnHandlerPtr pSectHdl( new SectionColumnHandler );
3918             pProperties->resolve(*pSectHdl);
3919             if(pSectionContext)
3920             {
3921                 if( pSectHdl->IsEqualWidth() )
3922                 {
3923                     pSectionContext->SetEvenlySpaced( true );
3924                     pSectionContext->SetColumnCount( (sal_Int16) (pSectHdl->GetNum() - 1) );
3925                     pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
3926                     pSectionContext->SetSeparatorLine( pSectHdl->IsSeparator() );
3927                 }
3928                 else if( !pSectHdl->GetColumns().empty() )
3929                 {
3930                     pSectionContext->SetEvenlySpaced( false );
3931                     pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
3932                     pSectionContext->SetColumnCount( (sal_Int16)(pSectHdl->GetColumns().size() -1));
3933                     std::vector<_Column>::const_iterator tmpIter = pSectHdl->GetColumns().begin();
3934                     for (; tmpIter != pSectHdl->GetColumns().end(); tmpIter++)
3935                     {
3936                         pSectionContext->AppendColumnWidth( tmpIter->nWidth );
3937                         if ((tmpIter != pSectHdl->GetColumns().end() - 1) || (tmpIter->nSpace > 0))
3938                             pSectionContext->AppendColumnSpacing( tmpIter->nSpace );
3939                     }
3940                     pSectionContext->SetSeparatorLine( pSectHdl->IsSeparator() );
3941                 }
3942                 else if( pSectHdl->GetNum() > 0 )
3943                 {
3944                     pSectionContext->SetColumnCount( (sal_Int16)pSectHdl->GetNum() - 1 );
3945                     pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
3946                 }
3947             }
3948         }
3949     }
3950     break;
3951     case NS_ooxml::LN_EG_SectPrContents_docGrid:
3952         resolveSprmProps(*this, rSprm);
3953     break;
3954     case NS_ooxml::LN_EG_SectPrContents_pgBorders:
3955     {
3956         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
3957         if( pProperties.get( ) && pSectionContext )
3958         {
3959             PageBordersHandlerPtr pHandler( new PageBordersHandler );
3960             pProperties->resolve( *pHandler );
3961 
3962             // Set the borders to the context and apply them to the styles
3963             pHandler->SetBorders( pSectionContext );
3964             pSectionContext->SetBorderParams( pHandler->GetDisplayOffset( ) );
3965         }
3966     }
3967     break;
3968 
3969     case NS_ooxml::LN_CT_PPrBase_pStyle:
3970         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3971     {
3972         m_pImpl->SetCurrentParaStyleId( sStringValue );
3973         StyleSheetTablePtr pStyleTable = m_pImpl->GetStyleSheetTable();
3974         const ::rtl::OUString sConvertedStyleName = pStyleTable->ConvertStyleName( sStringValue, true );
3975 		if (m_pImpl->GetTopContext() && m_pImpl->GetTopContextType() != CONTEXT_SECTION)
3976 	        m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, true, uno::makeAny( sConvertedStyleName ));
3977         const StyleSheetEntryPtr pEntry = pStyleTable->FindStyleSheetByISTD(sStringValue);
3978         //apply numbering to paragraph if it was set at the style
3979         OSL_ENSURE( pEntry.get(), "no style sheet found" );
3980         const StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<const StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : 0);
3981 
3982         if( pStyleSheetProperties && pStyleSheetProperties->GetListId() >= 0 )
3983             rContext->Insert( PROP_NUMBERING_STYLE_NAME, true, uno::makeAny(
3984                         ListDef::GetStyleName( pStyleSheetProperties->GetListId( ) ) ), false);
3985 
3986         if( pStyleSheetProperties && pStyleSheetProperties->GetListLevel() >= 0 )
3987             rContext->Insert( PROP_NUMBERING_LEVEL, true, uno::makeAny(pStyleSheetProperties->GetListLevel()), false);
3988     }
3989     break;
3990     case NS_ooxml::LN_EG_RPrBase_rStyle:
3991         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3992         {
3993             rtl::OUString sConvertedName( m_pImpl->GetStyleSheetTable()->ConvertStyleName( sStringValue, true ) );
3994             // First check if the style exists in the document.
3995             StyleSheetEntryPtr pEntry = m_pImpl->GetStyleSheetTable( )->FindStyleSheetByStyleName( sConvertedName );
3996             bool bExists = pEntry.get( ) && ( pEntry->nStyleTypeCode == STYLE_TYPE_CHAR );
3997 
3998             // Add the property if the style exists
3999             if ( bExists && m_pImpl->GetTopContext() )
4000                 m_pImpl->GetTopContext()->Insert( PROP_CHAR_STYLE_NAME, true, uno::makeAny( sConvertedName ) );
4001         }
4002     break;
4003     case NS_ooxml::LN_CT_TblPrBase_tblCellMar: //cell margins
4004         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4005     {
4006         resolveSprmProps(*this, rSprm);//contains LN_CT_TblCellMar_top, LN_CT_TblCellMar_left, LN_CT_TblCellMar_bottom, LN_CT_TblCellMar_right
4007     }
4008     break;
4009     case NS_ooxml::LN_CT_TblCellMar_top:
4010             /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
4011     case NS_ooxml::LN_CT_TblCellMar_left:
4012             /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
4013     case NS_ooxml::LN_CT_TblCellMar_bottom:
4014             /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
4015     case NS_ooxml::LN_CT_TblCellMar_right:
4016             /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
4017     {
4018         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
4019         if( pProperties.get())
4020         {
4021             MeasureHandlerPtr pMeasureHandler( new MeasureHandler );
4022             pProperties->resolve(*pMeasureHandler);
4023             sal_Int32 nMeasureValue = pMeasureHandler->getMeasureValue();
4024             PropertyIds eId = META_PROP_CELL_MAR_TOP;
4025             switch(nSprmId)
4026             {
4027                 case NS_ooxml::LN_CT_TblCellMar_top:
4028                     /* WRITERFILTERSTATUS: */
4029                 break;
4030                 case NS_ooxml::LN_CT_TblCellMar_left:
4031                     /* WRITERFILTERSTATUS: */
4032                     eId = META_PROP_CELL_MAR_LEFT;
4033                 break;
4034                 case NS_ooxml::LN_CT_TblCellMar_bottom:
4035                     /* WRITERFILTERSTATUS: */
4036                     eId = META_PROP_CELL_MAR_BOTTOM;
4037                 break;
4038                 case NS_ooxml::LN_CT_TblCellMar_right:
4039                     /* WRITERFILTERSTATUS: */
4040                     eId = META_PROP_CELL_MAR_RIGHT;
4041                 break;
4042                 default:;
4043             }
4044             rContext->Insert( eId, false, uno::makeAny(nMeasureValue), false);
4045         }
4046     }
4047     break;
4048     case NS_sprm::LN_CFNoProof: //0x875 no grammar and spell checking, unsupported
4049         /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
4050     break;
4051     case NS_ooxml::LN_anchor_anchor: // at_character drawing
4052         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4053     case NS_ooxml::LN_inline_inline: // as_character drawing
4054         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4055     {
4056         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
4057         if( pProperties.get())
4058         {
4059             GraphicImportType eGraphicType =
4060                 (NS_ooxml::LN_anchor_anchor ==
4061                  sal::static_int_cast<Id>(nSprmId)) ?
4062                 IMPORT_AS_DETECTED_ANCHOR :
4063                 IMPORT_AS_DETECTED_INLINE;
4064             GraphicImportPtr pGraphicImport =
4065                 m_pImpl->GetGraphicImport(eGraphicType);
4066             pProperties->resolve(*pGraphicImport);
4067             m_pImpl->ImportGraphic(pProperties, eGraphicType);
4068             if( !pGraphicImport->IsGraphic() )
4069             {
4070                 m_pImpl->ResetGraphicImport();
4071                 // todo: It's a shape, now start shape import
4072             }
4073         }
4074     }
4075     break;
4076     case NS_ooxml::LN_EG_RPrBase_vertAlign:
4077         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4078     {
4079         sal_Int16 nEscapement = 0;
4080         sal_Int8 nProp  = 58;
4081         if( sStringValue.equalsAscii( "superscript" ))
4082                 nEscapement = 101;
4083         else if( sStringValue.equalsAscii( "subscript" ))
4084                 nEscapement = -101;
4085         else
4086             nProp = 100;
4087 
4088         rContext->Insert(PROP_CHAR_ESCAPEMENT,         true, uno::makeAny( nEscapement ) );
4089         rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT,  true, uno::makeAny( nProp ) );
4090     }
4091     break;
4092 //    case NS_ooxml::LN_CT_FtnEdn_type
4093         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4094 //    case NS_ooxml::LN_CT_FtnEdn_id
4095         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4096 //    case NS_ooxml::LN_EG_FtnEdnNumProps_numRestart
4097     case NS_ooxml::LN_CT_FtnProps_pos:
4098             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4099     //footnotes in word can be at page end or beneath text - writer supports only the first
4100     //endnotes in word can be at section end or document end - writer supports only the latter
4101     // -> so this property can be ignored
4102     break;
4103     case NS_ooxml::LN_EG_FtnEdnNumProps_numStart:
4104             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4105     case NS_ooxml::LN_CT_FtnProps_numFmt:
4106             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4107     case NS_ooxml::LN_CT_EdnProps_numFmt:
4108             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4109     {
4110         try
4111         {
4112             uno::Reference< beans::XPropertySet >  xFtnEdnSettings;
4113             if( m_pImpl->IsInFootnoteProperties() )
4114             {
4115                 uno::Reference< text::XFootnotesSupplier> xFootnotesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
4116                 xFtnEdnSettings = xFootnotesSupplier->getFootnoteSettings();
4117             }
4118             else
4119             {
4120                 uno::Reference< text::XEndnotesSupplier> xEndnotesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
4121                 xFtnEdnSettings = xEndnotesSupplier->getEndnoteSettings();
4122             }
4123             if( NS_ooxml::LN_EG_FtnEdnNumProps_numStart == nSprmId )
4124             {
4125                 xFtnEdnSettings->setPropertyValue(
4126                     PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_START_AT),
4127                                                                     uno::makeAny( sal_Int16( nIntValue - 1 )));
4128             }
4129             else
4130             {
4131                 sal_Int16 nNumType = ConversionHelper::ConvertNumberingType( nIntValue );
4132                 xFtnEdnSettings->setPropertyValue(
4133                     PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_NUMBERING_TYPE),
4134                                                                     uno::makeAny( nNumType ));
4135             }
4136         }
4137         catch( const uno::Exception& )
4138         {
4139         }
4140     }
4141     break;
4142     case NS_ooxml::LN_paratrackchange:
4143         m_pImpl->StartParaChange( );
4144     case NS_ooxml::LN_trackchange:
4145         /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
4146     case NS_ooxml::LN_EG_RPrContent_rPrChange:
4147         /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
4148     {
4149         m_pImpl->AddNewRedline( );
4150         resolveSprmProps(*this, rSprm );
4151         // now the properties author, date and id should be available
4152         sal_Int32 nToken = m_pImpl->GetCurrentRedlineToken();
4153         switch( nToken & 0xffff )
4154         {
4155             case ooxml::OOXML_mod :
4156             case ooxml::OOXML_ins :
4157             case ooxml::OOXML_del : break;
4158             default: OSL_ENSURE( false, "redline token other than mod, ins or del" );
4159         }
4160         m_pImpl->EndParaChange( );
4161     }
4162     break;
4163     case NS_ooxml::LN_CT_RPrChange_rPr:
4164         /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
4165     break;
4166     /* WRITERFILTERSTATUS: done: 0, planned: 4, spent: 0 */
4167     case NS_ooxml::LN_object:
4168     {
4169         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
4170         if( pProperties.get( ) )
4171         {
4172             OLEHandlerPtr pOLEHandler( new OLEHandler );
4173             pProperties->resolve(*pOLEHandler);
4174             if ( pOLEHandler->isOLEObject( ) )
4175             {
4176                 ::rtl::OUString sStreamName = pOLEHandler->copyOLEOStream( m_pImpl->GetTextDocument() );
4177                 if( sStreamName.getLength() )
4178                 {
4179                     m_pImpl->appendOLE( sStreamName, pOLEHandler );
4180                 }
4181             }
4182         }
4183     }
4184     break;
4185 //    case NS_ooxml::LN_CT_EdnProps_pos
4186         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4187 //    case NS_ooxml::LN_CT_EdnProps_numFmt
4188         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4189 //    case NS_ooxml::LN_CT_FtnDocProps_footnote
4190         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4191 //    case NS_ooxml::LN_CT_EdnDocProps_endnote
4192         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4193     //break;
4194     case NS_ooxml::LN_EG_HdrFtrReferences_headerReference: // header reference - not needed
4195         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4196     case NS_ooxml::LN_EG_HdrFtrReferences_footerReference: // footer reference - not needed
4197         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4198     break;
4199     case NS_ooxml::LN_EG_RPrBase_snapToGrid: // "Use document grid  settings for inter-paragraph spacing"
4200             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4201     break;
4202     case NS_sprm::LN_PContextualSpacing:
4203         //TODO: determines whether top/bottom paragraph spacing is added if equal styles are following - unsupported
4204     break;
4205     case NS_ooxml::LN_EG_SectPrContents_formProt: //section protection, only form editing is enabled - unsupported
4206     case NS_ooxml::LN_EG_SectPrContents_vAlign:
4207     case NS_ooxml::LN_EG_RPrBase_fitText:
4208             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
4209     break;
4210     case NS_ooxml::LN_ffdata:
4211     {
4212         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
4213         if (pProperties.get() != NULL)
4214         {
4215             FFDataHandler::Pointer_t pFFDataHandler(new FFDataHandler());
4216 
4217             pProperties->resolve(*pFFDataHandler);
4218             m_pImpl->SetFieldFFData(pFFDataHandler);
4219         }
4220     }
4221     break;
4222     default:
4223         {
4224 #ifdef DEBUG_DOMAINMAPPER
4225             dmapper_logger->startElement("unhandled");
4226             dmapper_logger->attribute("id", nSprmId);
4227             dmapper_logger->endElement("unhandled");
4228 #endif
4229         }
4230     }
4231 }
4232 /*-- 09.06.2006 09:52:13---------------------------------------------------
4233 
4234 -----------------------------------------------------------------------*/
4235 void DomainMapper::lcl_entry(int /*pos*/,
4236                          writerfilter::Reference<Properties>::Pointer_t ref)
4237 {
4238     ref->resolve(*this);
4239 }
4240 /*-- 09.06.2006 09:52:13---------------------------------------------------
4241 
4242 -----------------------------------------------------------------------*/
4243 void DomainMapper::data(const sal_uInt8* /*buf*/, size_t /*len*/,
4244                         writerfilter::Reference<Properties>::Pointer_t /*ref*/)
4245 {
4246 }
4247 /*-- 09.06.2006 09:52:13---------------------------------------------------
4248 
4249 -----------------------------------------------------------------------*/
4250 void DomainMapper::lcl_startSectionGroup()
4251 {
4252     m_pImpl->PushProperties(CONTEXT_SECTION);
4253 }
4254 /*-- 09.06.2006 09:52:13---------------------------------------------------
4255 
4256 -----------------------------------------------------------------------*/
4257 void DomainMapper::lcl_endSectionGroup()
4258 {
4259     PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_SECTION);
4260     SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
4261     OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
4262     if(pSectionContext)
4263         pSectionContext->CloseSectionGroup( *m_pImpl );
4264     m_pImpl->PopProperties(CONTEXT_SECTION);
4265 }
4266 /*-- 09.06.2006 09:52:13---------------------------------------------------
4267 
4268 -----------------------------------------------------------------------*/
4269 void DomainMapper::lcl_startParagraphGroup()
4270 {
4271     m_pImpl->getTableManager().startParagraphGroup();
4272     m_pImpl->PushProperties(CONTEXT_PARAGRAPH);
4273     static ::rtl::OUString sDefault( ::rtl::OUString::createFromAscii("Standard") );
4274 	if (m_pImpl->GetTopContext())
4275 	{
4276 	    m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, true, uno::makeAny( sDefault ) );
4277     	if (m_pImpl->isBreakDeferred(PAGE_BREAK))
4278        		m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
4279     	else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
4280         	m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
4281 	}
4282     m_pImpl->clearDeferredBreaks();
4283 }
4284 /*-- 09.06.2006 09:52:14---------------------------------------------------
4285 
4286 -----------------------------------------------------------------------*/
4287 void DomainMapper::lcl_endParagraphGroup()
4288 {
4289     m_pImpl->PopProperties(CONTEXT_PARAGRAPH);
4290     m_pImpl->getTableManager().endParagraphGroup();
4291     //frame conversion has to be executed after table conversion
4292     m_pImpl->ExecuteFrameConversion();
4293 }
4294 
4295 void DomainMapper::markLastParagraphInSection( )
4296 {
4297     m_pImpl->SetIsLastParagraphInSection( true );
4298 }
4299 
4300 void DomainMapper::lcl_startShape( uno::Reference< drawing::XShape > xShape )
4301 {
4302     m_pImpl->PushShapeContext( xShape );
4303 }
4304 
4305 void DomainMapper::lcl_endShape( )
4306 {
4307     m_pImpl->PopShapeContext( );
4308 }
4309 
4310 /*-- 13.06.2007 16:15:55---------------------------------------------------
4311 
4312   -----------------------------------------------------------------------*/
4313 void DomainMapper::PushStyleSheetProperties( PropertyMapPtr pStyleProperties, bool bAffectTableMngr )
4314 {
4315     m_pImpl->PushStyleProperties( pStyleProperties );
4316     if ( bAffectTableMngr )
4317         m_pImpl->getTableManager( ).SetStyleProperties( pStyleProperties );
4318 }
4319 /*-- 13.06.2007 16:15:55---------------------------------------------------
4320 
4321   -----------------------------------------------------------------------*/
4322 void DomainMapper::PopStyleSheetProperties( bool bAffectTableMngr )
4323 {
4324     m_pImpl->PopProperties( CONTEXT_STYLESHEET );
4325     if ( bAffectTableMngr )
4326     {
4327         PropertyMapPtr emptyPtr;
4328         m_pImpl->getTableManager( ).SetStyleProperties( emptyPtr );
4329     }
4330 }
4331 /*-- 28.01.2008 14:52:33---------------------------------------------------
4332 
4333   -----------------------------------------------------------------------*/
4334 void DomainMapper::PushListProperties( ::boost::shared_ptr<PropertyMap> pListProperties )
4335 {
4336     m_pImpl->PushListProperties( pListProperties );
4337 }
4338 /*-- 28.01.2008 14:52:33---------------------------------------------------
4339 
4340   -----------------------------------------------------------------------*/
4341 void DomainMapper::PopListProperties()
4342 {
4343     m_pImpl->PopProperties( CONTEXT_LIST );
4344 }
4345 /*-- 09.06.2006 09:52:14---------------------------------------------------
4346 
4347 -----------------------------------------------------------------------*/
4348 
4349 void DomainMapper::lcl_startCharacterGroup()
4350 {
4351     m_pImpl->PushProperties(CONTEXT_CHARACTER);
4352     DomainMapperTableManager& rTableManager = m_pImpl->getTableManager();
4353     if( rTableManager.getTableStyleName().getLength() )
4354     {
4355         PropertyMapPtr pTopContext = m_pImpl->GetTopContext();
4356         rTableManager.CopyTextProperties(pTopContext, m_pImpl->GetStyleSheetTable());
4357     }
4358 }
4359 /*-- 09.06.2006 09:52:14---------------------------------------------------
4360 
4361 -----------------------------------------------------------------------*/
4362 void DomainMapper::lcl_endCharacterGroup()
4363 {
4364     m_pImpl->PopProperties(CONTEXT_CHARACTER);
4365 }
4366 /*-- 09.06.2006 09:52:14---------------------------------------------------
4367 
4368 -----------------------------------------------------------------------*/
4369 void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len)
4370 {
4371     //TODO: Determine the right text encoding (FIB?)
4372     ::rtl::OUString sText( (const sal_Char*) data_, len, RTL_TEXTENCODING_MS_1252 );
4373 #ifdef DEBUG_DOMAINMAPPER
4374     dmapper_logger->startElement("text");
4375     dmapper_logger->chars(sText);
4376     dmapper_logger->endElement("text");
4377 #endif
4378 
4379     try
4380     {
4381         if(len == 1)
4382         {
4383             switch(*data_)
4384             {
4385                 case 0x02: return; //footnote character
4386                 case 0x0c: //page break
4387                     m_pImpl->deferBreak(PAGE_BREAK);
4388                     return;
4389                 case 0x0e: //column break
4390                     m_pImpl->deferBreak(COLUMN_BREAK);
4391                     return;
4392                 case 0x07:
4393                     m_pImpl->getTableManager().text(data_, len);
4394                 case 0x0d:
4395                     m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH));
4396                     return;
4397                 case 0x13:
4398                     m_pImpl->PushFieldContext();
4399                     return;
4400                 case 0x14:
4401                     // delimiter not necessarily available
4402                     // appears only if field contains further content
4403                     m_pImpl->CloseFieldCommand();
4404                     return;
4405                 case 0x15: /* end of field */
4406                     m_pImpl->PopFieldContext();
4407                     return;
4408                 default:
4409                     break;
4410             }
4411         }
4412 
4413         PropertyMapPtr pContext = m_pImpl->GetTopContext();
4414 	if ( pContext && !pContext->GetFootnote().is() )
4415 	{
4416 	    if (m_pImpl->isBreakDeferred(PAGE_BREAK))
4417                 m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
4418             else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
4419                 m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
4420             m_pImpl->clearDeferredBreaks();
4421         }
4422 
4423         if( pContext->GetFootnote().is() && m_pImpl->IsCustomFtnMark() )
4424         {
4425             pContext->GetFootnote()->setLabel( sText );
4426             m_pImpl->SetCustomFtnMark( false );
4427             //otherwise ignore sText
4428         }
4429         else if( m_pImpl->IsOpenFieldCommand() )
4430             m_pImpl->AppendFieldCommand(sText);
4431         else if( m_pImpl->IsOpenField() && m_pImpl->IsFieldResultAsString())
4432              /*depending on the success of the field insert operation this result will be
4433               set at the field or directly inserted into the text*/
4434             m_pImpl->SetFieldResult( sText );
4435         else
4436         {
4437             //--> debug
4438             //sal_uInt32 nSize = pContext->size();
4439             //<--
4440 
4441             if (pContext == NULL)
4442                 pContext.reset(new PropertyMap());
4443 
4444             m_pImpl->appendTextPortion( sText, pContext );
4445         }
4446     }
4447     catch( const uno::RuntimeException& )
4448     {
4449         std::clog << __FILE__ << "(l" << __LINE__ << ")" << std::endl;
4450     }
4451 }
4452 /*-- 09.06.2006 09:52:15---------------------------------------------------
4453 
4454 -----------------------------------------------------------------------*/
4455 void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
4456 {
4457     OUString sText;
4458     OUStringBuffer aBuffer = OUStringBuffer(len);
4459     aBuffer.append( (const sal_Unicode *) data_, len);
4460     sText = aBuffer.makeStringAndClear();
4461 
4462     try
4463     {
4464         m_pImpl->getTableManager().utext(data_, len);
4465 
4466         if(len == 1 && ((*data_) == 0x0d || (*data_) == 0x07))
4467             m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH));
4468         else
4469         {
4470 
4471             PropertyMapPtr pContext = m_pImpl->GetTopContext();
4472             if ( pContext && !pContext->GetFootnote().is() )
4473             {
4474                 if (m_pImpl->isBreakDeferred(PAGE_BREAK))
4475                     m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
4476                 else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
4477                     m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
4478                 m_pImpl->clearDeferredBreaks();
4479             }
4480 
4481             /* doesn't seem to be working
4482             if( pContext->GetFootnote().is() )
4483             {
4484                 //todo: the check for 0x0a is a hack!
4485                 if( *data_ != 0x0a && !pContext->GetFootnoteSymbol() )
4486                     pContext->GetFootnote()->setLabel( sText );
4487                 //otherwise ignore sText
4488             }
4489             else */
4490             if( pContext && pContext->GetFootnote().is() )
4491             {
4492                 if( !pContext->GetFootnoteSymbol() )
4493                     pContext->GetFootnote()->setLabel( sText );
4494                 //otherwise ignore sText
4495             }
4496             else if( m_pImpl->IsOpenFieldCommand() )
4497                 m_pImpl->AppendFieldCommand(sText);
4498             else if( m_pImpl->IsOpenField() && m_pImpl->IsFieldResultAsString())
4499                 /*depending on the success of the field insert operation this result will be
4500                   set at the field or directly inserted into the text*/
4501                 m_pImpl->SetFieldResult( sText );
4502             else
4503             {
4504                 if (pContext == NULL)
4505                     pContext.reset(new PropertyMap());
4506 
4507                 m_pImpl->appendTextPortion( sText, pContext );
4508             }
4509 
4510         }
4511     }
4512     catch( const uno::RuntimeException& )
4513     {
4514     }
4515 }
4516 /*-- 09.06.2006 09:52:15---------------------------------------------------
4517 
4518 -----------------------------------------------------------------------*/
4519 void DomainMapper::lcl_props(writerfilter::Reference<Properties>::Pointer_t ref)
4520 {
4521     string sType = ref->getType();
4522     if( sType == "PICF" )
4523     {
4524         m_pImpl->ImportGraphic(ref, IMPORT_AS_GRAPHIC);
4525     }
4526     else if( sType == "FSPA" )
4527     {
4528         m_pImpl->ImportGraphic(ref, IMPORT_AS_SHAPE);
4529     }
4530     else
4531         ref->resolve(*this);
4532 }
4533 /*-- 09.06.2006 09:52:15---------------------------------------------------
4534 
4535 -----------------------------------------------------------------------*/
4536 void DomainMapper::lcl_table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
4537 {
4538     // printf ( "DomainMapper::table(0x%.4x)\n", (unsigned int)name);
4539     m_pImpl->SetAnyTableImport(true);
4540     /* WRITERFILTERSTATUS: table: attributedata */
4541     switch(name)
4542     {
4543     case NS_rtf::LN_FONTTABLE:
4544         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4545 
4546         // create a font table object that listens to the attributes
4547         // each entry call inserts a new font entry
4548         ref->resolve( *m_pImpl->GetFontTable() );
4549         break;
4550     case NS_rtf::LN_STYLESHEET:
4551         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4552         //same as above to import style sheets
4553         m_pImpl->SetStyleSheetImport( true );
4554         ref->resolve( *m_pImpl->GetStyleSheetTable() );
4555         m_pImpl->GetStyleSheetTable()->ApplyStyleSheets(m_pImpl->GetFontTable());
4556         m_pImpl->SetStyleSheetImport( false );
4557         break;
4558     case NS_ooxml::LN_NUMBERING:
4559     case NS_rtf::LN_LISTTABLE:
4560         {
4561             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4562 
4563             //the same for list tables
4564             ref->resolve( *m_pImpl->GetListTable() );
4565             m_pImpl->GetListTable( )->CreateNumberingRules( );
4566         }
4567         break;
4568     case NS_rtf::LN_LFOTABLE:
4569         {
4570             m_pImpl->GetListTable( )->SetLFOImport( true );
4571             ref->resolve( *m_pImpl->GetListTable() );
4572             m_pImpl->GetListTable( )->CreateNumberingRules( );
4573             m_pImpl->GetListTable( )->SetLFOImport( false );
4574         }
4575         break;
4576     case NS_ooxml::LN_THEMETABLE:
4577         ref->resolve ( *m_pImpl->GetThemeTable() );
4578     break;
4579     case NS_ooxml::LN_settings_settings:
4580         ref->resolve ( *m_pImpl->GetSettingsTable() );
4581         m_pImpl->ApplySettingsTable();
4582     break;
4583     default:
4584         OSL_ENSURE( false, "which table is to be filled here?");
4585     }
4586     m_pImpl->SetAnyTableImport(false);
4587 }
4588 /*-- 09.06.2006 09:52:16---------------------------------------------------
4589 
4590 -----------------------------------------------------------------------*/
4591 void DomainMapper::lcl_substream(Id rName, ::writerfilter::Reference<Stream>::Pointer_t ref)
4592 {
4593     m_pImpl->appendTableManager( );
4594     m_pImpl->getTableManager().startLevel();
4595 
4596     //->debug
4597     //string sName = (*QNameToString::Instance())(rName);
4598     //--<debug
4599     //import of page header/footer
4600 
4601     /* WRITERFILTERSTATUS: table: attributedata */
4602     switch( rName )
4603     {
4604     case NS_rtf::LN_headerl:
4605         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4606 
4607         m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_LEFT);
4608         break;
4609     case NS_rtf::LN_headerr:
4610         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4611 
4612         m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_RIGHT);
4613         break;
4614     case NS_rtf::LN_headerf:
4615         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4616 
4617         m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_FIRST);
4618         break;
4619     case NS_rtf::LN_footerl:
4620         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4621 
4622         m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_LEFT);
4623         break;
4624     case NS_rtf::LN_footerr:
4625         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4626 
4627         m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_RIGHT);
4628         break;
4629     case NS_rtf::LN_footerf:
4630         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4631 
4632         m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_FIRST);
4633         break;
4634     case NS_rtf::LN_footnote:
4635     case NS_rtf::LN_endnote:
4636         m_pImpl->PushFootOrEndnote( NS_rtf::LN_footnote == rName );
4637     break;
4638     case NS_rtf::LN_annotation :
4639         m_pImpl->PushAnnotation();
4640     break;
4641     }
4642     ref->resolve(*this);
4643     switch( rName )
4644     {
4645     case NS_rtf::LN_headerl:
4646     case NS_rtf::LN_headerr:
4647     case NS_rtf::LN_headerf:
4648     case NS_rtf::LN_footerl:
4649     case NS_rtf::LN_footerr:
4650     case NS_rtf::LN_footerf:
4651         m_pImpl->PopPageHeaderFooter();
4652     break;
4653     case NS_rtf::LN_footnote:
4654     case NS_rtf::LN_endnote:
4655         m_pImpl->PopFootOrEndnote();
4656     break;
4657     case NS_rtf::LN_annotation :
4658         m_pImpl->PopAnnotation();
4659     break;
4660     }
4661 
4662     m_pImpl->getTableManager().endLevel();
4663     m_pImpl->popTableManager( );
4664 }
4665 /*-- 09.06.2006 09:52:16---------------------------------------------------
4666 
4667 -----------------------------------------------------------------------*/
4668 void DomainMapper::lcl_info(const string & /*info_*/)
4669 {
4670 }
4671 
4672 void DomainMapper::handleUnderlineType(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext)
4673 {
4674     sal_Int16 eUnderline = awt::FontUnderline::NONE;
4675 
4676     switch(nIntValue)
4677     {
4678     case 0: eUnderline = awt::FontUnderline::NONE; break;
4679     case 2: pContext->Insert(PROP_CHAR_WORD_MODE, true, uno::makeAny( true ) ); // TODO: how to get rid of it?
4680     case 1: eUnderline = awt::FontUnderline::SINGLE;       break;
4681     case 3: eUnderline = awt::FontUnderline::DOUBLE;       break;
4682     case 4: eUnderline = awt::FontUnderline::DOTTED;       break;
4683     case 7: eUnderline = awt::FontUnderline::DASH;         break;
4684     case 9: eUnderline = awt::FontUnderline::DASHDOT;      break;
4685     case 10:eUnderline = awt::FontUnderline::DASHDOTDOT;   break;
4686     case 6: eUnderline = awt::FontUnderline::BOLD;         break;
4687     case 11:eUnderline = awt::FontUnderline::WAVE;         break;
4688     case 20:eUnderline = awt::FontUnderline::BOLDDOTTED;   break;
4689     case 23:eUnderline = awt::FontUnderline::BOLDDASH;     break;
4690     case 39:eUnderline = awt::FontUnderline::LONGDASH;     break;
4691     case 55:eUnderline = awt::FontUnderline::BOLDLONGDASH; break;
4692     case 25:eUnderline = awt::FontUnderline::BOLDDASHDOT;  break;
4693     case 26:eUnderline = awt::FontUnderline::BOLDDASHDOTDOT;break;
4694     case 27:eUnderline = awt::FontUnderline::BOLDWAVE;     break;
4695     case 43:eUnderline = awt::FontUnderline::DOUBLEWAVE;   break;
4696     default: ;
4697     }
4698     pContext->Insert(PROP_CHAR_UNDERLINE, true, uno::makeAny( eUnderline ) );
4699 }
4700 
4701 void DomainMapper::handleParaJustification(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext, const bool bExchangeLeftRight)
4702 {
4703     sal_Int16 nAdjust = 0;
4704     sal_Int16 nLastLineAdjust = 0;
4705     switch(nIntValue)
4706     {
4707     case 1:
4708         nAdjust = style::ParagraphAdjust_CENTER;
4709         break;
4710     case 2:
4711         nAdjust = static_cast< sal_Int16 > (bExchangeLeftRight ? style::ParagraphAdjust_LEFT : style::ParagraphAdjust_RIGHT);
4712         break;
4713     case 4:
4714         nLastLineAdjust = style::ParagraphAdjust_BLOCK;
4715         //no break;
4716     case 3:
4717         nAdjust = style::ParagraphAdjust_BLOCK;
4718         break;
4719     case 0:
4720     default:
4721         nAdjust = static_cast< sal_Int16 > (bExchangeLeftRight ? style::ParagraphAdjust_RIGHT : style::ParagraphAdjust_LEFT);
4722         break;
4723     }
4724     pContext->Insert( PROP_PARA_ADJUST, true, uno::makeAny( nAdjust ) );
4725     pContext->Insert( PROP_PARA_LAST_LINE_ADJUST, true, uno::makeAny( nLastLineAdjust ) );
4726 }
4727 
4728 bool DomainMapper::getColorFromIndex(const sal_Int32 nIndex, sal_Int32 &nColor)
4729 {
4730     nColor = 0;
4731     if ((nIndex < 1) || (nIndex > 16))
4732         return false;
4733 
4734     switch (nIndex)
4735     {
4736     case 1: nColor=0x000000; break; //black
4737     case 2: nColor=0x0000ff; break; //blue
4738     case 3: nColor=0x00ffff; break; //cyan
4739     case 4: nColor=0x00ff00; break; //green
4740     case 5: nColor=0xff00ff; break; //magenta
4741     case 6: nColor=0xff0000; break; //red
4742     case 7: nColor=0xffff00; break; //yellow
4743     case 8: nColor=0xffffff; break; //white
4744     case 9: nColor=0x000080;  break;//dark blue
4745     case 10: nColor=0x008080; break; //dark cyan
4746     case 11: nColor=0x008000; break; //dark green
4747     case 12: nColor=0x800080; break; //dark magenta
4748     case 13: nColor=0x800000; break; //dark red
4749     case 14: nColor=0x808000; break; //dark yellow
4750     case 15: nColor=0x808080; break; //dark gray
4751     case 16: nColor=0xC0C0C0; break; //light gray
4752     default:
4753         return false;
4754     }
4755     return true;
4756 }
4757 
4758 sal_Int16 DomainMapper::getEmphasisValue(const sal_Int32 nIntValue)
4759 {
4760     switch (nIntValue)
4761     {
4762     case 1:
4763         return com::sun::star::text::FontEmphasis::DOT_ABOVE;
4764     case 2:
4765         return com::sun::star::text::FontEmphasis::ACCENT_ABOVE;
4766     case 3:
4767         return com::sun::star::text::FontEmphasis::CIRCLE_ABOVE;
4768     case 4:
4769         return com::sun::star::text::FontEmphasis::DOT_BELOW;
4770     default:
4771         return com::sun::star::text::FontEmphasis::NONE;
4772     }
4773 }
4774 
4775 rtl::OUString DomainMapper::getBracketStringFromEnum(const sal_Int32 nIntValue, const bool bIsPrefix)
4776 {
4777     switch(nIntValue)
4778     {
4779     case 1:
4780         if (bIsPrefix)
4781             return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "(" ));
4782         return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( ")" ));
4783 
4784     case 2:
4785         if (bIsPrefix)
4786             return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "[" ));
4787         return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "]" ));
4788 
4789     case 3:
4790         if (bIsPrefix)
4791             return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "<" ));
4792         return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( ">" ));
4793 
4794     case 4:
4795         if (bIsPrefix)
4796             return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "{" ));
4797         return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "}" ));
4798 
4799     case 0:
4800     default:
4801         return rtl::OUString();
4802     }
4803 }
4804 
4805 com::sun::star::style::TabAlign DomainMapper::getTabAlignFromValue(const sal_Int32 nIntValue)
4806 {
4807     switch (nIntValue)
4808     {
4809     case 0:
4810     case 4: // bar not supported
4811     case 5: // num not supported
4812         return com::sun::star::style::TabAlign_LEFT;
4813     case 1:
4814         return com::sun::star::style::TabAlign_CENTER;
4815     case 2:
4816         return com::sun::star::style::TabAlign_RIGHT;
4817     case 3:
4818         return com::sun::star::style::TabAlign_DECIMAL;
4819     }
4820     return com::sun::star::style::TabAlign_LEFT;
4821 }
4822 
4823 sal_Unicode DomainMapper::getFillCharFromValue(const sal_Int32 nIntValue)
4824 {
4825     switch (nIntValue)
4826     {
4827     case 1: // dot
4828         return sal_Unicode(0x002e);
4829     case 2: // hyphen
4830         return sal_Unicode(0x002d);
4831     case 3: // underscore
4832     case 4: // heavy FIXME ???
4833         return sal_Unicode(0x005f);
4834     case NS_ooxml::LN_Value_ST_TabTlc_middleDot: // middleDot
4835         return sal_Unicode(0x00b7);
4836     case 0: // none
4837     default:
4838         return sal_Unicode(0x0020); // blank space
4839     }
4840 }
4841 /*-- 18.07.2007 14:59:00---------------------------------------------------
4842 
4843   -----------------------------------------------------------------------*/
4844 bool DomainMapper::IsOOXMLImport() const
4845 {
4846     return m_pImpl->IsOOXMLImport();
4847 }
4848 /*-- 18.07.2007 16:03:14---------------------------------------------------
4849 
4850   -----------------------------------------------------------------------*/
4851 uno::Reference < lang::XMultiServiceFactory > DomainMapper::GetTextFactory() const
4852 {
4853     return m_pImpl->GetTextFactory();
4854 }
4855 /*-- 12.11.2007 10:41:01---------------------------------------------------
4856 
4857   -----------------------------------------------------------------------*/
4858 /*-- 31.01.2008 18:19:44---------------------------------------------------
4859 
4860   -----------------------------------------------------------------------*/
4861 uno::Reference< text::XTextRange > DomainMapper::GetCurrentTextRange()
4862 {
4863     return m_pImpl->GetTopTextAppend()->getEnd();
4864 }
4865 
4866 /*-- 05.02.2008 10:26:26---------------------------------------------------
4867 
4868   -----------------------------------------------------------------------*/
4869 ::rtl::OUString DomainMapper::getOrCreateCharStyle( PropertyValueVector_t& rCharProperties )
4870 {
4871     StyleSheetTablePtr pStyleSheets = m_pImpl->GetStyleSheetTable();
4872     return pStyleSheets->getOrCreateCharStyle( rCharProperties );
4873 }
4874 
4875 ListsManager::Pointer DomainMapper::GetListTable( )
4876 {
4877     return m_pImpl->GetListTable( );
4878 }
4879 
4880 StyleSheetTablePtr DomainMapper::GetStyleSheetTable( )
4881 {
4882     return m_pImpl->GetStyleSheetTable( );
4883 }
4884 
4885 } //namespace dmapper
4886 } //namespace writerfilter
4887