OSDN Git Service

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