/[pcre]/code/trunk/pcre_exec.c
ViewVC logotype

Diff of /code/trunk/pcre_exec.c

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

revision 361 by ph10, Thu Jul 10 16:03:28 2008 UTC revision 365 by ph10, Fri Jul 11 17:06:55 2008 UTC
# Line 4696  for(;;) Line 4696  for(;;)
4696    if (firstline)    if (firstline)
4697      {      {
4698      USPTR t = start_match;      USPTR t = start_match;
4699    #ifdef SUPPORT_UTF8
4700        if (utf8)
4701          {
4702          while (t < md->end_subject && !IS_NEWLINE(t))
4703            {
4704            t++;
4705            while (t < end_subject && (*t & 0xc0) == 0x80) t++;
4706            }
4707          }
4708        else
4709    #endif
4710      while (t < md->end_subject && !IS_NEWLINE(t)) t++;      while (t < md->end_subject && !IS_NEWLINE(t)) t++;
4711      end_subject = t;      end_subject = t;
4712      }      }
4713    
4714    /* Now test for a unique first byte */    /* Now advance to a unique first byte if there is one. */
4715    
4716    if (first_byte >= 0)    if (first_byte >= 0)
4717      {      {
4718      if (first_byte_caseless)      if (first_byte_caseless)
4719        while (start_match < end_subject &&        while (start_match < end_subject && md->lcc[*start_match] != first_byte)
4720               md->lcc[*start_match] != first_byte)          start_match++;
         { NEXTCHAR(start_match); }  
4721      else      else
4722        while (start_match < end_subject && *start_match != first_byte)        while (start_match < end_subject && *start_match != first_byte)
4723          { NEXTCHAR(start_match); }          start_match++;
4724      }      }
4725    
4726    /* Or to just after a linebreak for a multiline match if possible */    /* Or to just after a linebreak for a multiline match */
4727    
4728    else if (startline)    else if (startline)
4729      {      {
4730      if (start_match > md->start_subject + start_offset)      if (start_match > md->start_subject + start_offset)
4731        {        {
4732    #ifdef SUPPORT_UTF8
4733          if (utf8)
4734            {
4735            while (start_match < end_subject && !WAS_NEWLINE(start_match))
4736              {
4737              start_match++;
4738              while(start_match < end_subject && (*start_match & 0xc0) == 0x80)
4739                start_match++;
4740              }
4741            }
4742          else
4743    #endif
4744        while (start_match < end_subject && !WAS_NEWLINE(start_match))        while (start_match < end_subject && !WAS_NEWLINE(start_match))
4745          { NEXTCHAR(start_match); }          start_match++;
4746    
4747        /* If we have just passed a CR and the newline option is ANY or ANYCRLF,        /* If we have just passed a CR and the newline option is ANY or ANYCRLF,
4748        and we are now at a LF, advance the match position by one more character.        and we are now at a LF, advance the match position by one more character.
# Line 4734  for(;;) Line 4756  for(;;)
4756        }        }
4757      }      }
4758    
4759    /* Or to a non-unique first char after study */    /* Or to a non-unique first byte after study */
4760    
4761    else if (start_bits != NULL)    else if (start_bits != NULL)
4762      {      {
4763      while (start_match < end_subject)      while (start_match < end_subject)
4764        {        {
4765        register unsigned int c = *start_match;        register unsigned int c = *start_match;
4766        if ((start_bits[c/8] & (1 << (c&7))) == 0)        if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++;
4767          { NEXTCHAR(start_match); }          else break;
       else break;  
4768        }        }
4769      }      }
4770    

Legend:
Removed from v.361  
changed lines
  Added in v.365

  ViewVC Help
Powered by ViewVC 1.1.5