# -*- coding: utf8 -*- # # Copyright (C) 2017 Evol Online # Author: Andrei Karas (4144) import re from code.fileutils import makeDir, readFile, saveFile nameSplit = re.compile(":") comaSplit = re.compile(",") class Groups: pass def readLine(f): for line in f: if len(line) == 0: continue if line[-1:] == "\n": line = line[:-1] idx = line.find("/*") if idx >= 0: line = line[:idx] line = line.strip() yield line def skipFor(data, f): for line in readLine(f): if line == data or line == data + "\n": return True return False def readCommands(f): commands = dict() for line in readLine(f): if line == "}": return commands parts = nameSplit.split(line) if len(parts) != 2: continue name = parts[0].strip() value = parts[1].strip() idx1 = value.find("[") if idx1 < 0: commands[name] = (value, "false") else: idx2 = value.find("]") value = value[idx1 + 1: idx2 - idx1] parts = comaSplit.split(value) commands[name] = (parts[0].strip(), parts[1].strip()) print("command: {0}, {1}".format(name, commands[name])) return commands def readPermissions(f): permissions = dict() for line in readLine(f): if line == "}": return permissions parts = nameSplit.split(line) if len(parts) != 2: continue name = parts[0].strip() value = parts[1].strip() permissions[name] = value print("permission: {0}, {1}".format(name, value)) return permissions def readInherit(data): inherit = set() idx1 = data.find("(") idx2 = data.find(")") data = data[idx1 + 1: idx2 - idx1] parts = comaSplit.split(data) for field in parts: field = field.strip() if field == "": continue inherit.add(field) return inherit def readGroup(groups, f): fields = dict() commands = dict() permissions = dict() inherit = set() for line in readLine(f): if line == "}" or line == "},": groups.nameToId[fields["name"]] = fields["id"] groups.idToFields[fields["id"]] = fields groups.idToCommands[fields["id"]] = commands groups.idToPermissions[fields["id"]] = permissions groups.idToInherit[fields["id"]] = inherit groups.idToNames[fields["id"]] = fields["name"] return parts = nameSplit.split(line) if len(parts) != 2: continue name = parts[0].strip() value = parts[1].strip() print("line: {0}, {1}".format(name, value)) if name == "id": fields["id"] = value elif name == "name": fields["name"] = value elif name == "commands": commands = readCommands(f) print("Commands: {0}".format(commands)) elif name == "permissions": permissions = readPermissions(f) print("Permissions: {0}".format(permissions)) elif name == "inherit": inherit = readInherit(value) print("Inherit: {0}".format(inherit)) def getCommandType(data): if data[0] == "false" and data[1] == "false": return "false" elif data[0] == "false" and data[1] == "true": return "other" elif data[0] == "true" and data[1] == "false": return "self" elif data[0] == "true" and data[1] == "true": return "both" def getCommandsStr(commands): data = "" commandFormat = "\n " for command in commands: data = data + commandFormat.format( command, getCommandType(commands[command]) ) return data def getPermissionsStr(permissions): data = "" permissionFormat = "\n " for permission in permissions: data = data + permissionFormat.format( permission ) return data def getInheritStr(inherits, names): data = "" if len(inherits) == 0: return "" for name in inherits: if data != "": data = data + "," data += names[name] return "\n inherit=\"{0}\"".format(data) def convertGroups(): destDir = "clientdata/" templatesDir = "templates/" groupsConfFile = "serverdata/conf/groups.conf" makeDir(destDir) tpl = readFile(templatesDir + "group.tpl") groupsTpl = readFile(templatesDir + "groups.xml") groups = Groups() groups.nameToId = dict() groups.idToFields = dict() groups.idToCommands = dict() groups.idToPermissions = dict() groups.idToNames = dict() groups.idToInherit = dict() with open(groupsConfFile, "r") as f: skipFor("groups: (", f) while (skipFor("{", f) == True): readGroup(groups, f) data = "" for ids in sorted(groups.idToFields): data = data + tpl.format( id = ids, name = groups.idToNames[ids], inherit = getInheritStr(groups.idToInherit[ids], groups.nameToId), commands = getCommandsStr(groups.idToCommands[ids]), permissions = getPermissionsStr(groups.idToPermissions[ids]), ) saveFile(destDir + "groups.xml", groupsTpl.format(data))