public override string Evaluate(Context context)
 {
     using (StreamReader reader = new StreamReader(Path.GetFullPath(ParseUtilites.GetPathForIncludeParse(PathToFile))))
     {
         return(reader.ReadToEnd());
     }
 }
 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);
     }
 }
Beispiel #3
0
        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)));
            }
        }
Beispiel #4
0
 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);
                 }
             }
         }
     }
 }
Beispiel #5
0
        private static void ParseConfigurationFile()
        {
            string fileData;

            using (var stream = new StreamReader(PagesInfo.ConfigFile))
            {
                fileData = stream.ReadToEnd();
            }
            string rootToPreloaded;

            string[] preloadedFileNames;
            ParseUtilites.ParseConfigFile(fileData, out rootToPreloaded, out preloadedFileNames);
            RootToPreloaded    = rootToPreloaded;
            PreloadedFileNames = preloadedFileNames;
            ParsePreloadedFiles();
        }
Beispiel #6
0
        private void HandleConstructionAtPosition(CompositeConstruction comCon, string name, ref int position)
        {
            Macross currentMacros = table.Get(name);

            if (currentMacros.Name == "break")
            {
                comCon.AddUnit(
                    new StaticText(comCon, fileData.Substring(currentPosition, position - currentPosition)));
                TextUnit comp = new BreakConstruction(comCon, fileData);
                comCon.AddUnit(comp);
                currentPosition = position + name.Length;
                position        = currentPosition;
                return;
            }
            int    macrosDataEndPos = ParseUtilites.GetMacrosCloseBracketPosAfterMacroSep(fileData, position);
            string macrosData       = ParseUtilites.GetMacrossData(fileData, position, macrosDataEndPos);

            comCon.AddUnit(
                new StaticText(comCon, fileData.Substring(currentPosition, position - currentPosition)));
            if (currentMacros.IsCompositeMacross() && currentMacros.Name != "#elseif" && currentMacros.Name != "#else")
            {
                currentPosition = macrosDataEndPos + 1;
                TextUnit compositePart = PredefinedMacros.GetMacro(comCon, name, fileData, macrosData);
                comCon.AddUnit(compositePart);
                CompositeConstruction comp = (CompositeConstruction)compositePart;
                comp.StartPositionInFile = position;
                comp.Accept(this);
                position = currentPosition;
            }
            else
            {
                currentPosition = macrosDataEndPos + 1;
                if (currentMacros is UserDefinedMacross)
                {
                    UserDefinedMacross userDefined = (UserDefinedMacross)currentMacros;
                    TextUnit           comp        = new UserDefinedMacrosConstruction(comCon, userDefined, fileData, macrosData);
                    comCon.AddUnit(comp);
                    position = currentPosition;
                }
                else
                {
                    TextUnit comp = PredefinedMacros.GetMacro(comCon, name, fileData, macrosData);
                    comCon.AddUnit(comp);
                    position = currentPosition;
                }
            }
        }
Beispiel #7
0
        public override string Evaluate(Context context)
        {
            StringBuilder builder          = new StringBuilder(TextData);
            List <string> valuesToReplace  = new List <string>();
            int           startingPosition = 0;
            int           positionOfVariable;

            while ((positionOfVariable = TextData.IndexOf(StaticData.VariableSeparator, startingPosition)) != -1)
            {
                startingPosition = ParseUtilites.GetEndOfVariableAtPosition(TextData, positionOfVariable + 1);
                valuesToReplace.Add(TextData.Substring(positionOfVariable + 1, startingPosition - positionOfVariable));
            }
            foreach (var val in valuesToReplace.Where(context.Contains))
            {
                builder.Replace(StaticData.VariableSeparator + val, context.GetValue(val).ToString());
            }
            return(builder.ToString());
        }
        private static void RegisterWitoutBuilding(TableOfMacros table, string fileData)
        {
            int positionOfMacros = 0;
            int searchAfter      = 0;

            while ((positionOfMacros = fileData.IndexOf("#macro", searchAfter, StringComparison.Ordinal)) != -1)
            {
                string        macrosData = ParseUtilites.GetMacrossData(fileData, positionOfMacros);
                List <string> split      = new List <string>(ParseUtilites.SplitAvoidingRedundantCharacters(macrosData));
                string        macrosName = StaticData.MacroSeparator + split[0];
                if (table.Contains(macrosName))
                {
                    throw new Exception("MacroDefinitionAlreadyExists!");
                }
                split.RemoveAt(0);
                Macross macrossToAdd = new UserDefinedMacross(macrosName, split);
                table.Add(macrosName, macrossToAdd);
                searchAfter = positionOfMacros + 1;
            }
        }
Beispiel #9
0
        public override string Evaluate(Context context)
        {
            StringBuilder res = new StringBuilder();

            object[] args  = ParseUtilites.ParseArgumentsOfMacro(arguments, context);
            string[] names = actualMacross.ArgumentsNames.ToArray();
            for (int i = 0; i < names.Length; ++i)
            {
                names[i] = names[i].Remove(0, 1);
            }
            for (int i = 0; i < args.Length; ++i)
            {
                context.AddNewValue(names[i], args[i]);
            }
            res.Append(actualMacross.CompositeView.Evaluate(context));
            for (int i = 0; i < args.Length; ++i)
            {
                context.DeleteValue(names[i]);
            }
            return(res.ToString());
        }
Beispiel #10
0
        private void HandleElseConstructionAtPosition(IfConstruction ifCon, string name, ref int position)
        {
            ifCon.AddUnit(
                new StaticText(ifCon, fileData.Substring(currentPosition, position - currentPosition)));
            string macrosData = null;

            if (name == "#elseif")
            {
                int macrosDataEndPos = ParseUtilites.GetMacrosCloseBracketPosAfterMacroSep(fileData, position);
                macrosData      = ParseUtilites.GetMacrossData(fileData, position, macrosDataEndPos);
                currentPosition = macrosDataEndPos + 1;
            }
            else
            {
                currentPosition = currentPosition + "#else".Length;
            }
            ElseConstruction compositePart = (ElseConstruction)PredefinedMacros.GetMacro(ifCon, name, fileData, macrosData);

            compositePart.SetFatherIfConstruction(ifCon);
            ifCon.AddElseConstruction(compositePart);
            compositePart.StartPositionInFile = position;
            compositePart.Accept(this);
            position = currentPosition;
        }
Beispiel #11
0
 public override string Evaluate(Context context)
 {
     string[] arguments = ParseUtilites.SplitForSet(NewVariable);
     context.AddNewValue(arguments[0], ParseUtilites.ParseArgument(arguments[1], context));
     return("");
 }
        public override string Evaluate(Context context)
        {
            string path = ParseUtilites.GetPathForIncludeParse(FilePath);

            return(MacroEngine.Merge(path, new Context()));
        }