from bs4 import BeautifulSoup,Tag import re import os.path import argparse base=os.path.dirname(os.path.abspath(__file__)) parser = argparse.ArgumentParser() parser.add_argument('--game', action='store', type=str, required=False) parser.add_argument('--note', action='store', type=str, required=False) args = parser.parse_args() notename = 'note.txt' if args.note != None: notename = args.note notepath = os.path.join(base, notename) notefile = open(notepath, 'r', encoding='utf8') notelines = notefile.readlines() annotator = 'unknown user' annotations = {} nochat = 1 notime = 1 for line in notelines: if line == '': continue msg = line.split('#') if msg[0] == 'nochat': if msg[1].strip() == '0': nochat = 0 elif msg[0] == 'notime': if msg[1].strip() == '0': notime = 0 elif msg[0] == 'annotator': annotator = msg[1].strip() elif msg[0].find('*') != -1: annotations[(int(msg[0][:-1]), 1)] = msg[1].strip() else: try: annotations[(int(msg[0]), 0)] = msg[1].strip() except: print('annotation file error') gamename = 'game.html' if args.game != None: gamename = args.game gamepath = os.path.join(base, gamename) srcfile = open(gamepath, encoding='utf8') mainsoup = BeautifulSoup(srcfile, "html.parser") logsoup = mainsoup.find('script', class_ = 'battle-log-data') logstring = logsoup.encode_contents().decode() if nochat == 1: while logstring.find('|c|') != -1: start = logstring.find('|c|') end = logstring.find('\n', start) try: logstring = logstring[:max(start-1, 0)] + logstring[end:] except: print('error when removing chat message') if nochat == 1: while logstring.find('|j|') != -1: start = logstring.find('|j|') end = logstring.find('\n', start) try: logstring = logstring[:max(start-1, 0)] + logstring[end:] except: print('error when removing join message') if notime == 1: while logstring.find('|inactive|') != -1: start = logstring.find('|inactive|') end = logstring.find('\n', start) try: logstring = logstring[:max(start-1, 0)] + logstring[end:] except: print('error when removing time message') def byline(message, annotator): return '|c| ANNOTATION by ' + annotator + '|' + message + '\n' for turnpos, message in annotations.items(): turnno, position = turnpos if turnno == 0: if position == 0: target = '|teampreview\n' pos = logstring.find(target) logstring = logstring[:pos+len(target)] + byline(message, annotator) + logstring[pos+len(target):] else: target = '|turn|1\n' pos = logstring.find(target) logstring = logstring[:pos] + byline(message, annotator) + logstring[pos:] else: if position == 0: target = '|turn|' + str(turnno) + '\n' pos = logstring.find(target) logstring = logstring[:pos+len(target)] + byline(message, annotator) + logstring[pos+len(target):] else: target = '|turn|' + str(turnno + 1) + '\n' pos = logstring.find(target) logstring = logstring[:pos] + byline(message, annotator) + logstring[pos:] logsoupstring = '' logsoup.replace_with(logsoupstring) with open("annotated_" + gamename, "wb") as f_output: f_output.write(mainsoup.prettify("utf-8", formatter = None))