public void ReadXML(XmlTextReader reader)
        {
            reader.MoveToNextElement();
            if (reader.Name != "BuildSystem")
            {
                throw new ArgumentException("Invalid XML Format");
            }
            string[] includeDirs = reader.GetAttribute("IncludeDirs").Split(';');
            foreach (string include in includeDirs)
            {
                if (!string.IsNullOrEmpty(include))
                {
                    this.Project.IncludeDirs.Add(include);
                }
            }
            while (reader.MoveToNextElement())
            {
                string      configName  = reader.Name;
                BuildConfig configToAdd = new BuildConfig(Project, configName);
                buildConfigs.Add(configToAdd);
                if (reader.IsEmptyElement)
                {
                    continue;
                }
                reader.MoveToNextElement();
                int    count     = Convert.ToInt32(reader.GetAttribute("Count"));
                string inputFile = reader.GetAttribute("InputFile");
                switch (reader.Name)
                {
                case "ExternalBuildStep":
                    string            arguments = reader.GetAttribute("Arguments");
                    ExternalBuildStep exstep    = new ExternalBuildStep(Project, count, inputFile, arguments);
                    configToAdd.Steps.Add(exstep);
                    break;

                case "InternalBuildStep":
                    string            outputFile = reader.GetAttribute("OutputFile");
                    StepType          type       = (StepType)Convert.ToInt16(reader.GetAttribute("StepType"));
                    InternalBuildStep instep     = new InternalBuildStep(Project, count, type, inputFile, outputFile);
                    configToAdd.Steps.Add(instep);
                    break;

                default:
                    throw new ArgumentException("Invalid XML Format");
                }
            }
        }
Beispiel #2
0
        public Project(Stream stream, string projectFile)
        {
            using (var reader = new XmlTextReader(stream))
            {
                stream = null;
                reader.WhitespaceHandling = WhitespaceHandling.None;
                reader.MoveToContent();
                while (!reader.Name.Equals("WabbitcodeProject"))
                {
                    if (!reader.MoveToNextElement())
                    {
                        throw new InvalidDataException("Invalid XML Format");
                    }
                }

                string formatVersion = reader.GetAttribute("Version");
                if (formatVersion != ProjectFileVersion)
                {
                    throw new Exception("Invalid Version");
                }
                ProjectFile      = projectFile;
                ProjectDirectory = reader.GetAttribute("Directory");
                if (ProjectDirectory == null)
                {
                    ProjectDirectory = Path.GetDirectoryName(projectFile);
                }
                ProjectName = reader.GetAttribute("Name");
                reader.MoveToNextElement();
                if (reader.Name != "Folder")
                {
                    throw new ArgumentException("Invalid XML Format");
                }
                IProjectFolder mainFolder = new ProjectFolder(this, reader.GetAttribute("Name"));
                RecurseReadFolders(reader, ref mainFolder);
                MainFolder  = mainFolder;
                BuildSystem = new BuildSystem(this, false);
                IncludeDirs = new List <string>();
                BuildSystem.ReadXML(reader);
            }
            ParserService = new ParserService();
        }
Beispiel #3
0
        void ParseTemplatesFile()
        {
            var reader = new XmlTextReader(pathsService.TemplatesConfig);

            reader.WhitespaceHandling = WhitespaceHandling.None;
            reader.MoveToContent();
            if (reader.Name != "templates")
            {
                throw new InvalidDataException("Invalid XML Format: unable to find head node");
            }
            reader.MoveToNextElement();
            while (reader.MoveToNextElement())
            {
                switch (reader.Name)
                {
                case "model":
                    HandleModelNode(ref reader);
                    break;
                }
            }
        }
        private void ParseTemplatesFile()
        {
            var reader = new XmlTextReader(Path.Combine(FileLocations.TemplatesDir, "Templates.xml"))
            {
                WhitespaceHandling = WhitespaceHandling.None
            };

            reader.MoveToContent();
            if (reader.Name != "templates")
            {
                throw new InvalidDataException("Invalid XML Format: unable to find head node");
            }

            reader.MoveToNextElement();
            while (reader.MoveToNextElement())
            {
                switch (reader.Name)
                {
                case "model":
                    HandleModelNode(ref reader);
                    break;
                }
            }
        }
        public static DebuggingStructureList FromXml(XmlTextReader reader)
        {
            DebuggingStructureList list = new DebuggingStructureList();

            if (reader.Name != "DebugStructs")
            {
                return(list);
            }

            if (reader.IsEmptyElement)
            {
                reader.MoveToNextElement();
                return(list);
            }

            reader.MoveToNextElement();
            while (reader.Name == "Enum")
            {
                var name       = reader.GetAttribute("Name");
                var enumValues = new Dictionary <byte, List <string> >();
                if (!reader.MoveToNextElement())
                {
                    break;
                }

                while (reader.Name == "EnumMask")
                {
                    var  maskList = new List <string>();
                    byte maskValue;
                    if (!byte.TryParse(reader.GetAttribute("Mask"), out maskValue))
                    {
                        continue;
                    }

                    while (reader.MoveToNextElement())
                    {
                        if (reader.Name != "EnumValue")
                        {
                            break;
                        }

                        maskList.Add(reader.ReadString());
                    }


                    enumValues.Add(maskValue, maskList);
                }

                var debugEnum = new DebuggingEnum(name, enumValues);
                list.DebugEnums.Add(debugEnum);
            }

            while (reader.Name == "Struct")
            {
                var name      = reader.GetAttribute("Name");
                var structure = new DebuggingStructure {
                    Name = name
                };
                while (reader.MoveToNextElement())
                {
                    if (reader.Name != "Prop")
                    {
                        break;
                    }

                    var model = new TreeStructureModel
                    {
                        Name = reader.GetAttribute("Name"),
                        Size = Convert.ToInt32(reader.GetAttribute("Size")),
                        Type = reader.GetAttribute("Type")
                    };

                    structure.Properties.Add(model);
                }

                list.DebugStructs.Add(structure);
            }

            return(list);
        }
        public void OpenProject(FilePath projectFile)
        {
            FileStream stream = null;

            try
            {
                stream = new FileStream(projectFile, FileMode.Open);
                using (XmlTextReader reader = new XmlTextReader(stream)
                {
                    WhitespaceHandling = WhitespaceHandling.None
                })
                {
                    stream = null;
                    reader.MoveToContent();
                    while (!reader.Name.Equals("WabbitcodeProject"))
                    {
                        if (!reader.MoveToNextElement())
                        {
                            throw new ArgumentException("Invalid XML Format");
                        }
                    }

                    string formatVersion = reader.GetAttribute("Version");
                    if (formatVersion != ProjectFileVersion)
                    {
                        throw new InvalidProjectVersionException();
                    }

                    ProjectName = reader.GetAttribute("Name");
                    reader.MoveToNextElement();
                    if (reader.Name != "Folder")
                    {
                        throw new ArgumentException("Invalid XML Format");
                    }
                    _mainFolder = new ProjectFolder(null, reader.GetAttribute("Name"));
                    RecurseReadFolders(reader, ref _mainFolder);
                    reader.MoveToNextElement();

                    _debuggingStructure = DebuggingStructureList.FromXml(reader);
                    var displayManager = VariableDisplayManager.Instance;
                    foreach (var debugEnum in _debuggingStructure.DebugEnums)
                    {
                        var enumController = new EnumVariableDisplayController(new ExpressionEvaluator(), debugEnum);
                        displayManager.RegisterVariableDisplayController(enumController);
                    }
                    foreach (var structure in _debuggingStructure.DebugStructs)
                    {
                        displayManager.RegisterVariableDisplayController(new CompositeVariableDisplayController(structure));
                    }

                    BuildSystem.ReadXML(reader);
                }
            }
            finally
            {
                if (stream != null)
                {
                    stream.Dispose();
                }
            }

            SetupWatcher();
        }
        public void ReadXML(XmlTextReader reader)
        {
            FilePath root = _project.ProjectDirectory;

            if (reader.Name != "BuildSystem")
            {
                throw new ArgumentException("Invalid XML Format");
            }

            var attribute = reader.GetAttribute("IncludeDirs");

            if (attribute != null)
            {
                string[] includeDirs = attribute.Split(';');
                foreach (string include in includeDirs.Where(include => !string.IsNullOrEmpty(include)))
                {
                    string path = Uri.UnescapeDataString(new Uri(Path.Combine(root, include)).AbsolutePath);
                    _project.IncludeDirs.Add(new FilePath(path));
                }
            }

            BuildConfig configToAdd = null;

            while (reader.MoveToNextElement())
            {
                if (reader.Name.Contains("Step"))
                {
                    if (configToAdd == null)
                    {
                        throw new ArgumentException("Invalid XML Format");
                    }

                    int    count     = Convert.ToInt32(reader.GetAttribute("StepNum"));
                    string inputFile = reader.GetAttribute("InputFile");
                    switch (reader.Name)
                    {
                    case "ExternalBuildStep":
                        string arguments = reader.GetAttribute("Arguments");
                        if (inputFile != null)
                        {
                            ExternalBuildStep exstep = new ExternalBuildStep(
                                count,
                                root.Combine(inputFile),
                                arguments);
                            configToAdd.AddStep(exstep);
                        }
                        break;

                    case "InternalBuildStep":
                        string        outputFile = reader.GetAttribute("OutputFile");
                        BuildStepType type       = (BuildStepType)Convert.ToInt16(reader.GetAttribute("StepType"));
                        if (inputFile != null && outputFile != null)
                        {
                            InternalBuildStep instep = new InternalBuildStep(
                                count,
                                type,
                                root.Combine(inputFile),
                                root.Combine(outputFile));
                            configToAdd.AddStep(instep);
                        }
                        break;

                    default:
                        throw new ArgumentException("Invalid XML Format");
                    }
                }
                else
                {
                    string configName = reader.Name;
                    configToAdd = new BuildConfig(configName);
                    _buildConfigs.Add(configToAdd);
                }
            }
        }