Esempio n. 1
0
        /// <summary>
        /// 创建翻译文件
        /// </summary>
        /// <param name="language">目标语言</param>
        public void CreateTranslationFile(string language)
        {
            if (!Application.isEditor)
            {
                throw new NotSupportedException($"Cannot create translation file for {id}: static file compiler can only run in editor mode");
            }
            var target = $"Assets/{CompileConfiguration.Content.TranslationFolder}/{language}";

            if (!Directory.Exists(target))
            {
                Directory.CreateDirectory(target);
            }
            target = CreateLanguageAssetPathFromId(id, language);
            if (File.Exists(target))
            {
                var translation = new ScriptTranslation(File.ReadAllText(target, Encoding.UTF8));
                if (translation.MergeWith(ScriptHeader.LoadSync(id).Header.LoadDefaultTranslation()))
                {
                    translation.SaveToAsset(target);
                }
            }
            else
            {
                ScriptHeader.LoadSync(id).Header.LoadDefaultTranslation().SaveToAsset(target);
            }
        }
Esempio n. 2
0
        public static void SetHeader(ScriptResult result, string fieldName, string displayText, string type, string key)
        {
            if (string.IsNullOrEmpty(displayText))
            {
                displayText = fieldName;
            }

            ScriptHeader h = new ScriptHeader()
            {
                FieldName = fieldName, DisplayText = displayText
            };

            switch (type)
            {
            case "int":
                h.Type = typeof(int);
                break;

            case "string":
                h.Type = typeof(string);
                break;

            default:
                h.Type = typeof(object);
                break;
            }

            if (!result.DataSet.ContainsKey(key))
            {
                result.DataSet.Add(key, new ScriptData());
            }

            result.DataSet[key].AddHeader(h);
        }
Esempio n. 3
0
        public override void OnInspectorGUI()
        {
            if (_scriptStyle == null)
            {
                _scriptStyle = new GUIStyle("ScriptText");
            }
            var scriptAsset = target as ScriptAsset;

            if (scriptAsset == null)
            {
                throw new TypeLoadException("Inspected type is not VisualNovelScriptImporter");
            }
            if (scriptAsset.content?.Length == 0)
            {
                EditorGUILayout.LabelField("This is an empty file");
                return;
            }
            if (string.IsNullOrEmpty(_assemblyCode))
            {
                var assemblyContent = new AssemblyContent();
                var(header, bytes) = ScriptHeader.ParseBinary("", scriptAsset.content);
                var           script = new ScriptFile(header, bytes);
                OperationCode?code;
                do
                {
                    var label = script.Header.Labels.Where(e => e.Value == script.CurrentPosition).ToList();
                    if (label.Any())
                    {
                        foreach (var pointer in label)
                        {
                            assemblyContent.Content.AppendLine($"< label {pointer.Key} >");
                        }
                    }
                    SourcePosition?position;
                    try {
                        position = script.Header.Positions[script.CurrentPosition];
                    } catch {
                        position = null;
                    }
                    code = script.ReadOperationCode();
                    if (code != null)
                    {
                        DrawOperationCode(position, code.Value, script, assemblyContent);
                    }
                } while (code != null);
                _assemblyCode = assemblyContent.ToString();
            }
            var rect = GUILayoutUtility.GetRect(new GUIContent(_assemblyCode), _scriptStyle);

            rect.x     = 0f;
            rect.y    -= 3f;
            rect.width = EditorGUIUtility.currentViewWidth + 1f;
            GUI.Box(rect, _assemblyCode, _scriptStyle);
        }
Esempio n. 4
0
        public Asm()
        {
            InstrTable_ = new List <InstrLookup>();

            ScriptHeader_ = new ScriptHeader();

            StringTable_  = new List <string>();
            FuncTable_    = new List <FuncNode>();
            SymbolTable_  = new List <SymbolNode>();
            LabelTable_   = new List <LabelNode>();
            HostApiTable_ = new List <string>();

            var Index = AddInstrLookup("Mov", 0, 2);

            SetOpType(Index, 0, (int)(OpType.MemRef | OpType.Reg));
            SetOpType(Index, 1, (int)(OpType.Int | OpType.Float | OpType.String | OpType.MemRef | OpType.Reg));
        }
Esempio n. 5
0
        private static void RemoveUnavailableTranslationItems()
        {
            if (!EditorUtility.DisplayDialog("Remove all unavailable translation items", "This will launch WADV resource system and precompile all script files, which cannot be reversed.\n\nPlease make sure all scripts can be load properly before continue.", "Continue", "Cancel"))
            {
                return;
            }
            PrecompileAll(false);
            var changedFiles = new List <string>();

            foreach (var(key, info) in CompileConfiguration.Content.Scripts)
            {
                var translation = ScriptHeader.LoadSync(key).Header.LoadDefaultTranslation();
                foreach (var(language, _) in info.Translations)
                {
                    var languageFilePath = info.LanguageAssetPath(language);
                    if (!File.Exists(languageFilePath))
                    {
                        continue;
                    }
                    var existedTranslation = new ScriptTranslation(File.ReadAllText(languageFilePath));
                    if (!existedTranslation.RemoveUnavailableTranslations(translation))
                    {
                        continue;
                    }
                    existedTranslation.SaveToAsset(languageFilePath);
                    changedFiles.Add(languageFilePath);
                }
            }
            EditorUtility.DisplayDialog(
                "Remove finished",
                changedFiles.Any()
                    ? $"File changed:\n{string.Join("\n", changedFiles)}"
                    : "All translation items are activated, skip removing",
                "Close");
            AssetDatabase.Refresh();
        }
 /// <inheritdoc />
 public string ConvertToString(string language)
 {
     return(ScriptHeader.LoadSync(ScriptId).Header.GetTranslation(language, TranslationId));
 }
Esempio n. 7
0
 public string ConvertToString(string language = TranslationManager.DefaultLanguage)
 {
     return(ScriptHeader.LoadSync(scriptId).Header.GetTranslation(language, translationId));
 }