private static XmlWriter CreateWriterImpl(TextWriter output, XmlWriterSettings settings) {
Debug.Assert(output != null);
Debug.Assert(settings != null);
XmlWriter writer;
switch (settings.OutputMethod) {
case XmlOutputMethod.Xml:
if (settings.Indent) {
writer = new XmlEncodedRawTextWriterIndent(output, settings);
}
else {
writer = new XmlEncodedRawTextWriter(output, settings);
}
break;
case XmlOutputMethod.Html:
if (settings.Indent) {
writer = new HtmlEncodedRawTextWriterIndent(output, settings);
}
else {
writer = new HtmlEncodedRawTextWriter(output, settings);
}
break;
case XmlOutputMethod.Text:
writer = new TextEncodedRawTextWriter(output, settings);
break;
case XmlOutputMethod.AutoDetect:
writer = new XmlAutoDetectWriter(output, settings);
break;
default:
Debug.Assert(false, "Invalid XmlOutputMethod setting.");
return null;
}
// Wrap with Xslt/XQuery specific writer if needed;
// XmlOutputMethod.AutoDetect writer does this lazily when it creates the underlying Xml or Html writer.
if (settings.OutputMethod != XmlOutputMethod.AutoDetect) {
if (settings.IsQuerySpecific) {
// Create QueryOutputWriter if CData sections or DocType need to be tracked
writer = new QueryOutputWriter((XmlRawWriter)writer, settings);
}
}
writer = new XmlWellFormedWriter(writer, settings);
return writer;
}