Merge branch 'master' of https://github.com/reimannsum/mtgencode into reimannsum-master
Conflicts: decode.py lib/cardlib.py lib/utils.py Moved massive html header string into a separate file.
This commit is contained in:
commit
ccb112021e
7 changed files with 131 additions and 27 deletions
24
decode.py
24
decode.py
|
@ -17,7 +17,7 @@ def exclude_sets(cardset):
|
|||
|
||||
def main(fname, oname = None, verbose = True, encoding = 'std',
|
||||
gatherer = False, for_forum = False, for_mse = False,
|
||||
creativity = False, vdump = False):
|
||||
creativity = False, vdump = False, for_html = False):
|
||||
|
||||
fmt_ordered = cardlib.fmt_ordered_default
|
||||
|
||||
|
@ -53,6 +53,11 @@ def main(fname, oname = None, verbose = True, encoding = 'std',
|
|||
if for_mse:
|
||||
# have to prepend a massive chunk of formatting info
|
||||
writer.write(utils.mse_prepend)
|
||||
|
||||
if for_html:
|
||||
# have to preapend html info
|
||||
writer.write(utils.html_prepend)
|
||||
|
||||
for card in cards:
|
||||
if for_mse:
|
||||
writer.write(card.to_mse().encode('utf-8'))
|
||||
|
@ -68,7 +73,7 @@ def main(fname, oname = None, verbose = True, encoding = 'std',
|
|||
writer.write(('\n' + fstring[:-1]).replace('\n', '\n\t\t'))
|
||||
else:
|
||||
writer.write(card.format(gatherer = gatherer, for_forum = for_forum,
|
||||
vdump = vdump).encode('utf-8'))
|
||||
vdump = vdump, for_html = for_html).encode('utf-8'))
|
||||
|
||||
if creativity:
|
||||
cstring = '~~ closest cards ~~\n'
|
||||
|
@ -95,8 +100,15 @@ def main(fname, oname = None, verbose = True, encoding = 'std',
|
|||
if for_mse:
|
||||
# more formatting info
|
||||
writer.write('version control:\n\ttype: none\napprentice code: ')
|
||||
if for_html:
|
||||
# closing the html file
|
||||
writer.write(utils.html_append)
|
||||
|
||||
if oname:
|
||||
if for_html:
|
||||
print oname
|
||||
# if ('.html' != oname[-])
|
||||
# oname += '.html'
|
||||
if verbose:
|
||||
print 'Writing output to: ' + oname
|
||||
with open(oname, 'w') as ofile:
|
||||
|
@ -144,10 +156,14 @@ if __name__ == '__main__':
|
|||
help='dump out lots of information about invalid cards')
|
||||
parser.add_argument('-v', '--verbose', action='store_true',
|
||||
help='verbose output')
|
||||
parser.add_argument('-mse', '--mse', action='store_true', help='use Magic Set Editor 2 encoding; will output as .mse-set file')
|
||||
parser.add_argument('-mse', '--mse', action='store_true',
|
||||
help='use Magic Set Editor 2 encoding; will output as .mse-set file')
|
||||
parser.add_argument('-html', '--html', action='store_true', help='create a .html file with pretty forum formatting')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
main(args.infile, args.outfile, verbose = args.verbose, encoding = args.encoding,
|
||||
gatherer = args.gatherer, for_forum = args.forum, for_mse = args.mse,
|
||||
creativity = args.creativity, vdump = args.dump)
|
||||
creativity = args.creativity, vdump = args.dump, for_html = args.html)
|
||||
|
||||
exit(0)
|
||||
|
|
|
@ -392,6 +392,7 @@ class Card:
|
|||
def __init__(self, src, fmt_ordered = fmt_ordered_default,
|
||||
fmt_labeled = fmt_labeled_default,
|
||||
fieldsep = utils.fieldsep, linetrans = True):
|
||||
|
||||
# source fields, exactly one will be set
|
||||
self.json = None
|
||||
self.raw = None
|
||||
|
@ -554,10 +555,7 @@ class Card:
|
|||
# the NN representation, use str() or format() for output intended for human
|
||||
# readers.
|
||||
|
||||
def encode(self, fmt_ordered = fmt_ordered_default,
|
||||
fmt_labeled = None, fieldsep = utils.fieldsep,
|
||||
randomize_fields = False, randomize_mana = False,
|
||||
initial_sep = True, final_sep = True):
|
||||
def encode(self, fmt_ordered = fmt_ordered_default, fmt_labeled = None, fieldsep = utils.fieldsep, randomize_fields = False, randomize_mana = False, initial_sep = True, final_sep = True):
|
||||
outfields = []
|
||||
|
||||
for field in fmt_ordered:
|
||||
|
@ -604,7 +602,7 @@ class Card:
|
|||
|
||||
return outstr
|
||||
|
||||
def format(self, gatherer = False, for_forum = False, for_mse = False, vdump = False):
|
||||
def format(self, gatherer = False, for_forum = False, for_mse = False, vdump = False, for_html = False):
|
||||
outstr = ''
|
||||
if gatherer:
|
||||
cardname = titlecase(transforms.name_unpass_1_dashes(self.__dict__[field_name]))
|
||||
|
@ -659,7 +657,7 @@ class Card:
|
|||
mtext = transforms.text_unpass_2_counters(mtext)
|
||||
#mtext = transforms.text_unpass_3_uncast(mtext)
|
||||
mtext = transforms.text_unpass_4_unary(mtext)
|
||||
mtext = transforms.text_unpass_5_symbols(mtext, for_forum)
|
||||
mtext = transforms.text_unpass_5_symbols(mtext, for_forum, for_html)
|
||||
mtext = sentencecase(mtext)
|
||||
mtext = transforms.text_unpass_6_cardname(mtext, cardname)
|
||||
mtext = transforms.text_unpass_7_newlines(mtext)
|
||||
|
@ -685,6 +683,61 @@ class Card:
|
|||
outstr += '[/i]'
|
||||
outstr += '\n'
|
||||
|
||||
elif for_html:
|
||||
outstr += '<div class="card-text">'
|
||||
cardname = self.__dict__[field_name]
|
||||
#cardname = transforms.name_unpass_1_dashes(self.__dict__[field_name])
|
||||
if vdump and not cardname:
|
||||
cardname = '_NONAME_'
|
||||
outstr += cardname + ' '
|
||||
|
||||
coststr = self.__dict__[field_cost].format(for_html = for_html)
|
||||
if vdump or not coststr == '_NOCOST_':
|
||||
outstr += coststr
|
||||
outstr += '<br>'
|
||||
|
||||
if self.__dict__[field_rarity]:
|
||||
if self.__dict__[field_rarity] in utils.json_rarity_unmap:
|
||||
rarity = utils.json_rarity_unmap[self.__dict__[field_rarity]]
|
||||
else:
|
||||
rarity = self.__dict__[field_rarity]
|
||||
outstr += ' (' + rarity.lower() + ') '
|
||||
outstr += '\n<hr><b>'
|
||||
|
||||
outstr += ' '.join(self.__dict__[field_supertypes] + self.__dict__[field_types])
|
||||
if self.__dict__[field_subtypes]:
|
||||
outstr += ' ' + utils.dash_marker + ' ' + ' '.join(self.__dict__[field_subtypes])
|
||||
outstr += '</b><hr>\n'
|
||||
|
||||
if self.__dict__[field_text].text:
|
||||
mtext = self.__dict__[field_text].text
|
||||
mtext = transforms.text_unpass_1_choice(mtext, delimit = True)
|
||||
#mtext = transforms.text_unpass_2_counters(mtext)
|
||||
#mtext = transforms.text_unpass_3_uncast(mtext)
|
||||
mtext = transforms.text_unpass_4_unary(mtext)
|
||||
mtext = transforms.text_unpass_5_symbols(mtext,for_forum, for_html)
|
||||
#mtext = transforms.text_unpass_6_cardname(mtext, cardname)
|
||||
mtext = transforms.text_unpass_7_newlines(mtext).replace("\n", "<br>")
|
||||
#mtext = transforms.text_unpass_8_unicode(mtext)
|
||||
newtext = Manatext('')
|
||||
newtext.text = mtext
|
||||
newtext.costs = self.__dict__[field_text].costs
|
||||
outstr += newtext.format(for_html = for_html) + '\n'
|
||||
|
||||
if self.__dict__[field_pt]:
|
||||
outstr += '<br>(' + utils.from_unary(self.__dict__[field_pt]) + ')<br>'
|
||||
outstr += '\n'
|
||||
|
||||
if self.__dict__[field_loyalty]:
|
||||
outstr += '((' + utils.from_unary(self.__dict__[field_loyalty]) + '))'
|
||||
outstr += '\n'
|
||||
|
||||
if vdump and self.__dict__[field_other]:
|
||||
outstr += utils.dash_marker * 2
|
||||
outstr += '\n'
|
||||
for idx, value in self.__dict__[field_other]:
|
||||
outstr += '<' + str(idx) + '> ' + str(value)
|
||||
outstr += '\n'
|
||||
else:
|
||||
cardname = self.__dict__[field_name]
|
||||
#cardname = transforms.name_unpass_1_dashes(self.__dict__[field_name])
|
||||
|
@ -720,7 +773,7 @@ class Card:
|
|||
#mtext = transforms.text_unpass_2_counters(mtext)
|
||||
#mtext = transforms.text_unpass_3_uncast(mtext)
|
||||
mtext = transforms.text_unpass_4_unary(mtext)
|
||||
mtext = transforms.text_unpass_5_symbols(mtext, for_forum)
|
||||
mtext = transforms.text_unpass_5_symbols(mtext, for_forum, for_html)
|
||||
#mtext = transforms.text_unpass_6_cardname(mtext, cardname)
|
||||
mtext = transforms.text_unpass_7_newlines(mtext)
|
||||
#mtext = transforms.text_unpass_8_unicode(mtext)
|
||||
|
@ -745,9 +798,13 @@ class Card:
|
|||
outstr += '\n'
|
||||
|
||||
if self.bside:
|
||||
if for_html:
|
||||
outstr += "<hr><hr>\n"
|
||||
else:
|
||||
outstr += utils.dash_marker * 8 + '\n'
|
||||
outstr += self.bside.format(gatherer = gatherer, for_forum = for_forum)
|
||||
|
||||
outstr += self.bside.format(gatherer = gatherer, for_forum = for_forum, for_html = for_html)
|
||||
if for_html:
|
||||
outstr += "</div>"
|
||||
return outstr
|
||||
|
||||
def to_mse(self, print_raw = False, vdump = False):
|
||||
|
@ -788,7 +845,7 @@ class Card:
|
|||
mtext = transforms.text_unpass_2_counters(mtext)
|
||||
mtext = transforms.text_unpass_3_uncast(mtext)
|
||||
mtext = transforms.text_unpass_4_unary(mtext)
|
||||
mtext = transforms.text_unpass_5_symbols(mtext, False)
|
||||
mtext = transforms.text_unpass_5_symbols(mtext, False, False)
|
||||
mtext = sentencecase(mtext)
|
||||
# I don't really want these MSE specific passes in transforms,
|
||||
# but they could be pulled out separately somewhere else in here.
|
||||
|
@ -855,7 +912,7 @@ class Card:
|
|||
mtext2 = transforms.text_unpass_2_counters(mtext2)
|
||||
mtext2 = transforms.text_unpass_3_uncast(mtext2)
|
||||
mtext2 = transforms.text_unpass_4_unary(mtext2)
|
||||
mtext2 = transforms.text_unpass_5_symbols(mtext2, False)
|
||||
mtext2 = transforms.text_unpass_5_symbols(mtext2, False, False)
|
||||
mtext2 = sentencecase(mtext2)
|
||||
mtext2 = mtext2.replace(utils.this_marker, '<atom-cardname><nospellcheck>'
|
||||
+ utils.this_marker + '</nospellcheck></atom-cardname>')
|
||||
|
|
1
lib/html_extra_data.py
Normal file
1
lib/html_extra_data.py
Normal file
File diff suppressed because one or more lines are too long
|
@ -108,12 +108,13 @@ class Manacost:
|
|||
return utils.mana_untranslate(utils.mana_open_delimiter + ''.join(self.sequence)
|
||||
+ utils.mana_close_delimiter)
|
||||
|
||||
def format(self, for_forum = False):
|
||||
def format(self, for_forum = False, for_html = False):
|
||||
if self.none:
|
||||
return '_NOCOST_'
|
||||
|
||||
else:
|
||||
return utils.mana_untranslate(utils.mana_open_delimiter + ''.join(self.sequence)
|
||||
+ utils.mana_close_delimiter, for_forum)
|
||||
+ utils.mana_close_delimiter, for_forum, for_html)
|
||||
|
||||
def encode(self, randomize = False):
|
||||
if self.none:
|
||||
|
@ -177,10 +178,10 @@ class Manatext:
|
|||
text = text.replace(utils.reserved_mana_marker, str(cost), 1)
|
||||
return text
|
||||
|
||||
def format(self, for_forum = False):
|
||||
def format(self, for_forum = False, for_html = False):
|
||||
text = self.text
|
||||
for cost in self.costs:
|
||||
text = text.replace(utils.reserved_mana_marker, cost.format(for_forum = for_forum), 1)
|
||||
text = text.replace(utils.reserved_mana_marker, cost.format(for_forum = for_forum, for_html = for_html), 1)
|
||||
return text
|
||||
|
||||
def encode(self, randomize = False):
|
||||
|
|
|
@ -515,8 +515,8 @@ def text_unpass_4_unary(s):
|
|||
return utils.from_unary(s)
|
||||
|
||||
|
||||
def text_unpass_5_symbols(s, for_forum):
|
||||
return utils.from_symbols(s, for_forum = for_forum)
|
||||
def text_unpass_5_symbols(s, for_forum, for_html):
|
||||
return utils.from_symbols(s, for_forum = for_forum, for_html = for_html)
|
||||
|
||||
|
||||
def text_unpass_6_cardname(s, name):
|
||||
|
|
33
lib/utils.py
33
lib/utils.py
|
@ -9,6 +9,12 @@ import config
|
|||
# special chunk of text that Magic Set Editor 2 requires at the start of all set files.
|
||||
mse_prepend = 'mse version: 0.3.8\ngame: magic\nstylesheet: m15\nset info:\n\tsymbol:\nstyling:\n\tmagic-m15:\n\t\ttext box mana symbols: magic-mana-small.mse-symbol-font\n\t\toverlay:\n\tmagic-m15-clear:\n\t\ttext box mana symbols: magic-mana-small.mse-symbol-font\n\t\toverlay: \n\tmagic-m15-extra-improved:\n\t\ttext box mana symbols: magic-mana-small.mse-symbol-font\n\t\tpt box symbols: magic-pt-symbols-extra.mse-symbol-font\n\t\toverlay: \n\tmagic-m15-planeswalker:\n\t\ttext box mana symbols: magic-mana-small.mse-symbol-font\n\t\toverlay: \n\tmagic-m15-planeswalker-promo-black:\n\t\ttext box mana symbols: magic-mana-small.mse-symbol-font\n\t\toverlay: \n\tmagic-m15-promo-dka:\n\t\ttext box mana symbols: magic-mana-small.mse-symbol-font\n\t\toverlay: \n\tmagic-m15-token-clear:\n\t\ttext box mana symbols: magic-mana-small.mse-symbol-font\n\t\toverlay: \n\tmagic-new-planeswalker:\n\t\ttext box mana symbols: magic-mana-small.mse-symbol-font\n\t\toverlay: \n\tmagic-new-planeswalker-4abil:\n\t\ttext box mana symbols: magic-mana-small.mse-symbol-font\n\t\toverlay: \n\tmagic-new-planeswalker-clear:\n\t\ttext box mana symbols: magic-mana-small.mse-symbol-font\n\t\toverlay: \n\tmagic-new-planeswalker-promo-black:\n\t\ttext box mana symbols: magic-mana-small.mse-symbol-font\n\t\toverlay: \n'
|
||||
|
||||
# special chunk of text to start an HTML document.
|
||||
box_height = 350
|
||||
import html_extra_data
|
||||
html_prepend = html_extra_data.html_prepend
|
||||
html_append = "\n/body>\n</html>"
|
||||
|
||||
# encoding formats we know about
|
||||
formats = [
|
||||
'std',
|
||||
|
@ -136,6 +142,9 @@ mana_json_close_delimiter = mana_close_delimiter
|
|||
mana_json_hybrid_delimiter = '/'
|
||||
mana_forum_open_delimiter = '[mana]'
|
||||
mana_forum_close_delimiter = '[/mana]'
|
||||
mana_html_open_delimiter = "<img class='mana-"
|
||||
mana_html_close_delimiter = "'>"
|
||||
mana_html_hybrid_delimiter = '-'
|
||||
mana_unary_marker = '' # if the same as unary_marker, from_unary WILL replace numbers in mana costs
|
||||
mana_unary_counter = unary_counter
|
||||
|
||||
|
@ -386,7 +395,7 @@ def mana_translate(jmanastr):
|
|||
# convert an encoded mana string back to json
|
||||
mana_symlen_min = min([len(sym) for sym in mana_symall_decode])
|
||||
mana_symlen_max = max([len(sym) for sym in mana_symall_decode])
|
||||
def mana_untranslate(manastr, for_forum = False):
|
||||
def mana_untranslate(manastr, for_forum = False, for_html = False):
|
||||
inner = manastr[1:-1]
|
||||
jmanastr = ''
|
||||
colorless_total = 0
|
||||
|
@ -406,6 +415,12 @@ def mana_untranslate(manastr, for_forum = False):
|
|||
idx += symlen
|
||||
if for_forum:
|
||||
jmanastr = jmanastr + mana_decode_direct_forum(sym)
|
||||
if for_html:
|
||||
jmanastr = jmanastr + mana_decode_direct(sym)
|
||||
jmanastr = jmanastr.replace(mana_open_delimiter, mana_html_open_delimiter)
|
||||
jmanastr = jmanastr.replace(mana_close_delimiter, mana_html_close_delimiter)
|
||||
jmanastr = jmanastr.replace(mana_open_delimiter, mana_html_open_delimiter)
|
||||
jmanastr = jmanastr.replace(mana_json_hybrid_delimiter, mana_html_hybrid_delimiter)
|
||||
else:
|
||||
jmanastr = jmanastr + mana_decode_direct(sym)
|
||||
break
|
||||
|
@ -419,6 +434,13 @@ def mana_untranslate(manastr, for_forum = False):
|
|||
return (mana_forum_open_delimiter + ('' if colorless_total == 0
|
||||
else str(colorless_total))
|
||||
+ jmanastr + mana_forum_close_delimiter)
|
||||
if for_html:
|
||||
if jmanastr == '':
|
||||
return mana_html_open_delimiter + str(colorless_total) + mana_html_close_delimiter
|
||||
else:
|
||||
return (mana_html_open_delimiter + ('' if colorless_total == 0
|
||||
else str(colorless_total))
|
||||
+ mana_html_close_delimiter + jmanastr)
|
||||
else:
|
||||
if jmanastr == '':
|
||||
return mana_json_open_delimiter + str(colorless_total) + mana_json_close_delimiter
|
||||
|
@ -464,6 +486,11 @@ symbol_forum_trans = {
|
|||
tap_marker : mana_forum_open_delimiter + json_symbol_tap + mana_forum_close_delimiter,
|
||||
untap_marker : mana_forum_open_delimiter + json_symbol_untap + mana_forum_close_delimiter,
|
||||
}
|
||||
symbol_html_trans = {
|
||||
tap_marker : mana_html_open_delimiter + json_symbol_tap + mana_html_close_delimiter,
|
||||
untap_marker : mana_html_open_delimiter + json_symbol_untap + mana_html_close_delimiter,
|
||||
}
|
||||
|
||||
json_symbol_regex = (re.escape(mana_json_open_delimiter) + '['
|
||||
+ json_symbol_tap + json_symbol_tap.lower()
|
||||
+ json_symbol_untap + json_symbol_untap.lower()
|
||||
|
@ -476,7 +503,7 @@ def to_symbols(s):
|
|||
s = s.replace(jsymstr, json_symbol_trans[jsymstr])
|
||||
return s
|
||||
|
||||
def from_symbols(s, for_forum = False):
|
||||
def from_symbols(s, for_forum = False, for_html = False):
|
||||
symstrs = re.findall(symbol_regex, s)
|
||||
#for symstr in sorted(symstrs, lambda x,y: cmp(len(x), len(y)), reverse = True):
|
||||
# We have to do the right thing here, because the thing we replace exists in the thing
|
||||
|
@ -484,6 +511,8 @@ def from_symbols(s, for_forum = False):
|
|||
for symstr in set(symstrs):
|
||||
if for_forum:
|
||||
s = s.replace(symstr, symbol_forum_trans[symstr])
|
||||
elif for_html:
|
||||
s = s.replace(symstr, symbol_html_trans[symstr])
|
||||
else:
|
||||
s = s.replace(symstr, symbol_trans[symstr])
|
||||
return s
|
||||
|
|
|
@ -91,10 +91,10 @@ def sortcards(cards):
|
|||
|
||||
# color classes need to find the mana cost
|
||||
fields = card.split('|')
|
||||
if len(fields) != 10:
|
||||
if len(fields) != 11:
|
||||
classes['unknown color'] += [card]
|
||||
else:
|
||||
cost = fields[7]
|
||||
cost = fields[8]
|
||||
color_count = 0
|
||||
if 'W' in cost or 'U' in cost or 'B' in cost or 'R' in cost or 'G' in cost:
|
||||
if 'W' in cost:
|
||||
|
|
Loading…
Reference in a new issue