package Source_Io is
    --=============================================================
    -- This package is the interface between Token_Package an    ==
    -- the standard input device. It contains operations needed  ==
    -- to get or peek the next character from the standard input ==
    -- and to determine the class of this character.             ==
    --=============================================================

    New_Line : constant Character := Ascii.Cr;
    End_Of_File : constant Character := Ascii.Em;

    procedure Get (Item : out Character);
    -- gets the next character from the standard input. Returns
    -- ASCII.CR if end of line is reached or ASCII.EM if end of
    -- file is reached.

    function Peek return Character;
    -- peeks at the next character from the standard input. Returns
    -- ASCII.CR if end of line is reached or ASCII.EM if end of
    -- file is reached.

    function Is_White_Space (Item : in Character) return Boolean;
    -- returns TRUE if Item is a HORIZONTAL_TAB, VERTICAL_TAB,
    -- SPACE, or FORM_FEED; otherwise FALSE is returned.

    function Is_Letter (Item : in Character) return Boolean;
    -- returns TRUE if Item is in 'a' .. 'z' or 'A' .. 'Z';
    -- otherwise FALSE is returned.

    function Is_Digit (Item : in Character) return Boolean;
    -- returns TRUE if Item is in '0' .. '9';
    -- otherwise FALSE is returned.

    function Is_Punctuation (Item : in Character) return Boolean;
    -- returns TRUE if Item is '&' or ''' or '(' or ')' or '*' or
    -- '+' or ',' or '-' or '.' or '/' or '!' or ':' or ';' or
    -- '<' or '=' or '>' or '|'.
    -- otherwise FALSE is returned.

    function Is_Lower_Case (Item : in Character) return Boolean;
    -- returns TRUE if Item is in 'a' .. 'z';
    -- otherwise FALSE is returned.

    function To_Upper_Case (Item : in Character) return Character;
    -- converts Item into its upper-case representation;

    function Is_Extended_Digit (Item : in Character) return Boolean;
    -- returns TRUE if Item is in 'a'..'f' or 'A'..'F' or '0'..'9';
    -- otherwise FALSE is returned.

    function Is_Non_Quote_Graphic (Item : in Character) return Boolean;
    -- returns TRUE if Item is in SPACE .. TILDE but not '"';
    -- otherwise FALSE is returned.

    function Is_Graphic (Item : in Character) return Boolean;
    -- returns TRUE if Item is in SPACE .. TILDE ;
    -- otherwise FALSE is returned.

    function Is_Comment (Item : in Character) return Boolean;
    -- returns TRUE if Item is '-' and the next character is
    -- '-'; otherwise FALSE is returned.

    function Is_Compound_Delimiter (Item : in Character) return Boolean;
    -- returns TRUE only if Item and the next character form a
    -- compound delimiter (i.e., one of the following :
    -- '=>', '..', '**', ':=', '/=', '>=', '<=', '<<', '>>', or
    -- '<>')

    function Is_Valid_Compound_Delimiter (Item : in Character) return Boolean;
    -- returns TRUE if Item is '>' or '.' or '*' or '=' or '<'
    -- or '>';otherwise FALSE is returned.


end Source_Io;