On Thursday, 20 September 2012 at 17:32:52 UTC, bearophile wrote:
Jonathan M Davis:
Functions which operate on ASCII characters. All of the functions in std.ascii accept unicode characters but effectively ignore them. All isX functions return false for unicode characters, and all toX functions do nothing to unicode characters.<

So now I'd like a new set of functions designed for ASCII text, with contracts to refuse not-ASCII things ;-)

Thank you for the answers Jonathan.

Bye,
bearophile

What do you (you two) think of my proposition for a "std.strictascii" module?

The signatures would be:
char toLower(dchar c);

And the implementations be like:

----
char toLower(dchar c)
in
{
    assert(c.std.ascii.isAscii());
}
body
{
    cast(char) c.std.ascii.toLower();
}
----

The rational for taking a dchar as input is so that it's own input can be correctly validated, and so that it can easilly operate with foreach etc, doing the cast internally. The returned value would be pre-cast to char.

Usage:

----
import std.stdio;
import std.strictascii;

void main(){
    string s1 = "axbacxf";
    string s2 = "àxbécxf";
    char[] cs = new char[](7);

    //bearophile use case: no casts
    foreach(i, c; s1)
        cs[i] = c.toUpper();

    //illegal use case: correct input validation
    foreach(i, c; s1)
        cs[i] = c.toUpper(); //in assert
}
----

It doesn't add *much* functionality, and arguably, it is a specialized functionality, but there are usecases where you want to operate ONLY on ascii, as pointed out by bearophile.

Just curious if I should even consider investing some effort in this.

Reply via email to