|
errno_t | Open (InputStream *stream) noexcept |
| ストリームを与えてテキストリーダーをオープンします。 [詳解]
|
|
int | Read () noexcept |
| ストリームから1文字を読み込み、UTF-32で返します。 [詳解]
|
|
int | Peek () noexcept |
| ストリームの先頭の1文字を、UTF-32で返します。 [詳解]
|
|
int | SkipWs () noexcept |
| ストリーム内の空白(スペース,改行,タブ,復帰)文字を読み飛ばして、読み飛ばした空白の数を返します。 [詳解]
|
|
bool | ReadUntil (size_t *len, nlib_utf8_t *buf, size_t n, char delim) noexcept |
| delim まで最大n バイトのUTF-8文字列を読み込みbuf に格納します。 [詳解]
|
|
template<size_t N> |
bool | ReadUntil (size_t *len, nlib_utf8_t(&buf)[N], char delim) noexcept |
| 上記関数のテンプレートオーバーロードです。
|
|
template<class T > |
bool | ReadUntil (size_t *len, nlib_utf8_t *buf, size_t n, T pred) noexcept |
| 最大n バイトのUTF-8文字列を読み込みbuf に格納します。 [詳解]
|
|
template<class T , size_t N> |
bool | ReadUntil (size_t *len, nlib_utf8_t(&buf)[N], T pred) noexcept |
| 上記関数のテンプレートオーバーロードです。 [詳解]
|
|
size_t | ReadDecimalString (char *buf, size_t n) noexcept |
| 0-9 までの文字を最大n 文字まで読み込みbuf に格納します。 [詳解]
|
|
template<size_t N> |
size_t | ReadDecimalString (char(&buf)[N]) noexcept |
| 上記関数のテンプレートオーバーロードです。
|
|
bool | Proceed (const nlib_utf8_t *str, size_t n) noexcept |
| 文字列str の分だけストリームを進めます。 [詳解]
|
|
bool | Proceed (char c) noexcept |
| 文字c の分だけストリームを進めます。 [詳解]
|
|
bool | ProceedEx (const nlib_utf8_t *str) noexcept |
| 文字列str の分だけストリームを進めます。文字列の長さ制限はありませんが、一致しない場合もストリームの位置が変更される可能性があります。 [詳解]
|
|
bool | Close () noexcept |
| テキストリーダーをクローズします。 [詳解]
|
|
void | SetError (errno_t e) const noexcept |
| エラー値を設定します。 [詳解]
|
|
errno_t | GetErrorValue () const noexcept |
| 読み込みが失敗した際に、エラーの原因を取得できます。 [詳解]
|
|
InputStream * | GetStream () noexcept |
| テキストリーダーが書き込みを行うストリームを取得します。 [詳解]
|
|
int | GetLine () const noexcept |
| 現在の行番号を取得します。 [詳解]
|
|
int | GetColumn () const noexcept |
| 現在の桁を取得します。 [詳解]
|
|
| operator bool () const |
| オブジェクトが初期化済みで内部でエラーが発生していなければtrue 、発生していればfalse を返します。
|
|
|
| TextReader () noexcept |
| デフォルトコンストラクタです。実行後Init() による初期化を必要とします。
|
|
virtual | ~TextReader () noexcept |
| デストラクタです。 ストリームはクローズされません。
|
|
errno_t | Init () noexcept |
| オブジェクトを初期化します。成功した場合は0を返します。 [詳解]
|
|
ストリームからテキストを読み込むクラスです。
- 説明
- ストリームからUTF-8の文字列を読みだして、UTF-32かUTF-16で1文字ずつ取得することができます。
- 改行文字列については以下のように加工されます。
-
CRLF
はLF
として渡されます。
-
CR
はLF
として渡されます。
-
LF
はLF
として渡されます。
- また、冗長なUTF-8を検出した場合は、エラー(
EILSEQ
)になります。 U+D800-U+DFFF
に対応するUTF-8を検出した場合もエラー(EILSEQ
)になります。
- 以下がコード例です。ストリームよりも
TextReader
を先にクローズする(もしくはデストラクトする)必要があることに注意してください。 const char* str = "\xf0\x9f\xa4\xa9\xf0\x9f\xa7\x9d multibyte";
SUCCEED_IF(reader.
Init() == 0);
SUCCEED_IF(reader.
Open(&is) == 0);
int c;
while ((c = reader.Read()) >= 0) {
}
(void)is.Close();
TextReader
を継承し、FillBuffer_()
メンバ関数をオーバーライドすることによって、UTF-8テキストのチェックを追加することができます。 TextReader
クラスではUTF-8が有効かどうかと改行コードの処理を行っています。
- 派生クラスでの実装の概略を以下に示します。
TextReader::FillBuffer_();
}
TextReader.h の 33 行目に定義があります。