/[debian]/mimetic/trunk/mimetic/parser/itparser.h
ViewVC logotype

Diff of /mimetic/trunk/mimetic/parser/itparser.h

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

revision 510 by gregoa, Sun Apr 16 12:21:05 2006 UTC revision 511 by gregoa, Sun Jan 21 20:13:31 2007 UTC
# Line 444  protected: Line 444  protected:
444      // std::string because I want to be as fast as possible here      // std::string because I want to be as fast as possible here
445      virtual void copy_until_boundary(ParsingElem pe)      virtual void copy_until_boundary(ParsingElem pe)
446      {      {
447          size_t pos, lines, eomsz;          size_t pos, lines, eomsz = 0;
448          register char c;          register char c;
449          enum { nlsz = 1 };          enum { nlsz = 1 };
         char nl[2] = { NL, 0 };  
450          const char *eom = 0;          const char *eom = 0;
451    
452          enum { blksz = 4096 };          enum { blksz = 4096 };
# Line 501  protected: Line 500  protected:
500                  {                  {
501                      // not an empty row, is this a boundary?                      // not an empty row, is this a boundary?
502                      block[blkpos] = 0;                      block[blkpos] = 0;
503                      if(block[sl_off] == '-' &&                      if(block[sl_off] == '-' && sl_off < blkpos &&
                         sl_off < blkpos &&  
504                           block[sl_off+1] == '-')                           block[sl_off+1] == '-')
505                      {                      {
506                          std::string Line(block+sl_off, blkpos-sl_off);                          std::string Line(block+sl_off, blkpos-sl_off);
507                          if(isBoundary(Line))                          if(isBoundary(Line))
508                          {                          {
509                              // trim last newline                              // trim last newline
510                              int i = sl_off;                              if (sl_off>=2)
511                              char a = block[--i];                              {
512                              char b = block[--i];                                  int i = sl_off;
513                              if(isnl(a,b))                                  char a = block[--i];
514                                  sl_off -= 2;                                  char b = block[--i];
515                              else if(isnl(a))  
516                                    if(isnl(a,b))
517                                        sl_off -= 2;
518                                    else if(isnl(a))
519                                        sl_off--;
520    
521                                } else if (sl_off==1 && isnl(block[0])) {
522                                  sl_off--;                                  sl_off--;
523                              onBlock(block, sl_off,                              }
524                                  pe);                              onBlock(block, sl_off, pe);
525                              return;                              return;
526                          }                          }
527                      }                      }
# Line 675  private: Line 679  private:
679                      m_lastBoundary = ClosingBoundary;                      m_lastBoundary = ClosingBoundary;
680                      m_bit = off + 2;                      m_bit = off + 2;
681                  }                  }
682                  if(m_bit < m_eit && isnl(*m_bit))                  if(m_bit < m_eit-1 && isnl(*m_bit))
683                  {                  {
684                      char c = *m_bit++;                      char c = *m_bit++;
685                      char next = *m_bit;                      char next = *m_bit;

Legend:
Removed from v.510  
changed lines
  Added in v.511

  ViewVC Help
Powered by ViewVC 1.1.26