etc.negui.system.text

NeGuiの文字列。
NeGuiではこのmoduleで定義されている_NTEXT構造体、さらに言えばText構造体を文字列として使用する。 他のmoduleでは関数などの型はTextを用いて実装する。
尚このmoduleはNeGuiの中では比較的独立(_hide除く)しているため例外もNeGuiExceptionではなくその継承元であるNeGuiBaseExceptionを投げるためcatchする場合は注意が必要。
typedef c_pos;
文字の位置。
History:
1.130
  • 新規作成。
alias tchar;
alias tstring;
文字及び文字列。
struct _NTEXT(CHARACTER,C = Unqual!(CHARACTER),S = immutable(C)[]) if (isSomeChar!(C));
文字列。
ワザワザimportするの面倒だしstd.stringとかstd.utfをラップ。
適当に、簡単に、それっぽく使用できることを目標に実装。 NeGuiでは_NTEXT!(tchar)のaliasであるTextを主に使用。
Note:
ドキュメント中に出てくる_TEXTは、
  • NTEXT!(char)
  • NTEXT!(wchar)
  • NTEXT!(dchar)
上記をそれぞれ表す。
せっかくの構造体なのに内部でnewばっか。 でもそのまま返すとtext==Text(...)のrefでアウト、どうすりゃいい。
History:
1.130
  • deleteA削除。
1.120
  • features大幅書き直し, char, wchar, dcharに多分対応。
  • othersところどころHistoryがなくなったり更新されてないけど気にしない。
C[] data;
この構造体の実体。
純然たる配列であり_NTEXT自身は配列の中身を常に監視しているわけではないため使用者がきちっと管理すべき。
bool emptyIsNull;
nullフラグ。
詳細はptr参照。
void toEmpty(bool EmptyIsNull = false);
文字列を空に。
Params:
bool EmptyIsNull
空文字をnullとして扱うか。
History:
1.130
  • 新規作成。
_TEXT newline;
改行。
Wrappers:
std.string.newline
_TEXT wrap(C[] arg );
ラップ。
tchar[]そのものをTextに取り込む。 参照による書き換えの影響をもろに受ける
Params:
C[] arg
取り込む配列。
Returns:
ラップ後のText。
Examples:
 tstring src="abc";

 tchar[] buffer=src.dup;
 auto t=Text.wrap(buffer);

 t[2] = 'C';
 assert(buffer == "abC");
 assert(buffer is t.text);
History:
1.100
  • 新規作成。
const(_TEXT) iwrap(S arg );
ラップ。
Text.wrapの書き換えないバージョン。
History:
1.110
  • source属性変更(static pure ref -> static pure)。
1.100
  • 新規作成。
template toUTF(T = char,UtfString = immutable(Unqual!(T))[]) if (isSomeChar!(T))
指定ユニコード変換。
Params:
T
char, wchar, dchar。
Returns:
Tに対応する文字列、 string, wstring, dstringを返す。
History:
1.120
  • 新規作成。
template toStringz(T = C) if (isSomeChar!(T))
C形式文字列へ変換。
Returns:
終端0文字列。 それっぽいのはText.ptrを使用すべき。
History:
1.130
  • sourceTの初期値変更(char -> C)。
1.120
  • programtoUTFの利用。
1.110
  • programテンプレートへ変更。
string str();
Deprecated:
toString, toUTFを使用すべき。
History:
1.130
  • othersDeprecated。
string toString();
string toString();
string変換。
toString呼んでその中でtoUTF!(char)してるだけ。
string toANSI();
Windows 8bit文字コードへ変換。
char* toANSIz();
Windows 8bit文字コードのC形式文字列へ変換。
_TEXT convertText(string AnsiString );
Windows 8bit文字コードからText生成。
template toTEXT(T,CHARACTER = Unqual!(T)) if (isSomeChar!(T))
指定文字の_NTEXTに変換。
Params:
T
char, wchar, dchar。
History:
1.130
  • 新規作成。
_NTEXT!(CHARACTER) toTEXT();
指定文字の_NTEXTに変換。
Params:
T
char, wchar, dchar。
History:
1.130
  • 新規作成。
C* ptr(bool EmptyIsNull );
Windows用文字列の生成。
Params:
bool EmptyIsNull
trueの場合に文字列が空ならnullを返す。
Returns:
dataのC形式(0終端)文字列を生成。
BUGS:
C = dcharが未実装。
Note:
Cに影響されずversionに影響されるようにしようかと考え中。
History:
1.100
  • program挙動の変更。
  • source引数追加。
C* ptr();
Windows用文字列の生成。
Returns:
emptyIsNullに影響される。
_TEXT dup();
複製。
int icmp(in _TEXT text );
文字列比較。
大文字小文字を区別しない。
Params:
_TEXT text
比較する文字列。
Note:
大文字小文字を区別する場合はopCmpを参照。
History:
1.130
  • featuresstd.string.icmpがdstring対応したので流用。
1.100
  • source名前変更(cmpi -> icmp)。
1.00β11
  • 新規作成。
hash_t toHash();

bool opEquals(ref const _TEXT arg );

int opCmp(ref const _TEXT arg );

S TextFormat(...);
History:
1.130
  • source戻り値の型変更(C[] -> S)。
template opCall(T) if (isSomeChar!(T))
C形式文字列からText生成。
History:
1.130
  • featuresargがnullの場合にemptyIsNullをtrueに。
template opCall(T) if (is(T : IText))
クラスからText生成。
Params:
arg
変換するクラス。 ITextを継承していること。
template opCall(T) if (is(T == struct) && is(typeof(&T.init.toText)))
構造体からText生成。
Params:
arg
変換するクラス。 toTextを持っていること。
template opCall(T : _TEXT)
TextからText生成。
ただのコピー。
Params:
arg
変換するText。 TEXT.dup()を内部で呼び出し。
template opCall(T) if (isSomeString!(Unqual!(T)))
文字列からText生成。
Params:
arg
変換する文字列。
template opCall(T)
引数からText生成。
Params:
arg
何か。
Note:
引数属性がinなのでObject.toStringはできない。
クラスを変換する場合はITextを継承したクラスにしてText!(IText)を使用するか、 Text(String, T...)を使用する。
template opCall(String,T...)
書式からText作成。
Params:
SrcFormat
書式文字列。 std.format参照。
Args
いろいろ。
String
string, wstring, dstring, Text。
_TEXT opCat(in _TEXT Value );
連結。
_TEXT opCatAssign(in _TEXT Value );
自身へ連結。
size_t length();
size_t length(size_t Length );
data.length
C opIndex(size_t Index );
data[Index ]
C opIndexAssign(C Character , size_t Index );
data[Index ] = Character
C[] opIndex(size_t[] Index ...);
data[Index [0], Index [1], ..., Index [$-1]]
void opIndexAssign(C Character , size_t[] Index ...);
data[Index [0], Index [1], ..., Index [$-1]] = Character
_TEXT opSlice();
data[]
_TEXT opSlice(in size_t start , in size_t end );
data[start .. end ]
History:
1.00β17
  • bug事前条件がDの仕様と違っていたのを修正。
_TEXT at(size_t Index );
History:
1.130
  • 新規作成。
size_t positionToIndex(c_pos Position );
文字位置から配列のインデックス取得。
Params:
c_pos Position
文字の位置。
History:
1.130
  • 新規作成。
S characterToArray(dchar Character );
文字をSに変換。
History:
1.130
  • source戻り値の型変更(C[] -> S)。
dchar arrayToCharacter(in C[] Character , ref size_t NextIndex );
dchar arrayToCharacter(in C[] Character );
文字を表す文字列を文字へ。
dchar characterGet(c_pos Position );
指定した文字の位置にある文字を取得。
文字数を考慮した取得であり文字の配列を基準とした通常の取得でないことに注意。
Returns:
指定位置の文字。
History:
1.130
  • sourcePositionの型変更(size_t -> c_pos)。
dchar characterSet(c_pos Position , dchar Character );
指定した文字の位置にある文字を別の文字で置き換える。
History:
1.130
  • sourcePositionの型変更(size_t -> c_pos)。
template toArray(T...)
template toArray(T)

bool validate();
Unicode文字列判定。
現在の文字列がUnicodeで合法かどうかを判定。
Returns:
Unicodeとして正しければtrue、不正ならfalse。
Wrappers:
std.utf.validate
History:
1.100
  • 新規作成。
size_t characterLength();
文字列長取得。
現在のUnicode文字列長を取得。 length()と違い文字列の長さを取得する。
Returns:
文字列長。
In:
文字列がUnicodeとして正しいこと。
template toNumber(T,string _file = __FILE__,int _line = __LINE__) if (std.traits.isNumeric!(T))
数値変換。
現在の文字列からTに対応する数値を取得。
Returns:
Tに対応する数値。
Throws:
変換に失敗した場合はException。
Examples:
 auto t=Text("123");
 assert(t.toNumber!(int) == 123);
History:
1.100
  • 新規作成。
template tryNumber(T)
数値変換。
toNumberと違い例外出力を行わない。
Params:
Value
変換後の数値。
Returns:
変換成功の真偽値。
Examples:
 auto t=_TEXT("123");
 int result;
 if(t.tryNumber!(int)(result)) {
 	assert(result == 123);
 }
History:
1.100
  • 新規作成。
template numberSplit(T) if (isIntegral!(T))
数値に区切り追加。
1000を1,000のように変換。
Params:
number
変換する数値。
SplitChar
区切りにする文字。
SplitCount
SplitCharを設定する桁数。
Returns:
区切り文字の追加された文字列。
In:
SplitCount > 0
Examples:
 assert(Text.numberSplit(1000) == Text("1,000"));
 assert(Text.numberSplit(1000, '.') == Text("1.000"));
 assert(Text.numberSplit(1000, ',', 1) == Text("1,0,0,0"));
History:
1.100
  • 新規作成。
template toNumeral(T : int,BASE = int) if (!isSomeChar!(BASE))
template toNumeral(T : int,BASE = tchar) if (isSomeChar!(BASE))
数値をn進数に変換。
Params:
number
変換する数値。
n
変換するn進数。
c
n進数の最大値を表す文字。
Returns:
変換した文字列。
In:
n <= 2 とか。
History:
1.110
  • sourceテンプレートちまちま。
1.100
  • 新規作成。
template toNumeral10(T : int,BASE = int) if (!isSomeChar!(BASE))
template toNumeral10(T : int,BASE = tchar) if (isSomeChar!(BASE))
n進数から10進数へ変換。
Params:
number
変換する数値の文字列。
n
n進数。
c
n進数の最大値を表す文字。
History:
1.110
  • sourceテンプレートちまちま。
_TEXT chomp(in _TEXT Delimiter = _TEXT.init);
文字列からDelimiter削除。
Params:
_TEXT Delimiter
取り去る文字列。 Text.initならCR,LF,CRLF、
Returns:
処理後の文字列。
Wrappers:
std.string.chomp
History:
1.100
  • source引数変更
_TEXT stripl();
先頭空白文字削除。
Returns:
処理後の文字列。
_TEXT stripr();
末尾空白文字削除。
Returns:
処理後の文字列。
_TEXT strip();
両端空白文字削除。
Returns:
処理後の文字列。
History:
1.010
  • source属性変更。
alias CASE_SENSITIVE;
大文字・小文字の区別。
alias START;
開始点。
_TEXT toUpperRaw();
大文字に変換。
自身へ作用。
_TEXT toLowerRaw();
小文字に変換。
自身へ作用。
_TEXT toUpper();
大文字に変換。
Returns:
返還後の文字列。
_TEXT toLower();
小文字に変換。
Returns:
返還後の文字列。
size_t count(C c );
指定文字をインデックス単位でカウント。
Params:
C c
数える文字。
Returns:
cの数。
size_t count(in _TEXT Word );
指定文字列をカウント。
Params:
_TEXT Word
数える文字列。
Returns:
Wordの数。
enum FILL;
埋めもの。
History:
1.110
  • 新規作成。
LEFT
左。
CENTER
中心。
RIGHT
右。
_TEXT fillRaw(FILL Fill , C c , size_t Width );
文字で埋める。
Textそのものに作用。
Params:
FILL Fill
元の文字列の配置。
C c
埋める文字。
size_t Width
最終的なサイズ。 FillがFILL.CENTERでWidthが奇数の場合、元の文字列は左寄り。
Returns:
埋められた文字列。 Widthが文字列より少ない場合は元の文字列。
History:
1.110
  • 新規作成。
_TEXT fill(FILL Fill , C c , size_t Width );
文字で埋める。
Params:
FILL Fill
元の文字列の配置。
C c
埋める文字。
size_t Width
最終的なサイズ。 FillがFILL.CENTERでWidthが奇数の場合、元の文字列は左寄り。
Returns:
埋められた文字列。 Widthが文字列より少ない場合は元の文字列。
History:
1.120
  • bugStack Overflow。
1.110
  • 新規作成。
sizediff_t indexOf(C c , CASE_SENSITIVE CaseSensitive = CASE_SENSITIVE.YES, START Start = START.HEAD);
文字検索。
Params:
C c
検索する文字。
CASE_SENSITIVE CaseSensitive
大文字小文字の区別。
START Start
検索位置。
Returns:
見つかった場合はそのインデックス、 見つからなかった場合は-1を返す。
Examples:
 Text t;
 t = Text("123456789abcdABCD");

 assert(t.indexOf('1', CASE_SENSITIVE.YES, START.HEAD) == 0);
 assert(t.indexOf('9', CASE_SENSITIVE.YES, START.HEAD) == 8);
 assert(t.indexOf('a', CASE_SENSITIVE.YES, START.HEAD) == 9);
 assert(t.indexOf('A', CASE_SENSITIVE.YES, START.HEAD) == 13);

 assert(t.indexOf('1', CASE_SENSITIVE.NO, START.HEAD) == 0);
 assert(t.indexOf('9', CASE_SENSITIVE.NO, START.HEAD) == 8);
 assert(t.indexOf('a', CASE_SENSITIVE.NO, START.HEAD) == 9);
 assert(t.indexOf('A', CASE_SENSITIVE.NO, START.HEAD) == 9);

 assert(t.indexOf('D', CASE_SENSITIVE.YES, START.TAIL) == 16);
 assert(t.indexOf('d', CASE_SENSITIVE.NO, START.TAIL) == 16);
 assert(t.indexOf('1', CASE_SENSITIVE.NO, START.TAIL) == 0);
sizediff_t indexOf(in _TEXT Word , CASE_SENSITIVE CaseSensitive = CASE_SENSITIVE.YES, START Start = START.HEAD);
文字検索。
Params:
_TEXT Word
検索する文字列。
CASE_SENSITIVE CaseSensitive
大文字小文字の区別。
START Start
検索位置。
Returns:
見つかった場合はそのインデックス、 見つからなかった場合は-1を返す。
Examples:
 Text t;
 t = Text("123456789abcdABCD");

 assert(t.indexOf(Text("1"), CASE_SENSITIVE.YES, START.HEAD) == 0);
 assert(t.indexOf(Text("abcd"), CASE_SENSITIVE.YES, START.HEAD) == 9);

 assert(t.indexOf(Text("1"), CASE_SENSITIVE.NO, START.HEAD) == 0);
 assert(t.indexOf(Text("12"), CASE_SENSITIVE.NO, START.HEAD) == 0);
 assert(t.indexOf(Text("ABCD"), CASE_SENSITIVE.NO, START.HEAD) == 9);
 assert(t.indexOf(Text("123456789abcdABCD"), CASE_SENSITIVE.NO, START.HEAD) == 0);
 assert(t.indexOf(Text("123456789abcdABCDE"), CASE_SENSITIVE.NO, START.HEAD) == -1);

 assert(t.indexOf(Text("12"), CASE_SENSITIVE.YES, START.TAIL) == 0);
 assert(t.indexOf(Text("23"), CASE_SENSITIVE.YES, START.TAIL) == 1);
 assert(t.indexOf(Text("abcd"), CASE_SENSITIVE.YES, START.TAIL) == 9);
 assert(t.indexOf(Text("ABCD"), CASE_SENSITIVE.NO, START.TAIL) == 13);
 assert(t.indexOf(Text("abcd"), CASE_SENSITIVE.NO, START.TAIL) == 13);
_TEXT[] split(in C c );
文字列分割。
Examples:
 Text t;
 Text[] list;

 t = Text("123 456 789");
 list = t.split(' ');
 assert(list.length == 3);
 assert(list[0].data == "123");
 assert(list[1].data == "456");
 assert(list[2].data == "789");

 t = Text("123,456,789,");
 list = t.split(',');
 assert(list.length == 4);
 assert(list[0].data == "123");
 assert(list[1].data == "456");
 assert(list[2].data == "789");
 assert(list[3].data == "");

 t = Text("");
 list = t.split(',');
 assert(!list.length);

 t = Text("123456789");
 list = t.split(',');
 assert(!list.length);

 t = Text("あ@い@う@え@お");
 list = t.split('@');
 assert(list.length == 5);

History:
1.00β14
  • 分割が変だったのを修正。
_TEXT[] split(in _TEXT Word );
文字列分割。
Examples:
 Text t;
 Text[] list;

 t = Text("123..456..789");
 list = t.split(Text(".."));
 assert(list.length == 3);
 assert(list[0].data == "123");
 assert(list[1].data == "456");
 assert(list[2].data == "789");

 t = Text("123....456..789");
 list = t.split(Text(".."));
 assert(list.length ==4);
 assert(list[0].data == "123");
 assert(list[1].data == "");
 assert(list[2].data == "456");
 assert(list[3].data == "789");

 t = Text("");
 list = t.split(Text(".."));
 assert(!list.length);

 t = Text("テキスト文字列data文字列てきすと");
 list = t.split(Text("文字列"));
 assert(list.length == 3);
 assert(list[0].data == "テキスト");
 assert(list[1].data == "data");
 assert(list[2].data == "てきすと");

 t = Text("abcdefg");
 list = t.split(Text(".."));
 assert(!list.length);
History:
1.100
  • source属性変更。
  • bug保持している文字列長が0でRange violation。
  • bug一致しない場合に戻り値がある。
1.00β14
  • 新規作成。
_TEXT[] splitLines();
改行分割。
Wrappers:
std.string.splitlines。
History:
1.110
  • source名前変更(splitlines -> splitLines)。
1.100
  • 新規作成。
_TEXT[] splitWhites();
空白分割。
History:
1.110
  • 新規作成。
const(_TEXT) replaceToWord(C Head , C Tail , C Escape , const(_TEXT) delegate(ref const _TEXT Word, out bool IsChanged) dg , string _file = __FILE__, int _line = __LINE__);
const(_TEXT) replaceToWord(in _TEXT Head , C Tail , C Escape , const(_TEXT) delegate(ref const _TEXT Word, out bool IsChanged) dg , string _file = __FILE__, int _line = __LINE__);
文字列の特定文字列を置き換え。
一定の規則に従った文字列を抽出し、抽出部分を置き換える。 指定文字列は「先頭文字(列)該当文字列終端文字」の形式で抽出される。
先頭文字(列)を回避させたい場合は「抽出抑止文字先頭文字(列)」と指定する。
Params:
C Head
先頭文字(列)。
C Tail
終端文字。
C Escape
抽出抑止文字。
const(_TEXT) delegate(ref const _TEXT Word, out bool IsChanged) dg
抽出部分置き換え処理。
Params:
Word
HeadとTailに挟まれた文字列。
IsChanged
戻り値を有効な値として使用するかの真偽値。 falseに設定した場合、Head , Tailが付加された抽出文字をそのまま使用する。
Returns:
指定文字列。 この値を使用するかどうかはIsChangedに依存する。
Returns:
変換後の文字列。
Throws:
Headに対してTailが不足していたり不正な場合はNeGuiBaseExceptionを投げる。 ただしdg内でそれ以外のをなんか投げるかも。
Example:
 const(Text) Replace(const ref Text Word, out bool IsChanged) {
 	if(Word.isNumeric) {
 		// 数値だったら16進数へ
 		IsChanged = true;
 		return Text.toNumeral(Word.strip.toNumber!(int), 16);
 	} else if(Word.length >= 6){
 		// 6文字以上は短縮
 		IsChanged = true;
 		return Text("%s%s%s", Word[0], Text("..."), Word[Word.length - 1]);
 	} else if(Word.length == 1) {
 		// 1文字はクォートでくくる
 		IsChanged = true;
 		return Word.quote('\'');
 	}
 	// 上記に当てはまらない場合はそのまま返す。
 	IsChanged = false;
 	return Text.init; // IsChangedが無効なので何を返しても同じ。
 }
 assert(Text("abcdefghijklmnopqrstuvwxyz").replaceToWord('<', '>', '<', &Replace) == Text("abcdefghijklmnopqrstuvwxyz"));
 assert(Text("<abcdefghijklmnopqrstuvwxyz>").replaceToWord('<', '>', '<', &Replace) == Text("a...z"));
 assert(Text("<1>, <10>, <15>, <16>, <255>").replaceToWord('<', '>', '<', &Replace) == Text("1, A, F, 10, FF"));
 assert(Text("<A>, <AB>, <ABC>, <ABCD>, <ABCDE>, <ABCDEF>").replaceToWord('<', '>', '<', &Replace) == Text("'A', <AB>, <ABC>, <ABCD>, <ABCDE>, A...F"));
 assert(Text("<<A>, <<10>, <<ABC>, <<ABCDEF>").replaceToWord('<', '>', '<', &Replace) == Text("<A>, <10>, <ABC>, <ABCDEF>"));
 assert(Text("@<A>, @<10>, @<ABC>, @<ABCDEF>").replaceToWord('<', '>', '@', &Replace) == Text("<A>, <10>, <ABC>, <ABCDEF>"));
History:
1.130
  • 新規作成。
const(_TEXT) replaceEscapeSequence(C Target , const(_TEXT) delegate(ref const _TEXT Word, out size_t ReadLength) dg , string _file = __FILE__, int _line = __LINE__);
文字列のエスケープシーケンス的な置き換え。
Params:
C Target
対象文字。 二重の場合は無効。
const(_TEXT) delegate(ref const _TEXT Word, out size_t ReadLength) dg
抽出部分置き換え処理。
Params:
Word
見つかったTarget以降の文字列。
ReadLength
Wordから読み進める文字数。
Returns:
何かしら使いたい文字列。
Returns:
変換後の文字列。
History:
1.130
  • 新規作成。
_TEXT replaceRaw(in _TEXT SrcWord , in _TEXT NewWord );
文字列置き換え。
Textそのものに作用。
History:
1.100
  • 新規作成。
_TEXT replace(in _TEXT SrcWord , in _TEXT NewWord );
文字列置き換え。
History:
1.100
  • 新規作成。
_TEXT insertRaw(in _TEXT Word , size_t Index );
文字列挿入。
Textそのものに作用。
History:
1.100
  • 新規作成。
_TEXT insert(in _TEXT Word , size_t Index );
文字列挿入。
History:
1.100
  • 新規作成。
_TEXT repeat(in _TEXT Src , size_t Repeat );
文字列を繰り返す。
Params:
_TEXT Src
対象の文字列。
size_t Repeat
繰り返す回数。
Returns:
Src * Repeatの文字列。
History:
1.100
  • programRepeatが一回の場合にSrcを返すのではなくSrcのコピーを返すように変更。
1.00β14
  • 新規作成。
_TEXT repeat(tchar c , size_t Repeat );
文字を繰り返す。
Params:
tchar c
繰り返す文字。
size_t Repeat
繰り返す回数。
Returns:
c * Repeatの文字列。
History:
1.100
  • 新規作成。
_TEXT repeat(size_t Repeat );
現在の文字列を繰り返す。
Params:
size_t Repeat
繰り返す回数。
Returns:
現在の文字列 * Repeatの文字列。
History:
1.050
  • 新規作成。
_TEXT quote(C Quot );
History:
1.130
  • source名前変更(quot -> quote)。
_TEXT quote(S Quot );
History:
1.130
  • source名前変更(quot -> quote)。
_TEXT quote(C left , C right );
History:
1.130
  • source名前変更(quot -> quote)。
_TEXT quote(S left , S right );
History:
1.130
  • source名前変更(quot -> quote)。
bool isNumeric(bool Separator = true);
文字列は数値か。
Params:
bool Separator
セパレータを無視するか。
Wrappers:
std.string.isNumeric
_TEXT filter(in C[] Characters );
_TEXT filter(C Character , in C[] Characters ...);
該当文字を省く。
Params:
C[] Characters
フィルタとする文字。
Returns:
Charactersを取り除いたText。
_TEXT extract(in C[] Characters );
_TEXT extract(C Character , in C[] Characters ...);
該当文字の抽出。
bool startsWith(in _TEXT Word );
先頭文字列比較。
文字列の先頭が指定した文字列で始まっているかを調べる。
Params:
_TEXT Word
比較したい文字列。
History:
1.100
  • 新規作成。
bool endsWith(in _TEXT Word );
末尾文字列比較。
文字列の末尾が指定した文字列で終わっているか調べる。
Params:
_TEXT Word
比較したい文字列。
History:
1.100
  • 新規作成。
_TEXT join(in _TEXT[] texts , in _TEXT sep );

_TEXT getUnique(in _TEXT[] TextArray , _TEXT delegate(ref const _TEXT Source, size_t Index) dg = null);
配列から一意の値を取得。
Params:
_TEXT[] TextArray
比較する配列。
Source
一意の値に対する元の値。
_TEXT delegate(ref const _TEXT Source, size_t Index) dg
比較・取得に使われるデリゲート。 nullの場合デフォルト動作を行う。
Returns:
比較後の一意の値。
Note:
単純にxxx(n)の形で値を取得するのが目的。
これstaticじゃなくてもいいかもしれんね。
History:
1.130
  • source引数dg追加。
  • features値取得の方法を選択可能に。
  • delete引数Src
  • source属性変更(static -> 非static)。
1.120
  • source所属変更(etc.negui.system -> etc.negui.system.NTEXT)。
  • source名前変更(GetUnique -> getUnique)。
1.100
  • source名前変更(GetNoneDouble -> GetUnique)。
1.090
  • 新規作成というかnemuxi.gui.window.dialog.settingdialog.groupdialogから独立。
alias CTEXT;
alias WTEXT;
alias DTEXT;
TEXT!(char or wchar or dchar)のalias。
特に使い道なし。
alias Text;
TEXT!(tchar)のalias。
NeGuiで主に使用する文字列。 他のmoduleではこの型を基準に実装。
alias ConsText;
History:
1.130
  • 新規作成。
abstract interface IText;

abstract const ConsText toText();
Note:
戻り値の型をConsTextにする予定。
History:
1.130
  • source戻り値の型変更(Text -> ConsText)。
  • others↑に伴い関係するところ全部。
abstract interface ITitleText;

abstract const Text text();
Note:
戻り値の型をConsTextにする予定。
abstract void text(in Text);

abstract interface ITextData;
クラスをテキストデータへ変換。
History:
1.130
  • 新規作成。
abstract const _NTEXT!(wchar)[] dataExport();
出力。
protected abstract void DataImport(in _NTEXT!(wchar)[] Values );
入力。
コンストラクタの際に呼び出す設計。
Params:
_NTEXT!(wchar)[] Values
テキストデータ。
Throws:
異常データの場合は補正せずに例外を投げるべし。
Inheritance:
継承時はprotectedで頑張ろう。
template IsNTEXT(T)
TはCTEXT, WTEXT, DTEXT, Textか。
template IsText(T)
TはTextか。
class _NTEXTList(CHARACTER,C = Unqual!(CHARACTER),S = immutable(C)[],_TEXT = _NTEXT!(CHARACTER));
文字列配列。
TEXTNULLLISTの置き換え。
History:
1.130
  • 新規作成。
_TEXT[] _datas;

S separator;

S tail;

void DataException(ref const _TEXT Data );

__ctor;
コンストラクタ。
Separator、Tail共に非UTFを使用可能。
Params:
Separator
セパレータ。
Tail
番兵。
__ctor;
コンストラクタ。
Separator、Tail共に非UTFは使用不可。
Params:
Separator
セパレータ。
Tail
番兵。
void setData(const C* DataHead );

void setData(in C[] Data );

C[] getData();

_TEXT opIndex(size_t Index );

void opIndexAssign(in _TEXT Data , size_t Index );

void opCatAssign(in _TEXT Data );

size_t length();

alias CTEXTList;
alias WTEXTList;
NTEXTList!(char or wchar or dchar)のalias。
特に使い道なし。
alias TextList;
NTEXTLIST!(tchar)のalias。
Textと同じ扱い。