#!/usr/bin/python # """2ch dat - HTML converter. """ # # Copyright (c) 2005 Satoshi Fukutomi . # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # import re import sys import fileinput def res_anchor(id): return ('') % (id, id) def escape(msg): msg = msg.replace("
", "\n") msg = msg.replace("&", "&") msg = re.sub(r"&(#\d+|#[Xx][0-9A-Fa-f]+|[A-Za-z0-9]+);", r"&\1;", msg) msg = msg.replace("<", "<") msg = msg.replace(">", ">") msg = msg.replace("\r", "") return msg def format(s): s = s.replace("\n", "
\n") s = re.sub(r"|<\/a>", "", s) s = re.sub(r"(>>|>>|\201\204|\201\164|\201\342|>)(\d+)", "%s%s
" % (res_anchor(r"\2"), r"\g<0>"), s) s = re.sub(r"https?://[\041-\073\075-\177]{2,}", r'\g<0>', s) s = re.sub(r"([^h])(ttps?://[\041-\073\075-\177]{2,})", r'\1\2', s) return s isdt = re.compile(r"^(\d+)").search i = 0 buf = "" sys.stdout.write('
\n') for line in fileinput.input(): tmp = line.strip().split("<>") if len(tmp) >= 4: i += 1 name, mail, date, message = tmp[:4] name = escape(name) mail = escape(mail) message = format(escape(message.strip())) print '
%d :%s [%s] %s
' % (i, i, name, mail, date) print '
%s
' % (i, message) sys.stdout.write('
\n')