System.Xml.Xsl.Xslt.XsltLoader.LoadOutput C# (CSharp) Method

LoadOutput() private method

private LoadOutput ( ) : void
return void
        private void LoadOutput()
        {
            ContextInfo ctxInfo = _input.GetAttributes(_outputAttributes);

            Output output = _compiler.Output;
            XmlWriterSettings settings = output.Settings;
            int currentPrec = _compiler.CurrentPrecedence;
            TriState triState;

            QilName name = ParseQNameAttribute(0);
            if (name != null) ReportNYI("xsl:output/@name");

            if (_input.MoveToXsltAttribute(1, "method"))
            {
                if (output.MethodPrec <= currentPrec)
                {
                    _compiler.EnterForwardsCompatible();
                    XmlOutputMethod outputMethod;
                    XmlQualifiedName method = ParseOutputMethod(_input.Value, out outputMethod);
                    if (_compiler.ExitForwardsCompatible(_input.ForwardCompatibility) && method != null)
                    {
                        if (currentPrec == output.MethodPrec && !output.Method.Equals(method))
                        {
                            ReportWarning(/*[XT1560]*/SR.Xslt_AttributeRedefinition, "method");
                        }
                        settings.OutputMethod = outputMethod;
                        output.Method = method;
                        output.MethodPrec = currentPrec;
                    }
                }
            }

            TriState byteOrderMask = ParseYesNoAttribute(2, "byte-order-mark");
            if (byteOrderMask != TriState.Unknown) ReportNYI("xsl:output/@byte-order-mark");

            if (_input.MoveToXsltAttribute(3, "cdata-section-elements"))
            {
                // Do not check the import precedence, the effective value is the union of all specified values
                _compiler.EnterForwardsCompatible();
                string[] qnames = XmlConvert.SplitString(_input.Value);
                List<XmlQualifiedName> list = new List<XmlQualifiedName>();
                for (int i = 0; i < qnames.Length; i++)
                {
                    list.Add(ResolveQName(/*ignoreDefaultNs:*/false, qnames[i]));
                }
                if (_compiler.ExitForwardsCompatible(_input.ForwardCompatibility))
                {
                    settings.CDataSectionElements.AddRange(list);
                }
            }

            if (_input.MoveToXsltAttribute(4, "doctype-public"))
            {
                if (output.DocTypePublicPrec <= currentPrec)
                {
                    if (currentPrec == output.DocTypePublicPrec && settings.DocTypePublic != _input.Value)
                    {
                        ReportWarning(/*[XT1560]*/SR.Xslt_AttributeRedefinition, "doctype-public");
                    }
                    settings.DocTypePublic = _input.Value;
                    output.DocTypePublicPrec = currentPrec;
                }
            }

            if (_input.MoveToXsltAttribute(5, "doctype-system"))
            {
                if (output.DocTypeSystemPrec <= currentPrec)
                {
                    if (currentPrec == output.DocTypeSystemPrec && settings.DocTypeSystem != _input.Value)
                    {
                        ReportWarning(/*[XT1560]*/SR.Xslt_AttributeRedefinition, "doctype-system");
                    }
                    settings.DocTypeSystem = _input.Value;
                    output.DocTypeSystemPrec = currentPrec;
                }
            }

            if (_input.MoveToXsltAttribute(6, "encoding"))
            {
                if (output.EncodingPrec <= currentPrec)
                {
                    try
                    {
                        // Encoding.GetEncoding() should never throw NotSupportedException, only ArgumentException
                        Encoding encoding = Encoding.GetEncoding(_input.Value);
                        if (currentPrec == output.EncodingPrec && output.Encoding != _input.Value)
                        {
                            ReportWarning(/*[XT1560]*/SR.Xslt_AttributeRedefinition, "encoding");
                        }
                        settings.Encoding = encoding;
                        output.Encoding = _input.Value;
                        output.EncodingPrec = currentPrec;
                    }
                    catch (ArgumentException)
                    {
                        if (!_input.ForwardCompatibility)
                        {
                            ReportWarning(/*[XT_004]*/SR.Xslt_InvalidEncoding, _input.Value);
                        }
                    }
                }
            }

            bool escapeUriAttributes = ParseYesNoAttribute(7, "escape-uri-attributes") != TriState.False;
            if (!escapeUriAttributes) ReportNYI("xsl:output/@escape-uri-attributes == flase()");

            bool includeContentType = ParseYesNoAttribute(8, "include-content-type") != TriState.False;
            if (!includeContentType) ReportNYI("xsl:output/@include-content-type == flase()");

            triState = ParseYesNoAttribute(9, "indent");
            if (triState != TriState.Unknown)
            {
                if (output.IndentPrec <= currentPrec)
                {
                    bool indent = (triState == TriState.True);
                    if (currentPrec == output.IndentPrec && settings.Indent != indent)
                    {
                        ReportWarning(/*[XT1560]*/SR.Xslt_AttributeRedefinition, "indent");
                    }
                    settings.Indent = indent;
                    output.IndentPrec = currentPrec;
                }
            }

            if (_input.MoveToXsltAttribute(10, "media-type"))
            {
                if (output.MediaTypePrec <= currentPrec)
                {
                    if (currentPrec == output.MediaTypePrec && settings.MediaType != _input.Value)
                    {
                        ReportWarning(/*[XT1560]*/SR.Xslt_AttributeRedefinition, "media-type");
                    }
                    settings.MediaType = _input.Value;
                    output.MediaTypePrec = currentPrec;
                }
            }

            if (_input.MoveToXsltAttribute(11, "normalization-form"))
            {
                ReportNYI("xsl:output/@normalization-form");
            }

            triState = ParseYesNoAttribute(12, "omit-xml-declaration");
            if (triState != TriState.Unknown)
            {
                if (output.OmitXmlDeclarationPrec <= currentPrec)
                {
                    bool omitXmlDeclaration = (triState == TriState.True);
                    if (currentPrec == output.OmitXmlDeclarationPrec && settings.OmitXmlDeclaration != omitXmlDeclaration)
                    {
                        ReportWarning(/*[XT1560]*/SR.Xslt_AttributeRedefinition, "omit-xml-declaration");
                    }
                    settings.OmitXmlDeclaration = omitXmlDeclaration;
                    output.OmitXmlDeclarationPrec = currentPrec;
                }
            }

            triState = ParseYesNoAttribute(13, "standalone");
            if (triState != TriState.Unknown)
            {
                if (output.StandalonePrec <= currentPrec)
                {
                    XmlStandalone standalone = (triState == TriState.True) ? XmlStandalone.Yes : XmlStandalone.No;
                    if (currentPrec == output.StandalonePrec && settings.Standalone != standalone)
                    {
                        ReportWarning(/*[XT1560]*/SR.Xslt_AttributeRedefinition, "standalone");
                    }
                    settings.Standalone = standalone;
                    output.StandalonePrec = currentPrec;
                }
            }

            bool undeclarePrefixes = ParseYesNoAttribute(14, "undeclare-prefixes") == TriState.True;
            if (undeclarePrefixes) ReportNYI("xsl:output/@undeclare-prefixes == true()");

            List<QilName> useCharacterMaps = ParseUseCharacterMaps(15);
            if (useCharacterMaps.Count != 0) ReportNYI("xsl:output/@use-character-maps");

            if (_input.MoveToXsltAttribute(16, "version"))
            {
                if (output.VersionPrec <= currentPrec)
                {
                    if (currentPrec == output.VersionPrec && output.Version != _input.Value)
                    {
                        ReportWarning(/*[XT1560]*/SR.Xslt_AttributeRedefinition, "version");
                    }
                    // BUGBUG: Check that version is a valid nmtoken
                    // ignore version since we support only one version for both xml (1.0) and html (4.0)
                    output.Version = _input.Value;
                    output.VersionPrec = currentPrec;
                }
            }

            CheckNoContent();
        }