#!/usr/bin/env python3 # # Check gcc.pot file for gcc-internal-format and print all strings # that contain an option that is not wrapped by %<-option_name%>. # # This file is part of GCC. # # GCC 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 3, or (at your option) any later # version. # # GCC 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 GCC; see the file COPYING3. If not see # . */ # # # import argparse import re parser = argparse.ArgumentParser(description='') parser.add_argument('file', help = 'pot file') args = parser.parse_args() origin = None internal = False lines = open(args.file).readlines() for i, l in enumerate(lines): l = l.strip() s = 'msgid ' if l.startswith('#: '): origin = l elif '#, gcc-internal-format' in l: internal = True if l.startswith(s) and origin and internal: j = 0 while not lines[i + j].startswith('msgstr'): l = lines[i + j] if l.startswith(s): l = l[len(s):] text = l.strip('"').strip() if text: parts = text.split(' ') for p in parts: if p.startswith('-'): if len(p) >= 2 and (p[1].isalpha() and p != '-INF'): print('%s: %s' % (origin, text)) elif p.startswith('__builtin_'): print('%s: %s' % (origin, text)) if re.search("[^%]'", p): print('%s: %s' % (origin, text)) # %< should not be preceded by a non-punctuation # %character. if re.search("[a-zA-Z0-9]%<", p): print('%s: %s' % (origin, text)) j += 1 origin = None internal = False