Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / Core / CharEntityEncoderFallback.cs / 1305376 / 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 EncoderExceptionFallback()).CreateFallbackBuffer().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 EncoderExceptionFallback()).CreateFallbackBuffer().Fallback( charUnknownHigh, charUnknownLow, index ); } if ( parent.CanReplaceAt( index ) ) { // Create the replacement character entity charEntity = string.Format( CultureInfo.InvariantCulture, "{0:X};", new object[] { SurrogateCharToUtf32( 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; } private int SurrogateCharToUtf32(char highSurrogate, char lowSurrogate) { return XmlCharType.CombineSurrogateChar(lowSurrogate, highSurrogate); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// 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 EncoderExceptionFallback()).CreateFallbackBuffer().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 EncoderExceptionFallback()).CreateFallbackBuffer().Fallback( charUnknownHigh, charUnknownLow, index ); } if ( parent.CanReplaceAt( index ) ) { // Create the replacement character entity charEntity = string.Format( CultureInfo.InvariantCulture, "{0:X};", new object[] { SurrogateCharToUtf32( 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; } private int SurrogateCharToUtf32(char highSurrogate, char lowSurrogate) { return XmlCharType.CombineSurrogateChar(lowSurrogate, highSurrogate); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GridViewUpdatedEventArgs.cs
- SqlAggregateChecker.cs
- MetabaseServerConfig.cs
- DelayedRegex.cs
- FamilyCollection.cs
- _ContextAwareResult.cs
- OracleRowUpdatedEventArgs.cs
- TextBoxLine.cs
- ServiceEndpointElement.cs
- CqlWriter.cs
- SqlTriggerContext.cs
- GZipStream.cs
- AccessedThroughPropertyAttribute.cs
- SyndicationCategory.cs
- EntitySetRetriever.cs
- LocatorPartList.cs
- SqlBulkCopyColumnMapping.cs
- SiteMapHierarchicalDataSourceView.cs
- VisualTreeUtils.cs
- ManagementQuery.cs
- ArgumentValidation.cs
- RegexNode.cs
- AdornedElementPlaceholder.cs
- Inflater.cs
- ObjectViewQueryResultData.cs
- DrawingAttributesDefaultValueFactory.cs
- ResolveMatchesMessage11.cs
- OpenTypeCommon.cs
- OLEDB_Enum.cs
- ImpersonationContext.cs
- TreeWalker.cs
- ProvidePropertyAttribute.cs
- HTTPNotFoundHandler.cs
- ReadOnlyActivityGlyph.cs
- SplashScreen.cs
- RelatedCurrencyManager.cs
- RegexCharClass.cs
- UnsafeNativeMethods.cs
- MultiPageTextView.cs
- SystemWebCachingSectionGroup.cs
- StreamWriter.cs
- AssemblyBuilderData.cs
- PageContentCollection.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- formatter.cs
- XmlSchemaElement.cs
- ErasingStroke.cs
- TypeCollectionPropertyEditor.cs
- XmlSerializerVersionAttribute.cs
- DrawListViewColumnHeaderEventArgs.cs
- OrderedHashRepartitionEnumerator.cs
- ContractMapping.cs
- WindowsBrush.cs
- EndpointConfigContainer.cs
- TimelineCollection.cs
- Image.cs
- ObjectDataSourceSelectingEventArgs.cs
- DataObjectPastingEventArgs.cs
- BitmapPalette.cs
- EpmSyndicationContentSerializer.cs
- PersonalizationStateInfoCollection.cs
- __Error.cs
- GenericFlowSwitchHelper.cs
- QueryStringParameter.cs
- RoleExceptions.cs
- Double.cs
- PageParserFilter.cs
- AccessibleObject.cs
- DoubleAnimationUsingPath.cs
- Site.cs
- FixedBufferAttribute.cs
- SoundPlayerAction.cs
- DBCommandBuilder.cs
- BuilderInfo.cs
- BindingOperations.cs
- ByteStorage.cs
- TypeListConverter.cs
- ChannelDemuxer.cs
- RoleGroup.cs
- ComAdminInterfaces.cs
- UriScheme.cs
- WebPartCloseVerb.cs
- ServiceNotStartedException.cs
- MessageQueueAccessControlEntry.cs
- PathGradientBrush.cs
- XmlQualifiedNameTest.cs
- DataGridViewComboBoxColumnDesigner.cs
- FixedSchema.cs
- CustomError.cs
- followingquery.cs
- Parser.cs
- DataSourceProvider.cs
- _NestedSingleAsyncResult.cs
- ListViewCommandEventArgs.cs
- Monitor.cs
- Pens.cs
- SynchronizedInputHelper.cs
- WCFServiceClientProxyGenerator.cs
- ToolStripControlHost.cs
- StateManagedCollection.cs