/* * ASDocComment.java * * Copyright (c) 2007-2008 David Holroyd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package uk.co.badgersinfoil.metaas.dom; import java.util.Iterator; /** * Allows manipulation of any 'documentation comment' attached to an * ActionScript API element. You can create a DocComment object for anything * implementing the {@link Documentable} interface, even if the element in * question has no documentation comment attached right now. Methods of this * interface will create a doc-comment in the source code as required. * * <p>For a description of the format of documentation comments as they appear * in the source code, see * <a href="http://java.sun.com/j2se/javadoc/writingdoccomments/#format">How to * Write Doc Comments for the Javadoc Tool</a> (bearing in mind that some of * the tags defined for Java docuemtation may not be processed by * ActionScript tools).</p> * * * <h3>Automatic Comment Formatting</h3> * * <p>Documentation comments are formatted with indentation to match the * surrounding source code, and a column of asterisks ('*') along the left hand * side of the comment block. Both of these foratting tasks are carried * out for you automatically by metaas. So for example if you create a * two-line description as follows,</p> * * <pre class="eg">docComment.setDescriptionString("Great\n"+ * "stuff.");</pre> * * <p>The generated comment in the source code would have the appropriate * indentation, and asterisk characters added to produce a nicely formatted * documentation comment,</p> * * <pre class="eg">/** * * Great * * stuff. * *<span/>/</pre> * * <p>Conversely, when retreving the descriptive text from the comment, this * extra formatting is removed before you see it,</p> * * <pre class="eg">docComment.getDescriptionString(); <em>=> " Great\n stuff."</em></pre> * * * <h3>HTML Formatting</h3> * * <p>It's common to include HTML tags in documentation comments to provide * some additional formatting in the generated documentation. metaas doesn't * currently check the formatting of any HTML, but future versions may require * well-formed XHTML.</p> * * * <h3>Inline Tags</h3> * * Documentation tools can process special 'inline' documetation tags with * in documentation-comment descriptions, for instance * <code>{<span>@</span>link com.example.ThatClass}</code>. Future versions of * metaas may expose information about such tags. * * * <h3>Tagged Paragraphs</h3> * * <p>Tagged paragraphs are used in JavaDoc-style comments to provide * additional, structured information to tools generating documentation from * the source code. A typical example would be the <code>@see</code> entries * in a piece of API documentation, that might be skipped by a documentation * tool when producing overview documatation, but will be included in a * detailed description of the particular API area.</p> * * <p>To add a <code>@see</code> tagged-paragraph to a comment, use * {@link #addParaTag(String, String)}. e.g.</p> * * <pre class="eg">docComment.addParaTag("see", "com.example.SomeClass")</pre> * * <p>The resulting comment would look something like,</p> * * <pre class="eg">/** * * <span>@</span>see com.example * *<span/>/</pre> * * <p>The 'tag' of a tagged paragraph must always start at the beginning of * a line. If <code>@see</code> appears in the middle of a line of text, * if is taken to be part of the description, an will not be returned by * {@link #findTags(String)} (for example).</p> * * <p>To prevent mangled comments being generated by accident, it is an error * to include content that might be interpreted as a tagged-paragraph,</p> * * <pre class="eg">docComment.setDescription("Funny description.\n" * "@dave: hahaha");</pre> * * <p>will raise a SyntaxException,</p> * * <pre>uk.co.badgersinfoil.metaas.SyntaxException: trailing content after description: "@dave"</pre> * * <h3>Shortcuts</h3> * * <p>Other elements in the metaas API provide shorcuts for accessing specific * parts of the documentation-comment structure (e.g. creating or updating * specific tagged-paragraphs),</p> * <ul> * <li>{@link ASArg#getDescriptionString()}, * {@link ASArg#setDescription(String)} for easy access to * <span>@</span>param tags in a method comment</li> * * <li>{@link ASMethod#getReturnDescriptionString()}, * {@link ASMethod#setReturnDescription(String)}.</li> * </ul> * * @see Documentable */ public interface DocComment extends ScriptElement { /** * Returns the description from this comment. The description is the * text up until the first tagged paragraph. For instance, given * the comment, * <pre class="eg">/** * * Test stuff * * @return something * *<span/>/</pre> * This method would return a String something like "Test stuff" */ public String getDescriptionString(); /** * Defines the 'description' part of this documentation comment. * * @throws SyntaxException if the given text contains an end-of-comment * marker, or a tagged-paragraph * * @see DocComment#setDescriptionString(String) */ public void setDescriptionString(String description); /** * Returns an iterator over the list of {@link DocTag} elements of this * comment that have a tag name matching the given name. To find all the * <span>@</span>see tags in the comment, you could use code like, * <pre class="eg">Iterator i = docComment.findTags("see");</pre> * * <p>If there is currently no comment in the source code corresponding * to this DocComment object, an Iterator will be returned that simply * produces no elements.</p> * * @param name The paragraph tag name, not including the leading '@' * symbol. */ public Iterator findTags(String name); /** * Returns the first tagged paragraph in this documentation comment * that has a tag name matching the name given. * * @param name The paragraph tag name, not including the leading '@' * symbol. */ public DocTag findFirstTag(String name); /** * Removes the given tag from this comment. */ public void delete(DocTag tag); /** * Adds a tagged paragraph with the given tag-name and body text to * the end of this documentation comment. The name should be given * without the '@'-prefix, and this will be added by metaas. * * @throws SyntaxException if the given text contains an end-of-comment * marker, or a tagged-paragraph */ public void addParaTag(String name, String body); }