public static void SetUp(ExtensionPath extensionPath, XmlReader reader, string endElement)
		{
			Stack<ICondition> conditionStack = new Stack<ICondition>();
			List<Codon> innerCodons = new List<Codon>();
			while (reader.Read()) {
				switch (reader.NodeType) {
					case XmlNodeType.EndElement:
						if (reader.LocalName == "Condition" || reader.LocalName == "ComplexCondition") {
							conditionStack.Pop();
						} else if (reader.LocalName == endElement) {
							if (innerCodons.Count > 0)
								extensionPath.codons.Add(innerCodons);
							return;
						}
						break;
					case XmlNodeType.Element:
						string elementName = reader.LocalName;
						if (elementName == "Condition") {
							conditionStack.Push(Condition.Read(reader));
						} else if (elementName == "ComplexCondition") {
							conditionStack.Push(Condition.ReadComplexCondition(reader));
						} else {
							Codon newCodon = new Codon(extensionPath.AddIn, elementName, Properties.ReadFromAttributes(reader), conditionStack.ToArray());
							innerCodons.Add(newCodon);
							if (!reader.IsEmptyElement) {
								ExtensionPath subPath = extensionPath.AddIn.GetExtensionPath(extensionPath.Name + "/" + newCodon.Id);
								//foreach (ICondition condition in extensionPath.conditionStack) {
								//	subPath.conditionStack.Push(condition);
								//}
								SetUp(subPath, reader, elementName);
								//foreach (ICondition condition in extensionPath.conditionStack) {
								//	subPath.conditionStack.Pop();
								//}
							}
						}
						break;
				}
			}
			if (innerCodons.Count > 0)
				extensionPath.codons.Add(innerCodons);
		}
Beispiel #2
0
		public void ListCodons(ExtensionPath ext)
		{
			CodonLV.Items.Clear();
			if (ext == null) {
				ExtTextBox.Text = "Extension : ";
				return;
			}
			ListCodons(ext.Name);
		}
Beispiel #3
0
		public static void SetUp(ExtensionPath extensionPath, XmlReader reader, string endElement)
		{
			extensionPath.DoSetUp(reader, endElement);
		}
Beispiel #4
0
		public ExtensionPath GetExtensionPath(string pathName)
		{
			if (!paths.ContainsKey(pathName)) {
				return paths[pathName] = new ExtensionPath(pathName, this);
			}
			return paths[pathName];
		}
Beispiel #5
0
		public static void SetUp(ExtensionPath extensionPath, XmlReader reader, string endElement)
		{
			Stack<ICondition> conditionStack = new Stack<ICondition>();
			extensionPath.DoSetUp(reader, endElement, conditionStack);
		}
Beispiel #6
0
 public static void SetUp(ExtensionPath extensionPath, XmlReader reader, string endElement)
 {
     extensionPath.DoSetUp(reader, endElement);
 }
        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.NameTable        = reader.NameTable;                          // share the name table
                        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);
                    }
                }
            }
        }
Beispiel #8
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");
                }
            }
        }