Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Int32Rect.cs
- ControlBuilder.cs
- ToolStripGripRenderEventArgs.cs
- EmbeddedMailObject.cs
- HttpCapabilitiesBase.cs
- BuildResultCache.cs
- RankException.cs
- CompilerErrorCollection.cs
- WindowsScrollBar.cs
- SmiRequestExecutor.cs
- Comparer.cs
- UseLicense.cs
- CustomGrammar.cs
- ResourceSet.cs
- SiblingIterators.cs
- JsonWriterDelegator.cs
- Bold.cs
- MouseOverProperty.cs
- ColorConvertedBitmap.cs
- XmlSchemaAll.cs
- ColorBuilder.cs
- ImageDrawing.cs
- ImageIndexConverter.cs
- ResourceIDHelper.cs
- SqlXmlStorage.cs
- OdbcEnvironment.cs
- CaseInsensitiveComparer.cs
- AuthenticationSection.cs
- StrongName.cs
- UnhandledExceptionEventArgs.cs
- InputBuffer.cs
- LocationSectionRecord.cs
- CellLabel.cs
- ProfileEventArgs.cs
- PeerCollaboration.cs
- ConfigXmlDocument.cs
- AnnotationMap.cs
- RemoveStoryboard.cs
- BaseCodePageEncoding.cs
- PasswordBoxAutomationPeer.cs
- CodeSnippetExpression.cs
- WhitespaceRuleReader.cs
- ByeOperation11AsyncResult.cs
- ClientSettingsStore.cs
- TextBoxBase.cs
- StrongName.cs
- MsmqSecureHashAlgorithm.cs
- Debug.cs
- HtmlHead.cs
- SafeIUnknown.cs
- RuleEngine.cs
- CheckPair.cs
- RawAppCommandInputReport.cs
- ModelTypeConverter.cs
- MetadataResolver.cs
- ValidatingReaderNodeData.cs
- LocationReferenceValue.cs
- IntSecurity.cs
- CodeAttachEventStatement.cs
- ConfigurationPropertyCollection.cs
- SafeProcessHandle.cs
- XDRSchema.cs
- ListViewItemSelectionChangedEvent.cs
- TraceHandlerErrorFormatter.cs
- VisualBrush.cs
- TransactionTraceIdentifier.cs
- DockPanel.cs
- PermissionSet.cs
- FixedSOMContainer.cs
- FlowDocumentPage.cs
- DesignTimeParseData.cs
- ParameterCollection.cs
- DataGridViewLinkColumn.cs
- OutOfProcStateClientManager.cs
- CodeAccessSecurityEngine.cs
- ReflectionHelper.cs
- keycontainerpermission.cs
- WebPartVerbCollection.cs
- dbenumerator.cs
- Math.cs
- TableItemPattern.cs
- ScriptReference.cs
- WindowsComboBox.cs
- X509Certificate2.cs
- DictionaryKeyPropertyAttribute.cs
- DecimalAnimationUsingKeyFrames.cs
- XmlLoader.cs
- OleAutBinder.cs
- ColumnWidthChangingEvent.cs
- ReceiveActivityDesignerTheme.cs
- OAVariantLib.cs
- GifBitmapDecoder.cs
- documentsequencetextcontainer.cs
- ComplexPropertyEntry.cs
- RegexMatchCollection.cs
- Internal.cs
- HttpsHostedTransportConfiguration.cs
- AssertUtility.cs
- ObjectDisposedException.cs
- Button.cs