Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / MS / Internal / Globalization / BamlResourceSerializer.cs / 1 / 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
- Image.cs
- COSERVERINFO.cs
- WebPartCancelEventArgs.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- InternalPermissions.cs
- SamlSerializer.cs
- webclient.cs
- ButtonBase.cs
- Clock.cs
- SmiXetterAccessMap.cs
- HtmlForm.cs
- MethodImplAttribute.cs
- StaticExtension.cs
- Nodes.cs
- OSFeature.cs
- OleDbException.cs
- DataBoundControl.cs
- BaseAsyncResult.cs
- NTAccount.cs
- HttpGetClientProtocol.cs
- IisTraceWebEventProvider.cs
- ServiceOperationParameter.cs
- RequiredFieldValidator.cs
- Utility.cs
- DataSpaceManager.cs
- XmlUtilWriter.cs
- DataRowCollection.cs
- EntitySetDataBindingList.cs
- HttpListenerException.cs
- TabRenderer.cs
- DeviceSpecificDesigner.cs
- CacheHelper.cs
- AxisAngleRotation3D.cs
- DesignerDataTable.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- FullTextState.cs
- TCPClient.cs
- ErrorWrapper.cs
- CacheForPrimitiveTypes.cs
- Win32KeyboardDevice.cs
- IItemProperties.cs
- DataTableExtensions.cs
- MessageRpc.cs
- MoveSizeWinEventHandler.cs
- AsymmetricCryptoHandle.cs
- BindingWorker.cs
- NetworkStream.cs
- TakeQueryOptionExpression.cs
- ResponseBodyWriter.cs
- PageSettings.cs
- SharedUtils.cs
- ReadOnlyDataSourceView.cs
- GridViewUpdatedEventArgs.cs
- NativeMsmqMessage.cs
- WebPartUtil.cs
- CodeGeneratorAttribute.cs
- FormsAuthentication.cs
- RuleInfoComparer.cs
- NetSectionGroup.cs
- XmlSchemaElement.cs
- DirectoryRedirect.cs
- PocoPropertyAccessorStrategy.cs
- SynchronizationLockException.cs
- RetriableClipboard.cs
- RoleGroupCollection.cs
- ToolboxComponentsCreatingEventArgs.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- IdentitySection.cs
- StateRuntime.cs
- WindowsGraphicsWrapper.cs
- SmtpCommands.cs
- DataContractSerializerMessageContractImporter.cs
- WebPartCatalogAddVerb.cs
- MetafileHeader.cs
- DataGridViewRowConverter.cs
- AsymmetricKeyExchangeDeformatter.cs
- SessionIDManager.cs
- SafeRightsManagementEnvironmentHandle.cs
- DataGridViewHeaderCell.cs
- WsatConfiguration.cs
- AdornedElementPlaceholder.cs
- TemplateXamlTreeBuilder.cs
- ConfigErrorGlyph.cs
- QuaternionIndependentAnimationStorage.cs
- GestureRecognitionResult.cs
- StreamAsIStream.cs
- HMACSHA1.cs
- MarkupCompilePass1.cs
- ValidationEventArgs.cs
- TextLineBreak.cs
- TiffBitmapDecoder.cs
- Style.cs
- BuildProvidersCompiler.cs
- TabItemAutomationPeer.cs
- WindowsPrincipal.cs
- SHA256.cs
- ToolboxItem.cs
- RuleInfoComparer.cs
- ListViewDataItem.cs
- ConfigViewGenerator.cs