System.Xml.XmlUtf8RawTextWriter.CharToUTF8 C# (CSharp) Méthode

CharToUTF8() static private méthode

static private CharToUTF8 ( char &pSrc, char pSrcEnd, byte &pDst ) : void
pSrc char
pSrcEnd char
pDst byte
Résultat void
        internal static unsafe void CharToUTF8( ref char * pSrc, char * pSrcEnd, ref byte * pDst ) {
            int ch = *pSrc;
            if ( ch <= 0x7F ) {
                *pDst = (byte)ch;
                pDst++;
                pSrc++;
            }
            else if ( ch >= SurHighStart && ch <= SurLowEnd ) { 
                pDst = EncodeSurrogate( pSrc, pSrcEnd, pDst ); 
                pSrc += 2; 
            } 
            else { 
                pDst = EncodeMultibyteUTF8( ch, pDst ); 
                pSrc++; 
            }
        }

Usage Example

Exemple #1
0
        private unsafe void WriteUriAttributeText(char *pSrc, char *pSrcEnd)
        {
            if (this.endsWithAmpersand)
            {
                if ((((long)((pSrcEnd - pSrc) / 2)) > 0L) && (pSrc[0] != '{'))
                {
                    this.OutputRestAmps();
                }
                this.endsWithAmpersand = false;
            }

            fixed(byte *numRef = base.bufBytes)
            {
                byte *numPtr2;
                byte *pDst = numRef + base.bufPos;
                char  ch   = '\0';

Label_0050:
                numPtr2 = pDst + ((byte *)((long)((pSrcEnd - pSrc) / 2)));
                if (numPtr2 > (numRef + base.bufLen))
                {
                    numPtr2 = numRef + base.bufLen;
                }
                while (((pDst < numPtr2) && ((this.xmlCharType.charProperties[ch = pSrc[0]] & 0x80) != 0)) && (ch < '\x0080'))
                {
                    pDst++;
                    pDst[0] = (byte)ch;
                    pSrc++;
                }
                if (pSrc >= pSrcEnd)
                {
                    goto Label_021D;
                }
                if (pDst >= numPtr2)
                {
                    base.bufPos = (int)((long)((pDst - numRef) / 1));
                    this.FlushBuffer();
                    pDst = numRef + 1;
                    goto Label_0050;
                }
                switch (ch)
                {
                case '\t':
                case '\'':
                case '<':
                case '>':
                    pDst++;
                    pDst[0] = (byte)ch;
                    goto Label_0212;

                case '\n':
                    pDst = XmlUtf8RawTextWriter.LineFeedEntity(pDst);
                    goto Label_0212;

                case '\r':
                    pDst = XmlUtf8RawTextWriter.CarriageReturnEntity(pDst);
                    goto Label_0212;

                case '"':
                    pDst = XmlUtf8RawTextWriter.QuoteEntity(pDst);
                    goto Label_0212;

                case '&':
                    if ((pSrc + 1) != pSrcEnd)
                    {
                        break;
                    }
                    this.endsWithAmpersand = true;
                    goto Label_014E;

                default:
                    fixed(byte *numRef2 = this.uriEscapingBuffer)
                    {
                        byte *numPtr3 = numRef2;
                        byte *numPtr4 = numPtr3;

                        XmlUtf8RawTextWriter.CharToUTF8(ref pSrc, pSrcEnd, ref numPtr4);
                        while (numPtr3 < numPtr4)
                        {
                            pDst++;
                            pDst[0] = 0x25;
                            pDst++;
                            pDst[0] = (byte)"0123456789ABCDEF"[numPtr3[0] >> 4];
                            pDst++;
                            pDst[0] = (byte)"0123456789ABCDEF"[numPtr3[0] & 15];
                            numPtr3++;
                        }
                    }

                    goto Label_0050;
                }
                if (pSrc[1] != '{')
                {
                    pDst = XmlUtf8RawTextWriter.AmpEntity(pDst);
                    goto Label_0212;
                }
Label_014E:
                pDst++;
                pDst[0] = (byte)ch;
Label_0212:
                pSrc++;
                goto Label_0050;
Label_021D:
                base.bufPos = (int)((long)((pDst - numRef) / 1));
            }
        }
All Usage Examples Of System.Xml.XmlUtf8RawTextWriter::CharToUTF8