private void ParseBlockBody(XmlNode parentNode, BlockType bl, XmlNodeList parentNodes) { foreach (XmlNode n in parentNodes) { if (n.NodeType == XmlNodeType.Element) { if (n.Name.ToLower() == "scope") { //bool IsComplex=false; //bool IsSeparator=false; string Start = ""; string End = ""; string style = ""; string text = ""; string EndIsSeparator = ""; string StartIsSeparator = ""; string StartIsComplex = "false"; string EndIsComplex = "false"; string StartIsKeyword = "false"; string EndIsKeyword = "false"; string spawnstart = ""; string spawnend = ""; string EscapeChar = ""; string CauseIndent = "false"; bool expanded = true; foreach (XmlAttribute att in n.Attributes) { if (att.Name.ToLower() == "start") { Start = att.Value; } if (att.Name.ToLower() == "escapechar") { EscapeChar = att.Value; } if (att.Name.ToLower() == "end") { End = att.Value; } if (att.Name.ToLower() == "style") { style = att.Value; } if (att.Name.ToLower() == "text") { text = att.Value; } if (att.Name.ToLower() == "defaultexpanded") { expanded = bool.Parse(att.Value); } if (att.Name.ToLower() == "endisseparator") { EndIsSeparator = att.Value; } if (att.Name.ToLower() == "startisseparator") { StartIsSeparator = att.Value; } if (att.Name.ToLower() == "startiskeyword") { StartIsKeyword = att.Value; } if (att.Name.ToLower() == "startiscomplex") { StartIsComplex = att.Value; } if (att.Name.ToLower() == "endiscomplex") { EndIsComplex = att.Value; } if (att.Name.ToLower() == "endiskeyword") { EndIsKeyword = att.Value; } if (att.Name.ToLower() == "spawnblockonstart") { spawnstart = att.Value; } if (att.Name.ToLower() == "spawnblockonend") { spawnend = att.Value; } if (att.Name.ToLower() == "causeindent") { CauseIndent = att.Value; } } if (Start != "") { //bl.StartPattern =new Pattern (Pattern,IsComplex,false,IsSeparator); //bl.StartPatterns.Add (new Pattern (Pattern,IsComplex,IsSeparator,true)); Scope scop = new Scope(); scop.Style = GetStyle(style); scop.ExpansionText = text; scop.DefaultExpanded = expanded; bool blnStartIsComplex = bool.Parse(StartIsComplex); bool blnEndIsComplex = bool.Parse(EndIsComplex); bool blnCauseIndent = bool.Parse(CauseIndent); scop.CauseIndent = blnCauseIndent; Pattern StartP = new Pattern(Start, blnStartIsComplex, false, bool.Parse(StartIsKeyword)); Pattern EndP = null; if (EscapeChar != "") { EndP = new Pattern(End, blnEndIsComplex, false, bool.Parse(EndIsKeyword), EscapeChar); } else { EndP = new Pattern(End, blnEndIsComplex, false, bool.Parse(EndIsKeyword)); } if (EndIsSeparator != "") { EndP.IsSeparator = bool.Parse(EndIsSeparator); } scop.Start = StartP; scop.EndPatterns.Add(EndP); bl.ScopePatterns.Add(scop); if (spawnstart != "") { scop.SpawnBlockOnStart = GetBlock(spawnstart); } if (spawnend != "") { scop.SpawnBlockOnEnd = GetBlock(spawnend); } } } if (n.Name.ToLower() == "bracket") { //bool IsComplex=false; //bool IsSeparator=false; string Start = ""; string End = ""; string style = ""; string EndIsSeparator = ""; string StartIsSeparator = ""; string StartIsComplex = "false"; string EndIsComplex = "false"; string StartIsKeyword = "false"; string EndIsKeyword = "false"; string IsMultiLineB = "true"; foreach (XmlAttribute att in n.Attributes) { if (att.Name.ToLower() == "start") { Start = att.Value; } if (att.Name.ToLower() == "end") { End = att.Value; } if (att.Name.ToLower() == "style") { style = att.Value; } if (att.Name.ToLower() == "endisseparator") { EndIsSeparator = att.Value; } if (att.Name.ToLower() == "startisseparator") { StartIsSeparator = att.Value; } if (att.Name.ToLower() == "startiskeyword") { StartIsKeyword = att.Value; } if (att.Name.ToLower() == "startiscomplex") { StartIsComplex = att.Value; } if (att.Name.ToLower() == "endiscomplex") { EndIsComplex = att.Value; } if (att.Name.ToLower() == "endiskeyword") { EndIsKeyword = att.Value; } if (att.Name.ToLower() == "ismultiline") { IsMultiLineB = att.Value; } } if (Start != "") { PatternList pl = new PatternList(); pl.Style = GetStyle(style); bool blnStartIsComplex = bool.Parse(StartIsComplex); bool blnEndIsComplex = bool.Parse(EndIsComplex); bool blnIsMultiLineB = bool.Parse(IsMultiLineB); Pattern StartP = new Pattern(Start, blnStartIsComplex, false, bool.Parse(StartIsKeyword)); Pattern EndP = new Pattern(End, blnEndIsComplex, false, bool.Parse(EndIsKeyword)); StartP.MatchingBracket = EndP; EndP.MatchingBracket = StartP; StartP.BracketType = BracketType.StartBracket; EndP.BracketType = BracketType.EndBracket; StartP.IsMultiLineBracket = EndP.IsMultiLineBracket = blnIsMultiLineB; pl.Add(StartP); pl.Add(EndP); bl.OperatorsList.Add(pl); } } } if (n.Name.ToLower() == "keywords") { foreach (XmlNode cn in n.ChildNodes) { if (cn.Name.ToLower() == "patterngroup") { PatternList pl = new PatternList(); bl.KeywordsList.Add(pl); foreach (XmlAttribute att in cn.Attributes) { if (att.Name.ToLower() == "style") { pl.Style = GetStyle(att.Value); } if (att.Name.ToLower() == "name") { pl.Name = att.Value; } if (att.Name.ToLower() == "normalizecase") { pl.NormalizeCase = bool.Parse(att.Value); } if (att.Name.ToLower() == "casesensitive") { pl.CaseSensitive = bool.Parse(att.Value); } } foreach (XmlNode pt in cn.ChildNodes) { if (pt.Name.ToLower() == "pattern") { bool IsComplex = false; bool IsSeparator = false; string Category = null; string Pattern = ""; if (pt.Attributes != null) { foreach (XmlAttribute att in pt.Attributes) { if (att.Name.ToLower() == "text") { Pattern = att.Value; } if (att.Name.ToLower() == "iscomplex") { IsComplex = bool.Parse(att.Value); } if (att.Name.ToLower() == "isseparator") { IsSeparator = bool.Parse(att.Value); } if (att.Name.ToLower() == "category") { Category = (att.Value); } } } if (Pattern != "") { Pattern pat = new Pattern(Pattern, IsComplex, IsSeparator, true); pat.Category = Category; pl.Add(pat); } } else if (pt.Name.ToLower() == "patterns") { string Patterns = pt.ChildNodes[0].Value; Patterns = Patterns.Replace("\t", " "); while (Patterns.IndexOf(" ") >= 0) { Patterns = Patterns.Replace(" ", " "); } foreach (string Pattern in Patterns.Split()) { if (Pattern != "") { pl.Add(new Pattern(Pattern, false, false, true)); } } } } } } } //if (n.Name == "Operators") // ParseStyle(n); if (n.Name.ToLower() == "operators") { foreach (XmlNode cn in n.ChildNodes) { if (cn.Name.ToLower() == "patterngroup") { PatternList pl = new PatternList(); bl.OperatorsList.Add(pl); foreach (XmlAttribute att in cn.Attributes) { if (att.Name.ToLower() == "style") { pl.Style = GetStyle(att.Value); } if (att.Name.ToLower() == "name") { pl.Name = att.Value; } if (att.Name.ToLower() == "normalizecase") { pl.NormalizeCase = bool.Parse(att.Value); } if (att.Name.ToLower() == "casesensitive") { pl.CaseSensitive = bool.Parse(att.Value); } } foreach (XmlNode pt in cn.ChildNodes) { if (pt.Name.ToLower() == "pattern") { bool IsComplex = false; bool IsSeparator = false; string Pattern = ""; string Category = null; if (pt.Attributes != null) { foreach (XmlAttribute att in pt.Attributes) { if (att.Name.ToLower() == "text") { Pattern = att.Value; } if (att.Name.ToLower() == "iscomplex") { IsComplex = bool.Parse(att.Value); } if (att.Name.ToLower() == "isseparator") { IsSeparator = bool.Parse(att.Value); } if (att.Name.ToLower() == "category") { Category = (att.Value); } } } if (Pattern != "") { Pattern pat = new Pattern(Pattern, IsComplex, IsSeparator, false); pat.Category = Category; pl.Add(pat); } } else if (pt.Name.ToLower() == "patterns") { string Patterns = pt.ChildNodes[0].Value; Patterns = Patterns.Replace("\t", " "); while (Patterns.IndexOf(" ") >= 0) { Patterns = Patterns.Replace(" ", " "); } string[] pattSplit = Patterns.Split(); foreach (string Pattern in pattSplit) { if (Pattern != "") { pl.Add(new Pattern(Pattern, false, false, false)); } } } } } } } //___|JMP 07/20/2011 //Implemented functionality to allow a block to be used in multiple locations in the language file. if (n.Name.ToLower() == "includes") { foreach (XmlNode cn in n.ChildNodes) { if (cn.Name.ToLower() == "include") { foreach (XmlAttribute att in cn.Attributes) { if (att.Name.ToLower() == "name") { foreach (XmlNode includeNode in parentNode.ChildNodes) { if (includeNode.NodeType == XmlNodeType.Element) { if (includeNode.Name.ToLower() == "include") { foreach (XmlAttribute includeAtt in cn.Attributes) { if (includeAtt.Name.ToLower() == "name" && includeAtt.Value.ToLower() == includeAtt.Value.ToLower()) { ParseBlockBody(parentNode, bl, includeNode.ChildNodes); } } } } } bl.ChildBlocks.Add(GetBlock(att.Value)); } } } } } if (n.Name.ToLower() == "childblocks") { foreach (XmlNode cn in n.ChildNodes) { if (cn.Name.ToLower() == "child") { foreach (XmlAttribute att in cn.Attributes) { if (att.Name.ToLower() == "name") { bl.ChildBlocks.Add(GetBlock(att.Value)); } } } } } } }