OSDN Git Service

pmd-plugin 3.0.1(PMD 5.0.2) 対応
[mikutoga/TogaGem.git] / src / main / java / jp / sfjp / mikutoga / pmd / ShadingUtil.java
1 /*
2  * shading file utility
3  *
4  * License : The MIT License
5  * Copyright(c) 2013 MikuToga Partners
6  */
7
8 package jp.sfjp.mikutoga.pmd;
9
10 import java.util.regex.Pattern;
11
12 /**
13  * シェーディング情報の各種ユーティリティ。
14  * <p>※ スフィアマップファイルの中身はBMP(DIB)形式。
15  * <p><a href="http://en.wikipedia.org/wiki/BMP_file_format">
16  * BMP file format </a>
17  */
18 public final class ShadingUtil {
19
20     /** スフィアマップファイル名(乗算)拡張子。 */
21     public static final String EXT_SPH = ".sph";
22     /** スフィアマップファイル名(加算)拡張子。 */
23     public static final String EXT_SPA = ".spa";
24
25     private static final String SEPARATOR = Pattern.quote("*");
26     private static final Pattern SPLITTER = Pattern.compile(SEPARATOR);
27
28
29     /**
30      * 隠しコンストラクタ。
31      */
32     private ShadingUtil(){
33         assert false;
34         throw new AssertionError();
35     }
36
37
38     /**
39      * スフィアマップファイル名か否か判定する。
40      * <p>拡張子が「.sph」(乗算)もしくは「.spa」(加算)なら
41      * スフィアマップファイル名と判定する。
42      * @param fname ファイル名
43      * @return スフィアマップファイルならtrue
44      */
45     public static boolean isSpheremapFile(String fname) {
46         if(fname.endsWith(EXT_SPH)) return true;
47         if(fname.endsWith(EXT_SPA)) return true;
48         return false;
49     }
50
51     /**
52      * シェーディング用ファイル情報文字列から
53      * テクスチャファイル名とスフィアマップファイル名を分離する。
54      * <p>2つのファイル名は単一の「*」で区切られ、
55      * 前部がテクスチャファイル名、後部がスフィアマップファイル名となる。
56      * 「*」がなく末尾が「.sph」か「.spa」なら
57      * スフィアマップファイル名のみ、
58      * 末尾がどちらでもなければテクスチャファイル名のみとなる。
59      * @param shadingFile シェーディング用ファイル情報
60      * @return [0]:テクスチャファイル名 [1]:スフィアマップファイル名。
61      * 該当ファイル名が無い場合は空文字列。
62      */
63     public static String[] splitShadingFileInfo(String shadingFile) {
64         String[] result;
65
66         result = SPLITTER.split(shadingFile, 2);
67         assert result.length == 1 || result.length == 2;
68
69         if(result.length == 1){
70             String onlyFile = result[0];
71             if (isSpheremapFile(onlyFile)){
72                 result = new String[]{ "", onlyFile };
73             }else{
74                 result = new String[]{ onlyFile, "" };
75             }
76         }
77
78         assert result.length == 2;
79
80         return result;
81     }
82
83 }