Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / Xaml / DesignTimeXamlWriter.cs / 1305376 / DesignTimeXamlWriter.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation.Xaml { using System.Collections.Generic; using System.Globalization; using System.IO; using System.Xaml; using System.Xml; class DesignTimeXamlWriter : XamlXmlWriter { //namespaces to ignore (don't load assembilies for) at root node HashSetnamespacesToIgnore; //namespaces we've seen at root level, we use this to figure out appropriate alias for MC namespace HashSet rootLevelNamespaces; // for duplicate namespace filtering (happens if we're using the local assembly to compile itself) HashSet emittedNamespacesInLocalAssembly; //For namespace defined in local assembly with assembly info in namespace declaration, we'll strip out the assembly info //and hold the namespace temporarily. Before writing the start object, we'll check whether the short version gets written //as a separate declaration, if not, we write it out. List localNamespacesWithAssemblyInfo; bool hasWrittenObject; WorkflowDesignerXamlSchemaContext schemaContext; public DesignTimeXamlWriter(TextWriter textWriter, WorkflowDesignerXamlSchemaContext context) : base(XmlWriter.Create(textWriter, new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true }), context, // Setting AssumeValidInput to true allows to save a document even if it has duplicate members new XamlXmlWriterSettings { AssumeValidInput = true }) { this.namespacesToIgnore = new HashSet (); this.rootLevelNamespaces = new HashSet (); this.schemaContext = context; } public override void WriteNamespace(NamespaceDeclaration namespaceDeclaration) { if (!this.hasWrittenObject) { //we need to track every namespace alias appeared in root element to figure out right alias for MC namespace this.rootLevelNamespaces.Add(namespaceDeclaration.Prefix); //Remember namespaces needed to be ignored at top level so we will add ignore attribute for them when we write start object if (NameSpaces.ShouldIgnore(namespaceDeclaration.Namespace)) { this.namespacesToIgnore.Add(namespaceDeclaration.Prefix); } } EmitNamespace(namespaceDeclaration); } void EmitNamespace(NamespaceDeclaration namespaceDeclaration) { // Write the namespace, filtering for duplicates in the local assembly because VS might be using it to compile itself. if (schemaContext.IsClrNamespaceWithNoAssembly(namespaceDeclaration.Namespace)) { // Might still need to trim a semicolon, even though it shouldn't strictly be there. string nonassemblyQualifedNamespace = namespaceDeclaration.Namespace; if (nonassemblyQualifedNamespace[nonassemblyQualifedNamespace.Length - 1] == ';') { nonassemblyQualifedNamespace = nonassemblyQualifedNamespace.Substring(0, nonassemblyQualifedNamespace.Length - 1); namespaceDeclaration = new NamespaceDeclaration(nonassemblyQualifedNamespace, namespaceDeclaration.Prefix); } EmitLocalNamespace(namespaceDeclaration); } else if (schemaContext.IsClrNamespaceInLocalAssembly(namespaceDeclaration.Namespace)) { string nonassemblyQualifedNamespace = schemaContext.TrimLocalAssembly(namespaceDeclaration.Namespace); namespaceDeclaration = new NamespaceDeclaration(nonassemblyQualifedNamespace, namespaceDeclaration.Prefix); if (this.localNamespacesWithAssemblyInfo == null) { this.localNamespacesWithAssemblyInfo = new List (); } this.localNamespacesWithAssemblyInfo.Add(namespaceDeclaration); } else { base.WriteNamespace(namespaceDeclaration); } } void EmitLocalNamespace(NamespaceDeclaration namespaceDeclaration) { if (this.emittedNamespacesInLocalAssembly == null) // lazy initialization { this.emittedNamespacesInLocalAssembly = new HashSet (); } // Write the namespace only once. Add() returns false if it was already there. if (this.emittedNamespacesInLocalAssembly.Add(namespaceDeclaration.Namespace)) { base.WriteNamespace(namespaceDeclaration); } } public override void WriteStartObject(XamlType type) { // this is the top-level object if (!this.hasWrittenObject) { // we need to write MC namespace if any namespaces need to be ignored if (this.namespacesToIgnore.Count > 0) { string mcNamespaceAlias = GenerateNamespaceAlias(NameSpaces.McPrefix); this.WriteNamespace(new NamespaceDeclaration(NameSpaces.Mc, mcNamespaceAlias)); } if (this.localNamespacesWithAssemblyInfo != null) { foreach (NamespaceDeclaration xamlNamespace in this.localNamespacesWithAssemblyInfo) { if ((this.emittedNamespacesInLocalAssembly == null) || (!this.emittedNamespacesInLocalAssembly.Contains(xamlNamespace.Namespace))) { base.WriteNamespace(xamlNamespace); } } } } base.WriteStartObject(type); if (!this.hasWrittenObject) { // we need to add Ignore attribute for all namespaces which we don't want to load assemblies for // this has to be done after WriteStartObject if (this.namespacesToIgnore.Count > 0) { foreach (string ns in this.namespacesToIgnore) { XamlDirective ignorable = new XamlDirective(NameSpaces.Mc, "Ignorable"); base.WriteStartMember(ignorable); base.WriteValue(ns); base.WriteEndMember(); } this.namespacesToIgnore.Clear(); } this.hasWrittenObject = true; } } string GenerateNamespaceAlias(string prefix) { string aliasPostfix = string.Empty; //try "mc"~"mc1000" first for (int i = 1; i <= 1000; i++) { string mcAlias = prefix + aliasPostfix; if (!this.rootLevelNamespaces.Contains(mcAlias)) { return mcAlias; } aliasPostfix = i.ToString(CultureInfo.InvariantCulture); } //roll the dice return prefix + Guid.NewGuid().ToString(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation.Xaml { using System.Collections.Generic; using System.Globalization; using System.IO; using System.Xaml; using System.Xml; class DesignTimeXamlWriter : XamlXmlWriter { //namespaces to ignore (don't load assembilies for) at root node HashSet namespacesToIgnore; //namespaces we've seen at root level, we use this to figure out appropriate alias for MC namespace HashSet rootLevelNamespaces; // for duplicate namespace filtering (happens if we're using the local assembly to compile itself) HashSet emittedNamespacesInLocalAssembly; //For namespace defined in local assembly with assembly info in namespace declaration, we'll strip out the assembly info //and hold the namespace temporarily. Before writing the start object, we'll check whether the short version gets written //as a separate declaration, if not, we write it out. List localNamespacesWithAssemblyInfo; bool hasWrittenObject; WorkflowDesignerXamlSchemaContext schemaContext; public DesignTimeXamlWriter(TextWriter textWriter, WorkflowDesignerXamlSchemaContext context) : base(XmlWriter.Create(textWriter, new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true }), context, // Setting AssumeValidInput to true allows to save a document even if it has duplicate members new XamlXmlWriterSettings { AssumeValidInput = true }) { this.namespacesToIgnore = new HashSet (); this.rootLevelNamespaces = new HashSet (); this.schemaContext = context; } public override void WriteNamespace(NamespaceDeclaration namespaceDeclaration) { if (!this.hasWrittenObject) { //we need to track every namespace alias appeared in root element to figure out right alias for MC namespace this.rootLevelNamespaces.Add(namespaceDeclaration.Prefix); //Remember namespaces needed to be ignored at top level so we will add ignore attribute for them when we write start object if (NameSpaces.ShouldIgnore(namespaceDeclaration.Namespace)) { this.namespacesToIgnore.Add(namespaceDeclaration.Prefix); } } EmitNamespace(namespaceDeclaration); } void EmitNamespace(NamespaceDeclaration namespaceDeclaration) { // Write the namespace, filtering for duplicates in the local assembly because VS might be using it to compile itself. if (schemaContext.IsClrNamespaceWithNoAssembly(namespaceDeclaration.Namespace)) { // Might still need to trim a semicolon, even though it shouldn't strictly be there. string nonassemblyQualifedNamespace = namespaceDeclaration.Namespace; if (nonassemblyQualifedNamespace[nonassemblyQualifedNamespace.Length - 1] == ';') { nonassemblyQualifedNamespace = nonassemblyQualifedNamespace.Substring(0, nonassemblyQualifedNamespace.Length - 1); namespaceDeclaration = new NamespaceDeclaration(nonassemblyQualifedNamespace, namespaceDeclaration.Prefix); } EmitLocalNamespace(namespaceDeclaration); } else if (schemaContext.IsClrNamespaceInLocalAssembly(namespaceDeclaration.Namespace)) { string nonassemblyQualifedNamespace = schemaContext.TrimLocalAssembly(namespaceDeclaration.Namespace); namespaceDeclaration = new NamespaceDeclaration(nonassemblyQualifedNamespace, namespaceDeclaration.Prefix); if (this.localNamespacesWithAssemblyInfo == null) { this.localNamespacesWithAssemblyInfo = new List (); } this.localNamespacesWithAssemblyInfo.Add(namespaceDeclaration); } else { base.WriteNamespace(namespaceDeclaration); } } void EmitLocalNamespace(NamespaceDeclaration namespaceDeclaration) { if (this.emittedNamespacesInLocalAssembly == null) // lazy initialization { this.emittedNamespacesInLocalAssembly = new HashSet (); } // Write the namespace only once. Add() returns false if it was already there. if (this.emittedNamespacesInLocalAssembly.Add(namespaceDeclaration.Namespace)) { base.WriteNamespace(namespaceDeclaration); } } public override void WriteStartObject(XamlType type) { // this is the top-level object if (!this.hasWrittenObject) { // we need to write MC namespace if any namespaces need to be ignored if (this.namespacesToIgnore.Count > 0) { string mcNamespaceAlias = GenerateNamespaceAlias(NameSpaces.McPrefix); this.WriteNamespace(new NamespaceDeclaration(NameSpaces.Mc, mcNamespaceAlias)); } if (this.localNamespacesWithAssemblyInfo != null) { foreach (NamespaceDeclaration xamlNamespace in this.localNamespacesWithAssemblyInfo) { if ((this.emittedNamespacesInLocalAssembly == null) || (!this.emittedNamespacesInLocalAssembly.Contains(xamlNamespace.Namespace))) { base.WriteNamespace(xamlNamespace); } } } } base.WriteStartObject(type); if (!this.hasWrittenObject) { // we need to add Ignore attribute for all namespaces which we don't want to load assemblies for // this has to be done after WriteStartObject if (this.namespacesToIgnore.Count > 0) { foreach (string ns in this.namespacesToIgnore) { XamlDirective ignorable = new XamlDirective(NameSpaces.Mc, "Ignorable"); base.WriteStartMember(ignorable); base.WriteValue(ns); base.WriteEndMember(); } this.namespacesToIgnore.Clear(); } this.hasWrittenObject = true; } } string GenerateNamespaceAlias(string prefix) { string aliasPostfix = string.Empty; //try "mc"~"mc1000" first for (int i = 1; i <= 1000; i++) { string mcAlias = prefix + aliasPostfix; if (!this.rootLevelNamespaces.Contains(mcAlias)) { return mcAlias; } aliasPostfix = i.ToString(CultureInfo.InvariantCulture); } //roll the dice return prefix + Guid.NewGuid().ToString(); } } } // 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
- StorageScalarPropertyMapping.cs
- HwndMouseInputProvider.cs
- IListConverters.cs
- ChannelAcceptor.cs
- ForAllOperator.cs
- DiscoveryClientOutputChannel.cs
- DeploymentSectionCache.cs
- SHA512Managed.cs
- LoginCancelEventArgs.cs
- ShapeTypeface.cs
- InterleavedZipPartStream.cs
- UniqueIdentifierService.cs
- DataSourceUtil.cs
- RowVisual.cs
- OleDbWrapper.cs
- XmlSerializerAssemblyAttribute.cs
- RoleGroup.cs
- ClrProviderManifest.cs
- CompilationPass2Task.cs
- HttpStreamMessageEncoderFactory.cs
- URLMembershipCondition.cs
- ActivityStateRecord.cs
- XamlFigureLengthSerializer.cs
- ImageFormat.cs
- ConstructorBuilder.cs
- TreeIterator.cs
- CatalogZone.cs
- JournalNavigationScope.cs
- KeyedHashAlgorithm.cs
- PackagingUtilities.cs
- PropertyNames.cs
- AuthenticationManager.cs
- PointValueSerializer.cs
- SqlFunctionAttribute.cs
- SignalGate.cs
- ToolBarButtonClickEvent.cs
- BlobPersonalizationState.cs
- StackBuilderSink.cs
- TemplatedControlDesigner.cs
- ReferentialConstraint.cs
- CreateUserErrorEventArgs.cs
- MatrixTransform.cs
- XslTransform.cs
- CheckBoxBaseAdapter.cs
- PerfService.cs
- ImageConverter.cs
- TabPanel.cs
- EdmToObjectNamespaceMap.cs
- PixelFormatConverter.cs
- ClickablePoint.cs
- XmlSerializerFactory.cs
- CodeAssignStatement.cs
- ExpandableObjectConverter.cs
- PartialArray.cs
- SourceFileInfo.cs
- AnnotationResource.cs
- _UriTypeConverter.cs
- UnsafeNativeMethods.cs
- WebServiceEnumData.cs
- TemplateControlCodeDomTreeGenerator.cs
- DynamicArgumentDesigner.xaml.cs
- RevocationPoint.cs
- NavigationHelper.cs
- OdbcRowUpdatingEvent.cs
- TraversalRequest.cs
- XmlSchemaSimpleTypeRestriction.cs
- IisTraceListener.cs
- Repeater.cs
- HttpCapabilitiesEvaluator.cs
- GridViewAutomationPeer.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- DataGridViewCellStyle.cs
- RuleInfoComparer.cs
- PreProcessInputEventArgs.cs
- SimpleLine.cs
- xdrvalidator.cs
- DisplayNameAttribute.cs
- SqlNotificationRequest.cs
- ObjectDataSourceFilteringEventArgs.cs
- FileDataSourceCache.cs
- Enumerable.cs
- SystemNetworkInterface.cs
- TableRowCollection.cs
- XamlWriter.cs
- UTF7Encoding.cs
- Variable.cs
- SqlCommandSet.cs
- IconHelper.cs
- MinimizableAttributeTypeConverter.cs
- ToolbarAUtomationPeer.cs
- PixelShader.cs
- AuthenticatingEventArgs.cs
- RSAPKCS1SignatureDeformatter.cs
- XmlNode.cs
- MailMessage.cs
- FixedPosition.cs
- ToolStripDropDownClosingEventArgs.cs
- Vector3DCollectionValueSerializer.cs
- WebColorConverter.cs
- PropertyTabAttribute.cs