• R/O
  • SSH
  • HTTPS

charactermanaj: コミット


コミットメタ情報

リビジョン81 (tree)
日時2013-11-24 00:22:42
作者seraphy

ログメッセージ

character.iniと一緒にあるreadmeの取り込み

変更サマリ

差分

--- trunk/src/charactermanaj/model/io/CharacterDataPersistent.java (revision 80)
+++ trunk/src/charactermanaj/model/io/CharacterDataPersistent.java (revision 81)
@@ -381,9 +381,23 @@
381381 version = DefaultCharacterDataVersion.V2;
382382 }
383383
384+ // readmeがあるか?
385+ String readme = null;
386+ File readmeFile = new File(dir, "readme.txt");
387+ if (readmeFile.exists() && readmeFile.canRead()) {
388+ try {
389+ readme = TextReadHelper
390+ .readTextTryEncoding(new FileInputStream(
391+ readmeFile));
392+
393+ } catch (IOException ex) {
394+ logger.log(Level.WARNING, ex.toString(), ex);
395+ }
396+ }
397+
384398 try {
385399 convertFromCharacterIni(characterIniFile, characterXmlFile,
386- version);
400+ version, readme);
387401
388402 } catch (Exception ex) {
389403 logger.log(Level.WARNING, "character.xmlの生成に失敗しました。:"
@@ -928,11 +942,14 @@
928942 * 書き込まれるcharacter.xmlファイル
929943 * @param version
930944 * デフォルトキャラクターセットのバージョン
945+ * @param description
946+ * 説明
931947 * @throws IOException
932948 * 失敗した場合
933949 */
934950 public void convertFromCharacterIni(File characterIniFile,
935- File characterXmlFile, DefaultCharacterDataVersion version)
951+ File characterXmlFile, DefaultCharacterDataVersion version,
952+ String description)
936953 throws IOException {
937954 if (characterIniFile == null || characterXmlFile == null
938955 || version == null) {
@@ -950,6 +967,11 @@
950967 is.close();
951968 }
952969
970+ // 説明文を設定する
971+ if (description != null) {
972+ characterData.setDescription(description);
973+ }
974+
953975 // docBase
954976 URI docBase = characterXmlFile.toURI();
955977 characterData.setDocBase(docBase);
--- trunk/src/charactermanaj/model/io/AbstractCharacterDataArchiveFile.java (revision 80)
+++ trunk/src/charactermanaj/model/io/AbstractCharacterDataArchiveFile.java (revision 81)
@@ -1,12 +1,9 @@
11 package charactermanaj.model.io;
22
33 import java.awt.image.BufferedImage;
4-import java.io.ByteArrayInputStream;
5-import java.io.ByteArrayOutputStream;
64 import java.io.File;
75 import java.io.IOException;
86 import java.io.InputStream;
9-import java.io.InputStreamReader;
107 import java.net.URI;
118 import java.net.URISyntaxException;
129 import java.util.ArrayList;
@@ -627,64 +624,7 @@
627624 if (content == null) {
628625 throw new IllegalArgumentException();
629626 }
630-
631- // 一旦メモリに取り込む
632- ByteArrayOutputStream bos = new ByteArrayOutputStream();
633- InputStream is = content.openStream();
634- try {
635- int ch;
636- while ((ch = is.read()) != -1) {
637- bos.write((byte) ch);
638- }
639- } finally {
640- is.close();
641- }
642- byte[] buf = bos.toByteArray();
643-
644- String enc = null;
645- if (buf.length >= 2) {
646- // Windowsのメモ帳はUTF-16にBOMをつけるので、これで判定できる。
647- // 本アプリケーションのエクスポート時もUTF-16LEのBOM付きで出力する。
648- // 一般的なエディタはUTF-16BEにはBOMをつけないので、事前に判定することはできない。
649- if ((buf[0] & 0xff) == 0xff && (buf[1] & 0xff) == 0xfe) {
650- enc = "UTF-16LE";
651- } else if ((buf[0] & 0xff) == 0xfe && (buf[1] & 0xff) == 0xff) {
652- enc = "UTF-16BE";
653- }
654- }
655- if (enc == null && buf.length >= 3) {
656- if ((buf[0] & 0xff) == 0xef && (buf[1] & 0xff) == 0xbb
657- && (buf[1] & 0xff) == 0xbf) {
658- // Windowsのメモ帳などはUTF-8にBOMをつけるので、これで判定できる。
659- // 一般的なエディタではUTF-8のBOMはつけないのでUTF-8であるかどうかを事前判定することはできない。
660- enc = "UTF-8";
661- }
662- }
663- if (enc == null) {
664- // BOMがない場合はMS932かEUC_JPのいずれかであろう、と仮定する。
665- enc = "JISAutoDetect"; // SJIS/EUC_JPの自動判定
666- }
667-
668- // 文字列として変換
669- StringBuilder str = new StringBuilder();
670- InputStreamReader rd = new InputStreamReader(new ByteArrayInputStream(
671- buf), enc);
672- try {
673- int ch;
674- while ((ch = rd.read()) != -1) {
675- str.append((char) ch);
676- }
677- } finally {
678- rd.close();
679- }
680-
681- // 改行コードをプラットフォーム固有のものに変換
682- String line = str.toString();
683- line = line.replace("\r\n", "\n");
684- line = line.replace("\r", "\n");
685- line = line.replace("\n", System.getProperty("line.separator"));
686-
687- return line;
627+ return TextReadHelper.readTextTryEncoding(content.openStream());
688628 }
689629
690630 /**
--- trunk/src/charactermanaj/model/io/TextReadHelper.java (nonexistent)
+++ trunk/src/charactermanaj/model/io/TextReadHelper.java (revision 81)
@@ -0,0 +1,96 @@
1+package charactermanaj.model.io;
2+
3+import java.io.ByteArrayInputStream;
4+import java.io.ByteArrayOutputStream;
5+import java.io.IOException;
6+import java.io.InputStream;
7+import java.io.InputStreamReader;
8+
9+/**
10+ * テキストの読み込みヘルパー.<br>
11+ *
12+ * @author seraphy
13+ */
14+public final class TextReadHelper {
15+
16+ /**
17+ * プライベートコンストラクタ
18+ */
19+ private TextReadHelper() {
20+ super();
21+ }
22+
23+ /**
24+ * 入力ストリームを指定して、テキストファイルを読み込みます.<br>
25+ * 入力ストリームは内部で閉じられます.<br>
26+ *
27+ * @param is
28+ * 入力ストリーム
29+ * @return テキスト、もしくはnull
30+ * @throws IOException
31+ * 失敗
32+ */
33+ public static String readTextTryEncoding(InputStream is) throws IOException {
34+ if (is == null) {
35+ return null;
36+ }
37+
38+ // 一旦メモリに取り込む
39+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
40+ try {
41+ int ch;
42+ while ((ch = is.read()) != -1) {
43+ bos.write((byte) ch);
44+ }
45+ } finally {
46+ is.close();
47+ }
48+ byte[] buf = bos.toByteArray();
49+
50+ String enc = null;
51+ if (buf.length >= 2) {
52+ // Windowsのメモ帳はUTF-16にBOMをつけるので、これで判定できる。
53+ // 本アプリケーションのエクスポート時もUTF-16LEのBOM付きで出力する。
54+ // 一般的なエディタはUTF-16BEにはBOMをつけないので、事前に判定することはできない。
55+ if ((buf[0] & 0xff) == 0xff && (buf[1] & 0xff) == 0xfe) {
56+ enc = "UTF-16LE";
57+ } else if ((buf[0] & 0xff) == 0xfe && (buf[1] & 0xff) == 0xff) {
58+ enc = "UTF-16BE";
59+ }
60+ }
61+ if (enc == null && buf.length >= 3) {
62+ if ((buf[0] & 0xff) == 0xef && (buf[1] & 0xff) == 0xbb
63+ && (buf[1] & 0xff) == 0xbf) {
64+ // Windowsのメモ帳などはUTF-8にBOMをつけるので、これで判定できる。
65+ // 一般的なエディタではUTF-8のBOMはつけないのでUTF-8であるかどうかを事前判定することはできない。
66+ enc = "UTF-8";
67+ }
68+ }
69+ if (enc == null) {
70+ // BOMがない場合はMS932かEUC_JPのいずれかであろう、と仮定する。
71+ enc = "JISAutoDetect"; // SJIS/EUC_JPの自動判定
72+ }
73+
74+ // 文字列として変換
75+ StringBuilder str = new StringBuilder();
76+ InputStreamReader rd = new InputStreamReader(new ByteArrayInputStream(
77+ buf), enc);
78+ try {
79+ int ch;
80+ while ((ch = rd.read()) != -1) {
81+ str.append((char) ch);
82+ }
83+ } finally {
84+ rd.close();
85+ }
86+
87+ // 改行コードをプラットフォーム固有のものに変換
88+ String line = str.toString();
89+ line = line.replace("\r\n", "\n");
90+ line = line.replace("\r", "\n");
91+ line = line.replace("\n", System.getProperty("line.separator"));
92+
93+ return line;
94+ }
95+
96+}
旧リポジトリブラウザで表示