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         {
3029             /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
3030             //Kerning half point values
3031             //TODO: there are two kerning values -
3032             // in ww8par6.cxx NS_sprm::LN_CHpsKern is used as boolean AutoKerning
3033             sal_Int16 nResult = static_cast<sal_Int16>(ConversionHelper::convertTwipToMM100(nIntValue));
3034             if (m_pImpl->IsInComments())
3035             {
3036                 nResult = static_cast<sal_Int16>(nIntValue);
3037             }
3038             rContext->Insert(PROP_CHAR_CHAR_KERNING, true, uno::makeAny(nResult));
3039         }
3040         break;
3041     case NS_sprm::LN_CHpsKern:  // sprmCHpsKern    auto kerning is bound to a minimum font size in Word - but not in Writer :-(
3042         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3043         rContext->Insert(PROP_CHAR_AUTO_KERNING, true, uno::makeAny( true ) );
3044         break;
3045     case NS_sprm::LN_CMajority50:
3046         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3047         break;  // sprmCMajority50
3048     case NS_sprm::LN_CHpsMul:
3049         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3050         break;  // sprmCHpsMul
3051     case NS_sprm::LN_CYsri:
3052         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3053         break;  // sprmCYsri
3054     case NS_sprm::LN_CRgFtc0:  // sprmCRgFtc0     //ascii font index
3055         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3056     case NS_sprm::LN_CRgFtc1:  // sprmCRgFtc1     //Asian font index
3057         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3058     case NS_sprm::LN_CRgFtc2:  // sprmCRgFtc2     //CTL font index
3059         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3060     case NS_sprm::LN_CFtcBi: // sprmCFtcBi      //font index of a CTL font
3061         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3062         {
3063             FontTablePtr pFontTable = m_pImpl->GetFontTable();
3064             if(nIntValue >= 0 && pFontTable->size() > sal_uInt32(nIntValue))
3065             {
3066                 PropertyIds eFontName    = PROP_CHAR_FONT_NAME;
3067                 PropertyIds eFontStyle   = PROP_CHAR_FONT_STYLE;
3068                 PropertyIds eFontFamily  = PROP_CHAR_FONT_FAMILY;
3069                 PropertyIds eFontCharSet = PROP_CHAR_FONT_CHAR_SET;
3070                 PropertyIds eFontPitch   = PROP_CHAR_FONT_PITCH;
3071                 switch(nSprmId)
3072                 {
3073                 case NS_sprm::LN_CRgFtc0:
3074                     //already initialized
3075                     break;
3076                 case NS_sprm::LN_CRgFtc1:
3077                     eFontName =     PROP_CHAR_FONT_NAME_ASIAN;
3078                     eFontStyle =    PROP_CHAR_FONT_STYLE_ASIAN;
3079                     eFontFamily =   PROP_CHAR_FONT_FAMILY_ASIAN;
3080                     eFontCharSet =  PROP_CHAR_FONT_CHAR_SET_ASIAN;
3081                     eFontPitch =    PROP_CHAR_FONT_PITCH_ASIAN;
3082                     break;
3083                 case NS_sprm::LN_CRgFtc2:
3084                 case NS_sprm::LN_CFtcBi:
3085                     eFontName =     PROP_CHAR_FONT_NAME_COMPLEX;
3086                     eFontStyle =    PROP_CHAR_FONT_STYLE_COMPLEX;
3087                     eFontFamily =   PROP_CHAR_FONT_FAMILY_COMPLEX;
3088                     eFontCharSet =  PROP_CHAR_FONT_CHAR_SET_COMPLEX;
3089                     eFontPitch =    PROP_CHAR_FONT_PITCH_COMPLEX;
3090                     break;
3091                 }
3092                 const FontEntry::Pointer_t pFontEntry(pFontTable->getFontEntry(sal_uInt32(nIntValue)));
3093                 rContext->Insert(eFontName, true, uno::makeAny( pFontEntry->sFontName  ));
3094                 //                rContext->Insert(eFontStyle, uno::makeAny( pFontEntry->  ));
3095                 //                rContext->Insert(eFontFamily, uno::makeAny( pFontEntry->  ));
3096                 rContext->Insert(eFontCharSet, true, uno::makeAny( (sal_Int16)pFontEntry->nTextEncoding  ));
3097                 rContext->Insert(eFontPitch, true, uno::makeAny( pFontEntry->nPitchRequest  ));
3098             }
3099         }
3100         break;
3101     case NS_sprm::LN_CCharScale:  // sprmCCharScale
3102         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3103         rContext->Insert(PROP_CHAR_SCALE_WIDTH, true,
3104                          uno::makeAny( sal_Int16(nIntValue) ));
3105         break;
3106     case NS_sprm::LN_CFImprint: // sprmCFImprint   1 or 0
3107         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3108         // FontRelief: NONE, EMBOSSED, ENGRAVED
3109         rContext->Insert(PROP_CHAR_RELIEF, true,
3110                          uno::makeAny( nIntValue ? awt::FontRelief::ENGRAVED : awt::FontRelief::NONE ));
3111         break;
3112     case NS_sprm::LN_CFObj:
3113         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3114         break;  // sprmCFObj
3115     case NS_sprm::LN_CPropRMark:
3116         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3117         break;  // sprmCPropRMark
3118     case NS_sprm::LN_CSfxText:
3119         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3120         // The file-format has many character animations. We have only
3121         // one, so we use it always. Suboptimal solution though.
3122         if (nIntValue)
3123             rContext->Insert(PROP_CHAR_FLASH, true, uno::makeAny( true ));
3124         else
3125             rContext->Insert(PROP_CHAR_FLASH, true, uno::makeAny( false ));
3126         break;  // sprmCSfxText
3127     case NS_sprm::LN_CFBiDi:
3128         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3129         break;  // sprmCFBiDi
3130     case NS_sprm::LN_CFDiacColor:
3131         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3132         break;  // sprmCFDiacColor
3133     case NS_sprm::LN_CIcoBi:
3134         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3135         break;  // sprmCIcoBi
3136     case NS_sprm::LN_CDispFldRMark:
3137         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3138         break;  // sprmCDispFldRMark
3139     case NS_sprm::LN_CIbstRMarkDel:
3140         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3141         break;  // sprmCIbstRMarkDel
3142     case NS_sprm::LN_CDttmRMarkDel:
3143         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3144         break;  // sprmCDttmRMarkDel
3145     case NS_sprm::LN_CBrc:
3146         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3147         break;  // sprmCBrc
3148     case NS_sprm::LN_CShd:
3149         /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
3150         break;  // sprmCShd
3151     case NS_sprm::LN_CIdslRMarkDel:
3152         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3153         break;  // sprmCIdslRMarkDel
3154     case NS_sprm::LN_CFUsePgsuSettings:
3155         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3156         break;  // sprmCFUsePgsuSettings
3157     case NS_sprm::LN_CCpg:
3158         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3159         break;  // sprmCCpg
3160     case NS_sprm::LN_CLidBi:  // sprmCLidBi      language complex
3161         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3162     case NS_sprm::LN_CRgLid0_80: //sprmCRgLid0_80
3163         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 1 */
3164         //undocumented but interpreted as western language
3165     case NS_sprm::LN_CRgLid0:   // sprmCRgLid0    language Western
3166         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3167     case NS_sprm::LN_CRgLid1:   // sprmCRgLid1    language Asian
3168         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3169         {
3170             lang::Locale aLocale;
3171             MsLangId::convertLanguageToLocale( (LanguageType)nIntValue, aLocale );
3172             rContext->Insert(NS_sprm::LN_CRgLid0 == nSprmId ? PROP_CHAR_LOCALE :
3173                              NS_sprm::LN_CRgLid1 == nSprmId ? PROP_CHAR_LOCALE_ASIAN : PROP_CHAR_LOCALE_COMPLEX,
3174                              true,
3175                              uno::makeAny( aLocale ) );
3176         }
3177         break;
3178 
3179     case NS_sprm::LN_CIdctHint:   // sprmCIdctHint
3180         //list table - text offset???
3181         break;
3182     case NS_sprm::LN_PicBrcl:
3183         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3184         break;  // sprmPicBrcl
3185     case NS_sprm::LN_PicScale:
3186         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3187         break;  // sprmPicScale
3188     case NS_sprm::LN_PicBrcTop:
3189         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3190         break;  // sprmPicBrcTop
3191     case NS_sprm::LN_PicBrcLeft:
3192         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3193         break;  // sprmPicBrcLeft
3194     case NS_sprm::LN_PicBrcBottom:
3195         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3196         break;  // sprmPicBrcBoConversionHelper::convertTwipToMM100ttom
3197     case NS_sprm::LN_PicBrcRight:
3198         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3199         break;  // sprmPicBrcRight
3200     case NS_sprm::LN_ScnsPgn:
3201         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3202         break;  // sprmScnsPgn
3203     case NS_sprm::LN_SiHeadingPgn:
3204         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3205         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3206         if(pSectionContext)
3207             pSectionContext->SetEvenlySpaced( nIntValue > 0 );
3208 
3209         break;  // sprmSiHeadingPgn
3210     case NS_sprm::LN_SOlstAnm:
3211         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3212         break;  // sprmSOlstAnm
3213     case 136:
3214     case NS_sprm::LN_SDxaColWidth: // sprmSDxaColWidth
3215         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3216         // contains the twip width of the column as 3-byte-code
3217         // the lowet byte contains the index
3218         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3219         if(pSectionContext)
3220             pSectionContext->AppendColumnWidth( ConversionHelper::convertTwipToMM100( (nIntValue & 0xffff00) >> 8 ));
3221         break;
3222     case NS_sprm::LN_SDxaColSpacing: // sprmSDxaColSpacing
3223         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3224         // the lowet byte contains the index
3225         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3226         if(pSectionContext)
3227             pSectionContext->AppendColumnSpacing( ConversionHelper::convertTwipToMM100( (nIntValue & 0xffff00) >> 8 ));
3228         break;
3229     case 138:
3230     case NS_sprm::LN_SFEvenlySpaced:
3231         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3232         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3233         if(pSectionContext)
3234             pSectionContext->SetEvenlySpaced( nIntValue > 0 );
3235         break;  // sprmSFEvenlySpaced
3236     case NS_sprm::LN_SFProtected: // sprmSFProtected
3237         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3238         //todo: missing feature - unlocked sections in protected documents
3239         break;
3240     case NS_sprm::LN_SDmBinFirst: // sprmSDmBinFirst
3241         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3242         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3243         if(pSectionContext)
3244             pSectionContext->SetFirstPaperBin(nIntValue);
3245         break;
3246     case NS_sprm::LN_SDmBinOther: // sprmSDmBinOther
3247         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3248         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3249         if(pSectionContext)
3250             pSectionContext->SetPaperBin( nIntValue );
3251         break;
3252     case NS_sprm::LN_SBkc: // sprmSBkc
3253         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
3254         /* break type
3255           0 - No break
3256           1 - New Colunn
3257           2 - New page
3258           3 - Even page
3259           4 - odd page
3260         */
3261         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3262         if(pSectionContext)
3263             pSectionContext->SetBreakType( nIntValue );
3264         break;
3265     case 143:
3266     case NS_sprm::LN_SFTitlePage: // sprmSFTitlePage
3267     case NS_ooxml::LN_EG_SectPrContents_titlePg:
3268         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3269     {
3270         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3271         if(pSectionContext)
3272             pSectionContext->SetTitlePage( nIntValue > 0 ? true : false );//section has title page
3273     }
3274     break;
3275     case 144:
3276     case NS_sprm::LN_SCcolumns: // sprmSCcolumns
3277         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3278         //no of columns - 1
3279         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3280         if(pSectionContext)
3281             pSectionContext->SetColumnCount( (sal_Int16) nIntValue );
3282     break;
3283     case 145:
3284     case NS_sprm::LN_SDxaColumns:           // sprmSDxaColumns
3285         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3286         //column distance - default 708 twip
3287         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3288         if(pSectionContext)
3289             pSectionContext->SetColumnDistance( ConversionHelper::convertTwipToMM100( nIntValue ) );
3290         break;
3291     case NS_sprm::LN_SFAutoPgn:
3292         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3293         break;  // sprmSFAutoPgn
3294     case 147:
3295     case NS_sprm::LN_SNfcPgn: // sprmSNfcPgn
3296         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3297         //page numbering 0 - Arab, 1 - ROMAN, 2 - roman, 3 - ABC, 4 abc
3298         sal_Int16 nNumbering;
3299         switch( nIntValue )
3300         {
3301             case 1:  nNumbering = style::NumberingType::ROMAN_UPPER;
3302             case 2:  nNumbering = style::NumberingType::ROMAN_LOWER;
3303             case 3:  nNumbering = style::NumberingType::CHARS_UPPER_LETTER;
3304             case 4:  nNumbering = style::NumberingType::CHARS_LOWER_LETTER;
3305             case 0:
3306             default:
3307                     nNumbering = style::NumberingType::ARABIC;
3308         }
3309         rContext->Insert( PROP_NUMBERING_TYPE, false, uno::makeAny( nNumbering ) );
3310     break;
3311     case NS_sprm::LN_SDyaPgn:
3312         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3313         break;  // sprmSDyaPgn
3314     case NS_sprm::LN_SDxaPgn:
3315         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3316         break;  // sprmSDxaPgn
3317     case 150:
3318     case NS_sprm::LN_SFPgnRestart: // sprmSFPgnRestart
3319     {
3320         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3321         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3322         if(pSectionContext)
3323             pSectionContext->SetPageNoRestart( nIntValue > 0 );
3324     }
3325     break;
3326     case NS_sprm::LN_SFEndnote:
3327         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3328         break;  // sprmSFEndnote
3329     case 154:
3330     case NS_sprm::LN_SNLnnMod:// sprmSNLnnMod
3331         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3332         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3333         if( pSectionContext )
3334             pSectionContext->SetLnnMod( nIntValue );
3335     break;
3336     case 155:
3337     case NS_sprm::LN_SDxaLnn: // sprmSDxaLnn
3338         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3339         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3340         if( pSectionContext )
3341             pSectionContext->SetdxaLnn( nIntValue );
3342     break;
3343     case 152:
3344     case NS_sprm::LN_SLnc:// sprmSLnc
3345         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3346         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3347         if( pSectionContext )
3348             pSectionContext->SetLnc( nIntValue );
3349     break;
3350     case 160:
3351     case NS_sprm::LN_SLnnMin: // sprmSLnnMin
3352         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3353         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3354         if( pSectionContext )
3355             pSectionContext->SetLnnMin( nIntValue );
3356     break;
3357 
3358     case NS_sprm::LN_SGprfIhdt:
3359         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3360         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3361         //flags about header/footer sharing and footnotes?
3362         /* ww8scan.hxx:
3363          * WW8_HEADER_EVEN = 0x01, WW8_HEADER_ODD = 0x02, WW8_FOOTER_EVEN = 0x04,
3364          * WW8_FOOTER_ODD = 0x08, WW8_HEADER_FIRST = 0x10, WW8_FOOTER_FIRST = 0x20
3365          */
3366 
3367 //        if(pSectionContext)
3368     break;  // sprmSGprfIhdt
3369     case NS_sprm::LN_SDyaHdrTop: // sprmSDyaHdrTop
3370         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3371         // default 720 twip
3372         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3373         if(pSectionContext)
3374             pSectionContext->SetHeaderTop( ConversionHelper::convertTwipToMM100( nIntValue ));
3375     break;
3376     case NS_sprm::LN_SDyaHdrBottom: // sprmSDyaHdrBottom
3377         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3378         // default 720 twip
3379         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3380         if(pSectionContext)
3381             pSectionContext->SetHeaderBottom( ConversionHelper::convertTwipToMM100( nIntValue ) );
3382     break;
3383     case 158:
3384     case NS_sprm::LN_SLBetween: // sprmSLBetween
3385         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3386         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3387         if(pSectionContext)
3388             pSectionContext->SetSeparatorLine( nIntValue > 0 );
3389     break;
3390     case NS_sprm::LN_SVjc:
3391         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3392         break;  // sprmSVjc
3393     case 161:
3394     case NS_sprm::LN_SPgnStart: // sprmSPgnStart
3395         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3396         //page number
3397         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3398         if(pSectionContext)
3399             pSectionContext->SetPageNumber( nIntValue );
3400     break;
3401     case 162:
3402     case NS_sprm::LN_SBOrientation:
3403         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3404         //todo: the old filter assumed that a value of 2 points to double-pages layout
3405         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3406         if(pSectionContext)
3407             pSectionContext->SetLandscape( nIntValue > 0 );
3408         rContext->Insert( PROP_IS_LANDSCAPE , false, uno::makeAny( nIntValue > 0 ));
3409     break;  // sprmSBOrientation
3410     case NS_sprm::LN_SBCustomize:
3411         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3412         break;  // sprmSBCustomize
3413     case 165:
3414     case NS_sprm::LN_SYaPage: // sprmSYaPage
3415     {
3416         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3417         //page height, rounded to default values, default: 0x3dc0 twip
3418         sal_Int32 nHeight = ConversionHelper::convertTwipToMM100( nIntValue );
3419         rContext->Insert( PROP_HEIGHT, false, uno::makeAny( PaperInfo::sloppyFitPageDimension( nHeight ) ) );
3420     }
3421     break;
3422     case NS_sprm::LN_SXaPage:   // sprmSXaPage
3423     {
3424         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3425         //page width, rounded to default values, default 0x2fd0 twip
3426         sal_Int32 nWidth = ConversionHelper::convertTwipToMM100( nIntValue );
3427         rContext->Insert( PROP_WIDTH, false, uno::makeAny( PaperInfo::sloppyFitPageDimension( nWidth ) ) );
3428     }
3429     break;
3430     case 166:
3431     case NS_sprm::LN_SDxaLeft:  // sprmSDxaLeft
3432     {
3433         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3434         //left page margin default 0x708 twip
3435         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3436         sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( nIntValue );
3437         if(pSectionContext)
3438             pSectionContext->SetLeftMargin( nConverted );
3439         rContext->Insert( PROP_LEFT_MARGIN, false, uno::makeAny( nConverted ));
3440     }
3441     break;
3442     case 167:
3443     case NS_sprm::LN_SDxaRight: // sprmSDxaRight
3444     {
3445         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3446         //right page margin default 0x708 twip
3447         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3448         sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( nIntValue );
3449         if(pSectionContext)
3450             pSectionContext->SetRightMargin( nConverted );
3451         rContext->Insert( PROP_RIGHT_MARGIN, false, uno::makeAny( nConverted ));
3452     }
3453     break;
3454     case 168:
3455     case NS_sprm::LN_SDyaTop: // sprmSDyaTop
3456     {
3457         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3458         //top page margin default 1440 twip
3459         //todo: check cast of SVBT16
3460         sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( static_cast< sal_Int16 >( nIntValue ) );
3461         rContext->Insert( PROP_TOP_MARGIN, false, uno::makeAny( nConverted ) );
3462         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3463         if(pSectionContext)
3464             pSectionContext->SetTopMargin( nConverted );
3465     }
3466     break;
3467     case 169:
3468     case NS_sprm::LN_SDyaBottom: // sprmSDyaBottom
3469     {
3470         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3471         //bottom page margin default 1440 twip
3472         //todo: check cast of SVBT16
3473         sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( static_cast< sal_Int16 >( nIntValue ) );
3474         rContext->Insert( PROP_BOTTOM_MARGIN, false, uno::makeAny( nConverted) );
3475         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3476         if(pSectionContext)
3477             pSectionContext->SetBottomMargin( nConverted );
3478     }
3479     break;
3480     case 170:
3481     case NS_sprm::LN_SDzaGutter:   // sprmSDzaGutter
3482     {
3483         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3484         // gutter is added to one of the margins of a section depending on RTL, can be placed on top either
3485         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3486         if(pSectionContext)
3487         {
3488             pSectionContext->SetDzaGutter( ConversionHelper::convertTwipToMM100( nIntValue  ) );
3489         }
3490     }
3491     break;
3492     case NS_sprm::LN_SDmPaperReq:   // sprmSDmPaperReq
3493         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
3494         //paper code - no handled in old filter
3495         break;
3496     case NS_sprm::LN_SPropRMark:
3497         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3498         break;  // sprmSPropRMark
3499     case NS_sprm::LN_SFBiDi:// sprmSFBiDi
3500     {
3501         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
3502         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3503         if(pSectionContext)
3504             pSectionContext->SetSFBiDi( nIntValue > 0 );
3505     }
3506     break;
3507     case NS_sprm::LN_SFFacingCol:
3508         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3509         break;  // sprmSFFacingCol
3510     case NS_sprm::LN_SFRTLGutter: // sprmSFRTLGutter
3511     {
3512         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3513         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3514         if(pSectionContext)
3515             pSectionContext->SetGutterRTL( nIntValue > 0 );
3516     }
3517     break;
3518     case NS_sprm::LN_SBrcTop:   // sprmSBrcTop
3519         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3520     case NS_sprm::LN_SBrcLeft:   // sprmSBrcLeft
3521         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3522     case NS_sprm::LN_SBrcBottom:  // sprmSBrcBottom
3523         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3524     case NS_sprm::LN_SBrcRight:  // sprmSBrcRight
3525         /* WRITERFILTERSTATUS: Sectiondone: 100, planned: 0.5, spent: 0 */
3526         {
3527             table::BorderLine aBorderLine;
3528             sal_Int32 nLineDistance = ConversionHelper::MakeBorderLine( nIntValue, aBorderLine );
3529             OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3530             if(pSectionContext)
3531             {
3532                 static const BorderPosition aPositions[4] =
3533                     {
3534                         BORDER_TOP,
3535                         BORDER_LEFT,
3536                         BORDER_BOTTOM,
3537                         BORDER_RIGHT
3538                     };
3539                 pSectionContext->SetBorder( aPositions[nSprmId - NS_sprm::LN_SBrcTop], nLineDistance, aBorderLine );
3540             }
3541         }
3542         break;
3543 
3544     case NS_sprm::LN_SPgbProp:  // sprmSPgbProp
3545         {
3546             OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3547             if(pSectionContext)
3548             {
3549                 pSectionContext->ApplyBorderToPageStyles( m_pImpl->GetPageStyles(), m_pImpl->GetTextFactory(), nIntValue );
3550             }
3551         }
3552         break;
3553     case NS_sprm::LN_SDxtCharSpace:
3554     {
3555         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3556         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3557         if(pSectionContext)
3558         {
3559             pSectionContext->SetDxtCharSpace( nIntValue );
3560         }
3561     }
3562     break;  // sprmSDxtCharSpace
3563     case NS_sprm::LN_SDyaLinePitch:   // sprmSDyaLinePitch
3564     {
3565         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3566         //see SwWW8ImplReader::SetDocumentGrid
3567         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3568         if(pSectionContext)
3569         {
3570             pSectionContext->SetGridLinePitch( ConversionHelper::convertTwipToMM100( nIntValue ) );
3571         }
3572     }
3573     break;
3574     case 0x703a: //undocumented, grid related?
3575         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3576         OSL_ENSURE( false, "TODO: not handled yet"); //nIntValue like 0x008a2373 ?
3577         break;
3578     case NS_sprm::LN_SClm:
3579     {
3580         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3581         sal_Int16 nGridType = text::TextGridMode::NONE;
3582         switch( nIntValue )
3583         {
3584             case 0:
3585                 nGridType = text::TextGridMode::NONE;
3586             break;
3587             case 3:
3588                 //Text snaps to char grid, this doesn't make a lot of sense to
3589                 //me. This is closer than LINES_CHARS
3590                 nGridType = text::TextGridMode::LINES;
3591             break;
3592             case 1:
3593                 nGridType = text::TextGridMode::LINES_AND_CHARS;
3594             break;
3595             case 2:
3596                 nGridType = text::TextGridMode::LINES;
3597             break;
3598             default:;
3599         }
3600         rContext->Insert( PROP_GRID_MODE, false, uno::makeAny( nGridType ) );
3601 
3602     //Seems to force this behaviour in word ?
3603     if(nGridType != text::TextGridMode::NONE)
3604         m_pImpl->SetDocumentSettingsProperty(
3605             PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_ADD_EXTERNAL_LEADING ),
3606             uno::makeAny( true ) );
3607     }
3608     break;  // sprmSClm
3609     case NS_sprm::LN_STextFlow:
3610     case NS_ooxml::LN_EG_SectPrContents_textDirection:
3611         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
3612     {
3613         /* 0 HoriLR 1 Vert TR 2 Vert TR 3 Vert TT 4 HoriLT
3614             only 0 and 1 can be imported correctly
3615           */
3616         sal_Int16 nDirection = text::WritingMode_LR_TB;
3617         switch( nIntValue )
3618         {
3619             case 0:
3620             case 4:
3621                 nDirection = text::WritingMode_LR_TB;
3622             break;
3623             case 1:
3624             case 2:
3625             case 3:
3626                 nDirection = text::WritingMode_TB_RL;
3627             break;
3628             default:;
3629         }
3630 
3631         PropertyMap * pTargetContext = rContext.get();
3632 
3633         if (pSectionContext != NULL &&
3634             nSprmId == NS_ooxml::LN_EG_SectPrContents_textDirection)
3635         {
3636             pTargetContext = pSectionContext;
3637         }
3638 
3639         pTargetContext->Insert(PROP_WRITING_MODE, false, uno::makeAny( nDirection ) );
3640     }
3641     break;  // sprmSTextFlow
3642     case NS_sprm::LN_TJc: // sprmTJc
3643     case NS_sprm::LN_TDxaLeft:
3644     case NS_sprm::LN_TDxaGapHalf:
3645     case NS_sprm::LN_TFCantSplit:
3646     case NS_sprm::LN_TTableHeader:
3647     case NS_sprm::LN_TTableBorders: // sprmTTableBorders
3648     {
3649         OSL_ENSURE( false, "table propeties should be handled by the table manager");
3650     }
3651     break;
3652     case NS_sprm::LN_TDefTable10:
3653         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3654         break;  // sprmTDefTable10
3655     case NS_sprm::LN_TDyaRowHeight:
3656         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3657         break;  // sprmTDyaRowHeight
3658     case NS_sprm::LN_TDefTable:
3659         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3660         break;  // sprmTDefTable
3661     case NS_sprm::LN_TDefTableShd:
3662         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3663         break;  // sprmTDefTableShd
3664     case NS_sprm::LN_TTlp:
3665         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3666         break;  // sprmTTlp
3667     case NS_sprm::LN_TFBiDi:
3668         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3669         break;  // sprmTFBiDi
3670     case NS_sprm::LN_THTMLProps:
3671         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3672         break;  // sprmTHTMLProps
3673     case NS_sprm::LN_TSetBrc:
3674         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3675         break;  // sprmTSetBrc
3676     case NS_sprm::LN_TInsert:
3677         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3678         break;  // sprmTInsert
3679     case NS_sprm::LN_TDelete:
3680         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3681         break;  // sprmTDelete
3682     case NS_sprm::LN_TDxaCol:
3683         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3684         break;  // sprmTDxaCol
3685     case NS_sprm::LN_TMerge:
3686         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3687         break;  // sprmTMerge
3688     case NS_sprm::LN_TSplit:
3689         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3690         break;  // sprmTSplit
3691     case NS_sprm::LN_TSetBrc10:
3692         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3693         break;  // sprmTSetBrc10
3694     case 164: // sprmTSetShd
3695     case NS_sprm::LN_TSetShd:
3696         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3697         break;  // sprmTSetShd
3698     case NS_sprm::LN_TSetShdOdd:
3699         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3700         break;  // sprmTSetShdOdd
3701     case NS_sprm::LN_TTextFlow:
3702         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3703         break;  // sprmTTextFlow
3704     case NS_sprm::LN_TDiagLine:
3705         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3706         break;  // sprmTDiagLine
3707     case NS_sprm::LN_TVertMerge:
3708         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3709         break;  // sprmTVertMerge
3710     case NS_sprm::LN_TVertAlign:
3711         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3712         break;  // sprmTVertAlign
3713         // the following are not part of the official documentation
3714     case 0x6870: //TxtForeColor
3715         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3716         {
3717             //contains a color as 0xTTRRGGBB while SO uses 0xTTRRGGBB
3718             sal_Int32 nColor = ConversionHelper::ConvertColor(nIntValue);
3719             rContext->Insert(PROP_CHAR_COLOR, true, uno::makeAny( nColor ) );
3720         }
3721         break;
3722     case 0x4874:
3723         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3724         break; //seems to be a language id for Asian text - undocumented
3725     case 0x6877: //underlining color
3726         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3727         {
3728             sal_Int32 nColor = ConversionHelper::ConvertColor(nIntValue);
3729             rContext->Insert(PROP_CHAR_UNDERLINE_HAS_COLOR, true, uno::makeAny( true ) );
3730             rContext->Insert(PROP_CHAR_UNDERLINE_COLOR, true, uno::makeAny( nColor ) );
3731         }
3732         break;
3733     case 0x6815:
3734         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3735         break; //undocumented
3736     case NS_sprm::LN_CIndrsid:
3737         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3738         break; //undocumented
3739     case 0x6467:
3740         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3741         break; //undocumented
3742     case 0xF617:
3743         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3744         break; //undocumented
3745     case 0xd634: // sprmTNewSpacing - table spacing ( see WW8TabBandDesc::ProcessSpacing() )
3746         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3747         break;
3748     case NS_sprm::LN_TTRLeft:
3749         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
3750         break; //undocumented
3751     case 0x4888:
3752         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3753     case 0x6887:
3754         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3755         //properties of list levels - undocumented
3756         break;
3757     case 0xd234:
3758         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3759     case 0xd235:
3760         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3761     case 0xd236:
3762         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3763     case 0xd237:
3764         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3765         break;//undocumented section properties
3766     case NS_sprm::LN_CEastAsianLayout:
3767         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3768         resolveSprmProps(*this, rSprm);
3769         break;
3770     case NS_ooxml::LN_CT_Tabs_tab:
3771         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3772         resolveSprmProps(*this, rSprm);
3773         m_pImpl->IncorporateTabStop(m_pImpl->m_aCurrentTabStop);
3774         m_pImpl->m_aCurrentTabStop = DeletableTabStop();
3775     break;
3776     case NS_ooxml::LN_CT_PPrBase_tabs:
3777         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3778     {
3779         // Initialize tab stop vector from style sheet
3780         if( !m_pImpl->IsStyleSheetImport() )
3781         {
3782             uno::Any aValue = m_pImpl->GetPropertyFromStyleSheet(PROP_PARA_TAB_STOPS);
3783             uno::Sequence< style::TabStop > aStyleTabStops;
3784             if(aValue >>= aStyleTabStops)
3785             {
3786                 m_pImpl->InitTabStopFromStyle( aStyleTabStops );
3787             }
3788         }
3789         resolveSprmProps(*this, rSprm);
3790         rContext->Insert(PROP_PARA_TAB_STOPS, true, uno::makeAny( m_pImpl->GetCurrentTabStopAndClear()));
3791     }
3792     break;
3793 
3794     case NS_ooxml::LN_CT_PPr_sectPr:
3795         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3796     case NS_ooxml::LN_EG_RPrBase_color:
3797         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3798     case NS_ooxml::LN_EG_RPrBase_rFonts:
3799         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3800     case NS_ooxml::LN_EG_RPrBase_bdr:
3801         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3802     case NS_ooxml::LN_EG_RPrBase_eastAsianLayout:
3803         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3804     case NS_ooxml::LN_EG_RPrBase_u:
3805         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3806     case NS_ooxml::LN_EG_RPrBase_lang:
3807         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3808     case NS_ooxml::LN_CT_PPrBase_spacing:
3809         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3810     case NS_ooxml::LN_CT_PPrBase_ind:
3811         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3812     case NS_ooxml::LN_CT_RPrDefault_rPr:
3813         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3814     case NS_ooxml::LN_CT_PPrDefault_pPr:
3815         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3816     case NS_ooxml::LN_CT_DocDefaults_pPrDefault:
3817         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3818     case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
3819         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3820     case NS_ooxml::LN_CT_Style_pPr:
3821         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3822     case NS_ooxml::LN_CT_Style_rPr:
3823         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3824     case NS_ooxml::LN_CT_PPr_rPr:
3825         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3826     case NS_ooxml::LN_CT_PPrBase_numPr:
3827         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3828         resolveSprmProps(*this, rSprm);
3829     break;
3830     case NS_ooxml::LN_EG_SectPrContents_footnotePr:
3831         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3832     case NS_ooxml::LN_EG_SectPrContents_endnotePr:
3833         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3834         m_pImpl->SetInFootnoteProperties( NS_ooxml::LN_EG_SectPrContents_footnotePr == nSprmId );
3835         resolveSprmProps(*this, rSprm);
3836     break;
3837     case NS_ooxml::LN_EG_SectPrContents_lnNumType:
3838         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
3839     {
3840         resolveSprmProps(*this, rSprm);
3841         LineNumberSettings aSettings = m_pImpl->GetLineNumberSettings();
3842         aSettings.bIsOn = true;
3843         m_pImpl->SetLineNumberSettings( aSettings );
3844         //apply settings at XLineNumberingProperties
3845         try
3846         {
3847             uno::Reference< text::XLineNumberingProperties > xLineNumberingProperties( m_pImpl->GetTextDocument(), uno::UNO_QUERY_THROW );
3848             uno::Reference< beans::XPropertySet > xLineNumberingPropSet = xLineNumberingProperties->getLineNumberingProperties();
3849             PropertyNameSupplier& rNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
3850             xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_IS_ON ), uno::makeAny(true) );
3851             if( aSettings.nInterval )
3852                 xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_INTERVAL ), uno::makeAny((sal_Int16)aSettings.nInterval) );
3853             if( aSettings.nDistance )
3854                 xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_DISTANCE ), uno::makeAny(aSettings.nDistance) );
3855             xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_RESTART_AT_EACH_PAGE ), uno::makeAny(aSettings.bRestartAtEachPage) );
3856         }
3857         catch( const uno::Exception& )
3858         {
3859         }
3860 
3861     }
3862     break;
3863     case NS_ooxml::LN_CT_PPrBase_framePr:
3864         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3865     {
3866         PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
3867         if( pContext.get() )
3868         {
3869             ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pContext.get() );
3870             pParaContext->SetFrameMode();
3871 
3872         }
3873         else
3874         {
3875             //TODO: What about style sheet import of frame properties
3876         }
3877         resolveSprmProps(*this, rSprm);
3878     }
3879     break;
3880     case NS_ooxml::LN_EG_SectPrContents_pgSz:
3881         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3882         CT_PageSz.code = 0;
3883         {
3884             PaperInfo aLetter(PAPER_LETTER);
3885             CT_PageSz.w = aLetter.getWidth();
3886             CT_PageSz.h = aLetter.getHeight();
3887         }
3888         CT_PageSz.orient = false;
3889         resolveSprmProps(*this, rSprm);
3890         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3891         if(pSectionContext)
3892         {
3893             pSectionContext->Insert( PROP_HEIGHT, false, uno::makeAny( CT_PageSz.h ) );
3894             pSectionContext->Insert( PROP_IS_LANDSCAPE, false, uno::makeAny( CT_PageSz.orient ));
3895             pSectionContext->Insert( PROP_WIDTH, false, uno::makeAny( CT_PageSz.w ) );
3896             pSectionContext->SetLandscape( CT_PageSz.orient );
3897         }
3898         break;
3899 
3900     case NS_ooxml::LN_EG_SectPrContents_pgMar:
3901         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3902         m_pImpl->InitPageMargins();
3903         resolveSprmProps(*this, rSprm);
3904         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
3905         if(pSectionContext)
3906         {
3907             const _PageMar& rPageMar = m_pImpl->GetPageMargins();
3908             pSectionContext->SetTopMargin( rPageMar.top );
3909             pSectionContext->SetRightMargin( rPageMar.right );
3910             pSectionContext->SetBottomMargin( rPageMar.bottom );
3911             pSectionContext->SetLeftMargin( rPageMar.left );
3912             pSectionContext->SetHeaderTop( rPageMar.header );
3913             pSectionContext->SetHeaderBottom( rPageMar.footer );
3914         }
3915         break;
3916 
3917     case NS_ooxml::LN_EG_SectPrContents_cols:
3918         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3919     {
3920         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
3921         if( pProperties.get())
3922         {
3923 
3924             SectionColumnHandlerPtr pSectHdl( new SectionColumnHandler );
3925             pProperties->resolve(*pSectHdl);
3926             if(pSectionContext)
3927             {
3928                 if( pSectHdl->IsEqualWidth() )
3929                 {
3930                     pSectionContext->SetEvenlySpaced( true );
3931                     pSectionContext->SetColumnCount( (sal_Int16) (pSectHdl->GetNum() - 1) );
3932                     pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
3933                     pSectionContext->SetSeparatorLine( pSectHdl->IsSeparator() );
3934                 }
3935                 else if( !pSectHdl->GetColumns().empty() )
3936                 {
3937                     pSectionContext->SetEvenlySpaced( false );
3938                     pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
3939                     pSectionContext->SetColumnCount( (sal_Int16)(pSectHdl->GetColumns().size() -1));
3940                     std::vector<_Column>::const_iterator tmpIter = pSectHdl->GetColumns().begin();
3941                     for (; tmpIter != pSectHdl->GetColumns().end(); tmpIter++)
3942                     {
3943                         pSectionContext->AppendColumnWidth( tmpIter->nWidth );
3944                         if ((tmpIter != pSectHdl->GetColumns().end() - 1) || (tmpIter->nSpace > 0))
3945                             pSectionContext->AppendColumnSpacing( tmpIter->nSpace );
3946                     }
3947                     pSectionContext->SetSeparatorLine( pSectHdl->IsSeparator() );
3948                 }
3949                 else if( pSectHdl->GetNum() > 0 )
3950                 {
3951                     pSectionContext->SetColumnCount( (sal_Int16)pSectHdl->GetNum() - 1 );
3952                     pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
3953                 }
3954             }
3955         }
3956     }
3957     break;
3958     case NS_ooxml::LN_EG_SectPrContents_docGrid:
3959         resolveSprmProps(*this, rSprm);
3960     break;
3961     case NS_ooxml::LN_EG_SectPrContents_pgBorders:
3962     {
3963         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
3964         if( pProperties.get( ) && pSectionContext )
3965         {
3966             PageBordersHandlerPtr pHandler( new PageBordersHandler );
3967             pProperties->resolve( *pHandler );
3968 
3969             // Set the borders to the context and apply them to the styles
3970             pHandler->SetBorders( pSectionContext );
3971             pSectionContext->SetBorderParams( pHandler->GetDisplayOffset( ) );
3972         }
3973     }
3974     break;
3975 
3976     case NS_ooxml::LN_CT_PPrBase_pStyle:
3977         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3978     {
3979         m_pImpl->SetCurrentParaStyleId( sStringValue );
3980         StyleSheetTablePtr pStyleTable = m_pImpl->GetStyleSheetTable();
3981         const ::rtl::OUString sConvertedStyleName = pStyleTable->ConvertStyleName( sStringValue, true );
3982 		if (m_pImpl->GetTopContext() && m_pImpl->GetTopContextType() != CONTEXT_SECTION)
3983 	        m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, true, uno::makeAny( sConvertedStyleName ));
3984         const StyleSheetEntryPtr pEntry = pStyleTable->FindStyleSheetByISTD(sStringValue);
3985         //apply numbering to paragraph if it was set at the style
3986         OSL_ENSURE( pEntry.get(), "no style sheet found" );
3987         const StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<const StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : 0);
3988 
3989         if( pStyleSheetProperties && pStyleSheetProperties->GetListId() >= 0 )
3990             rContext->Insert( PROP_NUMBERING_STYLE_NAME, true, uno::makeAny(
3991                         ListDef::GetStyleName( pStyleSheetProperties->GetListId( ) ) ), false);
3992 
3993         if( pStyleSheetProperties && pStyleSheetProperties->GetListLevel() >= 0 )
3994             rContext->Insert( PROP_NUMBERING_LEVEL, true, uno::makeAny(pStyleSheetProperties->GetListLevel()), false);
3995     }
3996     break;
3997     case NS_ooxml::LN_EG_RPrBase_rStyle:
3998         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
3999         {
4000             rtl::OUString sConvertedName( m_pImpl->GetStyleSheetTable()->ConvertStyleName( sStringValue, true ) );
4001             // First check if the style exists in the document.
4002             StyleSheetEntryPtr pEntry = m_pImpl->GetStyleSheetTable( )->FindStyleSheetByStyleName( sConvertedName );
4003             bool bExists = pEntry.get( ) && ( pEntry->nStyleTypeCode == STYLE_TYPE_CHAR );
4004 
4005             // Add the property if the style exists
4006             if ( bExists && m_pImpl->GetTopContext() )
4007                 m_pImpl->GetTopContext()->Insert( PROP_CHAR_STYLE_NAME, true, uno::makeAny( sConvertedName ) );
4008         }
4009     break;
4010     case NS_ooxml::LN_CT_TblPrBase_tblCellMar: //cell margins
4011         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4012     {
4013         resolveSprmProps(*this, rSprm);//contains LN_CT_TblCellMar_top, LN_CT_TblCellMar_left, LN_CT_TblCellMar_bottom, LN_CT_TblCellMar_right
4014     }
4015     break;
4016     case NS_ooxml::LN_CT_TblCellMar_top:
4017             /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
4018     case NS_ooxml::LN_CT_TblCellMar_left:
4019             /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
4020     case NS_ooxml::LN_CT_TblCellMar_bottom:
4021             /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
4022     case NS_ooxml::LN_CT_TblCellMar_right:
4023             /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
4024     {
4025         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
4026         if( pProperties.get())
4027         {
4028             MeasureHandlerPtr pMeasureHandler( new MeasureHandler );
4029             pProperties->resolve(*pMeasureHandler);
4030             sal_Int32 nMeasureValue = pMeasureHandler->getMeasureValue();
4031             PropertyIds eId = META_PROP_CELL_MAR_TOP;
4032             switch(nSprmId)
4033             {
4034                 case NS_ooxml::LN_CT_TblCellMar_top:
4035                     /* WRITERFILTERSTATUS: */
4036                 break;
4037                 case NS_ooxml::LN_CT_TblCellMar_left:
4038                     /* WRITERFILTERSTATUS: */
4039                     eId = META_PROP_CELL_MAR_LEFT;
4040                 break;
4041                 case NS_ooxml::LN_CT_TblCellMar_bottom:
4042                     /* WRITERFILTERSTATUS: */
4043                     eId = META_PROP_CELL_MAR_BOTTOM;
4044                 break;
4045                 case NS_ooxml::LN_CT_TblCellMar_right:
4046                     /* WRITERFILTERSTATUS: */
4047                     eId = META_PROP_CELL_MAR_RIGHT;
4048                 break;
4049                 default:;
4050             }
4051             rContext->Insert( eId, false, uno::makeAny(nMeasureValue), false);
4052         }
4053     }
4054     break;
4055     case NS_sprm::LN_CFNoProof: //0x875 no grammar and spell checking, unsupported
4056         /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
4057     break;
4058     case NS_ooxml::LN_anchor_anchor: // at_character drawing
4059         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4060     case NS_ooxml::LN_inline_inline: // as_character drawing
4061         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4062     {
4063         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
4064         if( pProperties.get())
4065         {
4066             GraphicImportType eGraphicType =
4067                 (NS_ooxml::LN_anchor_anchor ==
4068                  sal::static_int_cast<Id>(nSprmId)) ?
4069                 IMPORT_AS_DETECTED_ANCHOR :
4070                 IMPORT_AS_DETECTED_INLINE;
4071             GraphicImportPtr pGraphicImport =
4072                 m_pImpl->GetGraphicImport(eGraphicType);
4073             pProperties->resolve(*pGraphicImport);
4074             m_pImpl->ImportGraphic(pProperties, eGraphicType);
4075             if( !pGraphicImport->IsGraphic() )
4076             {
4077                 m_pImpl->ResetGraphicImport();
4078                 // todo: It's a shape, now start shape import
4079             }
4080         }
4081     }
4082     break;
4083     case NS_ooxml::LN_EG_RPrBase_vertAlign:
4084         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4085     {
4086         sal_Int16 nEscapement = 0;
4087         sal_Int8 nProp  = 58;
4088         if( sStringValue.equalsAscii( "superscript" ))
4089                 nEscapement = 101;
4090         else if( sStringValue.equalsAscii( "subscript" ))
4091                 nEscapement = -101;
4092         else
4093             nProp = 100;
4094 
4095         rContext->Insert(PROP_CHAR_ESCAPEMENT,         true, uno::makeAny( nEscapement ) );
4096         rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT,  true, uno::makeAny( nProp ) );
4097     }
4098     break;
4099 //    case NS_ooxml::LN_CT_FtnEdn_type
4100         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4101 //    case NS_ooxml::LN_CT_FtnEdn_id
4102         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4103 //    case NS_ooxml::LN_EG_FtnEdnNumProps_numRestart
4104     case NS_ooxml::LN_CT_FtnProps_pos:
4105             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4106     //footnotes in word can be at page end or beneath text - writer supports only the first
4107     //endnotes in word can be at section end or document end - writer supports only the latter
4108     // -> so this property can be ignored
4109     break;
4110     case NS_ooxml::LN_EG_FtnEdnNumProps_numStart:
4111             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4112     case NS_ooxml::LN_CT_FtnProps_numFmt:
4113             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4114     case NS_ooxml::LN_CT_EdnProps_numFmt:
4115             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4116     {
4117         try
4118         {
4119             uno::Reference< beans::XPropertySet >  xFtnEdnSettings;
4120             if( m_pImpl->IsInFootnoteProperties() )
4121             {
4122                 uno::Reference< text::XFootnotesSupplier> xFootnotesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
4123                 xFtnEdnSettings = xFootnotesSupplier->getFootnoteSettings();
4124             }
4125             else
4126             {
4127                 uno::Reference< text::XEndnotesSupplier> xEndnotesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
4128                 xFtnEdnSettings = xEndnotesSupplier->getEndnoteSettings();
4129             }
4130             if( NS_ooxml::LN_EG_FtnEdnNumProps_numStart == nSprmId )
4131             {
4132                 xFtnEdnSettings->setPropertyValue(
4133                     PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_START_AT),
4134                                                                     uno::makeAny( sal_Int16( nIntValue - 1 )));
4135             }
4136             else
4137             {
4138                 sal_Int16 nNumType = ConversionHelper::ConvertNumberingType( nIntValue );
4139                 xFtnEdnSettings->setPropertyValue(
4140                     PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_NUMBERING_TYPE),
4141                                                                     uno::makeAny( nNumType ));
4142             }
4143         }
4144         catch( const uno::Exception& )
4145         {
4146         }
4147     }
4148     break;
4149     case NS_ooxml::LN_paratrackchange:
4150         m_pImpl->StartParaChange( );
4151     case NS_ooxml::LN_trackchange:
4152         /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
4153     case NS_ooxml::LN_EG_RPrContent_rPrChange:
4154         /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
4155     {
4156         m_pImpl->AddNewRedline( );
4157         resolveSprmProps(*this, rSprm );
4158         // now the properties author, date and id should be available
4159         sal_Int32 nToken = m_pImpl->GetCurrentRedlineToken();
4160         switch( nToken & 0xffff )
4161         {
4162             case ooxml::OOXML_mod :
4163             case ooxml::OOXML_ins :
4164             case ooxml::OOXML_del : break;
4165             default: OSL_ENSURE( false, "redline token other than mod, ins or del" );
4166         }
4167         m_pImpl->EndParaChange( );
4168     }
4169     break;
4170     case NS_ooxml::LN_CT_RPrChange_rPr:
4171         /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
4172     break;
4173     /* WRITERFILTERSTATUS: done: 0, planned: 4, spent: 0 */
4174     case NS_ooxml::LN_object:
4175     {
4176         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
4177         if( pProperties.get( ) )
4178         {
4179             OLEHandlerPtr pOLEHandler( new OLEHandler );
4180             pProperties->resolve(*pOLEHandler);
4181             if ( pOLEHandler->isOLEObject( ) )
4182             {
4183                 ::rtl::OUString sStreamName = pOLEHandler->copyOLEOStream( m_pImpl->GetTextDocument() );
4184                 if( sStreamName.getLength() )
4185                 {
4186                     m_pImpl->appendOLE( sStreamName, pOLEHandler );
4187                 }
4188             }
4189         }
4190     }
4191     break;
4192 //    case NS_ooxml::LN_CT_EdnProps_pos
4193         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4194 //    case NS_ooxml::LN_CT_EdnProps_numFmt
4195         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4196 //    case NS_ooxml::LN_CT_FtnDocProps_footnote
4197         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4198 //    case NS_ooxml::LN_CT_EdnDocProps_endnote
4199         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4200     //break;
4201     case NS_ooxml::LN_EG_HdrFtrReferences_headerReference: // header reference - not needed
4202         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4203     case NS_ooxml::LN_EG_HdrFtrReferences_footerReference: // footer reference - not needed
4204         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
4205     break;
4206     case NS_ooxml::LN_EG_RPrBase_snapToGrid: // "Use document grid  settings for inter-paragraph spacing"
4207             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4208     break;
4209     case NS_sprm::LN_PContextualSpacing:
4210         //TODO: determines whether top/bottom paragraph spacing is added if equal styles are following - unsupported
4211     break;
4212     case NS_ooxml::LN_EG_SectPrContents_formProt: //section protection, only form editing is enabled - unsupported
4213     case NS_ooxml::LN_EG_SectPrContents_vAlign:
4214     case NS_ooxml::LN_EG_RPrBase_fitText:
4215             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
4216     break;
4217     case NS_ooxml::LN_ffdata:
4218     {
4219         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
4220         if (pProperties.get() != NULL)
4221         {
4222             FFDataHandler::Pointer_t pFFDataHandler(new FFDataHandler());
4223 
4224             pProperties->resolve(*pFFDataHandler);
4225             m_pImpl->SetFieldFFData(pFFDataHandler);
4226         }
4227     }
4228     break;
4229     default:
4230         {
4231 #ifdef DEBUG_DOMAINMAPPER
4232             dmapper_logger->startElement("unhandled");
4233             dmapper_logger->attribute("id", nSprmId);
4234             dmapper_logger->endElement("unhandled");
4235 #endif
4236         }
4237     }
4238 }
4239 /*-- 09.06.2006 09:52:13---------------------------------------------------
4240 
4241 -----------------------------------------------------------------------*/
4242 void DomainMapper::lcl_entry(int /*pos*/,
4243                          writerfilter::Reference<Properties>::Pointer_t ref)
4244 {
4245     ref->resolve(*this);
4246 }
4247 /*-- 09.06.2006 09:52:13---------------------------------------------------
4248 
4249 -----------------------------------------------------------------------*/
4250 void DomainMapper::data(const sal_uInt8* /*buf*/, size_t /*len*/,
4251                         writerfilter::Reference<Properties>::Pointer_t /*ref*/)
4252 {
4253 }
4254 /*-- 09.06.2006 09:52:13---------------------------------------------------
4255 
4256 -----------------------------------------------------------------------*/
4257 void DomainMapper::lcl_startSectionGroup()
4258 {
4259     m_pImpl->PushProperties(CONTEXT_SECTION);
4260 }
4261 /*-- 09.06.2006 09:52:13---------------------------------------------------
4262 
4263 -----------------------------------------------------------------------*/
4264 void DomainMapper::lcl_endSectionGroup()
4265 {
4266     PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_SECTION);
4267     SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
4268     OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
4269     if(pSectionContext)
4270         pSectionContext->CloseSectionGroup( *m_pImpl );
4271     m_pImpl->PopProperties(CONTEXT_SECTION);
4272 }
4273 /*-- 09.06.2006 09:52:13---------------------------------------------------
4274 
4275 -----------------------------------------------------------------------*/
4276 void DomainMapper::lcl_startParagraphGroup()
4277 {
4278     m_pImpl->getTableManager().startParagraphGroup();
4279     m_pImpl->PushProperties(CONTEXT_PARAGRAPH);
4280     static ::rtl::OUString sDefault( ::rtl::OUString::createFromAscii("Standard") );
4281 	if (m_pImpl->GetTopContext())
4282 	{
4283 	    m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, true, uno::makeAny( sDefault ) );
4284     	if (m_pImpl->isBreakDeferred(PAGE_BREAK))
4285        		m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
4286     	else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
4287         	m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
4288 	}
4289     m_pImpl->clearDeferredBreaks();
4290 }
4291 /*-- 09.06.2006 09:52:14---------------------------------------------------
4292 
4293 -----------------------------------------------------------------------*/
4294 void DomainMapper::lcl_endParagraphGroup()
4295 {
4296     m_pImpl->PopProperties(CONTEXT_PARAGRAPH);
4297     m_pImpl->getTableManager().endParagraphGroup();
4298     //frame conversion has to be executed after table conversion
4299     m_pImpl->ExecuteFrameConversion();
4300 }
4301 
4302 void DomainMapper::markLastParagraphInSection( )
4303 {
4304     m_pImpl->SetIsLastParagraphInSection( true );
4305 }
4306 
4307 void DomainMapper::lcl_startShape( uno::Reference< drawing::XShape > xShape )
4308 {
4309     m_pImpl->PushShapeContext( xShape );
4310 }
4311 
4312 void DomainMapper::lcl_endShape( )
4313 {
4314     m_pImpl->PopShapeContext( );
4315 }
4316 
4317 /*-- 13.06.2007 16:15:55---------------------------------------------------
4318 
4319   -----------------------------------------------------------------------*/
4320 void DomainMapper::PushStyleSheetProperties( PropertyMapPtr pStyleProperties, bool bAffectTableMngr )
4321 {
4322     m_pImpl->PushStyleProperties( pStyleProperties );
4323     if ( bAffectTableMngr )
4324         m_pImpl->getTableManager( ).SetStyleProperties( pStyleProperties );
4325 }
4326 /*-- 13.06.2007 16:15:55---------------------------------------------------
4327 
4328   -----------------------------------------------------------------------*/
4329 void DomainMapper::PopStyleSheetProperties( bool bAffectTableMngr )
4330 {
4331     m_pImpl->PopProperties( CONTEXT_STYLESHEET );
4332     if ( bAffectTableMngr )
4333     {
4334         PropertyMapPtr emptyPtr;
4335         m_pImpl->getTableManager( ).SetStyleProperties( emptyPtr );
4336     }
4337 }
4338 /*-- 28.01.2008 14:52:33---------------------------------------------------
4339 
4340   -----------------------------------------------------------------------*/
4341 void DomainMapper::PushListProperties( ::boost::shared_ptr<PropertyMap> pListProperties )
4342 {
4343     m_pImpl->PushListProperties( pListProperties );
4344 }
4345 /*-- 28.01.2008 14:52:33---------------------------------------------------
4346 
4347   -----------------------------------------------------------------------*/
4348 void DomainMapper::PopListProperties()
4349 {
4350     m_pImpl->PopProperties( CONTEXT_LIST );
4351 }
4352 /*-- 09.06.2006 09:52:14---------------------------------------------------
4353 
4354 -----------------------------------------------------------------------*/
4355 
4356 void DomainMapper::lcl_startCharacterGroup()
4357 {
4358     m_pImpl->PushProperties(CONTEXT_CHARACTER);
4359     DomainMapperTableManager& rTableManager = m_pImpl->getTableManager();
4360     if( rTableManager.getTableStyleName().getLength() )
4361     {
4362         PropertyMapPtr pTopContext = m_pImpl->GetTopContext();
4363         rTableManager.CopyTextProperties(pTopContext, m_pImpl->GetStyleSheetTable());
4364     }
4365 }
4366 /*-- 09.06.2006 09:52:14---------------------------------------------------
4367 
4368 -----------------------------------------------------------------------*/
4369 void DomainMapper::lcl_endCharacterGroup()
4370 {
4371     m_pImpl->PopProperties(CONTEXT_CHARACTER);
4372 }
4373 /*-- 09.06.2006 09:52:14---------------------------------------------------
4374 
4375 -----------------------------------------------------------------------*/
4376 void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len)
4377 {
4378     //TODO: Determine the right text encoding (FIB?)
4379     ::rtl::OUString sText( (const sal_Char*) data_, len, RTL_TEXTENCODING_MS_1252 );
4380 #ifdef DEBUG_DOMAINMAPPER
4381     dmapper_logger->startElement("text");
4382     dmapper_logger->chars(sText);
4383     dmapper_logger->endElement("text");
4384 #endif
4385 
4386     try
4387     {
4388         if(len == 1)
4389         {
4390             switch(*data_)
4391             {
4392                 case 0x02: return; //footnote character
4393                 case 0x0c: //page break
4394                     m_pImpl->deferBreak(PAGE_BREAK);
4395                     return;
4396                 case 0x0e: //column break
4397                     m_pImpl->deferBreak(COLUMN_BREAK);
4398                     return;
4399                 case 0x07:
4400                     m_pImpl->getTableManager().text(data_, len);
4401                 case 0x0d:
4402                     m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH));
4403                     return;
4404                 case 0x13:
4405                     m_pImpl->PushFieldContext();
4406                     return;
4407                 case 0x14:
4408                     // delimiter not necessarily available
4409                     // appears only if field contains further content
4410                     m_pImpl->CloseFieldCommand();
4411                     return;
4412                 case 0x15: /* end of field */
4413                     m_pImpl->PopFieldContext();
4414                     return;
4415                 default:
4416                     break;
4417             }
4418         }
4419 
4420         PropertyMapPtr pContext = m_pImpl->GetTopContext();
4421 	if ( pContext && !pContext->GetFootnote().is() )
4422 	{
4423 	    if (m_pImpl->isBreakDeferred(PAGE_BREAK))
4424                 m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
4425             else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
4426                 m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
4427             m_pImpl->clearDeferredBreaks();
4428         }
4429 
4430         if( pContext->GetFootnote().is() && m_pImpl->IsCustomFtnMark() )
4431         {
4432             pContext->GetFootnote()->setLabel( sText );
4433             m_pImpl->SetCustomFtnMark( false );
4434             //otherwise ignore sText
4435         }
4436         else if( m_pImpl->IsOpenFieldCommand() )
4437             m_pImpl->AppendFieldCommand(sText);
4438         else if( m_pImpl->IsOpenField() && m_pImpl->IsFieldResultAsString())
4439              /*depending on the success of the field insert operation this result will be
4440               set at the field or directly inserted into the text*/
4441             m_pImpl->SetFieldResult( sText );
4442         else
4443         {
4444             //--> debug
4445             //sal_uInt32 nSize = pContext->size();
4446             //<--
4447 
4448             if (pContext == NULL)
4449                 pContext.reset(new PropertyMap());
4450 
4451             m_pImpl->appendTextPortion( sText, pContext );
4452         }
4453     }
4454     catch( const uno::RuntimeException& )
4455     {
4456         std::clog << __FILE__ << "(l" << __LINE__ << ")" << std::endl;
4457     }
4458 }
4459 /*-- 09.06.2006 09:52:15---------------------------------------------------
4460 
4461 -----------------------------------------------------------------------*/
4462 void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
4463 {
4464     OUString sText;
4465     OUStringBuffer aBuffer = OUStringBuffer(len);
4466     aBuffer.append( (const sal_Unicode *) data_, len);
4467     sText = aBuffer.makeStringAndClear();
4468 
4469     try
4470     {
4471         m_pImpl->getTableManager().utext(data_, len);
4472 
4473         if(len == 1 && ((*data_) == 0x0d || (*data_) == 0x07))
4474             m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH));
4475         else
4476         {
4477 
4478             PropertyMapPtr pContext = m_pImpl->GetTopContext();
4479             if ( pContext && !pContext->GetFootnote().is() )
4480             {
4481                 if (m_pImpl->isBreakDeferred(PAGE_BREAK))
4482                     m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
4483                 else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
4484                     m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
4485                 m_pImpl->clearDeferredBreaks();
4486             }
4487 
4488             /* doesn't seem to be working
4489             if( pContext->GetFootnote().is() )
4490             {
4491                 //todo: the check for 0x0a is a hack!
4492                 if( *data_ != 0x0a && !pContext->GetFootnoteSymbol() )
4493                     pContext->GetFootnote()->setLabel( sText );
4494                 //otherwise ignore sText
4495             }
4496             else */
4497             if( pContext && pContext->GetFootnote().is() )
4498             {
4499                 if( !pContext->GetFootnoteSymbol() )
4500                     pContext->GetFootnote()->setLabel( sText );
4501                 //otherwise ignore sText
4502             }
4503             else if( m_pImpl->IsOpenFieldCommand() )
4504                 m_pImpl->AppendFieldCommand(sText);
4505             else if( m_pImpl->IsOpenField() && m_pImpl->IsFieldResultAsString())
4506                 /*depending on the success of the field insert operation this result will be
4507                   set at the field or directly inserted into the text*/
4508                 m_pImpl->SetFieldResult( sText );
4509             else
4510             {
4511                 if (pContext == NULL)
4512                     pContext.reset(new PropertyMap());
4513 
4514                 m_pImpl->appendTextPortion( sText, pContext );
4515             }
4516 
4517         }
4518     }
4519     catch( const uno::RuntimeException& )
4520     {
4521     }
4522 }
4523 /*-- 09.06.2006 09:52:15---------------------------------------------------
4524 
4525 -----------------------------------------------------------------------*/
4526 void DomainMapper::lcl_props(writerfilter::Reference<Properties>::Pointer_t ref)
4527 {
4528     string sType = ref->getType();
4529     if( sType == "PICF" )
4530     {
4531         m_pImpl->ImportGraphic(ref, IMPORT_AS_GRAPHIC);
4532     }
4533     else if( sType == "FSPA" )
4534     {
4535         m_pImpl->ImportGraphic(ref, IMPORT_AS_SHAPE);
4536     }
4537     else
4538         ref->resolve(*this);
4539 }
4540 /*-- 09.06.2006 09:52:15---------------------------------------------------
4541 
4542 -----------------------------------------------------------------------*/
4543 void DomainMapper::lcl_table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
4544 {
4545     // printf ( "DomainMapper::table(0x%.4x)\n", (unsigned int)name);
4546     m_pImpl->SetAnyTableImport(true);
4547     /* WRITERFILTERSTATUS: table: attributedata */
4548     switch(name)
4549     {
4550     case NS_rtf::LN_FONTTABLE:
4551         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4552 
4553         // create a font table object that listens to the attributes
4554         // each entry call inserts a new font entry
4555         ref->resolve( *m_pImpl->GetFontTable() );
4556         break;
4557     case NS_rtf::LN_STYLESHEET:
4558         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4559         //same as above to import style sheets
4560         m_pImpl->SetStyleSheetImport( true );
4561         ref->resolve( *m_pImpl->GetStyleSheetTable() );
4562         m_pImpl->GetStyleSheetTable()->ApplyStyleSheets(m_pImpl->GetFontTable());
4563         m_pImpl->SetStyleSheetImport( false );
4564         break;
4565     case NS_ooxml::LN_NUMBERING:
4566     case NS_rtf::LN_LISTTABLE:
4567         {
4568             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
4569 
4570             //the same for list tables
4571             ref->resolve( *m_pImpl->GetListTable() );
4572             m_pImpl->GetListTable( )->CreateNumberingRules( );
4573         }
4574         break;
4575     case NS_rtf::LN_LFOTABLE:
4576         {
4577             m_pImpl->GetListTable( )->SetLFOImport( true );
4578             ref->resolve( *m_pImpl->GetListTable() );
4579             m_pImpl->GetListTable( )->CreateNumberingRules( );
4580             m_pImpl->GetListTable( )->SetLFOImport( false );
4581         }
4582         break;
4583     case NS_ooxml::LN_THEMETABLE:
4584         ref->resolve ( *m_pImpl->GetThemeTable() );
4585     break;
4586     case NS_ooxml::LN_settings_settings:
4587         ref->resolve ( *m_pImpl->GetSettingsTable() );
4588         m_pImpl->ApplySettingsTable();
4589     break;
4590     default:
4591         OSL_ENSURE( false, "which table is to be filled here?");
4592     }
4593     m_pImpl->SetAnyTableImport(false);
4594 }
4595 /*-- 09.06.2006 09:52:16---------------------------------------------------
4596 
4597 -----------------------------------------------------------------------*/
4598 void DomainMapper::lcl_substream(Id rName, ::writerfilter::Reference<Stream>::Pointer_t ref)
4599 {
4600     m_pImpl->appendTableManager( );
4601     m_pImpl->getTableManager().startLevel();
4602 
4603     //->debug
4604     //string sName = (*QNameToString::Instance())(rName);
4605     //--<debug
4606     //import of page header/footer
4607 
4608     /* WRITERFILTERSTATUS: table: attributedata */
4609     switch( rName )
4610     {
4611     case NS_rtf::LN_headerl:
4612         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4613 
4614         m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_LEFT);
4615         break;
4616     case NS_rtf::LN_headerr:
4617         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4618 
4619         m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_RIGHT);
4620         break;
4621     case NS_rtf::LN_headerf:
4622         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4623 
4624         m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_FIRST);
4625         break;
4626     case NS_rtf::LN_footerl:
4627         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4628 
4629         m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_LEFT);
4630         break;
4631     case NS_rtf::LN_footerr:
4632         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4633 
4634         m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_RIGHT);
4635         break;
4636     case NS_rtf::LN_footerf:
4637         /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
4638 
4639         m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_FIRST);
4640         break;
4641     case NS_rtf::LN_footnote:
4642     case NS_rtf::LN_endnote:
4643         m_pImpl->PushFootOrEndnote( NS_rtf::LN_footnote == rName );
4644     break;
4645     case NS_rtf::LN_annotation :
4646         m_pImpl->PushAnnotation();
4647     break;
4648     }
4649     ref->resolve(*this);
4650     switch( rName )
4651     {
4652     case NS_rtf::LN_headerl:
4653     case NS_rtf::LN_headerr:
4654     case NS_rtf::LN_headerf:
4655     case NS_rtf::LN_footerl:
4656     case NS_rtf::LN_footerr:
4657     case NS_rtf::LN_footerf:
4658         m_pImpl->PopPageHeaderFooter();
4659     break;
4660     case NS_rtf::LN_footnote:
4661     case NS_rtf::LN_endnote:
4662         m_pImpl->PopFootOrEndnote();
4663     break;
4664     case NS_rtf::LN_annotation :
4665         m_pImpl->PopAnnotation();
4666     break;
4667     }
4668 
4669     m_pImpl->getTableManager().endLevel();
4670     m_pImpl->popTableManager( );
4671 }
4672 /*-- 09.06.2006 09:52:16---------------------------------------------------
4673 
4674 -----------------------------------------------------------------------*/
4675 void DomainMapper::lcl_info(const string & /*info_*/)
4676 {
4677 }
4678 
4679 void DomainMapper::handleUnderlineType(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext)
4680 {
4681     sal_Int16 eUnderline = awt::FontUnderline::NONE;
4682 
4683     switch(nIntValue)
4684     {
4685     case 0: eUnderline = awt::FontUnderline::NONE; break;
4686     case 2: pContext->Insert(PROP_CHAR_WORD_MODE, true, uno::makeAny( true ) ); // TODO: how to get rid of it?
4687     case 1: eUnderline = awt::FontUnderline::SINGLE;       break;
4688     case 3: eUnderline = awt::FontUnderline::DOUBLE;       break;
4689     case 4: eUnderline = awt::FontUnderline::DOTTED;       break;
4690     case 7: eUnderline = awt::FontUnderline::DASH;         break;
4691     case 9: eUnderline = awt::FontUnderline::DASHDOT;      break;
4692     case 10:eUnderline = awt::FontUnderline::DASHDOTDOT;   break;
4693     case 6: eUnderline = awt::FontUnderline::BOLD;         break;
4694     case 11:eUnderline = awt::FontUnderline::WAVE;         break;
4695     case 20:eUnderline = awt::FontUnderline::BOLDDOTTED;   break;
4696     case 23:eUnderline = awt::FontUnderline::BOLDDASH;     break;
4697     case 39:eUnderline = awt::FontUnderline::LONGDASH;     break;
4698     case 55:eUnderline = awt::FontUnderline::BOLDLONGDASH; break;
4699     case 25:eUnderline = awt::FontUnderline::BOLDDASHDOT;  break;
4700     case 26:eUnderline = awt::FontUnderline::BOLDDASHDOTDOT;break;
4701     case 27:eUnderline = awt::FontUnderline::BOLDWAVE;     break;
4702     case 43:eUnderline = awt::FontUnderline::DOUBLEWAVE;   break;
4703     default: ;
4704     }
4705     pContext->Insert(PROP_CHAR_UNDERLINE, true, uno::makeAny( eUnderline ) );
4706 }
4707 
4708 void DomainMapper::handleParaJustification(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext, const bool bExchangeLeftRight)
4709 {
4710     sal_Int16 nAdjust = 0;
4711     sal_Int16 nLastLineAdjust = 0;
4712     switch(nIntValue)
4713     {
4714     case 1:
4715         nAdjust = style::ParagraphAdjust_CENTER;
4716         break;
4717     case 2:
4718         nAdjust = static_cast< sal_Int16 > (bExchangeLeftRight ? style::ParagraphAdjust_LEFT : style::ParagraphAdjust_RIGHT);
4719         break;
4720     case 4:
4721         nLastLineAdjust = style::ParagraphAdjust_BLOCK;
4722         //no break;
4723     case 3:
4724         nAdjust = style::ParagraphAdjust_BLOCK;
4725         break;
4726     case 0:
4727     default:
4728         nAdjust = static_cast< sal_Int16 > (bExchangeLeftRight ? style::ParagraphAdjust_RIGHT : style::ParagraphAdjust_LEFT);
4729         break;
4730     }
4731     pContext->Insert( PROP_PARA_ADJUST, true, uno::makeAny( nAdjust ) );
4732     pContext->Insert( PROP_PARA_LAST_LINE_ADJUST, true, uno::makeAny( nLastLineAdjust ) );
4733 }
4734 
4735 bool DomainMapper::getColorFromIndex(const sal_Int32 nIndex, sal_Int32 &nColor)
4736 {
4737     nColor = 0;
4738     if ((nIndex < 1) || (nIndex > 16))
4739         return false;
4740 
4741     switch (nIndex)
4742     {
4743     case 1: nColor=0x000000; break; //black
4744     case 2: nColor=0x0000ff; break; //blue
4745     case 3: nColor=0x00ffff; break; //cyan
4746     case 4: nColor=0x00ff00; break; //green
4747     case 5: nColor=0xff00ff; break; //magenta
4748     case 6: nColor=0xff0000; break; //red
4749     case 7: nColor=0xffff00; break; //yellow
4750     case 8: nColor=0xffffff; break; //white
4751     case 9: nColor=0x000080;  break;//dark blue
4752     case 10: nColor=0x008080; break; //dark cyan
4753     case 11: nColor=0x008000; break; //dark green
4754     case 12: nColor=0x800080; break; //dark magenta
4755     case 13: nColor=0x800000; break; //dark red
4756     case 14: nColor=0x808000; break; //dark yellow
4757     case 15: nColor=0x808080; break; //dark gray
4758     case 16: nColor=0xC0C0C0; break; //light gray
4759     default:
4760         return false;
4761     }
4762     return true;
4763 }
4764 
4765 sal_Int16 DomainMapper::getEmphasisValue(const sal_Int32 nIntValue)
4766 {
4767     switch (nIntValue)
4768     {
4769     case 1:
4770         return com::sun::star::text::FontEmphasis::DOT_ABOVE;
4771     case 2:
4772         return com::sun::star::text::FontEmphasis::ACCENT_ABOVE;
4773     case 3:
4774         return com::sun::star::text::FontEmphasis::CIRCLE_ABOVE;
4775     case 4:
4776         return com::sun::star::text::FontEmphasis::DOT_BELOW;
4777     default:
4778         return com::sun::star::text::FontEmphasis::NONE;
4779     }
4780 }
4781 
4782 rtl::OUString DomainMapper::getBracketStringFromEnum(const sal_Int32 nIntValue, const bool bIsPrefix)
4783 {
4784     switch(nIntValue)
4785     {
4786     case 1:
4787         if (bIsPrefix)
4788             return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "(" ));
4789         return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( ")" ));
4790 
4791     case 2:
4792         if (bIsPrefix)
4793             return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "[" ));
4794         return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "]" ));
4795 
4796     case 3:
4797         if (bIsPrefix)
4798             return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "<" ));
4799         return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( ">" ));
4800 
4801     case 4:
4802         if (bIsPrefix)
4803             return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "{" ));
4804         return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "}" ));
4805 
4806     case 0:
4807     default:
4808         return rtl::OUString();
4809     }
4810 }
4811 
4812 com::sun::star::style::TabAlign DomainMapper::getTabAlignFromValue(const sal_Int32 nIntValue)
4813 {
4814     switch (nIntValue)
4815     {
4816     case 0:
4817     case 4: // bar not supported
4818     case 5: // num not supported
4819         return com::sun::star::style::TabAlign_LEFT;
4820     case 1:
4821         return com::sun::star::style::TabAlign_CENTER;
4822     case 2:
4823         return com::sun::star::style::TabAlign_RIGHT;
4824     case 3:
4825         return com::sun::star::style::TabAlign_DECIMAL;
4826     }
4827     return com::sun::star::style::TabAlign_LEFT;
4828 }
4829 
4830 sal_Unicode DomainMapper::getFillCharFromValue(const sal_Int32 nIntValue)
4831 {
4832     switch (nIntValue)
4833     {
4834     case 1: // dot
4835         return sal_Unicode(0x002e);
4836     case 2: // hyphen
4837         return sal_Unicode(0x002d);
4838     case 3: // underscore
4839     case 4: // heavy FIXME ???
4840         return sal_Unicode(0x005f);
4841     case NS_ooxml::LN_Value_ST_TabTlc_middleDot: // middleDot
4842         return sal_Unicode(0x00b7);
4843     case 0: // none
4844     default:
4845         return sal_Unicode(0x0020); // blank space
4846     }
4847 }
4848 /*-- 18.07.2007 14:59:00---------------------------------------------------
4849 
4850   -----------------------------------------------------------------------*/
4851 bool DomainMapper::IsOOXMLImport() const
4852 {
4853     return m_pImpl->IsOOXMLImport();
4854 }
4855 /*-- 18.07.2007 16:03:14---------------------------------------------------
4856 
4857   -----------------------------------------------------------------------*/
4858 uno::Reference < lang::XMultiServiceFactory > DomainMapper::GetTextFactory() const
4859 {
4860     return m_pImpl->GetTextFactory();
4861 }
4862 /*-- 12.11.2007 10:41:01---------------------------------------------------
4863 
4864   -----------------------------------------------------------------------*/
4865 /*-- 31.01.2008 18:19:44---------------------------------------------------
4866 
4867   -----------------------------------------------------------------------*/
4868 uno::Reference< text::XTextRange > DomainMapper::GetCurrentTextRange()
4869 {
4870     return m_pImpl->GetTopTextAppend()->getEnd();
4871 }
4872 
4873 /*-- 05.02.2008 10:26:26---------------------------------------------------
4874 
4875   -----------------------------------------------------------------------*/
4876 ::rtl::OUString DomainMapper::getOrCreateCharStyle( PropertyValueVector_t& rCharProperties )
4877 {
4878     StyleSheetTablePtr pStyleSheets = m_pImpl->GetStyleSheetTable();
4879     return pStyleSheets->getOrCreateCharStyle( rCharProperties );
4880 }
4881 
4882 ListsManager::Pointer DomainMapper::GetListTable( )
4883 {
4884     return m_pImpl->GetListTable( );
4885 }
4886 
4887 StyleSheetTablePtr DomainMapper::GetStyleSheetTable( )
4888 {
4889     return m_pImpl->GetStyleSheetTable( );
4890 }
4891 
4892 } //namespace dmapper
4893 } //namespace writerfilter
4894