/++ + compile time tokenizer + + スペースで区切られた文字列を分割し、 + 結果をタプルで返す + + Authors: mikanya + Copyright: mikanya + License: NYSL Version 0.9982 + + Example: + ------------------------------------- + import std.stdio; + import meta.tokenizer; + + void main() + { + const char[] s = "this is a pen"; + alias Tokenizer!(s).tokens list; + + foreach(i;list) writefln(i); + + } + ------------------------------------- +/ module meta.tokenizer; template Tuple(E...) { alias E Tuple; } template Parse(const char[] src) { static if (src.length == 0) { const Parse = ""; } else static if (src[0] != ' ') { const Parse = src[0] ~ Parse!(src[1..$]); } else { const Parse = ""; } } template Tokenizer(const char[] src) { static if (src.length == 0) { alias Tuple!("") tokens; } else { const token = Parse!(src); static if(token.length == src.length) { const next = src[token.length .. $]; } else { const next = src[token.length + 1 .. $]; } alias Tuple!(TokenizerRecurse!(token,next).tokens) tokens; } } template TokenizerRecurse(const char[] tkn,const char[] src) { static if (src.length > 0) { alias Tokenizer!(src) next; alias Tuple!(tkn, next.tokens) tokens; } else { alias Tuple!(tkn) tokens; } }