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 */
016 package org.opengion.fukurou.taglet;
017
018 import 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 */
030 public 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 }