< prev index next >

src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/RawHtml.java

Print this page

        

*** 43,55 **** */ public class RawHtml extends Content { private final String rawHtmlContent; public static final Content nbsp = new RawHtml("&nbsp;"); ! public static final Content zws = new RawHtml("​"); /** * Constructor to construct a RawHtml object. * * @param rawHtml raw HTML text to be added --- 43,57 ---- */ public class RawHtml extends Content { private final String rawHtmlContent; + private final static String ZERO_WIDTH_SPACE = "​"; + public static final Content nbsp = new RawHtml("&nbsp;"); ! public static final Content zws = new RawHtml(ZERO_WIDTH_SPACE); /** * Constructor to construct a RawHtml object. * * @param rawHtml raw HTML text to be added
*** 102,131 **** } static int charCount(CharSequence htmlText) { State state = State.TEXT; int count = 0; for (int i = 0; i < htmlText.length(); i++) { char c = htmlText.charAt(i); switch (state) { case TEXT: switch (c) { case '<': state = State.TAG; break; case '&': state = State.ENTITY; ! count++; break; default: count++; } break; case ENTITY: ! if (!Character.isLetterOrDigit(c)) state = State.TEXT; break; case TAG: switch (c) { case '"': --- 104,137 ---- } static int charCount(CharSequence htmlText) { State state = State.TEXT; int count = 0; + int entityStart = 0; for (int i = 0; i < htmlText.length(); i++) { char c = htmlText.charAt(i); switch (state) { case TEXT: switch (c) { case '<': state = State.TAG; break; case '&': state = State.ENTITY; ! entityStart = i; break; default: count++; } break; case ENTITY: ! if (c == ';') { state = State.TEXT; + if (!isZeroWidthSpace(htmlText, entityStart, i+1)) + count++; + } break; case TAG: switch (c) { case '"':
*** 136,150 **** break; } break; case STRING: ! switch (c) { ! case '"': state = State.TAG; - break; } } } return count; } --- 142,155 ---- break; } break; case STRING: ! if (c == '"') { state = State.TAG; } + break; } } return count; }
*** 154,159 **** --- 159,174 ---- @Override public boolean write(Writer out, boolean atNewline) throws IOException { out.write(rawHtmlContent); return rawHtmlContent.endsWith(DocletConstants.NL); } + + private static boolean isZeroWidthSpace(CharSequence cs, int start, int end) { + if (end - start != ZERO_WIDTH_SPACE.length()) + return false; + for (int i = 0; i < ZERO_WIDTH_SPACE.length(); i++) { + if (ZERO_WIDTH_SPACE.charAt(i) != cs.charAt(i + start)) + return false; + } + return true; + } }
< prev index next >