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
- XmlAttributes.cs
- ViewEvent.cs
- WindowsRichEditRange.cs
- RecipientInfo.cs
- LayoutTableCell.cs
- ColorConvertedBitmap.cs
- XamlGridLengthSerializer.cs
- TCPClient.cs
- TypedElement.cs
- JpegBitmapDecoder.cs
- HttpWriter.cs
- ExtendedProperty.cs
- ProcessModuleCollection.cs
- TextEditorSelection.cs
- Literal.cs
- DesigntimeLicenseContextSerializer.cs
- DBBindings.cs
- ProfileParameter.cs
- Command.cs
- SoapEnumAttribute.cs
- ContextMenuService.cs
- PcmConverter.cs
- TemplatedAdorner.cs
- AssignDesigner.xaml.cs
- DesignerCommandAdapter.cs
- _ConnectStream.cs
- CodeExpressionRuleDeclaration.cs
- RecordsAffectedEventArgs.cs
- Normalization.cs
- EditorZone.cs
- EndPoint.cs
- PtsCache.cs
- BamlVersionHeader.cs
- RadioButton.cs
- ContentPresenter.cs
- OptionalRstParameters.cs
- ValueConversionAttribute.cs
- FormViewModeEventArgs.cs
- ProfileInfo.cs
- PrincipalPermission.cs
- SerializationFieldInfo.cs
- SqlWriter.cs
- WebEventTraceProvider.cs
- DirtyTextRange.cs
- DynamicResourceExtension.cs
- WebPartUserCapability.cs
- HtmlWindow.cs
- ImageMap.cs
- ReflectionHelper.cs
- HybridObjectCache.cs
- HttpModuleCollection.cs
- SystemResourceHost.cs
- XmlSchemaExternal.cs
- SafeNativeMethods.cs
- NativeStructs.cs
- ActivitiesCollection.cs
- CompilerHelpers.cs
- TokenBasedSetEnumerator.cs
- TdsParserSafeHandles.cs
- safelink.cs
- XmlCharCheckingReader.cs
- ColorDialog.cs
- SHA1Managed.cs
- ObjectConverter.cs
- WizardForm.cs
- CountAggregationOperator.cs
- GridViewColumnCollectionChangedEventArgs.cs
- DesignerVerb.cs
- DragCompletedEventArgs.cs
- webeventbuffer.cs
- KeyValueConfigurationElement.cs
- ConfigXmlElement.cs
- SqlDataSourceView.cs
- ComponentCommands.cs
- CounterSample.cs
- SessionSwitchEventArgs.cs
- HttpContextServiceHost.cs
- DataServiceException.cs
- MobileControlBuilder.cs
- FormsAuthenticationModule.cs
- BrushMappingModeValidation.cs
- DbTransaction.cs
- X509Certificate.cs
- DataMisalignedException.cs
- EntityModelBuildProvider.cs
- DataViewSetting.cs
- PerformanceCounterManager.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- BitmapSizeOptions.cs
- ExeConfigurationFileMap.cs
- DataColumnMappingCollection.cs
- ComboBoxRenderer.cs
- CollectionViewGroup.cs
- XslCompiledTransform.cs
- XPathItem.cs
- InvalidateEvent.cs
- EncryptedReference.cs
- TranslateTransform.cs
- RsaSecurityTokenParameters.cs
- RequestCachePolicyConverter.cs