private List <RevitFunctionModel> AssignFunctions(List <RevitFunctionsPositionModel> functionsTypeList, List <RevitFunctionModel> revitFunctionsInFormula) { int iterator = 0; int actualParentFunctionNum = -1; List <RevitFunctionModel> revitFunctions = new List <RevitFunctionModel>(); RevitFunctionModel function = null, parentFunction = null; foreach (RevitFunctionsPositionModel functionPos in functionsTypeList) { // if(heigh=15, 145, if(and(a>15, b<16), 245,deep)) // if(heigh=15, 145, if(and(a>15, b<16), and( ),deep)) // if(if(and(a>15, b<16), and(4,5),deep), 145,and(heigh=15,h=2) ) if (functionPos.Stage == RevitEnums.FunctionStage.Open) { if (actualParentFunctionNum < iterator) { parentFunction = function; } else if (actualParentFunctionNum > iterator) { parentFunction = parentFunction.ParentFunction; } actualParentFunctionNum = iterator; function = revitFunctionsInFormula.First(fun => fun.StartPos == functionPos.Position); if (actualParentFunctionNum == 0) { revitFunctions.Add(function); } else { parentFunction.AddChildFunction(function); } iterator++; } else if (functionPos.Stage == RevitEnums.FunctionStage.Close) { iterator--; } } return(revitFunctions); }