/// <summary> /// Searches closing bracket for given open bracket in equation. /// </summary> /// <param name="Opening_Bracket"></param> /// <param name="Root_Bracket_Pair"></param> /// <returns></returns> private Bracket_Pair Search_for_Close_Bracket(Open_Bracket Opening_Bracket, Bracket_Pair Root_Bracket_Pair) { int bracket_Index = Element_Colection.IndexOf(Opening_Bracket); int bracket_Level = 0; for (int i = bracket_Index; i < Element_Colection.Count; i++) { if (Element_Colection[i] is Open_Bracket) { bracket_Level++; } if (Element_Colection[i] is Close_Bracket CB) { if (--bracket_Level == 0) { return(new Bracket_Pair(Opening_Bracket, CB, Root_Bracket_Pair)); } } } while (--bracket_Level > 0) { Element_Colection.Add(new Close_Bracket()); } return(Add_Close_Bracket(Opening_Bracket, Root_Bracket_Pair)); }
/// <summary> /// Adds missing copening bracket at the beging of equation if missing. /// </summary> /// <param name="Closing_Bracket"></param> /// <param name="Root_Bracket_Pair"></param> private void Add_Open_Bracket(Close_Bracket Closing_Bracket, Bracket_Pair Root_Bracket_Pair) { Open_Bracket new_OB = new Open_Bracket(); Element_Colection.Insert(0, new_OB); Bracket_Pair bracket_Pair = new Bracket_Pair(new_OB, Closing_Bracket, Root_Bracket_Pair); }
/// <summary> /// Adds missing closing bracket at the end of equation if missing. /// </summary> /// <param name="_Open_Bracket"></param> /// <param name="Root_Bracket_Pair"></param> /// <returns></returns> private Bracket_Pair Add_Close_Bracket(Open_Bracket _Open_Bracket, Bracket_Pair Root_Bracket_Pair) { Close_Bracket new_CB = new Close_Bracket(); Element_Colection.Add(new_CB); return(new Bracket_Pair(_Open_Bracket, new_CB, Root_Bracket_Pair)); }
public Bracket_Pair(Open_Bracket OB, Close_Bracket CB, Bracket_Pair RBP) { Open_Bracket = OB; Close_Bracket = CB; Open_Bracket.Pair = this; Close_Bracket.Pair = this; Root_Bracket_Pair = RBP; Inner_Brackets = new List <Bracket_Pair>(); if (Root_Bracket_Pair != null) { Root_Bracket_Pair.Inner_Brackets.Add(this); } }