# The Text interface

A non-nil `TEXT` represents an immutable, zero-based sequence of characters. `NIL` does not represent any sequence of characters, it will not be returned from any procedure in this interface, and it is a checked runtime error to pass `NIL` to any procedure in this interface.

    INTERFACE Text;

    IMPORT Word;

    TYPE T = TEXT;

    CONST Brand = "Text-1.0";

    PROCEDURE Cat(t, u: T): T;

Return the concatenation of `t` and `u`.

    PROCEDURE Equal(t, u: T): BOOLEAN;

Return `TRUE` if `t` and `u` have the same length and (case-sensitive) contents.

    PROCEDURE GetChar(t: T; i: CARDINAL): CHAR;

Return character `i` of `t`. It is a checked runtime error if `i >= Length(t)`.

    PROCEDURE Length(t: T): CARDINAL;

Return the number of characters in `t`.

    PROCEDURE Empty(t: T): BOOLEAN;

Equivalent to `Length(t) = 0`.

    PROCEDURE Sub(t: T; start: CARDINAL;
      length: CARDINAL := LAST(CARDINAL)): T;

Return a sub-sequence of `t`: empty if `start >= Length(t)` or `length = 0`; otherwise the subsequence ranging from `start` to the minimum of `start+length-1` and `Length(t)-1`.

    PROCEDURE SetChars(VAR a: ARRAY OF CHAR; t: T);

For each `i` from 0 to `MIN(LAST(a), Length(t)-1)`, set `a[i]` to `GetChar(t, i)`.

    PROCEDURE FromChar(ch: CHAR): T;

Return a text containing the single character `ch`.

    PROCEDURE FromChars(READONLY a: ARRAY OF CHAR): T;

Return a text containing the characters of `a`.

    PROCEDURE Hash(t: T): Word.T;

Return a hash function of the contents of `t`.

    PROCEDURE Compare(t1, t2: T): [-1..1];

Return -1 if `t1` occurs before `t2`, 0 if `Equal(t1, t2)`, +1 if `t1` occurs after `t2` in lexicographic order.

    PROCEDURE FindChar(t: T; c: CHAR; start := 0): INTEGER;

If `c = t[i]` for some `i` in `[start~..~Length(t)-1]`, return the smallest such `i`; otherwise, return -1.

    PROCEDURE FindCharR(t: T; c: CHAR;  start := LAST(INTEGER)): INTEGER;

If `c = t[i]` for some `i` in `[0~..~MIN(start, Length(t)-1)]`, return the largest such `i`; otherwise, return -1.

    END Text.