Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / Xml / System / Xml / Core / CharEntityEncoderFallback.cs / 2 / 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 ) { // 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
- PlatformCulture.cs
- QilValidationVisitor.cs
- XamlStream.cs
- DictionaryChange.cs
- Manipulation.cs
- EntityDataSource.cs
- EventData.cs
- OverflowException.cs
- HwndSourceParameters.cs
- LicenseProviderAttribute.cs
- CodeObject.cs
- MobileControlPersister.cs
- XmlSchemaImporter.cs
- MessageBodyDescription.cs
- BinaryParser.cs
- QilTypeChecker.cs
- HtmlInputRadioButton.cs
- OperatorExpressions.cs
- BrowserTree.cs
- ViewLoader.cs
- HtmlTernaryTree.cs
- PagesChangedEventArgs.cs
- ReferenceCountedObject.cs
- PolicyVersionConverter.cs
- SrgsDocument.cs
- DependencyObjectPropertyDescriptor.cs
- ClientData.cs
- TextEditorMouse.cs
- ProcessModelSection.cs
- FontUnit.cs
- DependencyProperty.cs
- PartialCachingControl.cs
- EmptyElement.cs
- XPathPatternBuilder.cs
- JoinSymbol.cs
- ValidateNames.cs
- ExtensionDataReader.cs
- UTF7Encoding.cs
- ProviderConnectionPoint.cs
- SchemaDeclBase.cs
- EventHandlerList.cs
- SignatureDescription.cs
- COM2PictureConverter.cs
- OpCellTreeNode.cs
- WrappedReader.cs
- Size.cs
- DragEvent.cs
- MimeTextImporter.cs
- HostProtectionException.cs
- EntitySqlQueryBuilder.cs
- CloseCryptoHandleRequest.cs
- ReadOnlyDataSource.cs
- TextEndOfParagraph.cs
- oledbmetadatacolumnnames.cs
- storepermissionattribute.cs
- Pen.cs
- CodeSnippetExpression.cs
- PointCollection.cs
- PhysicalAddress.cs
- ConfigXmlReader.cs
- SapiInterop.cs
- DrawingAttributeSerializer.cs
- VisualCollection.cs
- DataFormat.cs
- Rect3DValueSerializer.cs
- BaseTemplateParser.cs
- LinearGradientBrush.cs
- EnvelopedPkcs7.cs
- Event.cs
- ServicesUtilities.cs
- NativeWindow.cs
- ListViewGroupItemCollection.cs
- Double.cs
- MembershipPasswordException.cs
- Misc.cs
- SchemaTableColumn.cs
- DefinitionBase.cs
- CodeSnippetTypeMember.cs
- SharedHttpTransportManager.cs
- DateRangeEvent.cs
- ZipIOFileItemStream.cs
- VirtualPath.cs
- DataGridViewCellEventArgs.cs
- SequentialWorkflowHeaderFooter.cs
- ProfileModule.cs
- ExtentJoinTreeNode.cs
- XmlNamespaceMapping.cs
- TCPListener.cs
- ClientUrlResolverWrapper.cs
- DbConnectionStringBuilder.cs
- DataServiceBehavior.cs
- Token.cs
- ContentElement.cs
- PackWebRequest.cs
- SessionStateSection.cs
- WrapPanel.cs
- CodeAccessPermission.cs
- M3DUtil.cs
- DataGridToolTip.cs
- SortedList.cs