// Use this for initialization
 void Start()
 {
     startingState = enumstate.normal;
     currentState  = startingState;
 }
Example #2
0
        private void process()
        {
            // real tokens, cut out comments and such
            Token prev = root;
            Token tok  = root.RealNext();

            while (!tok.IsEnd())
            {
                if (tok.IsQuote())
                {
                    tok = tok.RealCompleteText();
                }
                else if (tok.IsCharDelimiter())
                {
                    tok = tok.RealCompleteChar();
                }
                else if (tok.IsBlockCommentStart())
                {
                    tok = tok.RealCompleteBlockComment();
                }
                else if (tok.IsLineCommentStart())
                {
                    tok = tok.RealCompleteLineComment();
                }
                else if (tok.IsDirectiveStart())
                {
                    tok = tok.RealCompleteDirective();
                }
                else
                {
                    prev = tok;
                    tok++;
                }
            }

            // add semicolons to class definitions
            tok = root;
            for (tok = root; !tok.IsEnd(); tok = tok.Next())
            {
                if (tok.IsEnum() || tok.IsClass() || tok.IsInterface())
                {
                    tok = tok.PreCompleteClass();
                    if (tok.IsEnd())
                    {
                        Token semi = new Token();
                        semi.Type  = Token.Typeenum.Symbol;
                        semi.Value = ";";
                        Token tail = tok.Prev();
                        tail.InsertAfter(semi);
                        tail.Whitespaces = "";
                        tok = semi;
                    }
                    else if (tok.Next().IsEnd() || !tok.Next().IsSemi())
                    {
                        Token semi = new Token();
                        semi.Type        = Token.Typeenum.Symbol;
                        semi.Value       = ";";
                        semi.Whitespaces = tok.Whitespaces;
                        tok.Whitespaces  = "";
                        tok.InsertAfter(semi);
                        tok = semi;
                    }
                }
            }

            // expand arrays
            enumstate state = enumstate.Clear;

            tok = root;
            while (!tok.Next().IsEnd())
            {
                tok = tok.Next();
            }

            for (; !tok.IsBegin(); tok = tok.Prev())
            {
                if (tok.IsLeftBracket())
                {
                    state = enumstate.FoundBracket;
                    continue;
                }
                else if (tok.IsAssign())
                {
                    if (state == enumstate.FoundBracket)
                    {
                        state = enumstate.FoundAssign;
                    }
                    else
                    {
                        state = enumstate.Clear;
                    }
                    continue;
                }
                else if (tok.IsIdentifier())
                {
                    if (state == enumstate.FoundAssign)
                    {
                        state = enumstate.FoundIdentifier;
                    }
                    else
                    {
                        state = enumstate.Clear;
                    }
                    continue;
                }

                if (tok.IsArrayEnd())
                {
                    if (state == enumstate.FoundIdentifier)
                    {
                        // go back until identifier
                        while (!tok.IsEnd() && !tok.IsIdentifier())
                        {
                            tok = tok.Prev();
                        }
                        if (tok.IsEnd())
                        {
                            Program.Log("Assignment in beginning of the file?");
                            continue;
                        }
                        continue;
                    }
                    // make an array
                    tok.RemoveSelf();
                    tok = tok.Prev();
                    tok.RemoveSelf();
                    tok = tok.Prev();
                    Token ident = tok;
                    while (!ident.IsBegin() && !ident.IsIdentifier())
                    {
                        ident = ident.Prev();
                    }
                    if (ident.IsBegin())
                    {
                        Program.Log("Array without a type, am I parsing something inlined?");
                        continue;
                    }
                    replaceWithArray(ident, tok);
                    tok = tok.Next();
                }
                state = enumstate.Clear;
            }

            tok = root;
            for (tok = root; !tok.IsEnd(); tok = tok.Next())
            {
                if (tok.IsNot())
                {
                    tok.Value       = "!";
                    tok.Whitespaces = "";
                }
            }

            if (Program.Fixargs)
            {
                fixAllArguments();
            }
        }