xref: /haiku/src/tests/add-ons/print/ppd/parser/CharacterClasses.h (revision 1e60bdeab63fa7a57bc9a55b032052e95a18bd2c)
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