A data;
TypeInfo charType();
TypeInfo textType();
_TEXT wrap(A arg
);
ラップ。
tchar[]そのものを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);
const(_TEXT) iwrap(S arg
);
ラップ。
Text.wrapの書き換えないバージョン。
- History:
- 1.110
- source属性変更(static pure ref -> static pure)。
- 1.100
template toUTF(T = char,UtfString = immutable(T)[]) if (isSomeChar!(T))
template toStringz(T = char) if (isSomeChar!(T))
C形式文字列へ変換。
- Returns:
- 終端0文字列。
それっぽいのはText.ptrを使用すべき。
string toANSI();
char* toANSIz();
_TEXT convertText(string AnsiString
);
C* ptr(bool EmptyIsNull
);
Windows用文字列の生成。
- Params:
- bool EmptyIsNull
- trueの場合に文字列が空ならnullを返す。
- Returns:
- dataのC形式(0終端)文字列を生成。
誰かに渡さないとGCの対象になるんで注意。
- History:
- 1.100
- program挙動の変更。
- source引数追加。
C* ptr();
Windows用文字列の生成。
- Returns:
- emptyIsNullに影響される。
int icmp(in _TEXT text
);
文字列比較。
大文字小文字を区別しない。
- Params:
- _TEXT text
- 比較する文字列。
- History:
- 1.100
- source名前変更(cmpi -> icmp)。
- 1.00β11
hash_t toHash();
bool opEquals(ref const _TEXT arg
);
int opCmp(ref const _TEXT arg
);
A TextFormat(...);
template opCall(T : dchar)
template opCall(T) if (isSomeChar!(T))
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。
arg.dup()を内部で呼び出し。
template opCall(T)
引数からText生成。
- Note:
-
引数属性がinなのでObject.toStringはできない。
クラスを変換する場合はITextを継承したクラスにしてText!(IText)を使用するか、
Text(String, T...)を使用する。
template opCall(String,T...)
_TEXT opCat(in _TEXT Value
);
_TEXT opCatAssign(in _TEXT Value
);
size_t length();
size_t length(size_t Length
);
C opIndex(size_t Index
);
C opIndexAssign(C Character
, size_t Index
);
A opIndex(size_t[] Index
...);
void opIndexAssign(C Character
, size_t[] Index
...);
_TEXT opSlice();
_TEXT opSlice(in size_t start
, in size_t end
);
dchar characterGet(size_t Position
);
dchar characterSet(size_t Position
, dchar Character
);
template toArray(T)
bool validate();
Unicode文字列判定。
現在の文字列がUnicodeで合法かどうかを判定。
- Returns:
- Unicodeとして正しければtrue、不正ならfalse。
template toNumber(T,string _file = __FILE__,int _line = __LINE__) if (std.traits.isNumeric!(T))
数値変換。
現在の文字列からTに対応する数値を取得。
- Throws:
- 変換に失敗した場合はException。
- Examples:
auto t=Text("123");
assert(t.toNumber!(int) == 123);
template tryNumber(T)
数値変換。
toNumberと違い例外出力を行わない。
- Examples:
auto t=_TEXT("123");
int result;
if(t.tryNumber!(int)(result)) {
assert(result == 123);
}
template numberSplit(T) if (isIntegral!(T))
数値に区切り追加。
1000を1,000のように変換。
- Params:
- number
- 変換する数値。
- SplitChar
- 区切りにする文字。
- SplitCount
- SplitCharを設定する桁数。
- 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"));
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進数の最大値を表す文字。
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進数の最大値を表す文字。
_TEXT chomp(in _TEXT Delimiter
= _TEXT.init);
文字列からDelimiter削除。
- Params:
- _TEXT Delimiter
- 取り去る文字列。
Text.initならCR,LF,CRLF、
- Note:
-
まんまstd.string.chomp。
_TEXT stripl();
_TEXT stripr();
_TEXT strip();
alias CASE_SENSITIVE;
alias START;
_TEXT toUpperRaw();
_TEXT toLowerRaw();
_TEXT toUpper();
_TEXT toLower();
size_t count(C c
);
size_t count(in _TEXT Word
);
enum FILL;
_TEXT fillRaw(FILL Fill
, C c
, size_t Width
);
文字で埋める。
Textそのものに作用。
- Params:
- FILL Fill
- 元の文字列の配置。
- C c
- 埋める文字。
- size_t Width
- 最終的なサイズ。
FillがFILL.CENTERでWidthが奇数の場合、元の文字列は左寄り。
- Returns:
- 埋められた文字列。
Widthが文字列より少ない場合は元の文字列。
_TEXT fill(FILL Fill
, C c
, size_t Width
);
文字で埋める。
- Params:
- FILL Fill
- 元の文字列の配置。
- C c
- 埋める文字。
- size_t Width
- 最終的なサイズ。
FillがFILL.CENTERでWidthが奇数の場合、元の文字列は左寄り。
- Returns:
- 埋められた文字列。
Widthが文字列より少ない場合は元の文字列。
int 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);
int 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);
_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();
改行分割。
- Note:
-
std.string.splitlines。
- History:
- 1.110
- 名前, splitlines, splitLines
- 1.100
_TEXT[] splitWhites();
_TEXT replaceRaw(in _TEXT SrcWord
, in _TEXT NewWord
);
_TEXT replace(in _TEXT SrcWord
, in _TEXT NewWord
);
_TEXT insertRaw(in _TEXT Word
, size_t Index
);
_TEXT insert(in _TEXT Word
, size_t Index
);
_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
- 繰り返す回数。
_TEXT repeat(size_t Repeat
);
現在の文字列を繰り返す。
- Params:
- size_t Repeat
- 繰り返す回数。
- Returns:
- 現在の文字列 * Repeatの文字列。
_TEXT quot(C Quot
);
_TEXT quot(S Quot
);
_TEXT quot(C left
, C right
);
_TEXT quot(S left
, S right
);
bool isNumeric(bool Separator
= true);
文字列は数値か。
- Params:
- bool Separator
- セパレータを無視するか。
- Note:
-
std.string.isNumeric。
_TEXT filter(in A Characters
);
_TEXT filter(C Character
, in A Characters
...);
該当文字を省く。
- Params:
- A Characters
- フィルタとする文字。
- Returns:
- Charactersを取り除いたText。
_TEXT extract(in A Characters
);
_TEXT extract(C Character
, in A Characters
...);
bool startsWith(in _TEXT Word
);
先頭文字列比較。
文字列の先頭が指定した文字列で始まっているかを調べる。
- Params:
- _TEXT Word
- 比較したい文字列。
bool endsWith(in _TEXT Word
);
末尾文字列比較。
文字列の末尾が指定した文字列で終わっているか調べる。
- Params:
- _TEXT Word
- 比較したい文字列。
_TEXT join(in _TEXT[] texts
, in _TEXT sep
);
_TEXT getUnique(in _TEXT[] TextArray
, in _TEXT Src
);
- History:
- 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から独立。