RegexError.h 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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/String.h>
  8. #include <AK/Types.h>
  9. #ifdef __serenity__
  10. # include <regex.h>
  11. #else
  12. # include <LibC/regex.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. };
  35. inline String get_error_string(Error error)
  36. {
  37. switch (error) {
  38. case Error::NoError:
  39. return "No error";
  40. case Error::InvalidPattern:
  41. return "Invalid regular expression.";
  42. case Error::InvalidCollationElement:
  43. return "Invalid collating element referenced.";
  44. case Error::InvalidCharacterClass:
  45. return "Invalid character class type referenced.";
  46. case Error::InvalidTrailingEscape:
  47. return "Trailing \\ in pattern.";
  48. case Error::InvalidNumber:
  49. return "Number in \\digit invalid or in error.";
  50. case Error::MismatchingBracket:
  51. return "[ ] imbalance.";
  52. case Error::MismatchingParen:
  53. return "( ) imbalance.";
  54. case Error::MismatchingBrace:
  55. return "{ } imbalance.";
  56. case Error::InvalidBraceContent:
  57. return "Content of {} invalid: not a number, number too large, more than two numbers, first larger than second.";
  58. case Error::InvalidBracketContent:
  59. return "Content of [] invalid.";
  60. case Error::InvalidRange:
  61. return "Invalid endpoint in range expression.";
  62. case Error::InvalidRepetitionMarker:
  63. return "?, * or + not preceded by valid regular expression.";
  64. case Error::ReachedMaxRecursion:
  65. return "Maximum recursion has been reached.";
  66. case Error::EmptySubExpression:
  67. return "Sub expression has empty content.";
  68. case Error::InvalidCaptureGroup:
  69. return "Content of capture group is invalid.";
  70. case Error::InvalidNameForCaptureGroup:
  71. return "Name of capture group is invalid.";
  72. case Error::InvalidNameForProperty:
  73. return "Name of property is invalid.";
  74. }
  75. return "Undefined error.";
  76. }
  77. }
  78. using regex::Error;
  79. using regex::get_error_string;