#!/usr/bin/env python # -*- encoding: utf-8 -*- ## news.py - Generates news. ## ## Copyright © 2012 Ben Longbons ## ## This file is part of The Mana World ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program. If not, see . from __future__ import print_function import sys import os from abc import ABCMeta, abstractmethod import _news_colors as colors class BasicWriter(object): __slots__ = ('stream') __metaclass__ = ABCMeta def __init__(self, outfile): self.stream = open(outfile, 'w') @abstractmethod def start(self): pass @abstractmethod def put(self, entry): pass @abstractmethod def finish(self): pass class HtmlWriter(BasicWriter): __slots__ = () def start(self): self.stream.write('\n') #self.stream.write('
\n')
        pass

    def put(self, entry):
        self.stream.write('
\n

\n') entry = entry.replace('\n\n', '\n

\n') entry = entry.format(**colors.make_html_colors_dict()) self.stream.write(entry) self.stream.write('

\n') def finish(self): #self.stream.write('
\n') pass class TxtWriter(BasicWriter): __slots__ = () def start(self): pass def put(self, entry): entry = entry.replace('\n\n', '\n \n') entry = entry.format(**colors.make_txt_colors_dict()) self.stream.write(entry) self.stream.write(' \n \n') def finish(self): # DO NOT REMOVE #self.stream.write('Did you really read down this far?\n') pass class ForumWriter(BasicWriter): # unlike the other writers, the forum writer only generates the latest __slots__ = ('done') def start(self): self.done = False def put(self, entry): if self.done: return entry = entry.format(**colors.make_forum_colors_dict()) self.stream.write(entry) self.done = True def finish(self): pass def create_writers(outdir): yield TxtWriter(os.path.join(outdir, 'news.txt')) yield HtmlWriter(os.path.join(outdir, 'news.html')) yield ForumWriter(os.path.join(outdir, 'news.phpbb.txt')) def main(outdir, indir=None): if indir is None: indir = os.path.join(outdir, 'news.d') out = list(create_writers(outdir)) for s in out: s.start() for entry in sorted(os.listdir(indir), reverse=True): if not entry.endswith('.txt'): continue e = open(os.path.join(indir, entry)).read() for s in out: s.put(e) for s in out: s.finish() if __name__ == '__main__': main(*sys.argv[1:])