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
- DirectoryInfo.cs
- AssemblyName.cs
- BaseUriHelper.cs
- ToolStripGrip.cs
- TemplateComponentConnector.cs
- TrustLevelCollection.cs
- TransactionProtocolConverter.cs
- SoapProtocolReflector.cs
- SettingsContext.cs
- PointLightBase.cs
- ZoneIdentityPermission.cs
- Peer.cs
- PropertyGrid.cs
- NameTable.cs
- Authorization.cs
- M3DUtil.cs
- CommandSet.cs
- TreeWalkHelper.cs
- CatchBlock.cs
- FormatSettings.cs
- FlowNode.cs
- ToolboxItemFilterAttribute.cs
- CoTaskMemHandle.cs
- IERequestCache.cs
- HttpResponseInternalWrapper.cs
- SqlXmlStorage.cs
- SqlFileStream.cs
- RenderDataDrawingContext.cs
- ValidationPropertyAttribute.cs
- Transactions.cs
- XPathParser.cs
- AtlasWeb.Designer.cs
- DiscoveryCallbackBehavior.cs
- ToolStripItemImageRenderEventArgs.cs
- UrlEncodedParameterWriter.cs
- SystemIPGlobalStatistics.cs
- ListChangedEventArgs.cs
- Timeline.cs
- Symbol.cs
- FileLevelControlBuilderAttribute.cs
- ControlValuePropertyAttribute.cs
- FontCacheUtil.cs
- ChildChangedEventArgs.cs
- SystemInfo.cs
- DateTimeParse.cs
- SmiXetterAccessMap.cs
- HostedHttpContext.cs
- IntermediatePolicyValidator.cs
- ExpandableObjectConverter.cs
- Completion.cs
- Operator.cs
- PartialTrustHelpers.cs
- UTF32Encoding.cs
- Pens.cs
- DataSysAttribute.cs
- SchemaObjectWriter.cs
- FillRuleValidation.cs
- Invariant.cs
- AssemblyHelper.cs
- HandleRef.cs
- DiscriminatorMap.cs
- BamlTreeMap.cs
- ChangeInterceptorAttribute.cs
- SafeHandles.cs
- FontWeightConverter.cs
- KeySpline.cs
- CommonDialog.cs
- ImportCatalogPart.cs
- DataObject.cs
- ConnectionPoint.cs
- EntityRecordInfo.cs
- Stream.cs
- Stacktrace.cs
- PeerCollaboration.cs
- OdbcParameter.cs
- ApplicationFileCodeDomTreeGenerator.cs
- CompilerGeneratedAttribute.cs
- LogManagementAsyncResult.cs
- WebPartEditorCancelVerb.cs
- DynamicMethod.cs
- ImageCodecInfoPrivate.cs
- Sorting.cs
- OracleCommand.cs
- NavigateEvent.cs
- Matrix3D.cs
- LocatorBase.cs
- PartialClassGenerationTaskInternal.cs
- DelegatedStream.cs
- DynamicFilterExpression.cs
- M3DUtil.cs
- DockEditor.cs
- SafeNativeMethods.cs
- DocumentXmlWriter.cs
- ExpressionCopier.cs
- MULTI_QI.cs
- PartialCachingControl.cs
- ProviderCommandInfoUtils.cs
- SqlConnectionStringBuilder.cs
- PointAnimationUsingKeyFrames.cs
- PreProcessor.cs