Beispiel #1
0
 public void Configure(int tokenId, string tokenString, SElementType tokenType, string tokenCode)
 {
     TokenId = tokenId;
     TokenString = tokenString;
     TokenType = tokenType;
     TokenCode = tokenCode;
 }
Beispiel #2
0
        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();
            }
            
            
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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);

        }