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
- ItemType.cs
- FixedSOMImage.cs
- OdbcCommandBuilder.cs
- WindowsRegion.cs
- TextSearch.cs
- QueryInterceptorAttribute.cs
- SafeFileHandle.cs
- MetadataPropertyAttribute.cs
- ToolStripMenuItem.cs
- Timer.cs
- DrawTreeNodeEventArgs.cs
- DynamicILGenerator.cs
- HttpResponse.cs
- ContentDesigner.cs
- EventSourceCreationData.cs
- DragStartedEventArgs.cs
- ActivationServices.cs
- FixedSOMLineCollection.cs
- FileNameEditor.cs
- SoapCommonClasses.cs
- XMLUtil.cs
- LocalValueEnumerator.cs
- UseManagedPresentationElement.cs
- ToolStripDropDown.cs
- ToggleProviderWrapper.cs
- ComponentChangedEvent.cs
- HttpFormatExtensions.cs
- SmtpDigestAuthenticationModule.cs
- PlacementWorkspace.cs
- BaseCAMarshaler.cs
- IpcPort.cs
- TypedTableBaseExtensions.cs
- BaseTemplateBuildProvider.cs
- Metadata.cs
- Catch.cs
- CustomAssemblyResolver.cs
- CacheVirtualItemsEvent.cs
- Vector3DCollection.cs
- XmlSchemaAll.cs
- ConnectionString.cs
- Grant.cs
- DataGridViewColumnCollectionDialog.cs
- X509IssuerSerialKeyIdentifierClause.cs
- CommandSet.cs
- AudienceUriMode.cs
- PeerNearMe.cs
- SafeWaitHandle.cs
- RichTextBoxConstants.cs
- HttpHandlersSection.cs
- DataContract.cs
- TextPattern.cs
- Point4D.cs
- ObjectNavigationPropertyMapping.cs
- Helpers.cs
- SolidColorBrush.cs
- ReadWriteObjectLock.cs
- QuaternionAnimation.cs
- AliasedSlot.cs
- ConfigurationCollectionAttribute.cs
- ListBindingConverter.cs
- BuildProvider.cs
- MetadataException.cs
- QueryGenerator.cs
- ContextMenu.cs
- CopyAttributesAction.cs
- _SpnDictionary.cs
- XmlSchemaProviderAttribute.cs
- NullableLongSumAggregationOperator.cs
- AmbientValueAttribute.cs
- OperationExecutionFault.cs
- ConfigurationElementProperty.cs
- ListenerConfig.cs
- GlobalProxySelection.cs
- MetadataCache.cs
- ShadowGlyph.cs
- LinqDataSourceDisposeEventArgs.cs
- DataGridTextBox.cs
- ToolTip.cs
- ResolveMatchesMessageCD1.cs
- HttpRequestTraceRecord.cs
- StringWriter.cs
- QueryCreatedEventArgs.cs
- XPathNodeInfoAtom.cs
- _HelperAsyncResults.cs
- BindingGroup.cs
- ResourceDescriptionAttribute.cs
- EntityViewContainer.cs
- SystemPens.cs
- DesignerAttribute.cs
- ActivitiesCollection.cs
- DataGridPagerStyle.cs
- URLIdentityPermission.cs
- SqlExpressionNullability.cs
- FtpCachePolicyElement.cs
- CounterSampleCalculator.cs
- DataGridViewCellConverter.cs
- InfoCardClaim.cs
- TypeLoadException.cs
- DataServiceQueryProvider.cs
- EventLogPermissionAttribute.cs