RegexError.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * Copyright (c) 2020, Emanuel Sprung <emanuel.sprung@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/StringView.h>
  8. #include <AK/Types.h>
  9. #ifdef AK_OS_SERENITY
  10. # include <bits/regex_defs.h>
  11. #else
  12. # include <LibC/bits/regex_defs.h>
  13. #endif
  14. namespace regex {
  15. enum class Error : u8 {
  16. NoError = __Regex_NoError,
  17. InvalidPattern = __Regex_InvalidPattern, // Invalid regular expression.
  18. InvalidCollationElement = __Regex_InvalidCollationElement, // Invalid collating element referenced.
  19. InvalidCharacterClass = __Regex_InvalidCharacterClass, // Invalid character class type referenced.
  20. InvalidTrailingEscape = __Regex_InvalidTrailingEscape, // Trailing \ in pattern.
  21. InvalidNumber = __Regex_InvalidNumber, // Number in \digit invalid or in error.
  22. MismatchingBracket = __Regex_MismatchingBracket, // [ ] imbalance.
  23. MismatchingParen = __Regex_MismatchingParen, // ( ) imbalance.
  24. MismatchingBrace = __Regex_MismatchingBrace, // { } imbalance.
  25. InvalidBraceContent = __Regex_InvalidBraceContent, // Content of {} invalid: not a number, number too large, more than two numbers, first larger than second.
  26. InvalidBracketContent = __Regex_InvalidBracketContent, // Content of [] invalid.
  27. InvalidRange = __Regex_InvalidRange, // Invalid endpoint in range expression.
  28. InvalidRepetitionMarker = __Regex_InvalidRepetitionMarker, // ?, * or + not preceded by valid regular expression.
  29. ReachedMaxRecursion = __Regex_ReachedMaxRecursion, // MaximumRecursion has been reached.
  30. EmptySubExpression = __Regex_EmptySubExpression, // Sub expression has empty content.
  31. InvalidCaptureGroup = __Regex_InvalidCaptureGroup, // Content of capture group is invalid.
  32. InvalidNameForCaptureGroup = __Regex_InvalidNameForCaptureGroup, // Name of capture group is invalid.
  33. InvalidNameForProperty = __Regex_InvalidNameForProperty, // Name of property is invalid.
  34. DuplicateNamedCapture = __Regex_DuplicateNamedCapture, // Name of property is invalid.
  35. InvalidCharacterClassEscape = __Regex_InvalidCharacterClassEscape, // Invalid escaped entity in character class.
  36. };
  37. inline StringView get_error_string(Error error)
  38. {
  39. switch (error) {
  40. case Error::NoError:
  41. return "No error"sv;
  42. case Error::InvalidPattern:
  43. return "Invalid regular expression."sv;
  44. case Error::InvalidCollationElement:
  45. return "Invalid collating element referenced."sv;
  46. case Error::InvalidCharacterClass:
  47. return "Invalid character class type referenced."sv;
  48. case Error::InvalidTrailingEscape:
  49. return "Trailing \\ in pattern."sv;
  50. case Error::InvalidNumber:
  51. return "Number in \\digit invalid or in error."sv;
  52. case Error::MismatchingBracket:
  53. return "[ ] imbalance."sv;
  54. case Error::MismatchingParen:
  55. return "( ) imbalance."sv;
  56. case Error::MismatchingBrace:
  57. return "{ } imbalance."sv;
  58. case Error::InvalidBraceContent:
  59. return "Content of {} invalid: not a number, number too large, more than two numbers, first larger than second."sv;
  60. case Error::InvalidBracketContent:
  61. return "Content of [] invalid."sv;
  62. case Error::InvalidRange:
  63. return "Invalid endpoint in range expression."sv;
  64. case Error::InvalidRepetitionMarker:
  65. return "?, * or + not preceded by valid regular expression."sv;
  66. case Error::ReachedMaxRecursion:
  67. return "Maximum recursion has been reached."sv;
  68. case Error::EmptySubExpression:
  69. return "Sub expression has empty content."sv;
  70. case Error::InvalidCaptureGroup:
  71. return "Content of capture group is invalid."sv;
  72. case Error::InvalidNameForCaptureGroup:
  73. return "Name of capture group is invalid."sv;
  74. case Error::InvalidNameForProperty:
  75. return "Name of property is invalid."sv;
  76. case Error::DuplicateNamedCapture:
  77. return "Duplicate capture group name"sv;
  78. case Error::InvalidCharacterClassEscape:
  79. return "Invalid escaped entity in character class."sv;
  80. }
  81. return "Undefined error."sv;
  82. }
  83. }
  84. using regex::get_error_string;