MCPcopy Create free account
hub / github.com/ProgerXP/Notepad2e / Compile

Method Compile

scintilla/src/RESearch.cxx:442–734  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

440}
441
442const char *RESearch::Compile(const char *pattern, int length, bool caseSensitive, bool posix) {
443 char *mp=nfa; /* nfa pointer */
444 char *lp; /* saved pointer */
445 char *sp=nfa; /* another one */
446 char *mpMax = mp + MAXNFA - BITBLK - 10;
447
448 int tagi = 0; /* tag stack index */
449 int tagc = 1; /* actual tag count */
450
451 int n;
452 char mask; /* xor mask -CCL/NCL */
453 int c1, c2, prevChar;
454
455 if (!pattern || !length) {
456 if (sta)
457 return 0;
458 else
459 return badpat("No previous regular expression");
460 }
461 sta = NOP;
462
463 const char *p=pattern; /* pattern pointer */
464 for (int i=0; i<length; i++, p++) {
465 if (mp > mpMax)
466 return badpat("Pattern too long");
467 lp = mp;
468 switch (*p) {
469
470 case '.': /* match any char */
471 *mp++ = ANY;
472 break;
473
474 case '^': /* match beginning */
475 if (p == pattern)
476 *mp++ = BOL;
477 else {
478 *mp++ = CHR;
479 *mp++ = *p;
480 }
481 break;
482
483 case '$': /* match endofline */
484 if (!*(p+1))
485 *mp++ = EOL;
486 else {
487 *mp++ = CHR;
488 *mp++ = *p;
489 }
490 break;
491
492 case '[': /* match char class */
493 *mp++ = CCL;
494 prevChar = 0;
495
496 i++;
497 if (*++p == '^') {
498 mask = '\377';
499 i++;

Callers 1

FindTextMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected