diff options
Diffstat (limited to 'dilos/tdesdk/debian/desktop-i18n')
-rw-r--r-- | dilos/tdesdk/debian/desktop-i18n/createdesktop.pl | 98 | ||||
-rw-r--r-- | dilos/tdesdk/debian/desktop-i18n/findfiles | 41 | ||||
-rw-r--r-- | dilos/tdesdk/debian/desktop-i18n/msgsplit | 168 |
3 files changed, 307 insertions, 0 deletions
diff --git a/dilos/tdesdk/debian/desktop-i18n/createdesktop.pl b/dilos/tdesdk/debian/desktop-i18n/createdesktop.pl new file mode 100644 index 000000000..c71551dc5 --- /dev/null +++ b/dilos/tdesdk/debian/desktop-i18n/createdesktop.pl @@ -0,0 +1,98 @@ +#! /usr/bin/env perl + +use strict; +use warnings; + +use Getopt::Long; + +sub printdate +{ + printf ( "%04i", ( $_[5] + 1900 ) ); + print "-"; + printf ( "%02i", $_[4] + 1); + print "-"; + printf ( "%02i", $_[3] ); + print " "; + printf ( "%02i", $_[2] ); + print ":"; + printf ( "%02i", $_[1] ); + print "+0000"; +} + +sub prepare +{ + #warn "Running on Perl V5.8.x" if $^V ge v5.8.0; + + binmode( STDOUT, ":utf8" ) if $^V ge v5.8.0; + + my @now = gmtime(); + print "#, fuzzy\n"; + print "msgid \"\"\n"; + print "msgstr \"\"\n"; + print "\"Project-Id-Version: desktop files\\n\"\n"; + print "\"Report-Msgid-Bugs-To: http://bugs.trinitydesktop.org\\n\"\n"; + print "\"POT-Creation-Date: "; printdate( @now ); print "\\n\"\n"; + print "\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n"; + print "\"Last-Translator: FULL NAME <EMAIL\@ADDRESS>\\n\"\n"; + print "\"Language-Team: LANGUAGE <kde-i18n-doc\@kde.org>\\n\"\n"; + print "\"MIME-Version: 1.0\\n\"\n"; + print "\"Content-Type: text/plain; charset=UTF-8\\n\"\n"; + print "\"Content-Transfer-Encoding: 8bit\\n\"\n"; + print "\n\n"; +} + +sub processfiles +{ + my ( $files, $basedir) = ( @_ ); + for my $filename ( @$files ) + { + chomp( $filename ); + open( FH, "<", $filename ) or warn "Cannot open file $filename"; + binmode( FH, ":utf8" ) if $^V ge v5.8.0; + + #warn("Using $filename"); + + #my $regexp = qr{^(Name|Comment|Language|Keywords|About|Description|GenericName)=}; + my $regexp = qr{^(Name|Comment|Language|Keywords|About|Description|GenericName|Query|ExtraNames|X-TDE-Submenu)=}; + + while( <FH> ) + { + if ( m/$regexp/o ) + { + my $msgid = $_; + chomp( $msgid ); + $msgid =~ s/\\/\\\\/g; + $msgid =~ s/\"/\\\"/g; + if ($msgid =~ m/ +$/) { + $msgid =~ s/ +$//; # remove trailing spaces + print STDERR "ERROR: white space at the end of $msgid in $filename\n"; + } + if ($msgid =~ m/\r+$/) { + $msgid =~ s/\r+$//; # remove trailing CR (Carriage Return) + print STDERR "ERROR: CR at the end of $msgid in $filename\n"; + } + $filename =~ s,^$basedir/,,; + print "#: $filename:$.\n"; + print "msgid \"$msgid\"\n"; + print "msgstr \"\"\n"; + print "\n"; + } + } + + close( FH ); + } +} + +my $onefilelist; +my $basedir; +GetOptions ( "file-list=s" => \$onefilelist, + "base-dir=s" => \$basedir + ); + +prepare; + +open( FILELIST, $onefilelist ) or warn ( "Cannot open file list: $onefilelist" ); +my @thislist = <FILELIST>; +processfiles( \@thislist, $basedir ); +close( FILELIST ); + diff --git a/dilos/tdesdk/debian/desktop-i18n/findfiles b/dilos/tdesdk/debian/desktop-i18n/findfiles new file mode 100644 index 000000000..f59fe6bae --- /dev/null +++ b/dilos/tdesdk/debian/desktop-i18n/findfiles @@ -0,0 +1,41 @@ +#! /usr/bin/env bash + +filelist=$1 + +rm -f "$filelist"_* $filelist + +touch $filelist + +dir=. + +find $dir -name "*.directory" -print | grep -v debian >> $filelist +find $dir -name "*.kdelnk" -print | grep -v debian >> $filelist +find $dir -name "*.desktop" -print | grep -v debian >> $filelist +find $dir -name "*.kimap" -print | grep -v debian >> $filelist +find $dir -name "*.themerc" -print | grep -v debian >> $filelist +find $dir -name "*.kcsrc" -print | grep -v debian >> $filelist +find $dir -name "*.setdlg" -print | grep -v debian >> $filelist +find $dir -name "index.theme" -print | grep -v debian >> $filelist +find $dir -name "eventsrc" -print | grep -v debian >> $filelist +find $dir -name "*.protocol" -print | grep -v debian >> $filelist + +### TEMPORARY START: we do not have TDE modules +if true; then +find ./konqueror -name .svn -prune , -name "directory.*" -type f 2>/dev/null | grep -v debian >> $filelist +find ./kdesktop -name .svn -prune , -name "directory.*" -type f 2>/dev/null | grep -v debian >> $filelist +find ./drkonqi -name "*rc" -print 2>/dev/null | grep -v debian >> $filelist +find ./kimgio -name \*.kimgio -print 2>/dev/null | grep -v debian >> $filelist +find ./noatun -name \*.plugin -print 2>/dev/null | grep -v debian >> $filelist +find ./noatun-plugins -name \*.plugin -print 2>/dev/null | grep -v debian >> $filelist +find ./amor/data -name \*rc -print 2>/dev/null | grep -v debian >> $filelist +find ./tdeprint -name \*.print -print 2>/dev/null | grep -v debian >> $filelist +find . -name \*.kksrc -print 2>/dev/null | grep -v debian >> $filelist +find ./kopete -name \*.plugin -print 2>/dev/null | grep -v debian >> $filelist +find . -name \*.kdevtemplate -print 2>/dev/null | grep -v debian >> $filelist +fi +### TEMPORARY END: we do not have TDE modules + +# Extract .directory files in template directories of KOffice +find . -name .directory|fgrep templates >> $filelist + +sort -o $filelist -u $filelist diff --git a/dilos/tdesdk/debian/desktop-i18n/msgsplit b/dilos/tdesdk/debian/desktop-i18n/msgsplit new file mode 100644 index 000000000..41481d336 --- /dev/null +++ b/dilos/tdesdk/debian/desktop-i18n/msgsplit @@ -0,0 +1,168 @@ +#! /usr/bin/env python + +import sys, string, codecs, os + +# TODO: currently the 78 chars are *without* the quotes, while for Gettext it is *with* the quotes +# FIXME: it seems possible to get lines bigger than 80 characters. +max_length = 78 + +wrap_before = ['<h1>', '<h2>', '<h3>', '<h4>', '<h5>', '<h6>', '<p>', '<br>', '<br/>', + '<ol>', '<ul>', '<li>', '<table>', '<th>', '<tr>', '<td>', '<center>', + '<blockquote>', '<pre>', '<hr>', '<hr/>'] + +### TODO: try to support any charset, not only UTF-8 (so that it can be used outside TDE) + +def splitit( start, message, outfile ): + # print start+"\""+message+"\"" # DEBUG + if len(start): + if len(message) + len(start) < max_length and \ + string.find(message, '\\n') == -1: + outstr = '%s"%s"\n' % (start, message) + outfile.write(outstr.encode('utf-8')) + return + outfile.write(start) + outfile.write(u'""\n') + index = 0 + mlen = len(message) + last_brace = 0 + last_space = 0 + last_comma = 0 + while index < mlen: + if message[index] == r'n' and (index > 0 and message[index-1] == '\\') \ + and (index < 2 or message[index-2] != '\\'): + outstr = '"%s"\n' % message[:index+1] + outfile.write(outstr.encode('utf-8')) + message = message[index+1:] + mlen -= index + 1 + index = 0 + last_brace = 0 + last_space = 0 + last_comma = 0 + continue + elif message[index] == u'>': + last_brace = index + elif message[index] == u' ': + last_space = index + elif message[index] == u',': + last_comma = index + elif message[index] == u'<': + for s in wrap_before: + if index > 0 and message[index:].startswith(s): + outstr = '"%s"\n' % message[:index] + outfile.write(outstr.encode('utf-8')) + message = message[index:] + mlen -= index + index = 0 + last_brace = 0 + last_space = 0 + last_comma = 0 + continue + if index > max_length: + if last_brace > 50: + index = last_brace + while index < mlen - 1 and message[index+1] == ' ': + index += 1 + elif last_space != 0: + index = last_space + elif last_comma != 0: + index = last_comma + else: + while index > 0 and message[index] == u'\\': + index = index - 1 + outstr = '"%s"\n' % message[:index+1] + outfile.write(outstr.encode('utf-8')) + message = message[index+1:] + mlen -= index + 1 + index = 0 + last_brace = 0 + last_space = 0 + last_comma = 0 + continue + index += 1 + if len(message): + outstr = '"%s"\n' % message + outfile.write(outstr.encode('utf-8')) + +if sys.hexversion >= 0x02030000: + # We have Python 2.3 or better + open_type="rU" # Open for read with "Universal Newline Support" +else: + # We have a Python older than 2.3 + open_type="r" # Normal open for read +### TODO: even in the case of a parse error, the script could try to process the next file(s) instead of exiting. +for file in sys.argv[1:]: + orig_file = open(file, open_type) + new_file = open(file + ".new", 'w') + + last='' + start='' + index=0 + line=' ' + while 1: # python 2.1 has no True ;) + line = orig_file.readline() + index += 1 + if not line: + break + if line == '\n' or line[0] == '#': + splitit(start, last, new_file) + start = '' + last = '' + new_file.write(line) + continue + try: + line = string.strip(unicode(line, 'utf-8')) + except UnicodeError: + print file + if line[0] == '"' and line[-1:] == '"': + last += line[1:-1] + continue + # new message + splitit(start, last, new_file) + if line.startswith("msgid "): + start = "msgid " + last = string.lstrip(line[6:-1])[1:] + elif line.startswith("msgstr "): + start = "msgstr " + last = string.lstrip(line[7:-1])[1:] + elif line.startswith("msgctxt "): + start = "msgctxt " + last = string.lstrip(line[8:-1])[1:] + elif line.startswith("msgid_plural "): + start = "msgid_plural " + last = string.lstrip(line[13:-1])[1:] + elif line.startswith("msgstr["): + # For most languages, there will be only one digit + if line[8] == "]" and line[9] == " ": + if line[7].isdigit(): + start = line[:10] + last = string.lstrip(line[10:-1])[1:] + else: + print file, "not-a-digit error for mgstr[] in line", index + orig_file.close() + new_file.close() + sys.exit(1) + else: + posdigit = 7 # The first digit is at position 7 + while line[posdigit].isdigit(): + posdigit += 1 + if posdigit > 7 and line[posdigit] == "]" and line[posdigit+1] == " ": + posdigit += 2 # skip ] and the space + start = line[:posdigit] + last = string.lstrip(line[posdigit:-1])[1:] + else: + print file, "parse error after msgstr[ in line", index + orig_file.close() + new_file.close() + sys.exit(1) + else: + print file, "parsing error in line", index + orig_file.close() + new_file.close() + sys.exit(1) + + splitit(start, last, new_file) + orig_file.close() + new_file.close() + os.rename(file + ".new", file) + +# kate: space-indent off; indent-width 8; replace-tabs off; |