Code:
/ FX-1434 / FX-1434 / 1.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
- ServiceDebugBehavior.cs
- QilNode.cs
- FixedSOMElement.cs
- AuthStoreRoleProvider.cs
- XmlCountingReader.cs
- Terminate.cs
- CellIdBoolean.cs
- SoapAttributeAttribute.cs
- TrustSection.cs
- DbResourceAllocator.cs
- MultipartContentParser.cs
- AnnotationMap.cs
- DataServiceQueryOfT.cs
- VisualStyleInformation.cs
- XmlEntityReference.cs
- GridViewRowEventArgs.cs
- WebResponse.cs
- SimpleTypeResolver.cs
- DataGridViewButtonCell.cs
- NumericExpr.cs
- Exception.cs
- HttpProfileGroupBase.cs
- DataGridColumnHeaderAutomationPeer.cs
- DataServiceKeyAttribute.cs
- DelayedRegex.cs
- MethodImplAttribute.cs
- PrintController.cs
- Grid.cs
- BlurBitmapEffect.cs
- DataPagerFieldCommandEventArgs.cs
- SafeEventHandle.cs
- TableParaClient.cs
- SmiMetaDataProperty.cs
- JsonFormatWriterGenerator.cs
- WebPartZoneCollection.cs
- JsonFormatGeneratorStatics.cs
- ProxyManager.cs
- SecurityContextSecurityToken.cs
- NoResizeSelectionBorderGlyph.cs
- SecurityMode.cs
- AssemblyLoader.cs
- BorderGapMaskConverter.cs
- OleDbConnectionFactory.cs
- Repeater.cs
- TraceHwndHost.cs
- CodeDOMProvider.cs
- SortExpressionBuilder.cs
- HttpRuntime.cs
- GPRECTF.cs
- DefaultHttpHandler.cs
- UncommonField.cs
- WsdlInspector.cs
- IssuanceLicense.cs
- TextTreeDeleteContentUndoUnit.cs
- ToolTipService.cs
- SchemaTableColumn.cs
- UnsafeNativeMethods.cs
- PagerSettings.cs
- GeneralTransform3D.cs
- XamlStream.cs
- SelectionProviderWrapper.cs
- VectorAnimation.cs
- SyntaxCheck.cs
- _HeaderInfoTable.cs
- ImageListUtils.cs
- ToggleProviderWrapper.cs
- FeatureAttribute.cs
- TypeSystem.cs
- CqlErrorHelper.cs
- SetterBase.cs
- CodeTypeDeclarationCollection.cs
- EndOfStreamException.cs
- TypeGeneratedEventArgs.cs
- Attributes.cs
- OleDbSchemaGuid.cs
- EdmScalarPropertyAttribute.cs
- CatalogPartChrome.cs
- XmlAttributeCollection.cs
- SequentialUshortCollection.cs
- MatrixCamera.cs
- CfgParser.cs
- SignatureToken.cs
- DataSourceControl.cs
- MemoryStream.cs
- DataMisalignedException.cs
- WebPartEventArgs.cs
- AuthenticationServiceManager.cs
- XNodeNavigator.cs
- EventLogConfiguration.cs
- ActivityExecutorSurrogate.cs
- SaveFileDialog.cs
- PageFunction.cs
- FixedTextBuilder.cs
- X509IssuerSerialKeyIdentifierClause.cs
- __FastResourceComparer.cs
- MasterPageBuildProvider.cs
- control.ime.cs
- AssemblyFilter.cs
- ZipIOExtraFieldPaddingElement.cs
- TemplateNameScope.cs