/[debian]/mimetic/trunk/mimetic/rfc822/field.cxx
ViewVC logotype

Diff of /mimetic/trunk/mimetic/rfc822/field.cxx

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1730 by gregoa, Wed Oct 8 16:20:52 2008 UTC revision 1731 by gregoa, Fri May 15 15:35:42 2009 UTC
# Line 2  Line 2 
2      copyright            : (C) 2002-2008 by Stefano Barbato      copyright            : (C) 2002-2008 by Stefano Barbato
3      email                : stefano@codesink.org      email                : stefano@codesink.org
4    
5      $Id: field.cxx,v 1.5 2008-10-07 11:06:26 tat Exp $      $Id: field.cxx,v 1.7 2009-02-27 15:56:34 tat Exp $
6   ***************************************************************************/   ***************************************************************************/
7    
8  /***************************************************************************  /***************************************************************************
# Line 157  std::ostream& operator<<(std::ostream& o Line 157  std::ostream& operator<<(std::ostream& o
157    
158  ostream& Field::write(ostream& os, unsigned int fold) const  ostream& Field::write(ostream& os, unsigned int fold) const
159  {  {
160        int in_quote, prev, skip;
161    
162      // default folding idiot-algorithm      // default folding idiot-algorithm
163      // override to customize      // override to customize
164      if(fold)      if(fold)
# Line 164  ostream& Field::write(ostream& os, unsig Line 166  ostream& Field::write(ostream& os, unsig
166          int i, sp;          int i, sp;
167          string ostr = name() + ": " + value();          string ostr = name() + ": " + value();
168    
169            // skip the "fieldname: " part just on the first inner iteration
170            skip = name().length() + 2;
171    
172          while(ostr.length() > fold)          while(ostr.length() > fold)
173          {          {
174              for(i = name().length() + 2, sp = 0; i < ostr.length(); ++i)              prev = 0; // prev char processed
175                in_quote = 0;
176                sp = 0;
177    
178                for(i = skip; i < ostr.length(); ++i)
179              {              {
180                  if(isblank(ostr[i]))                  if(ostr[i] == '"' && prev != '\\')
181                        in_quote = !in_quote;
182    
183                    if(!in_quote && isblank(ostr[i]))
184                      sp = i; // last blank found                      sp = i; // last blank found
185    
186                  if(i >= fold && sp)                  if(i >= fold && sp)
187                  {                  {
188                      os.write(ostr.c_str(), sp);                      os.write(ostr.c_str(), sp);
                     os << crlf << "\t";  
189                      ostr.erase(0, 1+sp);                      ostr.erase(0, 1+sp);
190                        if(ostr.length() && !utils::string_is_blank(ostr))
191                            os << crlf << "\t"; // keep folding
192                      break;                      break;
193                  }                  }
194    
195                    prev = ostr[i];
196              }              }
197              if(sp == 0)              if(sp == 0)
198                  break; // can't fold anymore                  break; // can't fold anymore
199                skip = 0;
200          }          }
201    
202          os << ostr;          os << ostr;

Legend:
Removed from v.1730  
changed lines
  Added in v.1731

  ViewVC Help
Powered by ViewVC 1.1.26