public ScriptDlg(Script scr, AdvData data) { mData = data; mScript = scr; InitializeComponent(); int[] tabs = { 20, 40, 60, 80, 100, 120, 140 }; scripttext.SelectionTabs = tabs; linenumberbox.Paint += new PaintEventHandler(linenumberbox_Paint); scripttext.VScroll += new EventHandler(scripttext_VScroll); scripttext.TextChanged += new EventHandler(scripttext_TextChanged); scripttext.MouseDown += new MouseEventHandler(scripttext_MouseDown); scripttext.KeyUp += new KeyEventHandler(scripttext_KeyUp); scripttext.KeyDown += new KeyEventHandler(scripttext_KeyDown); matches.SelectedIndexChanged += new EventHandler(matches_SelectedIndexChanged); this.FormClosed += new FormClosedEventHandler(ScriptDlg_FormClosed); //scripttext updateScript(); //parsing stuff mParser = new PcdkParser(data.Settings.ScriptingLanguage); mParser.initSyntax(); mParser.Comment += new PcdkParser.commentCB(colorComment); mParser.Function += new PcdkParser.functionCB(colorFunction); mParser.ParseError += new PcdkParser.parseError(mParser_ParseError); mKeywordFont = new Font(scripttext.Font, FontStyle.Bold); parseScript(); if (!mHistory.Contains(scr)) { if (mHistory.Count > 4) { mHistory.RemoveAt(4); } mHistory.Insert(0, scr); } else { mHistory.Remove(scr); mHistory.Insert(0, scr); } }
public ScriptDlg(Script scr, AdvData data) { mData = data; mScript = scr; InitializeComponent(); int[] tabs = { 20, 40, 60, 80, 100, 120, 140 }; scripttext.SelectionTabs = tabs; linenumberbox.Paint += new PaintEventHandler(linenumberbox_Paint); scripttext.VScroll += new EventHandler(scripttext_VScroll); scripttext.TextChanged += new EventHandler(scripttext_TextChanged); scripttext.MouseDown += new MouseEventHandler(scripttext_MouseDown); scripttext.KeyUp += new KeyEventHandler(scripttext_KeyUp); scripttext.KeyDown += new KeyEventHandler(scripttext_KeyDown); matches.SelectedIndexChanged += new EventHandler(matches_SelectedIndexChanged); this.FormClosed += new FormClosedEventHandler(ScriptDlg_FormClosed); //scripttext updateScript(); //parsing stuff mParser = new PcdkParser(data.Settings.ScriptingLanguage); mParser.initSyntax(); mParser.Comment += new PcdkParser.commentCB(colorComment); mParser.Function += new PcdkParser.functionCB(colorFunction); mParser.ParseError += new PcdkParser.parseError(mParser_ParseError); mKeywordFont = new Font(scripttext.Font, FontStyle.Bold); parseScript(); if (!mHistory.Contains(scr)) { if (mHistory.Count > 4) mHistory.RemoveAt(4); mHistory.Insert(0, scr); } else { mHistory.Remove(scr); mHistory.Insert(0, scr); } }
void parser_Function(PcdkParser.Argument funcname, object[] args, int startidx) { if (funcname.Text == "speech") { PcdkParser.Argument text = (PcdkParser.Argument)args[1]; string voice = ""; if (args.Length > 2) { PcdkParser.Argument voicearg = (PcdkParser.Argument)args[2]; if (voicearg.Text != "dontwait") voice = voicearg.Text; } mLanguages["origin"].addWord(Language.Section.Speech, text.Text, voice); return; } else if (funcname.Text == "offspeech") { PcdkParser.Argument text = (PcdkParser.Argument)args[2]; string voice = ""; if (args.Length > 3) { PcdkParser.Argument voicearg = (PcdkParser.Argument)args[3]; if (voicearg.Text != "dontwait") voice = voicearg.Text; } mLanguages["origin"].addWord(Language.Section.Offspeech, text.Text, voice); return; } else if (funcname.Text == "showinfo") { PcdkParser.Argument text = (PcdkParser.Argument)args[0]; mLanguages["origin"].addWord(Language.Section.Showinfo, text.Text, null); } else if (funcname.Text == "textout") { if (args.Length > 1) { PcdkParser.Argument text = (PcdkParser.Argument)args[1]; mLanguages["origin"].addWord(Language.Section.Textout, text.Text, null); } } else if (funcname.Text == "setstring") { PcdkParser.Argument text = (PcdkParser.Argument)args[1]; mLanguages["origin"].addWord(Language.Section.Setstring, text.Text, null); } else if (funcname.Text == "row") { PcdkParser.Argument text = (PcdkParser.Argument)args[1]; mLanguages["origin"].addWord(Language.Section.Textscenes, text.Text, null); } }
public void updateLanguageList() { PcdkParser parser = new PcdkParser(Settings.ScriptingLanguage); parser.initSyntax(); parser.Function += new PcdkParser.functionCB(parser_Function); Language.beginRefresh(); foreach (Dictionary<string, Script> scripts in mScripts) { foreach (KeyValuePair<string, Script> pair in scripts) { parser.parseText(pair.Value.Text); } } mLanguages["origin"].addWord(Language.Section.Commands, Settings.WalkText, null); mLanguages["origin"].addWord(Language.Section.Commands, Settings.LinkText, null); mLanguages["origin"].addWord(Language.Section.Commands, Settings.GiveLink, null); foreach (KeyValuePair<string,string> pair in Settings.Commands){ mLanguages["origin"].addWord(Language.Section.Commands, pair.Value, null); } Language.endRefresh(this); }
void mParser_ParseError(int charpos, int length, string text, PcdkParser.Error error) { scripttext.SelectionStart = charpos; scripttext.SelectionLength = length; scripttext.SelectionColor = Color.Black; if (error == PcdkParser.Error.LINE_NOT_RECOGINZED) { for (int i = text.Length - 1; i >= 0; --i) { if (text[i] == ' ') { text = text.Substring(i); scripttext.SelectionStart = charpos+i; scripttext.SelectionLength = length-i; break; } } PcdkParser.Argument arg = new PcdkParser.Argument(charpos, charpos + length, text.Trim(), new PcdkParser.ArgDef("Command", PcdkParser.ArgType.Function)); if (mParser.IsKeyword(arg)) scripttext.SelectionColor = Color.Blue; scripttext.SelectionFont = mKeywordFont; fillMatchList(arg); } }
void fillMatchList(PcdkParser.Argument arg) { info.Text = arg.Definition.Name; int length = mCursorPos - scripttext.SelectionStart; if (length < 0) length = 0; string match = scripttext.Text.Substring(scripttext.SelectionStart, length).Trim(); matches.Items.Clear(); if (arg.Definition.AdditionalValues != null) { foreach (string val in arg.Definition.AdditionalValues) { addMatch(val, match); } } switch (arg.Definition.Type) { case PcdkParser.ArgType.Boolean: addMatch("true", match); addMatch("false", match); break; case PcdkParser.ArgType.Character: addMatch("self", match); foreach (KeyValuePair<string, ArrayList> pair in mData.CharacterInstances) { foreach (CharacterInstance chr in pair.Value){ addMatch(chr.Name, match); } } break; case PcdkParser.ArgType.Command: foreach (KeyValuePair<string, string> pair in mData.Settings.Commands) { addMatch(pair.Key, match); } break; case PcdkParser.ArgType.Event: { foreach (KeyValuePair<string, string> pair in mData.Settings.Commands) { addMatch(pair.Key, match); addMatch("cant" + pair.Key, match); } break; } case PcdkParser.ArgType.Function: foreach (KeyValuePair<string, PcdkParser.ArgDef[]> func in mParser.Functions) { addMatch(func.Key, match); } break; case PcdkParser.ArgType.Item: foreach (KeyValuePair<string, Item> it in mData.Items) { addMatch(it.Value.Name, match); } break; case PcdkParser.ArgType.Music: foreach (KeyValuePair<string, string> music in mData.Music) { addMatch(music.Key, match); } break; case PcdkParser.ArgType.Object: foreach (KeyValuePair<string, Room> room in mData.Rooms) { foreach (ObjectInstance obj in room.Value.Objects) { addMatch(obj.Name, match); } } break; case PcdkParser.ArgType.PresetVariable: foreach (KeyValuePair<string, bool> bov in mData.Settings.Booleans) { addMatch(bov.Key, match); } break; case PcdkParser.ArgType.Room: foreach (KeyValuePair<string, Room> room in mData.Rooms) { addMatch(room.Value.Name, match); } break; case PcdkParser.ArgType.Script: foreach (KeyValuePair<string, Script> scr in mData.getScripts(Script.Type.CUTSCENE)) { addMatch(scr.Value.Name, match); } break; case PcdkParser.ArgType.Sound: foreach (KeyValuePair<string, string> snd in mData.Sounds) { addMatch(snd.Key, match); } break; case PcdkParser.ArgType.Video: foreach (KeyValuePair<string, string> video in mData.Videos) { if (System.IO.Path.GetExtension(video.Value) != ".swf") addMatch(video.Key, match); } break; case PcdkParser.ArgType.VideoSwf: foreach (KeyValuePair<string, string> video in mData.Videos) { if (System.IO.Path.GetExtension(video.Value) == ".swf") addMatch(video.Key, match); } break; case PcdkParser.ArgType.Language: foreach (KeyValuePair<string, Language> lang in mData.Languages) { addMatch(lang.Key, match); } break; case PcdkParser.ArgType.DSPEffect: foreach(DSPEffect effect in mData.Settings.DSPEffects) { addMatch(effect.name, match); } addMatch("off", match); break; } }
void colorFunction(PcdkParser.Argument funcname, Object[] args, int startidx) { scripttext.SelectionStart = startidx+funcname.Startidx; scripttext.SelectionLength = funcname.Stopidx-funcname.Startidx; scripttext.SelectionFont = mKeywordFont; if (mParser.IsKeyword(funcname)) scripttext.SelectionColor = Color.Blue; else scripttext.SelectionColor = Color.Black; if (scripttext.SelectionStart <= mCursorPos && scripttext.SelectionStart + scripttext.SelectionLength >= mCursorPos) fillMatchList(funcname); foreach (PcdkParser.Argument arg in args){ scripttext.SelectionStart = startidx + arg.Startidx; scripttext.SelectionLength = arg.Stopidx - arg.Startidx; scripttext.SelectionFont = scripttext.Font; scripttext.SelectionColor = Color.Brown; if (scripttext.SelectionStart <= mCursorPos && scripttext.SelectionStart + scripttext.SelectionLength >= mCursorPos) fillMatchList(arg); } }