Skip to content

Commit 461fe49

Browse files
Refactor text renderers sequence word wrapping logic
Extract separate TextSequenceWordWrapping class. For special scripts wrap processing apply EPS to occupied area during relayout. LineRenderer: merge and rename moveForward mode booleans and methods. LineRenderer: merge updateSpecialScriptLayoutResults and updateTextRendererLayoutResults to updateTextSequenceLayoutResults. TextRenderer: set containsPossibleBreak always, not only in case of HTML_MODE rendering mode. TextRenderer: set containsPossibleBreak in case of width overflow only if forcePartialSplitOnFirstChar. DEVSIX-1438 Autoported commit. Original commit hash: [4622b05a63]
1 parent c92929a commit 461fe49

File tree

7 files changed

+1095
-985
lines changed

7 files changed

+1095
-985
lines changed

itext.tests/itext.layout.tests/itext/layout/renderer/WordWrapUnitTest.cs

Lines changed: 60 additions & 59 deletions
Large diffs are not rendered by default.

itext/itext.layout/itext/layout/layout/TextLayoutResult.cs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ public class TextLayoutResult : MinMaxWidthLayoutResult {
6060

6161
protected internal bool containsPossibleBreak = false;
6262

63-
protected internal bool lineStartsWithWhiteSpace = false;
63+
protected internal bool startsWithSplitCharacterWhiteSpace = false;
6464

65-
protected internal bool lineEndsWithSplitCharacterOrWhiteSpace = false;
65+
protected internal bool endsWithSplitCharacter = false;
6666

6767
protected internal float leftMinWidth;
6868

@@ -209,50 +209,51 @@ public virtual iText.Layout.Layout.TextLayoutResult SetContainsPossibleBreak(boo
209209

210210
/// <summary>
211211
/// Sets
212-
/// <see cref="IsLineStartsWithWhiteSpace()"/>.
212+
/// <see cref="IsStartsWithSplitCharacterWhiteSpace()"/>.
213213
/// </summary>
214-
/// <param name="lineStartsWithWhiteSpace">indicates if TextRenderer#line starts with a whitespace.</param>
214+
/// <param name="startsWithSplitCharacterWhiteSpace">
215+
/// indicates if TextRenderer#line starts with a split character that is
216+
/// also a whitespace.
217+
/// </param>
215218
/// <returns>
216219
///
217220
/// <see cref="TextLayoutResult">this layout result</see>
218221
/// the setting was applied on.
219222
/// </returns>
220-
/// <seealso cref="IsLineStartsWithWhiteSpace()"/>
221-
public virtual iText.Layout.Layout.TextLayoutResult SetLineStartsWithWhiteSpace(bool lineStartsWithWhiteSpace
223+
/// <seealso cref="IsStartsWithSplitCharacterWhiteSpace()"/>
224+
public virtual iText.Layout.Layout.TextLayoutResult SetStartsWithSplitCharacterWhiteSpace(bool startsWithSplitCharacterWhiteSpace
222225
) {
223-
this.lineStartsWithWhiteSpace = lineStartsWithWhiteSpace;
226+
this.startsWithSplitCharacterWhiteSpace = startsWithSplitCharacterWhiteSpace;
224227
return this;
225228
}
226229

227230
/// <summary>Indicates whether TextRenderer#line starts with a whitespace.</summary>
228231
/// <returns>true if TextRenderer#line starts with a whitespace.</returns>
229-
public virtual bool IsLineStartsWithWhiteSpace() {
230-
return lineStartsWithWhiteSpace;
232+
public virtual bool IsStartsWithSplitCharacterWhiteSpace() {
233+
return startsWithSplitCharacterWhiteSpace;
231234
}
232235

233236
/// <summary>
234237
/// Sets
235-
/// <see cref="IsLineEndsWithSplitCharacterOrWhiteSpace()"/>.
238+
/// <see cref="IsEndsWithSplitCharacter()"/>.
236239
/// </summary>
237-
/// <param name="lineEndsWithSplitCharacterOrWhiteSpace">indicates if TextRenderer#line ends with a splitCharacter.
238-
/// </param>
240+
/// <param name="endsWithSplitCharacter">indicates if TextRenderer#line ends with a splitCharacter.</param>
239241
/// <returns>
240242
///
241243
/// <see cref="TextLayoutResult">this layout result</see>
242244
/// the setting was applied on.
243245
/// </returns>
244-
/// <seealso cref="IsLineEndsWithSplitCharacterOrWhiteSpace()"/>
245-
public virtual iText.Layout.Layout.TextLayoutResult SetLineEndsWithSplitCharacterOrWhiteSpace(bool lineEndsWithSplitCharacterOrWhiteSpace
246-
) {
247-
this.lineEndsWithSplitCharacterOrWhiteSpace = lineEndsWithSplitCharacterOrWhiteSpace;
246+
/// <seealso cref="IsEndsWithSplitCharacter()"/>
247+
public virtual iText.Layout.Layout.TextLayoutResult SetEndsWithSplitCharacter(bool endsWithSplitCharacter) {
248+
this.endsWithSplitCharacter = endsWithSplitCharacter;
248249
return this;
249250
}
250251

251252
/// <summary>Indicates whether TextRenderer#line ends with a splitCharacter.</summary>
252253
/// <returns>true if TextRenderer#line ends with a splitCharacter.</returns>
253254
/// <seealso cref="iText.Layout.Splitting.ISplitCharacters"/>
254-
public virtual bool IsLineEndsWithSplitCharacterOrWhiteSpace() {
255-
return lineEndsWithSplitCharacterOrWhiteSpace;
255+
public virtual bool IsEndsWithSplitCharacter() {
256+
return endsWithSplitCharacter;
256257
}
257258

258259
/// <summary>Sets min width of the leftmost unbreakable part of the TextRenderer#line after layout.</summary>

itext/itext.layout/itext/layout/renderer/AbstractRenderer.cs

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,30 @@ public abstract class AbstractRenderer : IRenderer {
9090
/// <summary>The infinity value which is used while layouting</summary>
9191
protected internal const float INF = 1e6f;
9292

93+
/// <summary>
94+
/// The common ordering index of top side in arrays of four elements which define top, right, bottom,
95+
/// left sides values (e.g. margins, borders, paddings).
96+
/// </summary>
97+
internal const int TOP_SIDE = 0;
98+
99+
/// <summary>
100+
/// The common ordering index of right side in arrays of four elements which define top, right, bottom,
101+
/// left sides values (e.g. margins, borders, paddings).
102+
/// </summary>
103+
internal const int RIGHT_SIDE = 1;
104+
105+
/// <summary>
106+
/// The common ordering index of bottom side in arrays of four elements which define top, right, bottom,
107+
/// left sides values (e.g. margins, borders, paddings).
108+
/// </summary>
109+
internal const int BOTTOM_SIDE = 2;
110+
111+
/// <summary>
112+
/// The common ordering index of left side in arrays of four elements which define top, right, bottom,
113+
/// left sides values (e.g. margins, borders, paddings).
114+
/// </summary>
115+
internal const int LEFT_SIDE = 3;
116+
93117
// TODO linkedList?
94118
protected internal IList<IRenderer> childRenderers = new List<IRenderer>();
95119

@@ -1653,28 +1677,28 @@ protected internal virtual bool AllowLastYLineRecursiveExtraction() {
16531677
/// of the renderer
16541678
/// </returns>
16551679
protected internal virtual Rectangle ApplyMargins(Rectangle rect, UnitValue[] margins, bool reverse) {
1656-
if (!margins[0].IsPointValue()) {
1680+
if (!margins[TOP_SIDE].IsPointValue()) {
16571681
ILog logger = LogManager.GetLogger(typeof(iText.Layout.Renderer.AbstractRenderer));
16581682
logger.Error(MessageFormatUtil.Format(iText.IO.LogMessageConstant.PROPERTY_IN_PERCENTS_NOT_SUPPORTED, Property
16591683
.MARGIN_TOP));
16601684
}
1661-
if (!margins[1].IsPointValue()) {
1685+
if (!margins[RIGHT_SIDE].IsPointValue()) {
16621686
ILog logger = LogManager.GetLogger(typeof(iText.Layout.Renderer.AbstractRenderer));
16631687
logger.Error(MessageFormatUtil.Format(iText.IO.LogMessageConstant.PROPERTY_IN_PERCENTS_NOT_SUPPORTED, Property
16641688
.MARGIN_RIGHT));
16651689
}
1666-
if (!margins[2].IsPointValue()) {
1690+
if (!margins[BOTTOM_SIDE].IsPointValue()) {
16671691
ILog logger = LogManager.GetLogger(typeof(iText.Layout.Renderer.AbstractRenderer));
16681692
logger.Error(MessageFormatUtil.Format(iText.IO.LogMessageConstant.PROPERTY_IN_PERCENTS_NOT_SUPPORTED, Property
16691693
.MARGIN_BOTTOM));
16701694
}
1671-
if (!margins[3].IsPointValue()) {
1695+
if (!margins[LEFT_SIDE].IsPointValue()) {
16721696
ILog logger = LogManager.GetLogger(typeof(iText.Layout.Renderer.AbstractRenderer));
16731697
logger.Error(MessageFormatUtil.Format(iText.IO.LogMessageConstant.PROPERTY_IN_PERCENTS_NOT_SUPPORTED, Property
16741698
.MARGIN_LEFT));
16751699
}
1676-
return rect.ApplyMargins(margins[0].GetValue(), margins[1].GetValue(), margins[2].GetValue(), margins[3].GetValue
1677-
(), reverse);
1700+
return rect.ApplyMargins(margins[TOP_SIDE].GetValue(), margins[RIGHT_SIDE].GetValue(), margins[BOTTOM_SIDE
1701+
].GetValue(), margins[LEFT_SIDE].GetValue(), reverse);
16781702
}
16791703

16801704
/// <summary>Returns margins of the renderer</summary>

0 commit comments

Comments
 (0)