MGL::Text
Contents
MGL::Text#
概要#
MGL::Text名前空間以下では、MGLのテキスト処理に関する各種宣言・実装が行われています。本項はテキスト処理のうち共通して扱われるものについての解説となります。
型#
名前 |
内容 |
---|---|
テキストのエンコードタイプを表す型 |
関数・定数式#
種類 |
名前 |
内容 |
---|---|---|
関数 |
テキストの整形 |
|
関数 |
UTF-8形式に変換 |
Encoding#
テキストのエンコードタイプを表す型
宣言#
namespace MGL::Text
{
enum class Encoding : uint8_t
{
Auto, //!< 自動認識
UTF8, //!< UTF-8
UTF16BE, //!< UTF-16 ビッグエンディアン
UTF16LE, //!< UTF-16 リトルエンディアン
UTF32BE, //!< UTF-32 ビッグエンディアン
UTF32LE, //!< UTF-32 リトルエンディアン
}
}
説明#
- Auto
エンコードタイプを自動で認識させる場合の指定に使用する値
- UTF8
テキストがUTF-8エンコーディングである事を示す値
- UTF16BE
テキストがビッグエンディアンのUTF-16エンコーディングである事を示す値
- UTF16LE
テキストがリトルエンディアンのUTF-16エンコーディングである事を示す値
- UTF32BE
テキストがビッグエンディアンのUTF-32エンコーディングである事を示す値
- UTF32LE
テキストがリトルエンディアンのUTF-32エンコーディングである事を示す値
関連#
Format#
テキストの整形
宣言#
namespace MGL::Text
{
// (1) STL::string型の文字列の整形
MGL::STL::string Format(
const MGL::STL::string &text,
const FormatArgs &args) noexcept;
// (2) インデックス文字列の整形
MGL::STL::vector<IndexedCharacter> Format(
const IndexedCharacter *indexedText,
const IndexConverter &indexConverter,
const FormatArgs &args) noexcept;
}
引数#
- (1) const MGL::STL::string型の文字列の整形
- MGL::STL::string &text
フォーマット文字列
- const MGL::Text::FormatArgs &args
フォーマット引数
- (2) インデックス文字列のフォーマット
- const MGL::Text::IndexedCharacter *indexedText
フォーマット文字列
- const MGL::Text::IndexConverter &indexConverter
インデックス文字列の変換クラス
- const MGL::Text::FormatArgs &args
フォーマット引数
戻り値#
- (1) MGL::STL::string型の文字列の整形
- MGL::STL::string
整形結果
- (2) インデックス文字列の整形
説明#
引数で受けた文字列を整形するための関数です。
(1) は通常の文字列を、(2)はインデックス化した文字列の整形を行います。インデックス文字列の整形は、主にMGL::Render::FontResourceで呼び出す事を想定しています。
文字列の整形ルールの詳細についてはテキスト整形を参照してください。
利用例#
テキスト整形を参照してください。
関連#
ToUTF8#
UTF-8形式に変換
宣言#
namespace MGL::Text
{
bool ToUTF8(
MGL::STL::string &dest,
const void *src,
size_t size,
Encoding encoding,
bool existBOM = false) noexcept;
}
引数#
- MGL::STL::string &dest
変換後の文字列の格納先
- const void *src
変換元の文字列の先頭アドレス
- size_t size
変換元の文字列のサイズ(終端記号を含むバイト数)
- MGL::Text::Encoding encoding
変換元の文字列のエンコードタイプの指定
- bool existBOM
変換元の文字列にBOMが付与されているかの指定
戻り値#
- bool
成功時に
true
、失敗時にfalse
説明#
引数src
で指定された文字列をUTF-8エンコーディングに変換してdest
に格納します。変換元の文字列はいずれかのUnicode形式である必要があり、その形式とBOMの有無をencoding
とexistBOM
に指定します。
encoding
にEncoding::Auto
を指定した場合、変換元の文字列をBOMを読み取って判別します。この場合はexistBOM
を参照しません。BOMが付与されていない場合はUTF-8と仮定し、後述の理由により失敗となります。
関数は次のいずれかの理由により失敗となります。
変換元がUTF-8形式である(変換する必要がないため)
UTF-16において、サロゲートペアの形式が不正である
復号結果が符号範囲(0から0x10FFFF)を超える値を検出する
その他、適切でない引数を指定した場合(
src
がnullptr
、size
が不適切など)
利用例#
// Win32におけるカレントディレクトリをUTF-8で取得する例
// NOTE: WindowsはファイルシステムのパスをUTF-16 LEで扱い、wchar_t型に格納する
// カレントディレクトリを取得
auto bufferLength = (static_cast<size_t>(GetCurrentDirectory(0, nullptr)) + 1) * sizeof(wchar_t);
auto wCurrDir = MGL::STL::make_unique<wchar_t []>(bufferLength);
GetCurrentDirectory(static_cast<DWORD>(bufferLength), wCurrDir.get());
// UTF-8に変換
MGL::STL::string u8CurrDir;
MGL::Text::ToUTF8(u8CurrDir, wCurrDir.get(), bufferLength, MGL::Text::Encoding::UTF16LE);