inline INetMIMEOutputSink
Change-Id: Id76cf021658936301dd6b9685cafe7ece7ffa228 Reviewed-on: https://gerrit.libreoffice.org/44589 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
@@ -240,66 +240,6 @@ inline sal_uInt32 INetMIME::getUTF32Character(const sal_Unicode *& rBegin,
|
||||
return *rBegin++;
|
||||
}
|
||||
|
||||
class INetMIMEOutputSink
|
||||
{
|
||||
private:
|
||||
OStringBuffer m_aBuffer;
|
||||
|
||||
/** Write a sequence of octets.
|
||||
|
||||
@param pBegin Points to the start of the sequence, must not be null.
|
||||
|
||||
@param pEnd Points past the end of the sequence, must be >= pBegin.
|
||||
*/
|
||||
void writeSequence(const sal_Char * pBegin, const sal_Char * pEnd);
|
||||
|
||||
/** Write a null terminated sequence of octets (without the terminating
|
||||
null).
|
||||
|
||||
@param pOctets A null terminated sequence of octets, must not be
|
||||
null.
|
||||
*/
|
||||
void writeSequence(const sal_Char * pSequence);
|
||||
|
||||
public:
|
||||
|
||||
/** Write a single octet.
|
||||
|
||||
@param nOctet Some octet.
|
||||
|
||||
@return This instance.
|
||||
*/
|
||||
inline INetMIMEOutputSink & operator <<(sal_Char nOctet);
|
||||
|
||||
/** Write a null terminated sequence of octets (without the terminating
|
||||
null).
|
||||
|
||||
@param pOctets A null terminated sequence of octets, must not be
|
||||
null.
|
||||
|
||||
@return This instance.
|
||||
*/
|
||||
inline INetMIMEOutputSink & operator <<(const sal_Char * pOctets);
|
||||
|
||||
OString takeBuffer()
|
||||
{
|
||||
return m_aBuffer.makeStringAndClear();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
inline INetMIMEOutputSink & INetMIMEOutputSink::operator <<(sal_Char nOctet)
|
||||
{
|
||||
writeSequence(&nOctet, &nOctet + 1);
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline INetMIMEOutputSink & INetMIMEOutputSink::operator <<(const sal_Char *
|
||||
pOctets)
|
||||
{
|
||||
writeSequence(pOctets);
|
||||
return *this;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -197,38 +197,38 @@ inline sal_Unicode * putUTF32Character(sal_Unicode * pBuffer,
|
||||
return pBuffer;
|
||||
}
|
||||
|
||||
void writeUTF8(INetMIMEOutputSink & rSink, sal_uInt32 nChar)
|
||||
void writeUTF8(OStringBuffer & rSink, sal_uInt32 nChar)
|
||||
{
|
||||
// See RFC 2279 for a discussion of UTF-8.
|
||||
DBG_ASSERT(nChar < 0x80000000, "writeUTF8(): Bad char");
|
||||
|
||||
if (nChar < 0x80)
|
||||
rSink << sal_Char(nChar);
|
||||
rSink.append(sal_Char(nChar));
|
||||
else if (nChar < 0x800)
|
||||
rSink << sal_Char(nChar >> 6 | 0xC0)
|
||||
<< sal_Char((nChar & 0x3F) | 0x80);
|
||||
rSink.append(sal_Char(nChar >> 6 | 0xC0))
|
||||
.append(sal_Char((nChar & 0x3F) | 0x80));
|
||||
else if (nChar < 0x10000)
|
||||
rSink << sal_Char(nChar >> 12 | 0xE0)
|
||||
<< sal_Char((nChar >> 6 & 0x3F) | 0x80)
|
||||
<< sal_Char((nChar & 0x3F) | 0x80);
|
||||
rSink.append(sal_Char(nChar >> 12 | 0xE0))
|
||||
.append(sal_Char((nChar >> 6 & 0x3F) | 0x80))
|
||||
.append(sal_Char((nChar & 0x3F) | 0x80));
|
||||
else if (nChar < 0x200000)
|
||||
rSink << sal_Char(nChar >> 18 | 0xF0)
|
||||
<< sal_Char((nChar >> 12 & 0x3F) | 0x80)
|
||||
<< sal_Char((nChar >> 6 & 0x3F) | 0x80)
|
||||
<< sal_Char((nChar & 0x3F) | 0x80);
|
||||
rSink.append(sal_Char(nChar >> 18 | 0xF0))
|
||||
.append(sal_Char((nChar >> 12 & 0x3F) | 0x80))
|
||||
.append(sal_Char((nChar >> 6 & 0x3F) | 0x80))
|
||||
.append(sal_Char((nChar & 0x3F) | 0x80));
|
||||
else if (nChar < 0x4000000)
|
||||
rSink << sal_Char(nChar >> 24 | 0xF8)
|
||||
<< sal_Char((nChar >> 18 & 0x3F) | 0x80)
|
||||
<< sal_Char((nChar >> 12 & 0x3F) | 0x80)
|
||||
<< sal_Char((nChar >> 6 & 0x3F) | 0x80)
|
||||
<< sal_Char((nChar & 0x3F) | 0x80);
|
||||
rSink.append(sal_Char(nChar >> 24 | 0xF8))
|
||||
.append(sal_Char((nChar >> 18 & 0x3F) | 0x80))
|
||||
.append(sal_Char((nChar >> 12 & 0x3F) | 0x80))
|
||||
.append(sal_Char((nChar >> 6 & 0x3F) | 0x80))
|
||||
.append(sal_Char((nChar & 0x3F) | 0x80));
|
||||
else
|
||||
rSink << sal_Char(nChar >> 30 | 0xFC)
|
||||
<< sal_Char((nChar >> 24 & 0x3F) | 0x80)
|
||||
<< sal_Char((nChar >> 18 & 0x3F) | 0x80)
|
||||
<< sal_Char((nChar >> 12 & 0x3F) | 0x80)
|
||||
<< sal_Char((nChar >> 6 & 0x3F) | 0x80)
|
||||
<< sal_Char((nChar & 0x3F) | 0x80);
|
||||
rSink.append(sal_Char(nChar >> 30 | 0xFC))
|
||||
.append(sal_Char((nChar >> 24 & 0x3F) | 0x80))
|
||||
.append(sal_Char((nChar >> 18 & 0x3F) | 0x80))
|
||||
.append(sal_Char((nChar >> 12 & 0x3F) | 0x80))
|
||||
.append(sal_Char((nChar >> 6 & 0x3F) | 0x80))
|
||||
.append(sal_Char((nChar & 0x3F) | 0x80));
|
||||
}
|
||||
|
||||
bool translateUTF8Char(const sal_Char *& rBegin,
|
||||
@@ -691,7 +691,7 @@ sal_Unicode const * scanParameters(sal_Unicode const * pBegin,
|
||||
}
|
||||
if (pParameters)
|
||||
{
|
||||
INetMIMEOutputSink aSink;
|
||||
OStringBuffer aSink;
|
||||
while (p != pEnd)
|
||||
{
|
||||
auto q = p;
|
||||
@@ -705,14 +705,14 @@ sal_Unicode const * scanParameters(sal_Unicode const * pBegin,
|
||||
int nWeight2 = INetMIME::getHexWeight(p[1]);
|
||||
if (nWeight1 >= 0 && nWeight2 >= 0)
|
||||
{
|
||||
aSink << sal_Char(nWeight1 << 4 | nWeight2);
|
||||
aSink.append(sal_Char(nWeight1 << 4 | nWeight2));
|
||||
p += 2;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
writeUTF8(aSink, nChar);
|
||||
}
|
||||
aValue = aSink.takeBuffer();
|
||||
aValue = aSink.makeStringAndClear();
|
||||
}
|
||||
else
|
||||
while (p != pEnd && (isTokenChar(*p) || !rtl::isAscii(*p)))
|
||||
@@ -721,7 +721,7 @@ sal_Unicode const * scanParameters(sal_Unicode const * pBegin,
|
||||
else if (p != pEnd && *p == '"')
|
||||
if (pParameters)
|
||||
{
|
||||
INetMIMEOutputSink aSink;
|
||||
OStringBuffer aSink;
|
||||
bool bInvalid = false;
|
||||
for (++p;;)
|
||||
{
|
||||
@@ -756,7 +756,7 @@ sal_Unicode const * scanParameters(sal_Unicode const * pBegin,
|
||||
}
|
||||
if (bInvalid)
|
||||
break;
|
||||
aValue = aSink.takeBuffer();
|
||||
aValue = aSink.makeStringAndClear();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1469,19 +1469,4 @@ OUString INetMIME::decodeHeaderFieldBody(const OString& rBody)
|
||||
return sDecoded;
|
||||
}
|
||||
|
||||
void INetMIMEOutputSink::writeSequence(const sal_Char * pBegin,
|
||||
const sal_Char * pEnd)
|
||||
{
|
||||
OSL_ENSURE(pBegin && pBegin <= pEnd,
|
||||
"INetMIMEOutputSink::writeSequence(): Bad sequence");
|
||||
|
||||
m_aBuffer.append(pBegin, pEnd - pBegin);
|
||||
}
|
||||
|
||||
void INetMIMEOutputSink::writeSequence(const sal_Char * pSequence)
|
||||
{
|
||||
sal_Size nLength = rtl_str_getLength(pSequence);
|
||||
writeSequence(pSequence, pSequence + nLength);
|
||||
}
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
|
||||
Reference in New Issue
Block a user