1 /* 2 * Copyright 2008, Haiku. 3 * Distributed under the terms of the MIT license. 4 * 5 * Authors: 6 * Michael Pfeiffer <laplace@users.sourceforge.net> 7 */ 8 9 #ifndef _CHARACTER_CLASSES_H 10 #define _CHARACTER_CLASSES_H 11 12 #define kCr '\n' 13 #define kLf '\r' 14 #define kTab '\t' 15 #define kEof -1 16 17 inline bool IsWhitespaceSeparator(int ch) 18 { 19 return ch == ' ' || ch == kTab; 20 } 21 22 inline bool IsWhitespace(int ch) 23 { 24 return ch == ' ' || ch == kTab || ch == kLf || ch == kCr; 25 } 26 27 inline bool IsIdentChar(int ch) { 28 // TODO check '.' if is an identifier character 29 // in one of the PPD files delivered with BeOS R5 30 // '.' is used inside of an identifier 31 // if (ch == '.' || ch == '/' || ch == ':') return false; 32 if (ch == '/' || ch == ':') return false; 33 return 33 <= ch && ch <= 126; 34 } 35 36 inline bool IsOptionChar(int ch) 37 { 38 if (ch == '.') return true; 39 return IsIdentChar(ch); 40 } 41 42 inline bool IsChar(int ch) 43 { 44 if (ch == '"') return false; 45 return 32 <= ch && ch <= 255 || IsWhitespace(ch); 46 } 47 48 inline bool IsPrintableWithoutWhitespaces(int ch) 49 { 50 if (ch == '"') return false; 51 return 33 <= ch && ch <= 126; 52 } 53 54 inline bool IsPrintableWithWhitespaces(int ch) 55 { 56 return IsPrintableWithoutWhitespaces(ch) || IsWhitespace(ch); 57 } 58 59 inline bool IsStringChar(int ch) 60 { 61 if (IsWhitespaceSeparator(ch)) return true; 62 if (ch == '"') return true; 63 if (ch == '/') return false; 64 return IsPrintableWithoutWhitespaces(ch); 65 } 66 67 #endif 68