1258945Sroberto/* 2280849Scy * 29 bits for 46 character classifications 3285169Scy * generated by char-mapper on 04/25/15 at 09:53:03 4258945Sroberto * 5258945Sroberto * This file contains the character classifications 6258945Sroberto * used by AutoGen and AutoOpts for identifying tokens. 7280849Scy * The table is static scope, so %guard is empty. 8280849Scy * 9280849Scy * This file is part of AutoOpts, a companion to AutoGen. 10280849Scy * AutoOpts is free software. 11285169Scy * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved 12280849Scy * 13280849Scy * AutoOpts is available under any one of two licenses. The license 14280849Scy * in use must be one of these two and the choice is under the control 15280849Scy * of the user of the license. 16280849Scy * 17280849Scy * The GNU Lesser General Public License, version 3 or later 18280849Scy * See the files "COPYING.lgplv3" and "COPYING.gplv3" 19280849Scy * 20280849Scy * The Modified Berkeley Software Distribution License 21280849Scy * See the file "COPYING.mbsd" 22280849Scy * 23280849Scy * These files have the following sha256 sums: 24280849Scy * 25280849Scy * 8584710e9b04216a394078dc156b781d0b47e1729104d666658aecef8ee32e95 COPYING.gplv3 26280849Scy * 4379e7444a0e2ce2b12dd6f5a52a27a4d02d39d247901d3285c88cf0d37f477b COPYING.lgplv3 27280849Scy * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd 28258945Sroberto */ 29258945Sroberto#ifndef AG_CHAR_MAP_H_GUARD 30258945Sroberto#define AG_CHAR_MAP_H_GUARD 1 31258945Sroberto 32258945Sroberto#ifdef HAVE_CONFIG_H 33258945Sroberto# if defined(HAVE_INTTYPES_H) 34280849Scy# include <inttypes.h> 35280849Scy 36258945Sroberto# elif defined(HAVE_STDINT_H) 37280849Scy# include <stdint.h> 38258945Sroberto 39280849Scy# elif !defined(HAVE_UINT32_T) 40280849Scy# if SIZEOF_INT == 4 41280849Scy typedef unsigned int uint32_t; 42280849Scy# elif SIZEOF_LONG == 4 43280849Scy typedef unsigned long uint32_t; 44258945Sroberto# endif 45258945Sroberto# endif /* HAVE_*INT*_H header */ 46258945Sroberto 47258945Sroberto#else /* not HAVE_CONFIG_H -- */ 48280849Scy# include <inttypes.h> 49258945Sroberto#endif /* HAVE_CONFIG_H */ 50258945Sroberto 51258945Sroberto#if 0 /* mapping specification source (from autogen.map) */ 52258945Sroberto// 53280849Scy// %guard 54258945Sroberto// %file ag-char-map.h 55280849Scy// %backup 56280849Scy// %optimize 57258945Sroberto// 58280849Scy// %comment -- see above 59280849Scy// % 60258945Sroberto// 61280849Scy// newline "\n" 62280849Scy// nul-byte "\x00" 63280849Scy// dir-sep "/\\" 64280849Scy// percent "%" 65280849Scy// comma "," 66280849Scy// colon ":" 67280849Scy// underscore "_" 68280849Scy// plus "+" 69280849Scy// dollar "$" 70280849Scy// option-marker "-" 71258945Sroberto// 72280849Scy// horiz-white "\t " 73280849Scy// alt-white "\v\f\r\b" 74280849Scy// whitespace +horiz-white +newline +alt-white 75280849Scy// non-nl-white +horiz-white +alt-white 76280849Scy// quote "'\"" 77280849Scy// parentheses "()" 78258945Sroberto// 79280849Scy// graphic "!-~" 80280849Scy// inversion "~-" 81280849Scy// oct-digit "0-7" 82280849Scy// dec-digit "89" +oct-digit 83280849Scy// hex-digit "a-fA-F" +dec-digit 84258945Sroberto// lower-case "a-z" 85258945Sroberto// upper-case "A-Z" 86258945Sroberto// alphabetic +lower-case +upper-case 87258945Sroberto// alphanumeric +alphabetic +dec-digit 88280849Scy// var-first +underscore +alphabetic 89258945Sroberto// variable-name +var-first +dec-digit 90258945Sroberto// option-name "^-" +variable-name 91280849Scy// value-name +colon +option-name 92280849Scy// name-sep "[.]" 93280849Scy// compound-name +value-name +name-sep +horiz-white 94280849Scy// scheme-note +parentheses +quote 95280849Scy// 96280849Scy// unquotable "!-~" -"#,;<=>[\\]`{}?*" -quote -parentheses 97258945Sroberto// end-xml-token "/>" +whitespace 98280849Scy// plus-n-space +plus +whitespace 99258945Sroberto// punctuation "!-~" -alphanumeric -"_" 100258945Sroberto// suffix "-._" +alphanumeric 101280849Scy// suffix-fmt +percent +suffix +dir-sep 102280849Scy// false-type "nNfF0" +nul-byte 103280849Scy// file-name +dir-sep +suffix 104280849Scy// end-token +nul-byte +whitespace 105280849Scy// end-list-entry +comma +end-token 106280849Scy// set-separator "|+-!" +end-list-entry 107280849Scy// signed-number +inversion +dec-digit 108280849Scy// make-script +dollar +newline 109280849Scy// load-line-skip +horiz-white +option-marker 110258945Sroberto// 111258945Sroberto#endif /* 0 -- mapping spec. source */ 112258945Sroberto 113258945Sroberto 114280849Scytypedef uint32_t ag_char_map_mask_t; 115280849Scy 116280849Scy#define IS_NEWLINE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000001) 117280849Scy#define SPN_NEWLINE_CHARS(_s) spn_ag_char_map_chars(_s, 0) 118280849Scy#define BRK_NEWLINE_CHARS(_s) brk_ag_char_map_chars(_s, 0) 119280849Scy#define SPN_NEWLINE_BACK(s,e) spn_ag_char_map_back(s, e, 0) 120280849Scy#define BRK_NEWLINE_BACK(s,e) brk_ag_char_map_back(s, e, 0) 121280849Scy#define IS_NUL_BYTE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000002) 122280849Scy#define SPN_NUL_BYTE_CHARS(_s) spn_ag_char_map_chars(_s, 1) 123280849Scy#define BRK_NUL_BYTE_CHARS(_s) brk_ag_char_map_chars(_s, 1) 124280849Scy#define SPN_NUL_BYTE_BACK(s,e) spn_ag_char_map_back(s, e, 1) 125280849Scy#define BRK_NUL_BYTE_BACK(s,e) brk_ag_char_map_back(s, e, 1) 126280849Scy#define IS_DIR_SEP_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000004) 127280849Scy#define SPN_DIR_SEP_CHARS(_s) spn_ag_char_map_chars(_s, 2) 128280849Scy#define BRK_DIR_SEP_CHARS(_s) brk_ag_char_map_chars(_s, 2) 129280849Scy#define SPN_DIR_SEP_BACK(s,e) spn_ag_char_map_back(s, e, 2) 130280849Scy#define BRK_DIR_SEP_BACK(s,e) brk_ag_char_map_back(s, e, 2) 131280849Scy#define IS_PERCENT_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000008) 132280849Scy#define SPN_PERCENT_CHARS(_s) spn_ag_char_map_chars(_s, 3) 133280849Scy#define BRK_PERCENT_CHARS(_s) brk_ag_char_map_chars(_s, 3) 134280849Scy#define SPN_PERCENT_BACK(s,e) spn_ag_char_map_back(s, e, 3) 135280849Scy#define BRK_PERCENT_BACK(s,e) brk_ag_char_map_back(s, e, 3) 136280849Scy#define IS_COMMA_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000010) 137280849Scy#define SPN_COMMA_CHARS(_s) spn_ag_char_map_chars(_s, 4) 138280849Scy#define BRK_COMMA_CHARS(_s) brk_ag_char_map_chars(_s, 4) 139280849Scy#define SPN_COMMA_BACK(s,e) spn_ag_char_map_back(s, e, 4) 140280849Scy#define BRK_COMMA_BACK(s,e) brk_ag_char_map_back(s, e, 4) 141280849Scy#define IS_COLON_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000020) 142280849Scy#define SPN_COLON_CHARS(_s) spn_ag_char_map_chars(_s, 5) 143280849Scy#define BRK_COLON_CHARS(_s) brk_ag_char_map_chars(_s, 5) 144280849Scy#define SPN_COLON_BACK(s,e) spn_ag_char_map_back(s, e, 5) 145280849Scy#define BRK_COLON_BACK(s,e) brk_ag_char_map_back(s, e, 5) 146280849Scy#define IS_UNDERSCORE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000040) 147280849Scy#define SPN_UNDERSCORE_CHARS(_s) spn_ag_char_map_chars(_s, 6) 148280849Scy#define BRK_UNDERSCORE_CHARS(_s) brk_ag_char_map_chars(_s, 6) 149280849Scy#define SPN_UNDERSCORE_BACK(s,e) spn_ag_char_map_back(s, e, 6) 150280849Scy#define BRK_UNDERSCORE_BACK(s,e) brk_ag_char_map_back(s, e, 6) 151280849Scy#define IS_PLUS_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000080) 152280849Scy#define SPN_PLUS_CHARS(_s) spn_ag_char_map_chars(_s, 7) 153280849Scy#define BRK_PLUS_CHARS(_s) brk_ag_char_map_chars(_s, 7) 154280849Scy#define SPN_PLUS_BACK(s,e) spn_ag_char_map_back(s, e, 7) 155280849Scy#define BRK_PLUS_BACK(s,e) brk_ag_char_map_back(s, e, 7) 156280849Scy#define IS_DOLLAR_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000100) 157280849Scy#define SPN_DOLLAR_CHARS(_s) spn_ag_char_map_chars(_s, 8) 158280849Scy#define BRK_DOLLAR_CHARS(_s) brk_ag_char_map_chars(_s, 8) 159280849Scy#define SPN_DOLLAR_BACK(s,e) spn_ag_char_map_back(s, e, 8) 160280849Scy#define BRK_DOLLAR_BACK(s,e) brk_ag_char_map_back(s, e, 8) 161280849Scy#define IS_OPTION_MARKER_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000200) 162280849Scy#define SPN_OPTION_MARKER_CHARS(_s) spn_ag_char_map_chars(_s, 9) 163280849Scy#define BRK_OPTION_MARKER_CHARS(_s) brk_ag_char_map_chars(_s, 9) 164280849Scy#define SPN_OPTION_MARKER_BACK(s,e) spn_ag_char_map_back(s, e, 9) 165280849Scy#define BRK_OPTION_MARKER_BACK(s,e) brk_ag_char_map_back(s, e, 9) 166280849Scy#define IS_HORIZ_WHITE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000400) 167280849Scy#define SPN_HORIZ_WHITE_CHARS(_s) spn_ag_char_map_chars(_s, 10) 168280849Scy#define BRK_HORIZ_WHITE_CHARS(_s) brk_ag_char_map_chars(_s, 10) 169280849Scy#define SPN_HORIZ_WHITE_BACK(s,e) spn_ag_char_map_back(s, e, 10) 170280849Scy#define BRK_HORIZ_WHITE_BACK(s,e) brk_ag_char_map_back(s, e, 10) 171280849Scy#define IS_ALT_WHITE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000800) 172280849Scy#define SPN_ALT_WHITE_CHARS(_s) spn_ag_char_map_chars(_s, 11) 173280849Scy#define BRK_ALT_WHITE_CHARS(_s) brk_ag_char_map_chars(_s, 11) 174280849Scy#define SPN_ALT_WHITE_BACK(s,e) spn_ag_char_map_back(s, e, 11) 175280849Scy#define BRK_ALT_WHITE_BACK(s,e) brk_ag_char_map_back(s, e, 11) 176280849Scy#define IS_WHITESPACE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000C01) 177280849Scy#define SPN_WHITESPACE_CHARS(_s) spn_ag_char_map_chars(_s, 12) 178280849Scy#define BRK_WHITESPACE_CHARS(_s) brk_ag_char_map_chars(_s, 12) 179280849Scy#define SPN_WHITESPACE_BACK(s,e) spn_ag_char_map_back(s, e, 12) 180280849Scy#define BRK_WHITESPACE_BACK(s,e) brk_ag_char_map_back(s, e, 12) 181280849Scy#define IS_NON_NL_WHITE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000C00) 182280849Scy#define SPN_NON_NL_WHITE_CHARS(_s) spn_ag_char_map_chars(_s, 13) 183280849Scy#define BRK_NON_NL_WHITE_CHARS(_s) brk_ag_char_map_chars(_s, 13) 184280849Scy#define SPN_NON_NL_WHITE_BACK(s,e) spn_ag_char_map_back(s, e, 13) 185280849Scy#define BRK_NON_NL_WHITE_BACK(s,e) brk_ag_char_map_back(s, e, 13) 186280849Scy#define IS_QUOTE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00001000) 187280849Scy#define SPN_QUOTE_CHARS(_s) spn_ag_char_map_chars(_s, 14) 188280849Scy#define BRK_QUOTE_CHARS(_s) brk_ag_char_map_chars(_s, 14) 189280849Scy#define SPN_QUOTE_BACK(s,e) spn_ag_char_map_back(s, e, 14) 190280849Scy#define BRK_QUOTE_BACK(s,e) brk_ag_char_map_back(s, e, 14) 191280849Scy#define IS_PARENTHESES_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00002000) 192280849Scy#define SPN_PARENTHESES_CHARS(_s) spn_ag_char_map_chars(_s, 15) 193280849Scy#define BRK_PARENTHESES_CHARS(_s) brk_ag_char_map_chars(_s, 15) 194280849Scy#define SPN_PARENTHESES_BACK(s,e) spn_ag_char_map_back(s, e, 15) 195280849Scy#define BRK_PARENTHESES_BACK(s,e) brk_ag_char_map_back(s, e, 15) 196280849Scy#define IS_GRAPHIC_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00004000) 197280849Scy#define SPN_GRAPHIC_CHARS(_s) spn_ag_char_map_chars(_s, 16) 198280849Scy#define BRK_GRAPHIC_CHARS(_s) brk_ag_char_map_chars(_s, 16) 199280849Scy#define SPN_GRAPHIC_BACK(s,e) spn_ag_char_map_back(s, e, 16) 200280849Scy#define BRK_GRAPHIC_BACK(s,e) brk_ag_char_map_back(s, e, 16) 201280849Scy#define IS_INVERSION_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00008000) 202280849Scy#define SPN_INVERSION_CHARS(_s) spn_ag_char_map_chars(_s, 17) 203280849Scy#define BRK_INVERSION_CHARS(_s) brk_ag_char_map_chars(_s, 17) 204280849Scy#define SPN_INVERSION_BACK(s,e) spn_ag_char_map_back(s, e, 17) 205280849Scy#define BRK_INVERSION_BACK(s,e) brk_ag_char_map_back(s, e, 17) 206280849Scy#define IS_OCT_DIGIT_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00010000) 207280849Scy#define SPN_OCT_DIGIT_CHARS(_s) spn_ag_char_map_chars(_s, 18) 208280849Scy#define BRK_OCT_DIGIT_CHARS(_s) brk_ag_char_map_chars(_s, 18) 209280849Scy#define SPN_OCT_DIGIT_BACK(s,e) spn_ag_char_map_back(s, e, 18) 210280849Scy#define BRK_OCT_DIGIT_BACK(s,e) brk_ag_char_map_back(s, e, 18) 211280849Scy#define IS_DEC_DIGIT_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00030000) 212280849Scy#define SPN_DEC_DIGIT_CHARS(_s) spn_ag_char_map_chars(_s, 19) 213280849Scy#define BRK_DEC_DIGIT_CHARS(_s) brk_ag_char_map_chars(_s, 19) 214280849Scy#define SPN_DEC_DIGIT_BACK(s,e) spn_ag_char_map_back(s, e, 19) 215280849Scy#define BRK_DEC_DIGIT_BACK(s,e) brk_ag_char_map_back(s, e, 19) 216280849Scy#define IS_HEX_DIGIT_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00070000) 217280849Scy#define SPN_HEX_DIGIT_CHARS(_s) spn_ag_char_map_chars(_s, 20) 218280849Scy#define BRK_HEX_DIGIT_CHARS(_s) brk_ag_char_map_chars(_s, 20) 219280849Scy#define SPN_HEX_DIGIT_BACK(s,e) spn_ag_char_map_back(s, e, 20) 220280849Scy#define BRK_HEX_DIGIT_BACK(s,e) brk_ag_char_map_back(s, e, 20) 221280849Scy#define IS_LOWER_CASE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00080000) 222280849Scy#define SPN_LOWER_CASE_CHARS(_s) spn_ag_char_map_chars(_s, 21) 223280849Scy#define BRK_LOWER_CASE_CHARS(_s) brk_ag_char_map_chars(_s, 21) 224280849Scy#define SPN_LOWER_CASE_BACK(s,e) spn_ag_char_map_back(s, e, 21) 225280849Scy#define BRK_LOWER_CASE_BACK(s,e) brk_ag_char_map_back(s, e, 21) 226280849Scy#define IS_UPPER_CASE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00100000) 227280849Scy#define SPN_UPPER_CASE_CHARS(_s) spn_ag_char_map_chars(_s, 22) 228280849Scy#define BRK_UPPER_CASE_CHARS(_s) brk_ag_char_map_chars(_s, 22) 229280849Scy#define SPN_UPPER_CASE_BACK(s,e) spn_ag_char_map_back(s, e, 22) 230280849Scy#define BRK_UPPER_CASE_BACK(s,e) brk_ag_char_map_back(s, e, 22) 231280849Scy#define IS_ALPHABETIC_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00180000) 232280849Scy#define SPN_ALPHABETIC_CHARS(_s) spn_ag_char_map_chars(_s, 23) 233280849Scy#define BRK_ALPHABETIC_CHARS(_s) brk_ag_char_map_chars(_s, 23) 234280849Scy#define SPN_ALPHABETIC_BACK(s,e) spn_ag_char_map_back(s, e, 23) 235280849Scy#define BRK_ALPHABETIC_BACK(s,e) brk_ag_char_map_back(s, e, 23) 236280849Scy#define IS_ALPHANUMERIC_CHAR( _c) is_ag_char_map_char((char)(_c), 0x001B0000) 237280849Scy#define SPN_ALPHANUMERIC_CHARS(_s) spn_ag_char_map_chars(_s, 24) 238280849Scy#define BRK_ALPHANUMERIC_CHARS(_s) brk_ag_char_map_chars(_s, 24) 239280849Scy#define SPN_ALPHANUMERIC_BACK(s,e) spn_ag_char_map_back(s, e, 24) 240280849Scy#define BRK_ALPHANUMERIC_BACK(s,e) brk_ag_char_map_back(s, e, 24) 241280849Scy#define IS_VAR_FIRST_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00180040) 242280849Scy#define SPN_VAR_FIRST_CHARS(_s) spn_ag_char_map_chars(_s, 25) 243280849Scy#define BRK_VAR_FIRST_CHARS(_s) brk_ag_char_map_chars(_s, 25) 244280849Scy#define SPN_VAR_FIRST_BACK(s,e) spn_ag_char_map_back(s, e, 25) 245280849Scy#define BRK_VAR_FIRST_BACK(s,e) brk_ag_char_map_back(s, e, 25) 246280849Scy#define IS_VARIABLE_NAME_CHAR( _c) is_ag_char_map_char((char)(_c), 0x001B0040) 247280849Scy#define SPN_VARIABLE_NAME_CHARS(_s) spn_ag_char_map_chars(_s, 26) 248280849Scy#define BRK_VARIABLE_NAME_CHARS(_s) brk_ag_char_map_chars(_s, 26) 249280849Scy#define SPN_VARIABLE_NAME_BACK(s,e) spn_ag_char_map_back(s, e, 26) 250280849Scy#define BRK_VARIABLE_NAME_BACK(s,e) brk_ag_char_map_back(s, e, 26) 251280849Scy#define IS_OPTION_NAME_CHAR( _c) is_ag_char_map_char((char)(_c), 0x003B0040) 252280849Scy#define SPN_OPTION_NAME_CHARS(_s) spn_ag_char_map_chars(_s, 27) 253280849Scy#define BRK_OPTION_NAME_CHARS(_s) brk_ag_char_map_chars(_s, 27) 254280849Scy#define SPN_OPTION_NAME_BACK(s,e) spn_ag_char_map_back(s, e, 27) 255280849Scy#define BRK_OPTION_NAME_BACK(s,e) brk_ag_char_map_back(s, e, 27) 256280849Scy#define IS_VALUE_NAME_CHAR( _c) is_ag_char_map_char((char)(_c), 0x003B0060) 257280849Scy#define SPN_VALUE_NAME_CHARS(_s) spn_ag_char_map_chars(_s, 28) 258280849Scy#define BRK_VALUE_NAME_CHARS(_s) brk_ag_char_map_chars(_s, 28) 259280849Scy#define SPN_VALUE_NAME_BACK(s,e) spn_ag_char_map_back(s, e, 28) 260280849Scy#define BRK_VALUE_NAME_BACK(s,e) brk_ag_char_map_back(s, e, 28) 261280849Scy#define IS_NAME_SEP_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00400000) 262280849Scy#define SPN_NAME_SEP_CHARS(_s) spn_ag_char_map_chars(_s, 29) 263280849Scy#define BRK_NAME_SEP_CHARS(_s) brk_ag_char_map_chars(_s, 29) 264280849Scy#define SPN_NAME_SEP_BACK(s,e) spn_ag_char_map_back(s, e, 29) 265280849Scy#define BRK_NAME_SEP_BACK(s,e) brk_ag_char_map_back(s, e, 29) 266280849Scy#define IS_COMPOUND_NAME_CHAR( _c) is_ag_char_map_char((char)(_c), 0x007B0460) 267280849Scy#define SPN_COMPOUND_NAME_CHARS(_s) spn_ag_char_map_chars(_s, 30) 268280849Scy#define BRK_COMPOUND_NAME_CHARS(_s) brk_ag_char_map_chars(_s, 30) 269280849Scy#define SPN_COMPOUND_NAME_BACK(s,e) spn_ag_char_map_back(s, e, 30) 270280849Scy#define BRK_COMPOUND_NAME_BACK(s,e) brk_ag_char_map_back(s, e, 30) 271280849Scy#define IS_SCHEME_NOTE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00003000) 272280849Scy#define SPN_SCHEME_NOTE_CHARS(_s) spn_ag_char_map_chars(_s, 31) 273280849Scy#define BRK_SCHEME_NOTE_CHARS(_s) brk_ag_char_map_chars(_s, 31) 274280849Scy#define SPN_SCHEME_NOTE_BACK(s,e) spn_ag_char_map_back(s, e, 31) 275280849Scy#define BRK_SCHEME_NOTE_BACK(s,e) brk_ag_char_map_back(s, e, 31) 276280849Scy#define IS_UNQUOTABLE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00800000) 277280849Scy#define SPN_UNQUOTABLE_CHARS(_s) spn_ag_char_map_chars(_s, 32) 278280849Scy#define BRK_UNQUOTABLE_CHARS(_s) brk_ag_char_map_chars(_s, 32) 279280849Scy#define SPN_UNQUOTABLE_BACK(s,e) spn_ag_char_map_back(s, e, 32) 280280849Scy#define BRK_UNQUOTABLE_BACK(s,e) brk_ag_char_map_back(s, e, 32) 281280849Scy#define IS_END_XML_TOKEN_CHAR( _c) is_ag_char_map_char((char)(_c), 0x01000C01) 282280849Scy#define SPN_END_XML_TOKEN_CHARS(_s) spn_ag_char_map_chars(_s, 33) 283280849Scy#define BRK_END_XML_TOKEN_CHARS(_s) brk_ag_char_map_chars(_s, 33) 284280849Scy#define SPN_END_XML_TOKEN_BACK(s,e) spn_ag_char_map_back(s, e, 33) 285280849Scy#define BRK_END_XML_TOKEN_BACK(s,e) brk_ag_char_map_back(s, e, 33) 286280849Scy#define IS_PLUS_N_SPACE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000C81) 287280849Scy#define SPN_PLUS_N_SPACE_CHARS(_s) spn_ag_char_map_chars(_s, 34) 288280849Scy#define BRK_PLUS_N_SPACE_CHARS(_s) brk_ag_char_map_chars(_s, 34) 289280849Scy#define SPN_PLUS_N_SPACE_BACK(s,e) spn_ag_char_map_back(s, e, 34) 290280849Scy#define BRK_PLUS_N_SPACE_BACK(s,e) brk_ag_char_map_back(s, e, 34) 291280849Scy#define IS_PUNCTUATION_CHAR( _c) is_ag_char_map_char((char)(_c), 0x02000000) 292280849Scy#define SPN_PUNCTUATION_CHARS(_s) spn_ag_char_map_chars(_s, 35) 293280849Scy#define BRK_PUNCTUATION_CHARS(_s) brk_ag_char_map_chars(_s, 35) 294280849Scy#define SPN_PUNCTUATION_BACK(s,e) spn_ag_char_map_back(s, e, 35) 295280849Scy#define BRK_PUNCTUATION_BACK(s,e) brk_ag_char_map_back(s, e, 35) 296280849Scy#define IS_SUFFIX_CHAR( _c) is_ag_char_map_char((char)(_c), 0x041B0000) 297280849Scy#define SPN_SUFFIX_CHARS(_s) spn_ag_char_map_chars(_s, 36) 298280849Scy#define BRK_SUFFIX_CHARS(_s) brk_ag_char_map_chars(_s, 36) 299280849Scy#define SPN_SUFFIX_BACK(s,e) spn_ag_char_map_back(s, e, 36) 300280849Scy#define BRK_SUFFIX_BACK(s,e) brk_ag_char_map_back(s, e, 36) 301280849Scy#define IS_SUFFIX_FMT_CHAR( _c) is_ag_char_map_char((char)(_c), 0x041B000C) 302280849Scy#define SPN_SUFFIX_FMT_CHARS(_s) spn_ag_char_map_chars(_s, 37) 303280849Scy#define BRK_SUFFIX_FMT_CHARS(_s) brk_ag_char_map_chars(_s, 37) 304280849Scy#define SPN_SUFFIX_FMT_BACK(s,e) spn_ag_char_map_back(s, e, 37) 305280849Scy#define BRK_SUFFIX_FMT_BACK(s,e) brk_ag_char_map_back(s, e, 37) 306280849Scy#define IS_FALSE_TYPE_CHAR( _c) is_ag_char_map_char((char)(_c), 0x08000002) 307280849Scy#define SPN_FALSE_TYPE_CHARS(_s) spn_ag_char_map_chars(_s, 38) 308280849Scy#define BRK_FALSE_TYPE_CHARS(_s) brk_ag_char_map_chars(_s, 38) 309280849Scy#define SPN_FALSE_TYPE_BACK(s,e) spn_ag_char_map_back(s, e, 38) 310280849Scy#define BRK_FALSE_TYPE_BACK(s,e) brk_ag_char_map_back(s, e, 38) 311280849Scy#define IS_FILE_NAME_CHAR( _c) is_ag_char_map_char((char)(_c), 0x041B0004) 312280849Scy#define SPN_FILE_NAME_CHARS(_s) spn_ag_char_map_chars(_s, 39) 313280849Scy#define BRK_FILE_NAME_CHARS(_s) brk_ag_char_map_chars(_s, 39) 314280849Scy#define SPN_FILE_NAME_BACK(s,e) spn_ag_char_map_back(s, e, 39) 315280849Scy#define BRK_FILE_NAME_BACK(s,e) brk_ag_char_map_back(s, e, 39) 316280849Scy#define IS_END_TOKEN_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000C03) 317280849Scy#define SPN_END_TOKEN_CHARS(_s) spn_ag_char_map_chars(_s, 40) 318280849Scy#define BRK_END_TOKEN_CHARS(_s) brk_ag_char_map_chars(_s, 40) 319280849Scy#define SPN_END_TOKEN_BACK(s,e) spn_ag_char_map_back(s, e, 40) 320280849Scy#define BRK_END_TOKEN_BACK(s,e) brk_ag_char_map_back(s, e, 40) 321280849Scy#define IS_END_LIST_ENTRY_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000C13) 322280849Scy#define SPN_END_LIST_ENTRY_CHARS(_s) spn_ag_char_map_chars(_s, 41) 323280849Scy#define BRK_END_LIST_ENTRY_CHARS(_s) brk_ag_char_map_chars(_s, 41) 324280849Scy#define SPN_END_LIST_ENTRY_BACK(s,e) spn_ag_char_map_back(s, e, 41) 325280849Scy#define BRK_END_LIST_ENTRY_BACK(s,e) brk_ag_char_map_back(s, e, 41) 326280849Scy#define IS_SET_SEPARATOR_CHAR( _c) is_ag_char_map_char((char)(_c), 0x10000C13) 327280849Scy#define SPN_SET_SEPARATOR_CHARS(_s) spn_ag_char_map_chars(_s, 42) 328280849Scy#define BRK_SET_SEPARATOR_CHARS(_s) brk_ag_char_map_chars(_s, 42) 329280849Scy#define SPN_SET_SEPARATOR_BACK(s,e) spn_ag_char_map_back(s, e, 42) 330280849Scy#define BRK_SET_SEPARATOR_BACK(s,e) brk_ag_char_map_back(s, e, 42) 331280849Scy#define IS_SIGNED_NUMBER_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00038000) 332280849Scy#define SPN_SIGNED_NUMBER_CHARS(_s) spn_ag_char_map_chars(_s, 43) 333280849Scy#define BRK_SIGNED_NUMBER_CHARS(_s) brk_ag_char_map_chars(_s, 43) 334280849Scy#define SPN_SIGNED_NUMBER_BACK(s,e) spn_ag_char_map_back(s, e, 43) 335280849Scy#define BRK_SIGNED_NUMBER_BACK(s,e) brk_ag_char_map_back(s, e, 43) 336280849Scy#define IS_MAKE_SCRIPT_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000101) 337280849Scy#define SPN_MAKE_SCRIPT_CHARS(_s) spn_ag_char_map_chars(_s, 44) 338280849Scy#define BRK_MAKE_SCRIPT_CHARS(_s) brk_ag_char_map_chars(_s, 44) 339280849Scy#define SPN_MAKE_SCRIPT_BACK(s,e) spn_ag_char_map_back(s, e, 44) 340280849Scy#define BRK_MAKE_SCRIPT_BACK(s,e) brk_ag_char_map_back(s, e, 44) 341280849Scy#define IS_LOAD_LINE_SKIP_CHAR( _c) is_ag_char_map_char((char)(_c), 0x00000600) 342280849Scy#define SPN_LOAD_LINE_SKIP_CHARS(_s) spn_ag_char_map_chars(_s, 45) 343280849Scy#define BRK_LOAD_LINE_SKIP_CHARS(_s) brk_ag_char_map_chars(_s, 45) 344280849Scy#define SPN_LOAD_LINE_SKIP_BACK(s,e) spn_ag_char_map_back(s, e, 45) 345280849Scy#define BRK_LOAD_LINE_SKIP_BACK(s,e) brk_ag_char_map_back(s, e, 45) 346280849Scy 347280849Scystatic ag_char_map_mask_t const ag_char_map_table[128] = { 348280849Scy /*NUL*/ 0x00000002, /*x01*/ 0x00000000, /*x02*/ 0x00000000, /*x03*/ 0x00000000, 349280849Scy /*x04*/ 0x00000000, /*x05*/ 0x00000000, /*x06*/ 0x00000000, /*BEL*/ 0x00000000, 350280849Scy /* BS*/ 0x00000800, /* HT*/ 0x00000400, /* NL*/ 0x00000001, /* VT*/ 0x00000800, 351280849Scy /* FF*/ 0x00000800, /* CR*/ 0x00000800, /*x0E*/ 0x00000000, /*x0F*/ 0x00000000, 352280849Scy /*x10*/ 0x00000000, /*x11*/ 0x00000000, /*x12*/ 0x00000000, /*x13*/ 0x00000000, 353280849Scy /*x14*/ 0x00000000, /*x15*/ 0x00000000, /*x16*/ 0x00000000, /*x17*/ 0x00000000, 354280849Scy /*x18*/ 0x00000000, /*x19*/ 0x00000000, /*x1A*/ 0x00000000, /*ESC*/ 0x00000000, 355280849Scy /*x1C*/ 0x00000000, /*x1D*/ 0x00000000, /*x1E*/ 0x00000000, /*x1F*/ 0x00000000, 356280849Scy /* */ 0x00000400, /* ! */ 0x02804000, /* " */ 0x02005000, /* # */ 0x02004000, 357280849Scy /* $ */ 0x02804100, /* % */ 0x02804008, /* & */ 0x02804000, /* ' */ 0x02005000, 358280849Scy /* ( */ 0x02006000, /* ) */ 0x02006000, /* * */ 0x02004000, /* + */ 0x12804080, 359280849Scy /* , */ 0x02004010, /* - */ 0x06A0C200, /* . */ 0x06C04000, /* / */ 0x03804004, 360280849Scy /* 0 */ 0x08814000, /* 1 */ 0x00814000, /* 2 */ 0x00814000, /* 3 */ 0x00814000, 361280849Scy /* 4 */ 0x00814000, /* 5 */ 0x00814000, /* 6 */ 0x00814000, /* 7 */ 0x00814000, 362280849Scy /* 8 */ 0x00824000, /* 9 */ 0x00824000, /* : */ 0x02804020, /* ; */ 0x02004000, 363280849Scy /* < */ 0x02004000, /* = */ 0x02004000, /* > */ 0x03004000, /* ? */ 0x02004000, 364280849Scy /* @ */ 0x02804000, /* A */ 0x00944000, /* B */ 0x00944000, /* C */ 0x00944000, 365280849Scy /* D */ 0x00944000, /* E */ 0x00944000, /* F */ 0x08944000, /* G */ 0x00904000, 366280849Scy /* H */ 0x00904000, /* I */ 0x00904000, /* J */ 0x00904000, /* K */ 0x00904000, 367280849Scy /* L */ 0x00904000, /* M */ 0x00904000, /* N */ 0x08904000, /* O */ 0x00904000, 368280849Scy /* P */ 0x00904000, /* Q */ 0x00904000, /* R */ 0x00904000, /* S */ 0x00904000, 369280849Scy /* T */ 0x00904000, /* U */ 0x00904000, /* V */ 0x00904000, /* W */ 0x00904000, 370280849Scy /* X */ 0x00904000, /* Y */ 0x00904000, /* Z */ 0x00904000, /* [ */ 0x02404000, 371280849Scy /* \ */ 0x02004004, /* ] */ 0x02404000, /* ^ */ 0x02A04000, /* _ */ 0x04804040, 372280849Scy /* ` */ 0x02004000, /* a */ 0x008C4000, /* b */ 0x008C4000, /* c */ 0x008C4000, 373280849Scy /* d */ 0x008C4000, /* e */ 0x008C4000, /* f */ 0x088C4000, /* g */ 0x00884000, 374280849Scy /* h */ 0x00884000, /* i */ 0x00884000, /* j */ 0x00884000, /* k */ 0x00884000, 375280849Scy /* l */ 0x00884000, /* m */ 0x00884000, /* n */ 0x08884000, /* o */ 0x00884000, 376280849Scy /* p */ 0x00884000, /* q */ 0x00884000, /* r */ 0x00884000, /* s */ 0x00884000, 377280849Scy /* t */ 0x00884000, /* u */ 0x00884000, /* v */ 0x00884000, /* w */ 0x00884000, 378280849Scy /* x */ 0x00884000, /* y */ 0x00884000, /* z */ 0x00884000, /* { */ 0x02004000, 379280849Scy /* | */ 0x12804000, /* } */ 0x02004000, /* ~ */ 0x0280C000, /*x7F*/ 0x00000000 380280849Scy}; 381280849Scy 382280849Scy#include <stdio.h> 383280849Scy#include <stdlib.h> 384280849Scy#include <string.h> 385280849Scy 386280849Scy#ifndef _ 387280849Scy# define _(_s) _s 388280849Scy#endif 389280849Scy 390280849Scystatic unsigned char const * ag_char_map_spanners[46]; 391280849Scy/** 392280849Scy * Character category masks. Some categories may have multiple bits, 393280849Scy * if their definition incorporates other character categories. 394280849Scy * This mask array is only used by calc_ag_char_map_spanners(). 395280849Scy */ 396280849Scystatic ag_char_map_mask_t const ag_char_map_masks[46] = { 397280849Scy 0x00000001, /* NEWLINE */ 398280849Scy 0x00000002, /* NUL_BYTE */ 399280849Scy 0x00000004, /* DIR_SEP */ 400280849Scy 0x00000008, /* PERCENT */ 401280849Scy 0x00000010, /* COMMA */ 402280849Scy 0x00000020, /* COLON */ 403280849Scy 0x00000040, /* UNDERSCORE */ 404280849Scy 0x00000080, /* PLUS */ 405280849Scy 0x00000100, /* DOLLAR */ 406280849Scy 0x00000200, /* OPTION_MARKER */ 407280849Scy 0x00000400, /* HORIZ_WHITE */ 408280849Scy 0x00000800, /* ALT_WHITE */ 409280849Scy 0x00000C01, /* WHITESPACE */ 410280849Scy 0x00000C00, /* NON_NL_WHITE */ 411280849Scy 0x00001000, /* QUOTE */ 412280849Scy 0x00002000, /* PARENTHESES */ 413280849Scy 0x00004000, /* GRAPHIC */ 414280849Scy 0x00008000, /* INVERSION */ 415280849Scy 0x00010000, /* OCT_DIGIT */ 416280849Scy 0x00030000, /* DEC_DIGIT */ 417280849Scy 0x00070000, /* HEX_DIGIT */ 418280849Scy 0x00080000, /* LOWER_CASE */ 419280849Scy 0x00100000, /* UPPER_CASE */ 420280849Scy 0x00180000, /* ALPHABETIC */ 421280849Scy 0x001B0000, /* ALPHANUMERIC */ 422280849Scy 0x00180040, /* VAR_FIRST */ 423280849Scy 0x001B0040, /* VARIABLE_NAME */ 424280849Scy 0x003B0040, /* OPTION_NAME */ 425280849Scy 0x003B0060, /* VALUE_NAME */ 426280849Scy 0x00400000, /* NAME_SEP */ 427280849Scy 0x007B0460, /* COMPOUND_NAME */ 428280849Scy 0x00003000, /* SCHEME_NOTE */ 429280849Scy 0x00800000, /* UNQUOTABLE */ 430280849Scy 0x01000C01, /* END_XML_TOKEN */ 431280849Scy 0x00000C81, /* PLUS_N_SPACE */ 432280849Scy 0x02000000, /* PUNCTUATION */ 433280849Scy 0x041B0000, /* SUFFIX */ 434280849Scy 0x041B000C, /* SUFFIX_FMT */ 435280849Scy 0x08000002, /* FALSE_TYPE */ 436280849Scy 0x041B0004, /* FILE_NAME */ 437280849Scy 0x00000C03, /* END_TOKEN */ 438280849Scy 0x00000C13, /* END_LIST_ENTRY */ 439280849Scy 0x10000C13, /* SET_SEPARATOR */ 440280849Scy 0x00038000, /* SIGNED_NUMBER */ 441280849Scy 0x00000101, /* MAKE_SCRIPT */ 442280849Scy 0x00000600, /* LOAD_LINE_SKIP */ 443280849Scy}; 444280849Scy#undef LOCK_SPANNER_TABLES 445280849Scy 446280849Scystatic unsigned char const * 447280849Scycalc_ag_char_map_spanners(unsigned int mask_ix) 448280849Scy{ 449280849Scy#ifdef LOCK_SPANNER_TABLES 450280849Scy if (ag_char_map_spanners[mask_ix] != NULL) 451280849Scy return ag_char_map_spanners[mask_ix]; 452280849Scy 453280849Scy pthread_mutex_lock(&ag_char_map_mutex); 454280849Scy if (ag_char_map_spanners[mask_ix] == NULL) 455280849Scy#endif 456280849Scy { 457280849Scy int ix = 1; 458280849Scy ag_char_map_mask_t mask = ag_char_map_masks[mask_ix]; 459280849Scy unsigned char * res = malloc(256 /* 1 << NBBY */); 460280849Scy if (res == NULL) { 461280849Scy fputs(_("no memory for char-mapper span map\n"), stderr); 462280849Scy exit(EXIT_FAILURE); 463280849Scy } 464280849Scy 465280849Scy memset(res, 0, 256); 466280849Scy for (; ix < 128; ix++) 467280849Scy if (ag_char_map_table[ix] & mask) 468280849Scy res[ix] = 1; 469280849Scy ag_char_map_spanners[mask_ix] = res; 470280849Scy } 471280849Scy#ifdef LOCK_SPANNER_TABLES 472280849Scy pthread_mutex_unlock(&ag_char_map_mutex); 473280849Scy#endif 474280849Scy return ag_char_map_spanners[mask_ix]; 475280849Scy} 476280849Scy#define ag_char_map_masks POISONED_ag_char_map_masks 477280849Scy 478280849Scystatic inline int 479280849Scyis_ag_char_map_char(char ch, ag_char_map_mask_t mask) 480280849Scy{ 481258945Sroberto unsigned int ix = (unsigned char)ch; 482280849Scy return ((ix < 128) && ((ag_char_map_table[ix] & mask) != 0)); 483280849Scy} 484258945Sroberto 485280849Scystatic inline char * 486280849Scyspn_ag_char_map_chars(char const * p, unsigned int mask_ix) 487280849Scy{ 488280849Scy unsigned char const * v = ag_char_map_spanners[mask_ix]; 489280849Scy if (v == NULL) 490280849Scy v = calc_ag_char_map_spanners(mask_ix); 491280849Scy while (v[(unsigned char)*p]) p++; 492280849Scy return (char *)(uintptr_t)p; 493280849Scy} 494258945Sroberto 495280849Scystatic inline char * 496280849Scybrk_ag_char_map_chars(char const * p, unsigned int mask_ix) 497280849Scy{ 498280849Scy unsigned char const * v = ag_char_map_spanners[mask_ix]; 499280849Scy if (v == NULL) 500280849Scy v = calc_ag_char_map_spanners(mask_ix); 501280849Scy while ((*p != '\0') && (! v[(unsigned char)*p])) p++; 502280849Scy return (char *)(uintptr_t)p; 503280849Scy} 504280849Scy 505280849Scystatic inline char * 506280849Scyspn_ag_char_map_back(char const * s, char const * e, unsigned int mask_ix) 507280849Scy{ 508280849Scy unsigned char const * v = ag_char_map_spanners[mask_ix]; 509280849Scy if (v == NULL) 510280849Scy v = calc_ag_char_map_spanners(mask_ix); 511280849Scy if (s >= e) e = s + strlen(s); 512280849Scy while ((e > s) && v[(unsigned char)e[-1]]) e--; 513280849Scy return (char *)(uintptr_t)e; 514280849Scy} 515280849Scy 516280849Scystatic inline char * 517280849Scybrk_ag_char_map_back(char const * s, char const * e, unsigned int mask_ix) 518280849Scy{ 519280849Scy unsigned char const * v = ag_char_map_spanners[mask_ix]; 520280849Scy if (v == NULL) 521280849Scy v = calc_ag_char_map_spanners(mask_ix); 522280849Scy if (s == e) e += strlen(e); 523280849Scy while ((e > s) && (! v[(unsigned char)e[-1]])) e--; 524280849Scy return (char *)(uintptr_t)e; 525280849Scy} 526258945Sroberto#endif /* AG_CHAR_MAP_H_GUARD */ 527