/// <summary> /// usedに使ったスクリプトを登録する /// </summary> /// <param name="known">settingにある既知のスクリプト。キー:ファイル名</param> /// <param name="used">使ったスクリプト。キー:UsedScriptKey</param> /// <param name="name">スクリプト名</param> /// <param name="type">スクリプトの種類</param> static void AddUsedScript( Dictionary <string, ScriptData> known, Dictionary <UsedScriptKey, ScriptData> used, string name, ScriptType type) { var filename = Utils.GetScriptFilename(name, type); var key = new UsedScriptKey { Name = name, Type = type }; if (used.ContainsKey(key)) { used[key].Increment(); foreach (var d in used[key].Dependencies) { d.Increment(); } return; } else if (known.ContainsKey(filename)) { used[key] = known[filename].Clone(); used[key].Name = name; foreach (var d in known[filename].Dependencies) { var dkey = new UsedScriptKey { Name = d.Name, Type = type }; if (used.ContainsKey(dkey)) { used[key].Dependencies.Add(used[dkey]); used[dkey].Increment(); } else { used[dkey] = d.Clone(); used[key].Dependencies.Add(used[dkey]); } } } else { used[key] = new ScriptData { Name = name, Filename = filename, }; } }
/// <summary> /// スクリプトの抽出時に使う既知のスクリプトの辞書の作成 /// </summary> /// <returns>キー:ファイル名,値:ScriptData</returns> internal Dictionary <string, ScriptData> GetScripts() { var scripts = new Dictionary <string, ScriptData>(); var exedit = new ScriptData { Filename = "exedit.anm", Author = "KENくん", NicoId = "im1696493", Url = "http://spring-fragrance.mints.ne.jp/aviutl/", Comment = "標準スクリプト", }; scripts["exedit.anm"] = exedit.Clone(); exedit.Filename = "exedit.obj"; scripts["exedit.obj"] = exedit.Clone(); exedit.Filename = "exedit.scn"; scripts["exedit.scn"] = exedit.Clone(); exedit.Filename = "exedit.cam"; scripts["exedit.cam"] = exedit.Clone(); exedit.Filename = "exedit.tra"; scripts["exedit.tra"] = exedit; foreach (var author in Authors) { if (author == null) { continue; } foreach (var script in author.Scripts) { if (script == null || string.IsNullOrEmpty(script.Name)) { continue; } var data = new ScriptData { Name = script.Name, Filename = script.Name, Author = author.Name, NicoId = script.NicoId, Url = script.Url, Comment = script.Comment, }; scripts[script.Name] = data; } } foreach (var author in Authors) { if (author == null) { continue; } foreach (var script in author.Scripts) { if (script == null || string.IsNullOrEmpty(script.Name)) { continue; } foreach (var d in script.Dependencies) { if (string.IsNullOrEmpty(d)) { continue; } if (scripts.ContainsKey(d)) { scripts[script.Name].Dependencies.Add(scripts[d]); } else { var data = new ScriptData { Name = d, Filename = d, }; scripts[d] = data; scripts[script.Name].Dependencies.Add(data); } } } } return(scripts); }