LibreOffice Module oox (master) 1
textparagraphproperties.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
21
22#include <com/sun/star/text/XNumberingRulesSupplier.hpp>
23#include <com/sun/star/container/XIndexReplace.hpp>
24#include <com/sun/star/text/HoriOrientation.hpp>
25#include <com/sun/star/awt/FontDescriptor.hpp>
26#include <com/sun/star/awt/FontWeight.hpp>
27#include <com/sun/star/awt/XBitmap.hpp>
28#include <com/sun/star/graphic/XGraphic.hpp>
29#include <com/sun/star/beans/PropertyValue.hpp>
30#include <com/sun/star/style/NumberingType.hpp>
31#include <com/sun/star/style/TabStop.hpp>
32#include <com/sun/star/style/ParagraphAdjust.hpp>
33#include <com/sun/star/drawing/XDrawPage.hpp>
34
35#include <osl/diagnose.h>
36
39#include <oox/token/properties.hxx>
40#include <oox/token/tokens.hxx>
41
42#if OSL_DEBUG_LEVEL > 0
43#include <com/sun/star/lang/XMultiServiceFactory.hpp>
44#include <com/sun/star/text/XText.hpp>
45#include <com/sun/star/drawing/XShape.hpp>
46#include <oox/ppt/pptimport.hxx>
48#endif
49
50using namespace ::oox::core;
51using namespace ::com::sun::star::uno;
52using namespace ::com::sun::star::beans;
53using namespace ::com::sun::star::style;
54using namespace ::com::sun::star::text;
55using namespace ::com::sun::star::container;
56using ::com::sun::star::awt::FontDescriptor;
57
58namespace oox::drawingml {
59
61: maBulletColorPtr( std::make_shared<Color>() ),
62 mbBulletColorFollowText ( false ),
63 mbBulletFontFollowText ( false ),
64 mbBulletSizeFollowText ( false )
65{
66}
67
68bool BulletList::is() const
69{
70 return mnNumberingType.hasValue();
71}
72
73void BulletList::setBulletChar( const OUString & sChar )
74{
75 mnNumberingType <<= NumberingType::CHAR_SPECIAL;
76 msBulletChar <<= sChar;
77}
78
79void BulletList::setGraphic( css::uno::Reference< css::graphic::XGraphic > const & rXGraphic )
80{
81 mnNumberingType <<= NumberingType::BITMAP;
82 maGraphic <<= rXGraphic;
83}
84
86{
87 mnNumberingType <<= NumberingType::NUMBER_NONE;
88}
89
91{
92 msNumberingSuffix <<= OUString( ")" );
93 msNumberingPrefix <<= OUString( "(" );
94}
95
97{
98 msNumberingSuffix <<= OUString( ")" );
99 msNumberingPrefix <<= OUString();
100}
101
103{
104 msNumberingSuffix <<= OUString( "." );
105 msNumberingPrefix <<= OUString();
106}
107
109{
110 msNumberingSuffix <<= OUString();
111 msNumberingPrefix <<= OUString();
112}
113
115{
116 msNumberingSuffix <<= OUString( "-" );
117 msNumberingPrefix <<= OUString();
118}
119
120void BulletList::setType( sal_Int32 nType )
121{
122 OSL_ASSERT((nType & sal_Int32(0xFFFF0000))==0);
123 switch( nType )
124 {
125 case XML_alphaLcParenBoth:
126 mnNumberingType <<= NumberingType::CHARS_LOWER_LETTER;
128 break;
129 case XML_alphaLcParenR:
130 mnNumberingType <<= NumberingType::CHARS_LOWER_LETTER;
132 break;
133 case XML_alphaLcPeriod:
134 mnNumberingType <<= NumberingType::CHARS_LOWER_LETTER;
136 break;
137 case XML_alphaUcParenBoth:
138 mnNumberingType <<= NumberingType::CHARS_UPPER_LETTER;
140 break;
141 case XML_alphaUcParenR:
142 mnNumberingType <<= NumberingType::CHARS_UPPER_LETTER;
144 break;
145 case XML_alphaUcPeriod:
146 mnNumberingType <<= NumberingType::CHARS_UPPER_LETTER;
148 break;
149 case XML_arabic1Minus:
150 case XML_arabic2Minus:
151 case XML_arabicDbPeriod:
152 case XML_arabicDbPlain:
153 // TODO
154 break;
155 case XML_arabicParenBoth:
156 mnNumberingType <<= NumberingType::ARABIC;
158 break;
159 case XML_arabicParenR:
160 mnNumberingType <<= NumberingType::ARABIC;
162 break;
163 case XML_arabicPeriod:
164 mnNumberingType <<= NumberingType::ARABIC;
166 break;
167 case XML_arabicPlain:
168 mnNumberingType <<= NumberingType::ARABIC;
170 break;
171 case XML_circleNumDbPlain:
172 case XML_circleNumWdBlackPlain:
173 case XML_circleNumWdWhitePlain:
174 mnNumberingType <<= NumberingType::CIRCLE_NUMBER;
175 break;
176 case XML_ea1ChsPeriod:
177 mnNumberingType <<= NumberingType::NUMBER_UPPER_ZH;
179 break;
180 case XML_ea1ChsPlain:
181 mnNumberingType <<= NumberingType::NUMBER_UPPER_ZH;
183 break;
184 case XML_ea1ChtPeriod:
185 mnNumberingType <<= NumberingType::NUMBER_UPPER_ZH_TW;
187 break;
188 case XML_ea1ChtPlain:
189 mnNumberingType <<= NumberingType::NUMBER_UPPER_ZH_TW;
191 break;
192 case XML_ea1JpnChsDbPeriod:
193 case XML_ea1JpnKorPeriod:
194 case XML_ea1JpnKorPlain:
195 break;
196 case XML_hebrew2Minus:
197 mnNumberingType <<= NumberingType::CHARS_HEBREW;
199 break;
200 case XML_hindiAlpha1Period:
201 case XML_hindiAlphaPeriod:
202 case XML_hindiNumParenR:
203 case XML_hindiNumPeriod:
204 // TODO
205 break;
206 case XML_romanLcParenBoth:
207 mnNumberingType <<= NumberingType::ROMAN_LOWER;
209 break;
210 case XML_romanLcParenR:
211 mnNumberingType <<= NumberingType::ROMAN_LOWER;
213 break;
214 case XML_romanLcPeriod:
215 mnNumberingType <<= NumberingType::ROMAN_LOWER;
217 break;
218 case XML_romanUcParenBoth:
219 mnNumberingType <<= NumberingType::ROMAN_UPPER;
221 break;
222 case XML_romanUcParenR:
223 mnNumberingType <<= NumberingType::ROMAN_UPPER;
225 break;
226 case XML_romanUcPeriod:
227 mnNumberingType <<= NumberingType::ROMAN_UPPER;
229 break;
230 case XML_thaiAlphaParenBoth:
231 case XML_thaiNumParenBoth:
232 mnNumberingType <<= NumberingType::CHARS_THAI;
234 break;
235 case XML_thaiAlphaParenR:
236 case XML_thaiNumParenR:
237 mnNumberingType <<= NumberingType::CHARS_THAI;
239 break;
240 case XML_thaiAlphaPeriod:
241 case XML_thaiNumPeriod:
242 mnNumberingType <<= NumberingType::CHARS_THAI;
244 break;
245 }
246}
247
248void BulletList::setBulletSize(sal_Int16 nSize)
249{
250 mnSize <<= nSize;
251}
252
253void BulletList::setBulletAspectRatio(double nAspectRatio)
254{
255 mnAspectRatio <<= nAspectRatio;
256}
257
258void BulletList::setFontSize(sal_Int16 nSize)
259{
260 mnFontSize <<= nSize;
261}
262
263void BulletList::apply( const BulletList& rSource )
264{
265 if ( rSource.maBulletColorPtr->isUsed() )
267 if ( rSource.mbBulletColorFollowText.hasValue() )
269 if ( rSource.mbBulletFontFollowText.hasValue() )
271 if ( rSource.mbBulletSizeFollowText.hasValue() )
274 if ( rSource.msBulletChar.hasValue() )
275 msBulletChar = rSource.msBulletChar;
276 if ( rSource.mnStartAt.hasValue() )
277 mnStartAt = rSource.mnStartAt;
278 if ( rSource.mnNumberingType.hasValue() )
280 if ( rSource.msNumberingPrefix.hasValue() )
282 if ( rSource.msNumberingSuffix.hasValue() )
284 if ( rSource.mnSize.hasValue() )
285 mnSize = rSource.mnSize;
286 if ( rSource.mnAspectRatio.hasValue() )
288 if ( rSource.mnFontSize.hasValue() )
289 mnFontSize = rSource.mnFontSize;
290 if ( rSource.maStyleName.hasValue() )
291 maStyleName = rSource.maStyleName;
292 if ( rSource.maGraphic.hasValue() )
293 maGraphic = rSource.maGraphic;
294}
295
296void BulletList::pushToPropMap( const ::oox::core::XmlFilterBase* pFilterBase, PropertyMap& rPropMap ) const
297{
298 if( msNumberingPrefix.hasValue() )
299 rPropMap.setAnyProperty( PROP_Prefix, msNumberingPrefix);
300 if( msNumberingSuffix.hasValue() )
301 rPropMap.setAnyProperty( PROP_Suffix, msNumberingSuffix);
302 if( mnStartAt.hasValue() )
303 rPropMap.setAnyProperty( PROP_StartWith, mnStartAt);
304 rPropMap.setProperty( PROP_Adjust, HoriOrientation::LEFT);
305
306 if( mnNumberingType.hasValue() )
308
309 OUString aBulletFontName;
310 sal_Int16 nBulletFontPitch = 0;
311 sal_Int16 nBulletFontFamily = 0;
312 float nBulletFontWeight = css::awt::FontWeight::NORMAL;
313 bool bSymbolFont = false;
314 if( pFilterBase) {
315 bool bFollowTextFont = false;
316 mbBulletFontFollowText >>= bFollowTextFont;
317 if (!bFollowTextFont && maBulletFont.getFontData( aBulletFontName, nBulletFontPitch, nBulletFontFamily, *pFilterBase ) )
318 {
319 FontDescriptor aFontDesc;
320 sal_Int16 nFontSize = 0;
321 if( mnFontSize >>= nFontSize )
322 aFontDesc.Height = nFontSize;
323
324 // TODO move the to the TextFont struct.
325 aFontDesc.Name = aBulletFontName;
326 aFontDesc.Pitch = nBulletFontPitch;
327 aFontDesc.Family = nBulletFontFamily;
328 aFontDesc.Weight = nBulletFontWeight;
329 if ( aBulletFontName.equalsIgnoreAsciiCase("Wingdings") ||
330 aBulletFontName.equalsIgnoreAsciiCase("Wingdings 2") ||
331 aBulletFontName.equalsIgnoreAsciiCase("Wingdings 3") ||
332 aBulletFontName.equalsIgnoreAsciiCase("Monotype Sorts") ||
333 aBulletFontName.equalsIgnoreAsciiCase("Monotype Sorts 2") ||
334 aBulletFontName.equalsIgnoreAsciiCase("Webdings") ||
335 aBulletFontName.equalsIgnoreAsciiCase("StarBats") ||
336 aBulletFontName.equalsIgnoreAsciiCase("StarMath") ||
337 aBulletFontName.equalsIgnoreAsciiCase("ZapfDingbats") ) {
338 aFontDesc.CharSet = RTL_TEXTENCODING_SYMBOL;
339 bSymbolFont = true;
340 }
341 rPropMap.setProperty( PROP_BulletFont, aFontDesc);
342 rPropMap.setProperty( PROP_BulletFontName, aBulletFontName);
343 }
344 }
345 if ( msBulletChar.hasValue() ) {
346 OUString sBuChar;
347
348 msBulletChar >>= sBuChar;
349
350 if( pFilterBase && sBuChar.getLength() == 1 && maBulletFont.getFontData( aBulletFontName, nBulletFontPitch, nBulletFontFamily, *pFilterBase ) && bSymbolFont )
351 {
352 sal_Unicode nBuChar = sBuChar.toChar();
353 nBuChar &= 0x00ff;
354 nBuChar |= 0xf000;
355 sBuChar = OUString( &nBuChar, 1 );
356 }
357
358 rPropMap.setProperty( PROP_BulletChar, sBuChar);
359 }
360 if ( maGraphic.hasValue() )
361 {
362 Reference<css::awt::XBitmap> xBitmap(maGraphic, UNO_QUERY);
363 if (xBitmap.is())
364 rPropMap.setProperty(PROP_GraphicBitmap, xBitmap);
365 }
366 bool bFollowTextSize = false;
367 mbBulletSizeFollowText >>= bFollowTextSize;
368 if( !bFollowTextSize && mnSize.hasValue() )
369 rPropMap.setAnyProperty( PROP_BulletRelSize, mnSize);
370 if ( maStyleName.hasValue() )
372 if (pFilterBase ) {
373 bool bFollowTextColor = false;
374 mbBulletColorFollowText >>= bFollowTextColor;
375 if ( maBulletColorPtr->isUsed() && !bFollowTextColor )
376 rPropMap.setProperty( PROP_BulletColor, maBulletColorPtr->getColor( pFilterBase->getGraphicHelper() ));
377 }
378}
379
381: mnLevel( 0 )
382{
383}
384
386{
388 maBulletList.apply( rSourceProps.maBulletList );
390 if ( rSourceProps.maParaTopMargin.bHasValue )
391 maParaTopMargin = rSourceProps.maParaTopMargin;
392 if ( rSourceProps.maParaBottomMargin.bHasValue )
394 if ( rSourceProps.moParaLeftMargin )
395 moParaLeftMargin = rSourceProps.moParaLeftMargin;
396 if ( rSourceProps.moFirstLineIndentation )
398 if( rSourceProps.mnLevel )
399 mnLevel = rSourceProps.mnLevel;
400 if( rSourceProps.moParaAdjust )
401 moParaAdjust = rSourceProps.moParaAdjust;
402 if( rSourceProps.maLineSpacing.bHasValue )
403 maLineSpacing = rSourceProps.maLineSpacing;
404}
405
406void TextParagraphProperties::pushToPropSet( const ::oox::core::XmlFilterBase* pFilterBase,
407 const Reference < XPropertySet >& xPropSet, PropertyMap& rioBulletMap, const BulletList* pMasterBuList, bool bApplyBulletMap, float fCharacterSize,
408 sal_Int32 nAutofitFontScale, bool bPushDefaultValues ) const
409{
410 PropertySet aPropSet( xPropSet );
412
413 sal_Int32 nNumberingType = NumberingType::NUMBER_NONE;
414 if ( maBulletList.mnNumberingType.hasValue() )
415 {
416 maBulletList.mnNumberingType >>= nNumberingType;
417 aPropSet.setProperty< sal_Int16 >( PROP_NumberingLevel, getLevel() );
418 }
419 else if ( pMasterBuList && pMasterBuList->mnNumberingType.hasValue() )
420 pMasterBuList->mnNumberingType >>= nNumberingType;
421 if ( nNumberingType == NumberingType::NUMBER_NONE )
422 aPropSet.setProperty< sal_Int16 >( PROP_NumberingLevel, -1 );
423
424 maBulletList.pushToPropMap( pFilterBase, rioBulletMap );
425
426 if ( maParaTopMargin.bHasValue || bPushDefaultValues )
427 aPropSet.setProperty( PROP_ParaTopMargin, maParaTopMargin.toMargin( fCharacterSize != 0.0 ? fCharacterSize : getCharHeightPoints ( 12.0 ) ) );
428 if ( maParaBottomMargin.bHasValue || bPushDefaultValues )
429 aPropSet.setProperty( PROP_ParaBottomMargin, maParaBottomMargin.toMargin( fCharacterSize != 0.0 ? fCharacterSize : getCharHeightPoints ( 12.0 ) ) );
430
431 std::optional< sal_Int32 > noParaLeftMargin( moParaLeftMargin );
432 std::optional< sal_Int32 > noFirstLineIndentation( moFirstLineIndentation );
433
434 // tdf#149961 Impress scales the indents when text is autofitted while Powerpoint doesn't
435 // Try to counteract this by multiplying indents by the inverse of the autofit font scale.
436 if ( nAutofitFontScale )
437 {
438 if ( noParaLeftMargin ) noParaLeftMargin = *noParaLeftMargin * MAX_PERCENT / nAutofitFontScale;
439 if ( noFirstLineIndentation ) noFirstLineIndentation = *noFirstLineIndentation * MAX_PERCENT / nAutofitFontScale;
440 }
441
442 if ( nNumberingType != NumberingType::NUMBER_NONE )
443 {
444 if ( noParaLeftMargin )
445 {
446 aPropSet.setProperty<sal_Int32>( PROP_ParaLeftMargin, 0);
447 rioBulletMap.setProperty( PROP_LeftMargin, *noParaLeftMargin);
448 noParaLeftMargin.reset();
449 }
450 if ( noFirstLineIndentation )
451 {
452 // Force Paragraph property as zero - impress seems to use the value from previous
453 // (non) bullet line if not set to zero explicitly :(
454 aPropSet.setProperty<sal_Int32>( PROP_ParaFirstLineIndent, 0);
455 rioBulletMap.setProperty( PROP_FirstLineOffset, *noFirstLineIndentation);
456 noFirstLineIndentation.reset();
457 }
458 if ( nNumberingType != NumberingType::BITMAP && !rioBulletMap.hasProperty( PROP_BulletColor ) && pFilterBase )
459 rioBulletMap.setProperty( PROP_BulletColor, maTextCharacterProperties.maFillProperties.getBestSolidColor().getColor( pFilterBase->getGraphicHelper()));
460 }
461
462 if ( bApplyBulletMap )
463 {
465 aPropSet.getProperty( xNumRule, PROP_NumberingRules );
466 OSL_ENSURE( xNumRule.is(), "can't get Numbering rules");
467
468 try
469 {
470 if( xNumRule.is() )
471 {
472 if( !rioBulletMap.empty() )
473 {
474 // fix default bullet size to be 100%
475 if( !rioBulletMap.hasProperty( PROP_BulletRelSize ) )
476 rioBulletMap.setProperty<sal_Int16>( PROP_BulletRelSize, 100);
477 Sequence< PropertyValue > aBulletPropSeq = rioBulletMap.makePropertyValueSequence();
478 xNumRule->replaceByIndex( getLevel(), Any( aBulletPropSeq ) );
479 }
480
481 aPropSet.setProperty( PROP_NumberingRules, xNumRule );
482 }
483 }
484 catch (const Exception &)
485 {
486 // Don't warn for now, expected to fail for Writer.
487 }
488 }
489 if ( noParaLeftMargin )
490 aPropSet.setProperty( PROP_ParaLeftMargin, *noParaLeftMargin);
491 if ( noFirstLineIndentation )
492 {
493 aPropSet.setProperty( PROP_ParaFirstLineIndent, *noFirstLineIndentation );
494 if( bPushDefaultValues )
495 {
496 // Reset TabStops - these would be auto calculated by Impress
497 TabStop aTabStop;
498 aTabStop.Position = 0;
499 Sequence< TabStop > aSeq { aTabStop };
501 }
502 }
503
504 if ( moParaAdjust )
505 {
507 }
508 else
509 {
510 aPropSet.setProperty( PROP_ParaAdjust, css::style::ParagraphAdjust_LEFT);
511 }
512
514 {
516 }
517 else
518 {
519 aPropSet.setProperty( PROP_ParaLineSpacing, css::style::LineSpacing( css::style::LineSpacingMode::PROP, 100 ));
520 }
521}
522
524{
526}
527
528#ifdef DBG_UTIL
529// Note: Please don't remove this function. This is required for
530// debugging pptx import problems.
532{
533 Reference< css::drawing::XShape > xShape( oox::ppt::PowerPointImport::mpDebugFilterBase->getModelFactory()->createInstance( "com.sun.star.presentation.TitleTextShape" ), UNO_QUERY );
534 Reference< css::text::XText > xText( xShape, UNO_QUERY );
535
537 if (xDebugPage.is())
538 xDebugPage->add( xShape );
539
540 PropertyMap emptyMap;
541
542 xText->setString( "debug" );
543 Reference< css::text::XTextCursor > xStart = xText->createTextCursor();
544 xStart->gotoEnd( true );
545 Reference< XPropertySet > xPropSet( xStart, UNO_QUERY );
546 pushToPropSet( nullptr, xPropSet, emptyMap, nullptr, false, 0 );
547 PropertySet aPropSet( xPropSet );
548 aPropSet.dump();
549}
550#endif
551}
552
553/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
HRESULT createInstance(REFIID iid, Ifc **ppIfc)
A helper that maps property identifiers to property values.
Definition: propertymap.hxx:52
bool setAnyProperty(sal_Int32 nPropId, const css::uno::Any &rValue)
Sets the specified property to the passed value.
bool hasProperty(sal_Int32 nPropId) const
Returns true, if the map contains a property with the passed identifier.
void assignAll(const PropertyMap &rPropMap)
Inserts all properties contained in the passed property map.
bool empty() const
css::uno::Sequence< css::beans::PropertyValue > makePropertyValueSequence() const
Returns a sequence of property values, filled with all contained properties.
bool setProperty(sal_Int32 nPropId, Type &&rValue)
Sets the specified property to the passed value.
Definition: propertymap.hxx:72
A wrapper for a UNO property set.
Definition: propertyset.hxx:58
void setProperties(const css::uno::Sequence< OUString > &rPropNames, const css::uno::Sequence< css::uno::Any > &rValues)
Puts the passed properties into the property set.
bool getProperty(Type &orValue, sal_Int32 nPropId) const
Gets the specified property from the property set.
Definition: propertyset.hxx:94
bool setProperty(sal_Int32 nPropId, const Type &rValue)
Puts the passed value into the property set.
void setBulletAspectRatio(double nAspectRatio)
void pushToPropMap(const ::oox::core::XmlFilterBase *pFilterBase, PropertyMap &xPropMap) const
void setBulletChar(const OUString &sChar)
void setGraphic(css::uno::Reference< css::graphic::XGraphic > const &rXGraphic)
::oox::drawingml::TextFont maBulletFont
std::shared_ptr< ::oox::drawingml::Color > maBulletColorPtr
::Color getColor(const GraphicHelper &rGraphicHelper, ::Color nPhClr=API_RGB_TRANSPARENT) const
Returns the final RGB color value.
Definition: color.cxx:531
void assignIfUsed(const TextFont &rTextFont)
Overwrites this text font with the passed text font, if it is used.
Definition: textfont.cxx:72
bool getFontData(OUString &rFontName, sal_Int16 &rnFontPitch, sal_Int16 &rnFontFamily, const ::oox::core::XmlFilterBase &rFilter) const
Returns the font name, pitch, and family; tries to resolve theme placeholder names,...
Definition: textfont.cxx:78
void pushToPropSet(const ::oox::core::XmlFilterBase *pFilterBase, const css::uno::Reference< css::beans::XPropertySet > &xPropSet, PropertyMap &rioBulletList, const BulletList *pMasterBuList, bool bApplyBulletList, float fFontSize, sal_Int32 nAutofitFontScale=100000, bool bPushDefaultValues=false) const
float getCharHeightPoints(float fDefault) const
Returns the largest character size of this paragraph.
std::optional< css::style::ParagraphAdjust > moParaAdjust
void apply(const TextParagraphProperties &rSourceProps)
css::style::LineSpacing toLineSpacing() const
Definition: textspacing.hxx:43
sal_Int32 toMargin(float fFontSize) const
Definition: textspacing.hxx:55
static XmlFilterBase * mpDebugFilterBase
Definition: pptimport.hxx:81
static css::uno::WeakReference< css::drawing::XDrawPage > mxDebugPage
sal_Int16 mnLevel
Sequence< sal_Int8 > aSeq
if(aStr !=aBuf) UpdateName_Impl(m_xFollowLb.get()
@ Exception
std::shared_ptr< T > make_shared(Args &&... args)
const sal_Int32 MAX_PERCENT
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
QPRO_FUNC_TYPE nType
Color getBestSolidColor() const
Tries to resolve current settings to a solid color, e.g.
float getCharHeightPoints(float fDefault) const
Returns the current character size.
void assignUsed(const TextCharacterProperties &rSourceProps)
Overwrites all members that are explicitly set in rSourceProps.
sal_uInt16 sal_Unicode
constexpr OUStringLiteral PROP_CharStyleName
constexpr OUStringLiteral PROP_ParaLeftMargin
constexpr OUStringLiteral PROP_ParaTopMargin
constexpr OUStringLiteral PROP_ParaFirstLineIndent
constexpr OUStringLiteral PROP_ParaTabStops
constexpr OUStringLiteral PROP_ParaLineSpacing
constexpr OUStringLiteral PROP_NumberingRules
constexpr OUStringLiteral PROP_LeftMargin
constexpr OUStringLiteral PROP_ParaAdjust
constexpr OUStringLiteral PROP_NumberingType
constexpr OUStringLiteral PROP_ParaBottomMargin