001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.fukurou.taglet; 017 018import com.sun.tools.doclets.Taglet; 019import com.sun.javadoc.Tag; 020import java.util.Map; 021 022/** 023 * ソースコメントから、Javadoc を作成する場合のカスタムタグ情報を作成する 024 * Taglet インターフェースの実装クラスを作成します。 025 * og.value タグ(形式サンプル)を処理します。 026 * 027 * このタグは、インラインタグ 定義されているため、@og.tag などに含まれると処理されません。 028 * そこで、 DocletTagWriter#printTag( final Tag[] tag ) に処理を追加する必要があります。 029 * 030 * @og.rev 5.5.4.1 (2012/07/06) 新規作成 031 * 032 * @version 4.0 033 * @author Kazuhiko Hasegawa 034 * @since JDK5.0, 035 */ 036public class TagletValue extends AbstractTaglet { 037 038 private static final String NAME = "og.value"; 039 040 /** 041 * このタグレットがインラインタグで 042 * 使用されている場合、true を返します。 043 * そうでない場合については false が設定されます。 044 * 045 * @return インラインタグの場合は true、そうでない場合は false を返します 046 */ 047 @Override 048 public boolean isInlineTag() { 049 return true; 050 } 051 052 /** 053 * 実行時にドックレットがタグレットを読み込んで使用するには、 054 * そのタグレットが、次のシグニチャでマップ を引数として受け取る、 055 * レジスタ と呼ばれる static メソッドをもっている必要があります。 056 * このメソッドは、タグレット名をキーとして、カスタムタグレットの 057 * インスタンスをマップに追加します。 タグレットをオーバーライドする場合、 058 * 名前の競合を避けるため、新しいタグレットのインスタンスをマップに 059 * 追加する前に、オーバーライドされる側のタグレットをマップから 060 * 削除する必要があります。 061 * 062 * @param tagletMap タグレットマップ 063 */ 064 public static void register( final Map<String,Taglet> tagletMap ) { 065 TagletValue tagTag = new TagletValue(); 066 Taglet tag = tagletMap.get(NAME); 067 if(tag != null) { 068 tagletMap.remove(NAME); 069 } 070 tagletMap.put(NAME, tagTag); 071 } 072 073 /** 074 * このカスタムタグの名前を返します。 075 * 076 * @return カスタムタグの名前 077 */ 078 public String getName() { 079 return NAME; 080 } 081 082 /** 083 * このカスタムタグのタグ表現を受け取り、 084 * 文字列としての表現を返し、生成されたページに出力します。 085 * 086 * @param tagTag このカスタムタグのタグ表現 087 * 088 * @return このタグの文字列としての表現 089 */ 090 public String toString( final Tag tagTag ) { 091 return DocletUtil.valueTag( tagTag ); 092 } 093 094 /** 095 * このカスタムタグのタグ表現の配列を受け取り、 096 * 文字列としての表現を返し、生成されたページに出力します。 097 * このタグレットがインラインタグを表す場合、 098 * このメソッドは null を返します。 099 * 100 * @param tagTags このカスタムタグを表すタグの配列 101 * 102 * @return このタグの文字列としての表現 103 */ 104 public String toString( final Tag[] tagTags ) { 105 if(tagTags.length == 0) { 106 return null; 107 } 108 StringBuilder result = new StringBuilder(); 109 for(int i = 0; i < tagTags.length; i++) { 110 result.append( DocletUtil.valueTag( tagTags[i] ) ); 111 } 112 return result.toString(); 113 } 114}