langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java
author bpatel
Fri, 20 Nov 2015 20:55:07 +0000
changeset 33920 bd731341c405
parent 25874 83c19f00452c
child 38617 d93a7f64e231
permissions -rw-r--r--
8141492: Implement search feature in javadoc Reviewed-by: jjg, ksrini
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10
06bc494ca11e Initial load
duke
parents:
diff changeset
     1
/*
25454
376a52c9540c 8039028: [javadoc] refactor the usage of Util.java
ksrini
parents: 22159
diff changeset
     2
 * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
06bc494ca11e Initial load
duke
parents:
diff changeset
     4
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
06bc494ca11e Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 2216
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
10
06bc494ca11e Initial load
duke
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 2216
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    10
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
06bc494ca11e Initial load
duke
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
06bc494ca11e Initial load
duke
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
06bc494ca11e Initial load
duke
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
06bc494ca11e Initial load
duke
parents:
diff changeset
    15
 * accompanied this code).
06bc494ca11e Initial load
duke
parents:
diff changeset
    16
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
06bc494ca11e Initial load
duke
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
06bc494ca11e Initial load
duke
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
06bc494ca11e Initial load
duke
parents:
diff changeset
    20
 *
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 2216
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 2216
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 2216
diff changeset
    23
 * questions.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    24
 */
06bc494ca11e Initial load
duke
parents:
diff changeset
    25
06bc494ca11e Initial load
duke
parents:
diff changeset
    26
package com.sun.tools.doclets.formats.html;
06bc494ca11e Initial load
duke
parents:
diff changeset
    27
2216
b124d5c924eb 6786690: Javadoc HTML WCAG 2.0 accessibility issues in standard doclet - DL tag and nesting issue
bpatel
parents: 1787
diff changeset
    28
import com.sun.javadoc.*;
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
    29
import com.sun.tools.doclets.formats.html.markup.ContentBuilder;
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
    30
import com.sun.tools.doclets.formats.html.markup.HtmlStyle;
17565
a705fe5e539f 8012174: {@literal} and {@code} should use \"new\" Taglet, not old.
jjg
parents: 17560
diff changeset
    31
import com.sun.tools.doclets.formats.html.markup.HtmlTree;
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
    32
import com.sun.tools.doclets.formats.html.markup.RawHtml;
17565
a705fe5e539f 8012174: {@literal} and {@code} should use \"new\" Taglet, not old.
jjg
parents: 17560
diff changeset
    33
import com.sun.tools.doclets.formats.html.markup.StringContent;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    34
import com.sun.tools.doclets.internal.toolkit.*;
06bc494ca11e Initial load
duke
parents:
diff changeset
    35
import com.sun.tools.doclets.internal.toolkit.builders.SerializedFormBuilder;
06bc494ca11e Initial load
duke
parents:
diff changeset
    36
import com.sun.tools.doclets.internal.toolkit.taglets.*;
06bc494ca11e Initial load
duke
parents:
diff changeset
    37
import com.sun.tools.doclets.internal.toolkit.util.*;
06bc494ca11e Initial load
duke
parents:
diff changeset
    38
06bc494ca11e Initial load
duke
parents:
diff changeset
    39
/**
06bc494ca11e Initial load
duke
parents:
diff changeset
    40
 * The taglet writer that writes HTML.
06bc494ca11e Initial load
duke
parents:
diff changeset
    41
 *
14260
727a84636f12 8000665: fix "internal API" comments on javadoc files
jjg
parents: 9608
diff changeset
    42
 *  <p><b>This is NOT part of any supported API.
727a84636f12 8000665: fix "internal API" comments on javadoc files
jjg
parents: 9608
diff changeset
    43
 *  If you write code that depends on this, you do so at your own risk.
727a84636f12 8000665: fix "internal API" comments on javadoc files
jjg
parents: 9608
diff changeset
    44
 *  This code and its internal interfaces are subject to change or
727a84636f12 8000665: fix "internal API" comments on javadoc files
jjg
parents: 9608
diff changeset
    45
 *  deletion without notice.</b>
727a84636f12 8000665: fix "internal API" comments on javadoc files
jjg
parents: 9608
diff changeset
    46
 *
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    47
 * @since 1.5
06bc494ca11e Initial load
duke
parents:
diff changeset
    48
 * @author Jamie Ho
2216
b124d5c924eb 6786690: Javadoc HTML WCAG 2.0 accessibility issues in standard doclet - DL tag and nesting issue
bpatel
parents: 1787
diff changeset
    49
 * @author Bhavesh Patel (Modified)
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    50
 */
06bc494ca11e Initial load
duke
parents:
diff changeset
    51
06bc494ca11e Initial load
duke
parents:
diff changeset
    52
public class TagletWriterImpl extends TagletWriter {
06bc494ca11e Initial load
duke
parents:
diff changeset
    53
14542
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14358
diff changeset
    54
    private final HtmlDocletWriter htmlWriter;
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14358
diff changeset
    55
    private final ConfigurationImpl configuration;
25454
376a52c9540c 8039028: [javadoc] refactor the usage of Util.java
ksrini
parents: 22159
diff changeset
    56
    private final Utils utils;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    57
06bc494ca11e Initial load
duke
parents:
diff changeset
    58
    public TagletWriterImpl(HtmlDocletWriter htmlWriter, boolean isFirstSentence) {
14542
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14358
diff changeset
    59
        super(isFirstSentence);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    60
        this.htmlWriter = htmlWriter;
14542
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14358
diff changeset
    61
        configuration = htmlWriter.configuration;
25454
376a52c9540c 8039028: [javadoc] refactor the usage of Util.java
ksrini
parents: 22159
diff changeset
    62
        this.utils = configuration.utils;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    63
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
    64
06bc494ca11e Initial load
duke
parents:
diff changeset
    65
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
    66
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
    67
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
    68
    public Content getOutputInstance() {
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
    69
        return new ContentBuilder();
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
    70
    }
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
    71
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
    72
    /**
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
    73
     * {@inheritDoc}
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
    74
     */
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
    75
    protected Content codeTagOutput(Tag tag) {
25454
376a52c9540c 8039028: [javadoc] refactor the usage of Util.java
ksrini
parents: 22159
diff changeset
    76
        Content result = HtmlTree.CODE(new StringContent(utils.normalizeNewlines(tag.text())));
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
    77
        return result;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    78
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
    79
33920
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    80
    protected Content indexTagOutput(Tag tag) {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    81
        String text = tag.text();
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    82
        String tagText = "";
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    83
        String desc = "";
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    84
        if (text.isEmpty() || text.trim().isEmpty()) {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    85
            configuration.message.warning(tag.position(), "doclet.invalid_usage_of_tag", tag.name());
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    86
        } else {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    87
            int len = text.length();
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    88
            int tagTextEnd = 0;
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    89
            int descstart = 0;
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    90
            int start = 0;
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    91
            Character term = ' ';
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    92
            int cp = text.codePointAt(0);
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    93
            if (cp == '"') {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    94
                term = '"';
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    95
                start++;
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    96
            }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    97
            for (int i = start; i < len; i += Character.charCount(cp)) {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    98
                cp = text.codePointAt(i);
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
    99
                if (cp == term) {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   100
                    tagTextEnd = i;
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   101
                    break;
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   102
                }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   103
            }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   104
            if (tagTextEnd < len - 1 && tagTextEnd != 0) {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   105
                descstart = tagTextEnd + 1;
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   106
            }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   107
            String desctext = "";
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   108
            if (descstart > 0) {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   109
                tagText = text.substring(start, tagTextEnd).trim();
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   110
                desctext = text.substring(descstart, len).trim();
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   111
                // strip off the white space which can be between tag description and the
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   112
                // actual label.
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   113
                for (int i = 0; i < desctext.length(); i++) {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   114
                    char ch2 = desctext.charAt(i);
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   115
                    if (!(ch2 == ' ' || ch2 == '\t' || ch2 == '\n')) {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   116
                        desc = desctext.substring(i);
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   117
                        break;
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   118
                    }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   119
                }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   120
            } else {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   121
                if (term == '"') {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   122
                    if (tagTextEnd == 0) {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   123
                        // If unclosed quote, print out a warning and ignore the invalid tag text.
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   124
                        configuration.message.warning(tag.position(), "doclet.invalid_usage_of_tag", tag.name());
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   125
                        tagText = "";
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   126
                    } else {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   127
                        tagText = text.substring(start, tagTextEnd).trim();
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   128
                    }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   129
                } else {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   130
                    tagText = text.trim();
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   131
                }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   132
                desc = "";
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   133
            }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   134
        }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   135
        String anchorName = htmlWriter.getName(tagText);
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   136
        Content result = HtmlTree.A_ID(anchorName, new StringContent(tagText));
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   137
        if (configuration.createindex && !tagText.isEmpty()) {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   138
            SearchIndexItem si = new SearchIndexItem();
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   139
            si.setLabel(tagText);
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   140
            si.setDescription(desc);
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   141
            if (tag.holder() instanceof ProgramElementDoc) {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   142
                if (tag.holder() instanceof MemberDoc) {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   143
                    si.setUrl(DocPath.forClass(((MemberDoc) tag.holder()).containingClass()).getPath()
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   144
                            + "#" + anchorName);
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   145
                    si.setHolder(((MemberDoc) tag.holder()).qualifiedName());
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   146
                } else {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   147
                    si.setUrl(DocPath.forClass((ClassDoc) tag.holder()).getPath() + "#" + anchorName);
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   148
                    si.setHolder(((ClassDoc) tag.holder()).qualifiedName());
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   149
                }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   150
            } else if (tag.holder() instanceof PackageDoc) {
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   151
                si.setUrl(DocPath.forPackage((PackageDoc) tag.holder()).getPath()
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   152
                        + "/" + DocPaths.PACKAGE_SUMMARY.getPath() + "#" + anchorName);
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   153
                si.setHolder(((PackageDoc) tag.holder()).name());
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   154
            }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   155
            si.setCategory(configuration.getResource("doclet.SearchTags").toString());
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   156
            configuration.tagSearchIndex.add(si);
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   157
        }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   158
        return result;
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   159
    }
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   160
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   161
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   162
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   163
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   164
    public Content getDocRootOutput() {
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   165
        String path;
22005
4270ada5dcd1 8025416: doclet not substituting {@docRoot} in some cases
bpatel
parents: 21478
diff changeset
   166
        if (htmlWriter.pathToRoot.isEmpty())
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   167
            path = ".";
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   168
        else
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   169
            path = htmlWriter.pathToRoot.getPath();
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   170
        return new StringContent(path);
17565
a705fe5e539f 8012174: {@literal} and {@code} should use \"new\" Taglet, not old.
jjg
parents: 17560
diff changeset
   171
    }
a705fe5e539f 8012174: {@literal} and {@code} should use \"new\" Taglet, not old.
jjg
parents: 17560
diff changeset
   172
a705fe5e539f 8012174: {@literal} and {@code} should use \"new\" Taglet, not old.
jjg
parents: 17560
diff changeset
   173
    /**
a705fe5e539f 8012174: {@literal} and {@code} should use \"new\" Taglet, not old.
jjg
parents: 17560
diff changeset
   174
     * {@inheritDoc}
a705fe5e539f 8012174: {@literal} and {@code} should use \"new\" Taglet, not old.
jjg
parents: 17560
diff changeset
   175
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   176
    public Content deprecatedTagOutput(Doc doc) {
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   177
        ContentBuilder result = new ContentBuilder();
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   178
        Tag[] deprs = doc.tags("deprecated");
06bc494ca11e Initial load
duke
parents:
diff changeset
   179
        if (doc instanceof ClassDoc) {
25454
376a52c9540c 8039028: [javadoc] refactor the usage of Util.java
ksrini
parents: 22159
diff changeset
   180
            if (utils.isDeprecated((ProgramElementDoc) doc)) {
21478
fa4c7cda1b41 8026567: Use meaningful style names for strong and italic styles.
bpatel
parents: 21023
diff changeset
   181
                result.addContent(HtmlTree.SPAN(HtmlStyle.deprecatedLabel,
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   182
                        new StringContent(configuration.getText("doclet.Deprecated"))));
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   183
                result.addContent(RawHtml.nbsp);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   184
                if (deprs.length > 0) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   185
                    Tag[] commentTags = deprs[0].inlineTags();
06bc494ca11e Initial load
duke
parents:
diff changeset
   186
                    if (commentTags.length > 0) {
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   187
                        result.addContent(commentTagsToOutput(null, doc,
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   188
                            deprs[0].inlineTags(), false)
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   189
                        );
06bc494ca11e Initial load
duke
parents:
diff changeset
   190
                    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   191
                }
06bc494ca11e Initial load
duke
parents:
diff changeset
   192
            }
06bc494ca11e Initial load
duke
parents:
diff changeset
   193
        } else {
06bc494ca11e Initial load
duke
parents:
diff changeset
   194
            MemberDoc member = (MemberDoc) doc;
25454
376a52c9540c 8039028: [javadoc] refactor the usage of Util.java
ksrini
parents: 22159
diff changeset
   195
            if (utils.isDeprecated((ProgramElementDoc) doc)) {
21478
fa4c7cda1b41 8026567: Use meaningful style names for strong and italic styles.
bpatel
parents: 21023
diff changeset
   196
                result.addContent(HtmlTree.SPAN(HtmlStyle.deprecatedLabel,
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   197
                        new StringContent(configuration.getText("doclet.Deprecated"))));
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   198
                result.addContent(RawHtml.nbsp);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   199
                if (deprs.length > 0) {
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   200
                    Content body = commentTagsToOutput(null, doc,
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   201
                        deprs[0].inlineTags(), false);
21023
1192bdc59d82 8026370: javadoc creates empty <span class="italic"></span>
bpatel
parents: 19253
diff changeset
   202
                    if (!body.isEmpty())
21478
fa4c7cda1b41 8026567: Use meaningful style names for strong and italic styles.
bpatel
parents: 21023
diff changeset
   203
                        result.addContent(HtmlTree.SPAN(HtmlStyle.deprecationComment, body));
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   204
                }
06bc494ca11e Initial load
duke
parents:
diff changeset
   205
            } else {
25454
376a52c9540c 8039028: [javadoc] refactor the usage of Util.java
ksrini
parents: 22159
diff changeset
   206
                if (utils.isDeprecated(member.containingClass())) {
21478
fa4c7cda1b41 8026567: Use meaningful style names for strong and italic styles.
bpatel
parents: 21023
diff changeset
   207
                    result.addContent(HtmlTree.SPAN(HtmlStyle.deprecatedLabel,
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   208
                            new StringContent(configuration.getText("doclet.Deprecated"))));
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   209
                    result.addContent(RawHtml.nbsp);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   210
                }
06bc494ca11e Initial load
duke
parents:
diff changeset
   211
            }
06bc494ca11e Initial load
duke
parents:
diff changeset
   212
        }
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   213
        return result;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   214
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   215
06bc494ca11e Initial load
duke
parents:
diff changeset
   216
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   217
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   218
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   219
    protected Content literalTagOutput(Tag tag) {
25454
376a52c9540c 8039028: [javadoc] refactor the usage of Util.java
ksrini
parents: 22159
diff changeset
   220
        Content result = new StringContent(utils.normalizeNewlines(tag.text()));
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   221
        return result;
17565
a705fe5e539f 8012174: {@literal} and {@code} should use \"new\" Taglet, not old.
jjg
parents: 17560
diff changeset
   222
    }
a705fe5e539f 8012174: {@literal} and {@code} should use \"new\" Taglet, not old.
jjg
parents: 17560
diff changeset
   223
a705fe5e539f 8012174: {@literal} and {@code} should use \"new\" Taglet, not old.
jjg
parents: 17560
diff changeset
   224
    /**
a705fe5e539f 8012174: {@literal} and {@code} should use \"new\" Taglet, not old.
jjg
parents: 17560
diff changeset
   225
     * {@inheritDoc}
a705fe5e539f 8012174: {@literal} and {@code} should use \"new\" Taglet, not old.
jjg
parents: 17560
diff changeset
   226
     */
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   227
    public MessageRetriever getMsgRetriever() {
14542
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14358
diff changeset
   228
        return configuration.message;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   229
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   230
06bc494ca11e Initial load
duke
parents:
diff changeset
   231
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   232
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   233
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   234
    public Content getParamHeader(String header) {
21478
fa4c7cda1b41 8026567: Use meaningful style names for strong and italic styles.
bpatel
parents: 21023
diff changeset
   235
        HtmlTree result = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.paramLabel,
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   236
                new StringContent(header)));
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   237
        return result;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   238
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   239
06bc494ca11e Initial load
duke
parents:
diff changeset
   240
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   241
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   242
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   243
    public Content paramTagOutput(ParamTag paramTag, String paramName) {
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   244
        ContentBuilder body = new ContentBuilder();
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   245
        body.addContent(HtmlTree.CODE(new RawHtml(paramName)));
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   246
        body.addContent(" - ");
17568
d9691936f5f9 8012177: HTMLDocletWriter methods should generate Content, not Strings
jjg
parents: 17567
diff changeset
   247
        body.addContent(htmlWriter.commentTagsToContent(paramTag, null, paramTag.inlineTags(), false));
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   248
        HtmlTree result = HtmlTree.DD(body);
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   249
        return result;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   250
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   251
06bc494ca11e Initial load
duke
parents:
diff changeset
   252
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   253
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   254
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   255
    public Content propertyTagOutput(Tag tag, String prefix) {
17572
1081a023532f 8012295: Cleanup JavaFX features in standard doclet
jjg
parents: 17568
diff changeset
   256
        Content body = new ContentBuilder();
1081a023532f 8012295: Cleanup JavaFX features in standard doclet
jjg
parents: 17568
diff changeset
   257
        body.addContent(new RawHtml(prefix));
1081a023532f 8012295: Cleanup JavaFX features in standard doclet
jjg
parents: 17568
diff changeset
   258
        body.addContent(" ");
1081a023532f 8012295: Cleanup JavaFX features in standard doclet
jjg
parents: 17568
diff changeset
   259
        body.addContent(HtmlTree.CODE(new RawHtml(tag.text())));
1081a023532f 8012295: Cleanup JavaFX features in standard doclet
jjg
parents: 17568
diff changeset
   260
        body.addContent(".");
1081a023532f 8012295: Cleanup JavaFX features in standard doclet
jjg
parents: 17568
diff changeset
   261
        Content result = HtmlTree.P(body);
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   262
        return result;
17572
1081a023532f 8012295: Cleanup JavaFX features in standard doclet
jjg
parents: 17568
diff changeset
   263
    }
1081a023532f 8012295: Cleanup JavaFX features in standard doclet
jjg
parents: 17568
diff changeset
   264
1081a023532f 8012295: Cleanup JavaFX features in standard doclet
jjg
parents: 17568
diff changeset
   265
    /**
1081a023532f 8012295: Cleanup JavaFX features in standard doclet
jjg
parents: 17568
diff changeset
   266
     * {@inheritDoc}
1081a023532f 8012295: Cleanup JavaFX features in standard doclet
jjg
parents: 17568
diff changeset
   267
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   268
    public Content returnTagOutput(Tag returnTag) {
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   269
        ContentBuilder result = new ContentBuilder();
21478
fa4c7cda1b41 8026567: Use meaningful style names for strong and italic styles.
bpatel
parents: 21023
diff changeset
   270
        result.addContent(HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.returnLabel,
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   271
                new StringContent(configuration.getText("doclet.Returns")))));
17568
d9691936f5f9 8012177: HTMLDocletWriter methods should generate Content, not Strings
jjg
parents: 17567
diff changeset
   272
        result.addContent(HtmlTree.DD(htmlWriter.commentTagsToContent(
d9691936f5f9 8012177: HTMLDocletWriter methods should generate Content, not Strings
jjg
parents: 17567
diff changeset
   273
                returnTag, null, returnTag.inlineTags(), false)));
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   274
        return result;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   275
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   276
06bc494ca11e Initial load
duke
parents:
diff changeset
   277
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   278
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   279
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   280
    public Content seeTagOutput(Doc holder, SeeTag[] seeTags) {
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   281
        ContentBuilder body = new ContentBuilder();
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   282
        if (seeTags.length > 0) {
22159
682da512ec17 8030253: Update langtools to use strings-in-switch
briangoetz
parents: 22005
diff changeset
   283
            for (SeeTag seeTag : seeTags) {
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   284
                appendSeparatorIfNotEmpty(body);
22159
682da512ec17 8030253: Update langtools to use strings-in-switch
briangoetz
parents: 22005
diff changeset
   285
                body.addContent(htmlWriter.seeTagToContent(seeTag));
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   286
            }
06bc494ca11e Initial load
duke
parents:
diff changeset
   287
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   288
        if (holder.isField() && ((FieldDoc)holder).constantValue() != null &&
06bc494ca11e Initial load
duke
parents:
diff changeset
   289
                htmlWriter instanceof ClassWriterImpl) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   290
            //Automatically add link to constant values page for constant fields.
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   291
            appendSeparatorIfNotEmpty(body);
14358
9eda9239cba0 8000416: refactor javadoc to provide and use an abstraction for relative URIs
jjg
parents: 14357
diff changeset
   292
            DocPath constantsPath =
9eda9239cba0 8000416: refactor javadoc to provide and use an abstraction for relative URIs
jjg
parents: 14357
diff changeset
   293
                    htmlWriter.pathToRoot.resolve(DocPaths.CONSTANT_VALUES);
9eda9239cba0 8000416: refactor javadoc to provide and use an abstraction for relative URIs
jjg
parents: 14357
diff changeset
   294
            String whichConstant =
9eda9239cba0 8000416: refactor javadoc to provide and use an abstraction for relative URIs
jjg
parents: 14357
diff changeset
   295
                    ((ClassWriterImpl) htmlWriter).getClassDoc().qualifiedName() + "." + ((FieldDoc) holder).name();
9eda9239cba0 8000416: refactor javadoc to provide and use an abstraction for relative URIs
jjg
parents: 14357
diff changeset
   296
            DocLink link = constantsPath.fragment(whichConstant);
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   297
            body.addContent(htmlWriter.getHyperLink(link,
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   298
                    new StringContent(configuration.getText("doclet.Constants_Summary"))));
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   299
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   300
        if (holder.isClass() && ((ClassDoc)holder).isSerializable()) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   301
            //Automatically add link to serialized form page for serializable classes.
2216
b124d5c924eb 6786690: Javadoc HTML WCAG 2.0 accessibility issues in standard doclet - DL tag and nesting issue
bpatel
parents: 1787
diff changeset
   302
            if ((SerializedFormBuilder.serialInclude(holder) &&
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   303
                      SerializedFormBuilder.serialInclude(((ClassDoc)holder).containingPackage()))) {
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   304
                appendSeparatorIfNotEmpty(body);
14358
9eda9239cba0 8000416: refactor javadoc to provide and use an abstraction for relative URIs
jjg
parents: 14357
diff changeset
   305
                DocPath serialPath = htmlWriter.pathToRoot.resolve(DocPaths.SERIALIZED_FORM);
9eda9239cba0 8000416: refactor javadoc to provide and use an abstraction for relative URIs
jjg
parents: 14357
diff changeset
   306
                DocLink link = serialPath.fragment(((ClassDoc)holder).qualifiedName());
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   307
                body.addContent(htmlWriter.getHyperLink(link,
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   308
                        new StringContent(configuration.getText("doclet.Serialized_Form"))));
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   309
            }
06bc494ca11e Initial load
duke
parents:
diff changeset
   310
        }
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   311
        if (body.isEmpty())
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   312
            return body;
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   313
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   314
        ContentBuilder result = new ContentBuilder();
21478
fa4c7cda1b41 8026567: Use meaningful style names for strong and italic styles.
bpatel
parents: 21023
diff changeset
   315
        result.addContent(HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.seeLabel,
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   316
                new StringContent(configuration.getText("doclet.See_Also")))));
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   317
        result.addContent(HtmlTree.DD(body));
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   318
        return result;
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   319
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   320
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   321
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   322
    private void appendSeparatorIfNotEmpty(ContentBuilder body) {
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   323
        if (!body.isEmpty()) {
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   324
            body.addContent(", ");
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   325
            body.addContent(DocletConstants.NL);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   326
        }
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   327
    }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   328
06bc494ca11e Initial load
duke
parents:
diff changeset
   329
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   330
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   331
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   332
    public Content simpleTagOutput(Tag[] simpleTags, String header) {
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   333
        ContentBuilder result = new ContentBuilder();
21478
fa4c7cda1b41 8026567: Use meaningful style names for strong and italic styles.
bpatel
parents: 21023
diff changeset
   334
        result.addContent(HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.simpleTagLabel, new RawHtml(header))));
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   335
        ContentBuilder body = new ContentBuilder();
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   336
        for (int i = 0; i < simpleTags.length; i++) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   337
            if (i > 0) {
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   338
                body.addContent(", ");
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   339
            }
17568
d9691936f5f9 8012177: HTMLDocletWriter methods should generate Content, not Strings
jjg
parents: 17567
diff changeset
   340
            body.addContent(htmlWriter.commentTagsToContent(
d9691936f5f9 8012177: HTMLDocletWriter methods should generate Content, not Strings
jjg
parents: 17567
diff changeset
   341
                    simpleTags[i], null, simpleTags[i].inlineTags(), false));
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   342
        }
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   343
        result.addContent(HtmlTree.DD(body));
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   344
        return result;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   345
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   346
06bc494ca11e Initial load
duke
parents:
diff changeset
   347
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   348
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   349
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   350
    public Content simpleTagOutput(Tag simpleTag, String header) {
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   351
        ContentBuilder result = new ContentBuilder();
21478
fa4c7cda1b41 8026567: Use meaningful style names for strong and italic styles.
bpatel
parents: 21023
diff changeset
   352
        result.addContent(HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.simpleTagLabel, new RawHtml(header))));
17568
d9691936f5f9 8012177: HTMLDocletWriter methods should generate Content, not Strings
jjg
parents: 17567
diff changeset
   353
        Content body = htmlWriter.commentTagsToContent(
d9691936f5f9 8012177: HTMLDocletWriter methods should generate Content, not Strings
jjg
parents: 17567
diff changeset
   354
                simpleTag, null, simpleTag.inlineTags(), false);
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   355
        result.addContent(HtmlTree.DD(body));
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   356
        return result;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   357
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   358
06bc494ca11e Initial load
duke
parents:
diff changeset
   359
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   360
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   361
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   362
    public Content getThrowsHeader() {
21478
fa4c7cda1b41 8026567: Use meaningful style names for strong and italic styles.
bpatel
parents: 21023
diff changeset
   363
        HtmlTree result = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.throwsLabel,
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   364
                new StringContent(configuration.getText("doclet.Throws"))));
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   365
        return result;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   366
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   367
06bc494ca11e Initial load
duke
parents:
diff changeset
   368
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   369
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   370
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   371
    public Content throwsTagOutput(ThrowsTag throwsTag) {
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   372
        ContentBuilder body = new ContentBuilder();
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   373
        Content excName = (throwsTag.exceptionType() == null) ?
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   374
                new RawHtml(throwsTag.exceptionName()) :
17558
eee4ccf66cfd 8010440: Replace int constants in LinkInfoImpl with enum
jjg
parents: 14542
diff changeset
   375
                htmlWriter.getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.MEMBER,
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   376
                throwsTag.exceptionType()));
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   377
        body.addContent(HtmlTree.CODE(excName));
17568
d9691936f5f9 8012177: HTMLDocletWriter methods should generate Content, not Strings
jjg
parents: 17567
diff changeset
   378
        Content desc = htmlWriter.commentTagsToContent(throwsTag, null,
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   379
            throwsTag.inlineTags(), false);
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   380
        if (desc != null && !desc.isEmpty()) {
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   381
            body.addContent(" - ");
17568
d9691936f5f9 8012177: HTMLDocletWriter methods should generate Content, not Strings
jjg
parents: 17567
diff changeset
   382
            body.addContent(desc);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   383
        }
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   384
        HtmlTree result = HtmlTree.DD(body);
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   385
        return result;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   386
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   387
06bc494ca11e Initial load
duke
parents:
diff changeset
   388
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   389
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   390
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   391
    public Content throwsTagOutput(Type throwsType) {
17566
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   392
        HtmlTree result = HtmlTree.DD(HtmlTree.CODE(htmlWriter.getLink(
7e1a338e1085 8012175: Convert TagletOutputImpl to use ContentBuilder instead of StringBuilder
jjg
parents: 17565
diff changeset
   393
                new LinkInfoImpl(configuration, LinkInfoImpl.Kind.MEMBER, throwsType))));
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   394
        return result;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   395
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   396
06bc494ca11e Initial load
duke
parents:
diff changeset
   397
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   398
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   399
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   400
    public Content valueTagOutput(FieldDoc field, String constantVal,
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   401
            boolean includeLink) {
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   402
        return includeLink ?
17558
eee4ccf66cfd 8010440: Replace int constants in LinkInfoImpl with enum
jjg
parents: 14542
diff changeset
   403
            htmlWriter.getDocLink(LinkInfoImpl.Kind.VALUE_TAG, field,
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   404
                constantVal, false) : new RawHtml(constantVal);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   405
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   406
06bc494ca11e Initial load
duke
parents:
diff changeset
   407
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   408
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   409
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   410
    public Content commentTagsToOutput(Tag holderTag, Tag[] tags) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   411
        return commentTagsToOutput(holderTag, null, tags, false);
06bc494ca11e Initial load
duke
parents:
diff changeset
   412
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   413
06bc494ca11e Initial load
duke
parents:
diff changeset
   414
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   415
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   416
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   417
    public Content commentTagsToOutput(Doc holderDoc, Tag[] tags) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   418
        return commentTagsToOutput(null, holderDoc, tags, false);
06bc494ca11e Initial load
duke
parents:
diff changeset
   419
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   420
06bc494ca11e Initial load
duke
parents:
diff changeset
   421
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   422
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   423
     */
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   424
    public Content commentTagsToOutput(Tag holderTag,
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   425
        Doc holderDoc, Tag[] tags, boolean isFirstSentence) {
17574
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   426
        return htmlWriter.commentTagsToContent(
044c7e1e4d53 8012308: Remove TagletOutput in favor of direct use of Content
jjg
parents: 17572
diff changeset
   427
            holderTag, holderDoc, tags, isFirstSentence);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   428
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   429
06bc494ca11e Initial load
duke
parents:
diff changeset
   430
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   431
     * {@inheritDoc}
06bc494ca11e Initial load
duke
parents:
diff changeset
   432
     */
06bc494ca11e Initial load
duke
parents:
diff changeset
   433
    public Configuration configuration() {
14542
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14358
diff changeset
   434
        return configuration;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   435
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   436
}