| #!/usr/bin/env python | 
 | # Copyright (C) 2012   Christian Heimes (christian@python.org) | 
 | # Licensed to PSF under a Contributor Agreement. | 
 | # | 
 | # cleanup Keccak sources | 
 |  | 
 | import os | 
 | import re | 
 |  | 
 | CPP1 = re.compile("^//(.*)") | 
 | CPP2 = re.compile("\ //(.*)") | 
 |  | 
 | STATICS = ("void ", "int ", "HashReturn ", "const UINT64 ", "UINT16 ") | 
 |  | 
 | HERE = os.path.dirname(os.path.abspath(__file__)) | 
 | KECCAK = os.path.join(HERE, "keccak") | 
 |  | 
 | def getfiles(): | 
 |     for name in os.listdir(KECCAK): | 
 |         name = os.path.join(KECCAK, name) | 
 |         if os.path.isfile(name): | 
 |             yield name | 
 |  | 
 | def cleanup(f): | 
 |     buf = [] | 
 |     for line in f: | 
 |         # mark all functions and global data as static | 
 |         if line.startswith(STATICS): | 
 |             buf.append("static " + line) | 
 |             continue | 
 |         # remove UINT64 typedef, we have our own | 
 |         if line.startswith("typedef unsigned long long int"): | 
 |             buf.append("/* %s */\n" % line.strip()) | 
 |             continue | 
 |         # remove #include "brg_endian.h" | 
 |         if "brg_endian.h" in line: | 
 |             buf.append("/* %s */\n" % line.strip()) | 
 |             continue | 
 |         # transform C++ comments into ANSI C comments | 
 |         line = CPP1.sub(r"/* \1 */", line) | 
 |         line = CPP2.sub(r" /* \1 */", line) | 
 |         buf.append(line) | 
 |     return "".join(buf) | 
 |  | 
 | for name in getfiles(): | 
 |     with open(name) as f: | 
 |         res = cleanup(f) | 
 |     with open(name, "w") as f: | 
 |         f.write(res) |