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.javadoc.Tag; 019 020 import org.opengion.fukurou.util.FileUtil; 021 import org.opengion.fukurou.util.StringUtil; 022 023 import java.io.File; 024 import java.io.PrintWriter; 025 import java.io.IOException; 026 027 /** 028 * Tag æƒ??ã‚’å?力ã™ã‚?PrintWriter 相当クラスã§ã™ã? 029 * 030 * @version 4.0 031 * @author Kazuhiko Hasegawa 032 * @since JDK5.0, 033 */ 034 public final class DocletTagWriter { 035 private final PrintWriter outFile ; 036 private final boolean rtn2br ; // 改行コードを <br/>ã«ç½®æ›ã™ã‚‹ã‹ã©ã?‹ 037 038 private static final String ENCODE = "UTF-8" ; 039 040 /** リターンコーãƒ? System.getProperty("line.separator") */ 041 public static final String CR = System.getProperty("line.separator"); 042 /** HTML上ã?ブレーク <br> + CR */ 043 public static final String BR = "<br>" + CR ; 044 045 /** 046 * Doclet ã®ã‚¨ãƒ³ãƒˆãƒªãƒã‚¤ãƒ³ãƒˆãƒ¡ã‚½ãƒ?ƒ‰ã§ã™ã? 047 * 048 * åˆæœŸã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã§å‡ºåŠ›ã—ã¾ã™ã? 049 * 050 * @param file 出力ファイルå? 051 */ 052 public DocletTagWriter( final String file ) throws IOException { 053 this( file,ENCODE,false ); 054 } 055 056 /** 057 * Doclet ã®ã‚¨ãƒ³ãƒˆãƒªãƒã‚¤ãƒ³ãƒˆãƒ¡ã‚½ãƒ?ƒ‰ã§ã™ã? 058 * 059 * @param file 出力ファイルå? 060 * @param encode エンコーãƒ? 061 */ 062 public DocletTagWriter( final String file,final String encode ) throws IOException { 063 this( file,encode,false ); 064 } 065 066 /** 067 * Doclet ã®ã‚¨ãƒ³ãƒˆãƒªãƒã‚¤ãƒ³ãƒˆãƒ¡ã‚½ãƒ?ƒ‰ã§ã™ã? 068 * 069 * @param file 出力ファイルå? 070 * @param encode エンコーãƒ? 071 * @param r2b 改行コードを BRã‚¿ã‚°ã«ç½®æ›ã™ã‚‹ã‹ã©ã?‹ 072 */ 073 public DocletTagWriter( final String file,final String encode,final boolean r2b ) throws IOException { 074 outFile = FileUtil.getPrintWriter( new File( file ),encode ); 075 rtn2br = r2b; 076 } 077 078 /** 079 * 出力ファイルをクãƒãƒ¼ã‚¹ã—ã¾ã™ã? 080 * 081 */ 082 public void close() { 083 outFile.close(); 084 } 085 086 /** 087 * å¯å¤‰é•·ã®æ–?—å?引数をå–りã?æ–?—å?ã‚’å?力ã—ã¾ã™ã? 088 * æ–?—å?ã®æœ?¾Œã«æ”¹è¡ŒãŒå…¥ã‚Šã¾ã™ã? 089 * 090 * @param str String... 091 */ 092 public void printTag( final String... str ) { 093 for( int i=0; i<str.length; i++ ) { 094 if( rtn2br ) { outFile.print( str[i].replaceAll( CR,BR ) ); } 095 else { outFile.print( str[i] ); } 096 } 097 outFile.println(); 098 } 099 100 /** 101 * ã‚¿ã‚°é…å?ã‚’å—ã‘å–りã?タグ出力ã—ã¾ã™ã? 102 * 103 * 従æ¥ã¯ã€TagãŒã??‘ã¤ã®å ´åˆã¨é…å?ã®å ´åˆã§æ”¹è¡Œå?力をåˆ?‘ã¦ã?¾ã—ãŸãŒã?改行ã—ãªã?“ã¨ã«ã—ã¾ã™ã? 104 * 105 * @og.rev 5.5.4.1 (2012/07/06) {@og.value package.class#field} ã®å‡¦ç?対å¿? 106 * @og.rev 5.5.4.1 (2012/07/06) DocletUtil.htmlFilter â†?StringUtil.htmlFilter ã«å¤‰æ›´ 107 * @og.rev 5.5.4.2 (2012/07/13) タグ出力ã?æœ?¾Œã«æ”¹è¡Œã‚’入れã¦ãŠãã¾ã™ã? 108 * @og.rev 5.5.5.6 (2012/08/31) @og.tag ãªã©ã« @og.value ãŒå«ã¾ã‚Œã¦ã?‚‹å ´åˆã?処ç?‚’追åŠ? 109 * @og.rev 5.5.5.6 (2012/08/31) @og.tag ãªã©ã« @og.value ãŒå«ã¾ã‚Œã¦ã?‚‹å ´åˆã?処ç?‚’追åŠ? 110 * @og.rev 5.6.3.3 (2013/04/19) @og.tag ãªã©ã« @og.doc03Link ãŒå«ã¾ã‚Œã¦ã?‚‹å ´åˆã?処ç?‚’追åŠ? 111 * @og.rev 5.7.1.1 (2013/12/13) ä¸?—¦æ–?—å?ã«å…¥ã‚Œã¦ã€rtn2br ã®åˆ¤å®šå?ç?‚’行ã„ã¾ã™ã? 112 * 113 * @param tag ã‚¿ã‚°é…å? 114 */ 115 public void printTag( final Tag[] tag ) { 116 for( int i=0; i<tag.length; i++ ) { 117 String tagName = tag[i].name(); 118 String data = ""; 119 // {@og.value package.class#field} ã®å‡¦ç?‚’行ã„ã¾ã™ã? 120 if( tagName.equalsIgnoreCase( "@og.value" ) ) { 121 // outFile.print( DocletUtil.valueTag( tag[i]) ); 122 data = DocletUtil.valueTag( tag[i] ); 123 } 124 // 5.6.3.3 (2013/04/19) {@og.doc03Link ・・・} ã®å‡¦ç?‚’行ã„ã¾ã™ã? 125 else if( tagName.equalsIgnoreCase( "@og.doc03Link" ) ) { 126 // outFile.print( DocletUtil.doc03LinkTag( tag[i]) ); 127 data = DocletUtil.doc03LinkTag( tag[i] ); 128 } 129 // 5.5.5.6 (2012/08/31) @og.tag ãªã©ã« @og.value ãŒå«ã¾ã‚Œã¦ã?‚‹å ´åˆã?処ç?‚’追åŠ? 130 else if( ! tagName.equalsIgnoreCase( "Text" ) ) { 131 printTag( tag[i].inlineTags() ); 132 } 133 else { 134 // String data = DocletUtil.htmlFilter( tag[i].text() ); 135 // String data = StringUtil.htmlFilter( tag[i].text() ).trim(); // 5.5.4.1 (2012/07/06) DocletUtil â†?StringUtil ã«å¤‰æ›´ 136 data = StringUtil.htmlFilter( tag[i].text() ).trim(); // 5.5.4.1 (2012/07/06) DocletUtil â†?StringUtil ã«å¤‰æ›´ 137 138 // if( rtn2br ) { 139 // outFile.print( data.replaceAll( CR,BR ) ); 140 //// outFile.print( BR ); 141 // } 142 // else { 143 //// outFile.println( data ); 144 // outFile.print( data ); 145 // } 146 } 147 if( rtn2br ) { 148 outFile.print( data.replaceAll( CR,BR ) ); 149 } 150 else { 151 outFile.print( data ); 152 } 153 } 154 // outFile.println(); // 5.5.4.2 (2012/07/13) タグ出力ã?æœ?¾Œã«æ”¹è¡? 155 } 156 157 /** 158 * æ–?—å?引数ã‚??’ã¤ã¨ã€ã‚¿ã‚°é…å?ã‚’å—ã‘å–りã?タグ出力ã—ã¾ã™ã? 159 * 160 * @param str1 第ä¸?–‡å—å? 161 * @param tag ã‚¿ã‚°é…å? 162 * @param str3 第三文å—å? 163 */ 164 public void printTag( final String str1,final Tag[] tag, final String str3 ) { 165 outFile.print( str1 ); 166 printTag( tag ); 167 outFile.println( str3 ); 168 } 169 170 /** 171 * ã‚¿ã‚°é…å?ã‚’å—ã‘å–りã?タグ出力ã—ã¾ã™ã? 172 * 173 * @param tag Tag[] 174 */ 175 // public void printTag( final Tag[] tag ) { 176 // if( tag.length == 1 ) { 177 // String data = DocletUtil.htmlFilter( tag[0].text() ); 178 // if( rtn2br ) { outFile.print( data.replaceAll( CR,BR ) ); } 179 // else { outFile.print( data ); } 180 // } 181 // else { 182 // for( int i=0; i<tag.length; i++ ) { 183 // String data = DocletUtil.htmlFilter( tag[i].text() ); 184 // if( rtn2br ) { 185 // outFile.print( data.replaceAll( CR,BR ) ); 186 // outFile.print( BR ); 187 // } 188 // else { 189 // outFile.println( data ); 190 // } 191 // } 192 // } 193 // } 194 195 /** 196 * ã‚¿ã‚°é…å?ã‚’å—ã‘å–りã?タグ出力ã—ã¾ã™ã? 197 * è¤?•°ã®ã‚¿ã‚°ã‚’å?力ã™ã‚‹å?åˆã«ã€ã‚«ãƒ³ãƒžåŒºåˆ?‚Šæ–?—ã§é€£çµã—ã¾ã™ã? 198 * 199 * @og.rev 5.5.4.1 (2012/07/06) DocletUtil.htmlFilter â†?StringUtil.htmlFilter ã«å¤‰æ›´ 200 * 201 * @param tag ã‚¿ã‚°é…å? 202 */ 203 public void printCSVTag( final Tag[] tag ) { 204 for( int i=0; i<tag.length; i++ ) { 205 // String data = DocletUtil.htmlFilter( tag[i].text() ); 206 String data = StringUtil.htmlFilter( tag[i].text() ); // 5.5.4.1 (2012/07/06) DocletUtil â†?StringUtil ã«å¤‰æ›´ 207 if( i > 0 ) { outFile.print( "," ); } 208 outFile.print( data ); 209 } 210 } 211 212 /** 213 * ã‚¿ã‚°é…å?ã‚’å—ã‘å–りã?タグ出力ã—ã¾ã™ã? 214 * ã“ã“ã§ã¯ã€ã‚¿ã‚°æ¯Žã«ã‚¿ã‚°ã®åç§°ã¨å†?®¹ã‚’å?力ã—ã€æ”¹è¡Œã‚’行ã„ã¾ã™ã? 215 * 特殊å?ç?¼šã“ã“ã§ã¯ã€og.rev ã‚¿ã‚°ã¯å–り込ã¿ã¾ã›ã‚“ã€? 216 * 217 * @og.rev 5.5.4.1 (2012/07/06) DocletUtil.htmlFilter â†?StringUtil.htmlFilter ã«å¤‰æ›´ 218 * 219 * @param tag ã‚¿ã‚°é…å? 220 */ 221 public void printTagsInfo( final Tag[] tag ) { 222 for( int i=0; i<tag.length; i++ ) { 223 String tagName = tag[i].name(); 224 if( tagName.equalsIgnoreCase( "@og.rev" ) ) { 225 continue; 226 } 227 outFile.print( tagName ); 228 outFile.print( " " ); 229 // outFile.print( DocletUtil.htmlFilter( tag[i].text() ) ); 230 outFile.print( StringUtil.htmlFilter( tag[i].text() ) ); // 5.5.4.1 (2012/07/06) DocletUtil â†?StringUtil ã«å¤‰æ›´ 231 if( rtn2br ) { outFile.print( BR ); } 232 else { outFile.println(); } 233 } 234 } 235 236 /** 237 * æ–?—å?引数ã‚??’ã¤ã¨ã€ã‚¿ã‚°é…å?ã‚’å—ã‘å–りã?å…ˆé?ä¸?–‡å—ã?タグ出力ã—ã¾ã™ã? 238 * 239 * @param str1 第ä¸?–‡å—å? 240 * @param tag ã‚¿ã‚°é…å? 241 * @param str3 第三文å—å? 242 */ 243 public void printChar( final String str1,final Tag[] tag, final String str3 ) { 244 outFile.print( str1 ); 245 if( tag.length > 0 ) { 246 String str = tag[0].text(); 247 if( str != null && str.length() > 0 ) { 248 outFile.print( str.charAt(0) ); 249 } 250 } 251 outFile.println( str3 ); 252 } 253 }