< 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(" ");
! 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(" ");
! 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 >