You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
5.9 KiB
192 lines
5.9 KiB
#!/usr/bin/env python
|
|
|
|
import sys
|
|
import json
|
|
import os.path
|
|
import types
|
|
import codecs
|
|
|
|
from mako.lookup import TemplateLookup
|
|
from mako.runtime import Context
|
|
|
|
import _pathfix
|
|
|
|
from mhapi.db import MHDB
|
|
from mhapi.util import get_utf8_writer
|
|
|
|
tlookup = TemplateLookup(directories=["templates/translate"],
|
|
output_encoding="utf-8",
|
|
input_encoding="utf-8")
|
|
#default_filters=["decode.utf8"])
|
|
list_template = tlookup.get_template("/list.html")
|
|
index_template = tlookup.get_template("/index.html")
|
|
|
|
|
|
def get_auto_divider_fn(field):
|
|
def auto_divider_fn(d, prev_d):
|
|
if prev_d is None:
|
|
prev_first = None
|
|
else:
|
|
prev_first = prev_d[field][:1]
|
|
first = d[field][:1]
|
|
if first != prev_first:
|
|
return first
|
|
return None
|
|
return auto_divider_fn
|
|
|
|
|
|
def mk_html_list(link, title, dict_list, keys, sort_keys, divider_fn="auto"):
|
|
if divider_fn == "auto":
|
|
divider_fn = get_auto_divider_fn(keys[0])
|
|
elif divider_fn is None:
|
|
divider_fn = lambda x, y: None
|
|
|
|
alt_link = alt_title = search_link = None
|
|
if link.endswith("-en.html"):
|
|
alt_link = link.replace("-en", "-jp")
|
|
alt_title = "jp"
|
|
elif link.endswith("-jp.html"):
|
|
alt_link = link.replace("-jp", "-en")
|
|
alt_title = "en"
|
|
else:
|
|
search_link = True
|
|
|
|
if isinstance(sort_keys, types.FunctionType):
|
|
sort_fn = sort_keys
|
|
else:
|
|
def sort_fn(d):
|
|
return tuple(d[k] for k in sort_keys)
|
|
|
|
if sort_keys is not None:
|
|
it = sorted(dict_list, key=sort_fn)
|
|
else:
|
|
it = dict_list
|
|
|
|
template_args = dict(
|
|
title=title,
|
|
alt_link=alt_link,
|
|
alt_title=alt_title,
|
|
keys=keys,
|
|
item_list=it,
|
|
divider_fn=divider_fn,
|
|
search_link=search_link
|
|
)
|
|
|
|
outpath = os.path.join("web/translate", link)
|
|
|
|
with codecs.open(outpath, "w", "utf8") as f:
|
|
ctx = Context(f, **template_args)
|
|
list_template.render_context(ctx)
|
|
|
|
|
|
def _main():
|
|
outpath = "web/translate/index.html"
|
|
|
|
with codecs.open(outpath, "w", "utf8") as f:
|
|
ctx = Context(f)
|
|
index_template.render_context(ctx)
|
|
|
|
db = MHDB()
|
|
#strees = db.get_skill_trees()
|
|
items = db.get_items(item_types=("Tool", "Book", "Consumable", "Ammo"))
|
|
gather_items = db.get_items(item_types=
|
|
("Bone", "Plant", "Ore", "Fish", "Bug", "Sac/Fluid", "Meat"))
|
|
|
|
#carve_items = db.get_items(item_types=("Flesh",))
|
|
|
|
stree_path = os.path.join(_pathfix.project_path, "db",
|
|
"mhx_skill_tree_list.json")
|
|
with open(stree_path) as f:
|
|
stree_list = json.load(f)
|
|
|
|
mk_html_list("skilltrees-en.html", "Skill Trees (en)",
|
|
stree_list, ("name", "name_jp"), ("name",))
|
|
|
|
mk_html_list("skilltrees-jp.html", "Skill Trees (jp)",
|
|
stree_list, ("name_jp", "name"), jplen_sort_fn,
|
|
divider_fn=jplen_divider_fn)
|
|
|
|
def item_divider_fn(d, prev_d):
|
|
prefix = _icon_prefix(d)
|
|
prev_prefix = _icon_prefix(prev_d)
|
|
if prefix != prev_prefix:
|
|
return prefix
|
|
return None
|
|
mk_html_list("items-usable.html", "Items: Usable", items,
|
|
("icon_name", "name", "name_jp"), ("icon_name", "name"),
|
|
divider_fn=item_divider_fn)
|
|
|
|
mk_html_list("items-gather.html", "Items: Gatherable", gather_items,
|
|
("icon_name", "name", "name_jp"), ("icon_name", "name"),
|
|
divider_fn=item_divider_fn)
|
|
|
|
carves_path = os.path.join(_pathfix.project_path, "db", "mhx",
|
|
"monster_carves.json")
|
|
with open(carves_path) as f:
|
|
carves_list = json.load(f)
|
|
mk_html_list("items-carve-en.html", "Items: Carve (en)", carves_list,
|
|
("icon_name", "name", "name_jp"), ("icon_name", "name"),
|
|
divider_fn=item_divider_fn)
|
|
mk_html_list("items-carve-jp.html", "Items: Carve (jp)", carves_list,
|
|
("icon_name", "name_jp", "name"), ("name_jp",),
|
|
divider_fn=None)
|
|
|
|
ha_path = os.path.join(_pathfix.project_path, "db", "hunter_arts.json")
|
|
with open(ha_path) as f:
|
|
ha_list = json.load(f)
|
|
|
|
def ha_divider_fn(d, prev_d):
|
|
if prev_d is None:
|
|
return d["section"]
|
|
elif d["section"] != prev_d["section"]:
|
|
return d["section"]
|
|
return None
|
|
mk_html_list("hunterarts.html", "Hunter Arts", ha_list,
|
|
("name", "name_jp", "description"), None,
|
|
divider_fn=ha_divider_fn)
|
|
|
|
#mk_html_list("hunterarts-jp.html", "Hunter Arts (jp)",
|
|
# ha_list, ("name_jp", "name", "section", "description"),
|
|
# jplen_sort_fn, divider_fn=jplen_divider_fn)
|
|
|
|
monster_path = os.path.join(_pathfix.project_path, "db",
|
|
"mhx_monster_list.json")
|
|
with open(monster_path) as f:
|
|
monster_list = json.load(f)
|
|
|
|
mk_html_list("monsters-en.html", "Monsters (en)", monster_list,
|
|
("name", "name_jp", "title_jp"), ("name",))
|
|
|
|
mk_html_list("monsters-jp.html", "Monsters (jp)", monster_list,
|
|
("name_jp", "name", "title_jp"), ("name_jp",))
|
|
|
|
titled_monster_list = [m for m in monster_list if m["title_jp"]]
|
|
mk_html_list("monster-titles.html", "Monster Titles", titled_monster_list,
|
|
("title_jp", "name"), ("title_jp",), divider_fn=None)
|
|
|
|
|
|
def _icon_prefix(d):
|
|
if d is None:
|
|
return ""
|
|
parts = d["icon_name"].split("-", 1)
|
|
return parts[0].replace(".png", "")
|
|
|
|
|
|
def jplen_divider_fn(d, prev_d):
|
|
jplen = len(d["name_jp"].strip(" I"))
|
|
if prev_d is None:
|
|
return jplen
|
|
prev_jplen = len(prev_d["name_jp"].strip(" I"))
|
|
if jplen != prev_jplen:
|
|
return jplen
|
|
return None
|
|
|
|
|
|
def jplen_sort_fn(d):
|
|
return (len(d["name_jp"].strip(" I")), d["name_jp"])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.stdout = get_utf8_writer(sys.stdout)
|
|
_main()
|