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
- Rectangle.cs
- ZipIOModeEnforcingStream.cs
- DnsPermission.cs
- BookmarkWorkItem.cs
- RootCodeDomSerializer.cs
- PixelShader.cs
- GroupLabel.cs
- Sql8ConformanceChecker.cs
- CultureSpecificStringDictionary.cs
- AttachedAnnotation.cs
- CompensationTokenData.cs
- SecureStringHasher.cs
- AdRotator.cs
- CodeMethodMap.cs
- FormViewInsertEventArgs.cs
- WebPartMenu.cs
- XmlSchemaAll.cs
- OutgoingWebResponseContext.cs
- EventHandlers.cs
- FullTextState.cs
- MethodCallTranslator.cs
- UnmanagedMemoryStreamWrapper.cs
- DurableErrorHandler.cs
- EmbeddedObject.cs
- ProcessModule.cs
- XNodeNavigator.cs
- MappingItemCollection.cs
- SchemaImporterExtensionElementCollection.cs
- IdentityManager.cs
- DeclarativeCatalogPart.cs
- ScrollBar.cs
- GridViewEditEventArgs.cs
- EmptyControlCollection.cs
- ExtensionWindowHeader.cs
- ConstantSlot.cs
- ToolboxItem.cs
- InternalException.cs
- XmlMessageFormatter.cs
- GridViewCommandEventArgs.cs
- MaskDescriptor.cs
- MenuEventArgs.cs
- HttpRuntimeSection.cs
- HttpListenerPrefixCollection.cs
- safelink.cs
- oledbconnectionstring.cs
- SqlDuplicator.cs
- WebPartChrome.cs
- SpellCheck.cs
- DataGridViewRowsRemovedEventArgs.cs
- XmlQuerySequence.cs
- PartialClassGenerationTask.cs
- ProjectionPlanCompiler.cs
- SevenBitStream.cs
- AuthorizationSection.cs
- WorkflowOperationBehavior.cs
- GridViewEditEventArgs.cs
- SqlDataSourceEnumerator.cs
- MulticastDelegate.cs
- StyleSelector.cs
- ScriptManager.cs
- DecimalAverageAggregationOperator.cs
- HandlerBase.cs
- DetailsViewInsertedEventArgs.cs
- HorizontalAlignConverter.cs
- CheckBoxField.cs
- WindowsGraphicsCacheManager.cs
- SqlConnectionHelper.cs
- CreationContext.cs
- DesignerDataTableBase.cs
- TextEditorDragDrop.cs
- BeginStoryboard.cs
- TypeLibConverter.cs
- SelectionItemProviderWrapper.cs
- ConfigurationStrings.cs
- ControlIdConverter.cs
- SpinLock.cs
- InputMethodStateChangeEventArgs.cs
- StyleHelper.cs
- OleDbMetaDataFactory.cs
- MdiWindowListItemConverter.cs
- CaretElement.cs
- SoapReflectionImporter.cs
- PagedDataSource.cs
- BindingCompleteEventArgs.cs
- SqlXml.cs
- DataServiceClientException.cs
- ProfileSection.cs
- ComponentChangingEvent.cs
- PeerIPHelper.cs
- ChannelFactoryRefCache.cs
- SystemWebCachingSectionGroup.cs
- PrePostDescendentsWalker.cs
- TextFragmentEngine.cs
- KnownColorTable.cs
- Int64Storage.cs
- XmlSchemaAny.cs
- RootBuilder.cs
- NodeLabelEditEvent.cs
- DecimalAnimation.cs
- DetailsViewInsertedEventArgs.cs