#!/usr/bin/perl

use utf8;
use strict;
use warnings;

use DB_File;
use Fcntl;
use MediaWiki::DumpFile::Pages;

# use File::Path  qw.make_path.;
use Encode      qw.encode_utf8.;
# use Digest::MD5 qw.md5_hex.;

use POSIX       qw.setlocale.;
setlocale(&POSIX::LC_ALL => "pt");
use locale;

my $input_file = shift || die "No file specified.";

my $output_file = "out.$input_file";

tie my %hash, 'DB_File', "templates.cache", O_RDWR, 0666, $DB_HASH;

open IN, $input_file or die $!;
open OUT, ">", $output_file or die $!;

my $j = 0;
while (<IN>) {
    print STDERR "." unless $j++%100;
    s{\{\{([^\}]+)\}\}}{
        my $name = $1;
        my ($tmpl, @args) = split /\|/, $name;
        if (exists($hash{encode_utf8($tmpl)}) &&
               $hash{encode_utf8($tmpl)} !~ /[<>]/) {
            my $val = $hash{encode_utf8($tmpl)};
            for my $i (1..scalar(@args)) {
                $val =~ s/\{\{\{$i(?:\|(.*?))?\}\}\}/$args[$i-1] || $1 || ""/ge;
            }
             $val =~ s/&/&amp;/g;
            $val
        } else {
            "{{$name}}"
        }
    }ge;
    print OUT;
}
print STDERR "\n";
untie %hash;
