1 package Packages::Template;
8 use Benchmark ':hireswallclock';
11 use Packages::I18N::Locale;
12 use Packages::I18N::Languages;
13 use Packages::I18N::LanguageNames;
15 our @ISA = qw( Exporter );
16 #our @EXPORT = qw( head );
18 use constant COMPILE => 1;
21 my ($classname, $include, $format, $vars, $options) = @_;
25 bless( $self, $classname );
27 my @timestamp = gmtime;
28 $vars->{timestamp} = {
29 year => $timestamp[5]+1900,
30 string => scalar gmtime() .' UTC',
33 $self->{template} = Template->new( {
34 PRE_PROCESS => [ 'config.tmpl' ],
35 INCLUDE_PATH => $include,
37 COMPILE_EXT => '.ttc',
39 } ) or fatal_error( sprintf( _g( "Initialization of Template Engine failed: %s" ), $Template::ERROR ) );
40 $self->{format} = $format;
47 return $self->{template}->process(@_);
51 return $self->{template}->error(@_);
55 my ($self, $action, $page_content) = @_;
58 #die Dumper($self, $action, $page_content);
61 $self->process("$self->{format}/$action.tmpl", $page_content, \$txt)
62 or die sprintf( "template error: %s", $self->error ); # too late for reporting on-line
68 my ($self, $page_content) = @_;
71 # warn Dumper($page_content);
74 $self->process("html/error.tmpl", $page_content, \$txt)
75 or die sprintf( "template error: %s", $self->error ); # too late for reporting on-line
81 my ($self, $NAME, $LANG, $USED_LANGS, $timediff) = @_;
83 my $langs = languages( $LANG, @$USED_LANGS );
86 $self->process("$self->{format}/foot.tmpl", { langs => $langs, name => $NAME, benchmark => $timediff ? timestr($timediff) : '' }, \$txt)
87 or die sprintf( "template error: %s", $self->error ); # too late for reporting on-line
93 my ( $lang, @used_langs ) = @_;
99 my @printed_langs = ();
100 foreach (@used_langs) {
101 next if $_ eq $lang; # Never print the current language
102 unless (get_selfname($_)) { warn "missing language $_"; next } #DEBUG
103 push @printed_langs, $_;
105 return [] unless scalar @printed_langs;
106 # Sort on uppercase to work with languages which use lowercase initial
108 foreach my $cur_lang (sort langcmp @printed_langs) {
110 $lang{lang} = $cur_lang;
111 $lang{tooltip} = dgettext( "langs", get_language_name($cur_lang) );
112 $lang{selfname} = get_selfname($cur_lang);
113 $lang{transliteration} = get_transliteration($cur_lang) if defined get_transliteration($cur_lang);