1326938Sdim/* 2326938Sdim * Copyright 2008, Haiku. 3353358Sdim * Distributed under the terms of the MIT license. 4353358Sdim * 5353358Sdim * Authors: 6326938Sdim * Michael Pfeiffer <laplace@users.sourceforge.net> 7326938Sdim */ 8326938Sdim 9326938Sdim#ifndef _CHARACTER_CLASSES_H 10326938Sdim#define _CHARACTER_CLASSES_H 11326938Sdim 12326938Sdim#define kCr '\n' 13326938Sdim#define kLf '\r' 14326938Sdim#define kTab '\t' 15326938Sdim#define kEof -1 16326938Sdim 17326938Sdiminline bool IsWhitespaceSeparator(int ch) 18326938Sdim{ 19326938Sdim return ch == ' ' || ch == kTab; 20326938Sdim} 21326938Sdim 22326938Sdiminline bool IsWhitespace(int ch) 23326938Sdim{ 24326938Sdim return ch == ' ' || ch == kTab || ch == kLf || ch == kCr; 25326938Sdim} 26326938Sdim 27326938Sdiminline bool IsIdentChar(int ch) { 28326938Sdim // TODO check '.' if is an identifier character 29326938Sdim // in one of the PPD files delivered with BeOS R5 30326938Sdim // '.' is used inside of an identifier 31326938Sdim // if (ch == '.' || ch == '/' || ch == ':') return false; 32326938Sdim if (ch == '/' || ch == ':') return false; 33326938Sdim return 33 <= ch && ch <= 126; 34326938Sdim} 35326938Sdim 36326938Sdiminline bool IsOptionChar(int ch) 37326938Sdim{ 38326938Sdim if (ch == '.') return true; 39326938Sdim return IsIdentChar(ch); 40326938Sdim} 41326938Sdim 42326938Sdiminline bool IsChar(int ch) 43326938Sdim{ 44326938Sdim if (ch == '"') return false; 45326938Sdim return 32 <= ch && ch <= 255 || IsWhitespace(ch); 46326938Sdim} 47326938Sdim 48326938Sdiminline bool IsPrintableWithoutWhitespaces(int ch) 49326938Sdim{ 50326938Sdim if (ch == '"') return false; 51326938Sdim return 33 <= ch && ch <= 126; 52326938Sdim} 53326938Sdim 54326938Sdiminline bool IsPrintableWithWhitespaces(int ch) 55326938Sdim{ 56326938Sdim return IsPrintableWithoutWhitespaces(ch) || IsWhitespace(ch); 57326938Sdim} 58326938Sdim 59360784Sdiminline bool IsStringChar(int ch) 60360784Sdim{ 61360784Sdim if (IsWhitespaceSeparator(ch)) return true; 62360784Sdim if (ch == '"') return true; 63360784Sdim if (ch == '/') return false; 64360784Sdim return IsPrintableWithoutWhitespaces(ch); 65326938Sdim} 66326938Sdim 67326938Sdim#endif 68326938Sdim