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