(2011/8/5修正: 夏なのでフィルタの虫取りをしましたw muse-modeの出力だとうまく処理できてないようだったのを訂正)
C#(.NET)に続き、今度はJavaで書いてみた。
やはり、ひとつの主題を複数の処理系からやってみるのは面白い。
/** * */ import java.io.*; import java.util.regex.*; import java.util.ArrayList; public class rubyon { public static ArrayList DirList() { //返り値は配列で ArrayList<String> pats = new ArrayList<String>(); //デフォルトのパスはカレント String path = "."; //パス名のオブジェクト化 File dir = new File(path); //ディレクトリかどうか判定 if (!dir.isDirectory()) { System.out.println("ディレクトリではないか、" + "または存在しません。"); }else{ //再帰的リスト String[] contents = dir.list(); Pattern pattern = Pattern.compile(".+html$"); for(int i=0;i<contents.length;i++){ Matcher matcher = pattern.matcher(contents[i]); //boolean b= matcher.matches(); if(matcher.matches() == true){ //System.out.println(contents[i]); pats.add(contents[i]); } } } return pats; } static String fileRead(String fn){ String seq = ""; try{ File file = new File(fn); BufferedReader br = new BufferedReader(new FileReader(file)); String str = br.readLine(); while(str != null){ //System.out.println(str); seq = seq + str + "\n"; str = br.readLine(); } br.close(); }catch(FileNotFoundException e){ System.out.println(e); }catch(IOException e){ System.out.println(e); } return(seq); } static void fileWrite(String fn,String seq){ try { FileOutputStream fos = new FileOutputStream(fn); OutputStreamWriter osw = new OutputStreamWriter(fos , "UTF-8"); BufferedWriter bw = new BufferedWriter(osw); String msg = seq; bw.write(msg); bw.close(); osw.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } static String onRubyFilter(String fn){ String seq = fn; Pattern pattern; Matcher matcher; pattern = Pattern.compile("wikipedia"); matcher = pattern.matcher(seq); if( matcher.matches() == true ){ pattern = Pattern.compile("\\[wikipedia:<([^\\[<>\\]]+)>\\]"); matcher = pattern.matcher(seq); seq = matcher.replaceAll("<a href=\"http://ja.wikipedia.org/wiki/$2\">Wikipedia情報『$1』</a>"); pattern = Pattern.compile("\\[wikipedia:<([^\\[<>\\]]+)>\\]"); matcher = pattern.matcher(seq); seq = matcher.replaceAll("<a href=\"http://ja.wikipedia.org/wiki/$2\">Wikipedia情報『$1』</a>"); } if(Pattern.compile(">\\]").matcher(seq).find() == true){ seq = Pattern.compile("\\[([^\\[<>\\]]+)<([^\\[<>\\]]+)>\\]").matcher(seq).replaceAll("<ruby><rb>$1</rb><rp>(</rp><rt>$2</rt><rp>)</rp></ruby>"); } if(Pattern.compile(">\\]").matcher(seq).find() == true){ seq = Pattern.compile("\\[(.+)<(.+)>\\]").matcher(seq).replaceAll("<ruby><rb>$1</rb><rp>(</rp><rt>$2</rt><rp>)</rp></ruby>"); } return seq; } public static void main(String[] args) { String version = "RubyOn/Java/0.1b"; System.out.println("#.. ルビタグ挿入ユーティリティ" + version + "."); ArrayList<String> dir = DirList(); for(int i=0;i<dir.size();i++){ String seq = fileRead(dir.get(i)); String seqFlx = onRubyFilter(seq); if(!seq.equals(seqFlx)){ String fnFlx = dir.get(i); fileWrite(fnFlx,seqFlx); System.out.println("#.. " + dir.get(i) + "を処理しました。"); }else{ // System.out.println("は処理対象外でした。"); } } System.out.println("#.. すべての処理を終わりました。"); } }