Perl6-Pugs

 view release on metacpan or  search on metacpan

ext/Rosetta/lib/Rosetta/Shell.pm  view on Meta::CPAN

use v6-alpha;

# External packages used by packages in this file, that don't export symbols:
use Locale::KeyedText-(1.72.0...);
use Rosetta-(0.722.0...);

###########################################################################
###########################################################################

# Constant values used by packages in this file:
my Str $EMPTY_STR is readonly = q{};

###########################################################################
###########################################################################

module Rosetta::Shell-0.1.3 {

    # External packages used by the Rosetta::Shell module, that do export symbols:
    # (None Yet)

    # State variables used by the Rosetta::Shell module:
    my Locale::KeyedText::Translator $translator;
    my Rosetta::Interface::DBMS      $dbms;

###########################################################################

sub main (Str :$engine_name!, Str :@user_lang_prefs? = 'en') {

    $translator .= new(
        set_names    => [
                'Rosetta::Shell::L::',
                'Rosetta::L::',
                'Rosetta::Model::L::',
                'Locale::KeyedText::L::',
                $engine_name ~ '::L::',
            ],
        member_names => @user_lang_prefs,
    );

    _show_message( Locale::KeyedText::Message.new(
        msg_key => 'ROS_S_HELLO' ) );

    try {
        $dbms = Rosetta::Interface::DBMS.new(
            engine_name => $engine_name );
    };
    if ($!) {
        _show_message( Locale::KeyedText::Message.new(
            msg_key  => 'ROS_S_DBMS_INIT_FAIL',
            msg_vars => {
                'ENGINE_NAME' => $engine_name,
            },
        ) );
    }
    else {
        _show_message( Locale::KeyedText::Message.new(
            msg_key  => 'ROS_S_DBMS_INIT_SUCCESS',
            msg_vars => {
                'ENGINE_NAME' => $engine_name,
            },
        ) );
        _command_loop();
    }

    _show_message( Locale::KeyedText::Message.new(
        msg_key => 'ROS_S_GOODBYE' ) );

    return;
}

###########################################################################

my sub _command_loop () {
#    INPUT_LINE:
    while (1) {
        _show_message( Locale::KeyedText::Message.new(
            msg_key => 'ROS_S_PROMPT' ) );

        my Str $user_input = =$*IN;

        # user simply hits return on an empty line to quit the program
#        last INPUT_LINE
        last
            if $user_input eq $EMPTY_STR;

        try {
            _show_message( Locale::KeyedText::Message.new(
                msg_key => 'ROS_S_TODO_RESULT' ) );
        };
        _show_message( $! )
            if $!; # input error, detected by library
    }

    return;
}

###########################################################################



( run in 1.551 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )