2 // Copyright (c) Microsoft Corporation. All rights reserved.
5 namespace Microsoft.Activities.Presentation.Xaml
10 internal static class XamlWriterExtensions
12 public static void PropagateLineInfo(XamlWriter targetWriter, IXamlLineInfo lineInfo)
16 IXamlLineInfoConsumer consumer = targetWriter as IXamlLineInfoConsumer;
17 SharedFx.Assert(consumer != null && consumer.ShouldProvideLineInfo, "Should only call this function to write into a XamlNodeQueue.Writer, which is always IXamlLineInfoConsumer");
18 consumer.SetLineInfo(lineInfo.LineNumber, lineInfo.LinePosition);
22 public static void PropagateLineInfo(XamlWriter targetWriter, int lineNumber, int linePosition)
24 IXamlLineInfoConsumer consumer = targetWriter as IXamlLineInfoConsumer;
25 SharedFx.Assert(consumer != null && consumer.ShouldProvideLineInfo, "Should only call this function to write into a XamlNodeQueue.Writer, which is always IXamlLineInfoConsumer");
26 consumer.SetLineInfo(lineNumber, linePosition);
29 // This method is a workaround for TFS bug #788190, since XamlReader.ReadSubtree() should (but doesn't) preserve IXamlLineInfo on the subreader
30 public static void Transform(XamlReader reader, XamlWriter writer, IXamlLineInfo readerLineInfo, bool closeWriter)
32 IXamlLineInfoConsumer consumer = writer as IXamlLineInfoConsumer;
33 SharedFx.Assert(consumer != null && consumer.ShouldProvideLineInfo, "Should only call this function to write into a XamlNodeQueue.Writer, which is always IXamlLineInfoConsumer");
34 bool shouldPassLineNumberInfo = false;
35 if (readerLineInfo != null)
37 shouldPassLineNumberInfo = true;
42 if (shouldPassLineNumberInfo)
44 consumer.SetLineInfo(readerLineInfo.LineNumber, readerLineInfo.LinePosition);
47 writer.WriteNode(reader);
56 public static void WriteNode(this XamlWriter writer, XamlReader reader, IXamlLineInfo lineInfo)
58 PropagateLineInfo(writer, lineInfo);
59 writer.WriteNode(reader);
62 public static void WriteEndMember(this XamlWriter writer, IXamlLineInfo lineInfo)
64 PropagateLineInfo(writer, lineInfo);
65 writer.WriteEndMember();
68 public static void WriteEndObject(this XamlWriter writer, IXamlLineInfo lineInfo)
70 PropagateLineInfo(writer, lineInfo);
71 writer.WriteEndObject();
74 public static void WriteGetObject(this XamlWriter writer, IXamlLineInfo lineInfo)
76 PropagateLineInfo(writer, lineInfo);
77 writer.WriteGetObject();
80 public static void WriteNamespace(this XamlWriter writer, NamespaceDeclaration namespaceDeclaration, IXamlLineInfo lineInfo)
82 PropagateLineInfo(writer, lineInfo);
83 writer.WriteNamespace(namespaceDeclaration);
86 public static void WriteStartMember(this XamlWriter writer, XamlMember xamlMember, IXamlLineInfo lineInfo)
88 PropagateLineInfo(writer, lineInfo);
89 writer.WriteStartMember(xamlMember);
92 public static void WriteStartMember(this XamlWriter writer, XamlMember xamlMember, int lineNumber, int linePosition)
94 PropagateLineInfo(writer, lineNumber, linePosition);
95 writer.WriteStartMember(xamlMember);
98 public static void WriteStartObject(this XamlWriter writer, XamlType type, IXamlLineInfo lineInfo)
100 PropagateLineInfo(writer, lineInfo);
101 writer.WriteStartObject(type);
104 public static void WriteValue(this XamlWriter writer, object value, IXamlLineInfo lineInfo)
106 PropagateLineInfo(writer, lineInfo);
107 writer.WriteValue(value);