token.h revision 151498
1// -*- C++ -*- 2/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. 3 Written by James Clark (jjc@jclark.com) 4 5This file is part of groff. 6 7groff is free software; you can redistribute it and/or modify it under 8the terms of the GNU General Public License as published by the Free 9Software Foundation; either version 2, or (at your option) any later 10version. 11 12groff is distributed in the hope that it will be useful, but WITHOUT ANY 13WARRANTY; without even the implied warranty of MERCHANTABILITY or 14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15for more details. 16 17You should have received a copy of the GNU General Public License along 18with groff; see the file COPYING. If not, write to the Free Software 19Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ 20 21enum token_type { 22 TOKEN_OTHER, 23 TOKEN_UPPER, 24 TOKEN_LOWER, 25 TOKEN_ACCENT, 26 TOKEN_PUNCT, 27 TOKEN_HYPHEN, 28 TOKEN_RANGE_SEP 29}; 30 31class token_info { 32private: 33 token_type type; 34 const char *sort_key; 35 const char *other_case; 36public: 37 token_info(); 38 void set(token_type, const char *sk = 0, const char *oc = 0); 39 void lower_case(const char *start, const char *end, string &result) const; 40 void upper_case(const char *start, const char *end, string &result) const; 41 void sortify(const char *start, const char *end, string &result) const; 42 int sortify_non_empty(const char *start, const char *end) const; 43 int is_upper() const; 44 int is_lower() const; 45 int is_accent() const; 46 int is_other() const; 47 int is_punct() const; 48 int is_hyphen() const; 49 int is_range_sep() const; 50}; 51 52inline int token_info::is_upper() const 53{ 54 return type == TOKEN_UPPER; 55} 56 57inline int token_info::is_lower() const 58{ 59 return type == TOKEN_LOWER; 60} 61 62inline int token_info::is_accent() const 63{ 64 return type == TOKEN_ACCENT; 65} 66 67inline int token_info::is_other() const 68{ 69 return type == TOKEN_OTHER; 70} 71 72inline int token_info::is_punct() const 73{ 74 return type == TOKEN_PUNCT; 75} 76 77inline int token_info::is_hyphen() const 78{ 79 return type == TOKEN_HYPHEN; 80} 81 82inline int token_info::is_range_sep() const 83{ 84 return type == TOKEN_RANGE_SEP; 85} 86 87int get_token(const char **ptr, const char *end); 88const token_info *lookup_token(const char *start, const char *end); 89