XmlNodeType node_state = XmlNodeType.None;
XmlNamespaceManager nsmanager;
int open_count;
+ bool top_level_space_ignored;
XmlNodeInfo [] elements = new XmlNodeInfo [10];
Stack new_local_namespaces = new Stack ();
ArrayList explicit_nsdecls = new ArrayList ();
XmlChar.IndexOfNonWhitespace (text) >= 0)
throw ArgumentError ("WriteWhitespace method accepts only whitespaces.");
+ bool pastTopLevelWSIgnored = top_level_space_ignored;
ShiftStateTopLevel ("Whitespace", true, false, true);
-
- writer.Write (text);
+ if (!indent || WriteState != WriteState.Prolog || pastTopLevelWSIgnored)
+ writer.Write (text);
+ top_level_space_ignored = true;
}
public override void WriteCData (string text)
CheckMixedContentState ();
break;
}
-
+ top_level_space_ignored = false;
}
void CheckMixedContentState ()
// no heading newline.
Assert.AreEqual ("<root />", sw.ToString ());
}
+
+ [Test] // surprisingly niche behavior yet caused bug #3231.
+ public void IndentAndTopLevelWhitespaces ()
+ {
+ var sw = new StringWriter ();
+ var xw = XmlWriter.Create (sw, new XmlWriterSettings () { Indent = true });
+ xw.WriteProcessingInstruction ("xml", "version='1.0'");
+ xw.WriteWhitespace ("\n");
+ xw.WriteComment ("AAA");
+ xw.WriteWhitespace ("\n");
+ xw.WriteWhitespace ("\n");
+ xw.WriteStartElement ("root");
+ xw.Close ();
+ string xml = @"<?xml version='1.0'?>
+<!--AAA-->
+
+<root />";
+ Assert.AreEqual (xml, sw.ToString ().Replace ("\r\n", "\n"), "#1");
+ }
}
}
#endif