xref: /netbsd-src/external/bsd/ntp/dist/sntp/libopts/ag-char-map.h (revision eabc0478de71e4e011a5b4e0392741e01d491794)
1*eabc0478Schristos /*	$NetBSD: ag-char-map.h,v 1.6 2024/08/18 20:47:24 christos Exp $	*/
2abb0f93cSkardel 
3abb0f93cSkardel /*
48585484eSchristos  *  29 bits for 46 character classifications
5*eabc0478Schristos  *  generated by char-mapper on 08/26/18 at 10:44:22
6abb0f93cSkardel  *
7abb0f93cSkardel  *  This file contains the character classifications
8abb0f93cSkardel  *  used by AutoGen and AutoOpts for identifying tokens.
98585484eSchristos  *  The table is static scope, so %guard is empty.
108585484eSchristos  *
118585484eSchristos  *  This file is part of AutoOpts, a companion to AutoGen.
128585484eSchristos  *  AutoOpts is free software.
13*eabc0478Schristos  *  AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved
148585484eSchristos  *
158585484eSchristos  *  AutoOpts is available under any one of two licenses.  The license
168585484eSchristos  *  in use must be one of these two and the choice is under the control
178585484eSchristos  *  of the user of the license.
188585484eSchristos  *
198585484eSchristos  *  The GNU Lesser General Public License, version 3 or later
208585484eSchristos  *  See the files "COPYING.lgplv3" and "COPYING.gplv3"
218585484eSchristos  *
228585484eSchristos  *  The Modified Berkeley Software Distribution License
238585484eSchristos  *  See the file "COPYING.mbsd"
248585484eSchristos  *
258585484eSchristos  *  These files have the following sha256 sums:
268585484eSchristos  *
278585484eSchristos  *  8584710e9b04216a394078dc156b781d0b47e1729104d666658aecef8ee32e95  COPYING.gplv3
288585484eSchristos  *  4379e7444a0e2ce2b12dd6f5a52a27a4d02d39d247901d3285c88cf0d37f477b  COPYING.lgplv3
298585484eSchristos  *  13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239  COPYING.mbsd
30abb0f93cSkardel  */
31abb0f93cSkardel #ifndef AG_CHAR_MAP_H_GUARD
32abb0f93cSkardel #define AG_CHAR_MAP_H_GUARD 1
33abb0f93cSkardel 
34abb0f93cSkardel #ifdef HAVE_CONFIG_H
35abb0f93cSkardel # if defined(HAVE_INTTYPES_H)
36abb0f93cSkardel #   include <inttypes.h>
378585484eSchristos 
38abb0f93cSkardel # elif defined(HAVE_STDINT_H)
39abb0f93cSkardel #   include <stdint.h>
40abb0f93cSkardel 
418585484eSchristos # elif !defined(HAVE_UINT32_T)
42abb0f93cSkardel #   if SIZEOF_INT == 4
43abb0f93cSkardel       typedef unsigned int    uint32_t;
44abb0f93cSkardel #   elif SIZEOF_LONG == 4
45abb0f93cSkardel       typedef unsigned long   uint32_t;
46abb0f93cSkardel #   endif
47abb0f93cSkardel # endif /* HAVE_*INT*_H header */
48abb0f93cSkardel 
49abb0f93cSkardel #else /* not HAVE_CONFIG_H -- */
50abb0f93cSkardel # include <inttypes.h>
51abb0f93cSkardel #endif /* HAVE_CONFIG_H */
52abb0f93cSkardel 
53abb0f93cSkardel #if 0 /* mapping specification source (from autogen.map) */
54abb0f93cSkardel //
558585484eSchristos // %guard
56abb0f93cSkardel // %file           ag-char-map.h
578585484eSchristos // %backup
588585484eSchristos // %optimize
59abb0f93cSkardel //
608585484eSchristos // %comment -- see above
61abb0f93cSkardel // %
62abb0f93cSkardel //
638585484eSchristos // newline         "\n"
648585484eSchristos // nul-byte        "\x00"
658585484eSchristos // dir-sep         "/\\"
668585484eSchristos // percent         "%"
678585484eSchristos // comma           ","
688585484eSchristos // colon           ":"
698585484eSchristos // underscore      "_"
708585484eSchristos // plus            "+"
718585484eSchristos // dollar          "$"
728585484eSchristos // option-marker   "-"
738585484eSchristos //
748585484eSchristos // horiz-white     "\t "
758585484eSchristos // alt-white       "\v\f\r\b"
768585484eSchristos // whitespace      +horiz-white  +newline +alt-white
778585484eSchristos // non-nl-white    +horiz-white  +alt-white
788585484eSchristos // quote           "'\""
798585484eSchristos // parentheses     "()"
808585484eSchristos //
818585484eSchristos // graphic         "!-~"
828585484eSchristos // inversion       "~-"
83abb0f93cSkardel // oct-digit       "0-7"
84abb0f93cSkardel // dec-digit       "89"          +oct-digit
85abb0f93cSkardel // hex-digit       "a-fA-F"      +dec-digit
868585484eSchristos // lower-case      "a-z"
878585484eSchristos // upper-case      "A-Z"
888585484eSchristos // alphabetic      +lower-case   +upper-case
89abb0f93cSkardel // alphanumeric    +alphabetic   +dec-digit
908585484eSchristos // var-first       +underscore   +alphabetic
91abb0f93cSkardel // variable-name   +var-first    +dec-digit
92abb0f93cSkardel // option-name     "^-"          +variable-name
938585484eSchristos // value-name      +colon        +option-name
948585484eSchristos // name-sep        "[.]"
958585484eSchristos // compound-name   +value-name   +name-sep +horiz-white
968585484eSchristos // scheme-note     +parentheses  +quote
978585484eSchristos //
988585484eSchristos // unquotable      "!-~"         -"#,;<=>[\\]`{}?*" -quote -parentheses
99abb0f93cSkardel // end-xml-token   "/>"          +whitespace
1008585484eSchristos // plus-n-space    +plus         +whitespace
101abb0f93cSkardel // punctuation     "!-~"         -alphanumeric -"_"
102abb0f93cSkardel // suffix          "-._"         +alphanumeric
1038585484eSchristos // suffix-fmt      +percent      +suffix +dir-sep
1048585484eSchristos // false-type      "nNfF0"       +nul-byte
1058585484eSchristos // file-name       +dir-sep      +suffix
1068585484eSchristos // end-token       +nul-byte     +whitespace
1078585484eSchristos // end-list-entry  +comma        +end-token
1088585484eSchristos // set-separator   "|+-!"        +end-list-entry
1098585484eSchristos // signed-number   +inversion    +dec-digit
1108585484eSchristos // make-script     +dollar       +newline
1118585484eSchristos // load-line-skip  +horiz-white  +option-marker
112abb0f93cSkardel //
113abb0f93cSkardel #endif /* 0 -- mapping spec. source */
114abb0f93cSkardel 
115abb0f93cSkardel 
1168585484eSchristos typedef uint32_t ag_char_map_mask_t;
117abb0f93cSkardel 
1188585484eSchristos #define  IS_NEWLINE_CHAR( _c)          is_ag_char_map_char((char)(_c), 0x00000001)
1198585484eSchristos #define SPN_NEWLINE_CHARS(_s)         spn_ag_char_map_chars(_s, 0)
1208585484eSchristos #define BRK_NEWLINE_CHARS(_s)         brk_ag_char_map_chars(_s, 0)
1218585484eSchristos #define SPN_NEWLINE_BACK(s,e)         spn_ag_char_map_back(s, e, 0)
1228585484eSchristos #define BRK_NEWLINE_BACK(s,e)         brk_ag_char_map_back(s, e, 0)
1238585484eSchristos #define  IS_NUL_BYTE_CHAR( _c)         is_ag_char_map_char((char)(_c), 0x00000002)
1248585484eSchristos #define SPN_NUL_BYTE_CHARS(_s)        spn_ag_char_map_chars(_s, 1)
1258585484eSchristos #define BRK_NUL_BYTE_CHARS(_s)        brk_ag_char_map_chars(_s, 1)
1268585484eSchristos #define SPN_NUL_BYTE_BACK(s,e)        spn_ag_char_map_back(s, e, 1)
1278585484eSchristos #define BRK_NUL_BYTE_BACK(s,e)        brk_ag_char_map_back(s, e, 1)
1288585484eSchristos #define  IS_DIR_SEP_CHAR( _c)          is_ag_char_map_char((char)(_c), 0x00000004)
1298585484eSchristos #define SPN_DIR_SEP_CHARS(_s)         spn_ag_char_map_chars(_s, 2)
1308585484eSchristos #define BRK_DIR_SEP_CHARS(_s)         brk_ag_char_map_chars(_s, 2)
1318585484eSchristos #define SPN_DIR_SEP_BACK(s,e)         spn_ag_char_map_back(s, e, 2)
1328585484eSchristos #define BRK_DIR_SEP_BACK(s,e)         brk_ag_char_map_back(s, e, 2)
1338585484eSchristos #define  IS_PERCENT_CHAR( _c)          is_ag_char_map_char((char)(_c), 0x00000008)
1348585484eSchristos #define SPN_PERCENT_CHARS(_s)         spn_ag_char_map_chars(_s, 3)
1358585484eSchristos #define BRK_PERCENT_CHARS(_s)         brk_ag_char_map_chars(_s, 3)
1368585484eSchristos #define SPN_PERCENT_BACK(s,e)         spn_ag_char_map_back(s, e, 3)
1378585484eSchristos #define BRK_PERCENT_BACK(s,e)         brk_ag_char_map_back(s, e, 3)
1388585484eSchristos #define  IS_COMMA_CHAR( _c)            is_ag_char_map_char((char)(_c), 0x00000010)
1398585484eSchristos #define SPN_COMMA_CHARS(_s)           spn_ag_char_map_chars(_s, 4)
1408585484eSchristos #define BRK_COMMA_CHARS(_s)           brk_ag_char_map_chars(_s, 4)
1418585484eSchristos #define SPN_COMMA_BACK(s,e)           spn_ag_char_map_back(s, e, 4)
1428585484eSchristos #define BRK_COMMA_BACK(s,e)           brk_ag_char_map_back(s, e, 4)
1438585484eSchristos #define  IS_COLON_CHAR( _c)            is_ag_char_map_char((char)(_c), 0x00000020)
1448585484eSchristos #define SPN_COLON_CHARS(_s)           spn_ag_char_map_chars(_s, 5)
1458585484eSchristos #define BRK_COLON_CHARS(_s)           brk_ag_char_map_chars(_s, 5)
1468585484eSchristos #define SPN_COLON_BACK(s,e)           spn_ag_char_map_back(s, e, 5)
1478585484eSchristos #define BRK_COLON_BACK(s,e)           brk_ag_char_map_back(s, e, 5)
1488585484eSchristos #define  IS_UNDERSCORE_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x00000040)
1498585484eSchristos #define SPN_UNDERSCORE_CHARS(_s)      spn_ag_char_map_chars(_s, 6)
1508585484eSchristos #define BRK_UNDERSCORE_CHARS(_s)      brk_ag_char_map_chars(_s, 6)
1518585484eSchristos #define SPN_UNDERSCORE_BACK(s,e)      spn_ag_char_map_back(s, e, 6)
1528585484eSchristos #define BRK_UNDERSCORE_BACK(s,e)      brk_ag_char_map_back(s, e, 6)
1538585484eSchristos #define  IS_PLUS_CHAR( _c)             is_ag_char_map_char((char)(_c), 0x00000080)
1548585484eSchristos #define SPN_PLUS_CHARS(_s)            spn_ag_char_map_chars(_s, 7)
1558585484eSchristos #define BRK_PLUS_CHARS(_s)            brk_ag_char_map_chars(_s, 7)
1568585484eSchristos #define SPN_PLUS_BACK(s,e)            spn_ag_char_map_back(s, e, 7)
1578585484eSchristos #define BRK_PLUS_BACK(s,e)            brk_ag_char_map_back(s, e, 7)
1588585484eSchristos #define  IS_DOLLAR_CHAR( _c)           is_ag_char_map_char((char)(_c), 0x00000100)
1598585484eSchristos #define SPN_DOLLAR_CHARS(_s)          spn_ag_char_map_chars(_s, 8)
1608585484eSchristos #define BRK_DOLLAR_CHARS(_s)          brk_ag_char_map_chars(_s, 8)
1618585484eSchristos #define SPN_DOLLAR_BACK(s,e)          spn_ag_char_map_back(s, e, 8)
1628585484eSchristos #define BRK_DOLLAR_BACK(s,e)          brk_ag_char_map_back(s, e, 8)
1638585484eSchristos #define  IS_OPTION_MARKER_CHAR( _c)    is_ag_char_map_char((char)(_c), 0x00000200)
1648585484eSchristos #define SPN_OPTION_MARKER_CHARS(_s)   spn_ag_char_map_chars(_s, 9)
1658585484eSchristos #define BRK_OPTION_MARKER_CHARS(_s)   brk_ag_char_map_chars(_s, 9)
1668585484eSchristos #define SPN_OPTION_MARKER_BACK(s,e)   spn_ag_char_map_back(s, e, 9)
1678585484eSchristos #define BRK_OPTION_MARKER_BACK(s,e)   brk_ag_char_map_back(s, e, 9)
1688585484eSchristos #define  IS_HORIZ_WHITE_CHAR( _c)      is_ag_char_map_char((char)(_c), 0x00000400)
1698585484eSchristos #define SPN_HORIZ_WHITE_CHARS(_s)     spn_ag_char_map_chars(_s, 10)
1708585484eSchristos #define BRK_HORIZ_WHITE_CHARS(_s)     brk_ag_char_map_chars(_s, 10)
1718585484eSchristos #define SPN_HORIZ_WHITE_BACK(s,e)     spn_ag_char_map_back(s, e, 10)
1728585484eSchristos #define BRK_HORIZ_WHITE_BACK(s,e)     brk_ag_char_map_back(s, e, 10)
1738585484eSchristos #define  IS_ALT_WHITE_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00000800)
1748585484eSchristos #define SPN_ALT_WHITE_CHARS(_s)       spn_ag_char_map_chars(_s, 11)
1758585484eSchristos #define BRK_ALT_WHITE_CHARS(_s)       brk_ag_char_map_chars(_s, 11)
1768585484eSchristos #define SPN_ALT_WHITE_BACK(s,e)       spn_ag_char_map_back(s, e, 11)
1778585484eSchristos #define BRK_ALT_WHITE_BACK(s,e)       brk_ag_char_map_back(s, e, 11)
1788585484eSchristos #define  IS_WHITESPACE_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x00000C01)
1798585484eSchristos #define SPN_WHITESPACE_CHARS(_s)      spn_ag_char_map_chars(_s, 12)
1808585484eSchristos #define BRK_WHITESPACE_CHARS(_s)      brk_ag_char_map_chars(_s, 12)
1818585484eSchristos #define SPN_WHITESPACE_BACK(s,e)      spn_ag_char_map_back(s, e, 12)
1828585484eSchristos #define BRK_WHITESPACE_BACK(s,e)      brk_ag_char_map_back(s, e, 12)
1838585484eSchristos #define  IS_NON_NL_WHITE_CHAR( _c)     is_ag_char_map_char((char)(_c), 0x00000C00)
1848585484eSchristos #define SPN_NON_NL_WHITE_CHARS(_s)    spn_ag_char_map_chars(_s, 13)
1858585484eSchristos #define BRK_NON_NL_WHITE_CHARS(_s)    brk_ag_char_map_chars(_s, 13)
1868585484eSchristos #define SPN_NON_NL_WHITE_BACK(s,e)    spn_ag_char_map_back(s, e, 13)
1878585484eSchristos #define BRK_NON_NL_WHITE_BACK(s,e)    brk_ag_char_map_back(s, e, 13)
1888585484eSchristos #define  IS_QUOTE_CHAR( _c)            is_ag_char_map_char((char)(_c), 0x00001000)
1898585484eSchristos #define SPN_QUOTE_CHARS(_s)           spn_ag_char_map_chars(_s, 14)
1908585484eSchristos #define BRK_QUOTE_CHARS(_s)           brk_ag_char_map_chars(_s, 14)
1918585484eSchristos #define SPN_QUOTE_BACK(s,e)           spn_ag_char_map_back(s, e, 14)
1928585484eSchristos #define BRK_QUOTE_BACK(s,e)           brk_ag_char_map_back(s, e, 14)
1938585484eSchristos #define  IS_PARENTHESES_CHAR( _c)      is_ag_char_map_char((char)(_c), 0x00002000)
1948585484eSchristos #define SPN_PARENTHESES_CHARS(_s)     spn_ag_char_map_chars(_s, 15)
1958585484eSchristos #define BRK_PARENTHESES_CHARS(_s)     brk_ag_char_map_chars(_s, 15)
1968585484eSchristos #define SPN_PARENTHESES_BACK(s,e)     spn_ag_char_map_back(s, e, 15)
1978585484eSchristos #define BRK_PARENTHESES_BACK(s,e)     brk_ag_char_map_back(s, e, 15)
1988585484eSchristos #define  IS_GRAPHIC_CHAR( _c)          is_ag_char_map_char((char)(_c), 0x00004000)
1998585484eSchristos #define SPN_GRAPHIC_CHARS(_s)         spn_ag_char_map_chars(_s, 16)
2008585484eSchristos #define BRK_GRAPHIC_CHARS(_s)         brk_ag_char_map_chars(_s, 16)
2018585484eSchristos #define SPN_GRAPHIC_BACK(s,e)         spn_ag_char_map_back(s, e, 16)
2028585484eSchristos #define BRK_GRAPHIC_BACK(s,e)         brk_ag_char_map_back(s, e, 16)
2038585484eSchristos #define  IS_INVERSION_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00008000)
2048585484eSchristos #define SPN_INVERSION_CHARS(_s)       spn_ag_char_map_chars(_s, 17)
2058585484eSchristos #define BRK_INVERSION_CHARS(_s)       brk_ag_char_map_chars(_s, 17)
2068585484eSchristos #define SPN_INVERSION_BACK(s,e)       spn_ag_char_map_back(s, e, 17)
2078585484eSchristos #define BRK_INVERSION_BACK(s,e)       brk_ag_char_map_back(s, e, 17)
2088585484eSchristos #define  IS_OCT_DIGIT_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00010000)
2098585484eSchristos #define SPN_OCT_DIGIT_CHARS(_s)       spn_ag_char_map_chars(_s, 18)
2108585484eSchristos #define BRK_OCT_DIGIT_CHARS(_s)       brk_ag_char_map_chars(_s, 18)
2118585484eSchristos #define SPN_OCT_DIGIT_BACK(s,e)       spn_ag_char_map_back(s, e, 18)
2128585484eSchristos #define BRK_OCT_DIGIT_BACK(s,e)       brk_ag_char_map_back(s, e, 18)
2138585484eSchristos #define  IS_DEC_DIGIT_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00030000)
2148585484eSchristos #define SPN_DEC_DIGIT_CHARS(_s)       spn_ag_char_map_chars(_s, 19)
2158585484eSchristos #define BRK_DEC_DIGIT_CHARS(_s)       brk_ag_char_map_chars(_s, 19)
2168585484eSchristos #define SPN_DEC_DIGIT_BACK(s,e)       spn_ag_char_map_back(s, e, 19)
2178585484eSchristos #define BRK_DEC_DIGIT_BACK(s,e)       brk_ag_char_map_back(s, e, 19)
2188585484eSchristos #define  IS_HEX_DIGIT_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00070000)
2198585484eSchristos #define SPN_HEX_DIGIT_CHARS(_s)       spn_ag_char_map_chars(_s, 20)
2208585484eSchristos #define BRK_HEX_DIGIT_CHARS(_s)       brk_ag_char_map_chars(_s, 20)
2218585484eSchristos #define SPN_HEX_DIGIT_BACK(s,e)       spn_ag_char_map_back(s, e, 20)
2228585484eSchristos #define BRK_HEX_DIGIT_BACK(s,e)       brk_ag_char_map_back(s, e, 20)
2238585484eSchristos #define  IS_LOWER_CASE_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x00080000)
2248585484eSchristos #define SPN_LOWER_CASE_CHARS(_s)      spn_ag_char_map_chars(_s, 21)
2258585484eSchristos #define BRK_LOWER_CASE_CHARS(_s)      brk_ag_char_map_chars(_s, 21)
2268585484eSchristos #define SPN_LOWER_CASE_BACK(s,e)      spn_ag_char_map_back(s, e, 21)
2278585484eSchristos #define BRK_LOWER_CASE_BACK(s,e)      brk_ag_char_map_back(s, e, 21)
2288585484eSchristos #define  IS_UPPER_CASE_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x00100000)
2298585484eSchristos #define SPN_UPPER_CASE_CHARS(_s)      spn_ag_char_map_chars(_s, 22)
2308585484eSchristos #define BRK_UPPER_CASE_CHARS(_s)      brk_ag_char_map_chars(_s, 22)
2318585484eSchristos #define SPN_UPPER_CASE_BACK(s,e)      spn_ag_char_map_back(s, e, 22)
2328585484eSchristos #define BRK_UPPER_CASE_BACK(s,e)      brk_ag_char_map_back(s, e, 22)
2338585484eSchristos #define  IS_ALPHABETIC_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x00180000)
2348585484eSchristos #define SPN_ALPHABETIC_CHARS(_s)      spn_ag_char_map_chars(_s, 23)
2358585484eSchristos #define BRK_ALPHABETIC_CHARS(_s)      brk_ag_char_map_chars(_s, 23)
2368585484eSchristos #define SPN_ALPHABETIC_BACK(s,e)      spn_ag_char_map_back(s, e, 23)
2378585484eSchristos #define BRK_ALPHABETIC_BACK(s,e)      brk_ag_char_map_back(s, e, 23)
2388585484eSchristos #define  IS_ALPHANUMERIC_CHAR( _c)     is_ag_char_map_char((char)(_c), 0x001B0000)
2398585484eSchristos #define SPN_ALPHANUMERIC_CHARS(_s)    spn_ag_char_map_chars(_s, 24)
2408585484eSchristos #define BRK_ALPHANUMERIC_CHARS(_s)    brk_ag_char_map_chars(_s, 24)
2418585484eSchristos #define SPN_ALPHANUMERIC_BACK(s,e)    spn_ag_char_map_back(s, e, 24)
2428585484eSchristos #define BRK_ALPHANUMERIC_BACK(s,e)    brk_ag_char_map_back(s, e, 24)
2438585484eSchristos #define  IS_VAR_FIRST_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00180040)
2448585484eSchristos #define SPN_VAR_FIRST_CHARS(_s)       spn_ag_char_map_chars(_s, 25)
2458585484eSchristos #define BRK_VAR_FIRST_CHARS(_s)       brk_ag_char_map_chars(_s, 25)
2468585484eSchristos #define SPN_VAR_FIRST_BACK(s,e)       spn_ag_char_map_back(s, e, 25)
2478585484eSchristos #define BRK_VAR_FIRST_BACK(s,e)       brk_ag_char_map_back(s, e, 25)
2488585484eSchristos #define  IS_VARIABLE_NAME_CHAR( _c)    is_ag_char_map_char((char)(_c), 0x001B0040)
2498585484eSchristos #define SPN_VARIABLE_NAME_CHARS(_s)   spn_ag_char_map_chars(_s, 26)
2508585484eSchristos #define BRK_VARIABLE_NAME_CHARS(_s)   brk_ag_char_map_chars(_s, 26)
2518585484eSchristos #define SPN_VARIABLE_NAME_BACK(s,e)   spn_ag_char_map_back(s, e, 26)
2528585484eSchristos #define BRK_VARIABLE_NAME_BACK(s,e)   brk_ag_char_map_back(s, e, 26)
2538585484eSchristos #define  IS_OPTION_NAME_CHAR( _c)      is_ag_char_map_char((char)(_c), 0x003B0040)
2548585484eSchristos #define SPN_OPTION_NAME_CHARS(_s)     spn_ag_char_map_chars(_s, 27)
2558585484eSchristos #define BRK_OPTION_NAME_CHARS(_s)     brk_ag_char_map_chars(_s, 27)
2568585484eSchristos #define SPN_OPTION_NAME_BACK(s,e)     spn_ag_char_map_back(s, e, 27)
2578585484eSchristos #define BRK_OPTION_NAME_BACK(s,e)     brk_ag_char_map_back(s, e, 27)
2588585484eSchristos #define  IS_VALUE_NAME_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x003B0060)
2598585484eSchristos #define SPN_VALUE_NAME_CHARS(_s)      spn_ag_char_map_chars(_s, 28)
2608585484eSchristos #define BRK_VALUE_NAME_CHARS(_s)      brk_ag_char_map_chars(_s, 28)
2618585484eSchristos #define SPN_VALUE_NAME_BACK(s,e)      spn_ag_char_map_back(s, e, 28)
2628585484eSchristos #define BRK_VALUE_NAME_BACK(s,e)      brk_ag_char_map_back(s, e, 28)
2638585484eSchristos #define  IS_NAME_SEP_CHAR( _c)         is_ag_char_map_char((char)(_c), 0x00400000)
2648585484eSchristos #define SPN_NAME_SEP_CHARS(_s)        spn_ag_char_map_chars(_s, 29)
2658585484eSchristos #define BRK_NAME_SEP_CHARS(_s)        brk_ag_char_map_chars(_s, 29)
2668585484eSchristos #define SPN_NAME_SEP_BACK(s,e)        spn_ag_char_map_back(s, e, 29)
2678585484eSchristos #define BRK_NAME_SEP_BACK(s,e)        brk_ag_char_map_back(s, e, 29)
2688585484eSchristos #define  IS_COMPOUND_NAME_CHAR( _c)    is_ag_char_map_char((char)(_c), 0x007B0460)
2698585484eSchristos #define SPN_COMPOUND_NAME_CHARS(_s)   spn_ag_char_map_chars(_s, 30)
2708585484eSchristos #define BRK_COMPOUND_NAME_CHARS(_s)   brk_ag_char_map_chars(_s, 30)
2718585484eSchristos #define SPN_COMPOUND_NAME_BACK(s,e)   spn_ag_char_map_back(s, e, 30)
2728585484eSchristos #define BRK_COMPOUND_NAME_BACK(s,e)   brk_ag_char_map_back(s, e, 30)
2738585484eSchristos #define  IS_SCHEME_NOTE_CHAR( _c)      is_ag_char_map_char((char)(_c), 0x00003000)
2748585484eSchristos #define SPN_SCHEME_NOTE_CHARS(_s)     spn_ag_char_map_chars(_s, 31)
2758585484eSchristos #define BRK_SCHEME_NOTE_CHARS(_s)     brk_ag_char_map_chars(_s, 31)
2768585484eSchristos #define SPN_SCHEME_NOTE_BACK(s,e)     spn_ag_char_map_back(s, e, 31)
2778585484eSchristos #define BRK_SCHEME_NOTE_BACK(s,e)     brk_ag_char_map_back(s, e, 31)
2788585484eSchristos #define  IS_UNQUOTABLE_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x00800000)
2798585484eSchristos #define SPN_UNQUOTABLE_CHARS(_s)      spn_ag_char_map_chars(_s, 32)
2808585484eSchristos #define BRK_UNQUOTABLE_CHARS(_s)      brk_ag_char_map_chars(_s, 32)
2818585484eSchristos #define SPN_UNQUOTABLE_BACK(s,e)      spn_ag_char_map_back(s, e, 32)
2828585484eSchristos #define BRK_UNQUOTABLE_BACK(s,e)      brk_ag_char_map_back(s, e, 32)
2838585484eSchristos #define  IS_END_XML_TOKEN_CHAR( _c)    is_ag_char_map_char((char)(_c), 0x01000C01)
2848585484eSchristos #define SPN_END_XML_TOKEN_CHARS(_s)   spn_ag_char_map_chars(_s, 33)
2858585484eSchristos #define BRK_END_XML_TOKEN_CHARS(_s)   brk_ag_char_map_chars(_s, 33)
2868585484eSchristos #define SPN_END_XML_TOKEN_BACK(s,e)   spn_ag_char_map_back(s, e, 33)
2878585484eSchristos #define BRK_END_XML_TOKEN_BACK(s,e)   brk_ag_char_map_back(s, e, 33)
2888585484eSchristos #define  IS_PLUS_N_SPACE_CHAR( _c)     is_ag_char_map_char((char)(_c), 0x00000C81)
2898585484eSchristos #define SPN_PLUS_N_SPACE_CHARS(_s)    spn_ag_char_map_chars(_s, 34)
2908585484eSchristos #define BRK_PLUS_N_SPACE_CHARS(_s)    brk_ag_char_map_chars(_s, 34)
2918585484eSchristos #define SPN_PLUS_N_SPACE_BACK(s,e)    spn_ag_char_map_back(s, e, 34)
2928585484eSchristos #define BRK_PLUS_N_SPACE_BACK(s,e)    brk_ag_char_map_back(s, e, 34)
2938585484eSchristos #define  IS_PUNCTUATION_CHAR( _c)      is_ag_char_map_char((char)(_c), 0x02000000)
2948585484eSchristos #define SPN_PUNCTUATION_CHARS(_s)     spn_ag_char_map_chars(_s, 35)
2958585484eSchristos #define BRK_PUNCTUATION_CHARS(_s)     brk_ag_char_map_chars(_s, 35)
2968585484eSchristos #define SPN_PUNCTUATION_BACK(s,e)     spn_ag_char_map_back(s, e, 35)
2978585484eSchristos #define BRK_PUNCTUATION_BACK(s,e)     brk_ag_char_map_back(s, e, 35)
2988585484eSchristos #define  IS_SUFFIX_CHAR( _c)           is_ag_char_map_char((char)(_c), 0x041B0000)
2998585484eSchristos #define SPN_SUFFIX_CHARS(_s)          spn_ag_char_map_chars(_s, 36)
3008585484eSchristos #define BRK_SUFFIX_CHARS(_s)          brk_ag_char_map_chars(_s, 36)
3018585484eSchristos #define SPN_SUFFIX_BACK(s,e)          spn_ag_char_map_back(s, e, 36)
3028585484eSchristos #define BRK_SUFFIX_BACK(s,e)          brk_ag_char_map_back(s, e, 36)
3038585484eSchristos #define  IS_SUFFIX_FMT_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x041B000C)
3048585484eSchristos #define SPN_SUFFIX_FMT_CHARS(_s)      spn_ag_char_map_chars(_s, 37)
3058585484eSchristos #define BRK_SUFFIX_FMT_CHARS(_s)      brk_ag_char_map_chars(_s, 37)
3068585484eSchristos #define SPN_SUFFIX_FMT_BACK(s,e)      spn_ag_char_map_back(s, e, 37)
3078585484eSchristos #define BRK_SUFFIX_FMT_BACK(s,e)      brk_ag_char_map_back(s, e, 37)
3088585484eSchristos #define  IS_FALSE_TYPE_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x08000002)
3098585484eSchristos #define SPN_FALSE_TYPE_CHARS(_s)      spn_ag_char_map_chars(_s, 38)
3108585484eSchristos #define BRK_FALSE_TYPE_CHARS(_s)      brk_ag_char_map_chars(_s, 38)
3118585484eSchristos #define SPN_FALSE_TYPE_BACK(s,e)      spn_ag_char_map_back(s, e, 38)
3128585484eSchristos #define BRK_FALSE_TYPE_BACK(s,e)      brk_ag_char_map_back(s, e, 38)
3138585484eSchristos #define  IS_FILE_NAME_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x041B0004)
3148585484eSchristos #define SPN_FILE_NAME_CHARS(_s)       spn_ag_char_map_chars(_s, 39)
3158585484eSchristos #define BRK_FILE_NAME_CHARS(_s)       brk_ag_char_map_chars(_s, 39)
3168585484eSchristos #define SPN_FILE_NAME_BACK(s,e)       spn_ag_char_map_back(s, e, 39)
3178585484eSchristos #define BRK_FILE_NAME_BACK(s,e)       brk_ag_char_map_back(s, e, 39)
3188585484eSchristos #define  IS_END_TOKEN_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00000C03)
3198585484eSchristos #define SPN_END_TOKEN_CHARS(_s)       spn_ag_char_map_chars(_s, 40)
3208585484eSchristos #define BRK_END_TOKEN_CHARS(_s)       brk_ag_char_map_chars(_s, 40)
3218585484eSchristos #define SPN_END_TOKEN_BACK(s,e)       spn_ag_char_map_back(s, e, 40)
3228585484eSchristos #define BRK_END_TOKEN_BACK(s,e)       brk_ag_char_map_back(s, e, 40)
3238585484eSchristos #define  IS_END_LIST_ENTRY_CHAR( _c)   is_ag_char_map_char((char)(_c), 0x00000C13)
3248585484eSchristos #define SPN_END_LIST_ENTRY_CHARS(_s)  spn_ag_char_map_chars(_s, 41)
3258585484eSchristos #define BRK_END_LIST_ENTRY_CHARS(_s)  brk_ag_char_map_chars(_s, 41)
3268585484eSchristos #define SPN_END_LIST_ENTRY_BACK(s,e)  spn_ag_char_map_back(s, e, 41)
3278585484eSchristos #define BRK_END_LIST_ENTRY_BACK(s,e)  brk_ag_char_map_back(s, e, 41)
3288585484eSchristos #define  IS_SET_SEPARATOR_CHAR( _c)    is_ag_char_map_char((char)(_c), 0x10000C13)
3298585484eSchristos #define SPN_SET_SEPARATOR_CHARS(_s)   spn_ag_char_map_chars(_s, 42)
3308585484eSchristos #define BRK_SET_SEPARATOR_CHARS(_s)   brk_ag_char_map_chars(_s, 42)
3318585484eSchristos #define SPN_SET_SEPARATOR_BACK(s,e)   spn_ag_char_map_back(s, e, 42)
3328585484eSchristos #define BRK_SET_SEPARATOR_BACK(s,e)   brk_ag_char_map_back(s, e, 42)
3338585484eSchristos #define  IS_SIGNED_NUMBER_CHAR( _c)    is_ag_char_map_char((char)(_c), 0x00038000)
3348585484eSchristos #define SPN_SIGNED_NUMBER_CHARS(_s)   spn_ag_char_map_chars(_s, 43)
3358585484eSchristos #define BRK_SIGNED_NUMBER_CHARS(_s)   brk_ag_char_map_chars(_s, 43)
3368585484eSchristos #define SPN_SIGNED_NUMBER_BACK(s,e)   spn_ag_char_map_back(s, e, 43)
3378585484eSchristos #define BRK_SIGNED_NUMBER_BACK(s,e)   brk_ag_char_map_back(s, e, 43)
3388585484eSchristos #define  IS_MAKE_SCRIPT_CHAR( _c)      is_ag_char_map_char((char)(_c), 0x00000101)
3398585484eSchristos #define SPN_MAKE_SCRIPT_CHARS(_s)     spn_ag_char_map_chars(_s, 44)
3408585484eSchristos #define BRK_MAKE_SCRIPT_CHARS(_s)     brk_ag_char_map_chars(_s, 44)
3418585484eSchristos #define SPN_MAKE_SCRIPT_BACK(s,e)     spn_ag_char_map_back(s, e, 44)
3428585484eSchristos #define BRK_MAKE_SCRIPT_BACK(s,e)     brk_ag_char_map_back(s, e, 44)
3438585484eSchristos #define  IS_LOAD_LINE_SKIP_CHAR( _c)   is_ag_char_map_char((char)(_c), 0x00000600)
3448585484eSchristos #define SPN_LOAD_LINE_SKIP_CHARS(_s)  spn_ag_char_map_chars(_s, 45)
3458585484eSchristos #define BRK_LOAD_LINE_SKIP_CHARS(_s)  brk_ag_char_map_chars(_s, 45)
3468585484eSchristos #define SPN_LOAD_LINE_SKIP_BACK(s,e)  spn_ag_char_map_back(s, e, 45)
3478585484eSchristos #define BRK_LOAD_LINE_SKIP_BACK(s,e)  brk_ag_char_map_back(s, e, 45)
348abb0f93cSkardel 
3498585484eSchristos static ag_char_map_mask_t const ag_char_map_table[128] = {
3508585484eSchristos   /*NUL*/ 0x00000002, /*x01*/ 0x00000000, /*x02*/ 0x00000000, /*x03*/ 0x00000000,
3518585484eSchristos   /*x04*/ 0x00000000, /*x05*/ 0x00000000, /*x06*/ 0x00000000, /*BEL*/ 0x00000000,
3528585484eSchristos   /* BS*/ 0x00000800, /* HT*/ 0x00000400, /* NL*/ 0x00000001, /* VT*/ 0x00000800,
3538585484eSchristos   /* FF*/ 0x00000800, /* CR*/ 0x00000800, /*x0E*/ 0x00000000, /*x0F*/ 0x00000000,
3548585484eSchristos   /*x10*/ 0x00000000, /*x11*/ 0x00000000, /*x12*/ 0x00000000, /*x13*/ 0x00000000,
3558585484eSchristos   /*x14*/ 0x00000000, /*x15*/ 0x00000000, /*x16*/ 0x00000000, /*x17*/ 0x00000000,
3568585484eSchristos   /*x18*/ 0x00000000, /*x19*/ 0x00000000, /*x1A*/ 0x00000000, /*ESC*/ 0x00000000,
3578585484eSchristos   /*x1C*/ 0x00000000, /*x1D*/ 0x00000000, /*x1E*/ 0x00000000, /*x1F*/ 0x00000000,
3588585484eSchristos   /*   */ 0x00000400, /* ! */ 0x02804000, /* " */ 0x02005000, /* # */ 0x02004000,
3598585484eSchristos   /* $ */ 0x02804100, /* % */ 0x02804008, /* & */ 0x02804000, /* ' */ 0x02005000,
3608585484eSchristos   /* ( */ 0x02006000, /* ) */ 0x02006000, /* * */ 0x02004000, /* + */ 0x12804080,
3618585484eSchristos   /* , */ 0x02004010, /* - */ 0x06A0C200, /* . */ 0x06C04000, /* / */ 0x03804004,
3628585484eSchristos   /* 0 */ 0x08814000, /* 1 */ 0x00814000, /* 2 */ 0x00814000, /* 3 */ 0x00814000,
3638585484eSchristos   /* 4 */ 0x00814000, /* 5 */ 0x00814000, /* 6 */ 0x00814000, /* 7 */ 0x00814000,
3648585484eSchristos   /* 8 */ 0x00824000, /* 9 */ 0x00824000, /* : */ 0x02804020, /* ; */ 0x02004000,
3658585484eSchristos   /* < */ 0x02004000, /* = */ 0x02004000, /* > */ 0x03004000, /* ? */ 0x02004000,
3668585484eSchristos   /* @ */ 0x02804000, /* A */ 0x00944000, /* B */ 0x00944000, /* C */ 0x00944000,
3678585484eSchristos   /* D */ 0x00944000, /* E */ 0x00944000, /* F */ 0x08944000, /* G */ 0x00904000,
3688585484eSchristos   /* H */ 0x00904000, /* I */ 0x00904000, /* J */ 0x00904000, /* K */ 0x00904000,
3698585484eSchristos   /* L */ 0x00904000, /* M */ 0x00904000, /* N */ 0x08904000, /* O */ 0x00904000,
3708585484eSchristos   /* P */ 0x00904000, /* Q */ 0x00904000, /* R */ 0x00904000, /* S */ 0x00904000,
3718585484eSchristos   /* T */ 0x00904000, /* U */ 0x00904000, /* V */ 0x00904000, /* W */ 0x00904000,
3728585484eSchristos   /* X */ 0x00904000, /* Y */ 0x00904000, /* Z */ 0x00904000, /* [ */ 0x02404000,
3738585484eSchristos   /* \ */ 0x02004004, /* ] */ 0x02404000, /* ^ */ 0x02A04000, /* _ */ 0x04804040,
3748585484eSchristos   /* ` */ 0x02004000, /* a */ 0x008C4000, /* b */ 0x008C4000, /* c */ 0x008C4000,
3758585484eSchristos   /* d */ 0x008C4000, /* e */ 0x008C4000, /* f */ 0x088C4000, /* g */ 0x00884000,
3768585484eSchristos   /* h */ 0x00884000, /* i */ 0x00884000, /* j */ 0x00884000, /* k */ 0x00884000,
3778585484eSchristos   /* l */ 0x00884000, /* m */ 0x00884000, /* n */ 0x08884000, /* o */ 0x00884000,
3788585484eSchristos   /* p */ 0x00884000, /* q */ 0x00884000, /* r */ 0x00884000, /* s */ 0x00884000,
3798585484eSchristos   /* t */ 0x00884000, /* u */ 0x00884000, /* v */ 0x00884000, /* w */ 0x00884000,
3808585484eSchristos   /* x */ 0x00884000, /* y */ 0x00884000, /* z */ 0x00884000, /* { */ 0x02004000,
3818585484eSchristos   /* | */ 0x12804000, /* } */ 0x02004000, /* ~ */ 0x0280C000, /*x7F*/ 0x00000000
382abb0f93cSkardel };
3838585484eSchristos 
3848585484eSchristos #include <stdio.h>
3858585484eSchristos #include <stdlib.h>
3868585484eSchristos #include <string.h>
3878585484eSchristos 
3888585484eSchristos #ifndef _
3898585484eSchristos # define _(_s) _s
3908585484eSchristos #endif
3918585484eSchristos 
3928585484eSchristos static unsigned char const * ag_char_map_spanners[46];
3938585484eSchristos /**
3948585484eSchristos  *  Character category masks.  Some categories may have multiple bits,
3958585484eSchristos  *  if their definition incorporates other character categories.
3968585484eSchristos  *  This mask array is only used by calc_ag_char_map_spanners().
3978585484eSchristos  */
3988585484eSchristos static ag_char_map_mask_t const ag_char_map_masks[46] = {
3998585484eSchristos     0x00000001, /* NEWLINE         */
4008585484eSchristos     0x00000002, /* NUL_BYTE        */
4018585484eSchristos     0x00000004, /* DIR_SEP         */
4028585484eSchristos     0x00000008, /* PERCENT         */
4038585484eSchristos     0x00000010, /* COMMA           */
4048585484eSchristos     0x00000020, /* COLON           */
4058585484eSchristos     0x00000040, /* UNDERSCORE      */
4068585484eSchristos     0x00000080, /* PLUS            */
4078585484eSchristos     0x00000100, /* DOLLAR          */
4088585484eSchristos     0x00000200, /* OPTION_MARKER   */
4098585484eSchristos     0x00000400, /* HORIZ_WHITE     */
4108585484eSchristos     0x00000800, /* ALT_WHITE       */
4118585484eSchristos     0x00000C01, /* WHITESPACE      */
4128585484eSchristos     0x00000C00, /* NON_NL_WHITE    */
4138585484eSchristos     0x00001000, /* QUOTE           */
4148585484eSchristos     0x00002000, /* PARENTHESES     */
4158585484eSchristos     0x00004000, /* GRAPHIC         */
4168585484eSchristos     0x00008000, /* INVERSION       */
4178585484eSchristos     0x00010000, /* OCT_DIGIT       */
4188585484eSchristos     0x00030000, /* DEC_DIGIT       */
4198585484eSchristos     0x00070000, /* HEX_DIGIT       */
4208585484eSchristos     0x00080000, /* LOWER_CASE      */
4218585484eSchristos     0x00100000, /* UPPER_CASE      */
4228585484eSchristos     0x00180000, /* ALPHABETIC      */
4238585484eSchristos     0x001B0000, /* ALPHANUMERIC    */
4248585484eSchristos     0x00180040, /* VAR_FIRST       */
4258585484eSchristos     0x001B0040, /* VARIABLE_NAME   */
4268585484eSchristos     0x003B0040, /* OPTION_NAME     */
4278585484eSchristos     0x003B0060, /* VALUE_NAME      */
4288585484eSchristos     0x00400000, /* NAME_SEP        */
4298585484eSchristos     0x007B0460, /* COMPOUND_NAME   */
4308585484eSchristos     0x00003000, /* SCHEME_NOTE     */
4318585484eSchristos     0x00800000, /* UNQUOTABLE      */
4328585484eSchristos     0x01000C01, /* END_XML_TOKEN   */
4338585484eSchristos     0x00000C81, /* PLUS_N_SPACE    */
4348585484eSchristos     0x02000000, /* PUNCTUATION     */
4358585484eSchristos     0x041B0000, /* SUFFIX          */
4368585484eSchristos     0x041B000C, /* SUFFIX_FMT      */
4378585484eSchristos     0x08000002, /* FALSE_TYPE      */
4388585484eSchristos     0x041B0004, /* FILE_NAME       */
4398585484eSchristos     0x00000C03, /* END_TOKEN       */
4408585484eSchristos     0x00000C13, /* END_LIST_ENTRY  */
4418585484eSchristos     0x10000C13, /* SET_SEPARATOR   */
4428585484eSchristos     0x00038000, /* SIGNED_NUMBER   */
4438585484eSchristos     0x00000101, /* MAKE_SCRIPT     */
4448585484eSchristos     0x00000600, /* LOAD_LINE_SKIP  */
4458585484eSchristos };
4468585484eSchristos #undef LOCK_SPANNER_TABLES
4478585484eSchristos 
4488585484eSchristos static unsigned char const *
4498585484eSchristos calc_ag_char_map_spanners(unsigned int mask_ix)
4508585484eSchristos {
4518585484eSchristos #ifdef LOCK_SPANNER_TABLES
4528585484eSchristos     if (ag_char_map_spanners[mask_ix] != NULL)
4538585484eSchristos         return ag_char_map_spanners[mask_ix];
4548585484eSchristos 
4558585484eSchristos     pthread_mutex_lock(&ag_char_map_mutex);
4568585484eSchristos     if (ag_char_map_spanners[mask_ix] == NULL)
4578585484eSchristos #endif
4588585484eSchristos     {
4598585484eSchristos         int ix = 1;
4608585484eSchristos         ag_char_map_mask_t mask = ag_char_map_masks[mask_ix];
4618585484eSchristos         unsigned char * res = malloc(256 /* 1 << NBBY */);
4628585484eSchristos         if (res == NULL) {
4638585484eSchristos             fputs(_("no memory for char-mapper span map\n"), stderr);
4648585484eSchristos             exit(EXIT_FAILURE);
4658585484eSchristos         }
4668585484eSchristos 
4678585484eSchristos         memset(res, 0, 256);
4688585484eSchristos         for (; ix < 128; ix++)
4698585484eSchristos             if (ag_char_map_table[ix] & mask)
4708585484eSchristos                 res[ix] = 1;
4718585484eSchristos         ag_char_map_spanners[mask_ix] = res;
4728585484eSchristos     }
4738585484eSchristos #ifdef LOCK_SPANNER_TABLES
4748585484eSchristos     pthread_mutex_unlock(&ag_char_map_mutex);
4758585484eSchristos #endif
4768585484eSchristos     return ag_char_map_spanners[mask_ix];
4778585484eSchristos }
4788585484eSchristos #define ag_char_map_masks POISONED_ag_char_map_masks
4798585484eSchristos 
4808585484eSchristos static inline int
4818585484eSchristos is_ag_char_map_char(char ch, ag_char_map_mask_t mask)
4828585484eSchristos {
4838585484eSchristos     unsigned int ix = (unsigned char)ch;
4848585484eSchristos     return ((ix < 128) && ((ag_char_map_table[ix] & mask) != 0));
4858585484eSchristos }
4868585484eSchristos 
4878585484eSchristos static inline char *
4888585484eSchristos spn_ag_char_map_chars(char const * p, unsigned int mask_ix)
4898585484eSchristos {
4908585484eSchristos     unsigned char const * v = ag_char_map_spanners[mask_ix];
4918585484eSchristos     if (v == NULL)
4928585484eSchristos         v = calc_ag_char_map_spanners(mask_ix);
4938585484eSchristos     while (v[(unsigned char)*p])  p++;
4948585484eSchristos     return (char *)(uintptr_t)p;
4958585484eSchristos }
4968585484eSchristos 
4978585484eSchristos static inline char *
4988585484eSchristos brk_ag_char_map_chars(char const * p, unsigned int mask_ix)
4998585484eSchristos {
5008585484eSchristos     unsigned char const * v = ag_char_map_spanners[mask_ix];
5018585484eSchristos     if (v == NULL)
5028585484eSchristos         v = calc_ag_char_map_spanners(mask_ix);
5038585484eSchristos     while ((*p != '\0') && (! v[(unsigned char)*p]))  p++;
5048585484eSchristos     return (char *)(uintptr_t)p;
5058585484eSchristos }
5068585484eSchristos 
5078585484eSchristos static inline char *
5088585484eSchristos spn_ag_char_map_back(char const * s, char const * e, unsigned int mask_ix)
5098585484eSchristos {
5108585484eSchristos     unsigned char const * v = ag_char_map_spanners[mask_ix];
5118585484eSchristos     if (v == NULL)
5128585484eSchristos         v = calc_ag_char_map_spanners(mask_ix);
5138585484eSchristos     if (s >= e) e = s + strlen(s);
5148585484eSchristos     while ((e > s) && v[(unsigned char)e[-1]])  e--;
5158585484eSchristos     return (char *)(uintptr_t)e;
5168585484eSchristos }
5178585484eSchristos 
5188585484eSchristos static inline char *
5198585484eSchristos brk_ag_char_map_back(char const * s, char const * e, unsigned int mask_ix)
5208585484eSchristos {
5218585484eSchristos     unsigned char const * v = ag_char_map_spanners[mask_ix];
5228585484eSchristos     if (v == NULL)
5238585484eSchristos         v = calc_ag_char_map_spanners(mask_ix);
5248585484eSchristos     if (s == e) e += strlen(e);
5258585484eSchristos     while ((e > s) && (! v[(unsigned char)e[-1]]))  e--;
5268585484eSchristos     return (char *)(uintptr_t)e;
5278585484eSchristos }
528abb0f93cSkardel #endif /* AG_CHAR_MAP_H_GUARD */
529