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