package org.robobinding.doctaglet; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.text.StrBuilder; import com.sun.javadoc.Doc; import com.sun.javadoc.SeeTag; import com.sun.javadoc.Tag; import com.sun.tools.doclets.formats.html.TagletWriterImpl; import com.sun.tools.doclets.internal.toolkit.taglets.TagletOutput; /** * * @since 1.0 * @version $Revision: 1.0 $ * @author Cheng Wei */ public class InlineLinkTagTranslator { public String translate(String text, Tag containingTag, Doc doc, TagletWriterImpl tagletWriterImpl) { StrBuilder sb = new StrBuilder(text); List<SeeTag> inlineLinkTags = getInlineLinkTags(containingTag); for(SeeTag inlineLinkTag : inlineLinkTags) { String inlineLinkContent = "{@link "+inlineLinkTag.text()+"}"; if(sb.contains(inlineLinkContent)) { TagletOutput tagletOutput = tagletWriterImpl.seeTagOutput(doc, new SeeTag[]{inlineLinkTag}); String seeAlsoText = tagletOutput.toString(); sb.replaceAll(inlineLinkContent, seeAlsoText.split("</span></dt><dd>")[1]); } } return sb.toString(); } private List<SeeTag> getInlineLinkTags(Tag containingTag) { List<SeeTag> linkTags = new ArrayList<SeeTag>(); Tag[] inlineTags = containingTag.inlineTags(); for(Tag tag : inlineTags) { if("@link".equals(tag.name())) { linkTags.add((SeeTag)tag); } } return linkTags; } }