Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- SizeValueSerializer.cs
- DoWorkEventArgs.cs
- SafeNativeMethodsOther.cs
- UICuesEvent.cs
- FixedPageProcessor.cs
- OleServicesContext.cs
- DbProviderFactory.cs
- ResourceReader.cs
- SspiSecurityTokenProvider.cs
- DataBinding.cs
- FlowDocumentPage.cs
- SQLGuidStorage.cs
- MergablePropertyAttribute.cs
- Region.cs
- SplitterPanel.cs
- RSAOAEPKeyExchangeFormatter.cs
- DeviceFilterDictionary.cs
- Invariant.cs
- EntryWrittenEventArgs.cs
- DependencyObjectPropertyDescriptor.cs
- LogicalChannelCollection.cs
- SimpleBitVector32.cs
- linebase.cs
- XmlHierarchicalDataSourceView.cs
- DataGridViewTextBoxColumn.cs
- SqlFacetAttribute.cs
- ServicesUtilities.cs
- SqlUtil.cs
- PageAsyncTaskManager.cs
- DataGridViewButtonCell.cs
- BitmapEncoder.cs
- PersistenceProviderFactory.cs
- WebPartManagerInternals.cs
- FileSystemInfo.cs
- ClaimSet.cs
- UpdatePanelTriggerCollection.cs
- ComponentResourceManager.cs
- SHA512Managed.cs
- ToolStripTextBox.cs
- EffectiveValueEntry.cs
- _BasicClient.cs
- PixelFormatConverter.cs
- TextFormatterContext.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- listviewsubitemcollectioneditor.cs
- XmlNavigatorFilter.cs
- PointValueSerializer.cs
- ValueUtilsSmi.cs
- OdbcStatementHandle.cs
- ConditionalDesigner.cs
- PropertyTabChangedEvent.cs
- DataBindingCollection.cs
- _emptywebproxy.cs
- TextSelection.cs
- ListSortDescription.cs
- VideoDrawing.cs
- Utils.cs
- WindowsStatusBar.cs
- CodeTypeMemberCollection.cs
- ConfigurationPermission.cs
- DispatcherTimer.cs
- BitmapFrameEncode.cs
- ClientUrlResolverWrapper.cs
- ColorTransform.cs
- TargetControlTypeCache.cs
- FilterQuery.cs
- XmlTextAttribute.cs
- IItemProperties.cs
- Pkcs7Signer.cs
- XmlDataFileEditor.cs
- UrlMappingsSection.cs
- DesignSurface.cs
- StringAttributeCollection.cs
- RMEnrollmentPage3.cs
- EncoderExceptionFallback.cs
- Psha1DerivedKeyGeneratorHelper.cs
- WebEvents.cs
- WebBrowserNavigatingEventHandler.cs
- LicenseManager.cs
- TraceSwitch.cs
- EntityDataSourceMemberPath.cs
- ObjectDataSourceDisposingEventArgs.cs
- ListBox.cs
- GPRECT.cs
- PlaceHolder.cs
- TextTreeTextElementNode.cs
- ByValueEqualityComparer.cs
- UndirectedGraph.cs
- CultureInfoConverter.cs
- LocalizationParserHooks.cs
- ClientBuildManager.cs
- TransactionProxy.cs
- ContextQuery.cs
- BigInt.cs
- HMACSHA256.cs
- HierarchicalDataSourceConverter.cs
- UndoEngine.cs
- ExtractedStateEntry.cs
- Padding.cs
- Compiler.cs