Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / Xml / System / Xml / Core / CharEntityEncoderFallback.cs / 2 / 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 ) { // 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
- DesignTimeTemplateParser.cs
- DataControlField.cs
- StrokeRenderer.cs
- XXXOnTypeBuilderInstantiation.cs
- DefaultBinder.cs
- dataprotectionpermissionattribute.cs
- HtmlElement.cs
- QuaternionIndependentAnimationStorage.cs
- Shared.cs
- FigureHelper.cs
- MinimizableAttributeTypeConverter.cs
- MetadataPropertyAttribute.cs
- AdornerDecorator.cs
- ClientConfigurationHost.cs
- AsyncPostBackErrorEventArgs.cs
- UIElementAutomationPeer.cs
- HtmlFormAdapter.cs
- ResXDataNode.cs
- CapabilitiesAssignment.cs
- HtmlMeta.cs
- DataServiceRequest.cs
- SqlFormatter.cs
- Simplifier.cs
- ChannelParameterCollection.cs
- TailCallAnalyzer.cs
- ResponseBodyWriter.cs
- SuppressMergeCheckAttribute.cs
- Attributes.cs
- Point3DCollectionConverter.cs
- ToolStripPanelRow.cs
- Visual3D.cs
- NativeMethods.cs
- Vector.cs
- WizardStepBase.cs
- SchemaElementDecl.cs
- ColorConverter.cs
- ExpandableObjectConverter.cs
- WebBrowsableAttribute.cs
- GraphicsPath.cs
- COMException.cs
- MemberDescriptor.cs
- XsltSettings.cs
- SqlUserDefinedAggregateAttribute.cs
- AtomServiceDocumentSerializer.cs
- SingleTagSectionHandler.cs
- PtsCache.cs
- SchemaElementDecl.cs
- NavigationProperty.cs
- objectresult_tresulttype.cs
- HostedBindingBehavior.cs
- XmlDataSourceNodeDescriptor.cs
- DataGridViewCellFormattingEventArgs.cs
- SQLInt64.cs
- CodeCommentStatement.cs
- HeaderUtility.cs
- WebServiceResponseDesigner.cs
- Exceptions.cs
- JsonSerializer.cs
- RewritingValidator.cs
- DataGridViewLinkColumn.cs
- PersistenceMetadataNamespace.cs
- LookupNode.cs
- CryptoStream.cs
- Command.cs
- PolicyChain.cs
- VerificationException.cs
- UndirectedGraph.cs
- ConstructorNeedsTagAttribute.cs
- BulletedListEventArgs.cs
- Transform3DGroup.cs
- DataPagerFieldCommandEventArgs.cs
- ToolStripPanelRow.cs
- ReaderContextStackData.cs
- HuffmanTree.cs
- TraceFilter.cs
- DeploymentSection.cs
- MembershipSection.cs
- PropertyConverter.cs
- SqlCachedBuffer.cs
- SecurityDocument.cs
- ResourceExpressionBuilder.cs
- Wizard.cs
- UdpDiscoveryEndpoint.cs
- CommandManager.cs
- XmlDictionaryReader.cs
- Bitmap.cs
- StringFunctions.cs
- ReferencedAssembly.cs
- SQLByteStorage.cs
- OdbcEnvironment.cs
- XmlILConstructAnalyzer.cs
- ConditionCollection.cs
- FullTextLine.cs
- NotifyIcon.cs
- Int32KeyFrameCollection.cs
- FlowDocumentScrollViewer.cs
- PageBuildProvider.cs
- SiteMembershipCondition.cs
- Translator.cs
- mediaclock.cs