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));
}
}