Esempio n. 1
0
        private static void WritePropertySet(XmlWriter writer, PropertySetFormats.PropertySet data)
        {
            if (data.DefinedSchema != null)
            {
                WritePropertySetSchema(writer, data.DefinedSchema);
            }

            writer.WriteStartElement("PropertySet");
            writer.WriteAttributeString("name", GetSymbolName(data.Name));

            if (data.SchemaName != DataFormats.Symbol.Invalid)
            {
                writer.WriteAttributeString("schema", GetSymbolName(data.SchemaName));
            }

            if ((data.Flags & DataFormats.PropertyCollectionFlags.SkipParentCheck) != 0)
            {
                writer.WriteAttributeString("skipparentcheck", "True");
            }

            if (data.ReferenceCount != 0)
            {
                writer.WriteAttributeString("refs", data.ReferenceCount.ToString(CultureInfo.InvariantCulture));
            }

            var ignoredFlags = DataFormats.PropertyCollectionFlags.IsSet |
                               DataFormats.PropertyCollectionFlags.OwnerIsList |
                               DataFormats.PropertyCollectionFlags.OwnerIsSet |
                               DataFormats.PropertyCollectionFlags.SkipParentCheck;
            var cleanedFlags = data.Flags & ~ignoredFlags;

            if (cleanedFlags != DataFormats.PropertyCollectionFlags.None)
            {
                writer.WriteAttributeString("flags", cleanedFlags.ToString());
            }

            foreach (var parent in data.Parents)
            {
                writer.WriteElementString("Parent", GetSymbolName(parent.NameId));
            }

            foreach (var kv in data.Properties)
            {
                writer.WriteStartElement("Property");
                WriteProperty(writer, kv.Key, kv.Value, data.DefaultProperties.Contains(kv.Key) == true);
                writer.WriteEndElement();
            }

            writer.WriteEndElement();
        }
Esempio n. 2
0
        private static PropertySetFormats.PropertySet ReadPropertySet(XPathNavigator nav, object parent)
        {
            PropertySetFormats.PropertySetSchema definedSchema = null;
            var rawSchema = nav.SelectSingleNode("PropertySetSchema");

            if (rawSchema != null)
            {
                definedSchema = ReadPropertySetSchema(rawSchema);
            }

            var root = nav.SelectSingleNode("PropertySet");

            if (root == null)
            {
                throw new InvalidOperationException();
            }

            var instance = new PropertySetFormats.PropertySet();

            instance.DefinedSchema = definedSchema;

            instance.Name = root.ParseAttributeSymbol("name");

            instance.Flags = root.ParseAttributeEnum("flags", DataFormats.PropertyCollectionFlags.None);

            instance.Flags &= _NonSetListMask;
            instance.Flags |= DataFormats.PropertyCollectionFlags.IsSet;
            instance.Flags |= GetOwnerFlag(parent);

            instance.SchemaName = root.ParseAttributeSymbol("schema", DataFormats.Symbol.Invalid);

            if (root.ParseAttributeBoolean("skipparentcheck", false) == true)
            {
                instance.Flags |= DataFormats.PropertyCollectionFlags.SkipParentCheck;
            }

            instance.ReferenceCount = root.ParseAttributeUInt16("refs", 0);

            instance.Parents.Clear();
            var rawParents = root.Select("Parent");

            while (rawParents.MoveNext() == true)
            {
                var  rawParent = rawParents.Current;
                uint dummy;
                if (Helpers.TryParseSymbol(rawParent.Value, out dummy) == false)
                {
                    throw new FormatException("failed to parse parent");
                }
                instance.Parents.Add(new DataFormats.ResourceHandle(dummy));
            }

            instance.Properties.Clear();
            instance.DefaultProperties.Clear();

            var rawProperties = root.Select("Property");

            while (rawProperties.MoveNext() == true)
            {
                var rawProperty = rawProperties.Current;

                var name      = rawProperty.ParseAttributeSymbol("name");
                var isDefault = rawProperty.ParseAttributeBoolean("default", false);
                var value     = ParseProperty(rawProperty, instance);
                instance.Properties.Add(name.Id, value);

                if (isDefault == true)
                {
                    instance.DefaultProperties.Add(name.Id);
                }
            }

            return(instance);
        }