gooderp18绿色标准版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
4.1KB

  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>.
  43. */
  44. #ifdef HAVE_WCHAR_H
  45. #include <wchar.h>
  46. #endif
  47. #ifdef HAVE_WCTYPE_H
  48. #include <wctype.h>
  49. #endif
  50. #include "mb/pg_wchar.h"
  51. #include "miscadmin.h" /* needed by rcancelrequested/rstacktoodeep */
  52. /* overrides for regguts.h definitions, if any */
  53. #define FUNCPTR(name, args) (*name) args
  54. #define MALLOC(n) malloc(n)
  55. #define FREE(p) free(VS(p))
  56. #define REALLOC(p,n) realloc(VS(p),n)
  57. #define assert(x) Assert(x)
  58. /* internal character type and related */
  59. typedef pg_wchar chr; /* the type itself */
  60. typedef unsigned uchr; /* unsigned type that will hold a chr */
  61. #define CHR(c) ((unsigned char) (c)) /* turn char literal into chr literal */
  62. #define DIGITVAL(c) ((c)-'0') /* turn chr digit into its value */
  63. #define CHRBITS 32 /* bits in a chr; must not use sizeof */
  64. #define CHR_MIN 0x00000000 /* smallest and largest chr; the value */
  65. #define CHR_MAX 0x7ffffffe /* CHR_MAX-CHR_MIN+1 must fit in an int, and
  66. * CHR_MAX+1 must fit in a chr variable */
  67. /*
  68. * Check if a chr value is in range. Ideally we'd just write this as
  69. * ((c) >= CHR_MIN && (c) <= CHR_MAX)
  70. * However, if chr is unsigned and CHR_MIN is zero, the first part of that
  71. * is a no-op, and certain overly-nannyish compilers give warnings about it.
  72. * So we leave that out here. If you want to make chr signed and/or CHR_MIN
  73. * not zero, redefine this macro as above. Callers should assume that the
  74. * macro may multiply evaluate its argument, even though it does not today.
  75. */
  76. #define CHR_IS_IN_RANGE(c) ((c) <= CHR_MAX)
  77. /*
  78. * MAX_SIMPLE_CHR is the cutoff between "simple" and "complicated" processing
  79. * in the color map logic. It should usually be chosen high enough to ensure
  80. * that all common characters are <= MAX_SIMPLE_CHR. However, very large
  81. * values will be counterproductive since they cause more regex setup time.
  82. * Also, small values can be helpful for testing the high-color-map logic
  83. * with plain old ASCII input.
  84. */
  85. #define MAX_SIMPLE_CHR 0x7FF /* suitable value for Unicode */
  86. /* functions operating on chr */
  87. #define iscalnum(x) pg_wc_isalnum(x)
  88. #define iscalpha(x) pg_wc_isalpha(x)
  89. #define iscdigit(x) pg_wc_isdigit(x)
  90. #define iscspace(x) pg_wc_isspace(x)
  91. /* and pick up the standard header */
  92. #include "regex.h"
上海开阖软件有限公司 沪ICP备12045867号-1