Beispiel #1
0
        private void ReadXMLArg(string line)
        {
            if (ReaderHelper.GetNextBlackChar(line, 0) != '<')
            {
                return;
            }

            if (line.IndexOf("/>") == -1) // start arg
            {
                int    argStartIndex = line.IndexOf('<') + 1;
                int    argEndIndex   = line.IndexOf(' ', argStartIndex);
                string argName       = line.Substring(argStartIndex, argEndIndex - argStartIndex);

                List <XMLAttribute> atts = new List <XMLAttribute>();
                int attEquals            = 0;
                while (true)
                {
                    attEquals = line.IndexOf('=', attEquals + 1);
                    if (attEquals == -1)
                    {
                        break;
                    }

                    int    attNameStart = line.LastIndexOf(' ', attEquals) + 1;
                    string attName      = line.Substring(attNameStart, attEquals - attNameStart);

                    int    attValueEnd = line.IndexOf('"', attEquals + 2);
                    string attValue    = line.Substring(attEquals + 2, attValueEnd - (attEquals + 2));
                    atts.Add(new XMLAttribute(attName, attValue));
                }

                LIST_XMLArgs.Add(new XMLArg(argName, atts));
            }
            else
            {
                int    argStartIndex = line.IndexOf('<') + 1;
                int    argEndIndex   = line.IndexOf("/>", argStartIndex);
                string argName       = line.Substring(argStartIndex, argEndIndex - argStartIndex);

                int argIndex = LIST_XMLArgs.FindLastIndex(a => a.Name == argName);
                LIST_XMLArgs.RemoveAt(argIndex);
            }
        }
Beispiel #2
0
        private void ReadDoWhile()
        {
            if (STATE_InComment)
            {
                return;
            }
            if (STATE_InString)
            {
                return;
            }
            if (!STATE_InFunction)
            {
                return;
            }

            if (normalText == "do" && Char.IsWhiteSpace((char)P_CharNext))
            {
                if (P_CharI >= doWhileIgnore)
                {
                    doWhileStart.Add(P_CharI + 1);
                }

                C_FinalStr = C_FinalStr.Substring(0, C_FinalStr.Length - 1);
                ARG_IgnoreChar++;
                return;
            }

            if (normalText == "while" && P_CharNextBlack == '(')
            {
                inWhileStatement = true;
                return;
            }

            if (inWhileStatement && !STATE_InRoundBracket)
            {
                if (P_CharNextBlack == ';')
                {
                    if (doWhileStart.Count == 0)
                    {
                        Debug.Error("Bad do...while syntax Line: " + Program.DEBUG_LineI);
                    }

                    int startWhileI = C_SourceStr.LastIndexOf("while", P_CharI);
                    int endWhileI   = C_SourceStr.IndexOf(';', P_CharI);

                    int doStart = doWhileStart[doWhileStart.Count - 1];
                    doWhileStart.RemoveAt(doWhileStart.Count - 1);

                    string args      = C_SourceStr.Substring(doStart, startWhileI - doStart);
                    string finalArgs = " " + ReaderHelper.ScriptToOneLine(args);

                    doWhileIgnore = P_CharI + finalArgs.Length + 1;

                    //Debug.WriteLine("args: "+args);
                    C_SourceStr = C_SourceStr.Remove(endWhileI, 1);
                    C_SourceStr = C_SourceStr.Insert(endWhileI, finalArgs);
                }

                inWhileStatement = false;
            }
        }
Beispiel #3
0
        private void ScriptReader()
        {
            P_LinePrev = "";
            P_Line     = ReaderHelper.GetLine(C_SourceStr, 0);
            P_LineNext = ReaderHelper.GetNextLine(C_SourceStr, 0, P_Line);

            while (true)
            {
                if (P_CharI == C_SourceStr.Length)
                {
                    break;
                }

                if (P_CharI != 0)
                {
                    P_CharPrev = C_SourceStr[P_CharI - 1];
                }

                P_Char = C_SourceStr[P_CharI];

                if (P_CharI + 1 != C_SourceStr.Length)
                {
                    P_CharNext = C_SourceStr[P_CharI + 1];
                }
                else
                {
                    P_CharNext = 0;
                }

                P_CharNextBlack = ReaderHelper.GetNextBlackChar(C_SourceStr, P_CharI + 1);

                if (P_Char == '\n')
                {
                    P_LinePrev = P_Line;
                    P_LineI++;
                    P_Line     = ReaderHelper.GetLine(C_SourceStr, P_CharI + 1);
                    P_LineNext = ReaderHelper.GetNextLine(C_SourceStr, P_CharI + 1, P_Line);
                }

                Program.DEBUG_Line  = P_Line;
                Program.DEBUG_LineI = P_LineI;

                if (ARG_GoToEnd == 0)
                {
                    ReadString();
                }
                if (ARG_GoToEnd == 0)
                {
                    ReadComments();
                }
                if (ARG_GoToEnd == 0)
                {
                    CheckXMLArgs();
                }
                if (ARG_GoToEnd == 0)
                {
                    ReadControlSymbols();
                }
                if (ARG_GoToEnd == 0)
                {
                    ReadPreCompileArgs();
                }
                if (ARG_GoToEnd == 0)
                {
                    ReadFunctionDefinitions();
                }
                if (ARG_GoToEnd == 0)
                {
                    ReplaceConstants();
                }
                if (ARG_GoToEnd == 0)
                {
                    ReadControlArgs();
                }
                if (ARG_GoToEnd == 0)
                {
                    ReadDoWhile();
                }
                if (ARG_GoToEnd == 0)
                {
                    ComprimeCode();
                }

                if (ARG_IgnoreChar == 0)
                {
                    C_FinalStr += ((char)P_Char).ToString();
                    charsInLine++;
                }

                if (ARG_IgnoreChar > 0)
                {
                    ARG_IgnoreChar--;
                }
                if (ARG_GoToEnd > 0)
                {
                    ARG_GoToEnd--;
                }
                P_CharI++;
            }

            ReplaceReplaces();

            //LIST_Functions.ToString();
            LIST_Constants.ToString();
            LIST_Replaces.ToString();
            LIST_Includes.ToString();
        }