@NotNull public static String getHtmlWithFonts(@NotNull String input, int style, @NotNull Font baseFont) { int start = baseFont.canDisplayUpTo(input); if (start == -1) return input; Font font = null; StringBuilder result = new StringBuilder(); for (int i = start; i < input.length(); i++) { char c = input.charAt(i); if (baseFont.canDisplay(c)) { if (font != null) result.append("</font>"); result.append(c); font = null; } else if (font != null && font.canDisplay(c)) { result.append(c); } else { if (font != null) result.append("</font>"); font = getFontAbleToDisplay(c, baseFont.getSize(), style, baseFont.getFamily()); if (font != baseFont) result.append("<font face=\"").append(font.getFamily()).append("\">"); result.append(c); } } if (font != null) result.append("</font>"); return result.toString(); }
private static boolean needFontFallback(Font font, String text) { return font.canDisplayUpTo(text) != -1 && text.indexOf(CharacterIterator.DONE) == -1; // see IDEA-137517, TextLayout does not support this character }