10 #include "InputStream.h"
16 // inputstreamの準備が出来ていない場合に送出される例外
17 class CStreamException : public std::exception
20 CStreamException(const std::string& str) : str_(str) {}
21 virtual ~CStreamException() throw() {}
23 const char* what() throw() {
31 class CUTF8InputStream : public IInputStream
34 入力ストリームから、UTF-8のデータを指定した文字だけ読みだして
39 // 入力に利用するストリームは最初に渡される。
40 // 最初に渡さない場合には、後から開けるようにしておかなけりゃならない。
42 CUTF8InputStream(const smart_ptr<std::istream>& strm);
43 virtual ~CUTF8InputStream(){}
45 bool open(const smart_ptr<std::istream>& strm);
47 std::vector<unsigned char> read();
48 std::vector<unsigned char> read(int num);
50 std::vector<unsigned char> peek();
55 smart_ptr<std::istream> strm_;
60 // UTF-8のコードを表すバイト列をUTF-8のコードに変換する。
61 long generateUTF8Code(const std::vector<unsigned char>& code);
62 long generateUTF8Code(const std::string& ch);
66 // UTF8の先頭バイト以外であるかどうかをチェックする。
67 const unsigned char checker;
69 CheckUTF8Byte() : checker(0x2), good(true) {}
72 void operator()(const T& t) {
73 // 先頭ビットが10ではない場合、チェックに失敗する。
75 if ( ((tmp & 0x3)) != checker) {
83 // 渡されたデータをistreamにputbackする。
84 smart_ptr<std::istream> strm_;
85 PutBack(const smart_ptr<std::istream>& strm) : strm_(strm) {}
94 // 与えられたバイト列の先頭から、UTF8一文字に該当しているかどうかを返す。
95 // バイト列がUTF8に該当する場合、そのバイト列のサイズを返す。
96 bool is_utf8_one(const std::vector<unsigned char>& bytes, size_t& size);
98 // 与えられたバイト列全てが、UTF8に該当しているかどうかを返す。
99 bool is_utf8_all(const std::vector<unsigned char>& bytes);
101 // UTF-8の先頭バイトとして正しいフォーマットであるかどうか。
102 // 正しいフォーマットである場合、渡したバイトを含めた、一文字である
104 bool is_utf8_first_byte(unsigned char c, size_t& size);
108 #endif /* _UTF8_H_ */