diff --git a/.gitattributes b/.gitattributes index 7d97d4b9036..e6a1bf265e8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9025,6 +9025,7 @@ res/licenses/xpp3-license.txt svneol=native#text/plain res/licenses/xstream-license.txt svneol=native#text/plain res/main.properties svneol=native#text/plain res/mtg-data.txt svneol=native#text/plain +res/oracleScript.py -text res/pics/BookIcon.png -text svneol=unset#image/png res/pics/BoxIcon.png -text svneol=unset#image/png res/pics/GoldIcon.png -text svneol=unset#image/png diff --git a/res/oracleScript.py b/res/oracleScript.py new file mode 100644 index 00000000000..343d0af923e --- /dev/null +++ b/res/oracleScript.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python + +# This python script is designed to handle the following: individual cards located in /res/cardsfolder/* +# Insert of Oracle data into data files from mtg-data.txt +# Future possibilities. Using mtg-data to add SetInfo data and other Outside Game Data (Type, PT, etc) +# Hopefully the oracleScript can replace both SetInfo Scripts by current SetInfo scripts by expanding their current functionality + +import os, fnmatch, re + +class Card: + def __init__(self, name, cleanName): + self.name = name + self.cleanName = cleanName + +#get master card list and drop into a dictionary +folder = "cardsfolder" +parseFrom = open('mtg-data.txt', 'r') +mtgData = parseFrom.read() +parseFrom.close() +err = open('oracleScript.log', 'w') +allSets = {} +cardDict = {} +setStr = 'SetInfo:' +oracleStr = 'Oracle:' + +rarity = dict() +rarity['L'] = 'Land' +rarity['C'] = 'Common' +rarity['U'] = 'Uncommon' +rarity['R'] = 'Rare' +rarity['M'] = 'Mythic' + +# parse cardsfolder for Card Lines and Rarity/Picture SVars. Filling in any gaps +for root, dirnames, filenames in os.walk(folder): + for fileName in fnmatch.filter(filenames, '*.txt'): + if fileName.startswith('.'): + continue + + hasOracle = False + + file = open(os.path.join(root, fileName)) + cleanName = fileName.replace('.txt', '') + + line = file.readline().strip() + # Handle name and creation + name = line.replace('Name:', '') + search = '\n%s\n' % name + found = mtgData.find(search) + endFound = mtgData.find('\n\n', found) + + block = mtgData[found+1:endFound] + splitBlock = block.split('\n') + typeLine = 2 + if splitBlock[1].find('{') == -1: # Has a Cost not a Land or Ancestral Vision + typeLine = 1 + + startOracle = typeLine + 1 + if splitBlock[typeLine].find('Creature') > -1 or splitBlock[typeLine].find('Planeswalker') > -1: + startOracle = startOracle + 1 + + # \n needs to appear in the Oracle line + oracle = '\\n'.join(splitBlock[startOracle:-1]) + + sets = splitBlock[-1] + + card = Card(name.replace(' ', '+'), cleanName) + cardDict[cleanName] = card + card.lines = line + '\n' + + # Start parsing the rest of the data file + line = file.readline().strip() + + while line != 'End': + # Skip empty lines + if line == '': + line = file.readline().strip() + continue + + if line.find(oracleStr) != -1: + hasOracle = True + break + + # Disabled until we're ready to remove SetInfoUrl Parameter + #elif line.find(setStr) != -1: + # pass + else: + card.lines += line + '\n' + + line = file.readline().strip() + + file.close() + + if hasOracle: + continue + + print "%s => %s \n" % (name, oracle) + + file = open(os.path.join(root, fileName), 'w') + file.write(card.lines) + + file.write('Oracle:%s\n' % oracle) + + ''' + # Disabled until we're ready to remove SetInfoUrl Parameter + for i in sets: + set = sets[i].lstrip() + setInfo = set.split(' ') + if len(setInfo) > 2: + file.write('SetInfo:%s|%s||%s\n' % (setInfo[0],setInfo[1],setInfo[2].replace('(x','').replace(')',''))) + else: + file.write('SetInfo:%s|%s|\n' % (setInfo[0],setInfo[1])) + ''' + + file.write('End') + file.close() + + err.write(card.name + '... Updated\n') + +err.close()