private void ParseTileHelper(ParseResult result, XContainer parentNode, FeatureSet supportedFeatures)
        {
            XElement node = parentNode.FirstElementOrDefault("tile");

            if (node == null)
            {
                result.AddError("tile element was not found", ErrorPositionInfo.Default);
                return;
            }

            if (!EnsureNodeOnlyHasElementsAsChildren(result, node))
            {
                return;
            }

            result.Tile = new Model.Tile(supportedFeatures);

            AttributesHelper attributes = new AttributesHelper(node.Attributes());

            // tile doesn't have any attributes

            AddWarningsForUnknownAttributes(result, attributes);

            ParseVisual(result, result.Tile.Visual, node);
        }
        private void ParseNotificationHelper(ParseResult result, XContainer parentNode)
        {
            XElement node = parentNode.FirstElementOrDefault("notification");

            if (node == null)
            {
                result.AddError("notification element was not found", ErrorPositionInfo.Default);
                return;
            }

            result.Notification = new Notification(FeatureSet.GetExperimental());

            try
            {
                result.Notification.Parse(result, node);
            }

            catch (IncompleteElementException) { }
        }
        private void ParseToastHelper(ParseResult result, XContainer parentNode, FeatureSet supportedFeatures)
        {
            XElement node = parentNode.FirstElementOrDefault("toast");

            if (node == null)
            {
                result.AddError("toast element was not found", ErrorPositionInfo.Default);
                return;
            }

            result.Toast = new Toast(supportedFeatures);

            try
            {
                result.Toast.Parse(result, node);
            }

            catch (IncompleteElementException) { }
        }