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 IsWhitespaceSeparator(int ch)17inline bool IsWhitespaceSeparator(int ch) 18 { 19 return ch == ' ' || ch == kTab; 20 } 21 IsWhitespace(int ch)22inline bool IsWhitespace(int ch) 23 { 24 return ch == ' ' || ch == kTab || ch == kLf || ch == kCr; 25 } 26 IsIdentChar(int ch)27inline 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 IsOptionChar(int ch)36inline bool IsOptionChar(int ch) 37 { 38 if (ch == '.') return true; 39 return IsIdentChar(ch); 40 } 41 IsChar(int ch)42inline bool IsChar(int ch) 43 { 44 if (ch == '"') return false; 45 return 32 <= ch && ch <= 255 || IsWhitespace(ch); 46 } 47 IsPrintableWithoutWhitespaces(int ch)48inline bool IsPrintableWithoutWhitespaces(int ch) 49 { 50 if (ch == '"') return false; 51 return 33 <= ch && ch <= 126; 52 } 53 IsPrintableWithWhitespaces(int ch)54inline bool IsPrintableWithWhitespaces(int ch) 55 { 56 return IsPrintableWithoutWhitespaces(ch) || IsWhitespace(ch); 57 } 58 IsStringChar(int ch)59inline 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