OSDN Git Service

character.iniと一緒にあるreadmeの取り込み
authorseraphy <seraphy@5b6e9025-a2e8-4882-b233-f889982098c5>
Sat, 23 Nov 2013 15:22:42 +0000 (15:22 +0000)
committerseraphy <seraphy@5b6e9025-a2e8-4882-b233-f889982098c5>
Sat, 23 Nov 2013 15:22:42 +0000 (15:22 +0000)
git-svn-id: https://svn.sourceforge.jp/svnroot/charactermanaj/trunk@81 5b6e9025-a2e8-4882-b233-f889982098c5

src/charactermanaj/model/io/AbstractCharacterDataArchiveFile.java
src/charactermanaj/model/io/CharacterDataPersistent.java
src/charactermanaj/model/io/TextReadHelper.java [new file with mode: 0644]

index 843a5b4..9519952 100644 (file)
@@ -1,12 +1,9 @@
 package charactermanaj.model.io;\r
 \r
 import java.awt.image.BufferedImage;\r
-import java.io.ByteArrayInputStream;\r
-import java.io.ByteArrayOutputStream;\r
 import java.io.File;\r
 import java.io.IOException;\r
 import java.io.InputStream;\r
-import java.io.InputStreamReader;\r
 import java.net.URI;\r
 import java.net.URISyntaxException;\r
 import java.util.ArrayList;\r
@@ -627,64 +624,7 @@ public abstract class AbstractCharacterDataArchiveFile
                if (content == null) {\r
                        throw new IllegalArgumentException();\r
                }\r
-\r
-               // 一旦メモリに取り込む\r
-               ByteArrayOutputStream bos = new ByteArrayOutputStream();\r
-               InputStream is = content.openStream();\r
-               try {\r
-                       int ch;\r
-                       while ((ch = is.read()) != -1) {\r
-                               bos.write((byte) ch);\r
-                       }\r
-               } finally {\r
-                       is.close();\r
-               }\r
-               byte[] buf = bos.toByteArray();\r
-\r
-               String enc = null;\r
-               if (buf.length >= 2) {\r
-                       // Windowsのメモ帳はUTF-16にBOMをつけるので、これで判定できる。\r
-                       // 本アプリケーションのエクスポート時もUTF-16LEのBOM付きで出力する。\r
-                       // 一般的なエディタはUTF-16BEにはBOMをつけないので、事前に判定することはできない。\r
-                       if ((buf[0] & 0xff) == 0xff && (buf[1] & 0xff) == 0xfe) {\r
-                               enc = "UTF-16LE";\r
-                       } else if ((buf[0] & 0xff) == 0xfe && (buf[1] & 0xff) == 0xff) {\r
-                               enc = "UTF-16BE";\r
-                       }\r
-               }\r
-               if (enc == null && buf.length >= 3) {\r
-                       if ((buf[0] & 0xff) == 0xef && (buf[1] & 0xff) == 0xbb\r
-                                       && (buf[1] & 0xff) == 0xbf) {\r
-                               // Windowsのメモ帳などはUTF-8にBOMをつけるので、これで判定できる。\r
-                               // 一般的なエディタではUTF-8のBOMはつけないのでUTF-8であるかどうかを事前判定することはできない。\r
-                               enc = "UTF-8";\r
-                       }\r
-               }\r
-               if (enc == null) {\r
-                       // BOMがない場合はMS932かEUC_JPのいずれかであろう、と仮定する。\r
-                       enc = "JISAutoDetect"; // SJIS/EUC_JPの自動判定\r
-               }\r
-\r
-               // 文字列として変換\r
-               StringBuilder str = new StringBuilder();\r
-               InputStreamReader rd = new InputStreamReader(new ByteArrayInputStream(\r
-                               buf), enc);\r
-               try {\r
-                       int ch;\r
-                       while ((ch = rd.read()) != -1) {\r
-                               str.append((char) ch);\r
-                       }\r
-               } finally {\r
-                       rd.close();\r
-               }\r
-\r
-               // 改行コードをプラットフォーム固有のものに変換\r
-               String line = str.toString();\r
-               line = line.replace("\r\n", "\n");\r
-               line = line.replace("\r", "\n");\r
-               line = line.replace("\n", System.getProperty("line.separator"));\r
-\r
-               return line;\r
+               return TextReadHelper.readTextTryEncoding(content.openStream());\r
        }\r
 \r
        /**\r
index 276cd1b..5840e81 100644 (file)
@@ -381,9 +381,23 @@ public class CharacterDataPersistent {
                                        version = DefaultCharacterDataVersion.V2;\r
                                }\r
 \r
+                               // readmeがあるか?\r
+                               String readme = null;\r
+                               File readmeFile = new File(dir, "readme.txt");\r
+                               if (readmeFile.exists() && readmeFile.canRead()) {\r
+                                       try {\r
+                                               readme = TextReadHelper\r
+                                                               .readTextTryEncoding(new FileInputStream(\r
+                                                                               readmeFile));\r
+\r
+                                       } catch (IOException ex) {\r
+                                               logger.log(Level.WARNING, ex.toString(), ex);\r
+                                       }\r
+                               }\r
+\r
                                try {\r
                                        convertFromCharacterIni(characterIniFile, characterXmlFile,\r
-                                                       version);\r
+                                                       version, readme);\r
 \r
                                } catch (Exception ex) {\r
                                        logger.log(Level.WARNING, "character.xmlの生成に失敗しました。:"\r
@@ -928,11 +942,14 @@ public class CharacterDataPersistent {
         *            書き込まれるcharacter.xmlファイル\r
         * @param version\r
         *            デフォルトキャラクターセットのバージョン\r
+        * @param description\r
+        *            説明\r
         * @throws IOException\r
         *             失敗した場合\r
         */\r
        public void convertFromCharacterIni(File characterIniFile,\r
-                       File characterXmlFile, DefaultCharacterDataVersion version)\r
+                       File characterXmlFile, DefaultCharacterDataVersion version,\r
+                       String description)\r
                        throws IOException {\r
                if (characterIniFile == null || characterXmlFile == null\r
                                || version == null) {\r
@@ -950,6 +967,11 @@ public class CharacterDataPersistent {
                        is.close();\r
                }\r
 \r
+               // 説明文を設定する\r
+               if (description != null) {\r
+                       characterData.setDescription(description);\r
+               }\r
+\r
                // docBase\r
                URI docBase = characterXmlFile.toURI();\r
                characterData.setDocBase(docBase);\r
diff --git a/src/charactermanaj/model/io/TextReadHelper.java b/src/charactermanaj/model/io/TextReadHelper.java
new file mode 100644 (file)
index 0000000..53fe730
--- /dev/null
@@ -0,0 +1,96 @@
+package charactermanaj.model.io;\r
+\r
+import java.io.ByteArrayInputStream;\r
+import java.io.ByteArrayOutputStream;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.io.InputStreamReader;\r
+\r
+/**\r
+ * テキストの読み込みヘルパー.<br>\r
+ * \r
+ * @author seraphy\r
+ */\r
+public final class TextReadHelper {\r
+\r
+       /**\r
+        * プライベートコンストラクタ\r
+        */\r
+       private TextReadHelper() {\r
+               super();\r
+       }\r
+\r
+       /**\r
+        * 入力ストリームを指定して、テキストファイルを読み込みます.<br>\r
+        * 入力ストリームは内部で閉じられます.<br>\r
+        * \r
+        * @param is\r
+        *            入力ストリーム\r
+        * @return テキスト、もしくはnull\r
+        * @throws IOException\r
+        *             失敗\r
+        */\r
+       public static String readTextTryEncoding(InputStream is) throws IOException {\r
+               if (is == null) {\r
+                       return null;\r
+               }\r
+\r
+               // 一旦メモリに取り込む\r
+               ByteArrayOutputStream bos = new ByteArrayOutputStream();\r
+               try {\r
+                       int ch;\r
+                       while ((ch = is.read()) != -1) {\r
+                               bos.write((byte) ch);\r
+                       }\r
+               } finally {\r
+                       is.close();\r
+               }\r
+               byte[] buf = bos.toByteArray();\r
+\r
+               String enc = null;\r
+               if (buf.length >= 2) {\r
+                       // Windowsのメモ帳はUTF-16にBOMをつけるので、これで判定できる。\r
+                       // 本アプリケーションのエクスポート時もUTF-16LEのBOM付きで出力する。\r
+                       // 一般的なエディタはUTF-16BEにはBOMをつけないので、事前に判定することはできない。\r
+                       if ((buf[0] & 0xff) == 0xff && (buf[1] & 0xff) == 0xfe) {\r
+                               enc = "UTF-16LE";\r
+                       } else if ((buf[0] & 0xff) == 0xfe && (buf[1] & 0xff) == 0xff) {\r
+                               enc = "UTF-16BE";\r
+                       }\r
+               }\r
+               if (enc == null && buf.length >= 3) {\r
+                       if ((buf[0] & 0xff) == 0xef && (buf[1] & 0xff) == 0xbb\r
+                                       && (buf[1] & 0xff) == 0xbf) {\r
+                               // Windowsのメモ帳などはUTF-8にBOMをつけるので、これで判定できる。\r
+                               // 一般的なエディタではUTF-8のBOMはつけないのでUTF-8であるかどうかを事前判定することはできない。\r
+                               enc = "UTF-8";\r
+                       }\r
+               }\r
+               if (enc == null) {\r
+                       // BOMがない場合はMS932かEUC_JPのいずれかであろう、と仮定する。\r
+                       enc = "JISAutoDetect"; // SJIS/EUC_JPの自動判定\r
+               }\r
+\r
+               // 文字列として変換\r
+               StringBuilder str = new StringBuilder();\r
+               InputStreamReader rd = new InputStreamReader(new ByteArrayInputStream(\r
+                               buf), enc);\r
+               try {\r
+                       int ch;\r
+                       while ((ch = rd.read()) != -1) {\r
+                               str.append((char) ch);\r
+                       }\r
+               } finally {\r
+                       rd.close();\r
+               }\r
+\r
+               // 改行コードをプラットフォーム固有のものに変換\r
+               String line = str.toString();\r
+               line = line.replace("\r\n", "\n");\r
+               line = line.replace("\r", "\n");\r
+               line = line.replace("\n", System.getProperty("line.separator"));\r
+\r
+               return line;\r
+       }\r
+\r
+}\r