SetUp() public static method

public static SetUp ( ExtensionPath extensionPath, XmlReader reader, string endElement ) : void
extensionPath ExtensionPath
reader System.Xml.XmlReader
endElement string
return void
Example #1
0
        public static void SetUp(ExtensionPath extensionPath, XmlReader reader, string endElement)
        {
            Stack <ICondition> stack = new Stack <ICondition>();

            while (reader.Read())
            {
                XmlNodeType nodeType = reader.NodeType;
                if (nodeType != XmlNodeType.Element)
                {
                    if (nodeType == XmlNodeType.EndElement)
                    {
                        if (reader.LocalName == "Condition" || reader.LocalName == "ComplexCondition")
                        {
                            stack.Pop();
                        }
                        else
                        {
                            if (reader.LocalName == endElement)
                            {
                                return;
                            }
                        }
                    }
                }
                else
                {
                    string localName = reader.LocalName;
                    if (localName == "Condition")
                    {
                        stack.Push(Condition.Read(reader));
                    }
                    else
                    {
                        if (localName == "ComplexCondition")
                        {
                            stack.Push(Condition.ReadComplexCondition(reader));
                        }
                        else
                        {
                            Codon codon = new Codon(extensionPath.AddIn, localName, Properties.ReadFromAttributes(reader), stack.ToArray());
                            extensionPath.codons.Add(codon);
                            if (!reader.IsEmptyElement)
                            {
                                ExtensionPath extensionPath2 = extensionPath.AddIn.GetExtensionPath(extensionPath.Name + "/" + codon.Id);
                                ExtensionPath.SetUp(extensionPath2, reader, localName);
                            }
                        }
                    }
                }
            }
        }
Example #2
0
        static void SetupAddIn(XmlReader reader, AddIn addIn, string hintPath)
        {
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element && reader.IsStartElement())
                {
                    switch (reader.LocalName)
                    {
                    case "StringResources":
                    case "BitmapResources":
                        if (reader.AttributeCount != 1)
                        {
                            throw new AddInLoadException("BitmapResources requires ONE attribute.");
                        }

                        string filename = StringParser.Parse(reader.GetAttribute("file"));

                        if (reader.LocalName == "BitmapResources")
                        {
                            addIn.BitmapResources.Add(filename);
                        }
                        else
                        {
                            addIn.StringResources.Add(filename);
                        }
                        break;

                    case "Runtime":
                        if (!reader.IsEmptyElement)
                        {
                            Runtime.ReadSection(reader, addIn, hintPath);
                        }
                        break;

                    case "Include":
                        if (reader.AttributeCount != 1)
                        {
                            throw new AddInLoadException("Include requires ONE attribute.");
                        }
                        if (!reader.IsEmptyElement)
                        {
                            throw new AddInLoadException("Include nodes must be empty!");
                        }
                        if (hintPath == null)
                        {
                            throw new AddInLoadException("Cannot use include nodes when hintPath was not specified (e.g. when AddInManager reads a .addin file)!");
                        }
                        string            fileName = Path.Combine(hintPath, reader.GetAttribute(0));
                        XmlReaderSettings xrs      = new XmlReaderSettings();
                        xrs.ConformanceLevel = ConformanceLevel.Fragment;
                        using (XmlReader includeReader = XmlTextReader.Create(fileName, xrs)) {
                            SetupAddIn(includeReader, addIn, Path.GetDirectoryName(fileName));
                        }
                        break;

                    case "Path":
                        if (reader.AttributeCount != 1)
                        {
                            throw new AddInLoadException("Import node requires ONE attribute.");
                        }
                        string        pathName      = reader.GetAttribute(0);
                        ExtensionPath extensionPath = addIn.GetExtensionPath(pathName);
                        if (!reader.IsEmptyElement)
                        {
                            ExtensionPath.SetUp(extensionPath, reader, "Path");
                        }
                        break;

                    case "Manifest":
                        addIn.Manifest.ReadManifestSection(reader, hintPath);
                        break;

                    default:
                        throw new AddInLoadException("Unknown root path node:" + reader.LocalName);
                    }
                }
            }
        }
Example #3
0
        private static void SetupAddIn(XmlReader reader, AddIn addIn, string hintPath)
        {
            while (reader.Read())
            {
                if ((reader.NodeType != XmlNodeType.Element) || !reader.IsStartElement())
                {
                    continue;
                }
                switch (reader.LocalName)
                {
                case "StringResources":
                case "BitmapResources":
                    if (reader.AttributeCount != 1)
                    {
                        throw new NotSupportedException("BitmapResources requires ONE attribute.");
                    }
                    break;

                case "Runtime":
                {
                    if (!reader.IsEmptyElement)
                    {
                        Runtime.ReadSection(reader, addIn, hintPath);
                    }
                    continue;
                }

                case "Include":
                    if (reader.AttributeCount != 1)
                    {
                        throw new NotSupportedException("Include requires ONE attribute.");
                    }
                    goto Label_0146;

                case "Path":
                    goto Label_01A3;

                case "Manifest":
                {
                    addIn.Manifest.ReadManifestSection(reader, hintPath);
                    continue;
                }

                default:
                    throw new NotSupportedException("Unknown root path node:" + reader.LocalName);
                }
                string item = StringParser.Parse(reader.GetAttribute("file"));
                if (reader.LocalName == "BitmapResources")
                {
                    addIn.BitmapResources.Add(item);
                }
                else
                {
                    addIn.StringResources.Add(item);
                }
                continue;
Label_0146:
                if (!reader.IsEmptyElement)
                {
                    throw new NotSupportedException("Include nodes must be empty!");
                }
                if (hintPath == null)
                {
                    throw new NotSupportedException("Cannot use include nodes when hintPath was not specified (e.g. when AddInManager reads a .addin file)!");
                }
                string            inputUri = Path.Combine(hintPath, reader.GetAttribute(0));
                XmlReaderSettings settings = new XmlReaderSettings
                {
                    ConformanceLevel = ConformanceLevel.Fragment
                };
                using (XmlReader reader2 = XmlReader.Create(inputUri, settings))
                {
                    SetupAddIn(reader2, addIn, Path.GetDirectoryName(inputUri));
                    continue;
                }
Label_01A3:
                if (reader.AttributeCount != 1)
                {
                    throw new NotSupportedException("Import node requires ONE attribute.");
                }
                string        attribute     = reader.GetAttribute(0);
                ExtensionPath extensionPath = addIn.GetExtensionPath(attribute);
                if (!reader.IsEmptyElement)
                {
                    ExtensionPath.SetUp(extensionPath, reader, "Path");
                }
            }
        }