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

Diff of /code/trunk/pcre_dfa_exec.c

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

revision 979 by ph10, Sun Jun 17 19:08:41 2012 UTC revision 1055 by chpe, Tue Oct 16 15:53:30 2012 UTC
# Line 1007  for (;;) Line 1007  for (;;)
1007            {            {
1008            const pcre_uchar *temp = ptr - 1;            const pcre_uchar *temp = ptr - 1;
1009            if (temp < md->start_used_ptr) md->start_used_ptr = temp;            if (temp < md->start_used_ptr) md->start_used_ptr = temp;
1010  #ifdef SUPPORT_UTF  #if defined SUPPORT_UTF && !defined COMPILE_PCRE32
1011            if (utf) { BACKCHAR(temp); }            if (utf) { BACKCHAR(temp); }
1012  #endif  #endif
1013            GETCHARTEST(d, temp);            GETCHARTEST(d, temp);
# Line 1060  for (;;) Line 1060  for (;;)
1060        if (clen > 0)        if (clen > 0)
1061          {          {
1062          BOOL OK;          BOOL OK;
1063            const pcre_uint32 *cp;
1064          const ucd_record * prop = GET_UCD(c);          const ucd_record * prop = GET_UCD(c);
1065          switch(code[1])          switch(code[1])
1066            {            {
# Line 1107  for (;;) Line 1108  for (;;)
1108                 PRIV(ucp_gentype)[prop->chartype] == ucp_N ||                 PRIV(ucp_gentype)[prop->chartype] == ucp_N ||
1109                 c == CHAR_UNDERSCORE;                 c == CHAR_UNDERSCORE;
1110            break;            break;
1111    
1112              case PT_CLIST:
1113              cp = PRIV(ucd_caseless_sets) + prop->caseset;
1114              for (;;)
1115                {
1116                if (c < *cp) { OK = FALSE; break; }
1117                if (c == *cp++) { OK = TRUE; break; }
1118                }
1119              break;
1120    
1121            /* Should never occur, but keep compilers from grumbling. */            /* Should never occur, but keep compilers from grumbling. */
1122    
# Line 1294  for (;;) Line 1304  for (;;)
1304        if (clen > 0)        if (clen > 0)
1305          {          {
1306          BOOL OK;          BOOL OK;
1307            const pcre_uint32 *cp;
1308          const ucd_record * prop = GET_UCD(c);          const ucd_record * prop = GET_UCD(c);
1309          switch(code[2])          switch(code[2])
1310            {            {
# Line 1342  for (;;) Line 1353  for (;;)
1353                 c == CHAR_UNDERSCORE;                 c == CHAR_UNDERSCORE;
1354            break;            break;
1355    
1356              case PT_CLIST:
1357              cp = PRIV(ucd_caseless_sets) + prop->caseset;
1358              for (;;)
1359                {
1360                if (c < *cp) { OK = FALSE; break; }
1361                if (c == *cp++) { OK = TRUE; break; }
1362                }
1363              break;
1364    
1365            /* Should never occur, but keep compilers from grumbling. */            /* Should never occur, but keep compilers from grumbling. */
1366    
1367            default:            default:
# Line 1368  for (;;) Line 1388  for (;;)
1388        case OP_EXTUNI_EXTRA + OP_TYPEPOSPLUS:        case OP_EXTUNI_EXTRA + OP_TYPEPOSPLUS:
1389        count = current_state->count;  /* Already matched */        count = current_state->count;  /* Already matched */
1390        if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); }        if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); }
1391        if (clen > 0 && UCD_CATEGORY(c) != ucp_M)        if (clen > 0)
1392          {          {
1393            int lgb, rgb;
1394          const pcre_uchar *nptr = ptr + clen;          const pcre_uchar *nptr = ptr + clen;
1395          int ncount = 0;          int ncount = 0;
1396          if (count > 0 && codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSPLUS)          if (count > 0 && codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSPLUS)
# Line 1377  for (;;) Line 1398  for (;;)
1398            active_count--;           /* Remove non-match possibility */            active_count--;           /* Remove non-match possibility */
1399            next_active_state--;            next_active_state--;
1400            }            }
1401            lgb = UCD_GRAPHBREAK(c);
1402          while (nptr < end_subject)          while (nptr < end_subject)
1403            {            {
1404            int nd;            dlen = 1;
1405            int ndlen = 1;            if (!utf) d = *nptr; else { GETCHARLEN(d, nptr, dlen); }
1406            GETCHARLEN(nd, nptr, ndlen);            rgb = UCD_GRAPHBREAK(d);
1407            if (UCD_CATEGORY(nd) != ucp_M) break;            if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0) break;
1408            ncount++;            ncount++;
1409            nptr += ndlen;            lgb = rgb;
1410              nptr += dlen;
1411            }            }
1412          count++;          count++;
1413          ADD_NEW_DATA(-state_offset, count, ncount);          ADD_NEW_DATA(-state_offset, count, ncount);
# Line 1403  for (;;) Line 1426  for (;;)
1426          int ncount = 0;          int ncount = 0;
1427          switch (c)          switch (c)
1428            {            {
1429            case 0x000b:            case CHAR_VT:
1430            case 0x000c:            case CHAR_FF:
1431            case 0x0085:            case CHAR_NEL:
1432    #ifndef EBCDIC
1433            case 0x2028:            case 0x2028:
1434            case 0x2029:            case 0x2029:
1435    #endif  /* Not EBCDIC */
1436            if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;            if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;
1437            goto ANYNL01;            goto ANYNL01;
1438    
1439            case 0x000d:            case CHAR_CR:
1440            if (ptr + 1 < end_subject && ptr[1] == 0x0a) ncount = 1;            if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1;
1441            /* Fall through */            /* Fall through */
1442    
1443            ANYNL01:            ANYNL01:
1444            case 0x000a:            case CHAR_LF:
1445            if (count > 0 && codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSPLUS)            if (count > 0 && codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSPLUS)
1446              {              {
1447              active_count--;           /* Remove non-match possibility */              active_count--;           /* Remove non-match possibility */
# Line 1443  for (;;) Line 1468  for (;;)
1468          BOOL OK;          BOOL OK;
1469          switch (c)          switch (c)
1470            {            {
1471            case 0x000a:            VSPACE_CASES:
           case 0x000b:  
           case 0x000c:  
           case 0x000d:  
           case 0x0085:  
           case 0x2028:  
           case 0x2029:  
1472            OK = TRUE;            OK = TRUE;
1473            break;            break;
1474    
# Line 1482  for (;;) Line 1501  for (;;)
1501          BOOL OK;          BOOL OK;
1502          switch (c)          switch (c)
1503            {            {
1504            case 0x09:      /* HT */            HSPACE_CASES:
           case 0x20:      /* SPACE */  
           case 0xa0:      /* NBSP */  
           case 0x1680:    /* OGHAM SPACE MARK */  
           case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */  
           case 0x2000:    /* EN QUAD */  
           case 0x2001:    /* EM QUAD */  
           case 0x2002:    /* EN SPACE */  
           case 0x2003:    /* EM SPACE */  
           case 0x2004:    /* THREE-PER-EM SPACE */  
           case 0x2005:    /* FOUR-PER-EM SPACE */  
           case 0x2006:    /* SIX-PER-EM SPACE */  
           case 0x2007:    /* FIGURE SPACE */  
           case 0x2008:    /* PUNCTUATION SPACE */  
           case 0x2009:    /* THIN SPACE */  
           case 0x200A:    /* HAIR SPACE */  
           case 0x202f:    /* NARROW NO-BREAK SPACE */  
           case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */  
           case 0x3000:    /* IDEOGRAPHIC SPACE */  
1505            OK = TRUE;            OK = TRUE;
1506            break;            break;
1507    
# Line 1541  for (;;) Line 1542  for (;;)
1542        if (clen > 0)        if (clen > 0)
1543          {          {
1544          BOOL OK;          BOOL OK;
1545            const pcre_uint32 *cp;
1546          const ucd_record * prop = GET_UCD(c);          const ucd_record * prop = GET_UCD(c);
1547          switch(code[2])          switch(code[2])
1548            {            {
# Line 1589  for (;;) Line 1591  for (;;)
1591                 c == CHAR_UNDERSCORE;                 c == CHAR_UNDERSCORE;
1592            break;            break;
1593    
1594              case PT_CLIST:
1595              cp = PRIV(ucd_caseless_sets) + prop->caseset;
1596              for (;;)
1597                {
1598                if (c < *cp) { OK = FALSE; break; }
1599                if (c == *cp++) { OK = TRUE; break; }
1600                }
1601              break;
1602    
1603            /* Should never occur, but keep compilers from grumbling. */            /* Should never occur, but keep compilers from grumbling. */
1604    
1605            default:            default:
# Line 1624  for (;;) Line 1635  for (;;)
1635        QS2:        QS2:
1636    
1637        ADD_ACTIVE(state_offset + 2, 0);        ADD_ACTIVE(state_offset + 2, 0);
1638        if (clen > 0 && UCD_CATEGORY(c) != ucp_M)        if (clen > 0)
1639          {          {
1640            int lgb, rgb;
1641          const pcre_uchar *nptr = ptr + clen;          const pcre_uchar *nptr = ptr + clen;
1642          int ncount = 0;          int ncount = 0;
1643          if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSSTAR ||          if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSSTAR ||
# Line 1634  for (;;) Line 1646  for (;;)
1646            active_count--;           /* Remove non-match possibility */            active_count--;           /* Remove non-match possibility */
1647            next_active_state--;            next_active_state--;
1648            }            }
1649            lgb = UCD_GRAPHBREAK(c);
1650          while (nptr < end_subject)          while (nptr < end_subject)
1651            {            {
1652            int nd;            dlen = 1;
1653            int ndlen = 1;            if (!utf) d = *nptr; else { GETCHARLEN(d, nptr, dlen); }
1654            GETCHARLEN(nd, nptr, ndlen);            rgb = UCD_GRAPHBREAK(d);
1655            if (UCD_CATEGORY(nd) != ucp_M) break;            if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0) break;
1656            ncount++;            ncount++;
1657            nptr += ndlen;            lgb = rgb;
1658              nptr += dlen;
1659            }            }
1660          ADD_NEW_DATA(-(state_offset + count), 0, ncount);          ADD_NEW_DATA(-(state_offset + count), 0, ncount);
1661          }          }
# Line 1667  for (;;) Line 1681  for (;;)
1681          int ncount = 0;          int ncount = 0;
1682          switch (c)          switch (c)
1683            {            {
1684            case 0x000b:            case CHAR_VT:
1685            case 0x000c:            case CHAR_FF:
1686            case 0x0085:            case CHAR_NEL:
1687    #ifndef EBCDIC
1688            case 0x2028:            case 0x2028:
1689            case 0x2029:            case 0x2029:
1690    #endif  /* Not EBCDIC */
1691            if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;            if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;
1692            goto ANYNL02;            goto ANYNL02;
1693    
1694            case 0x000d:            case CHAR_CR:
1695            if (ptr + 1 < end_subject && ptr[1] == 0x0a) ncount = 1;            if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1;
1696            /* Fall through */            /* Fall through */
1697    
1698            ANYNL02:            ANYNL02:
1699            case 0x000a:            case CHAR_LF:
1700            if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSSTAR ||            if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSSTAR ||
1701                codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSQUERY)                codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSQUERY)
1702              {              {
# Line 1715  for (;;) Line 1731  for (;;)
1731          BOOL OK;          BOOL OK;
1732          switch (c)          switch (c)
1733            {            {
1734            case 0x000a:            VSPACE_CASES:
           case 0x000b:  
           case 0x000c:  
           case 0x000d:  
           case 0x0085:  
           case 0x2028:  
           case 0x2029:  
1735            OK = TRUE;            OK = TRUE;
1736            break;            break;
1737    
# Line 1761  for (;;) Line 1771  for (;;)
1771          BOOL OK;          BOOL OK;
1772          switch (c)          switch (c)
1773            {            {
1774            case 0x09:      /* HT */            HSPACE_CASES:
           case 0x20:      /* SPACE */  
           case 0xa0:      /* NBSP */  
           case 0x1680:    /* OGHAM SPACE MARK */  
           case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */  
           case 0x2000:    /* EN QUAD */  
           case 0x2001:    /* EM QUAD */  
           case 0x2002:    /* EN SPACE */  
           case 0x2003:    /* EM SPACE */  
           case 0x2004:    /* THREE-PER-EM SPACE */  
           case 0x2005:    /* FOUR-PER-EM SPACE */  
           case 0x2006:    /* SIX-PER-EM SPACE */  
           case 0x2007:    /* FIGURE SPACE */  
           case 0x2008:    /* PUNCTUATION SPACE */  
           case 0x2009:    /* THIN SPACE */  
           case 0x200A:    /* HAIR SPACE */  
           case 0x202f:    /* NARROW NO-BREAK SPACE */  
           case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */  
           case 0x3000:    /* IDEOGRAPHIC SPACE */  
1775            OK = TRUE;            OK = TRUE;
1776            break;            break;
1777    
# Line 1813  for (;;) Line 1805  for (;;)
1805        if (clen > 0)        if (clen > 0)
1806          {          {
1807          BOOL OK;          BOOL OK;
1808            const pcre_uint32 *cp;
1809          const ucd_record * prop = GET_UCD(c);          const ucd_record * prop = GET_UCD(c);
1810          switch(code[1 + IMM2_SIZE + 1])          switch(code[1 + IMM2_SIZE + 1])
1811            {            {
# Line 1861  for (;;) Line 1854  for (;;)
1854                 c == CHAR_UNDERSCORE;                 c == CHAR_UNDERSCORE;
1855            break;            break;
1856    
1857              case PT_CLIST:
1858              cp = PRIV(ucd_caseless_sets) + prop->caseset;
1859              for (;;)
1860                {
1861                if (c < *cp) { OK = FALSE; break; }
1862                if (c == *cp++) { OK = TRUE; break; }
1863                }
1864              break;
1865    
1866            /* Should never occur, but keep compilers from grumbling. */            /* Should never occur, but keep compilers from grumbling. */
1867    
1868            default:            default:
# Line 1891  for (;;) Line 1893  for (;;)
1893        if (codevalue != OP_EXTUNI_EXTRA + OP_TYPEEXACT)        if (codevalue != OP_EXTUNI_EXTRA + OP_TYPEEXACT)
1894          { ADD_ACTIVE(state_offset + 2 + IMM2_SIZE, 0); }          { ADD_ACTIVE(state_offset + 2 + IMM2_SIZE, 0); }
1895        count = current_state->count;  /* Number already matched */        count = current_state->count;  /* Number already matched */
1896        if (clen > 0 && UCD_CATEGORY(c) != ucp_M)        if (clen > 0)
1897          {          {
1898            int lgb, rgb;
1899          const pcre_uchar *nptr = ptr + clen;          const pcre_uchar *nptr = ptr + clen;
1900          int ncount = 0;          int ncount = 0;
1901          if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSUPTO)          if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSUPTO)
# Line 1900  for (;;) Line 1903  for (;;)
1903            active_count--;           /* Remove non-match possibility */            active_count--;           /* Remove non-match possibility */
1904            next_active_state--;            next_active_state--;
1905            }            }
1906            lgb = UCD_GRAPHBREAK(c);
1907          while (nptr < end_subject)          while (nptr < end_subject)
1908            {            {
1909            int nd;            dlen = 1;
1910            int ndlen = 1;            if (!utf) d = *nptr; else { GETCHARLEN(d, nptr, dlen); }
1911            GETCHARLEN(nd, nptr, ndlen);            rgb = UCD_GRAPHBREAK(d);
1912            if (UCD_CATEGORY(nd) != ucp_M) break;            if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0) break;
1913            ncount++;            ncount++;
1914            nptr += ndlen;            lgb = rgb;
1915              nptr += dlen;
1916            }            }
1917          if (nptr >= end_subject && (md->moptions & PCRE_PARTIAL_HARD) != 0)          if (nptr >= end_subject && (md->moptions & PCRE_PARTIAL_HARD) != 0)
1918              reset_could_continue = TRUE;              reset_could_continue = TRUE;
# Line 1932  for (;;) Line 1937  for (;;)
1937          int ncount = 0;          int ncount = 0;
1938          switch (c)          switch (c)
1939            {            {
1940            case 0x000b:            case CHAR_VT:
1941            case 0x000c:            case CHAR_FF:
1942            case 0x0085:            case CHAR_NEL:
1943    #ifndef EBCDIC
1944            case 0x2028:            case 0x2028:
1945            case 0x2029:            case 0x2029:
1946    #endif  /* Not EBCDIC */
1947            if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;            if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;
1948            goto ANYNL03;            goto ANYNL03;
1949    
1950            case 0x000d:            case CHAR_CR:
1951            if (ptr + 1 < end_subject && ptr[1] == 0x0a) ncount = 1;            if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1;
1952            /* Fall through */            /* Fall through */
1953    
1954            ANYNL03:            ANYNL03:
1955            case 0x000a:            case CHAR_LF:
1956            if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSUPTO)            if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSUPTO)
1957              {              {
1958              active_count--;           /* Remove non-match possibility */              active_count--;           /* Remove non-match possibility */
# Line 1976  for (;;) Line 1983  for (;;)
1983          BOOL OK;          BOOL OK;
1984          switch (c)          switch (c)
1985            {            {
1986            case 0x000a:            VSPACE_CASES:
           case 0x000b:  
           case 0x000c:  
           case 0x000d:  
           case 0x0085:  
           case 0x2028:  
           case 0x2029:  
1987            OK = TRUE;            OK = TRUE;
1988            break;            break;
1989    
# Line 2018  for (;;) Line 2019  for (;;)
2019          BOOL OK;          BOOL OK;
2020          switch (c)          switch (c)
2021            {            {
2022            case 0x09:      /* HT */            HSPACE_CASES:
           case 0x20:      /* SPACE */  
           case 0xa0:      /* NBSP */  
           case 0x1680:    /* OGHAM SPACE MARK */  
           case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */  
           case 0x2000:    /* EN QUAD */  
           case 0x2001:    /* EM QUAD */  
           case 0x2002:    /* EN SPACE */  
           case 0x2003:    /* EM SPACE */  
           case 0x2004:    /* THREE-PER-EM SPACE */  
           case 0x2005:    /* FOUR-PER-EM SPACE */  
           case 0x2006:    /* SIX-PER-EM SPACE */  
           case 0x2007:    /* FIGURE SPACE */  
           case 0x2008:    /* PUNCTUATION SPACE */  
           case 0x2009:    /* THIN SPACE */  
           case 0x200A:    /* HAIR SPACE */  
           case 0x202f:    /* NARROW NO-BREAK SPACE */  
           case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */  
           case 0x3000:    /* IDEOGRAPHIC SPACE */  
2023            OK = TRUE;            OK = TRUE;
2024            break;            break;
2025    
# Line 2112  for (;;) Line 2095  for (;;)
2095        to wait for them to pass before continuing. */        to wait for them to pass before continuing. */
2096    
2097        case OP_EXTUNI:        case OP_EXTUNI:
2098        if (clen > 0 && UCD_CATEGORY(c) != ucp_M)        if (clen > 0)
2099          {          {
2100            int lgb, rgb;
2101          const pcre_uchar *nptr = ptr + clen;          const pcre_uchar *nptr = ptr + clen;
2102          int ncount = 0;          int ncount = 0;
2103            lgb = UCD_GRAPHBREAK(c);
2104          while (nptr < end_subject)          while (nptr < end_subject)
2105            {            {
2106            int nclen = 1;            dlen = 1;
2107            GETCHARLEN(c, nptr, nclen);            if (!utf) d = *nptr; else { GETCHARLEN(d, nptr, dlen); }
2108            if (UCD_CATEGORY(c) != ucp_M) break;            rgb = UCD_GRAPHBREAK(d);
2109              if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0) break;
2110            ncount++;            ncount++;
2111            nptr += nclen;            lgb = rgb;
2112              nptr += dlen;
2113            }            }
2114          if (nptr >= end_subject && (md->moptions & PCRE_PARTIAL_HARD) != 0)          if (nptr >= end_subject && (md->moptions & PCRE_PARTIAL_HARD) != 0)
2115              reset_could_continue = TRUE;              reset_could_continue = TRUE;
# Line 2139  for (;;) Line 2126  for (;;)
2126        case OP_ANYNL:        case OP_ANYNL:
2127        if (clen > 0) switch(c)        if (clen > 0) switch(c)
2128          {          {
2129          case 0x000b:          case CHAR_VT:
2130          case 0x000c:          case CHAR_FF:
2131          case 0x0085:          case CHAR_NEL:
2132    #ifndef EBCDIC
2133          case 0x2028:          case 0x2028:
2134          case 0x2029:          case 0x2029:
2135    #endif  /* Not EBCDIC */
2136          if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;          if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;
2137    
2138          case 0x000a:          case CHAR_LF:
2139          ADD_NEW(state_offset + 1, 0);          ADD_NEW(state_offset + 1, 0);
2140          break;          break;
2141    
2142          case 0x000d:          case CHAR_CR:
2143          if (ptr + 1 >= end_subject)          if (ptr + 1 >= end_subject)
2144            {            {
2145            ADD_NEW(state_offset + 1, 0);            ADD_NEW(state_offset + 1, 0);
2146            if ((md->moptions & PCRE_PARTIAL_HARD) != 0)            if ((md->moptions & PCRE_PARTIAL_HARD) != 0)
2147              reset_could_continue = TRUE;              reset_could_continue = TRUE;
2148            }            }
2149          else if (ptr[1] == 0x0a)          else if (ptr[1] == CHAR_LF)
2150            {            {
2151            ADD_NEW_DATA(-(state_offset + 1), 0, 1);            ADD_NEW_DATA(-(state_offset + 1), 0, 1);
2152            }            }
# Line 2173  for (;;) Line 2162  for (;;)
2162        case OP_NOT_VSPACE:        case OP_NOT_VSPACE:
2163        if (clen > 0) switch(c)        if (clen > 0) switch(c)
2164          {          {
2165          case 0x000a:          VSPACE_CASES:
         case 0x000b:  
         case 0x000c:  
         case 0x000d:  
         case 0x0085:  
         case 0x2028:  
         case 0x2029:  
2166          break;          break;
2167    
2168          default:          default:
# Line 2192  for (;;) Line 2175  for (;;)
2175        case OP_VSPACE:        case OP_VSPACE:
2176        if (clen > 0) switch(c)        if (clen > 0) switch(c)
2177          {          {
2178          case 0x000a:          VSPACE_CASES:
         case 0x000b:  
         case 0x000c:  
         case 0x000d:  
         case 0x0085:  
         case 0x2028:  
         case 0x2029:  
2179          ADD_NEW(state_offset + 1, 0);          ADD_NEW(state_offset + 1, 0);
2180          break;          break;
2181    
2182          default: break;          default:
2183            break;
2184          }          }
2185        break;        break;
2186    
# Line 2210  for (;;) Line 2188  for (;;)
2188        case OP_NOT_HSPACE:        case OP_NOT_HSPACE:
2189        if (clen > 0) switch(c)        if (clen > 0) switch(c)
2190          {          {
2191          case 0x09:      /* HT */          HSPACE_CASES:
         case 0x20:      /* SPACE */  
         case 0xa0:      /* NBSP */  
         case 0x1680:    /* OGHAM SPACE MARK */  
         case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */  
         case 0x2000:    /* EN QUAD */  
         case 0x2001:    /* EM QUAD */  
         case 0x2002:    /* EN SPACE */  
         case 0x2003:    /* EM SPACE */  
         case 0x2004:    /* THREE-PER-EM SPACE */  
         case 0x2005:    /* FOUR-PER-EM SPACE */  
         case 0x2006:    /* SIX-PER-EM SPACE */  
         case 0x2007:    /* FIGURE SPACE */  
         case 0x2008:    /* PUNCTUATION SPACE */  
         case 0x2009:    /* THIN SPACE */  
         case 0x200A:    /* HAIR SPACE */  
         case 0x202f:    /* NARROW NO-BREAK SPACE */  
         case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */  
         case 0x3000:    /* IDEOGRAPHIC SPACE */  
2192          break;          break;
2193    
2194          default:          default:
# Line 2241  for (;;) Line 2201  for (;;)
2201        case OP_HSPACE:        case OP_HSPACE:
2202        if (clen > 0) switch(c)        if (clen > 0) switch(c)
2203          {          {
2204          case 0x09:      /* HT */          HSPACE_CASES:
         case 0x20:      /* SPACE */  
         case 0xa0:      /* NBSP */  
         case 0x1680:    /* OGHAM SPACE MARK */  
         case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */  
         case 0x2000:    /* EN QUAD */  
         case 0x2001:    /* EM QUAD */  
         case 0x2002:    /* EN SPACE */  
         case 0x2003:    /* EM SPACE */  
         case 0x2004:    /* THREE-PER-EM SPACE */  
         case 0x2005:    /* FOUR-PER-EM SPACE */  
         case 0x2006:    /* SIX-PER-EM SPACE */  
         case 0x2007:    /* FIGURE SPACE */  
         case 0x2008:    /* PUNCTUATION SPACE */  
         case 0x2009:    /* THIN SPACE */  
         case 0x200A:    /* HAIR SPACE */  
         case 0x202f:    /* NARROW NO-BREAK SPACE */  
         case 0x205f:    /* MEDIUM MATHEMATICAL SPACE */  
         case 0x3000:    /* IDEOGRAPHIC SPACE */  
2205          ADD_NEW(state_offset + 1, 0);          ADD_NEW(state_offset + 1, 0);
2206          break;          break;
2207    
2208            default:
2209            break;
2210          }          }
2211        break;        break;
2212    
# Line 2662  for (;;) Line 2607  for (;;)
2607              cb.version          = 1;   /* Version 1 of the callout block */              cb.version          = 1;   /* Version 1 of the callout block */
2608              cb.callout_number   = code[LINK_SIZE+2];              cb.callout_number   = code[LINK_SIZE+2];
2609              cb.offset_vector    = offsets;              cb.offset_vector    = offsets;
2610  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
2611              cb.subject          = (PCRE_SPTR)start_subject;              cb.subject          = (PCRE_SPTR)start_subject;
2612  #else  #elif defined COMPILE_PCRE16
2613              cb.subject          = (PCRE_SPTR16)start_subject;              cb.subject          = (PCRE_SPTR16)start_subject;
2614    #elif defined COMPILE_PCRE32
2615                cb.subject          = (PCRE_SPTR32)start_subject;
2616  #endif  #endif
2617              cb.subject_length   = (int)(end_subject - start_subject);              cb.subject_length   = (int)(end_subject - start_subject);
2618              cb.start_match      = (int)(current_subject - start_subject);              cb.start_match      = (int)(current_subject - start_subject);
# Line 2796  for (;;) Line 2743  for (;;)
2743            for (rc = rc*2 - 2; rc >= 0; rc -= 2)            for (rc = rc*2 - 2; rc >= 0; rc -= 2)
2744              {              {
2745              int charcount = local_offsets[rc+1] - local_offsets[rc];              int charcount = local_offsets[rc+1] - local_offsets[rc];
2746  #ifdef SUPPORT_UTF  #if defined SUPPORT_UTF && !defined COMPILE_PCRE32
2747              if (utf)              if (utf)
2748                {                {
2749                const pcre_uchar *p = start_subject + local_offsets[rc];                const pcre_uchar *p = start_subject + local_offsets[rc];
2750                const pcre_uchar *pp = start_subject + local_offsets[rc+1];                const pcre_uchar *pp = start_subject + local_offsets[rc+1];
2751                while (p < pp) if (NOT_FIRSTCHAR(*p++)) charcount--;                while (p < pp) if (NOT_FIRSTCHAR(*p++)) charcount--;
2752                }                }
2753  #endif  #endif
2754              if (charcount > 0)              if (charcount > 0)
2755                {                {
# Line 2900  for (;;) Line 2847  for (;;)
2847              const pcre_uchar *p = ptr;              const pcre_uchar *p = ptr;
2848              const pcre_uchar *pp = local_ptr;              const pcre_uchar *pp = local_ptr;
2849              charcount = (int)(pp - p);              charcount = (int)(pp - p);
2850  #ifdef SUPPORT_UTF  #if defined SUPPORT_UTF && !defined COMPILE_PCRE32
2851              if (utf) while (p < pp) if (NOT_FIRSTCHAR(*p++)) charcount--;              if (utf) while (p < pp) if (NOT_FIRSTCHAR(*p++)) charcount--;
2852  #endif  #endif
2853              ADD_NEW_DATA(-next_state_offset, 0, (charcount - 1));              ADD_NEW_DATA(-next_state_offset, 0, (charcount - 1));
# Line 2982  for (;;) Line 2929  for (;;)
2929              }              }
2930            else            else
2931              {              {
2932  #ifdef SUPPORT_UTF  #if defined SUPPORT_UTF && !defined COMPILE_PCRE32
2933              if (utf)              if (utf)
2934                {                {
2935                const pcre_uchar *p = start_subject + local_offsets[0];                const pcre_uchar *p = start_subject + local_offsets[0];
2936                const pcre_uchar *pp = start_subject + local_offsets[1];                const pcre_uchar *pp = start_subject + local_offsets[1];
2937                while (p < pp) if (NOT_FIRSTCHAR(*p++)) charcount--;                while (p < pp) if (NOT_FIRSTCHAR(*p++)) charcount--;
2938                }                }
2939  #endif  #endif
2940              ADD_NEW_DATA(-next_state_offset, 0, (charcount - 1));              ADD_NEW_DATA(-next_state_offset, 0, (charcount - 1));
2941              if (repeat_state_offset >= 0)              if (repeat_state_offset >= 0)
# Line 3011  for (;;) Line 2958  for (;;)
2958          cb.version          = 1;   /* Version 1 of the callout block */          cb.version          = 1;   /* Version 1 of the callout block */
2959          cb.callout_number   = code[1];          cb.callout_number   = code[1];
2960          cb.offset_vector    = offsets;          cb.offset_vector    = offsets;
2961  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
2962          cb.subject          = (PCRE_SPTR)start_subject;          cb.subject          = (PCRE_SPTR)start_subject;
2963  #else  #elif defined COMPILE_PCRE16
2964          cb.subject          = (PCRE_SPTR16)start_subject;          cb.subject          = (PCRE_SPTR16)start_subject;
2965    #elif defined COMPILE_PCRE32
2966            cb.subject          = (PCRE_SPTR32)start_subject;
2967  #endif  #endif
2968          cb.subject_length   = (int)(end_subject - start_subject);          cb.subject_length   = (int)(end_subject - start_subject);
2969          cb.start_match      = (int)(current_subject - start_subject);          cb.start_match      = (int)(current_subject - start_subject);
# Line 3130  Returns:          > 0 => number of match Line 3079  Returns:          > 0 => number of match
3079                   < -1 => some kind of unexpected problem                   < -1 => some kind of unexpected problem
3080  */  */
3081    
3082  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
3083  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
3084  pcre_dfa_exec(const pcre *argument_re, const pcre_extra *extra_data,  pcre_dfa_exec(const pcre *argument_re, const pcre_extra *extra_data,
3085    const char *subject, int length, int start_offset, int options, int *offsets,    const char *subject, int length, int start_offset, int options, int *offsets,
3086    int offsetcount, int *workspace, int wscount)    int offsetcount, int *workspace, int wscount)
3087  #else  #elif defined COMPILE_PCRE16
3088  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
3089  pcre16_dfa_exec(const pcre16 *argument_re, const pcre16_extra *extra_data,  pcre16_dfa_exec(const pcre16 *argument_re, const pcre16_extra *extra_data,
3090    PCRE_SPTR16 subject, int length, int start_offset, int options, int *offsets,    PCRE_SPTR16 subject, int length, int start_offset, int options, int *offsets,
3091    int offsetcount, int *workspace, int wscount)    int offsetcount, int *workspace, int wscount)
3092    #elif defined COMPILE_PCRE32
3093    PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
3094    pcre32_dfa_exec(const pcre32 *argument_re, const pcre32_extra *extra_data,
3095      PCRE_SPTR32 subject, int length, int start_offset, int options, int *offsets,
3096      int offsetcount, int *workspace, int wscount)
3097  #endif  #endif
3098  {  {
3099  REAL_PCRE *re = (REAL_PCRE *)argument_re;  REAL_PCRE *re = (REAL_PCRE *)argument_re;
# Line 3214  end_subject = (const pcre_uchar *)subjec Line 3168  end_subject = (const pcre_uchar *)subjec
3168  req_char_ptr = current_subject - 1;  req_char_ptr = current_subject - 1;
3169    
3170  #ifdef SUPPORT_UTF  #ifdef SUPPORT_UTF
3171  /* PCRE_UTF16 has the same value as PCRE_UTF8. */  /* PCRE_UTF(16|32) have the same value as PCRE_UTF8. */
3172  utf = (re->options & PCRE_UTF8) != 0;  utf = (re->options & PCRE_UTF8) != 0;
3173  #else  #else
3174  utf = FALSE;  utf = FALSE;
# Line 3300  if (utf && (options & PCRE_NO_UTF8_CHECK Line 3254  if (utf && (options & PCRE_NO_UTF8_CHECK
3254        offsets[0] = erroroffset;        offsets[0] = erroroffset;
3255        offsets[1] = errorcode;        offsets[1] = errorcode;
3256        }        }
3257      return (errorcode <= PCRE_UTF8_ERR5 && (options & PCRE_PARTIAL_HARD) != 0)?  #if defined COMPILE_PCRE8
3258        return (errorcode <= PCRE_UTF8_ERR5 && (options & PCRE_PARTIAL_HARD) != 0) ?
3259        PCRE_ERROR_SHORTUTF8 : PCRE_ERROR_BADUTF8;        PCRE_ERROR_SHORTUTF8 : PCRE_ERROR_BADUTF8;
3260    #elif defined COMPILE_PCRE16
3261        return (errorcode <= PCRE_UTF16_ERR1 && (options & PCRE_PARTIAL_HARD) != 0) ?
3262          PCRE_ERROR_SHORTUTF16 : PCRE_ERROR_BADUTF16;
3263    #elif defined COMPILE_PCRE32
3264        return PCRE_ERROR_BADUTF32;
3265    #endif
3266      }      }
3267    #if defined COMPILE_PCRE8 || defined COMPILE_PCRE16
3268    if (start_offset > 0 && start_offset < length &&    if (start_offset > 0 && start_offset < length &&
3269          NOT_FIRSTCHAR(((PCRE_PUCHAR)subject)[start_offset]))          NOT_FIRSTCHAR(((PCRE_PUCHAR)subject)[start_offset]))
3270      return PCRE_ERROR_BADUTF8_OFFSET;      return PCRE_ERROR_BADUTF8_OFFSET;
3271    #endif
3272    }    }
3273  #endif  #endif
3274    

Legend:
Removed from v.979  
changed lines
  Added in v.1055

  ViewVC Help
Powered by ViewVC 1.1.5