⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcre_dfa_exec.c

📁 SDL文件。SDL_ERROwenjian.....
💻 C
📖 第 1 页 / 共 5 页
字号:
          case PT_SC:          OK = script == code[3];          break;          /* Should never occur, but keep compilers from grumbling. */          default:          OK = codevalue != OP_PROP;          break;          }        if (OK == (d == OP_PROP))          {          if (codevalue == OP_PROP_EXTRA + OP_TYPEPOSSTAR ||              codevalue == OP_PROP_EXTRA + OP_TYPEPOSQUERY)            {            active_count--;           /* Remove non-match possibility */            next_active_state--;            }          ADD_NEW(state_offset + count, 0);          }        }      break;      /*-----------------------------------------------------------------*/      case OP_EXTUNI_EXTRA + OP_TYPEQUERY:      case OP_EXTUNI_EXTRA + OP_TYPEMINQUERY:      case OP_EXTUNI_EXTRA + OP_TYPEPOSQUERY:      count = 2;      goto QS2;      case OP_EXTUNI_EXTRA + OP_TYPESTAR:      case OP_EXTUNI_EXTRA + OP_TYPEMINSTAR:      case OP_EXTUNI_EXTRA + OP_TYPEPOSSTAR:      count = 0;      QS2:      ADD_ACTIVE(state_offset + 2, 0);      if (clen > 0 && _pcre_ucp_findprop(c, &chartype, &script) != ucp_M)        {        const uschar *nptr = ptr + clen;        int ncount = 0;        if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSSTAR ||            codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSQUERY)          {          active_count--;           /* Remove non-match possibility */          next_active_state--;          }        while (nptr < end_subject)          {          int nd;          int ndlen = 1;          GETCHARLEN(nd, nptr, ndlen);          if (_pcre_ucp_findprop(nd, &chartype, &script) != ucp_M) break;          ncount++;          nptr += ndlen;          }        ADD_NEW_DATA(-(state_offset + count), 0, ncount);        }      break;#endif      /*-----------------------------------------------------------------*/      case OP_ANYNL_EXTRA + OP_TYPEQUERY:      case OP_ANYNL_EXTRA + OP_TYPEMINQUERY:      case OP_ANYNL_EXTRA + OP_TYPEPOSQUERY:      count = 2;      goto QS3;      case OP_ANYNL_EXTRA + OP_TYPESTAR:      case OP_ANYNL_EXTRA + OP_TYPEMINSTAR:      case OP_ANYNL_EXTRA + OP_TYPEPOSSTAR:      count = 0;      QS3:      ADD_ACTIVE(state_offset + 2, 0);      if (clen > 0)        {        int ncount = 0;        switch (c)          {          case 0x000b:          case 0x000c:          case 0x0085:          case 0x2028:          case 0x2029:          if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;          goto ANYNL02;          case 0x000d:          if (ptr + 1 < end_subject && ptr[1] == 0x0a) ncount = 1;          /* Fall through */          ANYNL02:          case 0x000a:          if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSSTAR ||              codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSQUERY)            {            active_count--;           /* Remove non-match possibility */            next_active_state--;            }          ADD_NEW_DATA(-(state_offset + count), 0, ncount);          break;          default:          break;          }        }      break;      /*-----------------------------------------------------------------*/      case OP_VSPACE_EXTRA + OP_TYPEQUERY:      case OP_VSPACE_EXTRA + OP_TYPEMINQUERY:      case OP_VSPACE_EXTRA + OP_TYPEPOSQUERY:      count = 2;      goto QS4;      case OP_VSPACE_EXTRA + OP_TYPESTAR:      case OP_VSPACE_EXTRA + OP_TYPEMINSTAR:      case OP_VSPACE_EXTRA + OP_TYPEPOSSTAR:      count = 0;      QS4:      ADD_ACTIVE(state_offset + 2, 0);      if (clen > 0)        {        BOOL OK;        switch (c)          {          case 0x000a:          case 0x000b:          case 0x000c:          case 0x000d:          case 0x0085:          case 0x2028:          case 0x2029:          OK = TRUE;          break;          default:          OK = FALSE;          break;          }        if (OK == (d == OP_VSPACE))          {          if (codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSSTAR ||              codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSQUERY)            {            active_count--;           /* Remove non-match possibility */            next_active_state--;            }          ADD_NEW_DATA(-(state_offset + count), 0, 0);          }        }      break;      /*-----------------------------------------------------------------*/      case OP_HSPACE_EXTRA + OP_TYPEQUERY:      case OP_HSPACE_EXTRA + OP_TYPEMINQUERY:      case OP_HSPACE_EXTRA + OP_TYPEPOSQUERY:      count = 2;      goto QS5;      case OP_HSPACE_EXTRA + OP_TYPESTAR:      case OP_HSPACE_EXTRA + OP_TYPEMINSTAR:      case OP_HSPACE_EXTRA + OP_TYPEPOSSTAR:      count = 0;      QS5:      ADD_ACTIVE(state_offset + 2, 0);      if (clen > 0)        {        BOOL OK;        switch (c)          {          case 0x09:      /* HT */          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 */          OK = TRUE;          break;          default:          OK = FALSE;          break;          }        if (OK == (d == OP_HSPACE))          {          if (codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSSTAR ||              codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSQUERY)            {            active_count--;           /* Remove non-match possibility */            next_active_state--;            }          ADD_NEW_DATA(-(state_offset + count), 0, 0);          }        }      break;      /*-----------------------------------------------------------------*/#ifdef SUPPORT_UCP      case OP_PROP_EXTRA + OP_TYPEEXACT:      case OP_PROP_EXTRA + OP_TYPEUPTO:      case OP_PROP_EXTRA + OP_TYPEMINUPTO:      case OP_PROP_EXTRA + OP_TYPEPOSUPTO:      if (codevalue != OP_PROP_EXTRA + OP_TYPEEXACT)        { ADD_ACTIVE(state_offset + 6, 0); }      count = current_state->count;  /* Number already matched */      if (clen > 0)        {        BOOL OK;        int category = _pcre_ucp_findprop(c, &chartype, &script);        switch(code[4])          {          case PT_ANY:          OK = TRUE;          break;          case PT_LAMP:          OK = chartype == ucp_Lu || chartype == ucp_Ll || chartype == ucp_Lt;          break;          case PT_GC:          OK = category == code[5];          break;          case PT_PC:          OK = chartype == code[5];          break;          case PT_SC:          OK = script == code[5];          break;          /* Should never occur, but keep compilers from grumbling. */          default:          OK = codevalue != OP_PROP;          break;          }        if (OK == (d == OP_PROP))          {          if (codevalue == OP_PROP_EXTRA + OP_TYPEPOSUPTO)            {            active_count--;           /* Remove non-match possibility */            next_active_state--;            }          if (++count >= GET2(code, 1))            { ADD_NEW(state_offset + 6, 0); }          else            { ADD_NEW(state_offset, count); }          }        }      break;      /*-----------------------------------------------------------------*/      case OP_EXTUNI_EXTRA + OP_TYPEEXACT:      case OP_EXTUNI_EXTRA + OP_TYPEUPTO:      case OP_EXTUNI_EXTRA + OP_TYPEMINUPTO:      case OP_EXTUNI_EXTRA + OP_TYPEPOSUPTO:      if (codevalue != OP_EXTUNI_EXTRA + OP_TYPEEXACT)        { ADD_ACTIVE(state_offset + 4, 0); }      count = current_state->count;  /* Number already matched */      if (clen > 0 && _pcre_ucp_findprop(c, &chartype, &script) != ucp_M)        {        const uschar *nptr = ptr + clen;        int ncount = 0;        if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSUPTO)          {          active_count--;           /* Remove non-match possibility */          next_active_state--;          }        while (nptr < end_subject)          {          int nd;          int ndlen = 1;          GETCHARLEN(nd, nptr, ndlen);          if (_pcre_ucp_findprop(nd, &chartype, &script) != ucp_M) break;          ncount++;          nptr += ndlen;          }        if (++count >= GET2(code, 1))          { ADD_NEW_DATA(-(state_offset + 4), 0, ncount); }        else          { ADD_NEW_DATA(-state_offset, count, ncount); }        }      break;#endif      /*-----------------------------------------------------------------*/      case OP_ANYNL_EXTRA + OP_TYPEEXACT:      case OP_ANYNL_EXTRA + OP_TYPEUPTO:      case OP_ANYNL_EXTRA + OP_TYPEMINUPTO:      case OP_ANYNL_EXTRA + OP_TYPEPOSUPTO:      if (codevalue != OP_ANYNL_EXTRA + OP_TYPEEXACT)        { ADD_ACTIVE(state_offset + 4, 0); }      count = current_state->count;  /* Number already matched */      if (clen > 0)        {        int ncount = 0;        switch (c)          {          case 0x000b:          case 0x000c:          case 0x0085:          case 0x2028:          case 0x2029:          if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break;          goto ANYNL03;          case 0x000d:          if (ptr + 1 < end_subject && ptr[1] == 0x0a) ncount = 1;          /* Fall through */          ANYNL03:          case 0x000a:          if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSUPTO)            {            active_count--;           /* Remove non-match possibility */            next_active_state--;            }          if (++count >= GET2(code, 1))            { ADD_NEW_DATA(-(state_offset + 4), 0, ncount); }          else            { ADD_NEW_DATA(-state_offset, count, ncount); }          break;          default:          break;          }        }      break;      /*-----------------------------------------------------------------*/      case OP_VSPACE_EXTRA + OP_TYPEEXACT:      case OP_VSPACE_EXTRA + OP_TYPEUPTO:      case OP_VSPACE_EXTRA + OP_TYPEMINUPTO:      case OP_VSPACE_EXTRA + OP_TYPEPOSUPTO:      if (codevalue != OP_VSPACE_EXTRA + OP_TYPEEXACT)        { ADD_ACTIVE(state_offset + 4, 0); }      count = current_state->count;  /* Number already matched */      if (clen > 0)        {        BOOL OK;        switch (c)          {          case 0x000a:          case 0x000b:          case 0x000c:          case 0x000d:          case 0x0085:          case 0x2028:          case 0x2029:          OK = TRUE;          break;          default:          OK = FALSE;          }        if (OK == (d == OP_VSPACE))          {          if (codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSUPTO)            {            active_count--;           /* Remove non-match possibility */            next_active_state--;            }          if (++count >= GET2(code, 1))            { ADD_NEW_DATA(-(state_offset + 4), 0, 0); }          else            { ADD_NEW_DATA(-state_offset, count, 0); }          }        }      break;      /*-----------------------------------------------------------------*/      case OP_HSPACE_EXTRA + OP_TYPEEXACT:      case OP_HSPACE_EXTRA + OP_TYPEUPTO:      case OP_HSPACE_EXTRA + OP_TYPEMINUPTO:      case OP_HSPACE_EXTRA + OP_TYPEPOSUPTO:      if (codevalue != OP_HSPACE_EXTRA + OP_TYPEEXACT)        { ADD_ACTIVE(state_offset + 4, 0); }      count = current_state->count;  /* Number already matched */      if (clen > 0)        {        BOOL OK;        switch (c)          {          case 0x09:      /* HT */          case 0x20:      /* SPACE */          case 0xa0:      /* NBSP */          case 0x1680:    /* OGHAM SPACE MARK */          case 0x180e:    /* MONGOLIAN VOWEL SEPARATOR */          case 0x2000:    /* EN QUAD */          case 0x2001:    /* EM QUAD */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -