1#!/usr/bin/perl -w
2
3use strict;
4use warnings;
5use File::Find;
6
7my $prefix = 'I18N_OPENXPKI_UI_';
8
9my @MANIFEST;
10
11my %tags = ();
12my $basedir = '';
13
14foreach my $dir (@ARGV) {
15    $basedir = $dir;
16    @MANIFEST = ();
17    if (-e "$dir/MANIFEST") {
18        open my $MAN, '<', "$dir/MANIFEST";
19        @MANIFEST = <$MAN>;
20        close $MAN;
21        foreach my $man (@MANIFEST) {
22            chomp $man;
23        }
24    }
25    find(\&extract_tags, $dir);
26}
27
28sub extract_tags {
29    my $filename = $_;
30    my $rel_name = $File::Find::name;
31    my $dir_name = $File::Find::topdir;
32    $rel_name =~ s/$basedir\///;
33    if ($File::Find::name !~ m{ \.svn }xms) {
34        if (scalar @MANIFEST > 0 && ! grep {$_ eq $rel_name} @MANIFEST) {
35            # if we have a MANIFEST file, the file needs to be in it
36            # to be searched for tags
37            return;
38        }
39        # skip hidden files or backup files
40        if ($filename =~ m{ \A \. }xms || $filename =~ m{ ~ \z }xms) {
41           return;
42        }
43        # dont scan po files itself (files in config/contrib/)
44        if ($filename =~ m{ \A openxpki.po }xms ) {
45           return;
46        }
47        open my $FILE, '<', $filename;
48        while (my $line = <$FILE>) {
49            while ($line =~ s{ ($prefix [A-Z0-9\_]+[A-Z0-9]) }{}xms) {
50                $tags{$1} = 1;
51            }
52        }
53        close $FILE;
54    }
55}
56
57print <<'XEOF';
58
59# OpenXPKI i18n language files - these files are autogenerated by make!
60# Copyright (C) 2019 OpenXPKI Foundation
61# This file is distributed under the same license as the OpenXPKI core.
62
63msgid ""
64msgstr ""
65"Project-Id-Version: PACKAGE VERSION\n"
66"Report-Msgid-Bugs-To: \n"
67"POT-Creation-Date: 2004-09-08 14:02+0200\n"
68"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
69"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
70"Language-Team: LANGUAGE <LL@li.org>\n"
71"MIME-Version: 1.0\n"
72"Content-Type: text/plain; charset=UTF-8\n"
73"Content-Transfer-Encoding: 8bit\n"
74
75XEOF
76
77foreach my $tag (sort keys %tags) {
78    print qq{msgid "$tag"\n} . qq{msgstr ""\n};
79}
80