RegexError.h 4.2 KB

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