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
- ClassHandlersStore.cs
- OutputCacheSettingsSection.cs
- DataGridCommandEventArgs.cs
- CommentEmitter.cs
- Nodes.cs
- DrawingState.cs
- ToolBarOverflowPanel.cs
- IteratorDescriptor.cs
- ProviderSettingsCollection.cs
- PathStreamGeometryContext.cs
- ExpressionConverter.cs
- XmlNodeChangedEventManager.cs
- ExceptionValidationRule.cs
- DataGridViewRowConverter.cs
- BypassElement.cs
- BaseCollection.cs
- XDRSchema.cs
- BitmapEffectvisualstate.cs
- XmlBinaryReader.cs
- XmlValidatingReader.cs
- EntityDataReader.cs
- ZoneButton.cs
- WebPart.cs
- PeerNearMe.cs
- VirtualizedItemPattern.cs
- GuidTagList.cs
- XmlQueryRuntime.cs
- ObfuscationAttribute.cs
- RequestResizeEvent.cs
- _IPv6Address.cs
- UpdateManifestForBrowserApplication.cs
- ResourcePermissionBaseEntry.cs
- ObjectRef.cs
- SiteMapNode.cs
- InfoCardUIAgent.cs
- ParsedAttributeCollection.cs
- RequestCachePolicy.cs
- CodeDOMUtility.cs
- DataBindingsDialog.cs
- followingsibling.cs
- altserialization.cs
- SelectionPattern.cs
- ArrayConverter.cs
- MailSettingsSection.cs
- GregorianCalendarHelper.cs
- PathTooLongException.cs
- Zone.cs
- PersonalizationStateInfo.cs
- Identity.cs
- LinkDesigner.cs
- XamlToRtfParser.cs
- Point4D.cs
- DateTimeConstantAttribute.cs
- ErrorWrapper.cs
- ReferenceEqualityComparer.cs
- CanExecuteRoutedEventArgs.cs
- ProxyGenerator.cs
- Compensation.cs
- TreeViewImageKeyConverter.cs
- TitleStyle.cs
- Stream.cs
- LocalizableAttribute.cs
- ReservationCollection.cs
- PolyBezierSegment.cs
- Message.cs
- AutomationProperty.cs
- JsonFormatGeneratorStatics.cs
- BitmapScalingModeValidation.cs
- InvalidContentTypeException.cs
- SemanticResultKey.cs
- mediaclock.cs
- ToolStripSettings.cs
- SoapInteropTypes.cs
- EntityContainerEntitySetDefiningQuery.cs
- ColumnMap.cs
- EditorPartDesigner.cs
- Exceptions.cs
- ProcessHostFactoryHelper.cs
- FreezableDefaultValueFactory.cs
- TextTrailingCharacterEllipsis.cs
- SwitchLevelAttribute.cs
- FieldTemplateUserControl.cs
- SortExpressionBuilder.cs
- MultipleViewPattern.cs
- XmlWrappingReader.cs
- DataBindingExpressionBuilder.cs
- PeerChannelFactory.cs
- ZoneIdentityPermission.cs
- Point3DConverter.cs
- TextHidden.cs
- SchemaTypeEmitter.cs
- KeyValuePairs.cs
- XmlSchemaComplexContentRestriction.cs
- MsdtcClusterUtils.cs
- EventRoute.cs
- OdbcFactory.cs
- PersistChildrenAttribute.cs
- DesignerActionItem.cs
- ListDictionary.cs
- DataGridViewSelectedRowCollection.cs