package x10doc.doc; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.sun.javadoc.Doc; import com.sun.javadoc.SourcePosition; import com.sun.javadoc.Tag; public class X10Tag implements Tag { public static final String DOCROOT = "docRoot"; public static final String INHERITDOC = "inheritDoc"; public static final String CODE = "code"; public static final String LITERAL = "literal"; public static final String LINK = "@link"; public static final String LINKPLAIN = "@linkplain"; public static final String SEE = "@see"; public static final String TEXT = "Text"; public static final String AUTHOR = "author"; public static final String PARAM = "param"; public static final String RETURN = "return"; public static final String DEPRECATED = "deprecated"; public static final String THROWS = "throws"; public static final String GUARD = "guard"; public static final ArrayList<String> inlineTagTypes = new ArrayList<String>(); static { inlineTagTypes.add(DOCROOT); inlineTagTypes.add(INHERITDOC); inlineTagTypes.add(CODE); inlineTagTypes.add(LITERAL); inlineTagTypes.add(LINK); inlineTagTypes.add(LINKPLAIN); } String kind, name, text; final X10Doc holder; public X10Tag(String name, String text, X10Doc holder) { if (name.equals(DOCROOT) || name.equals(INHERITDOC)) { this.kind = this.name = name; this.text = ""; } else if (name.equals(CODE) || name.equals(LITERAL) || name.equals(AUTHOR) || name.equals(PARAM) || name.equals(RETURN) || name.equals(DEPRECATED) || name.equals(THROWS)|| name.equals(GUARD)) { this.kind = this.name = name; this.text = text; } else if (name.equals(LINK) || name.equals(LINKPLAIN) || name.equals(SEE)) { this.kind = SEE; this.name = name; this.text = text; } else { this.kind = this.name = TEXT; this.text = text; } this.holder = holder; } public void setText(String text) { this.text = text; } public Tag[] firstSentenceTags() { // TODO Auto-generated method stub System.out.println("Tag.firstSentenceTags() called."); return null; } public Doc holder() { //System.out.println("Tag.holder() called."); return this.holder; } public Tag[] inlineTags() { return X10Doc.createInlineTags(text, holder).toArray(new X10Tag[0]); } public String kind() { return kind; } public String name() { return name; } public SourcePosition position() { // TODO Auto-generated method stub // System.out.println("Tag.position() called."); return null; } public String text() { return this.text; } public String toString() { System.out.println("Tag.toString() called."); return (name + ":" + text); } public static X10Tag processInlineTag(String text, X10Doc holder) { //Pattern p = Pattern.compile("\\{\\s*(@[^\\s\\}]+)\\s*([^\\}]*)\\s*}"); Pattern p = Pattern.compile("\\{\\s*(@[^\\s]+)\\s*([^}]*)\\s*\\}"); Matcher m = p.matcher(text); if (m.find()) { String name = m.group(1); String rest = m.group(2); // System.out.println("m.group() = \"" + m.group() + "\""); // System.out.println("tag = \"" + name + "\", rest = \"" + rest + "\""); if (!inlineTagTypes.contains(name)) { return new X10Tag(TEXT, text, holder); } if (name.equals(LINK) || name.equals(LINKPLAIN)) { return new X10SeeTag(name, rest, text, holder); } else { return new X10Tag(name, text, holder); } } return new X10Tag(TEXT, text, holder); } }