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; 019 020/** 021 * ソースコメントから、Javadoc を作成する場合のカスタムタグ情報を作成する 022 * Taglet インターフェースのAbstract 実装クラスを作成します。 023 * デフォルトの タグレットとしての初期値を設定します。 024 * つまり、isInlineTag() のみ false を返すメソッドを定義してあります。 025 * 026 * @version 4.0 027 * @author Kazuhiko Hasegawa 028 * @since JDK5.0, 029 */ 030public abstract class AbstractTaglet implements Taglet { 031 032 /** 033 * このタグレットがフィールドドキュメンテーションで 034 * 使用されている場合、true を返します。 035 * インラインタグについては false が設定されます。 036 * 037 * @return フィールドドキュメンテーションの場合は true、そうでない場合は false を返します 038 */ 039 public boolean inField() { 040 return true; 041 } 042 043 /** 044 * このタグレットがコンストラクタドキュメンテーションで 045 * 使用されている場合、true を返します。 046 * インラインタグについては false が設定されます。 047 * 048 * @return コンストラクタドキュメンテーションの場合は true、そうでない場合は false を返します 049 */ 050 public boolean inConstructor() { 051 return true; 052 } 053 054 /** 055 * このタグレットがメソッドドキュメンテーションで 056 * 使用されている場合、true を返します。 057 * インラインタグについては false が設定されます。 058 * 059 * @return メソッドドキュメンテーションの場合は true、そうでない場合は false を返します 060 */ 061 public boolean inMethod() { 062 return true; 063 } 064 065 /** 066 * このタグレットが概要ドキュメンテーションで 067 * 使用されている場合、true を返します。 068 * インラインタグについては false が設定されます。 069 * 070 * @return 概要ドキュメンテーションの場合は true、そうでない場合は false を返します 071 */ 072 public boolean inOverview() { 073 return true; 074 } 075 076 /** 077 * このタグレットがパッケージドキュメンテーションで 078 * 使用されている場合、true を返します。 079 * インラインタグについては false が設定されます。 080 * 081 * @return パッケージドキュメンテーションの場合は true、そうでない場合は false を返します 082 */ 083 public boolean inPackage() { 084 return true; 085 } 086 087 /** 088 * このタグレットがタイプドキュメンテーションで 089 * 使用されている場合、true を返します。 090 * インラインタグについては false が設定されます。 091 * 092 * @return タイプドキュメンテーションの場合は true、そうでない場合は false を返します 093 */ 094 public boolean inType() { 095 return true; 096 } 097 098 /** 099 * このタグレットがインラインタグで 100 * 使用されている場合、true を返します。 101 * そうでない場合については false が設定されます。 102 * 103 * @return インラインタグの場合は true、そうでない場合は false を返します 104 */ 105 public boolean isInlineTag() { 106 return false; 107 } 108 109 /** 110 * このタグレットがインラインタグで {@link XXXX YYYY} を処理するように 111 * 用意された、カスタムメソッドです。 112 * 113 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 114 * 115 * @param in オリジナルの文字列 116 * 117 * @return インラインタグの link を処理した結果の文字列 118 */ 119 protected String link( final String in ) { 120 if( in == null ) { return ""; } 121 int index = in.indexOf( "{@link" ); 122 if( index < 0 ) { return in; } 123 124 StringBuilder rtn = new StringBuilder(); 125 int start = 0; 126 while( index >= 0 ) { 127 int end = in.indexOf( '}',index ); 128 129 // {@ より前方の文字列を追加 130 if( index > 0 ) { rtn.append( in.substring( start,index ) ); } 131 132 // {@link XXXX YY} の XXXX YY部分を処理 133 String val = in.substring( index+7,end ); 134 if( val != null ) { 135 int sp = val.indexOf( ' ' ); 136 String xxx = val.substring( 0,sp ).trim(); // 前半:アドレス変換 137 String yyy = val.substring( sp ).trim(); // 後半:ラベル 138 String zzz = xxx.replace( '.','/' ); 139 rtn.append( "<a href=\"../../../../" ).append( zzz ).append( ".html\" " ) 140 .append( "title=\"" ).append( xxx ).append( "\">" ) 141 .append( yyy ).append( "</a>" ); 142 } 143 144 start = end+1 ; 145 index = in.indexOf( "{@",start ); 146 } 147 rtn.append( in.substring( start ) ); 148 149 return rtn.toString(); 150 } 151}