30#include <osl/diagnose.h>
37 : mbLengthAdjust(true)
54 setX(std::move(aVector));
67 setY(std::move(aVector));
80 setDx(std::move(aVector));
93 setDy(std::move(aVector));
100 if(!aContent.empty())
126 if(!aContent.empty())
156 virtual bool allowChange(sal_uInt32 nCount,
basegfx::B2DHomMatrix& rNewTransform, sal_uInt32 nIndex, sal_uInt32 nLength)
override;
159 localTextBreakupHelper(
161 SvgTextPosition& rSvgTextPosition)
170 bool localTextBreakupHelper::allowChange(sal_uInt32 ,
basegfx::B2DHomMatrix& rNewTransform, sal_uInt32 , sal_uInt32 )
178 rNewTransform.
translate(-aBasePoint.getX(), -aBasePoint.getY());
179 rNewTransform.
rotate(fRotation);
180 rNewTransform.
translate(aBasePoint.getX(), aBasePoint.getY());
225 OUString aFontFamily(
"Times New Roman");
226 if(!rFontFamilyVector.empty())
227 aFontFamily=rFontFamilyVector[0];
233 if(aFontFamily.endsWith(
" embedded"))
235 aFontFamily = aFontFamily.copy(0, aFontFamily.getLength() - 9);
255 double fFontHeight(fFontWidth);
258 css::lang::Locale aLocale;
262 aTextLayouterDevice.
setFontAttribute(aFontAttribute, fFontWidth, fFontHeight, aLocale);
265 ::std::vector< double > aTextArray(rSvgTextPosition.
getX());
266 if(!aTextArray.empty() && aTextArray.size() <
nLength)
268 const sal_uInt32 nArray(aTextArray.size());
278 fStartX = aTextArray[nArray - 1];
284 for(
const auto &
a : aExtendArray)
286 aTextArray.push_back(
a + fStartX);
298 const double fFactor(rSvgTextPosition.
getTextLength() / fTextWidth);
303 if(aTextArray.empty())
308 for(
auto &
a : aTextArray)
316 fFontWidth *= fFactor;
357 aPosition.
setX(aPosition.
getX() - fTextWidth);
362 aPosition.
setX(aPosition.
getX() - (fTextWidth * 0.5));
379 switch(aBaselineShift)
395 const double mfBaselineShift(aNumber.
solve(*
this));
397 aPosition.
setY(aPosition.
getY() + mfBaselineShift);
409 if(rSvgStyleAttributes.
getFill())
410 aFill = *rSvgStyleAttributes.
getFill();
413 double fFillOpacity = 1.0;
422 aTextTransform.
scale(fFontWidth, fFontHeight);
437 if(pDecoDef && pDecoDef->
getFill())
438 aDecoColor = *pDecoDef->
getFill();
458 std::move(aTextArray),
487 std::move(aTextArray),
494 if (fFillOpacity != 1.0)
516 rSvgStyleAttributes));
533 localTextBreakupHelper alocalTextBreakupHelper(*pCandidate, rSvgTextPosition);
538 rTarget.append(std::move(aResult));
546 OSL_ENSURE(
false,
"Used primitive is not a text primitive (!)");
582 if(pSvgStyleAttributes)
598 mbLengthAdjust(rSvgTextPositions.getLengthAdjust()),
618 const sal_uInt32 nSizeX(rSvgTextPositions.
getX().size());
635 const sal_uInt32 nSizeDx(rSvgTextPositions.
getDx().size());
645 for(sal_uInt32
a(1);
a < nSizeX;
a++)
658 const sal_uInt32 nSizeY(rSvgTextPositions.
getY().size());
675 const sal_uInt32 nSizeDy(rSvgTextPositions.
getDy().size());
686 for(sal_uInt32
a(1);
a < nSizeY;
a++)
735 const sal_uInt32 nSize(
maRotate.size());
void rotate(double fRadiant)
void translate(double fX, double fY)
void scale(double fX, double fY)
void setFontAttribute(const attribute::FontAttribute &rFontAttribute, double fFontScaleX, double fFontScaleY, const css::lang::Locale &rLocale)
double getTextWidth(const OUString &rText, sal_uInt32 nIndex, sal_uInt32 nLength) const
double getOverlineOffset() const
double getUnderlineOffset() const
::std::vector< double > getTextArray(const OUString &rText, sal_uInt32 nIndex, sal_uInt32 nLength, bool bCaret=false) const
void decomposeTextWithStyle(drawinglayer::primitive2d::Primitive2DContainer &rTarget, SvgTextPosition &rSvgTextPosition, const SvgStyleAttributes &rSvgStyleAttributes) const
virtual ~SvgCharacterNode() override
void concatenate(std::u16string_view rText)
OUString maTextBeforeSpaceHandling
SvgCharacterNode(SvgDocument &rDocument, SvgNode *pParent, OUString aText)
virtual const SvgStyleAttributes * getSvgStyleAttributes() const override
void decomposeText(drawinglayer::primitive2d::Primitive2DContainer &rTarget, SvgTextPosition &rSvgTextPosition) const
const OUString & getText() const
Text content.
void whiteSpaceHandling()
rtl::Reference< drawinglayer::primitive2d::BasePrimitive2D > createSimpleTextPrimitive(SvgTextPosition &rSvgTextPosition, const SvgStyleAttributes &rSvgStyleAttributes) const
local helpers
OUString maText
the string data
XmlSpace getXmlSpace() const
XmlSpace access.
const SvgNode * getParent() const
virtual const SvgStyleAttributes * getSvgStyleAttributes() const
double solve(const InfoProvider &rInfoProvider, NumberType aNumberType=NumberType::length) const
SvgNumber getFillOpacity() const
fill opacity content
const basegfx::BColor * getFill() const
const SvgStyleAttributes * getTextDecorationDefiningSvgStyleAttributes() const
TextDecoration content.
const SvgStringVector & getFontFamily() const
Font content.
TextAlign getTextAlign() const
TextAlign content.
BaselineShift getBaselineShift() const
FontStyle getFontStyle() const
FontStyle content.
TextDecoration getTextDecoration() const
FontWeight getFontWeight() const
FontWeight content.
Visibility getVisibility() const
Visibility.
SvgNumber getFontSizeNumber() const
TextAnchor getTextAnchor() const
TextAnchor content.
SvgNumber getBaselineShiftNumber() const
::std::vector< double > maRotate
const SvgTextPosition * getParent() const
::std::vector< double > maY
const ::std::vector< double > & getX() const
void setPosition(const basegfx::B2DPoint &rNew)
bool getLengthAdjust() const
::std::vector< double > maX
double getTextLength() const
SvgTextPosition * mpParent
sal_uInt32 mnRotationIndex
const basegfx::B2DPoint & getPosition() const
bool getAbsoluteX() const
SvgTextPosition(SvgTextPosition *pParent, const InfoProvider &rInfoProvider, const SvgTextPositions &rSvgTextPositions)
basegfx::B2DPoint maPosition
const SvgNumberVector & getY() const
Y content.
void setDx(SvgNumberVector &&aDx)
const SvgNumberVector & getX() const
X content.
void setY(SvgNumberVector &&aY)
void setLengthAdjust(bool bNew)
const SvgNumberVector & getDy() const
Dy content.
void parseTextPositionAttributes(SVGToken aSVGToken, std::u16string_view aContent)
const SvgNumber & getTextLength() const
TextLength content.
void setX(SvgNumberVector &&aX)
void setDy(SvgNumberVector &&aDy)
void setTextLength(const SvgNumber &rTextLength)
void setRotate(SvgNumberVector &&aRotate)
const SvgNumberVector & getDx() const
Dx content.
constexpr ::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
RegionData_Impl * mpParent
double getLength(const B2DPolygon &rCandidate)
constexpr double deg2rad(double v)
TEXT_FONT_EMPHASIS_MARK_NONE
std::basic_string_view< charT, traits > trim(std::basic_string_view< charT, traits > str)
bool equalsIgnoreAsciiCase(std::u16string_view s1, std::u16string_view s2)
::std::vector< double > solveSvgNumberVector(const SvgNumberVector &rInput, const InfoProvider &rInfoProvider)
::std::vector< OUString > SvgStringVector
::FontWeight getVclFontWeight(FontWeight aSource)
OUString consolidateContiguousSpace(const OUString &rCandidate)
bool readSingleNumber(std::u16string_view rCandidate, SvgNumber &aNum)
std::vector< SvgNumber > SvgNumberVector
bool readSvgNumberVector(std::u16string_view rCandidate, SvgNumberVector &rSvgNumberVector)
SvgTextPosition & mrSvgTextPosition