Exemplo n.º 1
0
        /// <summary>
        /// Append a script into other script file.
        /// </summary>
        /// <param name="subScriptFilePath">Source script file.</param>
        /// <param name="outFilePath">Target script file.</param>
        /// <param name="append">Whether appending to target script file.</param>
        /// <returns>Invalid format script entry strings.</returns>
        private DataErrorSet AppendScript(string subScriptFilePath,
            string outFilePath, bool append)
        {
            DataErrorSet errorSet = new DataErrorSet();

            SortedDictionary<string, ScriptItem> existEntries = new SortedDictionary<string, ScriptItem>();
            if (append && File.Exists(outFilePath))
            {
                errorSet = ReadAllData(outFilePath, Language, EngineType, existEntries);
            }
            else
            {
                Helper.EnsureFolderExistForFile(outFilePath);
            }

            SortedDictionary<string, ScriptItem> subEntries = new SortedDictionary<string, ScriptItem>();
            DataErrorSet subErrorSet = ReadAllData(subScriptFilePath,
                 Language, EngineType, subEntries);
            errorSet.Merge(subErrorSet);

            using (StreamWriter sw = new StreamWriter(outFilePath, append, Encoding.Unicode))
            {
                foreach (string sid in subEntries.Keys)
                {
                    if (existEntries.ContainsKey(sid))
                    {
                        DataError error = new DataError(subScriptFilePath,
                            "Entry already exists in script file [" + outFilePath + "]", sid);
                        errorSet.Errors.Add(error);
                        continue;
                    }

                    // hook handling
                    DataError preAppendError = ProcessPronunciation(subEntries[sid]);
                    if (preAppendError != null)
                    {
                        errorSet.Errors.Add(preAppendError);
                        continue;
                    }

                    sw.WriteLine(subEntries[sid].ToString(true, true, true));
                }
            }

            return errorSet;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Concatenate script files in given file list into an unified sript file and reorder the sentence ID.
        /// </summary>
        /// <param name="language">Language of the script to process.</param>
        /// <param name="fileList">A set of file names to be concatenated.</param>
        /// <param name="resetSid">A bool to indicate whether re-oreder the sentence ID of all scripts.</param>
        /// <param name="targetScriptFilePath">The output script file path.</param>
        /// <returns>Data error set containing error found.</returns>
        public static DataErrorSet ConcatenateFiles(Language language, IEnumerable<string> fileList, bool resetSid,
            string targetScriptFilePath)
        {
            if (string.IsNullOrEmpty(targetScriptFilePath))
            {
                throw new ArgumentNullException("targetScriptFilePath");
            }

            if (fileList == null)
            {
                throw new ArgumentNullException("fileList");
            }

            ScriptFile script = Localor.CreateScriptFile(language);
            DataErrorSet errorSet = new DataErrorSet();

            int count = 0;
            foreach (string file in fileList)
            {
                if (string.IsNullOrEmpty(file))
                {
                    continue;
                }

                ScriptFile subScript = Localor.CreateScriptFile(language);
                subScript.Load(file);
                errorSet.Merge(subScript.ErrorSet);

                foreach (string sid in subScript.Items.Keys)
                {
                    ScriptItem item = subScript.Items[sid];

                    item.Id = resetSid ? Helper.NeutralFormat("{0:D10}", ++count) : sid;

                    if (script.Items.ContainsKey(item.Id))
                    {
                        errorSet.Errors.Add(new DataError(file, "Sentence already exist", sid));
                        continue;
                    }

                    script.Items.Add(item.Id, item);
                }
            }

            Helper.EnsureFolderExistForFile(targetScriptFilePath);
            script.Save(targetScriptFilePath);

            return errorSet;
        }
Exemplo n.º 3
0
        /// <summary>
        /// Build pronunciation script from file list.
        /// </summary>
        /// <param name="scriptFilePaths">Hiragana script file list.</param>
        /// <param name="outFilePath">Romaji pronunciation script file.</param>
        /// <returns>Data error set found.</returns>
        public DataErrorSet BuildScript(string[] scriptFilePaths,
            string outFilePath)
        {
            if (scriptFilePaths == null)
            {
                throw new ArgumentNullException("scriptFilePaths");
            }

            DataErrorSet errorSet = new DataErrorSet();

            for (int i = 0; i < scriptFilePaths.Length; i++)
            {
                string scriptFilePath = scriptFilePaths[i];

                if (string.IsNullOrEmpty(scriptFilePath))
                {
                    throw new InvalidDataException("scriptFilePath");
                }

                if (!scriptFilePath.EndsWith(ScriptFile.Extension, StringComparison.Ordinal))
                {
                    continue;
                }

                // all script files should be saved in unicode
                if (!Helper.IsUnicodeFile(scriptFilePath))
                {
                    DataError error = new DataError(scriptFilePath,
                        "script file should be saved in Unicode.");
                    errorSet.Errors.Add(error);
                    continue;
                }

                // do appending
                DataErrorSet subErrorSet = AppendScript(scriptFilePath,
                    outFilePath, (i != 0));

                // merge error messages
                errorSet.Merge(subErrorSet);
            }

            return errorSet;
        }