def parse_newcommand
case
when @scanner.scan_block
s = Scanner.new(@scanner[1])
raise parse_error("Need newcommand.", s.rest+"}") unless s.scan_command
com = s[1]
raise parse_error("Syntax error." ,s.rest+"}") unless s.eos?
when @scanner.scan_command
s = Scanner.new(@scanner[1])
com = s.scan_command
else
raise parse_error("Need newcommand.")
end
optnum = scan_num_of_parameter
opt = @scanner.scan_option ? @scanner[1] : nil
case
when @scanner.scan_block
body = @scanner[1]
when @scanner.scan_command
body = @scanner.matched
else
body = @scanner.scan(/./)
end
raise parse_error("Need parameter.") unless body
check_parameter_numbers(body, optnum, @scanner.matched)
optnum-=1 if opt
@commands[com] = Command.new(optnum, body, opt)
end