Krita Source Code Documentation
Loading...
Searching...
No Matches
KoSvgText Namespace Reference

Classes

struct  AutoLengthPercentage
 
struct  AutoValue
 
struct  BackgroundProperty
 BackgroundProperty is a special wrapper around KoShapeBackground for managing it in KoSvgTextProperties. More...
 
struct  CharTransformation
 
struct  CssFontStyleData
 When style is oblique, a custom slant value can be specified for variable fonts. More...
 
struct  CssLengthPercentage
 
struct  FontFamilyAxis
 
struct  FontFamilyStyleInfo
 
struct  FontFeatureEastAsian
 
struct  FontFeatureLigatures
 The FontFeatureLigatures class This struct represents css font-variant-ligatures. More...
 
struct  FontFeatureNumeric
 The FontFeatureLigatures class This struct represents css font-variant-numeric. More...
 
struct  FontMetrics
 The FontMetrics class A class to keep track of a variety of font metrics. Note that values are in Freetype pixels and coordinates! (that is 64 times bigger than a regular pixel, and Y is swapped.) More...
 
struct  LineHeightInfo
 
struct  ResolutionHandler
 The ResolutionHandler class. More...
 
struct  StrokeProperty
 StrokeProperty is a special wrapper around KoShapeStrokeModel for managing it in KoSvgTextProperties. More...
 
struct  TabSizeInfo
 
struct  TextIndentInfo
 
struct  TextOnPathInfo
 
struct  TextTransformInfo
 
struct  TextUnderlinePosition
 

Enumerations

enum  Baseline {
  BaselineAuto , BaselineUseScript , BaselineDominant , BaselineNoChange ,
  BaselineResetSize , BaselineIdeographic , BaselineAlphabetic , BaselineHanging ,
  BaselineMathematical , BaselineCentral , BaselineMiddle , BaselineTextBottom ,
  BaselineTextTop
}
 Baseline values used by dominant-baseline and baseline-align. More...
 
enum  BaselineShiftMode {
  ShiftNone , ShiftSub , ShiftSuper , ShiftLengthPercentage ,
  ShiftLineTop , ShiftLineBottom
}
 Mode of the baseline shift. More...
 
enum  Direction { DirectionLeftToRight , DirectionRightToLeft }
 Base direction used by Bidi algorithm. More...
 
enum  EastAsianVariant {
  EastAsianVariantNormal , EastAsianJis78 , EastAsianJis83 , EastAsianJis90 ,
  EastAsianJis04 , EastAsianSimplified , EastAsianTraditional
}
 
enum  EastAsianWidth { EastAsiantNormalWidth , EastAsianFullWidth , EastAsianProportionalWidth }
 
enum  FontFeatureCaps {
  CapsNormal , CapsSmall , CapsAllSmall , CapsPetite ,
  CapsAllPetite , CapsUnicase , CapsTitling
}
 Represents font-feature-caps. More...
 
enum  FontFeaturePosition { PositionNormal , PositionSuper , PositionSub }
 The FontFeatureLigatures class This enum represents css font-variant-position. More...
 
enum  FontFormatType { UnknownFontType , BDFFontType , Type1FontType , OpenTypeFontType }
 
enum  HangingPunctuation {
  HangNone = 0x0 , HangFirst = 0x1 , HangLast = 0x2 , HangEnd = 0x4 ,
  HangForce = 0x8
}
 
enum  LengthAdjust { LengthAdjustSpacing , LengthAdjustSpacingAndGlyphs }
 
enum  LineBreak {
  LineBreakAuto , LineBreakLoose , LineBreakNormal , LineBreakStrict ,
  LineBreakAnywhere
}
 
enum  NumericFigureSpacing { NumericFigureSpacingNormal , NumericFigureSpacingProportional , NumericFigureSpacingTabular }
 
enum  NumericFigureStyle { NumericFigureStyleNormal , NumericFigureStyleLining , NumericFigureStyleOld }
 
enum  NumericFractions { NumericFractionsNormal , NumericFractionsDiagonal , NumericFractionsStacked }
 
enum  OverflowWrap { OverflowWrapNormal , OverflowWrapAnywhere , OverflowWrapBreakWord }
 What to do with words that cannot be broken, but still overflow. More...
 
enum  TextAlign {
  AlignLastAuto , AlignStart , AlignEnd , AlignLeft ,
  AlignRight , AlignCenter , AlignJustify , AlignMatchParent
}
 
enum  TextAnchor { AnchorStart , AnchorMiddle , AnchorEnd }
 Where the text is anchored for SVG 1.1 text and 'inline-size'. More...
 
enum  TextDecoration { DecorationNone = 0x0 , DecorationUnderline = 0x1 , DecorationOverline = 0x2 , DecorationLineThrough = 0x4 }
 Flags for text-decoration, for underline, overline and strikethrough. More...
 
enum  TextDecorationStyle {
  Solid , Double , Dotted , Dashed ,
  Wavy
}
 Style of the text-decoration. More...
 
enum  TextDecorationUnderlinePosition { UnderlineAuto , UnderlineUnder , UnderlineLeft , UnderlineRight }
 Which location to choose for the underline. More...
 
enum  TextOrientation { OrientationMixed , OrientationUpright , OrientationSideWays }
 Orientation of the glyphs, used for vertical writing modes. More...
 
enum  TextOverflow { OverFlowVisible , OverFlowClip , OverFlowEllipse }
 How to handle overflow. More...
 
enum  TextPathMethod { TextPathAlign , TextPathStretch }
 Whether to stretch the glyphs along a path. More...
 
enum  TextPathSide { TextPathSideRight , TextPathSideLeft }
 Whether to reverse the path before laying out text. More...
 
enum  TextPathSpacing { TextPathAuto , TextPathExact }
 
enum  TextRendering { RenderingAuto , RenderingOptimizeSpeed , RenderingOptimizeLegibility , RenderingGeometricPrecision }
 
enum  TextSpaceCollapse {
  Collapse , Discard , Preserve , PreserveBreaks ,
  PreserveSpaces , BreakSpaces
}
 
enum  TextSpaceTrim { TrimNone = 0x0 , TrimInner = 0x1 , DiscardBefore = 0x2 , DiscardAfter = 0x4 }
 Part of "white-space". More...
 
enum  TextTransform { TextTransformNone = 0x0 , TextTransformCapitalize = 0x1 , TextTransformUppercase = 0x2 , TextTransformLowercase = 0x4 }
 
enum  TextWrap {
  Wrap , NoWrap , Balance , Stable ,
  Pretty
}
 Part of "white-space", in practice we only support wrap and nowrap. More...
 
enum  UnicodeBidi {
  BidiNormal , BidiEmbed , BidiOverride , BidiIsolate ,
  BidiIsolateOverride , BidiPlainText
}
 
enum  WordBreak { WordBreakNormal , WordBreakKeepAll , WordBreakBreakAll }
 Whether to break words. More...
 
enum  WritingMode { HorizontalTB , VerticalRL , VerticalLR }
 

Functions

QStringList fontFeaturesCaps (const FontFeatureCaps &feature, const int start, const int end)
 
QStringList fontFeaturesPosition (const FontFeaturePosition &feature, const int start, const int end)
 
QVariant fromAutoValue (const KoSvgText::AutoValue &value)
 
QDataStream & operator<< (QDataStream &out, const KoSvgText::FontFamilyAxis &axis)
 
QDataStream & operator<< (QDataStream &out, const KoSvgText::FontFamilyStyleInfo &style)
 
QDebug operator<< (QDebug dbg, const BackgroundProperty &prop)
 
QDebug operator<< (QDebug dbg, const CharTransformation &t)
 
QDebug operator<< (QDebug dbg, const CssLengthPercentage &value)
 
QDebug operator<< (QDebug dbg, const FontMetrics &metrics)
 
QDebug operator<< (QDebug dbg, const KoSvgText::AutoLengthPercentage &value)
 
QDebug operator<< (QDebug dbg, const KoSvgText::AutoValue &value)
 
QDebug operator<< (QDebug dbg, const KoSvgText::CssFontStyleData &value)
 
QDebug operator<< (QDebug dbg, const KoSvgText::FontFamilyAxis &axis)
 
QDebug operator<< (QDebug dbg, const KoSvgText::FontFamilyStyleInfo &style)
 
QDebug operator<< (QDebug dbg, const KoSvgText::FontFeatureEastAsian &feature)
 
QDebug operator<< (QDebug dbg, const KoSvgText::FontFeatureLigatures &feature)
 
QDebug operator<< (QDebug dbg, const KoSvgText::FontFeatureNumeric &feature)
 
QDebug KRITAFLAKE_EXPORT operator<< (QDebug dbg, const KoSvgText::TabSizeInfo &value)
 
QDebug KRITAFLAKE_EXPORT operator<< (QDebug dbg, const KoSvgText::TextIndentInfo &value)
 
QDebug operator<< (QDebug dbg, const KoSvgText::TextUnderlinePosition &value)
 
QDebug operator<< (QDebug dbg, const LineHeightInfo &value)
 
QDebug operator<< (QDebug dbg, const StrokeProperty &prop)
 
QDebug operator<< (QDebug dbg, const TextTransformInfo &t)
 
QDataStream & operator>> (QDataStream &in, KoSvgText::FontFamilyAxis &axis)
 
QDataStream & operator>> (QDataStream &in, KoSvgText::FontFamilyStyleInfo &style)
 
AutoLengthPercentage parseAutoLengthPercentageXY (const QString &value, const SvgLoadingContext &context, const QString &autoKeyword, QRectF bbox, bool percentageIsViewPort)
 
AutoValue parseAutoValueAngular (const QString &value, const SvgLoadingContext &context, const QString &autoKeyword)
 
AutoValue parseAutoValueX (const QString &value, const SvgLoadingContext &context, const QString &autoKeyword)
 
AutoValue parseAutoValueXY (const QString &value, const SvgLoadingContext &context, const QString &autoKeyword)
 
AutoValue parseAutoValueY (const QString &value, const SvgLoadingContext &context, const QString &autoKeyword)
 
Baseline parseBaseline (const QString &value)
 
BaselineShiftMode parseBaselineShiftMode (const QString &value)
 
int parseCSSFontStretch (const QString &value, int currentStretch)
 parseCSSFontStretch For CSS3, the font-stretches were only given as keywords. In Css 4 and above, they also allow values, except in the "font"-shorthand. The css3 bool will restrict parsing to this value for this reason.
 
int parseCSSFontWeight (const QString &value, int currentWeight)
 
Direction parseDirection (const QString &value)
 
FontFeatureCaps parseFontFeatureCaps (const QString &value, FontFeatureCaps feature)
 
FontFeatureEastAsian parseFontFeatureEastAsian (const QString &value, FontFeatureEastAsian features)
 
FontFeatureLigatures parseFontFeatureLigatures (const QString &value, FontFeatureLigatures features)
 
FontFeatureNumeric parseFontFeatureNumeric (const QString &value, FontFeatureNumeric features)
 
FontFeaturePosition parseFontFeaturePosition (const QString &value, FontFeaturePosition feature)
 
CssFontStyleData parseFontStyle (const QString &value)
 
LengthAdjust parseLengthAdjust (const QString &value)
 
LineBreak parseLineBreak (const QString &value)
 
LineHeightInfo parseLineHeight (const QString &value, const SvgLoadingContext &context)
 
TabSizeInfo parseTabSize (const QString &value, const SvgLoadingContext &context)
 
TextAlign parseTextAlign (const QString &value)
 
TextAnchor parseTextAnchor (const QString &value)
 
TextIndentInfo parseTextIndent (const QString &value, const SvgLoadingContext &context)
 
TextOrientation parseTextOrientation (const QString &value)
 
TextOrientation parseTextOrientationFromGlyphOrientation (AutoValue value)
 
TextPathMethod parseTextPathMethod (const QString &value)
 
TextPathSide parseTextPathSide (const QString &value)
 
TextPathSpacing parseTextPathSpacing (const QString &value)
 
TextRendering parseTextRendering (const QString &value)
 
TextTransformInfo parseTextTransform (const QString &value)
 
UnicodeBidi parseUnicodeBidi (const QString &value)
 
WordBreak parseWordBreak (const QString &value)
 
WritingMode parseWritingMode (const QString &value)
 
bool whiteSpaceValueToLongHands (const QString &value, TextSpaceCollapse &collapseMethod, TextWrap &wrapMethod, TextSpaceTrims &trimMethod)
 whiteSpaceValueToLongHands CSS-Text-4 takes CSS-Text-3 whitespace values and treats them as a shorthand for three more specific properties. This method sets the three properties according to the white space value given.
 
QString writeAlignmentBaseline (Baseline value)
 
QString writeAutoLengthPercentage (const AutoLengthPercentage &value, const QString &autoKeyword, bool percentageToEm)
 
QString writeAutoValue (const AutoValue &value, const QString &autoKeyword)
 
QString writeBaselineShiftMode (BaselineShiftMode value, CssLengthPercentage shift)
 
QString writeDirection (Direction value)
 
QString writeDominantBaseline (Baseline value)
 
QString writeFontFeatureCaps (const FontFeatureCaps &value)
 
QString writeFontFeatureEastAsian (const FontFeatureEastAsian &feature)
 
QString writeFontFeatureLigatures (const FontFeatureLigatures &feature)
 
QString writeFontFeatureNumeric (const FontFeatureNumeric &feature)
 
QString writeFontFeaturePosition (const FontFeaturePosition &value)
 
QString writeFontStyle (CssFontStyleData value)
 
QString writeLengthAdjust (LengthAdjust value)
 
QString writeLengthPercentage (const CssLengthPercentage &length, bool percentageAsEm)
 
QString writeLineBreak (LineBreak value)
 
QString writeLineHeight (LineHeightInfo lineHeight)
 
QString writeTabSize (const TabSizeInfo tabSize)
 
QString writeTextAlign (TextAlign value)
 
QString writeTextAnchor (TextAnchor value)
 
QString writeTextIndent (const TextIndentInfo textIndent)
 
QString writeTextOrientation (TextOrientation orientation)
 
QString writeTextPathMethod (TextPathMethod value)
 
QString writeTextPathSide (TextPathSide value)
 
QString writeTextPathSpacing (TextPathSpacing value)
 
QString writeTextRendering (TextRendering value)
 
QString writeTextTransform (const TextTransformInfo textTransform)
 
QString writeUnicodeBidi (UnicodeBidi value)
 
QString writeWhiteSpaceValue (TextSpaceCollapse collapseMethod, TextWrap wrapMethod, KoSvgText::TextSpaceTrims trimMethod)
 writeWhiteSpaceValue determine the CSS-3-Whitespace shorthand value.
 
QString writeWhiteSpaceValue (TextSpaceCollapse collapseMethod, TextWrap wrapMethod, TextSpaceTrims trimMethod)
 
QString writeWordBreak (WordBreak value)
 
QString writeWritingMode (WritingMode value, bool svg1_1)
 
QString writeXmlSpace (TextSpaceCollapse collapseMethod)
 
bool xmlSpaceToLongHands (const QString &value, TextSpaceCollapse &collapseMethod)
 xmlSpaceToLongHands This takes xml:space values and converts them to CSS-Text-4 properties.
 

Variables

static const std::array< const char *, 7 > fontSizeNames
 
static const std::array< const char *, 9 > fontStretchNames
 

Enumeration Type Documentation

◆ Baseline

Baseline values used by dominant-baseline and baseline-align.

Enumerator
BaselineAuto 

Use the preferred baseline for the writing-mode and text-orientation.

BaselineUseScript 

SVG 1.1 feature, Deprecated in CSS-Inline-3. Use the preferred baseline for the given script.

BaselineDominant 

alignment-baseline has the same value as dominant-baseline.

BaselineNoChange 

Use parent baseline table.

BaselineResetSize 

Use parent baseline table, but adjust to current fontsize.

BaselineIdeographic 

Use 'ideo' or 'ideographic under/left' baselines. Used for CJK.

BaselineAlphabetic 

Use 'romn' or the baseline for LCG scripts.

BaselineHanging 

Use 'hang', or the baseline for scripts that hang like Tibetan and Devanagari.

BaselineMathematical 

Use 'math' or the mathematical baseline, used for aligning numbers and mathematical symbols correctly.

BaselineCentral 

Use the center between the ideographic over and under.

BaselineMiddle 

Use the center between the alphabetical and x-height, or central in vertical.

BaselineTextBottom 

Bottom side of the inline line-box.

BaselineTextTop 

Top side of the inline line-box.

Definition at line 213 of file KoSvgText.h.

213 {
236};
@ BaselineAlphabetic
Use 'romn' or the baseline for LCG scripts.
Definition KoSvgText.h:225
@ BaselineDominant
Definition KoSvgText.h:218
@ BaselineHanging
Definition KoSvgText.h:226
@ BaselineMiddle
Definition KoSvgText.h:232
@ BaselineUseScript
Definition KoSvgText.h:216
@ BaselineTextBottom
Bottom side of the inline line-box.
Definition KoSvgText.h:234
@ BaselineResetSize
Definition KoSvgText.h:221
@ BaselineNoChange
Use parent baseline table.
Definition KoSvgText.h:220
@ BaselineIdeographic
Definition KoSvgText.h:223
@ BaselineMathematical
Definition KoSvgText.h:228
@ BaselineTextTop
Top side of the inline line-box.
Definition KoSvgText.h:235
@ BaselineCentral
Use the center between the ideographic over and under.
Definition KoSvgText.h:231

◆ BaselineShiftMode

Mode of the baseline shift.

Enumerator
ShiftNone 

No shift.

ShiftSub 

Use parent font metric for 'subscript'.

ShiftSuper 

Use parent font metric for 'superscript'.

ShiftLengthPercentage 

Css Length Percentage, percentage is lh.

ShiftLineTop 

this handles css-inline-3 vertical-align:top. Not exposed to ui

ShiftLineBottom 

this handles css-inline-3 vertical-align:bottom. Not exposed to ui

Definition at line 240 of file KoSvgText.h.

240 {
241 ShiftNone,
242 ShiftSub,
243 ShiftSuper,
247};
@ ShiftLineBottom
this handles css-inline-3 vertical-align:bottom. Not exposed to ui
Definition KoSvgText.h:246
@ ShiftSuper
Use parent font metric for 'superscript'.
Definition KoSvgText.h:243
@ ShiftLineTop
this handles css-inline-3 vertical-align:top. Not exposed to ui
Definition KoSvgText.h:245
@ ShiftLengthPercentage
Css Length Percentage, percentage is lh.
Definition KoSvgText.h:244
@ ShiftNone
No shift.
Definition KoSvgText.h:241
@ ShiftSub
Use parent font metric for 'subscript'.
Definition KoSvgText.h:242

◆ Direction

Base direction used by Bidi algorithm.

Enumerator
DirectionLeftToRight 
DirectionRightToLeft 

Definition at line 48 of file KoSvgText.h.

48 {
51};
@ DirectionLeftToRight
Definition KoSvgText.h:49
@ DirectionRightToLeft
Definition KoSvgText.h:50

◆ EastAsianVariant

Enumerator
EastAsianVariantNormal 
EastAsianJis78 
EastAsianJis83 
EastAsianJis90 
EastAsianJis04 
EastAsianSimplified 
EastAsianTraditional 

Definition at line 997 of file KoSvgText.h.

◆ EastAsianWidth

Enumerator
EastAsiantNormalWidth 
EastAsianFullWidth 
EastAsianProportionalWidth 

Definition at line 1007 of file KoSvgText.h.

1007 {
1011};
@ EastAsianProportionalWidth
Definition KoSvgText.h:1010
@ EastAsiantNormalWidth
Definition KoSvgText.h:1008
@ EastAsianFullWidth
Definition KoSvgText.h:1009

◆ FontFeatureCaps

Represents font-feature-caps.

Enumerator
CapsNormal 
CapsSmall 
CapsAllSmall 
CapsPetite 
CapsAllPetite 
CapsUnicase 
CapsTitling 

Definition at line 897 of file KoSvgText.h.

897 {
899 CapsSmall,
905};
@ CapsAllPetite
Definition KoSvgText.h:902

◆ FontFeaturePosition

The FontFeatureLigatures class This enum represents css font-variant-position.

Enumerator
PositionNormal 
PositionSuper 
PositionSub 

Definition at line 886 of file KoSvgText.h.

886 {
890};
@ PositionSuper
Definition KoSvgText.h:888
@ PositionNormal
Definition KoSvgText.h:887

◆ FontFormatType

Enumerator
UnknownFontType 
BDFFontType 
Type1FontType 
OpenTypeFontType 

Definition at line 806 of file KoSvgText.h.

806 {
811};
@ OpenTypeFontType
Definition KoSvgText.h:810
@ Type1FontType
Definition KoSvgText.h:809
@ UnknownFontType
Definition KoSvgText.h:807

◆ HangingPunctuation

Flags. Whether and how to hang punctuation. Not strictly necessary according to SVG2, marked as 'at-risk' in CSS-Text-3, though this feature is useful for East-Asian text layout.

Enumerator
HangNone 

Hang nothing.

HangFirst 

Hang opening brackets and quotes.

HangLast 

Hang closing brackets and quotes.

HangEnd 

Hang stops and commas. Force/Allow is a separate boolean.

HangForce 

Whether to force hanging stops or commas.

Definition at line 204 of file KoSvgText.h.

204 {
205 HangNone = 0x0,
206 HangFirst = 0x1,
207 HangLast = 0x2,
208 HangEnd = 0x4,
209 HangForce = 0x8
210};
@ HangForce
Whether to force hanging stops or commas.
Definition KoSvgText.h:209
@ HangLast
Hang closing brackets and quotes.
Definition KoSvgText.h:207
@ HangFirst
Hang opening brackets and quotes.
Definition KoSvgText.h:206
@ HangNone
Hang nothing.
Definition KoSvgText.h:205
@ HangEnd
Hang stops and commas. Force/Allow is a separate boolean.
Definition KoSvgText.h:208

◆ LengthAdjust

Enumerator
LengthAdjustSpacing 

Only stretch the spaces.

LengthAdjustSpacingAndGlyphs 

Stretches the glyphs as well.

Definition at line 250 of file KoSvgText.h.

250 {
253};
@ LengthAdjustSpacing
Only stretch the spaces.
Definition KoSvgText.h:251
@ LengthAdjustSpacingAndGlyphs
Stretches the glyphs as well.
Definition KoSvgText.h:252

◆ LineBreak

Line breaking strictness. A number of these values are values to be handed over to the line/word breaking algorithm.

Enumerator
LineBreakAuto 

Use preferred method.

LineBreakLoose 

Use loose method, language specific.

LineBreakNormal 

Use normal method, language specific.

LineBreakStrict 

Use strict method, language specific.

LineBreakAnywhere 

Break between any typographic clusters.

Definition at line 141 of file KoSvgText.h.

141 {
147};
@ LineBreakStrict
Use strict method, language specific.
Definition KoSvgText.h:145
@ LineBreakLoose
Use loose method, language specific.
Definition KoSvgText.h:143
@ LineBreakAnywhere
Break between any typographic clusters.
Definition KoSvgText.h:146
@ LineBreakAuto
Use preferred method.
Definition KoSvgText.h:142
@ LineBreakNormal
Use normal method, language specific.
Definition KoSvgText.h:144

◆ NumericFigureSpacing

Enumerator
NumericFigureSpacingNormal 
NumericFigureSpacingProportional 
NumericFigureSpacingTabular 

Definition at line 919 of file KoSvgText.h.

◆ NumericFigureStyle

Enumerator
NumericFigureStyleNormal 
NumericFigureStyleLining 
NumericFigureStyleOld 

Definition at line 912 of file KoSvgText.h.

◆ NumericFractions

Enumerator
NumericFractionsNormal 
NumericFractionsDiagonal 
NumericFractionsStacked 

Definition at line 925 of file KoSvgText.h.

◆ OverflowWrap

What to do with words that cannot be broken, but still overflow.

Enumerator
OverflowWrapNormal 

Do nothing besides 'relaxing' the strictness of 'wordbreak'.

OverflowWrapAnywhere 

Break anywhere as soon as overflow happens.

OverflowWrapBreakWord 

Break previous soft-break before breaking the word.

Definition at line 151 of file KoSvgText.h.

151 {
157};
@ OverflowWrapBreakWord
Definition KoSvgText.h:155
@ OverflowWrapNormal
Definition KoSvgText.h:152
@ OverflowWrapAnywhere
Break anywhere as soon as overflow happens.
Definition KoSvgText.h:154

◆ TextAlign

TextAlign values, see https://www.w3.org/TR/css-writing-modes-4/#logical-to-physical for interaction with writing mode and direction.

Enumerator
AlignLastAuto 

TextAlignLast: same as text-align-all, unless that's justify, then this is AlignStart.

AlignStart 

Align text to left side of line with LTR, right with RTL, top with the vertical writing modes.

AlignEnd 

Align text to right side of line with LTR, left with RTL, bottom with the vertical writing modes.

AlignLeft 

Align text to left side of line. Top with the vertical writing modes, bottom in sideways.

AlignRight 

Align text to right side of line. Bottom with the vertical writing modes, top in sideways

AlignCenter 

Center text in line.

AlignJustify 

Justify text, so that the end and start both touch the end and start of the line.

AlignMatchParent 

Inherit, except Start and End are matched against the parent values... We don't support this.

Definition at line 162 of file KoSvgText.h.

162 {
165 AlignStart,
167 AlignEnd,
169 AlignLeft,
171 AlignRight,
178};
@ AlignCenter
Center text in line.
Definition KoSvgText.h:173
@ AlignLastAuto
Definition KoSvgText.h:163
@ AlignMatchParent
Definition KoSvgText.h:176

◆ TextAnchor

Where the text is anchored for SVG 1.1 text and 'inline-size'.

Enumerator
AnchorStart 

Anchor left for LTR, right for RTL.

AnchorMiddle 

Anchor to the middle.

AnchorEnd 

Anchor right for LTR, left for RTL.

Definition at line 79 of file KoSvgText.h.

79 {
83};
@ AnchorEnd
Anchor right for LTR, left for RTL.
Definition KoSvgText.h:82
@ AnchorStart
Anchor left for LTR, right for RTL.
Definition KoSvgText.h:80
@ AnchorMiddle
Anchor to the middle.
Definition KoSvgText.h:81

◆ TextDecoration

Flags for text-decoration, for underline, overline and strikethrough.

Enumerator
DecorationNone 
DecorationUnderline 
DecorationOverline 
DecorationLineThrough 

Definition at line 257 of file KoSvgText.h.

257 {
258 DecorationNone = 0x0,
260 DecorationOverline = 0x2,
262};
@ DecorationOverline
Definition KoSvgText.h:260
@ DecorationLineThrough
Definition KoSvgText.h:261
@ DecorationNone
Definition KoSvgText.h:258
@ DecorationUnderline
Definition KoSvgText.h:259

◆ TextDecorationStyle

Style of the text-decoration.

Enumerator
Solid 

Draw a solid line.Ex: --—.

Double 

Draw two lines. Ex: =====.

Dotted 

Draw a dotted line. Ex: .....

Dashed 

Draw a dashed line. Ex: - - - - -.

Wavy 

Draw a wavy line. We currently make a zigzag, ex: ^^^^^.

Definition at line 265 of file KoSvgText.h.

265 {
266 Solid,
267 Double,
268 Dotted,
269 Dashed,
270 Wavy
271};
@ Dashed
Draw a dashed line. Ex: - - - - -.
Definition KoSvgText.h:269
@ Double
Draw two lines. Ex: =====.
Definition KoSvgText.h:267
@ Wavy
Draw a wavy line. We currently make a zigzag, ex: ^^^^^.
Definition KoSvgText.h:270
@ Dotted
Draw a dotted line. Ex: .....
Definition KoSvgText.h:268

◆ TextDecorationUnderlinePosition

Which location to choose for the underline.

Enumerator
UnderlineAuto 

Use Font metrics.

UnderlineUnder 

Use the bottom of the text decoration bounding box.

UnderlineLeft 

Put the underline on the left of the text decoration bounding box, overline right.

UnderlineRight 

Put the underline on the right of the text decoration bounding box, overline left.

Definition at line 275 of file KoSvgText.h.

275 {
282};
@ UnderlineLeft
Definition KoSvgText.h:278
@ UnderlineRight
Definition KoSvgText.h:280
@ UnderlineUnder
Use the bottom of the text decoration bounding box.
Definition KoSvgText.h:277
@ UnderlineAuto
Use Font metrics.
Definition KoSvgText.h:276

◆ TextOrientation

Orientation of the glyphs, used for vertical writing modes.

Enumerator
OrientationMixed 

Use UA50 to determine whether a character should be sideways.

OrientationUpright 

Set all characters upright.

OrientationSideWays 

Set all characters sideways.

Definition at line 70 of file KoSvgText.h.

70 {
75};
@ OrientationUpright
Set all characters upright.
Definition KoSvgText.h:73
@ OrientationMixed
Definition KoSvgText.h:71
@ OrientationSideWays
Set all characters sideways.
Definition KoSvgText.h:74

◆ TextOverflow

How to handle overflow.

Enumerator
OverFlowVisible 

Determined by 'overflow' property, not by text-overflow. In svg all the non-visible values compute to 'clip'.

OverFlowClip 

Clip the rendered content.

OverFlowEllipse 

Replace the last characters with "U+2026".

Definition at line 193 of file KoSvgText.h.

193 {
199};
@ OverFlowVisible
Definition KoSvgText.h:194
@ OverFlowEllipse
Replace the last characters with "U+2026".
Definition KoSvgText.h:198
@ OverFlowClip
Clip the rendered content.
Definition KoSvgText.h:197

◆ TextPathMethod

Whether to stretch the glyphs along a path.

Enumerator
TextPathAlign 

Only align position and rotation of glyphs to the path.

TextPathStretch 

Align position and rotation and stretch glyphs' path points along the path as well.

Definition at line 286 of file KoSvgText.h.

286 {
290};
@ TextPathAlign
Only align position and rotation of glyphs to the path.
Definition KoSvgText.h:287
@ TextPathStretch
Definition KoSvgText.h:288

◆ TextPathSide

Whether to reverse the path before laying out text.

Enumerator
TextPathSideRight 
TextPathSideLeft 

Definition at line 300 of file KoSvgText.h.

300 {
303};
@ TextPathSideRight
Definition KoSvgText.h:301
@ TextPathSideLeft
Definition KoSvgText.h:302

◆ TextPathSpacing

Currently not used, this value suggest using either the default values or 'better' ones. Currently not used.

Enumerator
TextPathAuto 
TextPathExact 

Definition at line 294 of file KoSvgText.h.

294 {
297};
@ TextPathExact
Definition KoSvgText.h:296

◆ TextRendering

Enumerator
RenderingAuto 
RenderingOptimizeSpeed 
RenderingOptimizeLegibility 
RenderingGeometricPrecision 

Definition at line 314 of file KoSvgText.h.

◆ TextSpaceCollapse

Part of "white-space", NOTE: white-space:break-spaces; is not really covered by this new method yet.

Enumerator
Collapse 

Collapse white space sequences into a single character.

Discard 

Discard all Spaces.

Preserve 

Do not collapse any space.

PreserveBreaks 

Preserve segment breaks like /n, but otherwise collapse all whitespace.

PreserveSpaces 

required for 'xml:space="preserve"' emulation.

Preserve spaces, convert tabs and linebreaks to spaces,

BreakSpaces 

Same as preserve, except each white space and wordseperate is breakable.

Definition at line 96 of file KoSvgText.h.

96 {
97 Collapse,
98 Discard,
99 Preserve,
105};
@ Collapse
Collapse if first or last in line.
@ Preserve
Do not collapse any space.
Definition KoSvgText.h:99
@ BreakSpaces
Same as preserve, except each white space and wordseperate is breakable.
Definition KoSvgText.h:104
@ PreserveBreaks
Definition KoSvgText.h:100
@ Discard
Discard all Spaces.
Definition KoSvgText.h:98
@ PreserveSpaces
required for 'xml:space="preserve"' emulation.
Definition KoSvgText.h:102

◆ TextSpaceTrim

Part of "white-space".

Enumerator
TrimNone 

No trimming.

TrimInner 

Discard white space at the beginning and end of element.

DiscardBefore 

Trim white space before the start of the element.

DiscardAfter 

Trim white space after the end of the element.

Definition at line 123 of file KoSvgText.h.

123 {
124 TrimNone = 0x0,
125 TrimInner = 0x1,
126 DiscardBefore = 0x2,
127 DiscardAfter = 0x4
128};
@ TrimInner
Discard white space at the beginning and end of element.
Definition KoSvgText.h:125
@ DiscardAfter
Trim white space after the end of the element.
Definition KoSvgText.h:127
@ TrimNone
No trimming.
Definition KoSvgText.h:124
@ DiscardBefore
Trim white space before the start of the element.
Definition KoSvgText.h:126

◆ TextTransform

Whether and how to transform text. Not strictly necessary according to SVG2. Fullwidth and FullSizeKana are inside the textTransform Struct.

Enumerator
TextTransformNone 

No transforms.

TextTransformCapitalize 

Convert first letter in word of bicarmel text to upper-case, locale dependant.

TextTransformUppercase 

Convert all bicarmel text to upper-case, locale dependant.

TextTransformLowercase 

Convert all bicarmel text to lower-case, locale dependant.

Definition at line 183 of file KoSvgText.h.

183 {
184 TextTransformNone = 0x0,
189};
@ TextTransformCapitalize
Definition KoSvgText.h:185
@ TextTransformUppercase
Convert all bicarmel text to upper-case, locale dependant.
Definition KoSvgText.h:187
@ TextTransformLowercase
Convert all bicarmel text to lower-case, locale dependant.
Definition KoSvgText.h:188
@ TextTransformNone
No transforms.
Definition KoSvgText.h:184

◆ TextWrap

Part of "white-space", in practice we only support wrap and nowrap.

Enumerator
Wrap 

Do any kind of text wrapping at soft wrapping opportunities, typically greedy.

NoWrap 

Do not do any text wrapping.

Balance 

Select algorithm that tries to ensure white space is balanced instead of as much text as possible on each line.

Stable 

Select algorithm that doesn't change the text before the cursor when adjusting text.

Pretty 

select algorithm that gives the best looking result, may require looking ahead.

Definition at line 109 of file KoSvgText.h.

109 {
110 Wrap,
112 NoWrap,
113 Balance,
115 Stable,
117 Pretty
119};
@ NoWrap
Do not do any text wrapping.
Definition KoSvgText.h:112

◆ UnicodeBidi

These values control the type of bidi-controls we'll inject into the final text.

Enumerator
BidiNormal 

No new bidi-level is started.

BidiEmbed 

Opens an additional Bidi-reordering level.

BidiOverride 

Opens an additional Bidi-reordering level, implicit part of the algorithm is ignored.

BidiIsolate 

Content is ordered as if in a separate paragraph.

BidiIsolateOverride 

Ordered like a directional override inside an isolated paragraph.

BidiPlainText 

Behaves like isolate, except using heuristics defined in P2 and P3 of the unicode bidirectional algorithm.

Definition at line 56 of file KoSvgText.h.

56 {
58 BidiEmbed,
66};
@ BidiNormal
No new bidi-level is started.
Definition KoSvgText.h:57
@ BidiPlainText
Definition KoSvgText.h:64
@ BidiIsolate
Content is ordered as if in a separate paragraph.
Definition KoSvgText.h:61
@ BidiOverride
Definition KoSvgText.h:59
@ BidiEmbed
Opens an additional Bidi-reordering level.
Definition KoSvgText.h:58
@ BidiIsolateOverride
Definition KoSvgText.h:62

◆ WordBreak

Whether to break words.

Enumerator
WordBreakNormal 

Set according to script. Also "break-word".

WordBreakKeepAll 

Never break inside words.

WordBreakBreakAll 

Always break inside words.

Definition at line 132 of file KoSvgText.h.

132 {
136};
@ WordBreakNormal
Set according to script. Also "break-word".
Definition KoSvgText.h:133
@ WordBreakBreakAll
Always break inside words.
Definition KoSvgText.h:135
@ WordBreakKeepAll
Never break inside words.
Definition KoSvgText.h:134

◆ WritingMode

Enumerator
HorizontalTB 

Left to right, lay out new lines bottom of previous. RTL scripts use this with BIDI reordering.

VerticalRL 

Top to bottom, lay out new lines right of the previous. used for CJK scripts.

VerticalLR 

Top to bottom, lay out new lines left of the previous. Used for Mongolian.

Definition at line 37 of file KoSvgText.h.

37 {
44};
@ HorizontalTB
Definition KoSvgText.h:38

Function Documentation

◆ fontFeaturesCaps()

QStringList KoSvgText::fontFeaturesCaps ( const FontFeatureCaps & feature,
const int start,
const int end )

Definition at line 1366 of file KoSvgText.cpp.

1367{
1368 QStringList list;
1369 const QString length = QString("[%1:%2]").arg(start).arg(end);
1370
1371 switch (feature) {
1372 case CapsSmall:
1373 list << "smcp" + length + "=1";
1374 break;
1375 case CapsAllSmall:
1376 list << "smcp" + length + "=1";
1377 list << "c2sc" + length + "=1";
1378 break;
1379 case CapsPetite:
1380 list << "pcap" + length + "=1";
1381 break;
1382 case CapsAllPetite:
1383 list << "pcap" + length + "=1";
1384 list << "c2pc" + length + "=1";
1385 break;
1386 case CapsUnicase:
1387 list << "unic" + length + "=1";
1388 break;
1389 case CapsTitling:
1390 list << "titl" + length + "=1";
1391 break;
1392 default:
1393 break;
1394 }
1395
1396 return list;
1397}
qreal length(const QPointF &vec)
Definition Ellipse.cc:82

References CapsAllPetite, CapsAllSmall, CapsPetite, CapsSmall, CapsTitling, CapsUnicase, and length().

◆ fontFeaturesPosition()

QStringList KoSvgText::fontFeaturesPosition ( const FontFeaturePosition & feature,
const int start,
const int end )

Definition at line 1355 of file KoSvgText.cpp.

1356{
1357 const QString length = QString("[%1:%2]").arg(start).arg(end);
1358 QString tag = feature == PositionSuper? "sups" : feature == PositionSub? "subs": QString();
1359 if (!tag.isEmpty()) {
1360 tag += length;
1361 tag += "=1";
1362 }
1363 return tag.isEmpty()? QStringList(): QStringList(tag);
1364}
QList< QString > QStringList

References length(), PositionSub, and PositionSuper.

◆ fromAutoValue()

QVariant KoSvgText::fromAutoValue ( const KoSvgText::AutoValue & value)
inline

Definition at line 493 of file KoSvgText.h.

493 {
494 return QVariant::fromValue(value);
495}
float value(const T *src, size_t ch)

References value().

◆ operator<<() [1/20]

QDataStream KRITAFLAKE_EXPORT & KoSvgText::operator<< ( QDataStream & out,
const KoSvgText::FontFamilyAxis & axis )

Definition at line 1001 of file KoSvgText.cpp.

1001 {
1002
1003 QDomDocument doc;
1004 QDomElement root = doc.createElement("axis");
1005 root.setAttribute("tagName", axis.tag);
1006 root.setAttribute("min", axis.min);
1007 root.setAttribute("max", axis.max);
1008 root.setAttribute("default", axis.defaultValue);
1009 root.setAttribute("hidden", axis.axisHidden? "true": "false");
1010 root.setAttribute("variable", axis.variableAxis? "true": "false");
1011 for(auto it = axis.localizedLabels.begin(); it != axis.localizedLabels.end(); it++) {
1012 QDomElement name = doc.createElement("name");
1013 name.setAttribute("lang", it.key().bcp47Name());
1014 name.setAttribute("value", it.value());
1015 root.appendChild(name);
1016 }
1017 doc.appendChild(root);
1018 out << doc.toString(0);
1019 return out;
1020}
QHash< QLocale, QString > localizedLabels
Definition KoSvgText.h:777

References KoSvgText::FontFamilyAxis::axisHidden, KoSvgText::FontFamilyAxis::defaultValue, KoSvgText::FontFamilyAxis::localizedLabels, KoSvgText::FontFamilyAxis::max, KoSvgText::FontFamilyAxis::min, KoSvgText::FontFamilyAxis::tag, and KoSvgText::FontFamilyAxis::variableAxis.

◆ operator<<() [2/20]

QDataStream & KoSvgText::operator<< ( QDataStream & out,
const KoSvgText::FontFamilyStyleInfo & style )

Definition at line 1052 of file KoSvgText.cpp.

1052 {
1053
1054 QDomDocument doc;
1055 QDomElement root = doc.createElement("style");
1056 root.setAttribute("italic", style.isItalic? "true": "false");
1057 root.setAttribute("oblique", style.isOblique? "true": "false");
1058 for(auto it = style.instanceCoords.begin(); it != style.instanceCoords.end(); it++) {
1059 QDomElement coord = doc.createElement("coord");
1060 coord.setAttribute("tag", it.key());
1061 coord.setAttribute("value", it.value());
1062 root.appendChild(coord);
1063 }
1064 for(auto it = style.localizedLabels.begin(); it != style.localizedLabels.end(); it++) {
1065 QDomElement name = doc.createElement("name");
1066 name.setAttribute("lang", it.key().bcp47Name());
1067 name.setAttribute("value", it.value());
1068 root.appendChild(name);
1069 }
1070 doc.appendChild(root);
1071 out << doc.toString(0);
1072 return out;
1073}
QHash< QString, float > instanceCoords
Definition KoSvgText.h:816
QHash< QLocale, QString > localizedLabels
Definition KoSvgText.h:815

References KoSvgText::FontFamilyStyleInfo::instanceCoords, KoSvgText::FontFamilyStyleInfo::isItalic, KoSvgText::FontFamilyStyleInfo::isOblique, and KoSvgText::FontFamilyStyleInfo::localizedLabels.

◆ operator<<() [3/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const BackgroundProperty & prop )

Definition at line 454 of file KoSvgText.cpp.

455{
456 dbg.nospace() << "BackgroundProperty(";
457
458 dbg.nospace() << prop.property.data();
459
460 if (KoColorBackground *fill = dynamic_cast<KoColorBackground*>(prop.property.data())) {
461 dbg.nospace() << ", color, " << fill->color();
462 }
463
464 if (KoGradientBackground *fill = dynamic_cast<KoGradientBackground*>(prop.property.data())) {
465 dbg.nospace() << ", gradient, " << fill->gradient();
466 }
467
468 if (KoVectorPatternBackground *fill = dynamic_cast<KoVectorPatternBackground*>(prop.property.data())) {
469 dbg.nospace() << ", pattern, num shapes: " << fill->shapes().size();
470 }
471
472 dbg.nospace() << ")";
473 return dbg.space();
474}
A simple solid color shape background.
A gradient shape background.
QSharedPointer< KoShapeBackground > property
Definition KoSvgText.h:724

References KoSvgText::BackgroundProperty::property.

◆ operator<<() [4/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const CharTransformation & t )

Definition at line 389 of file KoSvgText.cpp.

390{
391 dbg.nospace() << "CharTransformation(";
392
393 bool hasContent = false;
394
395 if (t.xPos) {
396 dbg.nospace() << "xPos = " << *t.xPos;
397 hasContent = true;
398 }
399
400 if (t.yPos) {
401 dbg = addSeparator(dbg, hasContent);
402 dbg.nospace() << "yPos = " << *t.yPos;
403 hasContent = true;
404 }
405
406 if (t.dxPos) {
407 dbg = addSeparator(dbg, hasContent);
408 dbg.nospace() << "dxPos = " << *t.dxPos;
409 hasContent = true;
410 }
411
412 if (t.dyPos) {
413 dbg = addSeparator(dbg, hasContent);
414 dbg.nospace() << "dyPos = " << *t.dyPos;
415 hasContent = true;
416 }
417
418 if (t.rotate) {
419 dbg = addSeparator(dbg, hasContent);
420 dbg.nospace() << "rotate = " << *t.rotate;
421 hasContent = true;
422 }
423
424 dbg.nospace() << ")";
425 return dbg.space();
426}
boost::optional< qreal > yPos
Definition KoSvgText.h:606
boost::optional< qreal > dxPos
Definition KoSvgText.h:607
boost::optional< qreal > dyPos
Definition KoSvgText.h:608
boost::optional< qreal > rotate
Definition KoSvgText.h:609
boost::optional< qreal > xPos
Definition KoSvgText.h:605

References KoSvgText::CharTransformation::dxPos, KoSvgText::CharTransformation::dyPos, KoSvgText::CharTransformation::rotate, KoSvgText::CharTransformation::xPos, and KoSvgText::CharTransformation::yPos.

◆ operator<<() [5/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const CssLengthPercentage & value )

Definition at line 899 of file KoSvgText.cpp.

900{
901 dbg.nospace() << "Length(";
902
903 if (value.unit == CssLengthPercentage::Percentage) {
904 dbg.nospace() << value.value << "%";
905 } else if (value.unit == CssLengthPercentage::Em) {
906 dbg.nospace() << value.value << "em";
907 } else if (value.unit == CssLengthPercentage::Ex) {
908 dbg.nospace() << value.value << "ex";
909 } else if (value.unit == CssLengthPercentage::Cap) {
910 dbg.nospace() << value.value << "cap";
911 } else if (value.unit == CssLengthPercentage::Ch) {
912 dbg.nospace() << value.value << "ch";
913 } else if (value.unit == CssLengthPercentage::Ic) {
914 dbg.nospace() << value.value << "ic";
915 } else if (value.unit == CssLengthPercentage::Lh) {
916 dbg.nospace() << value.value << "lh";
917 } else {
918 dbg.nospace() << value.value << "(pt)";
919 }
920
921 dbg.nospace() << ")";
922 return dbg.space();
923}

References KoSvgText::CssLengthPercentage::Cap, KoSvgText::CssLengthPercentage::Ch, KoSvgText::CssLengthPercentage::Em, KoSvgText::CssLengthPercentage::Ex, KoSvgText::CssLengthPercentage::Ic, KoSvgText::CssLengthPercentage::Lh, KoSvgText::CssLengthPercentage::Percentage, and value().

◆ operator<<() [6/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const FontMetrics & metrics )

Definition at line 1623 of file KoSvgText.cpp.

1624{
1625 const double ftPixel = 1.0;
1626 dbg.nospace() << "FontMetrics(";
1627 dbg.nospace() << "Direction: " << (metrics.isVertical? "Top to bottom. ": "Left to right. ");
1628 dbg.nospace() << "FontSize: " << QString::number(metrics.fontSize*ftPixel) << "px. ";
1629 dbg.nospace() << "Number width: " << QString::number(metrics.zeroAdvance*ftPixel) << "px. ";
1630 dbg.nospace() << "Space width: " << QString::number(metrics.spaceAdvance*ftPixel) << "px. ";
1631 dbg.nospace() << "Ideographic width: " << QString::number(metrics.ideographicAdvance*ftPixel) << "px. ";
1632
1633 dbg.nospace() << "xHeight: " << QString::number(metrics.xHeight*ftPixel) << "px. ";
1634 dbg.nospace() << "cap height: " << QString::number(metrics.capHeight*ftPixel) << "px. ";
1635 dbg.nospace() << "Subscripts: " << QString::number(metrics.subScriptOffset.second*ftPixel) << "px. ";
1636 dbg.nospace() << "Superscripts: " << QString::number(metrics.superScriptOffset.second*ftPixel) << "px. ";
1637 dbg.nospace() << "Ascender: " << QString::number(metrics.ascender*ftPixel) << "px. ";
1638 dbg.nospace() << "Descender: " << QString::number(metrics.descender*ftPixel) << "px. ";
1639 dbg.nospace() << "Linegap: " << QString::number(metrics.lineGap*ftPixel) << "px. ";
1640
1641 dbg.nospace() << "Alphabetic: " << QString::number(metrics.alphabeticBaseline*ftPixel) << "px. ";
1642 dbg.nospace() << "Middle: " << QString::number((metrics.xHeight/2)*ftPixel) << "px. ";
1643 dbg.nospace() << "Mathematical: " << QString::number(metrics.mathematicalBaseline*ftPixel) << "px. ";
1644
1645 dbg.nospace() << "Ideo Over: " << QString::number(metrics.ideographicOverBaseline*ftPixel) << "px. ";
1646 dbg.nospace() << "Central: " << QString::number(metrics.ideographicCenterBaseline*ftPixel) << "px. ";
1647 dbg.nospace() << "Ideo Under: " << QString::number(metrics.ideographicUnderBaseline*ftPixel) << "px. ";
1648
1649 dbg.nospace() << "Ideo Face Over: " << QString::number(metrics.ideographicFaceOverBaseline*ftPixel) << "px. ";
1650 dbg.nospace() << "Ideo Face Under: " << QString::number(metrics.ideographicFaceUnderBaseline*ftPixel) << "px. ";
1651 dbg.nospace() << "Hanging: " << QString::number(metrics.hangingBaseline*ftPixel) << "px. ";
1652 dbg.nospace() << ")";
1653 return dbg.space();
1654}
qint32 ideographicCenterBaseline
default baseline for vertical, centered between over and under.
Definition KoSvgText.h:347
qint32 ideographicUnderBaseline
location of ideographic under baseline from origin, may fall back to descender.
Definition KoSvgText.h:346
QPair< qint32, qint32 > subScriptOffset
subscript baseline height, defaults to 1/5th em below alphabetic.
Definition KoSvgText.h:336
qint32 xHeight
height of X, defaults to 0.5 fontsize.
Definition KoSvgText.h:334
qint32 lineGap
additional linegap between consecutive lines.
Definition KoSvgText.h:341
qint32 zeroAdvance
Advance of the character '0', CSS Unit 'ch', defaults to 0.5 em in horizontal and 1....
Definition KoSvgText.h:330
qint32 ideographicAdvance
Advance of the character 'æ°´' (U+6C34), CSS Unit ic, defaults to 1 em.
Definition KoSvgText.h:332
qint32 ideographicFaceOverBaseline
location of ideographic face over baseline, that is, the top of the glyphs.
Definition KoSvgText.h:352
qint32 ideographicOverBaseline
location of ideographic over baseline from origin.
Definition KoSvgText.h:349
qint32 fontSize
Currently set size, CSS unit 'em'.
Definition KoSvgText.h:329
qint32 ideographicFaceUnderBaseline
location of ideographic face under baseline, that is, the bottom of the glyphs.
Definition KoSvgText.h:351
qint32 alphabeticBaseline
location of alphabetic baseline from origin.
Definition KoSvgText.h:343
qint32 descender
distance for origin to bottom.
Definition KoSvgText.h:340
qint32 ascender
distance from origin to top.
Definition KoSvgText.h:339
qint32 mathematicalBaseline
location of mathematical baseline from origin.
Definition KoSvgText.h:344
qint32 capHeight
Height of capital letters, defaults to ascender.
Definition KoSvgText.h:335
bool isVertical
Different fontMetrics count between vertical and horizontal.
Definition KoSvgText.h:328
qint32 hangingBaseline
location of the hanging baseline used in north brahmic scripts.
Definition KoSvgText.h:354
qint32 spaceAdvance
Advance of the character ' ', used by tabs.
Definition KoSvgText.h:331
QPair< qint32, qint32 > superScriptOffset
superscript baseline height, defaults to 2/3rd above alphabetic.
Definition KoSvgText.h:337

References KoSvgText::FontMetrics::alphabeticBaseline, KoSvgText::FontMetrics::ascender, KoSvgText::FontMetrics::capHeight, KoSvgText::FontMetrics::descender, KoSvgText::FontMetrics::fontSize, KoSvgText::FontMetrics::hangingBaseline, KoSvgText::FontMetrics::ideographicAdvance, KoSvgText::FontMetrics::ideographicCenterBaseline, KoSvgText::FontMetrics::ideographicFaceOverBaseline, KoSvgText::FontMetrics::ideographicFaceUnderBaseline, KoSvgText::FontMetrics::ideographicOverBaseline, KoSvgText::FontMetrics::ideographicUnderBaseline, KoSvgText::FontMetrics::isVertical, KoSvgText::FontMetrics::lineGap, KoSvgText::FontMetrics::mathematicalBaseline, KoSvgText::FontMetrics::spaceAdvance, KoSvgText::FontMetrics::subScriptOffset, KoSvgText::FontMetrics::superScriptOffset, KoSvgText::FontMetrics::xHeight, and KoSvgText::FontMetrics::zeroAdvance.

◆ operator<<() [7/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const KoSvgText::AutoLengthPercentage & value )

Definition at line 984 of file KoSvgText.cpp.

985{
986 if (value.isAuto) {
987 dbg.nospace() << "auto";
988 } else {
989 dbg.nospace() << value.length;
990 }
991 return dbg.space();
992}

References value().

◆ operator<<() [8/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const KoSvgText::AutoValue & value )

Definition at line 289 of file KoSvgText.cpp.

290{
291 dbg.nospace() << (value.isAuto ? "auto" : QString::number(value.customValue));
292 return dbg.space();
293}

References value().

◆ operator<<() [9/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const KoSvgText::CssFontStyleData & value )

Definition at line 295 of file KoSvgText.cpp.

296{
297 if (value.style == QFont::StyleOblique) {
298 dbg.nospace() << "oblique ";
299 dbg.nospace() << value.slantValue;
300 } else {
301 dbg.nospace() << (value.style == QFont::StyleItalic? "italic": "roman");
302 }
303
304
305 return dbg.space();
306}

References value().

◆ operator<<() [10/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const KoSvgText::FontFamilyAxis & axis )

Definition at line 995 of file KoSvgText.cpp.

996{
997 dbg.nospace() << axis.debugInfo();
998 return dbg.space();
999}
QString debugInfo() const
Some variable fonts have axes that are not really supposed to be shown to the user.
Definition KoSvgText.h:785

References KoSvgText::FontFamilyAxis::debugInfo().

◆ operator<<() [11/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const KoSvgText::FontFamilyStyleInfo & style )

Definition at line 1046 of file KoSvgText.cpp.

1047{
1048 dbg.nospace() << style.debugInfo();
1049 return dbg.space();
1050}

References KoSvgText::FontFamilyStyleInfo::debugInfo().

◆ operator<<() [12/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const KoSvgText::FontFeatureEastAsian & feature )

Definition at line 1316 of file KoSvgText.cpp.

1317{
1318 dbg.nospace() << "EastAsianFeatures("<< writeFontFeatureEastAsian(feature) <<")";
1319 return dbg.space();
1320}
QString writeFontFeatureEastAsian(const FontFeatureEastAsian &feature)

References writeFontFeatureEastAsian().

◆ operator<<() [13/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const KoSvgText::FontFeatureLigatures & feature )

Definition at line 1184 of file KoSvgText.cpp.

1185{
1186 dbg.nospace() << "Ligatures("<< writeFontFeatureLigatures(feature) <<")";
1187 return dbg.space();
1188}
QString writeFontFeatureLigatures(const FontFeatureLigatures &feature)

References writeFontFeatureLigatures().

◆ operator<<() [14/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const KoSvgText::FontFeatureNumeric & feature )

Definition at line 1250 of file KoSvgText.cpp.

1251{
1252 dbg.nospace() << "NumericFeatures("<< writeFontFeatureNumeric(feature) <<")";
1253 return dbg.space();
1254}
QString writeFontFeatureNumeric(const FontFeatureNumeric &feature)

References writeFontFeatureNumeric().

◆ operator<<() [15/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const KoSvgText::TabSizeInfo & value )

Definition at line 443 of file KoSvgText.cpp.

444{
445 dbg.nospace() << "TextIndentInfo(";
446 dbg.nospace() << writeTabSize(value);
447 if (value.isNumber) {
448 dbg.nospace() << "x Spaces";
449 }
450 dbg.nospace() << ")";
451 return dbg.space();
452}
QString writeTabSize(const TabSizeInfo tabSize)

References value(), and writeTabSize().

◆ operator<<() [16/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const KoSvgText::TextIndentInfo & value )

Definition at line 435 of file KoSvgText.cpp.

436{
437 dbg.nospace() << "TextIndentInfo(";
438 dbg.nospace() << writeTextIndent(value);
439 dbg.nospace() << ")";
440 return dbg.space();
441}
QString writeTextIndent(const TextIndentInfo textIndent)

References value(), and writeTextIndent().

◆ operator<<() [17/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const KoSvgText::TextUnderlinePosition & value )

Definition at line 1656 of file KoSvgText.cpp.

1657{
1658 dbg.nospace() << "Underline position( horizontal:" << value.horizontalPosition << ", vertical:" << value.verticalPosition << ")";
1659 return dbg.space();
1660}

References value().

◆ operator<<() [18/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const LineHeightInfo & value )

Definition at line 883 of file KoSvgText.cpp.

884{
885 dbg.nospace() << "LineHeightInfo(";
886
887 if (value.isNormal) {
888 dbg.nospace() << "normal";
889 } else if (!value.isNumber) {
890 dbg.nospace() << value.value << "pt";
891 } else {
892 dbg.nospace() << value.value;
893 }
894
895 dbg.nospace() << ")";
896 return dbg.space();
897}

References value().

◆ operator<<() [19/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const StrokeProperty & prop )

Definition at line 476 of file KoSvgText.cpp.

477{
478 dbg.nospace() << "StrokeProperty(";
479
480 dbg.nospace() << prop.property.data();
481
482 if (KoShapeStroke *stroke = dynamic_cast<KoShapeStroke*>(prop.property.data())) {
483 dbg.nospace() << ", " << stroke->resultLinePen();
484 }
485
486 dbg.nospace() << ")";
487 return dbg.space();
488}
QSharedPointer< KoShapeStrokeModel > property
Definition KoSvgText.h:743

References KoSvgText::StrokeProperty::property.

◆ operator<<() [20/20]

QDebug KRITAFLAKE_EXPORT KoSvgText::operator<< ( QDebug dbg,
const TextTransformInfo & t )

Definition at line 428 of file KoSvgText.cpp.

429{
430 dbg.nospace() << "TextTransformInfo(";
431 dbg.nospace() << writeTextTransform(t);
432 dbg.nospace() << ")";
433 return dbg.space();
434}
QString writeTextTransform(const TextTransformInfo textTransform)

References writeTextTransform().

◆ operator>>() [1/2]

QDataStream KRITAFLAKE_EXPORT & KoSvgText::operator>> ( QDataStream & in,
KoSvgText::FontFamilyAxis & axis )

Definition at line 1021 of file KoSvgText.cpp.

1021 {
1022
1023 QString xml;
1024 in >> xml;
1025
1026 QDomDocument doc;
1027 doc.setContent(xml);
1028 QDomElement root = doc.childNodes().at(0).toElement();
1029 axis.tag = root.attribute("tagName");
1030 axis.min = root.attribute("min").toDouble();
1031 axis.max = root.attribute("max").toDouble();
1032 axis.defaultValue = root.attribute("default").toDouble();
1033 axis.axisHidden = root.attribute("hidden") == "true"? true: false;
1034 axis.variableAxis = root.attribute("variable") == "true"? true: false;
1035 QDomNodeList names = root.elementsByTagName("name");
1036 for(int i = 0; i < names.size(); i++) {
1037 QDomElement name = names.at(i).toElement();
1038 QString lang = name.attribute("lang");
1039 QString value = name.attribute("value");
1040 axis.localizedLabels.insert(QLocale(lang), value);
1041 }
1042
1043 return in;
1044}

References KoSvgText::FontFamilyAxis::axisHidden, KoSvgText::FontFamilyAxis::defaultValue, KoSvgText::FontFamilyAxis::localizedLabels, KoSvgText::FontFamilyAxis::max, KoSvgText::FontFamilyAxis::min, KoSvgText::FontFamilyAxis::tag, value(), and KoSvgText::FontFamilyAxis::variableAxis.

◆ operator>>() [2/2]

QDataStream & KoSvgText::operator>> ( QDataStream & in,
KoSvgText::FontFamilyStyleInfo & style )

Definition at line 1074 of file KoSvgText.cpp.

1074 {
1075 QString xml;
1076 in >> xml;
1077
1078 QDomDocument doc;
1079 doc.setContent(xml);
1080 QDomElement root = doc.childNodes().at(0).toElement();
1081 style.isItalic = root.attribute("italic") == "true"? true: false;
1082 style.isOblique = root.attribute("oblique") == "true"? true: false;
1083 QDomNodeList names = root.elementsByTagName("name");
1084 for(int i = 0; i < names.size(); i++) {
1085 QDomElement name = names.at(i).toElement();
1086 QString lang = name.attribute("lang");
1087 QString value = name.attribute("value");
1088 style.localizedLabels.insert(QLocale(lang), value);
1089 }
1090 QDomNodeList coords = root.elementsByTagName("coord");
1091 for(int i = 0; i < coords.size(); i++) {
1092 QDomElement coord = coords.at(i).toElement();
1093 QString tag = coord.attribute("tag");
1094 double value = coord.attribute("value").toDouble();
1095 style.instanceCoords.insert(tag, value);
1096 }
1097
1098 return in;
1099}

References KoSvgText::FontFamilyStyleInfo::instanceCoords, KoSvgText::FontFamilyStyleInfo::isItalic, KoSvgText::FontFamilyStyleInfo::isOblique, KoSvgText::FontFamilyStyleInfo::localizedLabels, and value().

◆ parseAutoLengthPercentageXY()

AutoLengthPercentage KoSvgText::parseAutoLengthPercentageXY ( const QString & value,
const SvgLoadingContext & context,
const QString & autoKeyword,
QRectF bbox,
bool percentageIsViewPort )

Definition at line 972 of file KoSvgText.cpp.

973{
974 return value == autoKeyword ? AutoLengthPercentage()
975 : percentageIsViewPort? AutoLengthPercentage(SvgUtil::parseUnitStruct(context.currentGC(), value, true, true, bbox))
976 : AutoLengthPercentage(SvgUtil::parseTextUnitStruct(context.currentGC(), value));
977}

References SvgLoadingContext::currentGC(), SvgUtil::parseTextUnitStruct(), SvgUtil::parseUnitStruct(), and value().

◆ parseAutoValueAngular()

AutoValue KoSvgText::parseAutoValueAngular ( const QString & value,
const SvgLoadingContext & context,
const QString & autoKeyword )

Definition at line 122 of file KoSvgText.cpp.

123{
124 return value == autoKeyword ? AutoValue() : SvgUtil::parseUnitAngular(context.currentGC(), value);
125}

References SvgLoadingContext::currentGC(), SvgUtil::parseUnitAngular(), and value().

◆ parseAutoValueX()

AutoValue KoSvgText::parseAutoValueX ( const QString & value,
const SvgLoadingContext & context,
const QString & autoKeyword )

Definition at line 107 of file KoSvgText.cpp.

108{
109 return value == autoKeyword ? AutoValue() : SvgUtil::parseUnitX(context.currentGC(), context.resolvedProperties(), value);
110}

References SvgLoadingContext::currentGC(), SvgUtil::parseUnitX(), SvgLoadingContext::resolvedProperties(), and value().

◆ parseAutoValueXY()

AutoValue KoSvgText::parseAutoValueXY ( const QString & value,
const SvgLoadingContext & context,
const QString & autoKeyword )

Definition at line 117 of file KoSvgText.cpp.

118{
119 return value == autoKeyword ? AutoValue() : SvgUtil::parseUnitXY(context.currentGC(), context.resolvedProperties(), value);
120}

References SvgLoadingContext::currentGC(), SvgUtil::parseUnitXY(), SvgLoadingContext::resolvedProperties(), and value().

◆ parseAutoValueY()

AutoValue KoSvgText::parseAutoValueY ( const QString & value,
const SvgLoadingContext & context,
const QString & autoKeyword )

Definition at line 112 of file KoSvgText.cpp.

113{
114 return value == autoKeyword ? AutoValue() : SvgUtil::parseUnitY(context.currentGC(), context.resolvedProperties(), value);
115}

References SvgLoadingContext::currentGC(), SvgUtil::parseUnitY(), SvgLoadingContext::resolvedProperties(), and value().

◆ parseBaseline()

Baseline KoSvgText::parseBaseline ( const QString & value)

Definition at line 169 of file KoSvgText.cpp.

170{
171 return value == "use-script" ? BaselineUseScript
172 : value == "no-change" ? BaselineNoChange
173 : value == "reset-size" ? BaselineResetSize
174 : value == "ideographic" ? BaselineIdeographic
175 : value == "alphabetic" ? BaselineAlphabetic
176 : value == "hanging" ? BaselineHanging
177 : value == "mathematical" ? BaselineMathematical
178 : value == "central" ? BaselineCentral
179 : value == "middle" ? BaselineMiddle
180 : value == "baseline" ? BaselineDominant
181 : (value == "text-after-edge" || value == "after-edge" || value == "text-bottom") ? BaselineTextBottom
182 : (value == "text-before-edge" || value == "before-edge" || value == "text-top") ? BaselineTextTop
183 : BaselineAuto;
184}

References BaselineAlphabetic, BaselineAuto, BaselineCentral, BaselineDominant, BaselineHanging, BaselineIdeographic, BaselineMathematical, BaselineMiddle, BaselineNoChange, BaselineResetSize, BaselineTextBottom, BaselineTextTop, BaselineUseScript, and value().

◆ parseBaselineShiftMode()

BaselineShiftMode KoSvgText::parseBaselineShiftMode ( const QString & value)

Definition at line 186 of file KoSvgText.cpp.

187{
188 return value == "baseline" ? ShiftNone :
189 value == "sub" ? ShiftSub :
190 value == "super" ? ShiftSuper :
191 value == "top" ? ShiftLineTop :
192 value == "bottom" ? ShiftLineBottom :
194}

References ShiftLengthPercentage, ShiftLineBottom, ShiftLineTop, ShiftNone, ShiftSub, ShiftSuper, and value().

◆ parseCSSFontStretch()

int KoSvgText::parseCSSFontStretch ( const QString & value,
int currentStretch )

parseCSSFontStretch For CSS3, the font-stretches were only given as keywords. In Css 4 and above, they also allow values, except in the "font"-shorthand. The css3 bool will restrict parsing to this value for this reason.

Definition at line 779 of file KoSvgText.cpp.

780{
781 int newStretch = 100;
782
783 static constexpr std::array<int, 9> fontStretches = {50, 62, 75, 87, 100, 112, 125, 150, 200};
784
785 if (value == "wider") {
786 const auto it = std::upper_bound(fontStretches.begin(), fontStretches.end(), currentStretch);
787
788 newStretch = it != fontStretches.end() ? *it : fontStretches.back();
789 } else if (value == "narrower") {
790 const auto it =
791 std::upper_bound(fontStretches.rbegin(), fontStretches.rend(), currentStretch, std::greater<int>());
792
793 newStretch = it != fontStretches.rend() ? *it : fontStretches.front();
794 } else {
795 // try to read numerical stretch value
796 bool ok = false;
797 newStretch = value.toInt(&ok, 10);
798
799 if (!ok) {
800 auto it = std::find(fontStretchNames.begin(), fontStretchNames.end(), value);
801 if (it != fontStretchNames.end()) {
802 const auto index = std::distance(fontStretchNames.begin(), it);
803 KIS_ASSERT(index >= 0);
804 newStretch = fontStretches.at(static_cast<size_t>(index));
805 }
806 }
807 }
808 return newStretch;
809}
#define KIS_ASSERT(cond)
Definition kis_assert.h:33

References fontStretchNames, KIS_ASSERT, and value().

◆ parseCSSFontWeight()

int KoSvgText::parseCSSFontWeight ( const QString & value,
int currentWeight )

Definition at line 811 of file KoSvgText.cpp.

812{
813 int weight = 400;
814
815 // map svg weight to qt weight
816 // svg value qt value
817 // 100,200,300 1, 17, 33
818 // 400 50 (normal)
819 // 500,600 58,66
820 // 700 75 (bold)
821 // 800,900 87,99
822 static constexpr std::array<int, 9> svgFontWeights = {100, 200, 300, 400, 500, 600, 700, 800, 900};
823
824 if (value == "bold")
825 weight = 700;
826 else if (value == "bolder") {
827 const auto it = std::upper_bound(svgFontWeights.begin(), svgFontWeights.end(), currentWeight);
828
829 weight = it != svgFontWeights.end() ? *it : svgFontWeights.back();
830 } else if (value == "lighter") {
831 const auto it =
832 std::upper_bound(svgFontWeights.rbegin(), svgFontWeights.rend(), currentWeight, std::greater<int>());
833
834 weight = it != svgFontWeights.rend() ? *it : svgFontWeights.front();
835 } else {
836 bool ok = false;
837
838 // try to read numerical weight value
839 const int parsed = value.toInt(&ok, 10);
840 if (ok) {
841 weight = qBound(0, parsed, 1000);
842 }
843 }
844 return weight;
845}

References value().

◆ parseDirection()

Direction KoSvgText::parseDirection ( const QString & value)

Definition at line 131 of file KoSvgText.cpp.

131 {
133}

References DirectionLeftToRight, DirectionRightToLeft, and value().

◆ parseFontFeatureCaps()

FontFeatureCaps KoSvgText::parseFontFeatureCaps ( const QString & value,
FontFeatureCaps feature )

Definition at line 1333 of file KoSvgText.cpp.

1334{
1335 return value == "small-caps" ? CapsSmall
1336 : value == "all-small-caps" ? CapsAllSmall
1337 : value == "petite-caps" ? CapsPetite
1338 : value == "all-petite-caps" ? CapsAllPetite
1339 : value == "unicase" ? CapsUnicase
1340 : value == "titling-caps" ? CapsTitling
1341 : value == "normal" ? CapsNormal: feature;
1342}

References CapsAllPetite, CapsAllSmall, CapsNormal, CapsPetite, CapsSmall, CapsTitling, CapsUnicase, and value().

◆ parseFontFeatureEastAsian()

FontFeatureEastAsian KoSvgText::parseFontFeatureEastAsian ( const QString & value,
FontFeatureEastAsian features )

Definition at line 1256 of file KoSvgText.cpp.

1257{
1258 if (value == "jis78") {
1259 features.variant = EastAsianJis78;
1260 } else if (value == "jis83") {
1261 features.variant = EastAsianJis83;
1262 } else if (value == "jis90") {
1263 features.variant = EastAsianJis90;
1264 } else if (value == "jis04") {
1265 features.variant = EastAsianJis04;
1266 } else if (value == "simplified") {
1267 features.variant = EastAsianSimplified;
1268 } else if (value == "traditional") {
1269 features.variant = EastAsianTraditional;
1270 } else if (value == "full-width") {
1271 features.width = EastAsianFullWidth;
1272 } else if (value == "proportional-width") {
1274 } else if (value == "ruby") {
1275 features.ruby = true;
1276 } else {
1277 features = FontFeatureEastAsian();
1278 }
1279 return features;
1280}

References EastAsianFullWidth, EastAsianJis04, EastAsianJis78, EastAsianJis83, EastAsianJis90, EastAsianProportionalWidth, EastAsianSimplified, EastAsianTraditional, KoSvgText::FontFeatureEastAsian::ruby, value(), KoSvgText::FontFeatureEastAsian::variant, and KoSvgText::FontFeatureEastAsian::width.

◆ parseFontFeatureLigatures()

FontFeatureLigatures KoSvgText::parseFontFeatureLigatures ( const QString & value,
FontFeatureLigatures features )

Definition at line 1131 of file KoSvgText.cpp.

1132{
1133 if (value == "common-ligatures") {
1134 features.commonLigatures = true;
1135 } else if (value == "no-common-ligatures") {
1136 features.commonLigatures = false;
1137 } else if (value == "discretionary-ligatures") {
1138 features.discretionaryLigatures = true;
1139 } else if (value == "no-discretionary-ligatures") {
1140 features.discretionaryLigatures = false;
1141 } else if (value == "historical-ligatures") {
1142 features.historicalLigatures = true;
1143 } else if (value == "no-historical-ligatures") {
1144 features.historicalLigatures = false;
1145 } else if (value == "contextual") {
1146 features.contextualAlternates = true;
1147 } else if (value == "no-contextual") {
1148 features.contextualAlternates = false;
1149 } else if (value == "none") {
1150 features.commonLigatures = false;
1151 features.discretionaryLigatures = false;
1152 features.historicalLigatures = false;
1153 features.contextualAlternates = false;
1154 }
1155 return features;
1156}
bool commonLigatures
'clig' and 'liga'
Definition KoSvgText.h:848

References KoSvgText::FontFeatureLigatures::commonLigatures, KoSvgText::FontFeatureLigatures::contextualAlternates, KoSvgText::FontFeatureLigatures::discretionaryLigatures, KoSvgText::FontFeatureLigatures::historicalLigatures, and value().

◆ parseFontFeatureNumeric()

FontFeatureNumeric KoSvgText::parseFontFeatureNumeric ( const QString & value,
FontFeatureNumeric features )

Definition at line 1190 of file KoSvgText.cpp.

1191{
1192 if (value == "lining-nums") {
1194 } else if (value == "oldstyle-nums") {
1195 features.style = NumericFigureStyleOld;
1196 } else if (value == "proportional-nums") {
1198 } else if (value == "tabular-nums") {
1200 } else if (value == "diagonal-fractions") {
1202 } else if (value == "stacked-fractions") {
1204 } else if (value == "ordinal") {
1205 features.ordinals = true;
1206 } else if (value == "slashed-zero") {
1207 features.slashedZero = true;
1208 } else {
1209 features = FontFeatureNumeric();
1210 }
1211 return features;
1212}
NumericFractions fractions
Definition KoSvgText.h:940
NumericFigureStyle style
Definition KoSvgText.h:938
NumericFigureSpacing spacing
Definition KoSvgText.h:939

References KoSvgText::FontFeatureNumeric::fractions, NumericFigureSpacingProportional, NumericFigureSpacingTabular, NumericFigureStyleLining, NumericFigureStyleOld, NumericFractionsDiagonal, NumericFractionsStacked, KoSvgText::FontFeatureNumeric::ordinals, KoSvgText::FontFeatureNumeric::slashedZero, KoSvgText::FontFeatureNumeric::spacing, KoSvgText::FontFeatureNumeric::style, and value().

◆ parseFontFeaturePosition()

FontFeaturePosition KoSvgText::parseFontFeaturePosition ( const QString & value,
FontFeaturePosition feature )

Definition at line 1322 of file KoSvgText.cpp.

1323{
1324 return value == "super"? PositionSuper : value == "sub"? PositionSub : value == "normal"? PositionNormal: feature;
1325}

References PositionNormal, PositionSub, PositionSuper, and value().

◆ parseFontStyle()

CssFontStyleData KoSvgText::parseFontStyle ( const QString & value)

Definition at line 1101 of file KoSvgText.cpp.

1102{
1103 CssFontStyleData slant;
1104 QStringList params = value.split(" ");
1105 if (!params.isEmpty()) {
1106 QString style = params.first();
1107 slant.style = style == "italic"? QFont::StyleItalic: style == "oblique"? QFont::StyleOblique: QFont::StyleNormal;
1108 }
1109 if (params.size() > 1) {
1110 QString angle = params.last();
1111 if (angle.endsWith("deg")) {
1112 angle.chop(3);
1113 slant.slantValue.isAuto = false;
1114 slant.slantValue.customValue = angle.toDouble();
1115 }
1116 }
1117 return slant;
1118}
When style is oblique, a custom slant value can be specified for variable fonts.
Definition KoSvgText.h:475
KoSvgText::AutoValue slantValue
Definition KoSvgText.h:479

References KoSvgText::AutoValue::customValue, KoSvgText::AutoValue::isAuto, KoSvgText::CssFontStyleData::slantValue, KoSvgText::CssFontStyleData::style, and value().

◆ parseLengthAdjust()

LengthAdjust KoSvgText::parseLengthAdjust ( const QString & value)

Definition at line 196 of file KoSvgText.cpp.

197{
198 return value == "spacingAndGlyphs" ? LengthAdjustSpacingAndGlyphs : LengthAdjustSpacing;
199}

References LengthAdjustSpacing, LengthAdjustSpacingAndGlyphs, and value().

◆ parseLineBreak()

LineBreak KoSvgText::parseLineBreak ( const QString & value)

Definition at line 618 of file KoSvgText.cpp.

619{
620 return value == "loose" ? LineBreakLoose
621 : value == "normal" ? LineBreakNormal
622 : value == "strict" ? LineBreakStrict
623 : value == "anywhere" ? LineBreakAnywhere
625}

References LineBreakAnywhere, LineBreakAuto, LineBreakLoose, LineBreakNormal, LineBreakStrict, and value().

◆ parseLineHeight()

LineHeightInfo KoSvgText::parseLineHeight ( const QString & value,
const SvgLoadingContext & context )

Definition at line 847 of file KoSvgText.cpp.

848{
849 LineHeightInfo lineHeight;
850 lineHeight.isNormal = value == "normal";
851 qreal parsed = value.toDouble(&lineHeight.isNumber);
852
853 if (lineHeight.isNumber) {
854 lineHeight.value = parsed;
855 } else {
856 lineHeight.length = SvgUtil::parseTextUnitStruct(context.currentGC(), value);
857 }
858
859 // Negative line-height is invalid
860 if (!lineHeight.isNormal && (lineHeight.value < 0 || lineHeight.length.value < 0)) {
861 lineHeight.isNormal = true;
862 lineHeight.isNumber = false;
863 lineHeight.value = 0;
864 lineHeight.length.value = 0;
865 }
866
867 return lineHeight;
868}
SvgGraphicsContext * currentGC() const
Returns the current graphics context.
static KoSvgText::CssLengthPercentage parseTextUnitStruct(SvgGraphicsContext *gc, QStringView unit)
Unit structs for text do not need the percentage to be resolved to viewport in most cases.
Definition SvgUtil.cpp:239
bool isNumber
Length or number.
Definition KoSvgText.h:695
CssLengthPercentage length
Definition KoSvgText.h:693
bool isNormal
It's a number indicating the lineHeight;.
Definition KoSvgText.h:696

References SvgLoadingContext::currentGC(), KoSvgText::LineHeightInfo::isNormal, KoSvgText::LineHeightInfo::isNumber, KoSvgText::LineHeightInfo::length, SvgUtil::parseTextUnitStruct(), KoSvgText::CssLengthPercentage::value, KoSvgText::LineHeightInfo::value, and value().

◆ parseTabSize()

TabSizeInfo KoSvgText::parseTabSize ( const QString & value,
const SvgLoadingContext & context )

Definition at line 748 of file KoSvgText.cpp.

749{
750 TabSizeInfo tabSizeInfo;
751 qreal val = KisDomUtils::toDouble(value, &tabSizeInfo.isNumber);
752 if (tabSizeInfo.isNumber) {
753 tabSizeInfo.value = qMax(0.0, val);
754 } else {
755 tabSizeInfo.length = SvgUtil::parseTextUnitStruct(context.currentGC(), value);
756 }
757 if ((tabSizeInfo.isNumber && tabSizeInfo.value < 0) || tabSizeInfo.length.value < 0) {
758 tabSizeInfo.isNumber = true;
759 tabSizeInfo.value = 0;
760 tabSizeInfo.length.value = 0;
761 }
762 return tabSizeInfo;
763}
double toDouble(const QString &str, bool *ok=nullptr)
qreal value
A length or a number. Length is currently marked 'at-risk'.
Definition KoSvgText.h:675
CssLengthPercentage length
Definition KoSvgText.h:678

References SvgLoadingContext::currentGC(), KoSvgText::TabSizeInfo::isNumber, KoSvgText::TabSizeInfo::length, SvgUtil::parseTextUnitStruct(), KisDomUtils::toDouble(), KoSvgText::CssLengthPercentage::value, KoSvgText::TabSizeInfo::value, and value().

◆ parseTextAlign()

TextAlign KoSvgText::parseTextAlign ( const QString & value)

Definition at line 627 of file KoSvgText.cpp.

628{
629 return value == "end" ? AlignEnd
630 : value == "left" ? AlignLeft
631 : value == "right" ? AlignRight
632 : value == "center" ? AlignCenter
633 : value == "justify" ? AlignJustify
634 : value == "justify-all" ? AlignJustify
635 : value == "match-parent" ? AlignMatchParent
636 : value == "auto" ? AlignLastAuto
637 : // only for text-align-last
639}

References AlignCenter, AlignEnd, AlignJustify, AlignLastAuto, AlignLeft, AlignMatchParent, AlignRight, AlignStart, and value().

◆ parseTextAnchor()

TextAnchor KoSvgText::parseTextAnchor ( const QString & value)

Definition at line 162 of file KoSvgText.cpp.

163{
164 return value == "middle" ? AnchorMiddle :
165 value == "end" ? AnchorEnd :
167}

References AnchorEnd, AnchorMiddle, AnchorStart, and value().

◆ parseTextIndent()

TextIndentInfo KoSvgText::parseTextIndent ( const QString & value,
const SvgLoadingContext & context )

Definition at line 717 of file KoSvgText.cpp.

718{
719 const QStringList values = value.toLower().split(" ");
720 TextIndentInfo textIndent;
721 Q_FOREACH (const QString &param, values) {
722 if (param == "hanging") {
723 textIndent.hanging = true;
724 } else if (param == "each-line") {
725 textIndent.eachLine = true;
726 } else {
727 textIndent.length = SvgUtil::parseTextUnitStruct(context.currentGC(), param);
728 //ToDo: figure out how to detect value is number.
729 //qWarning() << "Unknown parameter in text-indent" << param;
730 }
731 }
732 return textIndent;
733}
bool hanging
Flip the lines to which text-indent is applied.
Definition KoSvgText.h:659
bool eachLine
Apply the text-indent to each line following a hardbreak.
Definition KoSvgText.h:660
CssLengthPercentage length
Definition KoSvgText.h:658

References SvgLoadingContext::currentGC(), KoSvgText::TextIndentInfo::eachLine, KoSvgText::TextIndentInfo::hanging, KoSvgText::TextIndentInfo::length, SvgUtil::parseTextUnitStruct(), and value().

◆ parseTextOrientation()

TextOrientation KoSvgText::parseTextOrientation ( const QString & value)

Definition at line 145 of file KoSvgText.cpp.

146{
147 return value == "upright" ? OrientationUpright : value == "sideways" ? OrientationSideWays : OrientationMixed;
148}

References OrientationMixed, OrientationSideWays, OrientationUpright, and value().

◆ parseTextOrientationFromGlyphOrientation()

TextOrientation KoSvgText::parseTextOrientationFromGlyphOrientation ( AutoValue value)

Definition at line 149 of file KoSvgText.cpp.

150{
151 if (value.isAuto) {
152 return OrientationMixed;
153 } else if (value.customValue == 0) {
154 return OrientationUpright;
155 } else if (value.customValue == 90) {
156 return OrientationSideWays;
157 } else {
158 return OrientationMixed;
159 }
160}

References OrientationMixed, OrientationSideWays, OrientationUpright, and value().

◆ parseTextPathMethod()

TextPathMethod KoSvgText::parseTextPathMethod ( const QString & value)

Definition at line 490 of file KoSvgText.cpp.

491{
492 return value == "stretch" ? TextPathStretch : TextPathAlign;
493}

References TextPathAlign, TextPathStretch, and value().

◆ parseTextPathSide()

TextPathSide KoSvgText::parseTextPathSide ( const QString & value)

Definition at line 500 of file KoSvgText.cpp.

501{
502 return value == "left" ? TextPathSideLeft : TextPathSideRight;
503}

References TextPathSideLeft, TextPathSideRight, and value().

◆ parseTextPathSpacing()

TextPathSpacing KoSvgText::parseTextPathSpacing ( const QString & value)

Definition at line 495 of file KoSvgText.cpp.

496{
497 return value == "auto" ? TextPathAuto : TextPathExact;
498}

References TextPathAuto, TextPathExact, and value().

◆ parseTextRendering()

TextRendering KoSvgText::parseTextRendering ( const QString & value)

Definition at line 1662 of file KoSvgText.cpp.

1663{
1664 if (value == "optimizeSpeed") {
1666 } else if (value == "optimizeLegibility") {
1667 return RenderingOptimizeLegibility;
1668 } else if (value == "geometricPrecision") {
1670 }
1671 return RenderingAuto;
1672}

References RenderingAuto, RenderingGeometricPrecision, RenderingOptimizeLegibility, RenderingOptimizeSpeed, and value().

◆ parseTextTransform()

TextTransformInfo KoSvgText::parseTextTransform ( const QString & value)

Definition at line 668 of file KoSvgText.cpp.

669{
670 TextTransformInfo textTransform;
671 const QStringList values = value.toLower().split(" ");
672 Q_FOREACH (const QString &param, values) {
673 if (param == "capitalize") {
674 textTransform.capitals = TextTransformCapitalize;
675 } else if (param == "uppercase") {
676 textTransform.capitals = TextTransformUppercase;
677 } else if (param == "lowercase") {
678 textTransform.capitals = TextTransformLowercase;
679 } else if (param == "full-width") {
680 textTransform.fullWidth = true;
681 } else if (param == "full-size-kana") {
682 textTransform.fullSizeKana = true;
683 } else if (param == "none") {
684 textTransform.capitals = TextTransformNone;
685 textTransform.fullWidth = false;
686 textTransform.fullSizeKana = false;
687 } else {
688 qWarning() << "Unknown parameter in text-transform" << param;
689 }
690 }
691 return textTransform;
692}
TextTransform capitals
Text transform upper/lower/capitalize.
Definition KoSvgText.h:637

References KoSvgText::TextTransformInfo::capitals, KoSvgText::TextTransformInfo::fullSizeKana, KoSvgText::TextTransformInfo::fullWidth, TextTransformCapitalize, TextTransformLowercase, TextTransformNone, TextTransformUppercase, and value().

◆ parseUnicodeBidi()

UnicodeBidi KoSvgText::parseUnicodeBidi ( const QString & value)

Definition at line 135 of file KoSvgText.cpp.

136{
137 return value == "embed" ? BidiEmbed
138 : value == "bidi-override" ? BidiOverride
139 : value == "isolate" ? BidiIsolate
140 : value == "isolate-override" ? BidiIsolateOverride
141 : value == "plaintext" ? BidiPlainText
142 : BidiNormal;
143}

References BidiEmbed, BidiIsolate, BidiIsolateOverride, BidiNormal, BidiOverride, BidiPlainText, and value().

◆ parseWordBreak()

WordBreak KoSvgText::parseWordBreak ( const QString & value)

Definition at line 613 of file KoSvgText.cpp.

614{
615 return value == "keep-all" ? WordBreakKeepAll : value == "break-all" ? WordBreakBreakAll : WordBreakNormal;
616}

References value(), WordBreakBreakAll, WordBreakKeepAll, and WordBreakNormal.

◆ parseWritingMode()

WritingMode KoSvgText::parseWritingMode ( const QString & value)

Definition at line 127 of file KoSvgText.cpp.

127 {
128 return (value == "tb-rl" || value == "tb" || value == "vertical-rl") ? VerticalRL : (value == "vertical-lr") ? VerticalLR : HorizontalTB;
129}

References HorizontalTB, value(), VerticalLR, and VerticalRL.

◆ whiteSpaceValueToLongHands()

bool KoSvgText::whiteSpaceValueToLongHands ( const QString & value,
TextSpaceCollapse & collapseMethod,
TextWrap & wrapMethod,
TextSpaceTrims & trimMethod )

whiteSpaceValueToLongHands CSS-Text-4 takes CSS-Text-3 whitespace values and treats them as a shorthand for three more specific properties. This method sets the three properties according to the white space value given.

Returns
whether the value could be parsed. Some CSS-Text-3 whitespace values ("break-spaces") have no CSS-Text-4 variants yet, and thus will be interpreted as "Normal" while this boolean returns false.

Definition at line 520 of file KoSvgText.cpp.

521{
522 bool result = true;
523 if (value == "pre") {
524 collapseMethod = Preserve;
525 wrapMethod = NoWrap;
526 trimMethod = TrimNone;
527 } else if (value == "nowrap") {
528 collapseMethod = Collapse;
529 wrapMethod = NoWrap;
530 trimMethod = TrimNone;
531 } else if (value == "pre-wrap") {
532 collapseMethod = Preserve;
533 wrapMethod = Wrap;
534 trimMethod = TrimNone;
535 } else if (value == "pre-wrap") {
536 collapseMethod = BreakSpaces;
537 wrapMethod = Wrap;
538 trimMethod = TrimNone;
539 } else if (value == "pre-line") {
540 collapseMethod = PreserveBreaks;
541 wrapMethod = Wrap;
542 trimMethod = TrimNone;
543 } else { // "normal"
544 if (value != "normal") {
545 result = false;
546 }
547 collapseMethod = Collapse;
548 wrapMethod = Wrap;
549 trimMethod = TrimNone;
550 }
551 return result;
552}

References BreakSpaces, Collapse, NoWrap, Preserve, PreserveBreaks, TrimNone, value(), and Wrap.

◆ writeAlignmentBaseline()

QString KoSvgText::writeAlignmentBaseline ( Baseline value)

Definition at line 258 of file KoSvgText.cpp.

259{
260 return value == BaselineDominant ? "baseline"
261 : value == BaselineIdeographic ? "ideographic"
262 : value == BaselineAlphabetic ? "alphabetic"
263 : value == BaselineHanging ? "hanging"
264 : value == BaselineMathematical ? "mathematical"
265 : value == BaselineCentral ? "central"
266 : value == BaselineMiddle ? "middle"
267 : value == BaselineTextBottom ? "text-bottom"
268 : // text-after-edge in svg 1.1
269 value == BaselineTextTop ? "text-top"
270 : // text-before-edge in svg 1.1
271 "auto";
272}

References BaselineAlphabetic, BaselineCentral, BaselineDominant, BaselineHanging, BaselineIdeographic, BaselineMathematical, BaselineMiddle, BaselineTextBottom, BaselineTextTop, and value().

◆ writeAutoLengthPercentage()

QString KoSvgText::writeAutoLengthPercentage ( const AutoLengthPercentage & value,
const QString & autoKeyword,
bool percentageToEm )

Definition at line 979 of file KoSvgText.cpp.

980{
981 return value.isAuto ? autoKeyword : writeLengthPercentage(value.length, percentageToEm);
982}
QString writeLengthPercentage(const CssLengthPercentage &length, bool percentageAsEm)

References value(), and writeLengthPercentage().

◆ writeAutoValue()

QString KoSvgText::writeAutoValue ( const AutoValue & value,
const QString & autoKeyword )

Definition at line 201 of file KoSvgText.cpp.

202{
203 return value.isAuto ? autoKeyword : KisDomUtils::toString(value.customValue);
204}
QString toString(const QString &value)

References KisDomUtils::toString(), and value().

◆ writeBaselineShiftMode()

QString KoSvgText::writeBaselineShiftMode ( BaselineShiftMode value,
CssLengthPercentage shift )

Definition at line 274 of file KoSvgText.cpp.

275{
276 return value == ShiftNone ? "baseline" :
277 value == ShiftSub ? "sub" :
278 value == ShiftSuper ? "super" :
279 value == ShiftLineTop ? "top" :
280 value == ShiftLineBottom ? "bottom" :
282}

References ShiftLineBottom, ShiftLineTop, ShiftNone, ShiftSub, ShiftSuper, value(), and writeLengthPercentage().

◆ writeDirection()

QString KoSvgText::writeDirection ( Direction value)

Definition at line 215 of file KoSvgText.cpp.

216{
217 return value == DirectionRightToLeft ? "rtl" : "ltr";
218}

References DirectionRightToLeft, and value().

◆ writeDominantBaseline()

QString KoSvgText::writeDominantBaseline ( Baseline value)

Definition at line 240 of file KoSvgText.cpp.

241{
242 return value == BaselineUseScript ? "use-script"
243 : value == BaselineNoChange ? "no-change"
244 : value == BaselineResetSize ? "reset-size"
245 : value == BaselineIdeographic ? "ideographic"
246 : value == BaselineAlphabetic ? "alphabetic"
247 : value == BaselineHanging ? "hanging"
248 : value == BaselineMathematical ? "mathematical"
249 : value == BaselineCentral ? "central"
250 : value == BaselineMiddle ? "middle"
251 : value == BaselineTextBottom ? "text-bottom"
252 : // text-after-edge in svg 1.1
253 value == BaselineTextTop ? "text-top"
254 : // text-before-edge in svg 1.1
255 "auto";
256}

References BaselineAlphabetic, BaselineCentral, BaselineHanging, BaselineIdeographic, BaselineMathematical, BaselineMiddle, BaselineNoChange, BaselineResetSize, BaselineTextBottom, BaselineTextTop, BaselineUseScript, and value().

◆ writeFontFeatureCaps()

QString KoSvgText::writeFontFeatureCaps ( const FontFeatureCaps & value)

Definition at line 1344 of file KoSvgText.cpp.

1345{
1346 return value == CapsSmall ? "small-caps"
1347 : value == CapsAllSmall ? "all-small-caps"
1348 : value == CapsPetite ? "petite-caps"
1349 : value == CapsAllPetite ? "all-petite-caps"
1350 : value == CapsUnicase ? "unicase"
1351 : value == CapsTitling ? "titling-caps"
1352 : "normal";
1353}

References CapsAllPetite, CapsAllSmall, CapsPetite, CapsSmall, CapsTitling, CapsUnicase, and value().

◆ writeFontFeatureEastAsian()

QString KoSvgText::writeFontFeatureEastAsian ( const FontFeatureEastAsian & feature)

Definition at line 1282 of file KoSvgText.cpp.

1283{
1284 if (feature == FontFeatureEastAsian()) {
1285 return "normal";
1286 }
1287 QStringList list;
1288
1289 if (feature.variant == EastAsianJis78) {
1290 list << "jis78";
1291 } else if (feature.variant == EastAsianJis83) {
1292 list << "jis83";
1293 } else if (feature.variant == EastAsianJis90) {
1294 list << "jis90";
1295 } else if (feature.variant == EastAsianJis04) {
1296 list << "jis04";
1297 } else if (feature.variant == EastAsianSimplified) {
1298 list << "simplified";
1299 } else if (feature.variant == EastAsianTraditional) {
1300 list << "traditional";
1301 }
1302
1303 if (feature.width == EastAsianFullWidth) {
1304 list << "full-width";
1305 } else if (feature.width == EastAsianProportionalWidth) {
1306 list << "proportional-width";
1307 }
1308
1309 if (feature.ruby) {
1310 list << "ruby";
1311 }
1312
1313 return list.join(" ");
1314}

References EastAsianFullWidth, EastAsianJis04, EastAsianJis78, EastAsianJis83, EastAsianJis90, EastAsianProportionalWidth, EastAsianSimplified, EastAsianTraditional, KoSvgText::FontFeatureEastAsian::ruby, KoSvgText::FontFeatureEastAsian::variant, and KoSvgText::FontFeatureEastAsian::width.

◆ writeFontFeatureLigatures()

QString KoSvgText::writeFontFeatureLigatures ( const FontFeatureLigatures & feature)

Definition at line 1158 of file KoSvgText.cpp.

1159{
1160 if (feature.commonLigatures && !feature.discretionaryLigatures
1161 && !feature.historicalLigatures && feature.commonLigatures) {
1162 return "normal";
1163 }
1164 if (!feature.commonLigatures && !feature.discretionaryLigatures
1165 && !feature.historicalLigatures && !feature.commonLigatures) {
1166 return "none";
1167 }
1168 QStringList list;
1169 if (!feature.commonLigatures) {
1170 list << "no-common-ligatures";
1171 }
1172 if (feature.discretionaryLigatures) {
1173 list << "discretionary-ligatures";
1174 }
1175 if (feature.historicalLigatures) {
1176 list << "historical-ligatures";
1177 }
1178 if (!feature.contextualAlternates) {
1179 list << "no-contextual";
1180 }
1181 return list.join(" ");
1182}

References KoSvgText::FontFeatureLigatures::commonLigatures, KoSvgText::FontFeatureLigatures::contextualAlternates, KoSvgText::FontFeatureLigatures::discretionaryLigatures, and KoSvgText::FontFeatureLigatures::historicalLigatures.

◆ writeFontFeatureNumeric()

QString KoSvgText::writeFontFeatureNumeric ( const FontFeatureNumeric & feature)

Definition at line 1214 of file KoSvgText.cpp.

1215{
1216 if (feature == FontFeatureNumeric()) {
1217 return "normal";
1218 }
1219 QStringList list;
1220
1221 if (feature.style == NumericFigureStyleLining) {
1222 list << "lining-nums";
1223 } else if (feature.style == NumericFigureStyleOld) {
1224 list << "oldstyle-nums";
1225 }
1226
1227 if (feature.spacing == NumericFigureSpacingProportional) {
1228 list << "proportional-nums";
1229 } else if (feature.spacing == NumericFigureSpacingTabular) {
1230 list << "tabular-nums";
1231 }
1232
1233 if (feature.fractions == NumericFractionsDiagonal) {
1234 list << "diagonal-fractions";
1235 } else if (feature.fractions == NumericFractionsStacked) {
1236 list << "stacked-fractions";
1237 }
1238
1239 if (feature.ordinals) {
1240 list << "ordinal";
1241 }
1242
1243 if (feature.slashedZero) {
1244 list << "slashed-zero";
1245 }
1246
1247 return list.join(" ");
1248}
The FontFeatureLigatures class This struct represents css font-variant-numeric.
Definition KoSvgText.h:935

References KoSvgText::FontFeatureNumeric::fractions, NumericFigureSpacingProportional, NumericFigureSpacingTabular, NumericFigureStyleLining, NumericFigureStyleOld, NumericFractionsDiagonal, NumericFractionsStacked, KoSvgText::FontFeatureNumeric::ordinals, KoSvgText::FontFeatureNumeric::slashedZero, KoSvgText::FontFeatureNumeric::spacing, and KoSvgText::FontFeatureNumeric::style.

◆ writeFontFeaturePosition()

QString KoSvgText::writeFontFeaturePosition ( const FontFeaturePosition & value)

Definition at line 1327 of file KoSvgText.cpp.

1328{
1329 return value == PositionSuper ? "super"
1330 : value == PositionSub? "sub" : "normal";
1331}

References PositionSub, PositionSuper, and value().

◆ writeFontStyle()

QString KoSvgText::writeFontStyle ( CssFontStyleData value)

Definition at line 1120 of file KoSvgText.cpp.

1121{
1122 QString style =
1123 value.style == QFont::StyleItalic ? "italic" :
1124 value.style == QFont::StyleOblique ? "oblique" : "normal";
1125 if (value.style == QFont::StyleOblique && !value.slantValue.isAuto) {
1126 style.append(QString(" ")+QString::number(value.slantValue.customValue)+QString("deg"));
1127 }
1128 return style;
1129}

References value().

◆ writeLengthAdjust()

QString KoSvgText::writeLengthAdjust ( LengthAdjust value)

Definition at line 284 of file KoSvgText.cpp.

285{
286 return value == LengthAdjustSpacingAndGlyphs ? "spacingAndGlyphs" : "spacing";
287}

References LengthAdjustSpacingAndGlyphs, and value().

◆ writeLengthPercentage()

QString KoSvgText::writeLengthPercentage ( const CssLengthPercentage & length,
bool percentageAsEm )

Definition at line 925 of file KoSvgText.cpp.

926{
927 QString val;
928 if (length.unit == CssLengthPercentage::Percentage && !percentageAsEm) {
929 val = KisDomUtils::toString(length.value*100.0) + "%";
930 } else {
931 val = KisDomUtils::toString(length.value);
932 if (length.unit == CssLengthPercentage::Em || length.unit == CssLengthPercentage::Percentage) {
933 val += "em";
934 } else if (length.unit == CssLengthPercentage::Ex) {
935 val += "ex";
936 } else if (length.unit == CssLengthPercentage::Cap) {
937 val += "cap";
938 } else if (length.unit == CssLengthPercentage::Ch) {
939 val += "ch";
940 } else if (length.unit == CssLengthPercentage::Ic) {
941 val += "ic";
942 } else if (length.unit == CssLengthPercentage::Lh) {
943 val += "lh";
944 }
945 }
946 return val;
947}

References KoSvgText::CssLengthPercentage::Cap, KoSvgText::CssLengthPercentage::Ch, KoSvgText::CssLengthPercentage::Em, KoSvgText::CssLengthPercentage::Ex, KoSvgText::CssLengthPercentage::Ic, length(), KoSvgText::CssLengthPercentage::Lh, KoSvgText::CssLengthPercentage::Percentage, and KisDomUtils::toString().

◆ writeLineBreak()

QString KoSvgText::writeLineBreak ( LineBreak value)

Definition at line 646 of file KoSvgText.cpp.

647{
648 return value == LineBreakLoose ? "loose"
649 : value == LineBreakNormal ? "normal"
650 : value == LineBreakStrict ? "strict"
651 : value == LineBreakAnywhere ? "anywhere"
652 : "auto";
653}

References LineBreakAnywhere, LineBreakLoose, LineBreakNormal, LineBreakStrict, and value().

◆ writeLineHeight()

QString KoSvgText::writeLineHeight ( LineHeightInfo lineHeight)

Definition at line 870 of file KoSvgText.cpp.

871{
872 if (lineHeight.isNormal) return QString("normal");
873 QString val = KisDomUtils::toString(lineHeight.value);
874 if (!lineHeight.isNumber) {
875 val = writeLengthPercentage(lineHeight.length);
876 if (lineHeight.length.unit == CssLengthPercentage::Absolute) {
877 val += "px"; // In SVG, due to browsers, the default unit is css px. Krita scales these to pt.
878 }
879 }
880 return val;
881}

References KoSvgText::CssLengthPercentage::Absolute, KoSvgText::LineHeightInfo::isNormal, KoSvgText::LineHeightInfo::isNumber, KoSvgText::LineHeightInfo::length, KisDomUtils::toString(), KoSvgText::CssLengthPercentage::unit, KoSvgText::LineHeightInfo::value, and writeLengthPercentage().

◆ writeTabSize()

QString KoSvgText::writeTabSize ( const TabSizeInfo tabSize)

Definition at line 765 of file KoSvgText.cpp.

766{
767 QString val = KisDomUtils::toString(tabSize.value);
768 if (!tabSize.isNumber) {
769
770 // Tabsize does not support percentage, so if we accidentally set it somewhere, convert to em.
771 val = writeLengthPercentage(tabSize.length, true);
772 if (tabSize.length == CssLengthPercentage::Absolute) {
773 val += "px"; // In SVG, due to browsers, the default unit is css px. Krita scales these to pt.
774 }
775 }
776 return val;
777}

References KoSvgText::CssLengthPercentage::Absolute, KoSvgText::TabSizeInfo::isNumber, KoSvgText::TabSizeInfo::length, KisDomUtils::toString(), KoSvgText::TabSizeInfo::value, and writeLengthPercentage().

◆ writeTextAlign()

QString KoSvgText::writeTextAlign ( TextAlign value)

Definition at line 655 of file KoSvgText.cpp.

656{
657 return value == AlignEnd ? "end"
658 : value == AlignLeft ? "left"
659 : value == AlignRight ? "right"
660 : value == AlignCenter ? "center"
661 : value == AlignJustify ? "justify"
662 : value == AlignMatchParent ? "match-parent"
663 : value == AlignLastAuto ? "auto"
664 : // only for text-align-last
665 "start";
666}

References AlignCenter, AlignEnd, AlignJustify, AlignLastAuto, AlignLeft, AlignMatchParent, AlignRight, and value().

◆ writeTextAnchor()

QString KoSvgText::writeTextAnchor ( TextAnchor value)

Definition at line 235 of file KoSvgText.cpp.

236{
237 return value == AnchorEnd ? "end" : value == AnchorMiddle ? "middle" : "start";
238}

References AnchorEnd, AnchorMiddle, and value().

◆ writeTextIndent()

QString KoSvgText::writeTextIndent ( const TextIndentInfo textIndent)

Definition at line 735 of file KoSvgText.cpp.

736{
737 QStringList values;
738 values.append(writeLengthPercentage(textIndent.length));
739 if (textIndent.hanging) {
740 values.append("hanging");
741 }
742 if (textIndent.eachLine) {
743 values.append("each-line");
744 }
745 return values.join(" ");
746}

References KoSvgText::TextIndentInfo::eachLine, KoSvgText::TextIndentInfo::hanging, KoSvgText::TextIndentInfo::length, and writeLengthPercentage().

◆ writeTextOrientation()

QString KoSvgText::writeTextOrientation ( TextOrientation orientation)

Definition at line 230 of file KoSvgText.cpp.

231{
232 return orientation == OrientationUpright ? "upright" : orientation == OrientationSideWays ? "sideways" : "mixed";
233}

References OrientationSideWays, and OrientationUpright.

◆ writeTextPathMethod()

QString KoSvgText::writeTextPathMethod ( TextPathMethod value)

Definition at line 505 of file KoSvgText.cpp.

506{
507 return value == TextPathAlign ? "align" : "stretch";
508}

References TextPathAlign, and value().

◆ writeTextPathSide()

QString KoSvgText::writeTextPathSide ( TextPathSide value)

Definition at line 515 of file KoSvgText.cpp.

516{
517 return value == TextPathSideLeft ? "left" : "right";
518}

References TextPathSideLeft, and value().

◆ writeTextPathSpacing()

QString KoSvgText::writeTextPathSpacing ( TextPathSpacing value)

Definition at line 510 of file KoSvgText.cpp.

511{
512 return value == TextPathAuto ? "auto" : "exact";
513}

References TextPathAuto, and value().

◆ writeTextRendering()

QString KoSvgText::writeTextRendering ( TextRendering value)

Definition at line 1674 of file KoSvgText.cpp.

1675{
1676 if (value == RenderingOptimizeSpeed) {
1677 return "optimizeSpeed";
1678 } else if (value == RenderingOptimizeLegibility) {
1679 return "optimizeLegibility";
1680 } else if (value == RenderingGeometricPrecision) {
1681 return "geometricPrecision";
1682 } else {
1683 return "auto";
1684 }
1685}

References RenderingGeometricPrecision, RenderingOptimizeLegibility, RenderingOptimizeSpeed, and value().

◆ writeTextTransform()

QString KoSvgText::writeTextTransform ( const TextTransformInfo textTransform)

Definition at line 694 of file KoSvgText.cpp.

695{
696 QStringList values;
697 if (textTransform.capitals == TextTransformNone && !textTransform.fullWidth && !textTransform.fullSizeKana) {
698 values.append("none");
699 } else {
700 if (textTransform.capitals == TextTransformLowercase) {
701 values.append("lowercase");
702 } else if (textTransform.capitals == TextTransformUppercase) {
703 values.append("uppercase");
704 } else if (textTransform.capitals == TextTransformCapitalize) {
705 values.append("capitalize");
706 }
707 if (textTransform.fullWidth) {
708 values.append("full-width");
709 }
710 if (textTransform.fullSizeKana) {
711 values.append("full-size-kana");
712 }
713 }
714 return values.join(" ");
715}

References KoSvgText::TextTransformInfo::capitals, KoSvgText::TextTransformInfo::fullSizeKana, KoSvgText::TextTransformInfo::fullWidth, TextTransformCapitalize, TextTransformLowercase, TextTransformNone, and TextTransformUppercase.

◆ writeUnicodeBidi()

QString KoSvgText::writeUnicodeBidi ( UnicodeBidi value)

Definition at line 220 of file KoSvgText.cpp.

221{
222 return value == BidiEmbed ? "embed"
223 : value == BidiOverride ? "bidi-override"
224 : value == BidiIsolate ? "isolate"
225 : value == BidiIsolateOverride ? "isolate-override"
226 : value == BidiPlainText ? "plaintext"
227 : "normal";
228}

References BidiEmbed, BidiIsolate, BidiIsolateOverride, BidiOverride, BidiPlainText, and value().

◆ writeWhiteSpaceValue() [1/2]

QString KoSvgText::writeWhiteSpaceValue ( TextSpaceCollapse collapseMethod,
TextWrap wrapMethod,
KoSvgText::TextSpaceTrims trimMethod )

writeWhiteSpaceValue determine the CSS-3-Whitespace shorthand value.

See also
whiteSpaceValueToLongHands

◆ writeWhiteSpaceValue() [2/2]

QString KoSvgText::writeWhiteSpaceValue ( TextSpaceCollapse collapseMethod,
TextWrap wrapMethod,
TextSpaceTrims trimMethod )

Definition at line 585 of file KoSvgText.cpp.

586{
587 Q_UNUSED(trimMethod);
588 if (wrapMethod != NoWrap) {
589 if (collapseMethod == Preserve) {
590 return "pre-wrap";
591 } else if (collapseMethod == PreserveBreaks) {
592 return "pre-line";
593 } else if (collapseMethod == BreakSpaces) {
594 return "break-spaces";
595 } else {
596 return "normal";
597 }
598
599 } else {
600 if (collapseMethod == Preserve) {
601 return "pre";
602 } else {
603 return "nowrap";
604 }
605 }
606}

References BreakSpaces, NoWrap, Preserve, and PreserveBreaks.

◆ writeWordBreak()

QString KoSvgText::writeWordBreak ( WordBreak value)

Definition at line 641 of file KoSvgText.cpp.

642{
643 return value == WordBreakKeepAll ? "keep-all" : value == WordBreakBreakAll ? "break-all" : "normal";
644}

References value(), WordBreakBreakAll, and WordBreakKeepAll.

◆ writeWritingMode()

QString KoSvgText::writeWritingMode ( WritingMode value,
bool svg1_1 )

Definition at line 206 of file KoSvgText.cpp.

207{
208 if (svg1_1) {
209 return value == VerticalRL ? "tb" : "lr";
210 } else {
211 return value == VerticalRL ? "vertical-rl" : value == VerticalLR ? "vertical-lr" : "horizontal-tb";
212 }
213}

References value(), VerticalLR, and VerticalRL.

◆ writeXmlSpace()

QString KoSvgText::writeXmlSpace ( TextSpaceCollapse collapseMethod)

Definition at line 608 of file KoSvgText.cpp.

609{
610 return collapseMethod == PreserveSpaces ? "preserve" : "default";
611}

References PreserveSpaces.

◆ xmlSpaceToLongHands()

bool KoSvgText::xmlSpaceToLongHands ( const QString & value,
TextSpaceCollapse & collapseMethod )

xmlSpaceToLongHands This takes xml:space values and converts them to CSS-Text-4 properties.

See also
whiteSpaceValueToLongHands

Definition at line 554 of file KoSvgText.cpp.

555{
556 bool result = true;
557
558 if (value == "preserve") {
559 /*
560 * "When xml:space="preserve", the SVG user agent will do the following
561 * using a copy of the original character data content. It will convert
562 * all newline and tab characters into space characters. Then, it will
563 * draw all space characters, including leading, trailing and multiple
564 * contiguous space characters."
565 */
566 collapseMethod = PreserveSpaces;
567 } else {
568 /*
569 * "When xml:space="default", the SVG user agent will do the following
570 * using a copy of the original character data content. First, it will
571 * remove all newline characters. Then it will convert all tab
572 * characters into space characters. Then, it will strip off all leading
573 * and trailing space characters. Then, all contiguous space characters
574 * will be consolidated."
575 */
576 if (value != "default") {
577 result = false;
578 }
579 collapseMethod = Collapse;
580 }
581
582 return result;
583}

References Collapse, PreserveSpaces, and value().

Variable Documentation

◆ fontSizeNames

const std::array<const char *, 7> KoSvgText::fontSizeNames
static
Initial value:
=
{"xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large"}

Definition at line 552 of file KoSvgText.h.

553 {"xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large"};

◆ fontStretchNames

const std::array<const char *, 9> KoSvgText::fontStretchNames
static
Initial value:
= {"ultra-condensed",
"extra-condensed",
"condensed",
"semi-condensed",
"normal",
"semi-expanded",
"expanded",
"extra-expanded",
"ultra-expanded"}

Definition at line 543 of file KoSvgText.h.

543 {"ultra-condensed",
544 "extra-condensed",
545 "condensed",
546 "semi-condensed",
547 "normal",
548 "semi-expanded",
549 "expanded",
550 "extra-expanded",
551 "ultra-expanded"};