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