aboutsummaryrefslogtreecommitdiffstats
path: root/src/disposition.cpp
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2013-12-29 09:02:12 +0000
committerVincent Richard <[email protected]>2013-12-29 09:02:12 +0000
commit152c6bed75598a6ca5efb7914701157270155833 (patch)
tree8faced1d75a45c819630323da256248415992ed0 /src/disposition.cpp
parentMerge branch 'master' of https://github.com/kisli/vmime (diff)
downloadvmime-152c6bed75598a6ca5efb7914701157270155833.tar.gz
vmime-152c6bed75598a6ca5efb7914701157270155833.zip
Merged source and header files in directory structure. Got rid of SConstruct build.
Diffstat (limited to 'src/disposition.cpp')
-rw-r--r--src/disposition.cpp329
1 files changed, 0 insertions, 329 deletions
diff --git a/src/disposition.cpp b/src/disposition.cpp
deleted file mode 100644
index 352d3251..00000000
--- a/src/disposition.cpp
+++ /dev/null
@@ -1,329 +0,0 @@
-//
-// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 3 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// Linking this library statically or dynamically with other modules is making
-// a combined work based on this library. Thus, the terms and conditions of
-// the GNU General Public License cover the whole combination.
-//
-
-#include "vmime/disposition.hpp"
-
-#include "vmime/parserHelpers.hpp"
-#include "vmime/utility/stringUtils.hpp"
-
-
-namespace vmime
-{
-
-
-disposition::disposition()
-{
-}
-
-
-disposition::disposition(const string& actionMode, const string& sendingMode,
- const string& type, const string& modifier)
- : m_actionMode(actionMode), m_sendingMode(sendingMode), m_type(type)
-{
- m_modifiers.push_back(modifier);
-}
-
-
-shared_ptr <component> disposition::clone() const
-{
- shared_ptr <disposition> disp = make_shared <disposition>();
-
- disp->m_actionMode = m_actionMode;
- disp->m_sendingMode = m_sendingMode;
- disp->m_type = m_type;
- disp->m_modifiers.resize(m_modifiers.size());
-
- std::copy(m_modifiers.begin(), m_modifiers.end(), disp->m_modifiers.begin());
-
- return (disp);
-}
-
-
-void disposition::copyFrom(const component& other)
-{
- const disposition& disp = dynamic_cast <const disposition&>(other);
-
- m_actionMode = disp.m_actionMode;
- m_sendingMode = disp.m_sendingMode;
- m_type = disp.m_type;
- m_modifiers.resize(disp.m_modifiers.size());
-
- std::copy(disp.m_modifiers.begin(), disp.m_modifiers.end(), m_modifiers.begin());
-}
-
-
-disposition& disposition::operator=(const disposition& other)
-{
- copyFrom(other);
- return (*this);
-}
-
-
-const std::vector <shared_ptr <component> > disposition::getChildComponents()
-{
- return std::vector <shared_ptr <component> >();
-}
-
-
-void disposition::setActionMode(const string& mode)
-{
- m_actionMode = mode;
-}
-
-
-const string& disposition::getActionMode() const
-{
- return (m_actionMode);
-}
-
-
-void disposition::setSendingMode(const string& mode)
-{
- m_sendingMode = mode;
-}
-
-
-const string& disposition::getSendingMode() const
-{
- return (m_sendingMode);
-}
-
-
-void disposition::setType(const string& type)
-{
- m_type = type;
-}
-
-
-const string& disposition::getType() const
-{
- return (m_type);
-}
-
-
-void disposition::addModifier(const string& modifier)
-{
- if (!hasModifier(modifier))
- m_modifiers.push_back(utility::stringUtils::toLower(modifier));
-}
-
-
-void disposition::removeModifier(const string& modifier)
-{
- const string modifierLC = utility::stringUtils::toLower(modifier);
-
- for (std::vector <string>::iterator it = m_modifiers.begin() ;
- it != m_modifiers.end() ; ++it)
- {
- if (*it == modifierLC)
- {
- m_modifiers.erase(it);
- break;
- }
- }
-}
-
-
-void disposition::removeAllModifiers()
-{
- m_modifiers.clear();
-}
-
-
-bool disposition::hasModifier(const string& modifier) const
-{
- const string modifierLC = utility::stringUtils::toLower(modifier);
-
- for (std::vector <string>::const_iterator it = m_modifiers.begin() ;
- it != m_modifiers.end() ; ++it)
- {
- if (*it == modifierLC)
- return (true);
- }
-
- return (false);
-}
-
-
-const std::vector <string> disposition::getModifierList() const
-{
- return (m_modifiers);
-}
-
-
-void disposition::parseImpl
- (const parsingContext& /* ctx */, const string& buffer, const size_t position,
- const size_t end, size_t* newPosition)
-{
- // disposition-mode ";" disposition-type
- // [ "/" disposition-modifier *( "," disposition-modifier ) ]
- //
- // disposition-mode = action-mode "/" sending-mode
-
- size_t pos = position;
-
- while (pos < end && parserHelpers::isSpace(buffer[pos]))
- ++pos;
-
- // -- disposition-mode
- const size_t modeStart = pos;
- size_t modeEnd = pos;
-
- while (pos < end && buffer[pos] != ';')
- {
- ++modeEnd;
- ++pos;
- }
-
- while (modeEnd > modeStart && parserHelpers::isSpace(buffer[modeEnd - 1]))
- --modeEnd;
-
- const string mode = string(buffer.begin() + modeStart, buffer.begin() + modeEnd);
- const size_t slash = mode.find('/');
-
- if (slash != string::npos)
- {
- m_actionMode = string(mode.begin(), mode.begin() + slash);
- m_sendingMode = string(mode.begin() + slash + 1, mode.end());
- }
- else
- {
- m_actionMode = mode;
- m_sendingMode.clear();
- }
-
- if (pos < end)
- {
- // Skip ';'
- ++pos;
- }
-
- while (pos < end && parserHelpers::isSpace(buffer[pos]))
- ++pos;
-
- // -- disposition-type
- const size_t typeStart = pos;
- size_t typeEnd = pos;
-
- while (pos < end && buffer[pos] != '/')
- {
- ++typeEnd;
- ++pos;
- }
-
- while (typeEnd > typeStart && parserHelpers::isSpace(buffer[typeEnd - 1]))
- --typeEnd;
-
- m_type = string(buffer.begin() + typeStart, buffer.begin() + typeEnd);
-
- m_modifiers.clear();
-
- if (pos < end) // modifiers follow
- {
- // Skip '/'
- ++pos;
-
- while (pos < end)
- {
- while (pos < end && parserHelpers::isSpace(buffer[pos]))
- ++pos;
-
- const size_t modifierStart = pos;
- size_t modifierEnd = pos;
-
- while (pos < end && buffer[pos] != ',')
- {
- ++modifierEnd;
- ++pos;
- }
-
- while (modifierEnd > modifierStart && parserHelpers::isSpace(buffer[modifierEnd - 1]))
- --modifierEnd;
-
- if (modifierEnd > modifierStart)
- {
- m_modifiers.push_back(string(buffer.begin() + modifierStart,
- buffer.begin() + modifierEnd));
- }
-
- // Skip ','
- if (pos < end)
- ++pos;
- }
- }
-
- if (newPosition)
- *newPosition = pos;
-}
-
-
-void disposition::generateImpl
- (const generationContext& ctx, utility::outputStream& os,
- const size_t curLinePos, size_t* newLinePos) const
-{
- size_t pos = curLinePos;
-
- const string actionMode = (m_actionMode.empty() ? "automatic-action" : m_actionMode);
- const string sendingMode = (m_sendingMode.empty() ? "MDN-sent-automatically" : m_sendingMode);
-
- os << actionMode << "/" << sendingMode << ";";
- pos += actionMode.length() + 1 + sendingMode.length() + 1;
-
- if (pos > ctx.getMaxLineLength())
- {
- os << NEW_LINE_SEQUENCE;
- pos = NEW_LINE_SEQUENCE_LENGTH;
- }
-
- const string type = (m_type.empty() ? "displayed" : m_type);
-
- os << type;
- pos += type.length();
-
- if (m_modifiers.size() >= 1)
- {
- for (std::vector <string>::size_type i = 0, n = 0 ; i < m_modifiers.size() ; ++i)
- {
- const string mod = utility::stringUtils::trim(m_modifiers[i]);
-
- if (!mod.empty())
- {
- if (n == 0)
- os << "/";
- else
- os << ",";
-
- os << mod;
- pos += 1 + mod.length();
-
- ++n;
- }
- }
- }
-
- if (newLinePos)
- *newLinePos = pos;
-}
-
-
-}