8222669: Create and use new html.Entity class

Reviewed-by: hannesw
This commit is contained in:
Jonathan Gibbons 2019-04-24 11:26:44 -07:00
parent baf1349a2f
commit 761466699c
29 changed files with 268 additions and 169 deletions

View File

@ -40,12 +40,16 @@ import javax.lang.model.type.TypeVariable;
import javax.lang.model.util.SimpleTypeVisitor9;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
import static jdk.javadoc.internal.doclets.formats.html.LinkInfoImpl.Kind.*;
import static jdk.javadoc.internal.doclets.formats.html.LinkInfoImpl.Kind.EXECUTABLE_MEMBER_PARAM;
import static jdk.javadoc.internal.doclets.formats.html.LinkInfoImpl.Kind.MEMBER;
import static jdk.javadoc.internal.doclets.formats.html.LinkInfoImpl.Kind.MEMBER_TYPE_PARAMS;
import static jdk.javadoc.internal.doclets.formats.html.LinkInfoImpl.Kind.RECEIVER_TYPE;
/**
* Print method and constructor info.
@ -79,7 +83,7 @@ public abstract class AbstractExecutableMemberWriter extends AbstractMemberWrite
Content typeParameters = getTypeParameters(member);
if (!typeParameters.isEmpty()) {
htmltree.add(typeParameters);
htmltree.add(Contents.SPACE);
htmltree.add(Entity.NO_BREAK_SPACE);
}
}
@ -107,7 +111,7 @@ public abstract class AbstractExecutableMemberWriter extends AbstractMemberWrite
}
String signature = utils.flatSignature((ExecutableElement) member);
if (signature.length() > 2) {
deprecatedLinkContent.add(Contents.ZERO_WIDTH_SPACE);
deprecatedLinkContent.add(Entity.ZERO_WIDTH_SPACE);
}
deprecatedLinkContent.add(signature);
@ -160,7 +164,7 @@ public abstract class AbstractExecutableMemberWriter extends AbstractMemberWrite
param.asType()).varargs(isVarArg));
tree.add(link);
if(name(param).length() > 0) {
tree.add(Contents.SPACE);
tree.add(Entity.NO_BREAK_SPACE);
tree.add(name(param));
}
}
@ -176,11 +180,11 @@ public abstract class AbstractExecutableMemberWriter extends AbstractMemberWrite
protected void addReceiverAnnotations(ExecutableElement member, TypeMirror rcvrType,
List<? extends AnnotationMirror> annotationMirrors, Content tree) {
writer.addReceiverAnnotationInfo(member, rcvrType, annotationMirrors, tree);
tree.add(Contents.SPACE);
tree.add(Entity.NO_BREAK_SPACE);
tree.add(utils.getTypeName(rcvrType, false));
LinkInfoImpl linkInfo = new LinkInfoImpl(configuration, RECEIVER_TYPE, rcvrType);
tree.add(writer.getTypeParameterLinks(linkInfo));
tree.add(Contents.SPACE);
tree.add(Entity.NO_BREAK_SPACE);
tree.add("this");
}
@ -254,7 +258,7 @@ public abstract class AbstractExecutableMemberWriter extends AbstractMemberWrite
if (paramTree.isEmpty()) {
htmltree.add("()");
} else {
htmltree.add(Contents.ZERO_WIDTH_SPACE);
htmltree.add(Entity.ZERO_WIDTH_SPACE);
htmltree.add("(");
htmltree.add(paramTree);
paramTree.add(")");

View File

@ -25,9 +25,13 @@
package jdk.javadoc.internal.doclets.formats.html;
import java.io.*;
import java.util.*;
import java.util.zip.*;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
import java.util.Collection;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
@ -37,6 +41,7 @@ import javax.lang.model.element.TypeElement;
import javax.lang.model.util.SimpleElementVisitor9;
import com.sun.source.doctree.DocTree;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -338,7 +343,7 @@ public class AbstractIndexWriter extends HtmlDocletWriter {
dlTree.add(dt);
Content dd = new HtmlTree(HtmlTag.DD);
if (sii.getDescription().isEmpty()) {
dd.add(Contents.SPACE);
dd.add(Entity.NO_BREAK_SPACE);
} else {
dd.add(sii.getDescription());
}

View File

@ -25,10 +25,10 @@
package jdk.javadoc.internal.doclets.formats.html;
import jdk.javadoc.internal.doclets.formats.html.markup.Table;
import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;
import javax.lang.model.element.Element;
@ -39,18 +39,26 @@ import javax.lang.model.element.TypeParameterElement;
import javax.lang.model.type.TypeMirror;
import com.sun.source.doctree.DocTree;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.Links;
import jdk.javadoc.internal.doclets.formats.html.markup.Table;
import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader;
import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.MemberSummaryWriter;
import jdk.javadoc.internal.doclets.toolkit.Resources;
import jdk.javadoc.internal.doclets.toolkit.taglets.DeprecatedTaglet;
import jdk.javadoc.internal.doclets.toolkit.util.Utils;
import static javax.lang.model.element.Modifier.*;
import static javax.lang.model.element.Modifier.ABSTRACT;
import static javax.lang.model.element.Modifier.NATIVE;
import static javax.lang.model.element.Modifier.PUBLIC;
import static javax.lang.model.element.Modifier.STRICTFP;
import static javax.lang.model.element.Modifier.SYNCHRONIZED;
/**
* The base class for member writers.
@ -256,7 +264,7 @@ public abstract class AbstractMemberWriter implements MemberSummaryWriter {
if (!set.isEmpty()) {
String mods = set.stream().map(Modifier::toString).collect(Collectors.joining(" "));
htmltree.add(mods);
htmltree.add(Contents.SPACE);
htmltree.add(Entity.NO_BREAK_SPACE);
}
}
@ -284,7 +292,7 @@ public abstract class AbstractMemberWriter implements MemberSummaryWriter {
addModifier(member, code);
if (type == null) {
code.add(utils.isClass(member) ? "class" : "interface");
code.add(Contents.SPACE);
code.add(Entity.NO_BREAK_SPACE);
} else {
List<? extends TypeParameterElement> list = utils.isExecutableElement(member)
? ((ExecutableElement)member).getTypeParameters()
@ -297,7 +305,7 @@ public abstract class AbstractMemberWriter implements MemberSummaryWriter {
if (typeParameters.charCount() > 10) {
code.add(new HtmlTree(HtmlTag.BR));
} else {
code.add(Contents.SPACE);
code.add(Entity.NO_BREAK_SPACE);
}
code.add(
writer.getLink(new LinkInfoImpl(configuration,

View File

@ -31,6 +31,7 @@ import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -138,7 +139,7 @@ public class AnnotationTypeFieldWriterImpl extends AbstractMemberWriter
writer.getLink(new LinkInfoImpl(configuration,
LinkInfoImpl.Kind.MEMBER, getType(member)));
pre.add(link);
pre.add(Contents.SPACE);
pre.add(Entity.NO_BREAK_SPACE);
if (configuration.linksource) {
Content memberName = new StringContent(name(member));
writer.addSrcLink(member, memberName, pre);

View File

@ -31,6 +31,7 @@ import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -142,7 +143,7 @@ public class AnnotationTypeRequiredMemberWriterImpl extends AbstractMemberWriter
writer.getLink(new LinkInfoImpl(configuration,
LinkInfoImpl.Kind.MEMBER, getType(member)));
pre.add(link);
pre.add(Contents.SPACE);
pre.add(Entity.NO_BREAK_SPACE);
if (configuration.linksource) {
Content memberName = new StringContent(name(member));
writer.addSrcLink(member, memberName, pre);

View File

@ -32,6 +32,7 @@ import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
import com.sun.source.doctree.DocTree;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -101,7 +102,7 @@ public class AnnotationTypeWriterImpl extends SubWriterHolderWriter
ModuleElement mdle = configuration.docEnv.getElementUtils().getModuleOf(annotationType);
Content typeModuleLabel = HtmlTree.SPAN(HtmlStyle.moduleLabelInType, contents.moduleLabel);
Content moduleNameDiv = HtmlTree.DIV(HtmlStyle.subTitle, typeModuleLabel);
moduleNameDiv.add(Contents.SPACE);
moduleNameDiv.add(Entity.NO_BREAK_SPACE);
moduleNameDiv.add(getModuleLink(mdle, new StringContent(mdle.getQualifiedName())));
div.add(moduleNameDiv);
}
@ -109,7 +110,7 @@ public class AnnotationTypeWriterImpl extends SubWriterHolderWriter
if (!pkg.isUnnamed()) {
Content typePackageLabel = HtmlTree.SPAN(HtmlStyle.packageLabelInType, contents.packageLabel);
Content pkgNameDiv = HtmlTree.DIV(HtmlStyle.subTitle, typePackageLabel);
pkgNameDiv.add(Contents.SPACE);
pkgNameDiv.add(Entity.NO_BREAK_SPACE);
Content pkgNameContent = getPackageLink(pkg, new StringContent(utils.getPackageName(pkg)));
pkgNameDiv.add(pkgNameContent);
div.add(pkgNameDiv);

View File

@ -25,7 +25,11 @@
package jdk.javadoc.internal.doclets.formats.html;
import java.util.*;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
@ -36,6 +40,7 @@ import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.SimpleElementVisitor8;
import com.sun.source.doctree.DocTree;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -122,7 +127,7 @@ public class ClassWriterImpl extends SubWriterHolderWriter implements ClassWrite
ModuleElement mdle = configuration.docEnv.getElementUtils().getModuleOf(typeElement);
Content classModuleLabel = HtmlTree.SPAN(HtmlStyle.moduleLabelInType, contents.moduleLabel);
Content moduleNameDiv = HtmlTree.DIV(HtmlStyle.subTitle, classModuleLabel);
moduleNameDiv.add(Contents.SPACE);
moduleNameDiv.add(Entity.NO_BREAK_SPACE);
moduleNameDiv.add(getModuleLink(mdle,
new StringContent(mdle.getQualifiedName())));
div.add(moduleNameDiv);
@ -131,7 +136,7 @@ public class ClassWriterImpl extends SubWriterHolderWriter implements ClassWrite
if (!pkg.isUnnamed()) {
Content classPackageLabel = HtmlTree.SPAN(HtmlStyle.packageLabelInType, contents.packageLabel);
Content pkgNameDiv = HtmlTree.DIV(HtmlStyle.subTitle, classPackageLabel);
pkgNameDiv.add(Contents.SPACE);
pkgNameDiv.add(Entity.NO_BREAK_SPACE);
Content pkgNameContent = getPackageLink(pkg,
new StringContent(utils.getPackageName(pkg)));
pkgNameDiv.add(pkgNameContent);

View File

@ -25,10 +25,8 @@
package jdk.javadoc.internal.doclets.formats.html;
import jdk.javadoc.internal.doclets.formats.html.markup.Table;
import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader;
import java.util.*;
import java.util.Collection;
import java.util.Set;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.PackageElement;
@ -36,12 +34,15 @@ import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.Navigation;
import jdk.javadoc.internal.doclets.formats.html.markup.Navigation.PageMode;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.formats.html.markup.Table;
import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader;
import jdk.javadoc.internal.doclets.toolkit.ConstantsSummaryWriter;
import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException;
@ -265,7 +266,7 @@ public class ConstantsSummaryWriterImpl extends HtmlDocletWriter implements Cons
for (Modifier mod : member.getModifiers()) {
Content modifier = new StringContent(mod.toString());
code.add(modifier);
code.add(Contents.SPACE);
code.add(Entity.NO_BREAK_SPACE);
}
Content type = getLink(new LinkInfoImpl(configuration,
LinkInfoImpl.Kind.CONSTANT_SUMMARY, member.asType()));

View File

@ -33,6 +33,7 @@ import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -297,7 +298,7 @@ public class ConstructorWriterImpl extends AbstractExecutableMemberWriter
} else if (utils.isPrivate(member)) {
code.add("private ");
} else if (utils.isPublic(member)) {
code.add(Contents.SPACE);
code.add(Entity.NO_BREAK_SPACE);
} else {
code.add(
resources.getText("doclet.Package_private"));

View File

@ -32,8 +32,8 @@ import java.util.regex.Pattern;
import jdk.javadoc.internal.doclets.formats.html.markup.Comment;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.FixedStringContent;
import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.Resources;
@ -52,8 +52,6 @@ import jdk.javadoc.internal.doclets.toolkit.util.VisibleMemberTable;
* only created once per doclet-instance, instead of once per generated page.
*/
public class Contents {
public static final Content SPACE = RawHtml.nbsp;
public static final Content ZERO_WIDTH_SPACE = RawHtml.zws;
public final Content allClassesLabel;
public final Content allImplementedInterfacesLabel;
@ -400,7 +398,7 @@ public class Contents {
int p;
while ((p = text.indexOf(" ", start)) != -1) {
c.add(text.substring(start, p));
c.add(RawHtml.nbsp);
c.add(Entity.NO_BREAK_SPACE);
start = p + 1;
}
c.add(text.substring(start));

View File

@ -33,6 +33,7 @@ import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -248,7 +249,7 @@ public class FieldWriterImpl extends AbstractMemberWriter
}
Content labelHeading = HtmlTree.HEADING(Headings.TypeDeclaration.INHERITED_SUMMARY_HEADING,
label);
labelHeading.add(Contents.SPACE);
labelHeading.add(Entity.NO_BREAK_SPACE);
labelHeading.add(classLink);
inheritedTree.add(labelHeading);
}

View File

@ -25,11 +25,13 @@
package jdk.javadoc.internal.doclets.formats.html;
import jdk.javadoc.internal.doclets.formats.html.markup.Head;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlAttr;
import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader;
import java.util.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -69,8 +71,10 @@ import com.sun.source.doctree.SummaryTree;
import com.sun.source.doctree.SystemPropertyTree;
import com.sun.source.doctree.TextTree;
import com.sun.source.util.SimpleDocTreeVisitor;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.Head;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlAttr;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlDocument;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
@ -79,6 +83,7 @@ import jdk.javadoc.internal.doclets.formats.html.markup.Links;
import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
import jdk.javadoc.internal.doclets.formats.html.markup.Script;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader;
import jdk.javadoc.internal.doclets.toolkit.AnnotationTypeWriter;
import jdk.javadoc.internal.doclets.toolkit.ClassWriter;
import jdk.javadoc.internal.doclets.toolkit.Content;
@ -97,7 +102,12 @@ import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
import jdk.javadoc.internal.doclets.toolkit.util.Utils;
import jdk.javadoc.internal.doclets.toolkit.util.VisibleMemberTable;
import static com.sun.source.doctree.DocTree.Kind.*;
import static com.sun.source.doctree.DocTree.Kind.CODE;
import static com.sun.source.doctree.DocTree.Kind.COMMENT;
import static com.sun.source.doctree.DocTree.Kind.LINK;
import static com.sun.source.doctree.DocTree.Kind.LINK_PLAIN;
import static com.sun.source.doctree.DocTree.Kind.SEE;
import static com.sun.source.doctree.DocTree.Kind.TEXT;
import static jdk.javadoc.internal.doclets.toolkit.util.CommentHelper.SPACER;
@ -502,7 +512,7 @@ public class HtmlDocletWriter {
*/
public Content getTableCaption(Content title) {
Content captionSpan = HtmlTree.SPAN(title);
Content space = Contents.SPACE;
Content space = Entity.NO_BREAK_SPACE;
Content tabSpan = HtmlTree.SPAN(HtmlStyle.tabEnd, space);
Content caption = HtmlTree.CAPTION(captionSpan);
caption.add(tabSpan);
@ -1226,7 +1236,7 @@ public class HtmlDocletWriter {
htmltree.add(div);
}
if (tags.isEmpty()) {
htmltree.add(Contents.SPACE);
htmltree.add(Entity.NO_BREAK_SPACE);
}
}

View File

@ -35,6 +35,7 @@ import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeMirror;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.Resources;
@ -162,7 +163,7 @@ public class LinkFactoryImpl extends LinkFactory {
for (TypeMirror t : vars) {
if (many) {
links.add(",");
links.add(Contents.ZERO_WIDTH_SPACE);
links.add(Entity.ZERO_WIDTH_SPACE);
}
links.add(getTypeParameterLink(linkInfo, t));
many = true;

View File

@ -34,6 +34,7 @@ import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -190,7 +191,7 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter
utils.isClass(holder)
? contents.descfrmClassLabel
: contents.descfrmInterfaceLabel);
descfrmLabel.add(Contents.SPACE);
descfrmLabel.add(Entity.NO_BREAK_SPACE);
descfrmLabel.add(codelLink);
methodDocTree.add(HtmlTree.DIV(HtmlStyle.block, descfrmLabel));
writer.addInlineComment(method, methodDocTree);
@ -297,7 +298,7 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter
}
Content labelHeading = HtmlTree.HEADING(Headings.TypeDeclaration.INHERITED_SUMMARY_HEADING,
label);
labelHeading.add(Contents.SPACE);
labelHeading.add(Entity.NO_BREAK_SPACE);
labelHeading.add(classLink);
inheritedTree.add(labelHeading);
}
@ -353,9 +354,9 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter
.where(writer.links.getName(writer.getAnchor(method))).label(method.getSimpleName()));
Content codeMethLink = HtmlTree.CODE(methlink);
Content dd = HtmlTree.DD(codeMethLink);
dd.add(Contents.SPACE);
dd.add(Entity.NO_BREAK_SPACE);
dd.add(writer.contents.inClass);
dd.add(Contents.SPACE);
dd.add(Entity.NO_BREAK_SPACE);
dd.add(codeOverridenTypeLink);
dl.add(dd);
}
@ -389,9 +390,9 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter
implementedMeth.getSimpleName(), false);
Content codeMethLink = HtmlTree.CODE(methlink);
Content dd = HtmlTree.DD(codeMethLink);
dd.add(Contents.SPACE);
dd.add(Entity.NO_BREAK_SPACE);
dd.add(contents.inInterface);
dd.add(Contents.SPACE);
dd.add(Entity.NO_BREAK_SPACE);
dd.add(codeIntfacLink);
dl.add(dd);
}
@ -409,7 +410,7 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter
Content linkContent = writer.getLink(
new LinkInfoImpl(configuration, LinkInfoImpl.Kind.RETURN_TYPE, type));
htmltree.add(linkContent);
htmltree.add(Contents.SPACE);
htmltree.add(Entity.NO_BREAK_SPACE);
}
}

View File

@ -25,9 +25,6 @@
package jdk.javadoc.internal.doclets.formats.html;
import jdk.javadoc.internal.doclets.formats.html.markup.Table;
import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -46,6 +43,7 @@ import javax.lang.model.util.ElementFilter;
import com.sun.source.doctree.DocTree;
import jdk.javadoc.doclet.DocletEnvironment.ModuleMode;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -53,6 +51,8 @@ import jdk.javadoc.internal.doclets.formats.html.markup.Navigation;
import jdk.javadoc.internal.doclets.formats.html.markup.Navigation.PageMode;
import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.formats.html.markup.Table;
import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader;
import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.ModuleSummaryWriter;
import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
@ -209,7 +209,7 @@ public class ModuleWriterImpl extends HtmlDocletWriter implements ModuleSummaryW
? contents.openModuleLabel : contents.moduleLabel;
Content tHeading = HtmlTree.HEADING(Headings.PAGE_TITLE_HEADING, true,
HtmlStyle.title, label);
tHeading.add(Contents.SPACE);
tHeading.add(Entity.NO_BREAK_SPACE);
Content moduleHead = new RawHtml(heading);
tHeading.add(moduleHead);
div.add(tHeading);
@ -534,7 +534,7 @@ public class ModuleWriterImpl extends HtmlDocletWriter implements ModuleSummaryW
* Add the list of modules.
*
* @param mdleMap map of modules and modifiers
* @param tbody the content tree to which the list will be added
* @param table the table to which the list will be added
*/
private void addModulesList(Map<ModuleElement, Content> mdleMap, Table table) {
for (ModuleElement m : mdleMap.keySet()) {
@ -776,7 +776,7 @@ public class ModuleWriterImpl extends HtmlDocletWriter implements ModuleSummaryW
addSummaryComment(t, summary);
}
} else {
summary.add(Contents.SPACE);
summary.add(Entity.NO_BREAK_SPACE);
}
table.addRow(typeLinkContent, summary);
}
@ -802,9 +802,9 @@ public class ModuleWriterImpl extends HtmlDocletWriter implements ModuleSummaryW
description = providesTrees.get(srv);
desc.add((description != null && !description.isEmpty())
? HtmlTree.DIV(HtmlStyle.block, description)
: Contents.SPACE);
: Entity.NO_BREAK_SPACE);
} else {
desc.add(Contents.SPACE);
desc.add(Entity.NO_BREAK_SPACE);
}
// Only display the implementation details in the "all" mode.
if (moduleMode == ModuleMode.ALL && !implSet.isEmpty()) {
@ -812,7 +812,7 @@ public class ModuleWriterImpl extends HtmlDocletWriter implements ModuleSummaryW
desc.add("(");
HtmlTree implSpan = HtmlTree.SPAN(HtmlStyle.implementationLabel, contents.implementation);
desc.add(implSpan);
desc.add(Contents.SPACE);
desc.add(Entity.NO_BREAK_SPACE);
String sep = "";
for (TypeElement impl : implSet) {
desc.add(sep);

View File

@ -32,6 +32,7 @@ import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
@ -154,7 +155,7 @@ public class NestedClassWriterImpl extends AbstractMemberWriter
: resources.getText("doclet.Nested_Classes_Interfaces_Inherited_From_Class"));
}
Content labelHeading = HtmlTree.HEADING(Headings.TypeDeclaration.SUMMARY_HEADING, label);
labelHeading.add(Contents.SPACE);
labelHeading.add(Entity.NO_BREAK_SPACE);
labelHeading.add(classLink);
inheritedTree.add(labelHeading);
}

View File

@ -25,21 +25,24 @@
package jdk.javadoc.internal.doclets.formats.html;
import jdk.javadoc.internal.doclets.formats.html.markup.Table;
import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader;
import java.util.*;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.TreeSet;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.Navigation;
import jdk.javadoc.internal.doclets.formats.html.markup.Navigation.PageMode;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.formats.html.markup.Table;
import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader;
import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.util.ClassUseMapper;
import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException;
@ -180,7 +183,7 @@ public class PackageUseWriter extends SubWriterHolderWriter {
if (pkg != null && !pkg.isUnnamed()) {
addSummaryComment(pkg, summary);
} else {
summary.add(Contents.SPACE);
summary.add(Entity.NO_BREAK_SPACE);
}
table.addRow(packageLink, summary);
}

View File

@ -25,10 +25,8 @@
package jdk.javadoc.internal.doclets.formats.html;
import jdk.javadoc.internal.doclets.formats.html.markup.Table;
import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader;
import java.util.*;
import java.util.List;
import java.util.SortedSet;
import javax.lang.model.element.ModuleElement;
import javax.lang.model.element.PackageElement;
@ -36,12 +34,15 @@ import javax.lang.model.element.TypeElement;
import com.sun.source.doctree.DocTree;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.Navigation;
import jdk.javadoc.internal.doclets.formats.html.markup.Navigation.PageMode;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.formats.html.markup.Table;
import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader;
import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.PackageSummaryWriter;
import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
@ -120,7 +121,7 @@ public class PackageWriterImpl extends HtmlDocletWriter
ModuleElement mdle = configuration.docEnv.getElementUtils().getModuleOf(packageElement);
Content classModuleLabel = HtmlTree.SPAN(HtmlStyle.moduleLabelInPackage, contents.moduleLabel);
Content moduleNameDiv = HtmlTree.DIV(HtmlStyle.subTitle, classModuleLabel);
moduleNameDiv.add(Contents.SPACE);
moduleNameDiv.add(Entity.NO_BREAK_SPACE);
moduleNameDiv.add(getModuleLink(mdle,
new StringContent(mdle.getQualifiedName().toString())));
div.add(moduleNameDiv);
@ -130,7 +131,7 @@ public class PackageWriterImpl extends HtmlDocletWriter
div.add(annotationContent);
Content tHeading = HtmlTree.HEADING(Headings.PAGE_TITLE_HEADING, true,
HtmlStyle.title, contents.packageLabel);
tHeading.add(Contents.SPACE);
tHeading.add(Entity.NO_BREAK_SPACE);
Content packageHead = new StringContent(heading);
tHeading.add(packageHead);
div.add(tHeading);

View File

@ -25,12 +25,12 @@
package jdk.javadoc.internal.doclets.formats.html;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -41,7 +41,6 @@ import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.MemberSummaryWriter;
import jdk.javadoc.internal.doclets.toolkit.PropertyWriter;
/**
* Writes property documentation in HTML format.
*
@ -161,7 +160,7 @@ public class PropertyWriterImpl extends AbstractMemberWriter
utils.isClass(holder)
? contents.descfrmClassLabel
: contents.descfrmInterfaceLabel);
descfrmLabel.add(Contents.SPACE);
descfrmLabel.add(Entity.NO_BREAK_SPACE);
descfrmLabel.add(codeLink);
propertyDocTree.add(HtmlTree.DIV(HtmlStyle.block, descfrmLabel));
writer.addInlineComment(property, propertyDocTree);
@ -263,7 +262,7 @@ public class PropertyWriterImpl extends AbstractMemberWriter
}
Content labelHeading = HtmlTree.HEADING(Headings.TypeDeclaration.INHERITED_SUMMARY_HEADING,
label);
labelHeading.add(Contents.SPACE);
labelHeading.add(Entity.NO_BREAK_SPACE);
labelHeading.add(classLink);
inheritedTree.add(labelHeading);
}

View File

@ -25,10 +25,11 @@
package jdk.javadoc.internal.doclets.formats.html;
import java.util.*;
import java.util.Set;
import javax.lang.model.element.TypeElement;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -121,7 +122,7 @@ public class SerializedFormWriterImpl extends SubWriterHolderWriter
public Content getPackageHeader(String packageName) {
Content heading = HtmlTree.HEADING(Headings.SerializedForm.PACKAGE_HEADING, true,
contents.packageLabel);
heading.add(Contents.SPACE);
heading.add(Entity.NO_BREAK_SPACE);
heading.add(packageName);
return heading;
}

View File

@ -25,8 +25,10 @@
package jdk.javadoc.internal.doclets.formats.html;
import java.util.*;
import java.util.Set;
import java.util.TreeSet;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -140,13 +142,13 @@ public class SingleIndexWriter extends AbstractIndexWriter {
contentTree.add(
links.createLink(getNameForIndex(unicode),
new StringContent(unicode)));
contentTree.add(Contents.SPACE);
contentTree.add(Entity.NO_BREAK_SPACE);
}
contentTree.add(new HtmlTree(HtmlTag.BR));
contentTree.add(links.createLink(DocPaths.ALLCLASSES_INDEX,
contents.allClassesLabel));
if (!configuration.packages.isEmpty()) {
contentTree.add(Contents.SPACE);
contentTree.add(Entity.NO_BREAK_SPACE);
contentTree.add(links.createLink(DocPaths.ALLPACKAGES_INDEX,
contents.allPackagesLabel));
}

View File

@ -32,6 +32,7 @@ import java.util.ListIterator;
import java.util.Set;
import java.util.TreeSet;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
@ -163,13 +164,13 @@ public class SplitIndexWriter extends AbstractIndexWriter {
int j = i + 1;
contentTree.add(links.createLink(DocPaths.indexN(j),
new StringContent(indexElements.get(i).toString())));
contentTree.add(Contents.SPACE);
contentTree.add(Entity.NO_BREAK_SPACE);
}
contentTree.add(new HtmlTree(HtmlTag.BR));
contentTree.add(links.createLink(pathToRoot.resolve(DocPaths.ALLCLASSES_INDEX),
contents.allClassesLabel));
if (!configuration.packages.isEmpty()) {
contentTree.add(Contents.SPACE);
contentTree.add(Entity.NO_BREAK_SPACE);
contentTree.add(links.createLink(pathToRoot.resolve(DocPaths.ALLPACKAGES_INDEX),
contents.allPackagesLabel));
}

View File

@ -0,0 +1,125 @@
/*
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package jdk.javadoc.internal.doclets.formats.html.markup;
import jdk.javadoc.internal.doclets.toolkit.Content;
import java.io.IOException;
import java.io.Writer;
/**
* A representation of HTML entities.
*/
public class Entity extends Content {
public static final Entity LESS_THAN = new Entity("&lt;");
public static final Entity GREATER_THAN = new Entity("&gt;");
public static final Entity AMPERSAND = new Entity("&amp;");
public static final Entity NO_BREAK_SPACE = new Entity("&nbsp;");
public static final Entity ZERO_WIDTH_SPACE = new Entity("&#8203;") {
@Override
public int charCount() {
return 0;
}
};
public final String text;
private Entity(String text) {
this.text = text;
}
@Override
public void add(Content content) {
throw new UnsupportedOperationException();
}
@Override
public void add(CharSequence stringContent) {
throw new UnsupportedOperationException();
}
@Override
public boolean write(Writer writer, boolean atNewline) throws IOException {
writer.write(text);
return false;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public int charCount() {
return 1;
}
/**
* Escapes the special HTML characters in a given string using the appropriate
* entities.
*
* @param s the string to escape
* @return the string with all of the HTML characters escaped
*/
static String escapeHtmlChars(CharSequence s) {
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
switch (ch) {
// only start building a new string if we need to
case '<': case '>': case '&':
StringBuilder sb = new StringBuilder(s.subSequence(0, i));
escapeHtmlChars(s, i, sb);
return sb.toString();
}
}
return s.toString();
}
/**
* Escapes the special HTML characters in a given string using the appropriate
* entities, appending the results into a string builder.
*
* @param s the string
* @param sb the string builder
*/
static void escapeHtmlChars(CharSequence s, StringBuilder sb) {
escapeHtmlChars(s, 0, sb);
}
private static void escapeHtmlChars(CharSequence s, int start, StringBuilder sb) {
for (int i = start ; i < s.length(); i++) {
char ch = s.charAt(i);
switch (ch) {
case '<': sb.append(Entity.LESS_THAN.text); break;
case '>': sb.append(Entity.GREATER_THAN.text); break;
case '&': sb.append(Entity.AMPERSAND.text); break;
default: sb.append(ch); break;
}
}
}
}

View File

@ -47,9 +47,7 @@ public class FixedStringContent extends Content {
* @param content content for the object
*/
public FixedStringContent(CharSequence content) {
string = needEscape(content)
? escape(content)
: content.toString();
string = Entity.escapeHtmlChars(content);
}
/**
@ -105,29 +103,4 @@ public class FixedStringContent extends Content {
return string.endsWith(DocletConstants.NL);
}
private boolean needEscape(CharSequence cs) {
for (int i = 0; i < cs.length(); i++) {
switch (cs.charAt(i)) {
case '<':
case '>':
case '&':
return true;
}
}
return false;
}
private String escape(CharSequence s) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
switch (ch) {
case '<': sb.append("&lt;"); break;
case '>': sb.append("&gt;"); break;
case '&': sb.append("&amp;"); break;
default: sb.append(ch); break;
}
}
return sb.toString();
}
}

View File

@ -100,7 +100,7 @@ public class HtmlTree extends Content {
public HtmlTree put(HtmlAttr attrName, String attrValue) {
if (attrs.isEmpty())
attrs = new LinkedHashMap<>(3);
attrs.put(nullCheck(attrName), escapeHtmlChars(attrValue));
attrs.put(nullCheck(attrName), Entity.escapeHtmlChars(attrValue));
return this;
}
@ -188,35 +188,6 @@ public class HtmlTree extends Content {
return n;
}
/**
* Given a string, escape all special HTML characters and
* return the result.
*
* @param s The string to check.
* @return the original string with all of the HTML characters escaped.
*/
private static String escapeHtmlChars(String s) {
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
switch (ch) {
// only start building a new string if we need to
case '<': case '>': case '&':
StringBuilder sb = new StringBuilder(s.substring(0, i));
for ( ; i < s.length(); i++) {
ch = s.charAt(i);
switch (ch) {
case '<': sb.append("&lt;"); break;
case '>': sb.append("&gt;"); break;
case '&': sb.append("&amp;"); break;
default: sb.append(ch); break;
}
}
return sb.toString();
}
}
return s;
}
/*
* The sets of ASCII URI characters to be left unencoded.
* See "Uniform Resource Identifier (URI): Generic Syntax"

View File

@ -429,7 +429,7 @@ public class Navigation {
}
if (!listContents.isEmpty()) {
Content li = HtmlTree.LI(contents.summaryLabel);
li.add(Contents.SPACE);
li.add(Entity.NO_BREAK_SPACE);
tree.add(li);
addListToNav(listContents, tree);
}
@ -461,7 +461,7 @@ public class Navigation {
}
if (!listContents.isEmpty()) {
Content li = HtmlTree.LI(contents.moduleSubNavLabel);
li.add(Contents.SPACE);
li.add(Entity.NO_BREAK_SPACE);
tree.add(li);
addListToNav(listContents, tree);
}
@ -665,7 +665,7 @@ public class Navigation {
}
if (!listContents.isEmpty()) {
Content li = HtmlTree.LI(contents.detailLabel);
li.add(Contents.SPACE);
li.add(Entity.NO_BREAK_SPACE);
tree.add(li);
addListToNav(listContents, tree);
}
@ -801,9 +801,9 @@ public class Navigation {
int count = 0;
for (Content liContent : listContents) {
if (count < listContents.size() - 1) {
liContent.add(Contents.SPACE);
liContent.add(Entity.NO_BREAK_SPACE);
liContent.add("|");
liContent.add(Contents.SPACE);
liContent.add(Entity.NO_BREAK_SPACE);
}
tree.add(liContent);
count++;
@ -1005,7 +1005,7 @@ public class Navigation {
fixedNavDiv.add(queue.poll());
fixedNavDiv.add(Position.TOP.endOfNav());
tree.add(fixedNavDiv);
HtmlTree paddingDiv = HtmlTree.DIV(HtmlStyle.navPadding, Contents.SPACE);
HtmlTree paddingDiv = HtmlTree.DIV(HtmlStyle.navPadding, Entity.NO_BREAK_SPACE);
tree.add(paddingDiv);
addFixedNavScript(tree);
} else {

View File

@ -45,10 +45,6 @@ public class RawHtml extends Content {
private final String rawHtmlContent;
public static final Content nbsp = new RawHtml("&nbsp;");
public static final Content zws = new RawHtml("&#8203;");
/**
* Constructor to construct a RawHtml object.
*

View File

@ -59,7 +59,7 @@ public class StringContent extends Content {
*/
public StringContent(CharSequence initialContent) {
stringContent = new StringBuilder();
appendChars(initialContent);
Entity.escapeHtmlChars(initialContent, stringContent);
}
/**
@ -81,7 +81,7 @@ public class StringContent extends Content {
*/
@Override
public void add(CharSequence strContent) {
appendChars(strContent);
Entity.escapeHtmlChars(strContent, stringContent);
}
/**
@ -114,16 +114,4 @@ public class StringContent extends Content {
out.write(s);
return s.endsWith(DocletConstants.NL);
}
private void appendChars(CharSequence s) {
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
switch (ch) {
case '<': stringContent.append("&lt;"); break;
case '>': stringContent.append("&gt;"); break;
case '&': stringContent.append("&amp;"); break;
default: stringContent.append(ch); break;
}
}
}
}

View File

@ -531,6 +531,6 @@ public class Table {
private HtmlTree getCaption(Content title) {
return new HtmlTree(HtmlTag.CAPTION,
HtmlTree.SPAN(title),
HtmlTree.SPAN(tabEnd, Contents.SPACE));
HtmlTree.SPAN(tabEnd, Entity.NO_BREAK_SPACE));
}
}