|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
|
|
|
|
# Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
|
#
|
|
|
|
# This source code is licensed under the MIT license found in the
|
|
|
|
# LICENSE file in the root directory of this source tree.
|
|
|
|
|
|
|
|
import sys
|
|
|
|
import re
|
|
|
|
import argparse
|
|
|
|
|
|
|
|
"""
|
|
|
|
This script normalizes the names between "@" across the file + removes empty lines.
|
|
|
|
"""
|
|
|
|
|
|
|
|
bigcap = re.compile("([A-Z]*)([A-Z])")
|
|
|
|
|
|
|
|
def normalize_name(name, first_letter_in_bigcap = False):
|
|
|
|
"""
|
|
|
|
Convert a name in java-like convention to the small-caps + underscores convention.
|
|
|
|
Examples of renaming:
|
|
|
|
ThisName -> this_name
|
|
|
|
CXXDecl -> cxx_decl
|
|
|
|
"""
|
|
|
|
name = name.strip()
|
|
|
|
if name == "":
|
|
|
|
return
|
|
|
|
|
|
|
|
def f_sub(m):
|
|
|
|
res = "";
|
|
|
|
if m.start() != 0:
|
|
|
|
res += "_"
|
|
|
|
if m.group(1) != "":
|
|
|
|
res += m.group(1).lower()
|
|
|
|
res += "_"
|
|
|
|
res += m.group(2).lower()
|
|
|
|
return res
|
|
|
|
|
|
|
|
name = bigcap.sub(f_sub, name)
|
|
|
|
|
|
|
|
if first_letter_in_bigcap:
|
|
|
|
name = name[0].upper() + name[1:]
|
|
|
|
return name
|
|
|
|
|
|
|
|
at_word = re.compile("@(.*?)@")
|
|
|
|
|
|
|
|
def start(file):
|
|
|
|
for line in file:
|
|
|
|
if not line.strip():
|
|
|
|
continue
|
|
|
|
line = at_word.sub(lambda m: normalize_name(m.group(1)), line)
|
|
|
|
sys.stdout.write(line)
|
|
|
|
|
|
|
|
def main():
|
|
|
|
arg_parser = argparse.ArgumentParser(description='Normalize the strings "@AxxByy@" to "axx_byy" across the ATD file and remove empty lines.')
|
|
|
|
arg_parser.add_argument(metavar="FILE", nargs='?', dest="input_file", help="Input log file (default: stdin)")
|
|
|
|
args = arg_parser.parse_args()
|
|
|
|
if args.input_file:
|
|
|
|
file = open(args.input_file, "r")
|
|
|
|
else:
|
|
|
|
file = sys.stdin
|
|
|
|
start(file)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
main()
|