1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.platform.font;
16
17 import java.awt.font.FontRenderContext;
18 import java.awt.font.LineBreakMeasurer;
19 import java.awt.font.TextAttribute;
20 import java.text.AttributedString;
21
22 import org.apache.commons.lang3.StringUtils;
23 import org.htmlunit.css.CssPixelValueConverter;
24
25
26
27
28
29
30 public class AwtFontUtil implements FontUtil {
31
32 @Override
33 public int countLines(final String content, final int pixelWidth, final String fontSize) {
34 int lineCount = 0;
35 if (content == null) {
36 return lineCount;
37 }
38
39 final String[] lines = StringUtils.splitByWholeSeparatorPreserveAllTokens(content, "\n");
40 final int fontSizeInt = CssPixelValueConverter.pixelValue(fontSize);
41 final FontRenderContext fontRenderCtx = new FontRenderContext(null, false, true);
42 for (final String line : lines) {
43 if (org.htmlunit.util.StringUtils.isBlank(line)) {
44 lineCount++;
45 }
46 else {
47
48 final AttributedString attributedString = new AttributedString(line);
49 attributedString.addAttribute(TextAttribute.SIZE, fontSizeInt / 1.1);
50 final LineBreakMeasurer lineBreakMeasurer =
51 new LineBreakMeasurer(attributedString.getIterator(), fontRenderCtx);
52 do {
53 lineBreakMeasurer.nextLayout(pixelWidth);
54 lineCount++;
55 }
56 while (lineBreakMeasurer.getPosition() < line.length() && lineCount < 1000);
57 }
58 }
59 return lineCount;
60 }
61 }