URI: 
       tgenerate_translatable_strings.pl - tomb - the crypto undertaker
  HTML git clone git://parazyd.org/tomb.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tgenerate_translatable_strings.pl (1903B)
       ---
            1 use strict;
            2 use warnings;
            3 
            4 my $FILE = '../../tomb';
            5 my $FUNCPATTERN = '_(success|warning|failure|message|print)';
            6 my $STRINGPATTERN = '(".*?[^\\\]")';
            7 
            8 my $date = localtime;
            9 print '
           10 # Tomb - The Crypto Undertaker.
           11 # Copyright (C) 2007-2014 Dyne.org Foundation
           12 # Denis Roio <jaromil@dyne.org>, 2013.
           13 #
           14 #, fuzzy
           15 msgid ""
           16 msgstr ""
           17 "PO-Revision-Date: ', $date, '\n"
           18 "Last-Translator: Denis Roio <jaromil@dyne.org>\n"
           19 "Language: English\n"
           20 "Language-Team: Tomb developers <crypto@lists.dyne.org>\n"
           21 "MIME-Version: 1.0\n"
           22 "Content-Type: text/plain; charset=UTF-8\n"
           23 "Content-Transfer-Encoding: 8bit\n"
           24 
           25 ';
           26 
           27 my @blacklist = ('"--"', '"\\\\000"', '`.*`', '$\(.*\)');
           28 
           29 # Translatable strings that can't be automatically detected yet
           30 my %undetectable = (
           31     124 => '[sudo] Enter password for user ::1 user:: to gain superuser privileges'
           32 );
           33 
           34 open my $handle, $FILE or die "Failed to open $FILE";
           35 my @lines = <$handle>;
           36 close $handle;
           37 
           38 my %seen;
           39 my $index = 0;
           40 my $fold;
           41 my $func;
           42 my $force;
           43 my $str;
           44 
           45 foreach (@lines) {
           46     $index++;
           47     $force = 0;
           48 
           49     # It's a fold title
           50     if (m/^# +\{\{\{ +(.*)$/) {
           51         $fold = $1;
           52         next;
           53     }
           54 
           55     # It's a function name
           56     if (m/^(.*)\(\) *{$/) {
           57         $func = $1;
           58         next;
           59     }
           60 
           61     # Force if it's undetectable
           62     $force = 1 if exists($undetectable{$index});
           63 
           64     # Next if there is no print function
           65     next unless $force or m/$FUNCPATTERN +$STRINGPATTERN/;
           66 
           67     # Get string from the $undetectable hash or via regex
           68     if ($force) {
           69         $str = "\"$undetectable{$index}\"";
           70     }
           71     else {
           72         $str = $2;
           73     }
           74 
           75     # Remove conflicting quotes (\)
           76     $str =~ s/\\\$/\$/g;
           77 
           78     # Next if it was seen before
           79     $seen{$str}++;
           80     next if $seen{$str} > 1;
           81 
           82     # Next if it's blacklisted
           83     next if grep {$str =~ m/$_/} @blacklist;
           84 
           85     print "#: tomb:$fold:$func:$index\n";
           86     print "msgid $str\n";
           87     print "msgstr \"\"\n\n";
           88 }