예제 #1
0
        static public void convertPrefix(string name)
        {
            if (System.IO.Directory.Exists(name))
            {
                { // dir part
                    string   current = System.IO.Directory.GetCurrentDirectory();
                    string[] dirs    = System.IO.Directory.GetDirectories(name);
                    foreach (string dir in dirs)
                    {
                        if (IOController.validDirectory(dir))
                        {
                            convertPrefix(dir);
                        }
                    }
                }
                { // file part
                    string dname = System.IO.Path.GetFileName(name);
                    dname = dname.ToLower();
                    if (dname == Path.Data.DialogDirectoryName || dname == Path.Data.MessageDirectoryName)
                    {
                        string[] files = System.IO.Directory.GetFiles(name);
                        string   mod   = Path.Data.ModifiedDirectory;
                        foreach (string file in files)
                        {
                            if (IOController.validDlgMesFile(file))
                            {
                                int    pos     = file.IndexOf(mod);
                                string outfile = file.Substring(pos + mod.Length);

                                File prefix = new File();
                                prefix.open(file, false);
                                prefix.addPrefixFileNumber();
                                //prefix.save( tempname );
                                prefix.save(Path.Data.TemporaryDirectory + outfile);
                                // procは待機しないとデッドロックというより共有アクセス違反を起こす可能性大
                                // まともに動いても読み書きのタイミング次第では書き終わらないうちに前のファイルを誤読するはず
                                // マルチで動いているのを確認
                                // tempディレクトリに一旦全部バリバリ書き出したほうが早いのかなあ
                                //runConvertProcess( tempname, outfile, true );
                                runConvertProcess(Path.Data.TemporaryDirectory + outfile, Path.Data.ConvertedDirectory + outfile, false);
                            }

                            MainForm.incrementProgressBar();
                        }
                    }
                }
            }
        }
예제 #2
0
        void ConvertAddingPrefix_Click(object sender, EventArgs e)
        {
            // この前に開いているタブのセーブの確認
            if (preConvertSave() == false)
            {
                return;
            }


            // conv\Arcanum\の中身があれば掃除する

            // tempとかconv指定じゃダメなん?
            IOController.deleteDirectory(Path.Data.TemporaryDirectory + Path.Data.BaseDirectory);

            IOController.deleteDirectory(Path.Data.ConvertedDirectory + Path.Data.BaseDirectory);


            setStatus("コンバート開始...");

            // prefix
            // editorのタブの表示は変更したくないから開き直す

            // 一旦tempに出力

            // tempからconvに

            // 分けないと、通常コンバート時にファイルがたまるな…
            // あるいはコンバート前に一旦convを掃除するか
            // あと重いので諸々が更新されない そろそろプログレスバーを検討。できればマルチスレッドでもいいが
            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            watch.Start();
            initializeProgressBar(IOController.getNumFiles(Path.Data.BaseDirectory) + IOController.getNumFiles(Path.Data.ModifiedDirectory));

            Convert.convertPrefixOriginal(Path.Data.BaseDirectory);

            Convert.convertPrefix(Path.Data.ModifiedDirectory);

            watch.Stop();

            completeProgressBar();
            addStatus("完了" + " (" + watch.ElapsedMilliseconds + "ms)");

            // ゴミ処理
            IOController.deleteDirectory(Path.Data.TemporaryDirectory);
        }
예제 #3
0
        public static string exists(string path, string id, bool female)
        {
            // ファイル名、頭5桁の数字
            if (IOController.validDlgMesFile(path))
            {
                string file = System.IO.Path.GetFileNameWithoutExtension(path);
                if (file.Length > 5)
                {
                    string dir = file.Substring(0, 5);   // 数かどうかもチェックした方が良いが
                    // slide.mesの音声再生があるが、あれは構造が異なる
                    string speech = Path.Data.ModuleDirectory + @"Sound\Speech\" + dir + Path.Backslash;
                    if (System.IO.Directory.Exists(speech))
                    {
                        string prefix = @"v";
                        string m      = @"_m";
                        string f      = @"_f";
                        string ext    = Path.Ext.SpeechExtention;

                        // 多分ありえないだろうが、呼び出し元で符号とっておくこと
                        string name = prefix + id;
                        if (female)
                        {
                            string fpath = speech + name + f + ext;
                            if (System.IO.File.Exists(fpath))
                            {
                                return(fpath);
                            }
                        }

                        string mpath = speech + name + m + ext;
                        if (System.IO.File.Exists(mpath))
                        {
                            return(mpath);
                        }
                    }
                }
            }
            return(null);
        }
예제 #4
0
        static public void convert(string name)
        {
            if (System.IO.Directory.Exists(name))
            {
                { // dir part
                    string   current = System.IO.Directory.GetCurrentDirectory();
                    string[] dirs    = System.IO.Directory.GetDirectories(name);
                    foreach (string dir in dirs)
                    {
                        if (IOController.validDirectory(dir))
                        {
                            convert(dir);
                        }
                    }
                }

                { // file part
                    string dname = System.IO.Path.GetFileName(name);
                    dname = dname.ToLower();
                    if (dname == Path.Data.DialogDirectoryName || dname == Path.Data.MessageDirectoryName)
                    {
                        string[] files = System.IO.Directory.GetFiles(name);
                        string   mod   = Path.Data.ModifiedDirectory;
                        foreach (string file in files)
                        {
                            if (IOController.validDlgMesFile(file))
                            {
                                int    pos     = file.IndexOf(mod);
                                string outfile = file.Substring(pos + mod.Length);

                                runConvertProcess(file, Path.Data.ConvertedDirectory + outfile, false);
                            }
                            MainForm.incrementProgressBar();
                        }
                    }
                }
            }
        }
예제 #5
0
        void Convert_Click(object sender, EventArgs e)
        {
            if (preConvertSave() == false)
            {
                return;
            }

            // conv\Arcanum\の中身があれば掃除する
            // convで消さないのはなんで?
            IOController.deleteDirectory(Path.Data.ConvertedDirectory + Path.Data.BaseDirectory);

            setStatus("コンバート開始...");
            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            watch.Start();

            initializeProgressBar(IOController.getNumFiles(Path.Data.ModifiedDirectory));

            Convert.convert(Path.Data.ModifiedDirectory);

            watch.Stop();

            completeProgressBar();
            addStatus("完了" + " (" + watch.ElapsedMilliseconds + "ms)");
        }
예제 #6
0
        bool createFileTree(TreeNode node, string name)
        {
            bool find = false;
            { // dir part
                string   current = System.IO.Directory.GetCurrentDirectory();
                string[] dirs    = System.IO.Directory.GetDirectories(name);
                int      num     = 0;
                foreach (string dir in dirs)
                {
                    if (IOController.validDirectory(dir))
                    {
                        ++num;
                    }
                }
                if (num > 0)
                {
                    TreeNode[] nodes  = new TreeNode[num];
                    int        count  = 0;
                    bool       adding = false;
                    for (int i = 0; i < dirs.Length; ++i)
                    {
                        // 存在確認したいが、再起なのでpathをつなげていかないと難しいな
                        // あとaddrangeしてもnull混じりだとおちるかもしらんし
                        if (IOController.validDirectory(dirs[i]))
                        {
                            string dir = System.IO.Path.GetFileName(dirs[i]);
                            nodes[count]                    = new TreeNode(dir);
                            nodes[count].ImageIndex         = 0;
                            nodes[count].SelectedImageIndex = 0;
                            bool ret = createFileTree(nodes[count], dirs[i]);
                            if (ret)
                            {
                                find   = true;
                                adding = true;
                            }
                            ++count;
                        }
                    }
                    // 中にdlg,mesがあったら追加
                    if (adding)
                    {
                        node.Nodes.AddRange(nodes);
                    }
                }
            }
            { // file part
                string[] files = System.IO.Directory.GetFiles(name);
                int      num   = 0;
                foreach (string file in files)
                {
                    if (IOController.validDlgMesFile(file))
                    {
                        num++;
                        find = true;
                    }
                }
                if (num > 0)
                {
                    //Uri current = new Uri( Path.convineFullPath( Path.Data.BaseDirectory ) );
                    //TreeNode[] nodes = new TreeNode[ files.Length ];
                    TreeNode[] nodes = new TreeNode[num];
                    int        count = 0;
                    for (int i = 0; i < files.Length; ++i)
                    {
                        int icon = 1;
                        if (IOController.validDlgMesFile(files[i]))
                        {
                            nodes[count] = new TreeNode(System.IO.Path.GetFileName(files[i]));
                            string mod = Path.Data.ModifiedDirectory + files[i];
                            if (System.IO.File.Exists(mod))
                            {
                                icon = 2;
                            }
                            else
                            {
                                icon = 1;
                            }
                            nodes[count].ImageIndex         = icon;
                            nodes[count].SelectedImageIndex = icon;
                            ++count;
                        }
#if false
                        nodes[i] = new TreeNode(System.IO.Path.GetFileName(files[i]));
                        // 本当は進捗でやりたいのだが
                        int icon = 1;

                        // debug
                        //File file = new File();
                        switch (ext.ToLower())
                        {
                        case Path.Ext.MessageExtention:
                            //icon = 1;
                            //file.open( files[ i ], true );
                            //file.save( files[ i ] );
                            //System.Console.WriteLine( "|-" );
                            //System.Console.WriteLine( "| " + nodes[ i ].Text + " || || " );
                            //System.Console.WriteLine( "**" + nodes[ i ].Text );
                            //System.Console.WriteLine( "    \"" + nodes[ i ].Text + "\" => \"" + System.IO.Path.GetDirectoryName( files[ i ] ) + "\"," );
                            find = true;
                            break;

                        case Path.Ext.DialogueExtention:
                            //icon = 2;
                            //file.open( files[ i ], true );
                            //file.save( files[ i ] );
                            //System.Console.WriteLine( "|-" );
                            //System.Console.WriteLine( "| " + nodes[ i ].Text + " || || " );
                            //System.Console.WriteLine( "**" + nodes[i].Text );
                            find = true;
                            break;
                        }
                        //Uri uri = current.MakeRelativeUri( new Uri( files[ i ] ) );
                        //string mod = Path.convineFullPath( Path.Data.ModifiedDirectory + uri.ToString().Replace( '/', '\\' ) );
                        string mod = Path.Data.ModifiedDirectory + files[i];
                        if (System.IO.File.Exists(mod))
                        {
                            icon = 2;
                        }
                        else
                        {
                            icon = 1;
                        }
                        nodes[i].ImageIndex         = icon;
                        nodes[i].SelectedImageIndex = icon;
#endif
                    }
                    node.Nodes.AddRange(nodes);
                }
                else
                {
                    node.Expand();
                }
                return(find);
            }
        }
예제 #7
0
        void Progress_Click(object sender, EventArgs e)
        {
            initializeProgressBar(IOController.getNumFiles(@"Arcanum\"));

            setStatus("翻訳進捗率の算出中...");

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            watch.Start();

            // addでlistにでも情報詰めて集計は後にした方が楽かなー
            string       prog = Path.Xml.ProgressFile;
            ProgressFile pf   = new ProgressFile();

            if (System.IO.File.Exists(prog))
            {
                pf = xml.Xml.Read <ProgressFile>(prog);
            }
            // listのオーダーが気になるけど書いてないので念のためhashにするよ
            System.Collections.Hashtable ignore = new System.Collections.Hashtable();
            foreach (string f in pf.Ignore)
            {
                ignore.Add(f, 0);
            }
            foreach (string f in pf.Pending)
            {
                ignore.Add(f, 0);
            }


            List <ProgressCount> progress = new List <ProgressCount>();

            calcProgress(Path.Data.BaseDirectory, progress, ignore);

            string buff  = @"";
            int    num   = 0;
            int    total = 0;

            foreach (ProgressCount count in progress)
            {
                if (count.Exist)
                {
                    buff += @"*";
                }
                if (count.Translated < count.Total)
                {
                }
                else
                {
                    buff += @"+";
                }
                float rate = 0;
                if (count.Total > 0)
                {
                    rate = ( float )count.Translated / count.Total;
                }
                buff  += count.Name + ": " + count.Translated + " / " + count.Total + " (" + rate.ToString("P0") + ")\r\n";
                num   += count.Translated;
                total += count.Total;
            }
            if (total > 0)
            {
                float totalrate = ( float )num / total;
                buff = "TOTAL: " + num + " / " + total + " (" + totalrate.ToString("P0") + ")\r\n" + buff;
                string output = @"progress.txt";
                using (System.IO.StreamWriter writer = new System.IO.StreamWriter(output, false, System.Text.Encoding.GetEncoding("shift_jis"))) {
                    //writer.AutoFlush = true; // 即時書き込み
                    writer.Write(buff);
                    runEditor(output);
                }
            }

            completeProgressBar();

            watch.Stop();

            addStatus("完了: progress.txt" + " (" + watch.ElapsedMilliseconds + "ms)");

            // 本とかのチェックにひっかかってるなあ
            // prefix用とは別関数用意しないと
        }
예제 #8
0
        void calcProgress(string name, List <ProgressCount> progress, System.Collections.Hashtable ignore)
        {
            if (System.IO.Directory.Exists(name) == false)
            {
                return;
            }
            { // dir part
                string   current = System.IO.Directory.GetCurrentDirectory();
                string[] dirs    = System.IO.Directory.GetDirectories(name);
                foreach (string dir in dirs)
                {
                    if (IOController.validDirectory(dir))
                    {
                        calcProgress(dir, progress, ignore);
                    }
                }
            }
            { // file part
                string dname = System.IO.Path.GetFileName(name);
                dname = dname.ToLower();
                if (dname == Path.Data.DialogDirectoryName || dname == Path.Data.MessageDirectoryName)
                {
                    string[] files = System.IO.Directory.GetFiles(name);
                    foreach (string file in files)
                    {
                        // 除外ファイル
                        if (IOController.validDlgMesFile(file) && ignore.ContainsKey(file) == false)
                        {
                            File ori = new File();
                            ori.open(file, true);
                            int    num     = 0;
                            int    idnum   = ori.IDs.Count;
                            string modpath = Path.Data.ModifiedDirectory + file;
                            bool   exist   = System.IO.File.Exists(modpath);
                            if (exist)
                            {
                                File mod = new File();
                                mod.open(modpath, false);

                                int count = 0;
                                // compair
                                for (int i = 0; i < idnum; ++i)
                                {
                                    string id = ori.IDs[i] as string;
                                    if (id != null)
                                    {
                                        File.Chunk oc = ori.Chunks[id] as File.Chunk;
                                        File.Chunk mc = mod.Chunks[id] as File.Chunk;
                                        if (oc != null && mc != null)
                                        {
                                            // この比較回数を削りたい
                                            if (ori.Type == File.FileType.MES)
                                            {
                                                File.Node omes = oc.Message;
                                                File.Node mmes = mc.Message;
                                                if (File.checkAvailable(omes.Original))
                                                {
                                                    ++count;
                                                    if (omes.Original.CompareTo(mmes.Modify) != 0)
                                                    {
                                                        ++num;
                                                    }
                                                }
                                                else
                                                {
                                                    //++num;
                                                }
                                            }
                                            else
                                            {
                                                File.Node omale   = oc.MaleLine;
                                                File.Node ofemale = oc.FemaleLine;
                                                File.Node mmale   = mc.MaleLine;
                                                File.Node mfemale = mc.FemaleLine;
                                                // 二つあるしどういう条件にしようかなと 0.5?

                                                // 空はどうするかね

                                                // ある程度除外しないとあれだが、その辺はしょうがないのかねえ
                                                // だが[E:]みたいなのは、別ファイル参照なので除外してもいいかも

                                                // 男女別でカウント
                                                if (File.checkAvailable(omale.Original))
                                                {
                                                    if (omale.Original.CompareTo(mmale.Modify) != 0)
                                                    {
                                                        if (File.checkAvailable(ofemale.Original))
                                                        {
                                                            ++count;
                                                            if (ofemale.Original.CompareTo(mfemale.Modify) != 0)
                                                            {
                                                                ++num;
                                                            }
                                                        }
                                                        else
                                                        {
                                                            //++num;
                                                        }
                                                    }
                                                }
                                                if (File.checkAvailable(ofemale.Original))
                                                {
                                                    ++count;
                                                    if (ofemale.Original.CompareTo(mfemale.Modify) != 0)
                                                    {
                                                        ++num;
                                                    }
                                                }
                                                else
                                                {
                                                    //++num;
                                                }
                                            }
                                        }
                                    }
                                }
                                idnum = count;

#if false
                                if (num < idnum)
                                {
                                    System.Console.WriteLine("\t" + modpath + ": " + num + " / " + idnum);
                                }
                                else
                                {
                                    System.Console.WriteLine(modpath + ": " + num + " / " + idnum);
                                }
#endif
                            }
                            else
                            {
                                int count = 0;
                                for (int i = 0; i < idnum; ++i)
                                {
                                    string id = ori.IDs[i] as string;
                                    if (id != null)
                                    {
                                        File.Chunk oc = ori.Chunks[id] as File.Chunk;
                                        if (oc != null)
                                        {
                                            // この比較回数を削りたいのう
                                            if (ori.Type == File.FileType.MES)
                                            {
                                                File.Node omes = oc.Message;
                                                if (File.checkAvailable(omes.Original))
                                                {
                                                    ++count;
                                                }
                                            }
                                            else
                                            {
                                                File.Node omale   = oc.MaleLine;
                                                File.Node ofemale = oc.FemaleLine;
                                                // 二つあるしどういう条件にしようかなと 0.5?

                                                // 空はどうするかね

                                                // ある程度除外しないとあれだが、その辺はしょうがないのかねえ
                                                // だが[E:]みたいなのは、別ファイル参照なので除外してもいいかも
                                                // 男女別でカウント
                                                if (File.checkAvailable(omale.Original))
                                                {
                                                    ++count;
                                                }
                                                if (File.checkAvailable(ofemale.Original))
                                                {
                                                    ++count;
                                                }
#if false
                                                if (File.checkAvailable(omale.Original) || File.checkAvailable(ofemale.Original))
                                                {
                                                    ++count;
                                                }
#endif
                                            }
                                        }
                                    }
                                }
                                idnum = count;
                            }

                            progress.Add(new ProgressCount(file, num, idnum, exist));
                        }
                        else
                        {
                            //System.Console.WriteLine( "invalid format:" + file );
                        }

                        incrementProgressBar();
                    }
                }
            }
        }