void FoldToken(string c) { bool foldNeeded = true; SElementType[] conditionType = new SElementType[] { SElementType.CollectionAnd, SElementType.CollectionOr }; if (currentToken.TokenBefore != null) // if there is nothing before fold { if (conditionType.Contains(currentToken.TokenBefore.TokenType)) // if there is another terminated fold before then fold { //foldNeeded = false; } if (currentToken.TokenBefore.TokenType == SElementType.Collection && currentToken.TokenString == "and") // Fold needed ? { foldNeeded = false; } if (currentToken.TokenParent.TokenNodeType == SElementType.FoldOpen) { foldNeeded = false; } } if (foldNeeded) { SToken firstToFold = currentToken; if (currentToken.TokenBefore != null) { if (currentToken.TokenBefore.TokenBefore != null && currentToken.TokenBefore.TokenNodeType == SElementType.FoldClose && currentToken.TokenBefore.TokenBefore.TokenNodeType != SElementType.CollectionAnd) { while (firstToFold.TokenBefore != null && firstToFold.TokenNodeType != SElementType.FoldOpen) { firstToFold = firstToFold.TokenBefore; } } else { firstToFold = currentToken.TokenBefore; } } // Insert Folding Markers SToken bracketOpenToken = new SToken(); SToken bracketCloseToken = new SToken(); bracketOpenToken.Configure(0, "(", SElementType.Collection, ""); bracketCloseToken.Configure(0, ")", SElementType.Collection, ""); bracketOpenToken.TokenNodeType = SElementType.FoldOpen; bracketCloseToken.TokenNodeType = SElementType.FoldClose; if (currentToken.TokenBefore != null) { bracketOpenToken.TokenMultiplicity = currentToken.TokenBefore.TokenMultiplicity; } bracketOpenToken.Link(firstToFold.TokenParent, firstToFold.TokenBefore, bracketCloseToken, new List<SToken>() { firstToFold }); bracketCloseToken.Link(firstToFold.TokenParent, bracketOpenToken, null, null); firstToFold.Link(bracketOpenToken, null, null, firstToFold.TokenChilds); if (bracketOpenToken.TokenBefore != null) { bracketOpenToken.TokenBefore.TokenAfter[0] = bracketOpenToken; } SToken localToken = firstToFold; while (localToken != null && localToken.TokenAfter != null) { localToken.TokenParent = bracketOpenToken; localToken = localToken.TokenAfter[0]; } // If bracketOpenToken is the first in clilds replace the lider if (bracketOpenToken.TokenBefore == null) { bracketOpenToken.TokenParent.TokenChilds.Remove(firstToFold); bracketOpenToken.TokenParent.TokenChilds.Add(bracketOpenToken); } //currentToken = bracketCloseToken; } switch (c) { case "and": currentToken.TokenParent.TokenType = SElementType.CollectionAnd; currentToken.TokenParent.TokenString = "( && "; break; case "or": currentToken.TokenParent.TokenType = SElementType.CollectionOr; currentToken.TokenParent.TokenString = "( || "; break; } if (currentToken.TokenParent.TokenNodeType != SElementType.FoldOpen) { //currentToken = currentToken.TokenParent; } else { //AppendToken(); } }
private SToken FoldBelowWithPrewious(string c, SElementType[] conditionType) { // Fold Needed ? bool foldNeeded = true; if (currentToken.TokenBefore != null) // if there is nothing before fold { if (conditionType.Contains(currentToken.TokenBefore.TokenType)) // if there is another terminated fold before then fold { //foldNeeded = false; } if (currentToken.TokenBefore.TokenType == SElementType.Collection && c == "and") // Fold needed ? { foldNeeded = false; } if (true) { } } // Fold Location ? SToken firstToFold = currentToken; if (foldNeeded) { if (currentToken.TokenNodeType == SElementType.FoldClose && currentToken.TokenBefore.TokenNodeType != SElementType.CollectionAnd) { while (firstToFold.TokenBefore != null && firstToFold.TokenNodeType != SElementType.FoldOpen) { firstToFold = firstToFold.TokenBefore; } } // Insert Folding Markers SToken bracketOpenToken = new SToken(); bracketOpenToken.Configure(0, "(", SElementType.Collection, ""); bracketOpenToken.TokenNodeType = SElementType.FoldOpen; bracketOpenToken.TokenMultiplicity = currentToken.TokenMultiplicity; SToken bracketCloseToken = new SToken(); bracketCloseToken.Configure(0, ")", SElementType.Collection, ""); bracketCloseToken.TokenNodeType = SElementType.FoldClose; bracketOpenToken.Link(firstToFold.TokenParent, firstToFold.TokenBefore, bracketCloseToken, new List<SToken>() { firstToFold }); if (bracketOpenToken.TokenBefore != null) { //*** bracketOpenToken.TokenBefore.TokenAfter = bracketOpenToken; } SToken localToken = firstToFold; while (localToken != null) { localToken.TokenParent = bracketOpenToken; //*** localToken = localToken.TokenAfter; } bracketCloseToken.Link(firstToFold.TokenParent, bracketOpenToken, null, null); // If bracketOpenToken is the first in clilds replace the lider if (bracketOpenToken.TokenBefore == null) { bracketOpenToken.TokenParent.TokenChilds.Remove(firstToFold); bracketOpenToken.TokenParent.TokenChilds.Add(bracketOpenToken); } // Fold element //*** firstToFold.Link(bracketOpenToken, null, firstToFold.TokenAfter, firstToFold.TokenChilds); } else { SToken localToken = null; if (currentToken.TokenParent.TokenChilds.Count > 0) { localToken = currentToken.TokenParent.TokenChilds[0]; //*** while (localToken.TokenAfter != null) { //*** localToken = localToken.TokenAfter; } } currentToken = localToken; // localToken.TokenAfter = new SToken(0, "", SElementType.Undefined, ""); // currentToken.TokenBefore.TokenAfter = currentToken.TokenAfter; // currentToken.TokenBefore = localToken; // currentToken.TokenParent = localToken.TokenParent; // currentToken.TokenBefore.TokenAfter = currentToken; } // Right //sticked = true; // keep next token into array return currentToken; }
void AppendToken(string c) { SElementType[] conditionType = new SElementType[] { SElementType.CollectionAnd, SElementType.CollectionOr }; SToken newToken = SetNext(currentToken); newToken.Configure(0, "..", SElementType.Symbol, ""); newToken.TokenNodeType = SElementType.Undefined; if (!sticked && nextIsAPropertyFoTheCurrent) { if (currentToken.TokenProperties == null) { currentToken.TokenProperties = new List<SToken>(); } newToken.Link(currentToken.TokenParent, null, null, null); currentToken.TokenProperties.Add(newToken); newToken.TokenDescribed = currentToken; currentToken = newToken; nextIsAPropertyFoTheCurrent = false; return; } if (!sticked && conditionType.Contains(currentToken.TokenParent.TokenType)) { currentToken = currentToken.TokenParent.TokenAfter[currentToken.TokenParent.TokenAfter.Count-1]; } newToken.Link(currentToken.TokenParent, currentToken, null, null); //currentToken = newToken; AdoptAsCurrent(newToken); }