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
- MappedMetaModel.cs
- X509CertificateStore.cs
- QueryableFilterRepeater.cs
- QueryAccessibilityHelpEvent.cs
- METAHEADER.cs
- BinaryHeap.cs
- Ray3DHitTestResult.cs
- Decoder.cs
- RegistryExceptionHelper.cs
- RemoteCryptoRsaServiceProvider.cs
- OleDbError.cs
- SecUtil.cs
- BitmapDecoder.cs
- BamlBinaryWriter.cs
- SerialStream.cs
- DataBinder.cs
- VisualBrush.cs
- MaskedTextProvider.cs
- Columns.cs
- UrlPropertyAttribute.cs
- RefType.cs
- ScriptingAuthenticationServiceSection.cs
- TextFragmentEngine.cs
- TextElementAutomationPeer.cs
- TaskFactory.cs
- SmiMetaDataProperty.cs
- XmlAttributeAttribute.cs
- DataGridViewComboBoxCell.cs
- ParseChildrenAsPropertiesAttribute.cs
- NavigationCommands.cs
- HttpResponseHeader.cs
- MediaTimeline.cs
- PagedDataSource.cs
- PageRequestManager.cs
- ConfigurationValue.cs
- CodeVariableReferenceExpression.cs
- PolyQuadraticBezierSegment.cs
- SelectionEditor.cs
- IteratorFilter.cs
- HtmlTitle.cs
- InkSerializer.cs
- SectionInformation.cs
- BigInt.cs
- ScriptManagerProxy.cs
- DataListGeneralPage.cs
- PropertyMappingExceptionEventArgs.cs
- RowVisual.cs
- COM2PictureConverter.cs
- CollectionEditorDialog.cs
- ProxyWebPartManager.cs
- _PooledStream.cs
- DesignTimeParseData.cs
- BinaryNode.cs
- PeerEndPoint.cs
- TextRangeBase.cs
- ResolveMatchesCD1.cs
- Point3DCollection.cs
- DelegatingTypeDescriptionProvider.cs
- MasterPageCodeDomTreeGenerator.cs
- FigureHelper.cs
- StringDictionary.cs
- RequestQueryParser.cs
- TemplateControlCodeDomTreeGenerator.cs
- XmlHelper.cs
- BadImageFormatException.cs
- ConnectorSelectionGlyph.cs
- UpDownBase.cs
- ViewStateException.cs
- GridEntryCollection.cs
- ReceiveSecurityHeader.cs
- PropertyStore.cs
- SqlCacheDependencyDatabase.cs
- EndOfStreamException.cs
- BamlLocalizableResourceKey.cs
- TextMarkerSource.cs
- ChangeTracker.cs
- TextTreeRootTextBlock.cs
- NameSpaceEvent.cs
- TransactionalPackage.cs
- SourceInterpreter.cs
- RoutingExtensionElement.cs
- CaseInsensitiveHashCodeProvider.cs
- ObjectHandle.cs
- InternalResources.cs
- ValidationHelper.cs
- PersonalizationStateInfo.cs
- LinkDescriptor.cs
- EditorZoneBase.cs
- ListChangedEventArgs.cs
- FixedTextPointer.cs
- TagMapInfo.cs
- DataViewSettingCollection.cs
- SrgsRulesCollection.cs
- CurrentChangingEventManager.cs
- UserUseLicenseDictionaryLoader.cs
- DictionaryContent.cs
- AutoCompleteStringCollection.cs
- ExpandedProjectionNode.cs
- RequestContext.cs
- RunClient.cs