A string function I've found invaluable for parsing DSLs
Bill Baxter
wbaxter at gmail.com
Sat Nov 14 11:16:09 PST 2009
On Sat, Nov 14, 2009 at 10:16 AM, downs <default_357-line at yahoo.de> wrote:
> Slightly modified from what you so amusingly called "my CoolTools.ctfe":
>
> ctSlice (not to be confused with the [] array slicing functionality) "slices" a string in two at a marker, returning the text before the marker and removing it (and the marker) from the input text.
>
> The ct prefix is handy for differentiating between std.metastrings and std.string functions - one may often want to import both ..
Yeh, I agree some diffentiator is good. std.metastrings started off
with a capital letter convention to differentiate. I'm not sure which
is better.
> string ctSlice(ref string what, string where) {
> auto loc = what.ctFind(where);
> if (loc == -1) {
> auto res = what;
> what = null;
> return res;
> }
> auto res = what[0 .. loc];
> what = what[loc+where.length .. $];
> return res;
> }
>
> When is this useful?
>
> For instance, when writing a compile-time enum, you may want to use a syntax of the form "EnumName: Entries"
>
> In that case, you could write `string name = input.ctSlice(":"); '
That's nice.
I would probably call that something like "ctZapToChar", in honor of
the same function in Emacs. :-)
Slice is a very confusing name for it.
So is your code free game for stealing from for std.metastring?
(meaning whatever I borrowed would be re-licensed under Boost)
--bb
More information about the Digitalmars-d
mailing list