Skip to content

Commit da09314

Browse files
committed
Consider word's prefix while splitting with hyphenation. Add some new tests.
DEVSIX-1937
1 parent 3c93a42 commit da09314

File tree

5 files changed

+72
-1
lines changed

5 files changed

+72
-1
lines changed

layout/src/main/java/com/itextpdf/layout/renderer/TextRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ public LayoutResult layout(LayoutContext layoutContext) {
378378
String pre = hyph.getPreHyphenText(i);
379379
String pos = hyph.getPostHyphenText(i);
380380
float currentHyphenationChoicePreTextWidth =
381-
getGlyphLineWidth(convertToGlyphLine(pre + hyphenationConfig.getHyphenSymbol()), fontSize, hScale, characterSpacing, wordSpacing);
381+
getGlyphLineWidth(convertToGlyphLine(text.toUnicodeString(currentTextPos, wordBounds[0]) + pre + hyphenationConfig.getHyphenSymbol()), fontSize, hScale, characterSpacing, wordSpacing);
382382
if (currentLineWidth + currentHyphenationChoicePreTextWidth + italicSkewAddition + boldSimulationAddition <= layoutBox.getWidth()) {
383383
hyphenationApplied = true;
384384

layout/src/test/java/com/itextpdf/layout/HyphenateLayoutTest.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,12 @@ This file is part of the iText (R) project.
4646
import com.itextpdf.kernel.pdf.PdfDocument;
4747
import com.itextpdf.kernel.pdf.PdfWriter;
4848
import com.itextpdf.kernel.utils.CompareTool;
49+
import com.itextpdf.layout.element.AreaBreak;
4950
import com.itextpdf.layout.element.Paragraph;
51+
import com.itextpdf.layout.element.Text;
5052
import com.itextpdf.layout.hyphenation.HyphenationConfig;
5153
import com.itextpdf.layout.hyphenation.Hyphenator;
54+
import com.itextpdf.layout.property.TextAlignment;
5255
import com.itextpdf.test.ExtendedITextTest;
5356
import com.itextpdf.test.annotations.type.IntegrationTest;
5457
import org.junit.Assert;
@@ -91,4 +94,61 @@ public void parenthesisTest01() throws Exception {
9194
Assert.assertNull(new CompareTool().compareByContent(outFileName, cmpFileName, destinationFolder, "diff"));
9295
}
9396

97+
@Test
98+
public void uriTest01() throws Exception {
99+
String outFileName = destinationFolder + "uriTest01.pdf";
100+
String cmpFileName = sourceFolder + "cmp_uriTest01.pdf";
101+
102+
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outFileName));
103+
Document document = new Document(pdfDoc, new PageSize(140, 500));
104+
105+
Hyphenator hyphenator = new Hyphenator("en", "en", 3, 3);
106+
HyphenationConfig hyphenationConfig = new HyphenationConfig(hyphenator);
107+
document.setHyphenation(hyphenationConfig);
108+
109+
Paragraph p = new Paragraph("https://stackoverflow.com/");
110+
document.add(p);
111+
p = new Paragraph("http://stackoverflow.com/");
112+
document.add(p);
113+
p = new Paragraph("m://iiiiiiii.com/");
114+
document.add(p);
115+
116+
document.add(new AreaBreak());
117+
118+
p = new Paragraph("https://stackoverflow.com/");
119+
p.setHyphenation(null);
120+
document.add(p);
121+
p = new Paragraph("http://stackoverflow.com/");
122+
p.setHyphenation(null);
123+
document.add(p);
124+
p = new Paragraph("m://iiiiiiii.com/");
125+
p.setHyphenation(null);
126+
document.add(p);
127+
128+
document.close();
129+
130+
Assert.assertNull(new CompareTool().compareByContent(outFileName, cmpFileName, destinationFolder, "diff"));
131+
}
132+
133+
@Test
134+
public void widthTest01() throws Exception {
135+
String outFileName = destinationFolder + "widthTest01.pdf";
136+
String cmpFileName = sourceFolder + "cmp_widthTest01.pdf";
137+
138+
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outFileName));
139+
Document doc = new Document(pdfDoc);
140+
141+
Text text = new Text("Hier ein link https://stackoverflow " + "\n" + " (Sperrvermerk) (Sperrvermerk)" + "\n" + "„Sperrvermerk“ „Sperrvermerk“" + "\n" + "Der Sperrvermerk Sperrvermerk" + "\n" + "correct Sperr|ver|merk");
142+
Paragraph paragraph = new Paragraph(text);
143+
paragraph.setWidth(150);
144+
paragraph.setTextAlignment(TextAlignment.JUSTIFIED);
145+
paragraph.setHyphenation(new HyphenationConfig("de", "DE", 2, 2));
146+
147+
doc.add(paragraph);
148+
149+
doc.close();
150+
151+
Assert.assertNull(new CompareTool().compareByContent(outFileName, cmpFileName, destinationFolder, "diff"));
152+
}
153+
94154
}

layout/src/test/java/com/itextpdf/layout/HyphenateResultTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,17 @@ public void softHyphenTest01() {
7171
testHyphenateResult("de", "Ann\u00ADuit\u00ADätendarl\u00ADehen", new int[]{3, 7, 16});
7272
}
7373

74+
@Test
75+
public void stackoverflowTestDe() {
76+
//https://stackoverflow.com/
77+
testHyphenateResult("de", "https://stackoverflow.com/", new int[]{3, 14, 17});
78+
}
79+
80+
@Test
81+
public void stackoverflowTestEn() {
82+
//https://stackoverflow.com/
83+
testHyphenateResult("en", "https://stackoverflow.com/", new int[]{13, 17});
84+
}
7485

7586
private void testHyphenateResult(String lang, String testWorld, int[] expectedHyphenatePoints) {
7687
String[] parts = lang.split("_");

0 commit comments

Comments
 (0)