def sub_english(log): """Translate the log file and return a dict of info and log.""" english = open_json('eac', 'english.json')['translation'] foreign = open_json('eac', '{}.json'.format(log.language))['translation'] # Sort foreign lines from longest to shortest foreign = OrderedDict( sorted(foreign.items(), key=lambda t: len(t[1][0]), reverse=True)) # Compile all the regex now instead of repeating. for key, value in foreign.items(): for i, v in enumerate(value): value[i] = re.escape(v) foreign[key] = re.compile('|'.join(value), flags=re.IGNORECASE) # Iterate through each line and find/replace each string. new_log = [] for line in log.full_contents: if not line: # No use wasting time here. new_log.append('') else: for key, regex in foreign.items(): if regex.search(line): for value in english[key]: line = regex.sub(value, line) new_log.append(line) re_space_settings(new_log) new_log = ''.join(new_log) return { 'unrecognized': False, 'language': log.language, 'log': html.escape(new_log) }
def score_wrapper(log, markup=False): """Determine the type of log file and passes the log to the appropriate logchecker.""" try: analyze_log(log) except UnrecognizedException as exception: log.unrecognized = str(exception) log.full_contents = [html.escape(line) for line in log.full_contents] return log if log.ripper == 'EAC': info_json = open_json('eac', '{}.json'.format(log.language)) logchecker = eac.EACChecker(info_json['patterns'], info_json['translation'], markup) elif log.ripper == 'XLD': patterns = open_json('xld.json') logchecker = xld.XLDChecker(patterns, markup=markup) elif log.ripper == 'EAC95': info_json = open_json('eac95', '{}.json'.format(log.language)) logchecker = eac95.EAC95Checker(info_json['patterns'], info_json['translation'], markup) try: log = logchecker.check(log) except UnrecognizedException as exception: log.unrecognized = str(exception) log.full_contents = [html.escape(line) for line in log.full_contents] return log