langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
changeset 21026 b35314edf87a
parent 18404 a5aaa0341fec
child 21035 1ffef0108619
equal deleted inserted replaced
18897:387abca4e9cc 21026:b35314edf87a
   288         HtmlTree script = new HtmlTree(HtmlTag.SCRIPT);
   288         HtmlTree script = new HtmlTree(HtmlTag.SCRIPT);
   289         if(winTitle != null && winTitle.length() > 0) {
   289         if(winTitle != null && winTitle.length() > 0) {
   290             script.addAttr(HtmlAttr.TYPE, "text/javascript");
   290             script.addAttr(HtmlAttr.TYPE, "text/javascript");
   291             String scriptCode = "<!--" + DocletConstants.NL +
   291             String scriptCode = "<!--" + DocletConstants.NL +
   292                     "    if (location.href.indexOf('is-external=true') == -1) {" + DocletConstants.NL +
   292                     "    if (location.href.indexOf('is-external=true') == -1) {" + DocletConstants.NL +
   293                     "        parent.document.title=\"" + winTitle + "\";" + DocletConstants.NL +
   293                     "        parent.document.title=\"" + escapeJavaScriptChars(winTitle) + "\";" + DocletConstants.NL +
   294                     "    }" + DocletConstants.NL +
   294                     "    }" + DocletConstants.NL +
   295                     "//-->" + DocletConstants.NL;
   295                     "//-->" + DocletConstants.NL;
   296             RawHtml scriptContent = new RawHtml(scriptCode);
   296             RawHtml scriptContent = new RawHtml(scriptCode);
   297             script.addContent(scriptContent);
   297             script.addContent(scriptContent);
   298         }
   298         }
   299         return script;
   299         return script;
       
   300     }
       
   301 
       
   302     /**
       
   303      * Returns a String with escaped special JavaScript characters.
       
   304      *
       
   305      * @param s String that needs to be escaped
       
   306      * @return a valid escaped JavaScript string
       
   307      */
       
   308     private static String escapeJavaScriptChars(String s) {
       
   309         StringBuilder sb = new StringBuilder();
       
   310         for (int i = 0; i < s.length(); i++) {
       
   311             char ch = s.charAt(i);
       
   312             switch (ch) {
       
   313                 case '\b':
       
   314                     sb.append("\\b");
       
   315                     break;
       
   316                 case '\t':
       
   317                     sb.append("\\t");
       
   318                     break;
       
   319                 case '\n':
       
   320                     sb.append("\\n");
       
   321                     break;
       
   322                 case '\f':
       
   323                     sb.append("\\f");
       
   324                     break;
       
   325                 case '\r':
       
   326                     sb.append("\\r");
       
   327                     break;
       
   328                 case '"':
       
   329                     sb.append("\\\"");
       
   330                     break;
       
   331                 case '\'':
       
   332                     sb.append("\\\'");
       
   333                     break;
       
   334                 case '\\':
       
   335                     sb.append("\\\\");
       
   336                     break;
       
   337                 default:
       
   338                     if (ch < 32 || ch >= 127) {
       
   339                         sb.append(String.format("\\u%04X", (int)ch));
       
   340                     } else {
       
   341                         sb.append(ch);
       
   342                     }
       
   343                     break;
       
   344             }
       
   345         }
       
   346         return sb.toString();
   300     }
   347     }
   301 
   348 
   302     /**
   349     /**
   303      * Returns a content tree for the SCRIPT tag for the main page(index.html).
   350      * Returns a content tree for the SCRIPT tag for the main page(index.html).
   304      *
   351      *