在自定义Javadoc taglet中展开内联标记
我编写了一个自定义Javadoc taglet,它添加了一个新的在自定义Javadoc taglet中展开内联标记,java,javadoc,custom-tag,taglet,Java,Javadoc,Custom Tag,Taglet,我编写了一个自定义Javadoc taglet,它添加了一个新的note标记: ... public boolean isInlineTag() { return false; } public String toString(Tag tag) { return "<pre class='note'>" + tag.text() + "</pre>"; } {@link}内联标记未展开。但是,对于内置的paramjavadoc标记,它可以正常
note
标记:
...
public boolean isInlineTag() { return false; }
public String toString(Tag tag) {
return "<pre class='note'>" + tag.text() + "</pre>";
}
{@link}
内联标记未展开。但是,对于内置的param
javadoc标记,它可以正常工作
有没有办法在自定义Javadoc taglet中扩展嵌套的内联标记
谢谢 报告说:
标记可以写成块标记,如@todo,也可以写成内联标记,如{@underline}。块标记当前不支持文本中的内联标记
事实上,taglet API有点太小了,因为它只支持toString()
方法
您可以在该方法中检索参数标记的子标记(使用.inlineTags()
),但是您必须自己格式化它们,因为您无法从标记访问标准doclet的正常机制
因此,如果您不想在自己的taglet中重新实现(或复制)标准doclet的部分,那么看起来您在这里运气不好。(但是,您也可以直接扩展标准doclet,而不是用taglets对其进行修补。)以下是三种可能的想法,我并不喜欢其中任何一种:
使用javadoc
命令的-tag
选项来支持@note
,而不是定义自己的Taglet
。当然,这不允许您定义自己的自定义格式
您可以使用tag.holder().setrawcontext(String)
。我的经验是,这允许您添加标记,但不允许您重写标记。因此,您不能在tag.holder().getRawCommentText()
上替换字符串,然后让标准doclet正确呈现内联标记,但您可能会有Taglet.toString(tag[])
方法生成html,包括内联标记的原始形式,然后附加到原始注释文本“@rendernote
markedUp Tag.text()”其中@rendernote
是另一个标记,使用-Tag
定义。您的Taglet.toString(标记[])
然后应该返回一个空字符串。然而,这不仅是丑陋的,我不知道这是否依赖于未记录的行为,所以我不知道这个想法有多强大或未来的证据
您可以让您的Taglet
也实现com.sun.tools.doclets.internal.toolkit.taglets.taglets
。这似乎就是标准taglets的定义方式。然后必须实现的两种方法是TagletOutput getTagletOutput(Tag-TagletWriter-writer)
和TagletOutput getTagletOutput getTagletOutput(Doc Doc,TagletWriter)
。我认为后者可以抛出IllegalArgumentException()
。如果您还保留注册Taglet
时提供的Map
,则您可以通过在该Map
中查找标记名来呈现遇到的多个内联标记,以获得其实现com.sun.tools.doclets.internal.toolkit.taglets.Taglet
,并将其委派给e> getTagletOutput
方法。但是,它看起来像是,例如,@link
标记没有在该映射中注册;对于那些,它是可能的(但我没有检查)因为@link
标记被假定为SeeTag
提供,所以您可以使用@see
中的映射,或者您可以将TagletWriter
转换为TagletWriterImpl
,然后使用TagletWriterImpl.seeTagOutput(Doc,SeeTag[])
。对于Text
标记,您可以通过新的tagletoutputinpl(String)
生成TagletOutput
实例。最后,您通过这种方式获得的所有TagletOutput
实例可以组合成一个TagletOutput
,使用TagletOutput.append(TagletOutput)
返回
/**
* @note Test note with {@link Someclass} // @link tag is NOT expanded
* @param name - here the {@link Someclass} works // works for standard 'param' tag
*/