Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Globalization / BamlResourceSerializer.cs / 1305600 / BamlResourceSerializer.cs
//--------------------------------------------------------
// Class that implements BamlResourceSerializer
//
// Created: Garyyang @ 12/1/2003
//
//-------------------------------------------------------
using System;
using System.IO;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Markup;
using System.Windows.Markup.Localizer;
using System.Diagnostics;
using System.Text;
using System.Windows;
namespace MS.Internal.Globalization
{
///
/// BamlResourceSerializer
///
internal sealed class BamlResourceSerializer
{
//-------------------------------
// Internal static
//-------------------------------
internal static void Serialize(BamlLocalizer localizer, BamlTree tree, Stream output)
{
// Thread safe implementation
(new BamlResourceSerializer()).SerializeImp(localizer, tree, output);
}
//----------------------------------
// constructor.
//----------------------------------
///
/// constructor
///
private BamlResourceSerializer()
{
}
//----------------------------------
// private method
//----------------------------------
///
/// Serialize the tree out to the stream.
///
private void SerializeImp(
BamlLocalizer localizer,
BamlTree tree,
Stream output
)
{
Debug.Assert(output != null, "The output stream given is null");
Debug.Assert(tree != null && tree.Root != null, "The tree to be serialized is null.");
_writer = new BamlWriter(output);
_bamlTreeStack = new Stack();
// intialize the stack.
_bamlTreeStack.Push(tree.Root);
while (_bamlTreeStack.Count > 0)
{
BamlTreeNode currentNode = _bamlTreeStack.Pop();
if (!currentNode.Visited)
{
// Mark this node so that it won't be serialized again.
currentNode.Visited = true;
currentNode.Serialize(_writer);
PushChildrenToStack(currentNode.Children);
}
else
{
BamlStartElementNode elementNode = currentNode as BamlStartElementNode;
Debug.Assert(elementNode != null);
if (elementNode != null)
{
localizer.RaiseErrorNotifyEvent(
new BamlLocalizerErrorNotifyEventArgs(
BamlTreeMap.GetKey(elementNode),
BamlLocalizerError.DuplicateElement
)
);
}
}
}
// do not close stream as we don't own it.
}
private void PushChildrenToStack(List children)
{
if (children == null)
return;
for (int i = children.Count - 1; i >= 0; i--)
{
_bamlTreeStack.Push(children[i]);
}
}
//---------------------------------
// private
//---------------------------------
private BamlWriter _writer;
private Stack _bamlTreeStack;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//--------------------------------------------------------
// Class that implements BamlResourceSerializer
//
// Created: Garyyang @ 12/1/2003
//
//-------------------------------------------------------
using System;
using System.IO;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Markup;
using System.Windows.Markup.Localizer;
using System.Diagnostics;
using System.Text;
using System.Windows;
namespace MS.Internal.Globalization
{
///
/// BamlResourceSerializer
///
internal sealed class BamlResourceSerializer
{
//-------------------------------
// Internal static
//-------------------------------
internal static void Serialize(BamlLocalizer localizer, BamlTree tree, Stream output)
{
// Thread safe implementation
(new BamlResourceSerializer()).SerializeImp(localizer, tree, output);
}
//----------------------------------
// constructor.
//----------------------------------
///
/// constructor
///
private BamlResourceSerializer()
{
}
//----------------------------------
// private method
//----------------------------------
///
/// Serialize the tree out to the stream.
///
private void SerializeImp(
BamlLocalizer localizer,
BamlTree tree,
Stream output
)
{
Debug.Assert(output != null, "The output stream given is null");
Debug.Assert(tree != null && tree.Root != null, "The tree to be serialized is null.");
_writer = new BamlWriter(output);
_bamlTreeStack = new Stack();
// intialize the stack.
_bamlTreeStack.Push(tree.Root);
while (_bamlTreeStack.Count > 0)
{
BamlTreeNode currentNode = _bamlTreeStack.Pop();
if (!currentNode.Visited)
{
// Mark this node so that it won't be serialized again.
currentNode.Visited = true;
currentNode.Serialize(_writer);
PushChildrenToStack(currentNode.Children);
}
else
{
BamlStartElementNode elementNode = currentNode as BamlStartElementNode;
Debug.Assert(elementNode != null);
if (elementNode != null)
{
localizer.RaiseErrorNotifyEvent(
new BamlLocalizerErrorNotifyEventArgs(
BamlTreeMap.GetKey(elementNode),
BamlLocalizerError.DuplicateElement
)
);
}
}
}
// do not close stream as we don't own it.
}
private void PushChildrenToStack(List children)
{
if (children == null)
return;
for (int i = children.Count - 1; i >= 0; i--)
{
_bamlTreeStack.Push(children[i]);
}
}
//---------------------------------
// private
//---------------------------------
private BamlWriter _writer;
private Stack _bamlTreeStack;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WmlCommandAdapter.cs
- ExtensionFile.cs
- ClientScriptManager.cs
- InvalidPrinterException.cs
- XmlElementAttributes.cs
- NotifyInputEventArgs.cs
- TogglePattern.cs
- TypeConverterValueSerializer.cs
- QueueProcessor.cs
- FormCollection.cs
- XsltOutput.cs
- XmlParserContext.cs
- IncrementalHitTester.cs
- InstancePersistenceEvent.cs
- CompoundFileStreamReference.cs
- Application.cs
- ObjectConverter.cs
- UnsafeNativeMethods.cs
- ConnectionsZone.cs
- EventLogPermissionEntryCollection.cs
- XamlClipboardData.cs
- SafeRightsManagementPubHandle.cs
- UnknownBitmapDecoder.cs
- SqlMethodCallConverter.cs
- OleDbSchemaGuid.cs
- XmlSchemaObjectTable.cs
- ManagedIStream.cs
- SqlUtils.cs
- NavigationWindow.cs
- recordstatefactory.cs
- AddressingVersion.cs
- Mapping.cs
- StatusCommandUI.cs
- DbConnectionPoolCounters.cs
- ObjectDataSourceDisposingEventArgs.cs
- ResourceReader.cs
- PersonalizationEntry.cs
- formatter.cs
- FileIOPermission.cs
- PropertyAccessVisitor.cs
- DependencyPropertyChangedEventArgs.cs
- LogicalTreeHelper.cs
- HttpResponseBase.cs
- UIPropertyMetadata.cs
- ServiceModelTimeSpanValidator.cs
- ConfigurationPermission.cs
- InvalidPropValue.cs
- IgnoreFileBuildProvider.cs
- CachedRequestParams.cs
- MetadataArtifactLoaderResource.cs
- XPathNodeHelper.cs
- PersonalizationStateInfo.cs
- InfoCardArgumentException.cs
- FullTextBreakpoint.cs
- Timer.cs
- AsymmetricSignatureDeformatter.cs
- XPathSelectionIterator.cs
- NamedPipeAppDomainProtocolHandler.cs
- InputScopeNameConverter.cs
- ZoneMembershipCondition.cs
- CustomError.cs
- KeyGestureValueSerializer.cs
- SlotInfo.cs
- SystemThemeKey.cs
- XPathNodePointer.cs
- ClientUrlResolverWrapper.cs
- PrintPreviewControl.cs
- RemotingException.cs
- ScrollPattern.cs
- RequestQueryProcessor.cs
- KoreanCalendar.cs
- Configuration.cs
- Helpers.cs
- ParallelTimeline.cs
- MatrixUtil.cs
- updatecommandorderer.cs
- URL.cs
- Panel.cs
- ImageProxy.cs
- AvTraceDetails.cs
- AnnotationComponentManager.cs
- ParameterToken.cs
- Connector.xaml.cs
- ComAdminWrapper.cs
- FontStyle.cs
- ContextMenuService.cs
- GroupPartitionExpr.cs
- SectionInput.cs
- sqlinternaltransaction.cs
- CapabilitiesPattern.cs
- Update.cs
- ConstructorArgumentAttribute.cs
- Utils.cs
- DocumentReferenceCollection.cs
- CounterSampleCalculator.cs
- RelatedEnd.cs
- SqlDependencyListener.cs
- Timer.cs
- ProviderException.cs
- TreeNode.cs