You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.7 KiB

3 years ago
#!/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()