| /* |
| * Copyright (c) 1997, 2012, 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 com.sun.tools.javadoc.main; |
| |
| import com.sun.javadoc.*; |
| |
| /** |
| * Represents a documentation tag, e.g. @since, @author, @version. |
| * Given a tag (e.g. "@since 1.2"), holds tag name (e.g. "@since") |
| * and tag text (e.g. "1.2"). TagImpls with structure or which require |
| * special processing are handled by subclasses (ParamTagImpl, SeeTagImpl, |
| * and ThrowsTagImpl |
| * |
| * <p><b>This is NOT part of any supported API. |
| * If you write code that depends on this, you do so at your own risk. |
| * This code and its internal interfaces are subject to change or |
| * deletion without notice.</b> |
| * |
| * @author Robert Field |
| * @author Atul M Dambalkar |
| * @author Neal M Gafter |
| * @see SeeTagImpl |
| * @see ParamTagImpl |
| * @see ThrowsTagImpl |
| * @see Doc#tags() |
| * |
| */ |
| @Deprecated |
| class TagImpl implements Tag { |
| |
| protected final String text; |
| protected final String name; |
| protected final DocImpl holder; |
| |
| /** |
| * Cached first sentence. |
| */ |
| private Tag[] firstSentence; |
| |
| /** |
| * Cached inline tags. |
| */ |
| private Tag[] inlineTags; |
| |
| /** |
| * Constructor |
| */ |
| TagImpl(DocImpl holder, String name, String text) { |
| this.holder = holder; |
| this.name = name; |
| this.text = text; |
| } |
| |
| /** |
| * Return the name of this tag. |
| */ |
| public String name() { |
| return name; |
| } |
| |
| /** |
| * Return the containing {@link Doc} of this Tag element. |
| */ |
| public Doc holder() { |
| return holder; |
| } |
| |
| /** |
| * Return the kind of this tag. |
| */ |
| public String kind() { |
| return name; |
| } |
| |
| /** |
| * Return the text of this tag, that is, portion beyond tag name. |
| */ |
| public String text() { |
| return text; |
| } |
| |
| DocEnv docenv() { |
| return holder.env; |
| } |
| |
| /** |
| * for use by subclasses which have two part tag text. |
| */ |
| String[] divideAtWhite() { |
| String[] sa = new String[2]; |
| int len = text.length(); |
| // if no white space found |
| sa[0] = text; |
| sa[1] = ""; |
| for (int inx = 0; inx < len; ++inx) { |
| char ch = text.charAt(inx); |
| if (Character.isWhitespace(ch)) { |
| sa[0] = text.substring(0, inx); |
| for (; inx < len; ++inx) { |
| ch = text.charAt(inx); |
| if (!Character.isWhitespace(ch)) { |
| sa[1] = text.substring(inx, len); |
| break; |
| } |
| } |
| break; |
| } |
| } |
| return sa; |
| } |
| |
| /** |
| * convert this object to a string. |
| */ |
| public String toString() { |
| return name + ":" + text; |
| } |
| |
| /** |
| * For documentation comment with embedded @link tags, return the array of |
| * TagImpls consisting of SeeTagImpl(s) and text containing TagImpl(s). |
| * Within a comment string "This is an example of inline tags for a |
| * documentation comment {@link Doc {@link Doc commentlabel}}", |
| * where inside the inner braces, the first "Doc" carries exctly the same |
| * syntax as a SeeTagImpl and the second "commentlabel" is label for the Html |
| * Link, will return an array of TagImpl(s) with first element as TagImpl with |
| * comment text "This is an example of inline tags for a documentation |
| * comment" and second element as SeeTagImpl with referenced class as "Doc" |
| * and the label for the Html Link as "commentlabel". |
| * |
| * @return TagImpl[] Array of tags with inline SeeTagImpls. |
| * @see ParamTagImpl |
| * @see ThrowsTagImpl |
| */ |
| public Tag[] inlineTags() { |
| if (inlineTags == null) { |
| inlineTags = Comment.getInlineTags(holder, text); |
| } |
| return inlineTags; |
| } |
| |
| /** |
| * Return array of tags for the first sentence in the doc comment text. |
| */ |
| public Tag[] firstSentenceTags() { |
| if (firstSentence == null) { |
| //Parse all sentences first to avoid duplicate warnings. |
| inlineTags(); |
| try { |
| docenv().setSilent(true); |
| firstSentence = Comment.firstSentenceTags(holder, text); |
| } finally { |
| docenv().setSilent(false); |
| } |
| } |
| return firstSentence; |
| } |
| |
| /** |
| * Return the doc item to which this tag is attached. |
| * @return the doc item to which this tag is attached. |
| */ |
| public SourcePosition position() { |
| return holder.position(); |
| } |
| } |