summaryrefslogblamecommitdiff
path: root/npc/functions/string.txt
blob: 2a38d90d494a25813ed8a4526a3e1b187fb4ffe3 (plain) (tree)


















































































































































































































                                                                                        
// Evol Script
// Author: Gumi

// safe string manipulation functions
// ** does not require PCRE


// str(<int>)
//     returns whatever is passed, converted to string

function	script	str	{
    return "" + getarg(0);
}



// startswith("<string>", "<search>")
//     returns true if <string> begins with <search>

function	script	startswith	{
    return substr(getarg(0), 0, getstrlen(getarg(1)) - 1) == getarg(1);
}



// endswith("<string>", "<search>")
//     returns true if <string> ends with <search>

function	script	endswith	{
    .@t = getstrlen(getarg(0)); // total length
    .@n = getstrlen(getarg(1)); // substring length
    return substr(getarg(0), .@t - .@n, .@t - 1) == getarg(1);
}



// capitalize("<string>")
//     returns <string> with its first letter capitalized

function	script	capitalize	{
    return setchar(getarg(0), strtoupper(charat(getarg(0), 0)), 0);
}



// titlecase("<string>" {, "<delimiter>" {, <camel>}})
//     returns <string> with the first letter of each word capitalized
//     if <camel> is true, the string is joined in a camelCase fashion

function	script	titlecase	{
    .@delimiter$ = getarg(1, " ");
    .@c = getarg(2, 0);
    explode(.@words$, getarg(0), .@delimiter$);

    for (.@i = (.@c ? 1 : 0); .@i < 255; ++.@i)
    {
        if (.@words$[.@i] == "")
        {
            break;
        }

        .@words$[.@i] = setchar(.@words$[.@i], strtoupper(charat(.@words$[.@i], 0)), 0);
    }

    return implode(.@words$, (.@c ? "" : .@delimiter$));
}



// camelcase("<string" {, "<delimiter>"})

function	script	camelcase	{
    return titlecase(getarg(0), getarg(1, " "), true);
}



// zfill("<string>" {, <width> {, "<padding>"}})
//     returns <string> padded to the left with <padding> up to width

function	script	zfill	{
    .@str$ = getarg(0);
    .@width = getarg(1, 8);
    .@padding$ = getarg(2, "0");

    for (.@s = getstrlen(.@str$); .@s < .@width; ++.@s)
    {
        .@str$ = .@padding$ + .@str$;
    }

    return .@str$;
}



// format_number(<integer> {, "<separator>"})
//     formats a number properly

function	script	format_number	{
    .@number$ = str(getarg(0));
    .@len = getstrlen(.@number$);
    .@separator$ = getarg(1, ",");

    if (getargcount() < 2 && playerattached()) {
        // get from user language
        switch (Lang) {
        case LANG_FR: .@separator$ = " "; break; // French
        case LANG_DE: .@separator$ = "."; break; // Germanic
        case LANG_PTBR: .@separator$ = "."; break; // Brazilian
        default: .@separator$ = ","; // English (default)
        }
    }

    for (.@i = .@len - 3; .@i > 0; .@i -= 3) {
        .@number$ = insertchar(.@number$, .@separator$, .@i);
    }

    return .@number$;
}



// fnum(<integer>)
//     alias for format_number

function	script	fnum	{
    return format_number(getarg(0));
}



// strip("<string>")
//     removes spaces at the start and end

function	script	strip	{
    .@s$ = getarg(0);
    if (.@s$ == "") {
        return "";
    }
    .@start = 0;
    .@end = getstrlen(.@s$) - 1;
    for (.@i = .@start; .@i < .@end; .@i++)
    {
        if (charat(.@s$, .@i) != " ") {
            break;
        } else {
            .@start++;
        }
    }
    for (.@i = .@end; .@i >= .@start; .@i--)
    {
        if (charat(.@s$, .@i) != " ") {
            break;
        } else {
            .@end--;
        }
    }
    //debugmes "STRIP.DEBUG MODE ENABLED BY JESUSALVA. PASSING SUBSTRING PARAMS";
    //debugmes "String \""+.@s$+"\" from "+str(.@start)+" to "+str(.@end);
    return substr(.@s$, .@start, .@end);
}



// reverse("<string>")
//     returns <string> reversed

function	script	reverse	{
    .@str$ = getarg(0);
    .@len = getstrlen(.@str$);

    for (.@i = 0; .@i < (.@len / 2); ++.@i) {
        .@tmp$ = charat(.@str$, .@i);
        .@str$ = setchar(.@str$, charat(.@str$, (.@len - 1 - .@i)), .@i); // a <= b
        .@str$ = setchar(.@str$, .@tmp$, (.@len - 1 - .@i)); // b <= a
    }

    return .@str$;
}



// repeat("<string>", <multiplier>)
//     repeats <string> many times and returns it

function	script	repeat	{
    .@mul = getarg(1);

    for (.@i = 0; .@i < .@mul; ++.@i) {
        .@str$ += getarg(0);
    }

    return .@str$;
}



// shuffle("<string>")
//     returns <string> shuffled

function	script	shuffle	{
    .@str$ = getarg(0);

    for (.@len = getstrlen(.@str$); .@len > 0; --.@len) {
        .@rnd = rand(.@len);
        .@out$ += charat(.@str$, .@rnd);
        .@str$ = delchar(.@str$, .@rnd);
    }

    return .@out$;
}