public override void Visit(ElseConstruction elseCon, IfConstruction ifCon) { for (int position = currentPosition; position < fileData.Length && ifCon.Stop; ++position) { if (fileData[position] == StaticData.MacroSeparator) { string macrosName = ParseUtilites.GetMacrosNameInPosition(fileData, position); if (table.Contains(macrosName)) { if (macrosName == "#else" || macrosName == "#elseif") { HandleEndOfElseConstruction(elseCon, position); HandleElseConstructionAtPosition(ifCon, macrosName, ref position); } else if (macrosName == "#end") { HandleEndConstructionAtPosition(elseCon, position); elseCon.SetFatherStop(); return; } else { HandleConstructionAtPosition(elseCon, macrosName, ref position); } } } } }
public override void Visit(CompositeConstruction comCon) { int position = currentPosition; for (; position < fileData.Length; ++position) { if (fileData[position] != StaticData.MacroSeparator) { continue; } string macrosName = ParseUtilites.GetMacrosNameInPosition(fileData, position); if (!table.Contains(macrosName)) { continue; } if (macrosName != "#end") { HandleConstructionAtPosition(comCon, macrosName, ref position); } else { HandleEndConstructionAtPosition(comCon, position); return; } } if (currentPosition < fileData.Length) { comCon.AddUnit( new StaticText(comCon, fileData.Substring(currentPosition))); } }
public static void Register(TableOfMacros table, string fileData) { try { RegisterWitoutBuilding(table, fileData); for (int position = 0; position < fileData.Length; ++position) { if (fileData[position] == StaticData.MacroSeparator) { string macrosName = ParseUtilites.GetMacrosNameInPosition(fileData, position); if (macrosName == "#macro") { string macrosData = ParseUtilites.GetMacrossData(fileData, position); string userDefinedMacrossName = StaticData.MacroSeparator + ParseUtilites.SplitAvoidingRedundantCharacters(macrosData)[0 ]; MainCompositeView cv = new MainCompositeView(fileData); cv.StartPositionInFile = position; int startOfMacroData = ParseUtilites.GetMacrosCloseBracketPosAfterMacroSep(fileData, position) + 1; Visitor v = new BuildCompositeVisitor(fileData, table, startOfMacroData); cv.Accept(v); position = cv.EndPositionInFile + "#end".Length; ((UserDefinedMacross)table.Get(userDefinedMacrossName)).CompositeView = cv; } } } } catch (Exception ex) { Console.WriteLine("Error while building table of macros!"); Console.WriteLine("Error message: {0}", ex.Message); } }