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    }