/
CDC-1.1/
parent $parsers
parent $frob_class
object $input_parser

var $root child_index 0
var $root fertile 0
var $root manager $input_parser
var $root owners [$input_parser]
var $root writable [$]
var $root readable ['parameters, 'methods, 'code]
var $root trusted []
var $root owned [$input_parser]
var $root inited 1
var $root dbref 'input_parser

method parse
    arg user, str, next_parser, [other_parsers];
    var line, result;
    
    // checks the incoming line to see if its a keeper, or a command.
    line = user.lines();
    if (line == 'one) {
        user.new_line(str);
        user.finish_receiving();
        return 'ok;
    } else {
        result = .parse_line(str);
        switch (result[1]) {
            case 'abort:
                user.reset_input();
                return "** Aborted **  Text thrown away.";
            case 'not_done:
                user.new_line(result[2]);
            case 'done:
                user.finish_receiving();
            case 'pass_command:
                return next_parser.parse(user, result[2], @other_parsers);
        }
        return 'ok;
    }
.

method parse_line
    arg str;
    var cmd;
    
    // do this for blank strings => ""
    if (!str) {
        return ['not_done, str];
    } else if ((str == ".") || (str == "done")) {
        return ['done];
    
        // } else if (str[1] == ">") {
        //   return ['pass_command, substr(str, 2, strlen(str) - 1)];
    } else if ((str == "abort") || (str == "@abort")) {
        return ['abort];
    } else {
        return ['not_done, str];
    }
.