OSDN Git Service

<inline hex esacpe>の非終端記号を解釈するInlineHexEscapeLexer、及びテストを追加。
[simplecms/utakata.git] / src / lexer / term_checker.h
1 // TermLexerのテンプレートパラメータとして渡すための関数オブジェクトの
2 // 集合です。
3 // 用途に応じて、TermLexerに各テンプレートパラメータを渡し、作成します。
4 #ifndef _UTAKATA_SRC_LEXER_TERM_CHECKER_H_
5 #define _UTAKATA_SRC_LEXER_TERM_CHECKER_H_
6
7 namespace utakata {
8 namespace reader {
9 class EncodingReader;
10 }
11
12 namespace lexer {
13 namespace term {
14
15 class Delimiter {
16   // 通常のデリミタとして処理するべきで文字であるか調査します。
17  public:
18
19   // 渡された文字が以下の文字である場合、デリミタと判定されます。
20   // ( ) [ ] " ; # に加え、WhitespaceCheckerがtrueを返す文字
21   // 渡されたreaderの読み出し位置は更新されません。
22   bool operator()(reader::EncodingReader* reader, unsigned int* size);
23 };
24
25 class Whitespace {
26   // 空白として認識される文字であるかどうか調査します。
27  public:
28   // 空白として認識されるデータである場合、trueを返します。
29   // 空白として認識される文字は以下になります。
30   // --------------------
31   // carriage return 復帰
32   // linefeed  改行
33   // space 空白
34   // tab タブ
35   // vertical tab 垂直タブ
36   // page 改ページ
37   // --------------------
38   // 渡されたreaderの読み出し位置は更新されません。
39   bool operator()(reader::EncodingReader* reader, unsigned int* size);
40 };
41
42 class LineEnding {
43   // 改行と認識される文字であるかどうかを調査します。但し、改行は複数の
44   // 文字である場合があるため、chの次の位置の文字列も必要となります。
45  public:
46
47   // 渡されたreaderより、改行文字が先頭である場合、trueを返します。
48   // 渡されたreaderの読み出し位置は更新されません。
49   bool operator()(reader::EncodingReader* reader, unsigned int* size);
50 };
51
52 class StringDoubleQuote {
53   // 文字列を分割するためのデリミタであるかどうか調査します。
54  public:
55
56   // 渡されたreaderの先頭が " である場合、trueを返します。
57   // 渡されたreaderの読み出し位置は更新されません。
58   bool operator()(reader::EncodingReader* reader, unsigned int* size);
59 };
60
61 class HexValue {
62   // 16進数で利用可能な文字の範囲であるかどうか調査します。
63  public:
64   // 16進数で利用可能とされる文字の範囲である場合、trueを返します。
65   // [a-fA-F0-9] が該当し、大文字と小文字の区別は行いません。
66   // 渡されたreaderの読み出し位置は更新されません。
67   bool operator()(reader::EncodingReader* reader, unsigned int* size);
68 };
69
70 class HexValueChecker {
71  public:
72   // 渡された文字が、HexValueの領域内であるかどうかを返します。
73   bool operator()(const unicode::UniChar& ch);
74 };
75
76 }
77 }
78
79 #endif /* _UTAKATA_SRC_LEXER_TERM_CHECKER_H_ */