< prev index next >
src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/RawHtml.java
Print this page
@@ -43,13 +43,15 @@
*/
public class RawHtml extends Content {
private final String rawHtmlContent;
+ private final static String ZERO_WIDTH_SPACE = "";
+
public static final Content nbsp = new RawHtml(" ");
- public static final Content zws = new RawHtml("");
+ 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,30 +104,34 @@
}
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;
- count++;
+ entityStart = i;
break;
default:
count++;
}
break;
case ENTITY:
- if (!Character.isLetterOrDigit(c))
+ if (c == ';') {
state = State.TEXT;
+ if (!isZeroWidthSpace(htmlText, entityStart, i+1))
+ count++;
+ }
break;
case TAG:
switch (c) {
case '"':
@@ -136,15 +142,14 @@
break;
}
break;
case STRING:
- switch (c) {
- case '"':
+ if (c == '"') {
state = State.TAG;
- break;
}
+ break;
}
}
return count;
}
@@ -154,6 +159,16 @@
@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 >