1/* chardefs.h -- Character definitions for readline. */ 2 3/* Copyright (C) 1994-2009 Free Software Foundation, Inc. 4 5 This file is part of the GNU Readline Library (Readline), a library 6 for reading lines of text with interactive input and history editing. 7 8 Readline is free software: you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation, either version 3 of the License, or 11 (at your option) any later version. 12 13 Readline is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with Readline. If not, see <http://www.gnu.org/licenses/>. 20*/ 21 22#ifndef _CHARDEFS_H_ 23#define _CHARDEFS_H_ 24 25#include <ctype.h> 26 27#if defined (HAVE_CONFIG_H) 28# if defined (HAVE_STRING_H) 29# if ! defined (STDC_HEADERS) && defined (HAVE_MEMORY_H) 30# include <memory.h> 31# endif 32# include <string.h> 33# endif /* HAVE_STRING_H */ 34# if defined (HAVE_STRINGS_H) 35# include <strings.h> 36# endif /* HAVE_STRINGS_H */ 37#else 38# include <string.h> 39#endif /* !HAVE_CONFIG_H */ 40 41#ifndef whitespace 42#define whitespace(c) (((c) == ' ') || ((c) == '\t')) 43#endif 44 45#ifdef CTRL 46# undef CTRL 47#endif 48#ifdef UNCTRL 49# undef UNCTRL 50#endif 51 52/* Some character stuff. */ 53#define control_character_threshold 0x020 /* Smaller than this is control. */ 54#define control_character_mask 0x1f /* 0x20 - 1 */ 55#define meta_character_threshold 0x07f /* Larger than this is Meta. */ 56#define control_character_bit 0x40 /* 0x000000, must be off. */ 57#define meta_character_bit 0x080 /* x0000000, must be on. */ 58#define largest_char 255 /* Largest character value. */ 59 60#define CTRL_CHAR(c) ((c) < control_character_threshold && (((c) & 0x80) == 0)) 61#define META_CHAR(c) ((c) > meta_character_threshold && (c) <= largest_char) 62 63#define CTRL(c) ((c) & control_character_mask) 64#define META(c) ((c) | meta_character_bit) 65 66#define UNMETA(c) ((c) & (~meta_character_bit)) 67#define UNCTRL(c) _rl_to_upper(((c)|control_character_bit)) 68 69#if defined STDC_HEADERS || (!defined (isascii) && !defined (HAVE_ISASCII)) 70# define IN_CTYPE_DOMAIN(c) 1 71#else 72# define IN_CTYPE_DOMAIN(c) isascii(c) 73#endif 74 75#if !defined (isxdigit) && !defined (HAVE_ISXDIGIT) 76# define isxdigit(c) (isdigit((c)) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F')) 77#endif 78 79#if defined (CTYPE_NON_ASCII) 80# define NON_NEGATIVE(c) 1 81#else 82# define NON_NEGATIVE(c) ((unsigned char)(c) == (c)) 83#endif 84 85/* Some systems define these; we want our definitions. */ 86#undef ISPRINT 87 88/* Beware: these only work with single-byte ASCII characters. */ 89 90#define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c)) 91#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c)) 92#define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit (c)) 93#define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c)) 94#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c)) 95#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c)) 96#define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit (c)) 97 98#define _rl_lowercase_p(c) (NON_NEGATIVE(c) && ISLOWER(c)) 99#define _rl_uppercase_p(c) (NON_NEGATIVE(c) && ISUPPER(c)) 100#define _rl_digit_p(c) ((c) >= '0' && (c) <= '9') 101 102#define _rl_pure_alphabetic(c) (NON_NEGATIVE(c) && ISALPHA(c)) 103#define ALPHABETIC(c) (NON_NEGATIVE(c) && ISALNUM(c)) 104 105#ifndef _rl_to_upper 106# define _rl_to_upper(c) (_rl_lowercase_p(c) ? toupper((unsigned char)c) : (c)) 107# define _rl_to_lower(c) (_rl_uppercase_p(c) ? tolower((unsigned char)c) : (c)) 108#endif 109 110#ifndef _rl_digit_value 111# define _rl_digit_value(x) ((x) - '0') 112#endif 113 114#ifndef _rl_isident 115# define _rl_isident(c) (ISALNUM(c) || (c) == '_') 116#endif 117 118#ifndef ISOCTAL 119# define ISOCTAL(c) ((c) >= '0' && (c) <= '7') 120#endif 121#define OCTVALUE(c) ((c) - '0') 122 123#define HEXVALUE(c) \ 124 (((c) >= 'a' && (c) <= 'f') \ 125 ? (c)-'a'+10 \ 126 : (c) >= 'A' && (c) <= 'F' ? (c)-'A'+10 : (c)-'0') 127 128#ifndef NEWLINE 129#define NEWLINE '\n' 130#endif 131 132#ifndef RETURN 133#define RETURN CTRL('M') 134#endif 135 136#ifndef RUBOUT 137#define RUBOUT 0x7f 138#endif 139 140#ifndef TAB 141#define TAB '\t' 142#endif 143 144#ifdef ABORT_CHAR 145#undef ABORT_CHAR 146#endif 147#define ABORT_CHAR CTRL('G') 148 149#ifdef PAGE 150#undef PAGE 151#endif 152#define PAGE CTRL('L') 153 154#ifdef SPACE 155#undef SPACE 156#endif 157#define SPACE ' ' /* XXX - was 0x20 */ 158 159#ifdef ESC 160#undef ESC 161#endif 162#define ESC CTRL('[') 163 164#endif /* _CHARDEFS_H_ */ 165