2
0

regcustom.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. * Copyright (c) 1998, 1999 Henry Spencer. All rights reserved.
  3. *
  4. * Development of this software was funded, in part, by Cray Research Inc.,
  5. * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics
  6. * Corporation, none of whom are responsible for the results. The author
  7. * thanks all of them.
  8. *
  9. * Redistribution and use in source and binary forms -- with or without
  10. * modification -- are permitted for any purpose, provided that
  11. * redistributions in source form retain this entire copyright notice and
  12. * indicate the origin and nature of any modifications.
  13. *
  14. * I'd appreciate being given credit for this package in the documentation
  15. * of software which uses it, but that is not a requirement.
  16. *
  17. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
  18. * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  19. * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
  20. * HENRY SPENCER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  21. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  22. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  23. * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  24. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  25. * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  26. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. *
  28. * src/include/regex/regcustom.h
  29. */
  30. /* headers if any */
  31. /*
  32. * It's against Postgres coding conventions to include postgres.h in a
  33. * header file, but we allow the violation here because the regexp library
  34. * files specifically intend this file to supply application-dependent
  35. * headers, and are careful to include this file before anything else.
  36. */
  37. #include "postgres.h"
  38. #include <ctype.h>
  39. #include <limits.h>
  40. /*
  41. * towlower() and friends should be in <wctype.h>, but some pre-C99 systems
  42. * declare them in <wchar.h>, so include that too.
  43. */
  44. #include <wchar.h>
  45. #ifdef HAVE_WCTYPE_H
  46. #include <wctype.h>
  47. #endif
  48. #include "mb/pg_wchar.h"
  49. #include "miscadmin.h" /* needed by rcancelrequested/rstacktoodeep */
  50. /* overrides for regguts.h definitions, if any */
  51. #define FUNCPTR(name, args) (*name) args
  52. #define MALLOC(n) malloc(n)
  53. #define FREE(p) free(VS(p))
  54. #define REALLOC(p,n) realloc(VS(p),n)
  55. #define assert(x) Assert(x)
  56. /* internal character type and related */
  57. typedef pg_wchar chr; /* the type itself */
  58. typedef unsigned uchr; /* unsigned type that will hold a chr */
  59. #define CHR(c) ((unsigned char) (c)) /* turn char literal into chr literal */
  60. #define DIGITVAL(c) ((c)-'0') /* turn chr digit into its value */
  61. #define CHRBITS 32 /* bits in a chr; must not use sizeof */
  62. #define CHR_MIN 0x00000000 /* smallest and largest chr; the value */
  63. #define CHR_MAX 0x7ffffffe /* CHR_MAX-CHR_MIN+1 must fit in an int, and
  64. * CHR_MAX+1 must fit in a chr variable */
  65. /*
  66. * Check if a chr value is in range. Ideally we'd just write this as
  67. * ((c) >= CHR_MIN && (c) <= CHR_MAX)
  68. * However, if chr is unsigned and CHR_MIN is zero, the first part of that
  69. * is a no-op, and certain overly-nannyish compilers give warnings about it.
  70. * So we leave that out here. If you want to make chr signed and/or CHR_MIN
  71. * not zero, redefine this macro as above. Callers should assume that the
  72. * macro may multiply evaluate its argument, even though it does not today.
  73. */
  74. #define CHR_IS_IN_RANGE(c) ((c) <= CHR_MAX)
  75. /*
  76. * MAX_SIMPLE_CHR is the cutoff between "simple" and "complicated" processing
  77. * in the color map logic. It should usually be chosen high enough to ensure
  78. * that all common characters are <= MAX_SIMPLE_CHR. However, very large
  79. * values will be counterproductive since they cause more regex setup time.
  80. * Also, small values can be helpful for testing the high-color-map logic
  81. * with plain old ASCII input.
  82. */
  83. #define MAX_SIMPLE_CHR 0x7FF /* suitable value for Unicode */
  84. /* functions operating on chr */
  85. #define iscalnum(x) pg_wc_isalnum(x)
  86. #define iscalpha(x) pg_wc_isalpha(x)
  87. #define iscdigit(x) pg_wc_isdigit(x)
  88. #define iscspace(x) pg_wc_isspace(x)
  89. /* and pick up the standard header */
  90. #include "regex.h"