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
- JapaneseLunisolarCalendar.cs
- SHA384Managed.cs
- QueryConverter.cs
- _SSPIWrapper.cs
- Matrix3D.cs
- HttpHandlerActionCollection.cs
- AccessDataSourceDesigner.cs
- SpellerInterop.cs
- CompensatableTransactionScopeActivityDesigner.cs
- DbConnectionStringBuilder.cs
- XmlSchemaGroupRef.cs
- IList.cs
- ImageKeyConverter.cs
- AnnotationObservableCollection.cs
- OleDbCommandBuilder.cs
- ReferentialConstraint.cs
- MappingModelBuildProvider.cs
- SessionViewState.cs
- BypassElementCollection.cs
- QueryCacheKey.cs
- DbMetaDataFactory.cs
- ObservableCollection.cs
- DebugViewWriter.cs
- SimplePropertyEntry.cs
- HttpCacheVaryByContentEncodings.cs
- ReceiveActivityDesigner.cs
- DbParameterCollectionHelper.cs
- UnionCodeGroup.cs
- LogicalChannelCollection.cs
- PartialClassGenerationTaskInternal.cs
- HtmlMeta.cs
- AsymmetricKeyExchangeFormatter.cs
- ReliabilityContractAttribute.cs
- ItemList.cs
- ToolboxItemFilterAttribute.cs
- AlternateViewCollection.cs
- WindowProviderWrapper.cs
- ListBindableAttribute.cs
- ObjectQueryProvider.cs
- DataControlFieldsEditor.cs
- TextEditorContextMenu.cs
- TextTreeNode.cs
- LinkArea.cs
- HtmlShim.cs
- XmlSchemaImport.cs
- Touch.cs
- DocumentApplicationJournalEntry.cs
- AppSettingsExpressionBuilder.cs
- GeneralTransformGroup.cs
- UnsafeNativeMethods.cs
- filewebresponse.cs
- Parameter.cs
- ActionItem.cs
- DataViewListener.cs
- TextTreeRootTextBlock.cs
- PrimaryKeyTypeConverter.cs
- CacheEntry.cs
- FieldNameLookup.cs
- DeclaredTypeValidator.cs
- WindowsListViewGroupSubsetLink.cs
- ValueOfAction.cs
- Module.cs
- CompilationUnit.cs
- FixedSOMFixedBlock.cs
- FormatStringEditor.cs
- FrameworkElement.cs
- CurrentTimeZone.cs
- MetafileHeader.cs
- RowsCopiedEventArgs.cs
- RayHitTestParameters.cs
- OptimizerPatterns.cs
- HttpProxyCredentialType.cs
- StatusBar.cs
- ToolStripSplitStackLayout.cs
- FontEditor.cs
- CommandField.cs
- ProbeMatchesCD1.cs
- GifBitmapEncoder.cs
- MyContact.cs
- DirectoryNotFoundException.cs
- TextParagraphCache.cs
- HtmlInputButton.cs
- EventWaitHandleSecurity.cs
- Int16.cs
- HtmlFormWrapper.cs
- ObjectDataSourceStatusEventArgs.cs
- NativeMethods.cs
- ListViewGroupItemCollection.cs
- PersonalizableTypeEntry.cs
- _NtlmClient.cs
- PopupEventArgs.cs
- Cursor.cs
- SocketSettings.cs
- ActivityBindForm.cs
- DataGridViewTopRowAccessibleObject.cs
- PagePropertiesChangingEventArgs.cs
- ServiceHost.cs
- HandleRef.cs
- ForwardPositionQuery.cs
- X509ChainElement.cs