MGL::Text#

概要#

MGL::Text名前空間以下では、MGLのテキスト処理に関する各種宣言・実装が行われています。本項はテキスト処理のうち共通して扱われるものについての解説となります。

#

名前

内容

Encoding

テキストのエンコードタイプを表す型

関数・定数式#

種類

名前

内容

関数

Format

テキストの整形

関数

ToUTF8

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) インデックス文字列の整形
MGL::STL::vector < MGL::Text::IndexedCharacter >

整形結果

説明#

引数で受けた文字列を整形するための関数です。

(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の有無をencodingexistBOMに指定します。

encodingEncoding::Autoを指定した場合、変換元の文字列をBOMを読み取って判別します。この場合はexistBOMを参照しません。BOMが付与されていない場合はUTF-8と仮定し、後述の理由により失敗となります。

関数は次のいずれかの理由により失敗となります。

  • 変換元がUTF-8形式である(変換する必要がないため)

  • UTF-16において、サロゲートペアの形式が不正である

  • 復号結果が符号範囲(0から0x10FFFF)を超える値を検出する

  • その他、適切でない引数を指定した場合(srcnullptrsizeが不適切など)

利用例#

// 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);

関連#