a2b19d57428e34676a3117d5cf8964793f7f7bb8
[blender.git] / po / check_po.py
1 #!/usr/bin/env python
2
3 # ***** BEGIN GPL LICENSE BLOCK *****
4 #
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU General Public License
7 # as published by the Free Software Foundation; either version 2
8 # of the License, or (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software Foundation,
17 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 #
19 # ***** END GPL LICENSE BLOCK *****
20
21 # <pep8 compliant>
22
23 # update the pot file according the POTFILES.in
24
25 import os
26 import sys
27 from codecs import open
28
29 CURRENT_DIR = os.path.abspath(os.path.dirname(__file__))
30
31 FILE_NAME_POT = os.path.join(CURRENT_DIR, "blender.pot")
32
33
34 def read_messages(fname):
35     def stripeol(s):
36         return s.rstrip("\n\r")
37
38     messages = {}
39     reading_message = False
40     message = ""
41     with open(fname, 'r', "utf-8") as handle:
42         while True:
43             line = handle.readline()
44
45             if not line:
46                 break
47
48             line = stripeol(line)
49             if line.startswith("msgid"):
50                 reading_message = True
51                 message = line[7:-1]
52             elif line.startswith("msgstr"):
53                 reading_message = False
54                 messages[message] = True
55             elif reading_message:
56                 message += line[1:-1]
57     return messages
58
59
60 def main():
61     pot_messages = read_messages(FILE_NAME_POT)
62
63     if len(sys.argv) > 1:
64         for lang in sys.argv[1:]:
65             po = os.path.join(CURRENT_DIR, lang + '.po')
66
67             if os.path.exists(po):
68                 po_messages = read_messages(po)
69                 for msgid in po_messages:
70                     if not pot_messages.get(msgid):
71                         print('Unneeded message id \'%s\'' % (msgid))
72
73                 for msgid in pot_messages:
74                     if not po_messages.get(msgid):
75                         print('Missed message id \'%s\'' % (msgid))
76     else:
77         for po in os.listdir(CURRENT_DIR):
78             if po.endswith('.po'):
79                 print('Processing %s...' % (po))
80                 po_messages = read_messages(po)
81                 for msgid in po_messages:
82                     if not pot_messages.get(msgid):
83                         print('    Unneeded message id \'%s\'' % (msgid))
84
85                 for msgid in pot_messages:
86                     if not po_messages.get(msgid):
87                         print('    Missed message id \'%s\'' % (msgid))
88
89
90 if __name__ == "__main__":
91     print("\n\n *** Running %r *** \n" % __file__)
92     main()