private void ParseBlock(XmlNode node) { string Name = "", Style = ""; bool IsMultiline = false; bool TerminateChildren = false; Color BackColor = Color.Transparent; foreach (XmlAttribute att in node.Attributes) { if (att.Name.ToLowerInvariant() == "name") Name = att.Value; if (att.Name.ToLowerInvariant() == "style") Style = att.Value; if (att.Name.ToLowerInvariant() == "ismultiline") IsMultiline = bool.Parse(att.Value); if (att.Name.ToLowerInvariant() == "terminatechildren") TerminateChildren = bool.Parse(att.Value); if (att.Name.ToLowerInvariant() == "backcolor") { BackColor = Color.FromName(att.Value); //Transparent =false; } } //create block object here SpanDefinition bl = GetBlock(Name); bl.BackColor = BackColor; bl.Name = Name; bl.MultiLine = IsMultiline; bl.Style = GetStyle(Style); bl.TerminateChildren = TerminateChildren; foreach (XmlNode n in node.ChildNodes) { if (n.NodeType == XmlNodeType.Element) { if (n.Name.ToLowerInvariant() == "scope") { //bool IsComplex=false; //bool IsSeparator=false; string Start = ""; string End = ""; string style = ""; string text = ""; string EndIsSeparator = ""; 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) { switch (att.Name.ToLowerInvariant()) { case "start": Start = att.Value; break; case "escapechar": EscapeChar = att.Value; break; case "end": End = att.Value; break; case "style": style = att.Value; break; case "text": text = att.Value; break; case "defaultexpanded": expanded = bool.Parse(att.Value); break; case "endisseparator": EndIsSeparator = att.Value; break; case "startiskeyword": StartIsKeyword = att.Value; break; case "startiscomplex": StartIsComplex = att.Value; break; case "endiscomplex": EndIsComplex = att.Value; break; case "endiskeyword": EndIsKeyword = att.Value; break; case "spawnblockonstart": spawnStart = att.Value; break; case "spawnblockonend": spawnEnd = att.Value; break; case "causeindent": CauseIndent = att.Value; break; } } if (Start != "") { //bl.StartPattern =new Pattern (Pattern,IsComplex,false,IsSeparator); //bl.StartPatterns.Add (new Pattern (Pattern,IsComplex,IsSeparator,true)); bool blnStartIsComplex = bool.Parse(StartIsComplex); bool blnEndIsComplex = bool.Parse(EndIsComplex); bool blnCauseIndent = bool.Parse(CauseIndent); var scope = new Scope {Style = GetStyle(style), ExpansionText = text, DefaultExpanded = expanded, CauseIndent = blnCauseIndent}; var StartP = new Pattern(Start, blnStartIsComplex, false, bool.Parse(StartIsKeyword)); Pattern endPattern = EscapeChar != "" ? new Pattern(End, false, bool.Parse(EndIsKeyword), EscapeChar) : new Pattern(End, blnEndIsComplex, false, bool.Parse(EndIsKeyword)); if (EndIsSeparator != "") endPattern.IsSeparator = bool.Parse(EndIsSeparator); scope.Start = StartP; scope.EndPatterns.Add(endPattern); bl.ScopePatterns.Add(scope); if (spawnStart != "") { scope.spawnSpanOnStart = GetBlock(spawnStart); } if (spawnEnd != "") { scope.spawnSpanOnEnd = GetBlock(spawnEnd); } } } if (n.Name.ToLowerInvariant() == "bracket") { //bool IsComplex=false; //bool IsSeparator=false; string Start = ""; string End = ""; string style = ""; string StartIsComplex = "false"; string EndIsComplex = "false"; string StartIsKeyword = "false"; string EndIsKeyword = "false"; string IsMultiLineB = "true"; foreach (XmlAttribute att in n.Attributes) { switch (att.Name.ToLowerInvariant()) { case "start": Start = att.Value; break; case "end": End = att.Value; break; case "style": style = att.Value; break; case "endisseparator": if (att.Name.ToLowerInvariant() == "startisseparator") if (att.Name.ToLowerInvariant() == "startiskeyword") StartIsKeyword = att.Value; break; case "startiscomplex": StartIsComplex = att.Value; break; case "endiscomplex": EndIsComplex = att.Value; break; case "endiskeyword": EndIsKeyword = att.Value; break; case "ismultiline": IsMultiLineB = att.Value; break; } } if (Start != "") { var pl = new PatternList {Style = GetStyle(style)}; bool blnStartIsComplex = bool.Parse(StartIsComplex); bool blnEndIsComplex = bool.Parse(EndIsComplex); bool blnIsMultiLineB = bool.Parse(IsMultiLineB); var StartP = new Pattern(Start, blnStartIsComplex, false, bool.Parse(StartIsKeyword)); var 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.ToLowerInvariant() == "keywords") foreach (XmlNode cn in n.ChildNodes) { if (cn.Name.ToLowerInvariant() == "patterngroup") { var pl = new PatternList(); bl.KeywordsList.Add(pl); foreach (XmlAttribute att in cn.Attributes) { switch (att.Name.ToLowerInvariant()) { case "style": pl.Style = GetStyle(att.Value); break; case "name": pl.Name = att.Value; break; case "normalizecase": pl.NormalizeCase = bool.Parse(att.Value); break; case "casesensitive": pl.CaseSensitive = bool.Parse(att.Value); break; } } foreach (XmlNode pt in cn.ChildNodes) { if (pt.Name.ToLowerInvariant() == "pattern") { bool IsComplex = false; bool IsSeparator = false; string Category = null; string Pattern = ""; if (pt.Attributes != null) { foreach (XmlAttribute att in pt.Attributes) { switch (att.Name.ToLowerInvariant()) { case "text": Pattern = att.Value; break; case "iscomplex": IsComplex = bool.Parse(att.Value); break; case "isseparator": IsSeparator = bool.Parse(att.Value); break; case "category": Category = (att.Value); break; } } } if (Pattern != "") { var pat = new Pattern(Pattern, IsComplex, IsSeparator, true) {Category = Category}; pl.Add(pat); } } else if (pt.Name.ToLowerInvariant() == "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.ToLowerInvariant() == "operators") foreach (XmlNode cn in n.ChildNodes) { if (cn.Name.ToLowerInvariant() == "patterngroup") { var pl = new PatternList(); bl.OperatorsList.Add(pl); foreach (XmlAttribute att in cn.Attributes) { switch (att.Name.ToLowerInvariant()) { case "style": pl.Style = GetStyle(att.Value); break; case "name": pl.Name = att.Value; break; case "normalizecase": pl.NormalizeCase = bool.Parse(att.Value); break; case "casesensitive": pl.CaseSensitive = bool.Parse(att.Value); break; } } foreach (XmlNode pt in cn.ChildNodes) { if (pt.Name.ToLowerInvariant() == "pattern") { bool IsComplex = false; bool IsSeparator = false; string Pattern = ""; string Category = null; if (pt.Attributes != null) { foreach (XmlAttribute att in pt.Attributes) { switch (att.Name.ToLowerInvariant()) { case "text": Pattern = att.Value; break; case "iscomplex": IsComplex = bool.Parse(att.Value); break; case "isseparator": IsSeparator = bool.Parse(att.Value); break; case "category": Category = (att.Value); break; } } } if (Pattern != "") { var pat = new Pattern(Pattern, IsComplex, IsSeparator, false) {Category = Category}; pl.Add(pat); } } else if (pt.Name.ToLowerInvariant() == "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, false)); } } } } } if (n.Name.ToLowerInvariant() == "childblocks") { foreach (XmlNode cn in n.ChildNodes) { if (cn.Name.ToLowerInvariant() == "child") { foreach (XmlAttribute att in cn.Attributes) if (att.Name.ToLowerInvariant() == "name") bl.childSpanDefinitions.Add(GetBlock(att.Value)); } } } } }
private void ParseBlock(XmlNode node) { string Name = "", Style = "", PatternStyle = ""; bool IsMultiline = false; bool TerminateChildren = false; Color BackColor = Color.Transparent; foreach (XmlAttribute att in node.Attributes) { if (att.Name.ToLower(CultureInfo.InvariantCulture) == "name") { Name = att.Value; } if (att.Name.ToLower(CultureInfo.InvariantCulture) == "style") { Style = att.Value; } if (att.Name.ToLower(CultureInfo.InvariantCulture) == "patternstyle") { PatternStyle = att.Value; } if (att.Name.ToLower(CultureInfo.InvariantCulture) == "ismultiline") { IsMultiline = bool.Parse(att.Value); } if (att.Name.ToLower(CultureInfo.InvariantCulture) == "terminatechildren") { TerminateChildren = bool.Parse(att.Value); } if (att.Name.ToLower(CultureInfo.InvariantCulture) == "backcolor") { BackColor = Color.FromName(att.Value); //Transparent =false; } } //create block object here BlockType bl = GetBlock(Name); bl.BackColor = BackColor; bl.Name = Name; bl.MultiLine = IsMultiline; bl.Style = GetStyle(Style); bl.TerminateChildren = TerminateChildren; // if (PatternStyle!="") // bl.PatternStyle = GetStyle(PatternStyle); // else // bl.PatternStyle = bl.Style; foreach (XmlNode n in node.ChildNodes) { if (n.NodeType == XmlNodeType.Element) { if (n.Name.ToLower(CultureInfo.InvariantCulture) == "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 (CultureInfo.InvariantCulture) == "start") { Start = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "escapechar") { EscapeChar = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "end") { End = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "style") { style = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "text") { text = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "defaultexpanded") { expanded = bool.Parse(att.Value); } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "endisseparator") { EndIsSeparator = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "startisseparator") { StartIsSeparator = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "startiskeyword") { StartIsKeyword = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "startiscomplex") { StartIsComplex = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "endiscomplex") { EndIsComplex = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "endiskeyword") { EndIsKeyword = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "spawnblockonstart") { spawnstart = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "spawnblockonend") { spawnend = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "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(CultureInfo.InvariantCulture) == "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 (CultureInfo.InvariantCulture) == "start") { Start = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "end") { End = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "style") { style = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "endisseparator") { EndIsSeparator = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "startisseparator") { StartIsSeparator = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "startiskeyword") { StartIsKeyword = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "startiscomplex") { StartIsComplex = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "endiscomplex") { EndIsComplex = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "endiskeyword") { EndIsKeyword = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "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(CultureInfo.InvariantCulture) == "keywords") { foreach (XmlNode cn in n.ChildNodes) { if (cn.Name.ToLower(CultureInfo.InvariantCulture) == "patterngroup") { PatternList pl = new PatternList(); bl.KeywordsList.Add(pl); foreach (XmlAttribute att in cn.Attributes) { if (att.Name.ToLower (CultureInfo.InvariantCulture) == "style") { pl.Style = GetStyle(att.Value); } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "name") { pl.Name = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "normalizecase") { pl.NormalizeCase = bool.Parse(att.Value); } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "casesensitive") { pl.CaseSensitive = bool.Parse(att.Value); } } foreach (XmlNode pt in cn.ChildNodes) { if (pt.Name.ToLower (CultureInfo.InvariantCulture) == "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 (CultureInfo.InvariantCulture) == "text") { Pattern = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "iscomplex") { IsComplex = bool.Parse(att.Value); } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "isseparator") { IsSeparator = bool.Parse(att.Value); } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "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 (CultureInfo.InvariantCulture) == "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(CultureInfo.InvariantCulture) == "operators") { foreach (XmlNode cn in n.ChildNodes) { if (cn.Name.ToLower(CultureInfo.InvariantCulture) == "patterngroup") { PatternList pl = new PatternList(); bl.OperatorsList.Add(pl); foreach (XmlAttribute att in cn.Attributes) { if (att.Name.ToLower (CultureInfo.InvariantCulture) == "style") { pl.Style = GetStyle(att.Value); } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "name") { pl.Name = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "normalizecase") { pl.NormalizeCase = bool.Parse(att.Value); } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "casesensitive") { pl.CaseSensitive = bool.Parse(att.Value); } } foreach (XmlNode pt in cn.ChildNodes) { if (pt.Name.ToLower (CultureInfo.InvariantCulture) == "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 (CultureInfo.InvariantCulture) == "text") { Pattern = att.Value; } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "iscomplex") { IsComplex = bool.Parse(att.Value); } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "isseparator") { IsSeparator = bool.Parse(att.Value); } if (att.Name.ToLower (CultureInfo.InvariantCulture) == "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 (CultureInfo.InvariantCulture) == "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, false)); } } } } } } } if (n.Name.ToLower(CultureInfo.InvariantCulture) == "childblocks") { foreach (XmlNode cn in n.ChildNodes) { if (cn.Name.ToLower (CultureInfo.InvariantCulture) == "child") { foreach (XmlAttribute att in cn.Attributes) { if (att.Name.ToLower (CultureInfo.InvariantCulture) == "name") { bl.ChildBlocks.Add(GetBlock(att.Value)); } } } } } } }
/// <summary> /// /// </summary> /// <param name="Pattern"></param> /// <returns></returns> public Pattern Add(Pattern Pattern) { if (Parent != null && Parent.Parent != null && Parent.Parent.Parent != null) { Pattern.Separators = Parent.Parent.Parent.Separators; Parent.Parent.Parent.ChangeVersion(); } if (!Pattern.IsComplex && !Pattern.ContainsSeparator) { //store pattern in lookuptable if it is a simple pattern string s; if (Pattern.StringPattern.Length >= 2) s = Pattern.StringPattern.Substring(0, 2); else s = Pattern.StringPattern.Substring(0, 1) + " "; s = s.ToLowerInvariant(); if (Pattern.StringPattern.Length == 1) { SimplePatterns1Char[Pattern.StringPattern] = Pattern; } else { if (SimplePatterns2Char[s] == null) SimplePatterns2Char[s] = new PatternCollection(); var ar = (PatternCollection) SimplePatterns2Char[s]; ar.Add(Pattern); } if (CaseSensitive) SimplePatterns[Pattern.LowerStringPattern] = Pattern; else SimplePatterns[Pattern.StringPattern] = Pattern; } else { ComplexPatterns.Add(Pattern); } patterns.Add(Pattern); if (Pattern.Parent == null) Pattern.Parent = this; else { throw (new Exception("Pattern already assigned to another PatternList")); } return Pattern; }
/// <summary> /// /// </summary> /// <param name="Pattern"></param> /// <returns></returns> public Pattern Add(Pattern Pattern) { if (this.Parent != null && this.Parent.Parent != null && this.Parent.Parent.Parent != null) { Pattern.Separators = this.Parent.Parent.Parent.Separators; this.Parent.Parent.Parent.ChangeVersion(); } if (!Pattern.IsComplex && !Pattern.ContainsSeparator) { //store pattern in lookuptable if it is a simple pattern string s = ""; if (Pattern.StringPattern.Length >= 2) s = Pattern.StringPattern.Substring(0, 2); else s = Pattern.StringPattern.Substring(0, 1) + " "; s = s.ToLower(CultureInfo.InvariantCulture); if (Pattern.StringPattern.Length == 1) { SimplePatterns1Char[Pattern.StringPattern] = Pattern; } else { if (SimplePatterns2Char[s] == null) SimplePatterns2Char[s] = new PatternCollection(); PatternCollection ar = (PatternCollection) SimplePatterns2Char[s]; ar.Add(Pattern); } if (this.CaseSensitive) SimplePatterns[Pattern.LowerStringPattern] = Pattern; else SimplePatterns[Pattern.StringPattern] = Pattern; // if (SimplePatterns[s]==null) // SimplePatterns.Add (s,new ArrayList ()); // // ArrayList bb=(ArrayList) SimplePatterns[s]; // // bb.Add (Pattern); } else { ComplexPatterns.Add(Pattern); } mPatterns.Add(Pattern); if (Pattern.Parent == null) Pattern.Parent = this; else { throw(new Exception("Pattern already assigned to another PatternList")); } return Pattern; }
public void AddToLookupTable(Pattern pattern) { if (pattern.IsComplex) { ComplexPatterns.Add(pattern); return; } else { this.tmpSimplePatterns.Add(pattern); } }
/// <summary> /// /// </summary> /// <param name="Pattern"></param> /// <returns></returns> public Pattern Add(Pattern Pattern) { if (this.Parent != null && this.Parent.Parent != null && this.Parent.Parent.Parent != null) { Pattern.Separators = this.Parent.Parent.Parent.Separators; this.Parent.Parent.Parent.ChangeVersion(); } if (!Pattern.IsComplex && !Pattern.ContainsSeparator) { //store pattern in lookuptable if it is a simple pattern string s = ""; if (Pattern.StringPattern.Length >= 2) { s = Pattern.StringPattern.Substring(0, 2); } else { s = Pattern.StringPattern.Substring(0, 1) + " "; } s = s.ToLower(CultureInfo.InvariantCulture); if (Pattern.StringPattern.Length == 1) { SimplePatterns1Char[Pattern.StringPattern] = Pattern; } else { if (SimplePatterns2Char[s] == null) { SimplePatterns2Char[s] = new PatternCollection(); } PatternCollection ar = (PatternCollection)SimplePatterns2Char[s]; ar.Add(Pattern); } if (this.CaseSensitive) { SimplePatterns[Pattern.LowerStringPattern] = Pattern; } else { SimplePatterns[Pattern.StringPattern] = Pattern; } // if (SimplePatterns[s]==null) // SimplePatterns.Add (s,new ArrayList ()); // // ArrayList bb=(ArrayList) SimplePatterns[s]; // // bb.Add (Pattern); } else { ComplexPatterns.Add(Pattern); } mPatterns.Add(Pattern); if (Pattern.Parent == null) { Pattern.Parent = this; } else { throw(new Exception("Pattern already assigned to another PatternList")); } return(Pattern); }