Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Debugger / XamlWrapperReaders.cs / 1305376 / XamlWrapperReaders.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.Activities.Debugger { using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Xml.Linq; using System.Xaml; using System.Xaml.Schema; using System.Runtime; using System.Text; using System.Globalization; using System.Linq; using System.Windows.Markup; using System.Xml; using System.ComponentModel; class XamlValidatingReader { XamlReader reader; IXamlLineInfo xamlLineInfo; Stacknodes; int lastLineNumber; int lastLinePosition; XamlNode current; public XamlValidatingReader(XamlReader reader, IXamlLineInfo xamlLineInfo) { this.reader = reader; this.xamlLineInfo = xamlLineInfo; this.nodes = new Stack (); } public bool Read() { if (!this.reader.Read()) { return false; } this.current = CreateSpecializedNode(); // xamlReader surfaces 0 for LineNumber and LinePosition // when the node type is GetObject, EndObject, EndMember, and Value if (this.current.LineNumber == 0 || this.current.LinePosition == 0) { this.current.LineNumber = lastLineNumber; this.current.LinePosition = lastLinePosition; } else { lastLineNumber = this.current.LineNumber; lastLinePosition = this.current.LinePosition; } return true; } public bool EndOfInput { get { return reader.IsEof; } } public XamlNode Current { get { return this.current; } } XamlNode CreateSpecializedNode() { XamlNode node = null; switch (this.reader.NodeType) { case XamlNodeType.StartObject: node = CreateXamlStartRecordNode(); break; case XamlNodeType.GetObject: node = CreateXamlGetObjectNode(); break; case XamlNodeType.StartMember: node = CreateXamlStartMemberNode(); break; case XamlNodeType.EndMember: node = CreateXamlEndMemberNode(); break; case XamlNodeType.EndObject: node = CreateXamlEndRecordNode(); break; case XamlNodeType.Value: node = CreateXamlAtomNode(); break; case XamlNodeType.NamespaceDeclaration: node = CreateXamlNamespaceNode(); break; default: break; } return node; } XamlNode CreateXamlNamespaceNode() { XamlNamespaceNode namespaceNode = new XamlNamespaceNode() { Namespace = this.reader.Namespace, }; return namespaceNode; } XamlNode CreateXamlStartRecordNode() { XamlStartRecordNode record = new XamlStartRecordNode() { LineNumber = this.xamlLineInfo.LineNumber, LinePosition = this.xamlLineInfo.LinePosition, TypeName = XName.Get(this.reader.Type.Name, this.reader.Type.PreferredXamlNamespace), RecordType = this.reader.Type }; this.nodes.Push(record); return record; } XamlNode CreateXamlGetObjectNode() { XamlGetObjectNode node = new XamlGetObjectNode() { LineNumber = this.xamlLineInfo.LineNumber, LinePosition = this.xamlLineInfo.LinePosition }; this.nodes.Push(node); return node; } XamlNode CreateXamlStartMemberNode() { XamlStartMemberNode member = new XamlStartMemberNode() { LinePosition = this.xamlLineInfo.LinePosition, LineNumber = this.xamlLineInfo.LineNumber, RecordType = this.reader.Member.Type, Member = this.reader.Member }; this.nodes.Push(member); return member; } XamlNode CreateXamlEndRecordNode() { XamlNode node = this.nodes.Pop(); XamlStartRecordNode startRecord = node as XamlStartRecordNode; //startRecord might be null because node might be XamlGetObjectNode XamlEndRecordNode endRecord = new XamlEndRecordNode() { LineNumber = this.xamlLineInfo.LineNumber, LinePosition = this.xamlLineInfo.LinePosition, TypeName = startRecord != null ? startRecord.TypeName : null, RecordType = startRecord != null ? startRecord.RecordType : null }; return endRecord; } XamlNode CreateXamlEndMemberNode() { XamlStartMemberNode startMember = (XamlStartMemberNode)this.nodes.Pop(); XamlEndMemberNode endMember = new XamlEndMemberNode() { LinePosition = this.xamlLineInfo.LinePosition, LineNumber = this.xamlLineInfo.LineNumber, RecordType = startMember.RecordType, Member = startMember.Member }; return endMember; } XamlNode CreateXamlAtomNode() { XamlAtomNode atom = new XamlAtomNode() { LineNumber = this.xamlLineInfo.LineNumber, LinePosition = this.xamlLineInfo.LinePosition, Value = this.reader.Value }; return atom; } } abstract class XamlNode : IXmlLineInfo { protected XamlNode() { LineNumber = 0; LinePosition = 0; } public abstract XamlNodeType NodeType { get; } public Uri BaseUri { get; set; } public string XmlLang { get; set; } public int LineNumber { get; set; } public int LinePosition { get; set; } [Fx.Tag.NonThrowing] public bool HasLineInfo() { return LineNumber != -1 && LinePosition != -1; } } class XamlNamespaceNode : XamlNode { public XamlNamespaceNode() { } public XamlNamespaceNode(NamespaceDeclaration @namespace) { this.Namespace = @namespace; } public NamespaceDeclaration Namespace { get; set; } public sealed override XamlNodeType NodeType { get { return XamlNodeType.NamespaceDeclaration; } } } class XamlStartRecordNode : XamlNode { public XamlStartRecordNode() { } public sealed override XamlNodeType NodeType { get { return XamlNodeType.StartObject; } } public XName TypeName { get; set; } public override string ToString() { string typeNameString = this.TypeName != null ? this.TypeName.ToString() : String.Empty; return string.Format(CultureInfo.CurrentCulture, "{0}:{1}", this.NodeType, typeNameString); } public XamlType RecordType { get; set; } } class XamlGetObjectNode : XamlNode { public XamlGetObjectNode() { } public sealed override XamlNodeType NodeType { get { return XamlNodeType.GetObject; } } } class XamlAtomNode : XamlNode { public XamlAtomNode() { } public sealed override XamlNodeType NodeType { get { return XamlNodeType.Value; } } public virtual object Value { get; set; } public override string ToString() { object value = Value ?? String.Empty; return string.Format(CultureInfo.CurrentCulture, "{0}:{1}", this.NodeType, value.ToString()); } } class XamlEndMemberNode : XamlNode { public XamlEndMemberNode() { } public sealed override XamlNodeType NodeType { get { return XamlNodeType.EndMember; } } public override string ToString() { string memberIdentifierString = this.Member != null ? this.Member.ToString() : String.Empty; return string.Format(CultureInfo.CurrentCulture, "{0}:{1}", this.NodeType, memberIdentifierString); } public XamlType RecordType { get; set; } public XamlMember Member { get; set; } } class XamlEndRecordNode : XamlNode { public XamlEndRecordNode() { } public sealed override XamlNodeType NodeType { get { return XamlNodeType.EndObject; } } public XName TypeName { get; set; } public override string ToString() { string typeNameString = this.TypeName != null ? this.TypeName.ToString() : String.Empty; return string.Format(CultureInfo.CurrentCulture, "{0}:{1}", this.NodeType, typeNameString); } public XamlType RecordType { get; set; } } class XamlStartMemberNode : XamlNode { public XamlStartMemberNode() { } public sealed override XamlNodeType NodeType { get { return XamlNodeType.StartMember; } } public override string ToString() { string memberIdentifierString = this.Member != null ? this.Member.ToString() : String.Empty; return string.Format(CultureInfo.CurrentCulture, "{0}:{1}", this.NodeType, memberIdentifierString); } public XamlType RecordType { get; set; } public XamlMember Member { get; set; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- QilStrConcat.cs
- Rotation3DAnimationBase.cs
- ReturnType.cs
- CheckBox.cs
- FieldTemplateUserControl.cs
- TailPinnedEventArgs.cs
- DockPanel.cs
- DesignerCapabilities.cs
- SqlMultiplexer.cs
- ReflectionHelper.cs
- HandleCollector.cs
- OracleCommand.cs
- InnerItemCollectionView.cs
- GridViewPageEventArgs.cs
- AsyncOperation.cs
- SingleAnimationBase.cs
- FlowDocumentScrollViewer.cs
- MultiAsyncResult.cs
- Debug.cs
- ChildChangedEventArgs.cs
- MediaElement.cs
- DataServiceOperationContext.cs
- DesignerVerbToolStripMenuItem.cs
- HtmlLink.cs
- BitmapEffectGroup.cs
- FixedPageAutomationPeer.cs
- WindowsStartMenu.cs
- ObjectDisposedException.cs
- XmlWriterTraceListener.cs
- SystemGatewayIPAddressInformation.cs
- Compiler.cs
- SynchronizationContext.cs
- SiteMapPath.cs
- cookiecollection.cs
- ObjectViewEntityCollectionData.cs
- TextBlock.cs
- GuidTagList.cs
- CheckBoxStandardAdapter.cs
- AsymmetricKeyExchangeDeformatter.cs
- AddInToken.cs
- ListViewDeleteEventArgs.cs
- SqlDeflator.cs
- KeyValueConfigurationElement.cs
- XPathBinder.cs
- PixelShader.cs
- UnauthorizedAccessException.cs
- BaseCollection.cs
- SqlInternalConnection.cs
- DataGridAddNewRow.cs
- TextBox.cs
- CodeObject.cs
- SHA384CryptoServiceProvider.cs
- ControlValuePropertyAttribute.cs
- XmlNavigatorFilter.cs
- DataGrid.cs
- newitemfactory.cs
- GridViewCommandEventArgs.cs
- EntityDataSourceEntityTypeFilterConverter.cs
- InputQueue.cs
- InternalConfigRoot.cs
- GradientStop.cs
- SchemaNotation.cs
- AuthenticateEventArgs.cs
- ListSortDescription.cs
- SerializableAttribute.cs
- Component.cs
- WCFServiceClientProxyGenerator.cs
- ZoneIdentityPermission.cs
- CodeDOMProvider.cs
- BindingEntityInfo.cs
- ExtentKey.cs
- AuthorizationContext.cs
- ParallelActivityDesigner.cs
- KeyManager.cs
- _emptywebproxy.cs
- WindowsScrollBarBits.cs
- StorageInfo.cs
- SqlWebEventProvider.cs
- SaveWorkflowAsyncResult.cs
- ByteAnimationUsingKeyFrames.cs
- StackBuilderSink.cs
- DetailsViewActionList.cs
- XmlSchemaType.cs
- ThreadAttributes.cs
- DesignerHost.cs
- TypeToken.cs
- CurrentTimeZone.cs
- Vertex.cs
- Table.cs
- DesignBindingValueUIHandler.cs
- CompositeDataBoundControl.cs
- ServiceHostFactory.cs
- SingleStorage.cs
- TemporaryBitmapFile.cs
- oledbmetadatacollectionnames.cs
- DataRow.cs
- NameObjectCollectionBase.cs
- HitTestDrawingContextWalker.cs
- AvTraceFormat.cs
- DbConnectionPoolGroupProviderInfo.cs