System.Xml.XmlTextEncoder.Write C# (CSharp) Method

Write() private method

private Write ( char array, int offset, int count ) : void
array char
offset int
count int
return void
        internal void Write( char[] array, int offset, int count ) {
            if ( null == array ) {
                throw new ArgumentNullException("array");
            }

            if ( 0 > offset ) {
                throw new ArgumentOutOfRangeException("offset");
            }

            if ( 0 > count ) {
                throw new ArgumentOutOfRangeException("count");
            }

            if ( count > array.Length - offset ) {
                throw new ArgumentOutOfRangeException("count");
            }

            if ( cacheAttrValue ) {
                attrValue.Append( array, offset, count );
            }

            int endPos = offset + count;
            int i = offset;
            char ch = (char)0;
            for (;;) {
                int startPos = i;
                unsafe {
                    while ( i < endPos && ( xmlCharType.charProperties[ch = array[i]] & XmlCharType.fAttrValue ) != 0 ) { // ( xmlCharType.IsAttributeValueChar( ( ch = array[i] ) ) ) ) {
                        i++;
                    }
                }

                if ( startPos < i ) {
                    textWriter.Write( array, startPos, i - startPos );
                }
                if ( i == endPos ) {
                    break;
                }

                switch ( ch ) {
                    case (char)0x9:
                        textWriter.Write( ch );
                        break;
                    case (char)0xA:
                    case (char)0xD:
                        if ( inAttribute ) {
                            WriteCharEntityImpl( ch );
                        }
                        else {
                            textWriter.Write( ch );
                        }
                        break;

                    case '<':
                        WriteEntityRefImpl( "lt" );
                        break;
                    case '>':
                        WriteEntityRefImpl( "gt" );
                        break;
                    case '&':
                        WriteEntityRefImpl( "amp" );
                        break;
                    case '\'':
                        if ( inAttribute && quoteChar == ch ) {
                            WriteEntityRefImpl( "apos" );
                        }
                        else {
                            textWriter.Write( '\'' );
                        }
                        break;
                    case '"':
                        if ( inAttribute && quoteChar == ch ) {
                            WriteEntityRefImpl( "quot" );
                        }
                        else {
                            textWriter.Write( '"' );
                        }
                        break;
                    default:
                        if ( (int)ch >= SurHighStart && (int)ch <= SurHighEnd ) {
                            if ( i + 1 < endPos ) {
                                WriteSurrogateChar( array[++i], ch );
                            }
                            else {
                                throw new ArgumentException( Res.GetString( Res.Xml_SurrogatePairSplit ) );
                            }
                        }
                        else if ( (int)ch >= SurLowStart && (int)ch <= SurLowEnd ) {
                            throw XmlConvert.CreateInvalidHighSurrogateCharException( ch );
                        }
                        else {
                            Debug.Assert( ( ch < 0x20 && !xmlCharType.IsWhiteSpace( ch ) ) || ( ch > 0xFFFD ) );
                            WriteCharEntityImpl( ch );
                        }
                        break;
                }
                i++;
            }
        }

Same methods

XmlTextEncoder::Write ( char ch ) : void
XmlTextEncoder::Write ( string text ) : void