view Lib/IMPL/Resources/Strings.pm @ 59:0f3e369553bd

Rewritten property implementation (probably become slower but more flexible) Configuration infrastructure in progress (in the aspect of the lazy activation) Initial concept for the code generator
author wizard
date Tue, 09 Mar 2010 02:50:45 +0300
parents 521c9c1a3ea1
children f47f93534005
line wrap: on
line source

use strict;
use warnings;

package IMPL::Resources::Strings::Storage;
package IMPL::Resources::Strings;
use File::Spec;

our $Locale ||= 'default';
our $Base ||='locale';
our $Encoding ||= 'utf-8';
our @Locations;

@Locations = ('.') unless @Locations;

sub import {
    my ($self,$refStrings,%options) = @_;
    
    my ($class,$pathModule) = caller;
    
    my ($vol,$dir,$file) = File::Spec->splitpath($pathModule);
    my $baseDir = File::Spec->catpath($vol,$dir,'');
    
    my @pathClass = split /::/,$class;
    my $fileClass = pop @pathClass;
    
    my @ways = map {
        my @path = ($_);
        push @path,$Base;
        push @path,$Locale;
        
        File::Spec->catfile(@path,@pathClass,$fileClass);
    } @Locations;
    
    push @ways, File::Spec->catfile($baseDir,'locale',$Locale,$fileClass);
    
    
    
    my $stringsStorage = findResource($class,@ways);
    
}

sub findResource {
    my ($class,$refWays) = @_;
    
    
}



sub parseResource {
    my ($fname) = @_;
    
    open my $hRes, "<:encoding($Encoding)", findFile($fname) or die "Failed to open file $fname: $!";
    
    my %Map;
    my $line = 1;
    while (<$hRes>) {
        chomp;
        $line ++ and next if /^\s*$/;
        
        if (/^(\w+)\s*=\s*(.*)$/) {
            $Map{$1} = $2;
        } else {
            die "Invalid resource format in $fname at $line";
        }
        $line ++;
    }
    
    return \%Map;
}

package IMPL::Resources::Strings::Storage;
use base qw(IMPL::Object);

sub get {
    my ($this,$msg_name) = @_;
}
1;

__END__

=pod

=head1 SYNOPSIS

package Foo;

use IMPL::Resources::Strings {
    msg_say_hello => "Hello, %name!",
    msg_module_name => "Simple Foo class"
}, auto => 1, locale => 'en-us';

sub InviteUser {
    my ($this,$uname) = @_;
    
    print msg_say_hello(name => $uname);
    
}

=cut