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); } }
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; } }
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(); }