From 11e5e8749eb7d4d3cfebfa49bbb7ea4624608647 Mon Sep 17 00:00:00 2001 From: "admin@progandy.co.cc" Date: Thu, 19 Aug 2010 20:12:06 +0000 Subject: initial commit with v0.8.6.1 git-svn-id: http://mirotr.googlecode.com/svn/trunk@2 eced67a3-f377-a0ae-92ae-d6de1850b05a --- lpgen.pl | 205 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 lpgen.pl (limited to 'lpgen.pl') diff --git a/lpgen.pl b/lpgen.pl new file mode 100644 index 0000000..d1626d4 --- /dev/null +++ b/lpgen.pl @@ -0,0 +1,205 @@ +#!/usr/bin/perl +# +# Script generating translation templates from sources +# +# Miranda IM: the free IM client for Microsoft* Windows* +# +# Copyright 2000-2008 Miranda ICQ/IM project, +# all portions of this codebase are copyrighted to the people +# listed in contributors.txt. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +use POSIX; +use File::Find; +use strict; + +my $rootdir = ''; +my %hash = (); +my $clines = 0; + +my $version = '0.8'; +my $time = localtime(); + +if (@ARGV && $ARGV[0] eq "version") { + shift @ARGV; + # 1st arg version major i.e. 07 for "0.7" + if (@ARGV) { + my $vermaj = shift @ARGV; + if ($vermaj =~ /^([0-9]*)([0-9])$/) { + if ($1 eq "") { + $version = $2; + } else { + $version = "$1.$2"; + } + } else { + $version = $vermaj; + } + } + # 2nd arg version minor i.e. 1 for "0.7.1" + if (@ARGV) { + my $vermin = shift @ARGV; + if ($vermin =~ /^[0-9]+$/) { + $version .= ".$vermin"; + } else { + $version .= $vermin; + } + } + # 3rd arg build number i.e. 36 for "0.7.1 build 36" + if (@ARGV) { + my $build = shift @ARGV; + if ($build =~ /^[0-9]+$/) { + $version .= " build $build"; + } else { + $version .= $build; + } + } +} + +#Language Files +if (!@ARGV) { + create_langfile( + './MirOTR', + './MirOTR/Win32/langpack_english.txt', + 'English (US)', '0809', + 'ProgAndy', + 'admin@progandy.co.cc', + 'MirOTR'); +} +else { + print "Error: Unknown module $ARGV[0]\n"; + exit 1; +} + +sub create_langfile { + $rootdir = shift(@_); + my $outfile = shift(@_); + my $lang = shift(@_); + my $locale = shift(@_); + my $author = shift(@_); + my $email = shift(@_); + my $plugin = @_ ? shift(@_) : ''; + %hash = (); + my %common = (); + $clines = 0; + print "Building language file for $rootdir:\n"; + find({ wanted => \&csearch, preprocess => \&pre_dir }, $rootdir); + find({ wanted => \&rcsearch, preprocess => \&pre_dir }, $rootdir); + open(WRITE, "> $outfile") or die; + print WRITE < $common{$a}) } keys %common; + print WRITE "; Common strings that belong to many files\n;["; + print WRITE join "]\n;[", @sorted; + print WRITE "]\n"; + + my $file = ''; + foreach my $trans (sort { ($hash{$a} eq $hash{$b}) ? ($a cmp $b) : ($hash{$a} cmp $hash{$b}) } keys %hash) { + if ($hash{$trans} ne $file) { + $file = $hash{$trans}; + print WRITE "\n; $file\n"; + } + print WRITE ";[$trans]\n"; + } + + close(WRITE); + print " $outfile is complete ($clines)\n\n"; +} + +sub pre_dir { + # avoid parsing some ext SDKs + my @files = (); + return @files if ( + $File::Find::name =~/..\/extplugins/ or + $File::Find::name =~/freeimage\/Source/ or + $File::Find::name =~/dbrw\/sqlite3/); + @files = grep { not /^\.\.?$/ } @_; + return sort @files; +} + +sub append_str { + my $str = shift(@_); + my $found = shift(@_); + $str = substr($str, 1, length($str) - 2); + if (length($str) gt 0 and $str ne "List1" and $str ne "Tree1" and $str =~ /[a-zA-Z]+/g) { + my $path = $File::Find::name; + $path =~ s/(\.\.\/)+miranda\///; + if (!$hash{$str}) { + $hash{$str} = $path; + $clines ++; + return 1; + } elsif ($hash{$str} ne $path) { + if ($hash{$str} =~ /^\d+$/) { + $hash{$str} ++; + } else { + $hash{$str} = 1; + } + } + } + return 0; +} + +sub csearch { + if (-f $_ and ($_ =~ m/\.c(pp)?$/i or $_ =~ m/\.h(pp)?$/i)) { + my $found = 0; + my $file = $_; + print " Processing $_ "; + open(READ, "< $_") or return; + my $all = ''; + while (my $lines = ) { + $all = $all.$lines; + } + close(READ); + $_ = $all; + while (/(?:Button_SetIcon_IcoLib|Translate[A-Z]{0,2}|LPGENT?|ICQTranslateUtfStatic)\s*\(\s*(\".*?\")\s*[,\)]/g) { + $found += append_str($1, $found); + } + print "($found)\n"; + } +} + +sub rcsearch { + if ( -f $_ and $_ =~ m/\.rc$/i) { + my $found = 0; + my $file = $_; + print " Processing $_ "; + open(READ, "< $_") or return; + my $all = ''; + while (my $lines = ) { + $all = $all.$lines; + } + close(READ); + $_ = $all; + while (/\s*(?:CONTROL|(?:DEF)?PUSHBUTTON|[LRC]TEXT|GROUPBOX|CAPTION|MENUITEM|POPUP)\s*(\".*?\")/g) { + $found += append_str($1, $found); + } + print "($found)\n"; + } +} -- cgit v1.2.3