Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Xml / System / Xml / Core / CharEntityEncoderFallback.cs / 1 / CharEntityEncoderFallback.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
using System.Text;
using System.Diagnostics;
using System.Globalization;
namespace System.Xml {
//
// CharEntityEncoderFallback
//
internal class CharEntityEncoderFallback : EncoderFallback {
private CharEntityEncoderFallbackBuffer fallbackBuffer;
private int[] textContentMarks;
private int endMarkPos;
private int curMarkPos;
private int startOffset;
internal CharEntityEncoderFallback() {
}
public override EncoderFallbackBuffer CreateFallbackBuffer() {
if ( fallbackBuffer == null ) {
fallbackBuffer = new CharEntityEncoderFallbackBuffer( this );
}
return fallbackBuffer;
}
public override int MaxCharCount {
get {
return 12;
}
}
internal int StartOffset {
get {
return startOffset;
}
set {
startOffset = value;
}
}
internal void Reset( int[] textContentMarks, int endMarkPos ) {
this.textContentMarks = textContentMarks;
this.endMarkPos = endMarkPos;
curMarkPos = 0;
}
internal bool CanReplaceAt( int index ) {
int mPos = curMarkPos;
int charPos = startOffset + index;
while ( mPos < endMarkPos && charPos >= textContentMarks[mPos+1] ) {
mPos++;
}
curMarkPos = mPos;
return (mPos & 1) != 0;
}
}
//
// CharEntityFallbackBuffer
//
internal class CharEntityEncoderFallbackBuffer : EncoderFallbackBuffer {
private CharEntityEncoderFallback parent;
private string charEntity = string.Empty;
private int charEntityIndex = -1;
internal CharEntityEncoderFallbackBuffer( CharEntityEncoderFallback parent ) {
this.parent = parent;
}
public override bool Fallback( char charUnknown, int index ) {
// If we are already in fallback, throw, it's probably at the suspect character in charEntity
if ( charEntityIndex >= 0 ) {
(new EncoderExceptionFallbackBuffer()).Fallback( charUnknown, index );
}
// find out if we can replace the character with entity
if ( parent.CanReplaceAt( index ) ) {
// Create the replacement character entity
charEntity = string.Format( CultureInfo.InvariantCulture, "{0:X};", new object[] { (int)charUnknown } );
charEntityIndex = 0;
return true;
}
else {
EncoderFallbackBuffer errorFallbackBuffer = ( new EncoderExceptionFallback() ).CreateFallbackBuffer();
errorFallbackBuffer.Fallback( charUnknown, index );
return false;
}
}
public override bool Fallback( char charUnknownHigh, char charUnknownLow, int index ) {
// check input surrogate pair
if ( !char.IsSurrogatePair( charUnknownHigh, charUnknownLow ) ) {
throw XmlConvert.CreateInvalidSurrogatePairException( charUnknownHigh, charUnknownLow );
}
// If we are already in fallback, throw, it's probably at the suspect character in charEntity
if ( charEntityIndex >= 0 ) {
(new EncoderExceptionFallbackBuffer()).Fallback( charUnknownHigh, charUnknownLow, index );
}
if ( parent.CanReplaceAt( index ) ) {
// Create the replacement character entity
charEntity = string.Format( CultureInfo.InvariantCulture, "{0:X};", new object[] { char.ConvertToUtf32( charUnknownHigh, charUnknownLow ) } );
charEntityIndex = 0;
return true;
}
else {
EncoderFallbackBuffer errorFallbackBuffer = ( new EncoderExceptionFallback() ).CreateFallbackBuffer();
errorFallbackBuffer.Fallback( charUnknownHigh, charUnknownLow, index );
return false;
}
}
public override char GetNextChar() {
if ( charEntityIndex == -1 ) {
return (char)0;
}
else {
Debug.Assert( charEntityIndex < charEntity.Length );
char ch = charEntity[charEntityIndex++];
if ( charEntityIndex == charEntity.Length ) {
charEntityIndex = -1;
}
return ch;
}
}
public override bool MovePrevious() {
if ( charEntityIndex == -1 ) {
return false;
}
else {
Debug.Assert( charEntityIndex < charEntity.Length );
if ( charEntityIndex > 0 ) {
charEntityIndex--;
return true;
}
else {
return false;
}
}
}
public override int Remaining {
get {
if ( charEntityIndex == -1 ) {
return 0;
}
else {
return charEntity.Length - charEntityIndex;
}
}
}
public override void Reset() {
charEntityIndex = -1;
}
}
}
// 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
- Symbol.cs
- RadioButtonList.cs
- SelectManyQueryOperator.cs
- CapabilitiesPattern.cs
- HandleExceptionArgs.cs
- GridViewColumn.cs
- x509utils.cs
- MailWebEventProvider.cs
- ProfileSection.cs
- HttpCacheVary.cs
- OperationResponse.cs
- UriWriter.cs
- _ScatterGatherBuffers.cs
- KnownTypeAttribute.cs
- IPCCacheManager.cs
- WebPartConnectionCollection.cs
- DocumentOrderQuery.cs
- InstanceDataCollection.cs
- recordstatefactory.cs
- odbcmetadatacolumnnames.cs
- EntityReference.cs
- ExplicitDiscriminatorMap.cs
- DataGridItemCollection.cs
- COM2PropertyPageUITypeConverter.cs
- IImplicitResourceProvider.cs
- HtmlShim.cs
- EventItfInfo.cs
- TriggerAction.cs
- XmlDigitalSignatureProcessor.cs
- ContextDataSource.cs
- ToolboxItem.cs
- SQLBytesStorage.cs
- DirectoryObjectSecurity.cs
- LayoutTableCell.cs
- DomainConstraint.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- MappableObjectManager.cs
- HttpPostedFile.cs
- ICspAsymmetricAlgorithm.cs
- PropertyGridCommands.cs
- PartEditor.cs
- WaitHandleCannotBeOpenedException.cs
- JournalEntryStack.cs
- WebPartPersonalization.cs
- _UncName.cs
- DbTransaction.cs
- EventSinkHelperWriter.cs
- PlainXmlDeserializer.cs
- SettingsPropertyValueCollection.cs
- NetworkCredential.cs
- HeaderCollection.cs
- SessionStateUtil.cs
- DelegatingHeader.cs
- RevocationPoint.cs
- CalendarSelectionChangedEventArgs.cs
- WebHttpBehavior.cs
- MetadataUtilsSmi.cs
- SQLBinary.cs
- MediaTimeline.cs
- WindowsFormsHostAutomationPeer.cs
- SerialPort.cs
- WebBrowsableAttribute.cs
- TreeNode.cs
- Point3DValueSerializer.cs
- ContainerParagraph.cs
- ResourceDictionary.cs
- HelpInfo.cs
- DrawingVisualDrawingContext.cs
- MeshGeometry3D.cs
- CodeAttributeDeclaration.cs
- SignerInfo.cs
- SchemaImporterExtension.cs
- AVElementHelper.cs
- ToolbarAUtomationPeer.cs
- WindowsTreeView.cs
- TypeDependencyAttribute.cs
- PageThemeCodeDomTreeGenerator.cs
- HyperLinkField.cs
- TdsParserStaticMethods.cs
- LayoutInformation.cs
- WebPartConnectionsCancelVerb.cs
- MobileUserControlDesigner.cs
- WinInetCache.cs
- WinCategoryAttribute.cs
- TraceRecord.cs
- SQLBinaryStorage.cs
- LabelLiteral.cs
- SqlXmlStorage.cs
- FontUnitConverter.cs
- ConstructorExpr.cs
- DrawingContextDrawingContextWalker.cs
- AssemblyInfo.cs
- InternalBufferOverflowException.cs
- DataGridHeaderBorder.cs
- SafeSystemMetrics.cs
- DiscreteKeyFrames.cs
- StorageAssociationSetMapping.cs
- DefaultEventAttribute.cs
- httpapplicationstate.cs
- Int32Rect.cs