Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ FindFirstChar()

override bool System.Text.RegularExpressions.RegexInterpreter.FindFirstChar ( )
inlineprotected

Definition at line 338 of file RegexInterpreter.cs.

339 {
340 if (!_code.RightToLeft)
341 {
343 {
345 return false;
346 }
347 }
349 {
351 return false;
352 }
353 if (((uint)_code.LeadingAnchor & 0x35u) != 0)
354 {
355 if (!_code.RightToLeft)
356 {
357 int leadingAnchor = _code.LeadingAnchor;
358 if (leadingAnchor <= 4)
359 {
360 if (leadingAnchor != 1)
361 {
362 if (leadingAnchor == 4 && runtextpos > runtextstart)
363 {
364 goto IL_00da;
365 }
366 }
367 else if (runtextpos > runtextbeg)
368 {
369 goto IL_00da;
370 }
371 }
372 else
373 {
374 switch (leadingAnchor)
375 {
376 case 16:
377 if (runtextpos < runtextend - 1)
378 {
380 }
381 break;
382 case 32:
384 {
386 }
387 break;
388 }
389 }
390 }
391 else
392 {
393 int leadingAnchor2 = _code.LeadingAnchor;
394 if (leadingAnchor2 <= 4)
395 {
396 if (leadingAnchor2 != 1)
397 {
398 if (leadingAnchor2 == 4 && runtextpos < runtextstart)
399 {
400 goto IL_01ac;
401 }
402 }
403 else if (runtextpos > runtextbeg)
404 {
406 }
407 }
408 else if (leadingAnchor2 != 16)
409 {
410 if (leadingAnchor2 == 32 && runtextpos < runtextend)
411 {
412 goto IL_01ac;
413 }
414 }
415 else if (runtextpos < runtextend - 1 || (runtextpos == runtextend - 1 && runtext[runtextpos] != '\n'))
416 {
417 goto IL_01ac;
418 }
419 }
420 if (_code.BoyerMoorePrefix != null)
421 {
423 }
424 return true;
425 }
427 {
428 int num = runtext.IndexOf('\n', runtextpos);
429 if (num == -1 || num + 1 > runtextend)
430 {
432 return false;
433 }
434 runtextpos = num + 1;
435 }
436 if (_code.BoyerMoorePrefix != null)
437 {
439 if (runtextpos == -1)
440 {
441 runtextpos = (_code.RightToLeft ? runtextbeg : runtextend);
442 return false;
443 }
444 return true;
445 }
446 if (_code.LeadingCharClasses == null)
447 {
448 return true;
449 }
450 string item = _code.LeadingCharClasses[0].CharClass;
451 if (RegexCharClass.IsSingleton(item))
452 {
453 char c = RegexCharClass.SingletonChar(item);
454 if (!_code.RightToLeft)
455 {
456 ReadOnlySpan<char> span = runtext.AsSpan(runtextpos, runtextend - runtextpos);
457 if (!_code.LeadingCharClasses[0].CaseInsensitive)
458 {
459 int num2 = span.IndexOf(c);
460 if (num2 >= 0)
461 {
462 runtextpos += num2;
463 return true;
464 }
465 }
466 else
467 {
468 TextInfo textInfo = _textInfo;
469 for (int i = 0; i < span.Length; i++)
470 {
471 if (c == textInfo.ToLower(span[i]))
472 {
473 runtextpos += i;
474 return true;
475 }
476 }
477 }
479 }
480 else
481 {
482 if (!_code.LeadingCharClasses[0].CaseInsensitive)
483 {
484 for (int num3 = runtextpos - 1; num3 >= runtextbeg; num3--)
485 {
486 if (c == runtext[num3])
487 {
488 runtextpos = num3 + 1;
489 return true;
490 }
491 }
492 }
493 else
494 {
495 TextInfo textInfo2 = _textInfo;
496 for (int num4 = runtextpos - 1; num4 >= runtextbeg; num4--)
497 {
498 if (c == textInfo2.ToLower(runtext[num4]))
499 {
500 runtextpos = num4 + 1;
501 return true;
502 }
503 }
504 }
506 }
507 }
508 else if (!_code.RightToLeft)
509 {
510 ReadOnlySpan<char> readOnlySpan = runtext.AsSpan(runtextpos, runtextend - runtextpos);
511 if (!_code.LeadingCharClasses[0].CaseInsensitive)
512 {
513 for (int j = 0; j < readOnlySpan.Length; j++)
514 {
515 if (RegexCharClass.CharInClass(readOnlySpan[j], item, ref _code.LeadingCharClassAsciiLookup))
516 {
517 runtextpos += j;
518 return true;
519 }
520 }
521 }
522 else
523 {
524 TextInfo textInfo3 = _textInfo;
525 for (int k = 0; k < readOnlySpan.Length; k++)
526 {
527 if (RegexCharClass.CharInClass(textInfo3.ToLower(readOnlySpan[k]), item, ref _code.LeadingCharClassAsciiLookup))
528 {
529 runtextpos += k;
530 return true;
531 }
532 }
533 }
535 }
536 else
537 {
538 if (!_code.LeadingCharClasses[0].CaseInsensitive)
539 {
540 for (int num5 = runtextpos - 1; num5 >= runtextbeg; num5--)
541 {
542 if (RegexCharClass.CharInClass(runtext[num5], item, ref _code.LeadingCharClassAsciiLookup))
543 {
544 runtextpos = num5 + 1;
545 return true;
546 }
547 }
548 }
549 else
550 {
551 TextInfo textInfo4 = _textInfo;
552 for (int num6 = runtextpos - 1; num6 >= runtextbeg; num6--)
553 {
554 if (RegexCharClass.CharInClass(textInfo4.ToLower(runtext[num6]), item, ref _code.LeadingCharClassAsciiLookup))
555 {
556 runtextpos = num6 + 1;
557 return true;
558 }
559 }
560 }
562 }
563 return false;
564 IL_01ac:
566 return false;
567 IL_00da:
569 return false;
570 }
int Scan(string text, int index, int beglimit, int endlimit)
bool IsMatch(string text, int index, int beglimit, int endlimit)
readonly RegexBoyerMoore BoyerMoorePrefix
Definition RegexCode.cs:25

References System.Text.RegularExpressions.RegexInterpreter._code, System.Text.RegularExpressions.RegexInterpreter._textInfo, System.Text.RegularExpressions.RegexCode.BoyerMoorePrefix, System.Text.RegularExpressions.RegexCharClass.CharInClass(), System.Text.RegularExpressions.i, System.Text.RegularExpressions.RegexBoyerMoore.IsMatch(), System.Text.RegularExpressions.RegexCharClass.IsSingleton(), System.item, System.Text.RegularExpressions.RegexCode.LeadingAnchor, System.Text.RegularExpressions.RegexCode.LeadingCharClassAsciiLookup, System.ReadOnlySpan< T >.Length, System.Text.RegularExpressions.RegexTree.MinRequiredLength, System.Text.RegularExpressions.RegexCode.RightToLeft, System.Text.RegularExpressions.RegexRunner.runtext, System.Text.RegularExpressions.RegexRunner.runtextbeg, System.Text.RegularExpressions.RegexRunner.runtextend, System.Text.RegularExpressions.RegexRunner.runtextpos, System.Text.RegularExpressions.RegexRunner.runtextstart, System.Text.RegularExpressions.RegexBoyerMoore.Scan(), System.Text.RegularExpressions.RegexCharClass.SingletonChar(), System.Globalization.TextInfo.ToLower(), and System.Text.RegularExpressions.RegexCode.Tree.