diff --git a/epilogue/archive_generator.py b/epilogue/archive_generator.py index aae45ad..856b556 100644 --- a/epilogue/archive_generator.py +++ b/epilogue/archive_generator.py @@ -22,6 +22,21 @@ DEX_TYPES = [ ] DEXES = list(chain.from_iterable([[f"{dex_type}{language}" for dex_type in DEX_TYPES] for language in DEX_LANGUAGES])) +class ArchiveLinker(Linker): + def __init__ (self, directory_names=[]): + super().__init__() + self.directory_names = directory_names + + def translate_page_title (self, page_title): + page_title = super().translate_page_title(page_title) + + for name in self.directory_names: + if page_title.startswith(f"{name}%2F"): + page_title = f"{name}/{page_title[len(name) + 3:]}" + break + + return page_title + def prepare_thread (thread): thread.subject = html.unescape(thread.subject) return thread @@ -61,7 +76,7 @@ class ArchiveGenerator(): categories = {} templates = dict([(page.title.split(":")[1], Template(page.get_latest().text)) for page in wiki.get_pages() if page.namespace == WIKI_NAMESPACES['TEMPLATE']]) - linker = Linker(directory_names=DEXES) + linker = ArchiveLinker(directory_names=DEXES) wikitext_renderer = Renderer(templates, linker) for page in wiki.get_pages(): try: diff --git a/epilogue/redirector.py b/epilogue/redirector.py index cb18ee4..2032b10 100644 --- a/epilogue/redirector.py +++ b/epilogue/redirector.py @@ -1,8 +1,13 @@ import argparse -from flask import Flask, redirect +from flask import Flask, redirect, request app = Flask(__name__) +## Wiki redirector +@app.route("/wiki/") +def redirect_wiki (path): + return redirect(make_wiki_url(path)) + def is_wiki_directory_name (name): return "Dex" in name @@ -27,13 +32,13 @@ def make_wiki_url (path): return url + escape_wiki_page_name(path) + ".html" +## Forum redirector @app.route('/forums/') def redirect_forums (path): - pass + return redirect(make_forum_url(path)) -@app.route("/wiki/") -def redirect_wiki (path): - return redirect(make_wiki_url(path)) +def make_forum_url (request): + return str(request) def main (): parser = argparse.ArgumentParser() diff --git a/epilogue/wiki.py b/epilogue/wiki.py index 687f9b6..711aeed 100644 --- a/epilogue/wiki.py +++ b/epilogue/wiki.py @@ -181,10 +181,9 @@ def render (wikitext, base="", linker=None): return "".join(rendered).strip().replace("\n\n", "

") class Linker(): - def __init__ (self, file_namespaces=FILE_NAMESPACES, interwiki_namespaces=INTERWIKI_NAMESPACES, directory_names=[]): + def __init__ (self, file_namespaces=FILE_NAMESPACES, interwiki_namespaces=INTERWIKI_NAMESPACES): self.file_namespaces = file_namespaces self.interwiki_namespaces = interwiki_namespaces - self.directory_names = directory_names def translate_interwiki_title (self, page_title): for namespace, url in self.interwiki_namespaces.items(): @@ -194,15 +193,8 @@ class Linker(): def translate_page_title (self, page_title): if page_title.startswith(CATEGORY_LINK_NAMESPACE): page_title = page_title[1:] - - directory_name = "" - for name in self.directory_names: - if page_title.startswith(f"{name}/"): - directory_name = name - page_title = page_title[len(directory_name) + 1:] - break - return f"{reformat_page_title(directory_name)}{'/' if directory_name else ''}{reformat_page_title(page_title)}.html" + return f"{reformat_page_title(page_title)}.html" def translate_image_title (self, page_title): for namespace in self.file_namespaces: