diff options
author | Norbert Thiebaud <nthiebaud@gmail.com> | 2012-11-27 02:35:09 -0600 |
---|---|---|
committer | Norbert Thiebaud <nthiebaud@gmail.com> | 2012-11-27 23:00:05 -0600 |
commit | c33019b36d613f951787ce9836e34d74bfbd6a1b (patch) | |
tree | 02487f1fda25b81ae43c50c69f2c12c4583aa23e /svl/source/misc/adrparse.cxx | |
parent | 6922a0b190e3877cfae1ca08bfe86e0a010e9d86 (diff) |
String->OUString in svl urifilter and restrictedpaths
Change-Id: If11b8752c3aa21554c3ee06de07d63639695e284
Diffstat (limited to 'svl/source/misc/adrparse.cxx')
-rw-r--r-- | svl/source/misc/adrparse.cxx | 618 |
1 files changed, 302 insertions, 316 deletions
diff --git a/svl/source/misc/adrparse.cxx b/svl/source/misc/adrparse.cxx index fd5553e2e083..b8914eaca053 100644 --- a/svl/source/misc/adrparse.cxx +++ b/svl/source/misc/adrparse.cxx @@ -106,14 +106,14 @@ class SvAddressParser_Impl bool readToken(); - static rtl::OUString reparse(sal_Unicode const * pBegin, - sal_Unicode const * pEnd, bool bAddrSpec); + static OUString reparse(sal_Unicode const * pBegin, + sal_Unicode const * pEnd, bool bAddrSpec); - static rtl::OUString reparseComment(sal_Unicode const * pBegin, - sal_Unicode const * pEnd); + static OUString reparseComment(sal_Unicode const * pBegin, + sal_Unicode const * pEnd); public: - SvAddressParser_Impl(SvAddressParser * pParser, const rtl::OUString& rIn); + SvAddressParser_Impl(SvAddressParser * pParser, const OUString& rIn); }; inline void SvAddressParser_Impl::resetRealNameAndFirstComment() @@ -229,7 +229,7 @@ bool SvAddressParser_Impl::readToken() m_pCurTokenContentBegin = 0; m_pCurTokenContentEnd = 0; bool bEscaped = false; - xub_StrLen nLevel = 0; + int nLevel = 0; for (;;) { if (m_pInputPos >= m_pInputEnd) @@ -318,112 +318,112 @@ bool SvAddressParser_Impl::readToken() //============================================================================ // static -rtl::OUString SvAddressParser_Impl::reparse(sal_Unicode const * pBegin, - sal_Unicode const * pEnd, bool bAddrSpec) +OUString SvAddressParser_Impl::reparse(sal_Unicode const * pBegin, + sal_Unicode const * pEnd, bool bAddrSpec) { - rtl::OUStringBuffer aResult; + OUStringBuffer aResult; TokenType eMode = TOKEN_ATOM; bool bEscaped = false; bool bEndsWithSpace = false; - xub_StrLen nLevel = 0; + int nLevel = 0; while (pBegin < pEnd) { sal_Unicode cChar = *pBegin++; switch (eMode) { - case TOKEN_QUOTED: - if (bEscaped) - { + case TOKEN_QUOTED: + if (bEscaped) + { + aResult.append(cChar); + bEscaped = false; + } + else if (cChar == '"') + { + if (bAddrSpec) aResult.append(cChar); - bEscaped = false; - } - else if (cChar == '"') - { - if (bAddrSpec) - aResult.append(cChar); - eMode = TOKEN_ATOM; - } - else if (cChar == '\\') - { - if (bAddrSpec) - aResult.append(cChar); - bEscaped = true; - } - else + eMode = TOKEN_ATOM; + } + else if (cChar == '\\') + { + if (bAddrSpec) aResult.append(cChar); - break; + bEscaped = true; + } + else + aResult.append(cChar); + break; - case TOKEN_DOMAIN: - if (bEscaped) - { + case TOKEN_DOMAIN: + if (bEscaped) + { + aResult.append(cChar); + bEscaped = false; + } + else if (cChar == ']') + { + aResult.append(cChar); + eMode = TOKEN_ATOM; + } + else if (cChar == '\\') + { + if (bAddrSpec) aResult.append(cChar); - bEscaped = false; + bEscaped = true; + } + else + aResult.append(cChar); + break; + + case TOKEN_COMMENT: + if (bEscaped) + bEscaped = false; + else if (cChar == '(') + ++nLevel; + else if (cChar == ')') + if (nLevel) + --nLevel; + else + eMode = TOKEN_ATOM; + else if (cChar == '\\') + bEscaped = true; + break; + + case TOKEN_ATOM: + if (cChar <= ' ' || cChar == 0x7F) // DEL + { + if (!bAddrSpec && !bEndsWithSpace) + { + aResult.append(' '); + bEndsWithSpace = true; } - else if (cChar == ']') + } + else if (cChar == '(') + { + if (!bAddrSpec && !bEndsWithSpace) { - aResult.append(cChar); - eMode = TOKEN_ATOM; + aResult.append(' '); + bEndsWithSpace = true; } - else if (cChar == '\\') + eMode = TOKEN_COMMENT; + } + else + { + bEndsWithSpace = false; + if (cChar == '"') { if (bAddrSpec) aResult.append(cChar); - bEscaped = true; - } - else - aResult.append(cChar); - break; - - case TOKEN_COMMENT: - if (bEscaped) - bEscaped = false; - else if (cChar == '(') - ++nLevel; - else if (cChar == ')') - if (nLevel) - --nLevel; - else - eMode = TOKEN_ATOM; - else if (cChar == '\\') - bEscaped = true; - break; - - case TOKEN_ATOM: - if (cChar <= ' ' || cChar == 0x7F) // DEL - { - if (!bAddrSpec && !bEndsWithSpace) - { - aResult.append(' '); - bEndsWithSpace = true; - } + eMode = TOKEN_QUOTED; } - else if (cChar == '(') + else if (cChar == '[') { - if (!bAddrSpec && !bEndsWithSpace) - { - aResult.append(' '); - bEndsWithSpace = true; - } - eMode = TOKEN_COMMENT; + aResult.append(cChar); + eMode = TOKEN_QUOTED; } else - { - bEndsWithSpace = false; - if (cChar == '"') - { - if (bAddrSpec) - aResult.append(cChar); - eMode = TOKEN_QUOTED; - } - else if (cChar == '[') - { - aResult.append(cChar); - eMode = TOKEN_QUOTED; - } - else - aResult.append(cChar); - } - break; + aResult.append(cChar); + } + break; } } return aResult.makeStringAndClear(); @@ -431,10 +431,10 @@ rtl::OUString SvAddressParser_Impl::reparse(sal_Unicode const * pBegin, //============================================================================ // static -rtl::OUString SvAddressParser_Impl::reparseComment(sal_Unicode const * pBegin, - sal_Unicode const * pEnd) +OUString SvAddressParser_Impl::reparseComment(sal_Unicode const * pBegin, + sal_Unicode const * pEnd) { - rtl::OUStringBuffer aResult; + OUStringBuffer aResult; while (pBegin < pEnd) { sal_Unicode cChar = *pBegin++; @@ -447,7 +447,7 @@ rtl::OUString SvAddressParser_Impl::reparseComment(sal_Unicode const * pBegin, //============================================================================ SvAddressParser_Impl::SvAddressParser_Impl(SvAddressParser * pParser, - const rtl::OUString& rInput) + const OUString& rInput) { m_pInputPos = rInput.getStr(); m_pInputEnd = m_pInputPos + rInput.getLength(); @@ -469,272 +469,258 @@ SvAddressParser_Impl::SvAddressParser_Impl(SvAddressParser * pParser, } switch (m_nCurToken) { - case TOKEN_QUOTED: - if (m_pAddrSpec->m_eLastElem != ELEMENT_END) - { - if (m_pAddrSpec->m_bAtFound - || m_pAddrSpec->m_eLastElem <= ELEMENT_DELIM) - m_pAddrSpec->reset(); - addTokenToAddrSpec(ELEMENT_ITEM); - } - if (!m_bRealNameFinished && m_eState != AFTER_LESS) + case TOKEN_QUOTED: + if (m_pAddrSpec->m_eLastElem != ELEMENT_END) + { + if (m_pAddrSpec->m_bAtFound + || m_pAddrSpec->m_eLastElem <= ELEMENT_DELIM) + m_pAddrSpec->reset(); + addTokenToAddrSpec(ELEMENT_ITEM); + } + if (!m_bRealNameFinished && m_eState != AFTER_LESS) + { + if (m_bCurTokenReparse) { - if (m_bCurTokenReparse) - { - if (!m_pRealNameBegin) - m_pRealNameBegin = m_pCurTokenBegin; - m_pRealNameEnd = m_pCurTokenEnd; - m_bRealNameReparse = true; - } - else if (m_bRealNameReparse) - m_pRealNameEnd = m_pCurTokenEnd; - else if (!m_pRealNameBegin) - { + if (!m_pRealNameBegin) m_pRealNameBegin = m_pCurTokenBegin; - m_pRealNameContentBegin = m_pCurTokenContentBegin; - m_pRealNameEnd = m_pRealNameContentEnd - = m_pCurTokenContentEnd; - } - else - { - m_pRealNameEnd = m_pCurTokenEnd; - m_bRealNameReparse = true; - } + m_pRealNameEnd = m_pCurTokenEnd; + m_bRealNameReparse = true; } - m_eType = TOKEN_ATOM; - break; - - case TOKEN_DOMAIN: - if (m_pAddrSpec->m_eLastElem != ELEMENT_END) + else if (m_bRealNameReparse) + m_pRealNameEnd = m_pCurTokenEnd; + else if (!m_pRealNameBegin) { - if (m_pAddrSpec->m_bAtFound - && m_pAddrSpec->m_eLastElem == ELEMENT_DELIM) - addTokenToAddrSpec(ELEMENT_ITEM); - else - m_pAddrSpec->reset(); + m_pRealNameBegin = m_pCurTokenBegin; + m_pRealNameContentBegin = m_pCurTokenContentBegin; + m_pRealNameEnd = m_pRealNameContentEnd = m_pCurTokenContentEnd; } - addTokenToRealName(); - m_eType = TOKEN_ATOM; - break; - - case TOKEN_COMMENT: - if (!m_bRealNameFinished && m_eState != AFTER_LESS - && !m_pFirstCommentBegin && m_pCurTokenContentBegin) + else { - m_pFirstCommentBegin = m_pCurTokenContentBegin; - m_pFirstCommentEnd = m_pCurTokenContentEnd; - m_bFirstCommentReparse = m_bCurTokenReparse; + m_pRealNameEnd = m_pCurTokenEnd; + m_bRealNameReparse = true; } - m_eType = TOKEN_ATOM; - break; + } + m_eType = TOKEN_ATOM; + break; - case TOKEN_ATOM: - if (m_pAddrSpec->m_eLastElem != ELEMENT_END) - { - if (m_pAddrSpec->m_eLastElem != ELEMENT_DELIM) - m_pAddrSpec->reset(); + case TOKEN_DOMAIN: + if (m_pAddrSpec->m_eLastElem != ELEMENT_END) + { + if (m_pAddrSpec->m_bAtFound && m_pAddrSpec->m_eLastElem == ELEMENT_DELIM) addTokenToAddrSpec(ELEMENT_ITEM); - } - addTokenToRealName(); + else + m_pAddrSpec->reset(); + } + addTokenToRealName(); + m_eType = TOKEN_ATOM; + break; + + case TOKEN_COMMENT: + if (!m_bRealNameFinished && m_eState != AFTER_LESS + && !m_pFirstCommentBegin && m_pCurTokenContentBegin) + { + m_pFirstCommentBegin = m_pCurTokenContentBegin; + m_pFirstCommentEnd = m_pCurTokenContentEnd; + m_bFirstCommentReparse = m_bCurTokenReparse; + } + m_eType = TOKEN_ATOM; + break; + + case TOKEN_ATOM: + if (m_pAddrSpec->m_eLastElem != ELEMENT_END) + { + if (m_pAddrSpec->m_eLastElem != ELEMENT_DELIM) + m_pAddrSpec->reset(); + addTokenToAddrSpec(ELEMENT_ITEM); + } + addTokenToRealName(); + break; + + case '(': + m_eType = TOKEN_COMMENT; + break; + + case ')': + case '\\': + case ']': + m_pAddrSpec->finish(); + addTokenToRealName(); + break; + + case '<': + switch (m_eState) + { + case BEFORE_COLON: + case BEFORE_LESS: + m_aOuterAddrSpec.finish(); + if (m_pRealNameBegin) + m_bRealNameFinished = true; + m_pAddrSpec = &m_aInnerAddrSpec; + m_eState = AFTER_LESS; break; - case '(': - m_eType = TOKEN_COMMENT; + case AFTER_LESS: + m_aInnerAddrSpec.finish(); break; - case ')': - case '\\': - case ']': - m_pAddrSpec->finish(); + case AFTER_GREATER: + m_aOuterAddrSpec.finish(); addTokenToRealName(); break; + } + break; - case '<': - switch (m_eState) + case '>': + if (m_eState == AFTER_LESS) + { + m_aInnerAddrSpec.finish(); + if (m_aInnerAddrSpec.isValid()) + m_aOuterAddrSpec.m_eLastElem = ELEMENT_END; + m_pAddrSpec = &m_aOuterAddrSpec; + m_eState = AFTER_GREATER; + } + else + { + m_aOuterAddrSpec.finish(); + addTokenToRealName(); + } + break; + + case '@': + if (m_pAddrSpec->m_eLastElem != ELEMENT_END) + { + if (!m_pAddrSpec->m_bAtFound + && m_pAddrSpec->m_eLastElem == ELEMENT_ITEM) { - case BEFORE_COLON: - case BEFORE_LESS: - m_aOuterAddrSpec.finish(); - if (m_pRealNameBegin) - m_bRealNameFinished = true; - m_pAddrSpec = &m_aInnerAddrSpec; - m_eState = AFTER_LESS; - break; - - case AFTER_LESS: - m_aInnerAddrSpec.finish(); - break; - - case AFTER_GREATER: - m_aOuterAddrSpec.finish(); - addTokenToRealName(); - break; + addTokenToAddrSpec(ELEMENT_DELIM); + m_pAddrSpec->m_bAtFound = true; } - break; + else + m_pAddrSpec->reset(); + } + addTokenToRealName(); + break; - case '>': - if (m_eState == AFTER_LESS) + case ',': + case ';': + if (m_eState == AFTER_LESS) + if (m_nCurToken == ',') { + if (m_aInnerAddrSpec.m_eLastElem != ELEMENT_END) + m_aInnerAddrSpec.reset(); + } + else m_aInnerAddrSpec.finish(); - if (m_aInnerAddrSpec.isValid()) - m_aOuterAddrSpec.m_eLastElem = ELEMENT_END; + else + { + if(m_aInnerAddrSpec.isValid() || (!m_aOuterAddrSpec.isValid() && m_aInnerAddrSpec.isPoorlyValid())) + { + m_pAddrSpec = &m_aInnerAddrSpec; + } + else if(m_aOuterAddrSpec.isPoorlyValid()) + { m_pAddrSpec = &m_aOuterAddrSpec; - m_eState = AFTER_GREATER; } else { - m_aOuterAddrSpec.finish(); - addTokenToRealName(); + m_pAddrSpec = 0; } - break; - case '@': - if (m_pAddrSpec->m_eLastElem != ELEMENT_END) + if (m_pAddrSpec) { - if (!m_pAddrSpec->m_bAtFound - && m_pAddrSpec->m_eLastElem == ELEMENT_ITEM) + OUString aTheAddrSpec; + if (m_pAddrSpec->m_bReparse) + aTheAddrSpec = reparse(m_pAddrSpec->m_pBegin, m_pAddrSpec->m_pEnd, true); + else { - addTokenToAddrSpec(ELEMENT_DELIM); - m_pAddrSpec->m_bAtFound = true; + sal_Int32 nLen = ( m_pAddrSpec->m_pEnd - m_pAddrSpec->m_pBegin); + if (nLen == rInput.getLength()) + aTheAddrSpec = rInput; + else + aTheAddrSpec = rInput.copy( (m_pAddrSpec->m_pBegin - rInput.getStr()), + nLen); } - else - m_pAddrSpec->reset(); - } - addTokenToRealName(); - break; - - case ',': - case ';': - if (m_eState == AFTER_LESS) - if (m_nCurToken == ',') + OUString aTheRealName; + if (!m_pRealNameBegin || + (m_pAddrSpec == &m_aOuterAddrSpec && + m_pRealNameBegin == m_aOuterAddrSpec.m_pBegin && + m_pRealNameEnd == m_aOuterAddrSpec.m_pEnd && + m_pFirstCommentBegin)) { - if (m_aInnerAddrSpec.m_eLastElem - != ELEMENT_END) - m_aInnerAddrSpec.reset(); + if (!m_pFirstCommentBegin) + aTheRealName = aTheAddrSpec; + else if (m_bFirstCommentReparse) + aTheRealName = reparseComment(m_pFirstCommentBegin, + m_pFirstCommentEnd); + else + aTheRealName = rInput.copy( (m_pFirstCommentBegin - rInput.getStr()), + (m_pFirstCommentEnd - m_pFirstCommentBegin)); } + else if (m_bRealNameReparse) + aTheRealName = reparse(m_pRealNameBegin, m_pRealNameEnd, false); else - m_aInnerAddrSpec.finish(); - else - { - m_pAddrSpec = m_aInnerAddrSpec.isValid() - || (!m_aOuterAddrSpec.isValid() - && m_aInnerAddrSpec.isPoorlyValid()) ? - &m_aInnerAddrSpec : - m_aOuterAddrSpec.isPoorlyValid() ? - &m_aOuterAddrSpec : 0; - if (m_pAddrSpec) { - rtl::OUString aTheAddrSpec; - if (m_pAddrSpec->m_bReparse) - aTheAddrSpec = reparse(m_pAddrSpec->m_pBegin, - m_pAddrSpec->m_pEnd, true); + sal_Int32 nLen = (m_pRealNameContentEnd - m_pRealNameContentBegin); + if (nLen == rInput.getLength()) + aTheRealName = rInput; else - { - sal_Int32 nLen = ( - m_pAddrSpec->m_pEnd - - m_pAddrSpec->m_pBegin); - if (nLen == rInput.getLength()) - aTheAddrSpec = rInput; - else - aTheAddrSpec - = rInput.copy( - (m_pAddrSpec->m_pBegin - - rInput.getStr()), - nLen); - } - rtl::OUString aTheRealName; - if (!m_pRealNameBegin - || (m_pAddrSpec == &m_aOuterAddrSpec - && m_pRealNameBegin - == m_aOuterAddrSpec.m_pBegin - && m_pRealNameEnd == m_aOuterAddrSpec.m_pEnd - && m_pFirstCommentBegin)) - if (!m_pFirstCommentBegin) - aTheRealName = aTheAddrSpec; - else if (m_bFirstCommentReparse) - aTheRealName - = reparseComment(m_pFirstCommentBegin, - m_pFirstCommentEnd); - else - aTheRealName - = rInput.copy( - (m_pFirstCommentBegin - - rInput.getStr()), - (m_pFirstCommentEnd - - m_pFirstCommentBegin)); - else if (m_bRealNameReparse) - aTheRealName = reparse(m_pRealNameBegin, - m_pRealNameEnd, false); - else - { - sal_Int32 nLen = - (m_pRealNameContentEnd - - m_pRealNameContentBegin); - if (nLen == rInput.getLength()) - aTheRealName = rInput; - else - aTheRealName - = rInput.copy( - (m_pRealNameContentBegin - - rInput.getStr()), nLen); - } - if (pParser->m_bHasFirst) - pParser->m_aRest.push_back(new SvAddressEntry_Impl( - aTheAddrSpec, - aTheRealName) - ); - else - { - pParser->m_bHasFirst = true; - pParser->m_aFirst.m_aAddrSpec = aTheAddrSpec; - pParser->m_aFirst.m_aRealName = aTheRealName; - } + aTheRealName = rInput.copy( (m_pRealNameContentBegin - rInput.getStr()), nLen); + } + if (pParser->m_bHasFirst) + pParser->m_aRest.push_back(new SvAddressEntry_Impl( aTheAddrSpec, + aTheRealName) ); + else + { + pParser->m_bHasFirst = true; + pParser->m_aFirst.m_aAddrSpec = aTheAddrSpec; + pParser->m_aFirst.m_aRealName = aTheRealName; } - if (bDone) - return; - reset(); - } - break; - - case ':': - switch (m_eState) - { - case BEFORE_COLON: - m_aOuterAddrSpec.reset(); - resetRealNameAndFirstComment(); - m_eState = BEFORE_LESS; - break; - - case BEFORE_LESS: - case AFTER_GREATER: - m_aOuterAddrSpec.finish(); - addTokenToRealName(); - break; - - case AFTER_LESS: - m_aInnerAddrSpec.reset(); - break; } - break; + if (bDone) + return; + reset(); + } + break; - case '"': - m_eType = TOKEN_QUOTED; + case ':': + switch (m_eState) + { + case BEFORE_COLON: + m_aOuterAddrSpec.reset(); + resetRealNameAndFirstComment(); + m_eState = BEFORE_LESS; break; - case '.': - if (m_pAddrSpec->m_eLastElem != ELEMENT_END) - { - if (m_pAddrSpec->m_eLastElem != ELEMENT_DELIM) - addTokenToAddrSpec(ELEMENT_DELIM); - else - m_pAddrSpec->reset(); - } + case BEFORE_LESS: + case AFTER_GREATER: + m_aOuterAddrSpec.finish(); addTokenToRealName(); break; - case '[': - m_eType = TOKEN_DOMAIN; + case AFTER_LESS: + m_aInnerAddrSpec.reset(); break; + } + break; + + case '"': + m_eType = TOKEN_QUOTED; + break; + + case '.': + if (m_pAddrSpec->m_eLastElem != ELEMENT_END) + { + if (m_pAddrSpec->m_eLastElem != ELEMENT_DELIM) + addTokenToAddrSpec(ELEMENT_DELIM); + else + m_pAddrSpec->reset(); + } + addTokenToRealName(); + break; + + case '[': + m_eType = TOKEN_DOMAIN; + break; } } } @@ -745,7 +731,7 @@ SvAddressParser_Impl::SvAddressParser_Impl(SvAddressParser * pParser, // //============================================================================ -SvAddressParser::SvAddressParser(const rtl::OUString& rInput) +SvAddressParser::SvAddressParser(const OUString& rInput) : m_bHasFirst(false) { SvAddressParser_Impl aDoParse(this, rInput); |