aboutsummaryrefslogtreecommitdiffstats
path: root/blogthon.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'blogthon.cgi')
-rwxr-xr-xblogthon.cgi619
1 files changed, 310 insertions, 309 deletions
diff --git a/blogthon.cgi b/blogthon.cgi
index 676e9a6..eef2d92 100755
--- a/blogthon.cgi
+++ b/blogthon.cgi
@@ -10,12 +10,9 @@
# Authors: Stefan Ritter <xeno@thehappy.de>
# Adrian Vondendriesch <disco-stu@disco-stu.de>
# Pascal Turbing <pascal@turbing.de>
+#
# Description: A simple blogging software
-# TODO:
-# * Complete Atom Feed (like RSS)
-# * Fix broken charset in outgoing mails (needs some testing)
-
import os
import sys
import time
@@ -29,94 +26,96 @@ from glob import glob
from random import randint
# A wonderful place for doing some regexp ;)
-no_break = re.compile('^\s*(<ul|</ul>|<li|</li>|<ol|</ol>|<table|</table>|<tr|</tr>|<td|</td>|<th|</th>|<p|</p>).*$')
-line_start_hyphen = re.compile('^-.*$')
-line_start_plus = re.compile('^\+.*$')
+no_break = re.compile("^\s*(<ul|</ul>|<li|</li>|<ol|</ol>|<table|</table>|<tr|</tr>|<td|</td>|<th|</th>|<p|</p>).*$")
+line_start_hyphen = re.compile("^-.*$")
+line_start_plus = re.compile("^\+.*$")
tab = "\t"
def generate_uuid(string):
string_md5sum = newmd5(string).hexdigest()
- string = str.join('-', (string_md5sum[0:8], string_md5sum[8:12], string_md5sum[12:16], string_md5sum[16:20], string_md5sum[20:32]))
+ string = str.join("-", (string_md5sum[0:8], string_md5sum[8:12], string_md5sum[12:16], string_md5sum[16:20], string_md5sum[20:32]))
return string
def errorpage(string):
- document_header('xhtml-strict')
- print '<head><title>Error!</title></head>'
- print '<body>'
+ document_header("xhtml-strict")
+ print "<head><title>Error!</title></head>"
+ print "<body>"
print tab + string
- print '</body>'
- print '</html>'
+ print "</body>"
+ print "</html>"
sys.exit()
def document_header(string):
if string == "xhtml-transitional":
- print 'Content-type: text/html\n'
- print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'
- print ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
- print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">'
+ print "Content-type: text/html\n"
+ print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\""
+ print " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"
+ print "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">"
if string == "xhtml-strict":
- print 'Content-type: text/html\n'
- print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
- print ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
- print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">'
+ print "Content-type: text/html\n"
+ print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\""
+ print " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
+ print "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">"
if string == "atom":
- print 'Content-type: application/atom+xml\n'
- print '<?xml version="1.0" encoding="utf-8"?>'
- print '<feed xmlns="http://www.w3.org/2005/Atom">'
+ print "Content-type: application/atom+xml\n"
+ print "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ print "<feed xmlns=\"http://www.w3.org/2005/Atom\">"
if string == "rss":
- print 'Content-type: application/rss+xml\n'
- print '<?xml version="1.0" encoding="utf-8"?>'
- print '<rss version="2.0">'
+ print "Content-type: application/rss+xml\n"
+ print "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ print "<rss version=\"2.0\">"
+
+# Parse configuration
configuration = ConfigParser()
-# Look for a configuration:
-if os.path.exists('../blogthonrc'):
- configuration.read('../blogthonrc')
-elif os.path.exists('../.blogthonrc'):
- configuration.read('../.blogthonrc')
-elif os.path.exists('configuration'):
- configuration.read('configuration')
-else:
- errorpage('No suitable configuration found!')
- sys.exit()
+for config in ["../blogthonrc", "../.blogthonrc", "configuration"]:
+ if os.path.exists(config):
+ configuration.read(config)
+ config = True
+ break
+ else:
+ config = False
+
+if not config:
+ errorpage("No suitable configuration found!")
-try: blog_title = configuration.get('personal', 'blog_title')
-except: errorpage('"blog_title" is missing in configuration!')
+try: blog_title = configuration.get("personal", "blog_title")
+except: errorpage("\"blog_title\" is missing in configuration!")
-try: blog_subtitle = configuration.get('personal', 'blog_subtitle')
-except: errorpage('"blog_subtitle" is missing in configuration!')
+try: blog_subtitle = configuration.get("personal", "blog_subtitle")
+except: errorpage("\"blog_subtitle\" is missing in configuration!")
-try: blog_url = configuration.get('personal', 'blog_url')
-except: errorpage('"blog_url" is missing in configuration!')
+try: blog_url = configuration.get("personal", "blog_url")
+except: errorpage("\"blog_url\" is missing in configuration!")
-try: keywords = configuration.get('personal', 'keywords')
-except: errorpage('"keywords" is missing in configuration!')
+try: keywords = configuration.get("personal", "keywords")
+except: errorpage("\"keywords\" is missing in configuration!")
-try: entries_dir = configuration.get('personal', 'entries_dir')
-except: errorpage('"entries_dir" is missing in configuration!')
+try: entries_dir = configuration.get("personal", "entries_dir")
+except: errorpage("\"entries_dir\" is missing in configuration!")
if not os.path.exists(entries_dir):
- errorpage('"entries_dir" does not exist!')
+ errorpage("\"entries_dir\" does not exist!")
-try: entries_suffix = configuration.get('personal', 'entries_suffix')
-except: errorpage('"entries_suffix" is missing in configuration!')
+try: entries_suffix = configuration.get("personal", "entries_suffix")
+except: errorpage("\"entries_suffix\" is missing in configuration!")
-try: staticpages_dir = configuration.get('personal', 'staticpages_dir')
-except: errorpage('"staticpages_dir" is missing in configuration!')
+try: staticpages_dir = configuration.get("personal", "staticpages_dir")
+except: errorpage("\"staticpages_dir\" is missing in configuration!")
if not os.path.exists(staticpages_dir):
- errorpage('"staticpages_dir" does not exist!')
+ errorpage("\"staticpages_dir\" does not exist!")
-try: plugins_dir = configuration.get('personal', 'plugins_dir')
-except: errorpage('"plugins_dir" is missing in configuration!')
+try: plugins_dir = configuration.get("personal", "plugins_dir")
+except: errorpage("\"plugins_dir\" is missing in configuration!")
if not os.path.exists(plugins_dir):
- errorpage('"plugins_dir" does not exist!')
+ errorpage("\"plugins_dir\" does not exist!")
-try: style = configuration.get('look', 'style')
-except: errorpage('"style" is missing in configuration!')
+try: style = configuration.get("look", "style")
+except: errorpage("\"style\" is missing in configuration!")
-try: language = configuration.get('look', 'language')
-except: errorpage('"language" is missing in configuration!')
+try: language = configuration.get("look", "language")
+except: errorpage("\"language\" is missing in configuration!")
if language == "de":
blog_locale = ("Seiten", "Monate", "Links", "Keine Kommentare", "Kommentare", "Alle Einträge anzeigen...", "Name", "Text", "Absenden")
locales_de = ("de_DE.UTF-8", "de_DE.@euro", "de_DE")
@@ -137,53 +136,53 @@ else:
except: continue
else: locale.setlocale(locale.LC_TIME, None)
-try: entries_per_page = configuration.getint('look', 'entries_per_page')
-except: errorpage('"entries_per_page" is missing in configuration!')
+try: entries_per_page = configuration.getint("look", "entries_per_page")
+except: errorpage("\"entries_per_page\" is missing in configuration!")
-try: monthlist = configuration.get('look', 'monthlist')
-except: errorpage('"monthlist" is missing in configuration!')
+try: monthlist = configuration.get("look", "monthlist")
+except: errorpage("\"monthlist\" is missing in configuration!")
-try: staticpages = configuration.get('look', 'staticpages')
-except: errorpage('"staticpages" is missing in configuration!')
+try: staticpages = configuration.get("look", "staticpages")
+except: errorpage("\"staticpages\" is missing in configuration!")
-try: linklist = configuration.get('look', 'linklist')
-except: errorpage('"linklist" is missing in configuration!')
+try: linklist = configuration.get("look", "linklist")
+except: errorpage("\"linklist\" is missing in configuration!")
if not os.path.exists("linklist"):
- errorpage('"linklist" does not exist!')
+ errorpage("\"linklist\" does not exist!")
-try: permalinks = configuration.get('look', 'permalinks')
-except: errorpage('"permalinks" is missing in configuration!')
+try: permalinks = configuration.get("look", "permalinks")
+except: errorpage("\"permalinks\" is missing in configuration!")
-try: comments = configuration.get('look', 'comments')
-except: errorpage('"comments" is missing in configuration!')
+try: comments = configuration.get("look", "comments")
+except: errorpage("\"comments\" is missing in configuration!")
-try: newest_first = configuration.get('look', 'newest_first')
-except: errorpage('"newest_first" is missing in configuration!')
+try: newest_first = configuration.get("look", "newest_first")
+except: errorpage("\"newest_first\" is missing in configuration!")
-try: new_comment_mail = configuration.get('smtp', 'new_comment_mail')
-except: errorpage('"new_comment_mail" is missing in configuration!')
+try: new_comment_mail = configuration.get("smtp", "new_comment_mail")
+except: errorpage("\"new_comment_mail\" is missing in configuration!")
-try: mail_to = configuration.get('smtp', 'mail_to')
-except: errorpage('"mail_to" is missing in configuration!')
+try: mail_to = configuration.get("smtp", "mail_to")
+except: errorpage("\"mail_to\" is missing in configuration!")
-try: smtp_host = configuration.get('smtp', 'smtp_host')
-except: errorpage('"smtp_host" is missing in configuration!')
+try: smtp_host = configuration.get("smtp", "smtp_host")
+except: errorpage("\"smtp_host\" is missing in configuration!")
-try: feed_preview = configuration.get('feed', 'feed_preview')
-except: errorpage('"feed_preview" is missing or empty in configuration!')
+try: feed_preview = configuration.get("feed", "feed_preview")
+except: errorpage("\"feed_preview\" is missing or empty in configuration!")
# Read POST Variables
action = FieldStorage()
-month_display = action.getvalue('m')
+month_display = action.getvalue("m")
-static_display = action.getvalue('s')
-if static_display: static_display = static_display.replace('/', '')
+static_display = action.getvalue("s")
+if static_display: static_display = static_display.replace("/", "")
-post_display = action.getvalue('p')
-if post_display: post_display = post_display.replace(' ', '-').replace('/', '')
+post_display = action.getvalue("p")
+if post_display: post_display = post_display.replace(" ", "-").replace("/", "")
-allentries_display = action.getvalue('a')
-feed_display = action.getvalue('feed')
+allentries_display = action.getvalue("a")
+feed_display = action.getvalue("feed")
if not month_display: month_display = ""
if not post_display: post_display = ""
if not static_display: static_display = ""
@@ -191,11 +190,11 @@ if not allentries_display: allentries_display = ""
if not feed_display: feed_display = ""
# Commentstuff
-ctitle = action.getvalue('ctitle')
-cname = action.getvalue('cname')
-ctext = action.getvalue('ctext')
-cquiz = action.getvalue('cquiz')
-cquizv = action.getvalue('cquizv')
+ctitle = action.getvalue("ctitle")
+cname = action.getvalue("cname")
+ctext = action.getvalue("ctext")
+cquiz = action.getvalue("cquiz")
+cquizv = action.getvalue("cquizv")
if not ctitle: ctitle = ""
if not cname: cname = ""
if not ctext: ctext = ""
@@ -205,53 +204,55 @@ if not cquizv: cquizv = ""
# Comment to commit?
if cname and ctext and ctitle:
# Prevent XSS hacks
- cname = cname.replace('<', '&lt;').replace('>', '&gt;').replace('\'', '&quot;')
- ctext = ctext.replace('<', '&lt;').replace('>', '&gt;').replace('\'', '&quot;')
+ cname = cname.replace("<", "&lt;").replace(">", "&gt;").replace("\'", "&quot;")
+ ctext = ctext.replace("<", "&lt;").replace(">", "&gt;").replace("\'", "&quot;")
# Add comment
if not cquiz == cquizv:
errorpage("Brainmode")
else:
- comments_file = glob(entries_dir + ctitle + '.comments')
- if not comments_file:
+ comments_file = os.path.join(entries_dir, ctitle + ".comments")
+ if not os.path.exists(comments_file):
try:
- content = open(entries_dir + ctitle + '.comments', "w")
+ content = open(comments_file, "w")
content.close()
except:
- errorpage('"' + entries_dir + '" isn\'t writable!')
+ errorpage("\"" + entries_dir + "\" isn\'t writable!")
+
try:
- content = open(entries_dir + ctitle + '.comments', "a")
+ content = open(comments_file, "a")
content.write("-." + cname + "\n")
content.write("+." + time.strftime("%c", time.localtime()) + "\n")
ctext = ctext.split("\n")
for line in ctext:
content.write("." + line + "\n")
content.close()
+
# Send mail?
- if not new_comment_mail == 'False':
- msg = 'From: Blogthon\nTo: ' + mail_to + '\nSubject: New comment on ' + blog_title + '\n\nSomeone wrote a comment to this entry: ' + blog_url + '?p=' + ctitle.replace(' ', '-')
+ if not new_comment_mail == "False":
+ msg = "From: Blogthon\nTo: " + mail_to + "\nSubject: New comment on " + blog_title + "\n\nSomeone wrote a comment to this entry: " + blog_url + "?p=" + ctitle.replace(" ", "-")
smtp = SMTP(smtp_host)
- smtp.starttls() # TODO: some hosts need TLS, needs testing
+ smtp.starttls()
smtp.sendmail(blog_title, mail_to, msg)
smtp.quit()
except:
- errorpage('Comment cannot be written!')
+ errorpage("Comment cannot be written!")
# Read entries and store their title and timestamp
entries = []
-entries_list = glob(entries_dir + '*.' + entries_suffix)
+entries_list = glob(entries_dir + "*." + entries_suffix)
for entry in entries_list:
- title = entry.replace(entries_dir, '', 1)
- title = title.replace('.' + entries_suffix, '')
+ title = entry.replace(entries_dir, "", 1)
+ title = title.replace("." + entries_suffix, "")
- stampfile = os.path.join(entries_dir, title + '.stamp')
+ stampfile = os.path.join(entries_dir, title + ".stamp")
if os.path.exists(stampfile):
timestamp = os.stat(stampfile)
else:
timestamp = os.stat(entry)
- stampfile = os.path.join(entries_dir, title + '.stamp')
- stamp = open(stampfile, 'w')
+ stampfile = os.path.join(entries_dir, title + ".stamp")
+ stamp = open(stampfile, "w")
stamp.close()
utime = os.utime(stampfile, (os.stat(entry)[8], os.stat(entry)[8]))
@@ -270,207 +271,207 @@ if feed_display == "atom":
blog_title_md5sum = generate_uuid(blog_title)
# Append 0 to the beginning if len of integer is 1 (value<10)
- month = '%(#)02d' % {'#': int(date[1])}
- day = '%(#)02d' % {'#': int(date[2])}
- hour = '%(#)02d' % {'#':int(date[3])}
- min = '%(#)02d' % {'#': int(date[4])}
- sec = '%(#)02d' % {'#': int(date[5])}
+ month = "%(#)02d" % {"#": int(date[1])}
+ day = "%(#)02d" % {"#": int(date[2])}
+ hour = "%(#)02d" % {"#":int(date[3])}
+ min = "%(#)02d" % {"#": int(date[4])}
+ sec = "%(#)02d" % {"#": int(date[5])}
document_header("atom")
- print '<link href="' + blog_url + '/?feed=atom" rel="self" type="application/atom+xml"/>'
- print tab + '<author>'
- print tab*2 + '<name>' + blog_title + '</name>'
- print tab + '</author>'
- print tab + '<title>' + blog_title + '</title>'
- print tab + '<id>urn:uuid:' + blog_title_md5sum + '</id>'
- print tab + '<updated>' + str(date[0]) + '-' + month + '-' + day + 'T' + hour + ':' + min + ':' + sec + 'Z</updated>'
- print ''
+ print "<link href=\"" + blog_url + "/?feed=atom\" rel=\"self\" type=\"application/atom+xml\"/>"
+ print tab + "<author>"
+ print tab*2 + "<name>" + blog_title + "</name>"
+ print tab + "</author>"
+ print tab + "<title>" + blog_title + "</title>"
+ print tab + "<id>urn:uuid:" + blog_title_md5sum + "</id>"
+ print tab + "<updated>" + str(date[0]) + "-" + month + "-" + day + "T" + hour + ":" + min + ":" + sec + "Z</updated>"
+ print ""
j = len(entries)
if j > 10: j = 10
for i in xrange(0, j):
- title = str(entries[i][1]).replace('entries/', '', 1).replace('.' + entries_suffix, '')
+ title = str(entries[i][1]).replace(entries_dir, "", 1).replace("." + entries_suffix, "")
date = entries[i][0]
title_md5sum = generate_uuid(title)
- print tab*2 + '<entry>'
- print tab*3 + '<title>' + title + '</title>'
- print tab*3 + '<link href="' + blog_url + '?p=' + title + '"/>'
- print tab*3 + '<id>urn:uuid:' + title_md5sum + '</id>'
- print tab*3 + '<updated>' + str(date[0]) + '-' + month + '-' + day + 'T' + hour + ':' + min + ':' + sec + 'Z</updated>'
- print tab*3 + '<summary>'
- content = open(str(entries[i][1]), 'r')
+ print tab*2 + "<entry>"
+ print tab*3 + "<title>" + title + "</title>"
+ print tab*3 + "<link href=\"" + blog_url + "?p=" + title + "\"/>"
+ print tab*3 + "<id>urn:uuid:" + title_md5sum + "</id>"
+ print tab*3 + "<updated>" + str(date[0]) + "-" + month + "-" + day + "T" + hour + ":" + min + ":" + sec + "Z</updated>"
+ print tab*3 + "<summary>"
+ content = open(str(entries[i][1]), "r")
for h in xrange(0, int(feed_preview)):
rss_line = content.readline().strip()
- if rss_line != '':
- print ' ' + rss_line
+ if rss_line != "":
+ print tab*4 + rss_line
content.close()
- print tab*3 + '</summary>'
- print tab*2 + '</entry>'
- print '</feed>'
+ print tab*3 + "</summary>"
+ print tab*2 + "</entry>"
+ print "</feed>"
# Generate rss 2.0 feed
elif feed_display == "rss":
document_header("rss")
- print tab + '<channel>'
- print tab*2 + '<title>' + blog_title + '</title>'
- print tab*2 + '<link>' + blog_url + '</link>'
- print tab*2 + '<description>' + blog_subtitle + '</description>'
+ print tab + "<channel>"
+ print tab*2 + "<title>" + blog_title + "</title>"
+ print tab*2 + "<link>" + blog_url + "</link>"
+ print tab*2 + "<description>" + blog_subtitle + "</description>"
date = time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime(time.mktime(entries[0][0])))
- print tab*2 + '<pubDate>' + date + '</pubDate>'
- print ''
+ print tab*2 + "<pubDate>" + date + "</pubDate>"
+ print ""
j = len(entries)
if j > 10: j = 10
for i in xrange(0, j):
- title = str(entries[i][1]).replace('entries/', '', 1).replace('.' + entries_suffix, '')
+ title = str(entries[i][1]).replace(entries_dir, "", 1).replace("." + entries_suffix, "")
date = time.strftime("%a, %d %b %Y %H:%M:%S %z", time.gmtime(time.mktime(entries[i][0])))
- print tab*2 + '<item>'
- print tab*3 + '<title>' + title + '</title>'
- print tab*3 + '<link>' + blog_url + '?p=' + title + '</link>'
- print tab*3 + '<guid>' + blog_url + '?p=' + title + '</guid>'
- print tab*3 + '<pubDate>' + date + '</pubDate>'
- content = open(str(entries[i][1]), 'r')
- rss_description= ''
+ print tab*2 + "<item>"
+ print tab*3 + "<title>" + title + "</title>"
+ print tab*3 + "<link>" + blog_url + "?p=" + title + "</link>"
+ print tab*3 + "<guid>" + blog_url + "?p=" + title + "</guid>"
+ print tab*3 + "<pubDate>" + date + "</pubDate>"
+ content = open(str(entries[i][1]), "r")
+ rss_description= ""
for h in xrange(0, int(feed_preview)):
line = content.readline().strip()
if line:
- rss_description = rss_description + line + '<br />'
+ rss_description = rss_description + line + "<br />"
content.close()
- print tab*3 + '<description><![CDATA[' + rss_description + ']]></description>'
- print tab*2 + '</item>'
- print tab + '</channel>'
- print '</rss>'
+ print tab*3 + "<description><![CDATA[" + rss_description + "]]></description>"
+ print tab*2 + "</item>"
+ print tab + "</channel>"
+ print "</rss>"
# Generate regular page
else:
document_header("xhtml-strict")
- print tab + '<head>'
- print tab*2 + '<title>' + blog_title + '</title>'
- print tab*2 + '<meta http-equiv="content-type" content="text/html; charset=utf-8" />'
- print tab*2 + '<meta name="keywords" content="' + keywords + '" />'
- print tab*2 + '<meta name="description" content="' + blog_title + '" />'
- print tab*2 + '<link rel="stylesheet" type="text/css" href="styles/' + style + '/' + style + '.css" />'
- print tab + '</head>'
- print tab + '<body>'
- print ''
+ print tab + "<head>"
+ print tab*2 + "<title>" + blog_title + "</title>"
+ print tab*2 + "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />"
+ print tab*2 + "<meta name=\"keywords\" content=\"" + keywords + "\" />"
+ print tab*2 + "<meta name=\"description\" content=\"" + blog_title + "\" />"
+ print tab*2 + "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles/" + style + "/" + style + ".css\" />"
+ print tab + "</head>"
+ print tab + "<body>"
+ print ""
# Plugins
sys.path.append(plugins_dir)
- for plugin in glob(plugins_dir + '*.py'):
- __import__ (plugin.split('/')[1].replace('.py', ''))
+ for plugin in glob(plugins_dir + "*.py"):
+ __import__ (plugin.split("/")[1].replace(".py", ""))
# Site header
- print tab*2 + '<div class="header">'
- print tab*3 + '<div class="header_title">'
- print tab*4 + '<a href="?" class="header_link">' + blog_title + '</a>'
- print tab*3 + '</div>'
- print tab*3 + '<div class="header_subtitle">'
- print tab*4 + '<span class="header_subtitle">' + blog_subtitle + '</span>'
- print tab*3 + '</div>'
- print tab*2 + '</div>'
- print ''
+ print tab*2 + "<div class=\"header\">"
+ print tab*3 + "<div class=\"header_title\">"
+ print tab*4 + "<a href=\"?\" class=\"header_link\">" + blog_title + "</a>"
+ print tab*3 + "</div>"
+ print tab*3 + "<div class=\"header_subtitle\">"
+ print tab*4 + "<span class=\"header_subtitle\">" + blog_subtitle + "</span>"
+ print tab*3 + "</div>"
+ print tab*2 + "</div>"
+ print ""
# RSS feed
- print tab*2 + '<div class="rss">'
- print tab*3 + '<a href="?feed=rss" class="rss_link">rss</a>'
- print tab*2 + '</div>'
- print ''
+ print tab*2 + "<div class=\"rss\">"
+ print tab*3 + "<a href=\"?feed=rss\" class=\"rss_link\">rss</a>"
+ print tab*2 + "</div>"
+ print ""
# Atom feed
- print tab*2 + '<div class="atom">'
- print tab*3 + '<a href="?feed=atom" class="atom_link">atom</a>'
- print tab*2 + '</div>'
- print ''
+ print tab*2 + "<div class=\"atom\">"
+ print tab*3 + "<a href=\"?feed=atom\" class=\"atom_link\">atom</a>"
+ print tab*2 + "</div>"
+ print ""
# Staticpages
if staticpages == "True":
staticpages = []
- staticpages_list = glob(staticpages_dir + '*')
+ staticpages_list = glob(staticpages_dir + "*")
staticpages_list.sort()
- print tab*2 + '<div class="pages">'
- print tab*3 + '<div class="pages_title">' + blog_locale[0] + '</div>'
- print tab*3 + '<div class="pages_list">'
- print tab*4 + '<ul class="pages_list">'
+ print tab*2 + "<div class=\"pages\">"
+ print tab*3 + "<div class=\"pages_title\">" + blog_locale[0] + "</div>"
+ print tab*3 + "<div class=\"pages_list\">"
+ print tab*4 + "<ul class=\"pages_list\">"
for staticpage in staticpages_list:
- file = open(staticpage, 'r')
+ file = open(staticpage, "r")
header = file.readline()
- if header.split(':', 1)[0] == 'extern_link':
- link = header.split(':', 1)[1].strip()
+ if header.split(":", 1)[0] == "extern_link":
+ link = header.split(":", 1)[1].strip()
else:
- link = re.sub('\w+?\/', '', staticpage)
- link = '?s=' + link
+ link = re.sub("\w+?\/", "", staticpage)
+ link = "?s=" + link
file.close()
- title = re.sub('\w+?\/\d+?-', '', staticpage)
- print tab*5 + '<li class="pages_list_entry"><a href="' + link + '" class="pages_list_entry">' + title + '</a></li>'
- print tab*4 + '</ul>'
- print tab*3 + '</div>'
- print tab*3 + '<div class="pages_footer"></div>'
- print tab*2 + '</div>'
- print ''
+ title = re.sub("\w+?\/\d+?-", "", staticpage)
+ print tab*5 + "<li class=\"pages_list_entry\"><a href=\"" + link + "\" class=\"pages_list_entry\">" + title + "</a></li>"
+ print tab*4 + "</ul>"
+ print tab*3 + "</div>"
+ print tab*3 + "<div class=\"pages_footer\"></div>"
+ print tab*2 + "</div>"
+ print ""
# Monthlist
if monthlist == "True":
olddate = ""
- print tab*2 + '<div class="months">'
- print tab*3 + '<div class="months_title">' + blog_locale[1] + '</div>'
- print tab*3 + '<div class="months_list">'
- print tab*4 + '<ul class="months_list">'
+ print tab*2 + "<div class=\"months\">"
+ print tab*3 + "<div class=\"months_title\">" + blog_locale[1] + "</div>"
+ print tab*3 + "<div class=\"months_list\">"
+ print tab*4 + "<ul class=\"months_list\">"
for entry in entries:
date = time.strftime("%m%Y", entry[0])
date_display = time.strftime("%h %Y", entry[0])
if not olddate == date:
- print tab*5 + '<li class="months_list_entry"><a href="?m=' + date + '" class="months_list_entry">' + date_display + '</a></li>'
+ print tab*5 + "<li class=\"months_list_entry\"><a href=\"?m=" + date + "\" class=\"months_list_entry\">" + date_display + "</a></li>"
olddate = date
- print tab*4 + '</ul>'
- print tab*3 + '</div>'
- print tab*3 + '<div class="months_footer"></div>'
- print tab*2 + '</div>'
- print ''
+ print tab*4 + "</ul>"
+ print tab*3 + "</div>"
+ print tab*3 + "<div class=\"months_footer\"></div>"
+ print tab*2 + "</div>"
+ print ""
# Linklist
if linklist == "True":
- print tab*2 + '<div class="linklist">'
- print tab*3 + '<div class="linklist_title">' + blog_locale[2] + '</div>'
- print tab*3 + '<div class="linklist_list">'
- print tab*4 + '<ul class="linklist_list">'
+ print tab*2 + "<div class=\"linklist\">"
+ print tab*3 + "<div class=\"linklist_title\">" + blog_locale[2] + "</div>"
+ print tab*3 + "<div class=\"linklist_list\">"
+ print tab*4 + "<ul class=\"linklist_list\">"
try:
content = open("linklist", "r")
for line in content:
if line.strip() is "":
- print '<br />'
+ print "<br />"
else:
- print tab*5 + '<li class="linklist_list_entry"><a href="' + line.split(" ")[0] + '" class="months_list_entry">' + line.split(" ", 1)[1].strip() + '</a></li>'
+ print tab*5 + "<li class=\"linklist_list_entry\"><a href=\"" + line.split(" ")[0] + "\" class=\"months_list_entry\">" + line.split(" ", 1)[1].strip() + "</a></li>"
content.close()
except:
- print ''
- print tab*4 + '</ul>'
- print tab*3 + '</div>'
- print tab*3 + '<div class="linklist_footer"></div>'
- print tab*2 + '</div>'
- print ''
+ print ""
+ print tab*4 + "</ul>"
+ print tab*3 + "</div>"
+ print tab*3 + "<div class=\"linklist_footer\"></div>"
+ print tab*2 + "</div>"
+ print ""
- print tab*2 + '<div class="entries">'
- print ''
+ print tab*2 + "<div class=\"entries\">"
+ print ""
# Staticpage
if static_display != "":
content = open(staticpages_dir + static_display, "r")
- print tab*3 + '<div class="entry">'
- print tab*4 + '<div class="entry_title">' + re.sub('^\.', '', re.sub('\d+?-', '', static_display)) + '</div>'
- print tab*4 + '<div class="entry_content">'
- print tab*5 + '<p>'
+ print tab*3 + "<div class=\"entry\">"
+ print tab*4 + "<div class=\"entry_title\">" + re.sub("^\.", "", re.sub("\d+?-", "", static_display)) + "</div>"
+ print tab*4 + "<div class=\"entry_content\">"
+ print tab*5 + "<p>"
for line in content:
if no_break.match(line):
print tab*5 + line.strip()
else:
- print tab*5 + line.strip() + '<br />'
- print tab*5 + '</p>'
- print tab*4 + '</div>'
- print tab*4 + '<div class="entry_footer"></div>'
- print tab*4 + '<div class="entry_border_left"></div>'
- print tab*4 + '<div class="entry_border_right"></div>'
- print tab*4 + '<div class="entry_border_top"></div>'
- print tab*4 + '<div class="entry_border_bottom"></div>'
- print tab*3 + '</div>'
- print ''
+ print tab*5 + line.strip() + "<br />"
+ print tab*5 + "</p>"
+ print tab*4 + "</div>"
+ print tab*4 + "<div class=\"entry_footer\"></div>"
+ print tab*4 + "<div class=\"entry_border_left\"></div>"
+ print tab*4 + "<div class=\"entry_border_right\"></div>"
+ print tab*4 + "<div class=\"entry_border_top\"></div>"
+ print tab*4 + "<div class=\"entry_border_bottom\"></div>"
+ print tab*3 + "</div>"
+ print ""
content.close()
# Entry
@@ -480,48 +481,48 @@ else:
date = time.strftime("%c", entry[0])
date_to_compare = time.strftime("%m%Y", entry[0]) # Needed for permalinks
entry = entry[1]
- title = entry.replace(entries_dir, '', 1)
- title = title.replace('.' + entries_suffix, '')
+ title = entry.replace(entries_dir, "", 1)
+ title = title.replace("." + entries_suffix, "")
- stampfile = os.path.join(entries_dir, title + '.stamp')
+ stampfile = os.path.join(entries_dir, title + ".stamp")
if os.path.exists(stampfile):
date = time.localtime(os.stat(stampfile)[8])
date = time.strftime("%c", date)
if month_display == date_to_compare or not month_display:
- if post_display == title.replace(' ', '-') or not post_display:
+ if post_display == title.replace(" ", "-") or not post_display:
if allentries_display == "1" or entry_counter < entries_per_page:
content = open(entry, "r")
- print tab*3 + '<div class="entry">'
+ print tab*3 + "<div class=\"entry\">"
if permalinks:
- print tab*4 + '<div class="entry_title"><a href="?p=' + title.replace(' ', '-') + '" class="entry_title">' + title + '</a></div>'
+ print tab*4 + "<div class=\"entry_title\"><a href=\"?p=" + title.replace(" ", "-") + "\" class=\"entry_title\">" + title + "</a></div>"
else:
- print tab*4 + '<div class="entry_title">' + title + '</div>'
- print tab*4 + '<div class="entry_date">' + date + '</div>'
- print tab*4 + '<div class="entry_content">'
+ print tab*4 + "<div class=\"entry_title\">" + title + "</div>"
+ print tab*4 + "<div class=\"entry_date\">" + date + "</div>"
+ print tab*4 + "<div class=\"entry_content\">"
for line in content:
if no_break.match(line):
print tab*5 + line.strip()
else:
- print tab*5 + line.strip() + '<br />'
- print tab*4 + '</div>'
- print tab*4 + '<div class="entry_footer"></div>'
- print tab*4 + '<div class="entry_border_left"></div>'
- print tab*4 + '<div class="entry_border_right"></div>'
- print tab*4 + '<div class="entry_border_top"></div>'
- print tab*4 + '<div class="entry_border_bottom"></div>'
+ print tab*5 + line.strip() + "<br />"
+ print tab*4 + "</div>"
+ print tab*4 + "<div class=\"entry_footer\"></div>"
+ print tab*4 + "<div class=\"entry_border_left\"></div>"
+ print tab*4 + "<div class=\"entry_border_right\"></div>"
+ print tab*4 + "<div class=\"entry_border_top\"></div>"
+ print tab*4 + "<div class=\"entry_border_bottom\"></div>"
# Comments...
# ... are shown when post_display and comments_file isn't false
- comments_file = glob(entries_dir + title + '.comments')
+ comments_file = glob(entries_dir + title + ".comments")
if post_display:
if comments_file:
- comments_file = glob(entries_dir + title + '.comments')
+ comments_file = glob(entries_dir + title + ".comments")
comments_content = open(comments_file[0], "r")
- print tab*3 + '</div>'
- print tab*2 + '</div>'
- print ''
- print tab*2 + '<div class="comments">'
+ print tab*3 + "</div>"
+ print tab*2 + "</div>"
+ print ""
+ print tab*2 + "<div class=\"comments\">"
notfirstline = 0 # Ugly fix for closing comment containers
label_count = 0
@@ -529,83 +530,83 @@ else:
for line in comments_content:
if line_start_hyphen.match(line):
if notfirstline == 1:
- print tab*4 + '</div>'
- print tab*3 + '</div>'
- notfirstline = 0;
- print tab*3 + '<div class="comment">'
+ print tab*4 + "</div>"
+ print tab*3 + "</div>"
+ notfirstline = 0
+ print tab*3 + "<div class=\"comment\">"
- #Label for each comment
+ # Label for each comment
label_count += 1
- print tab*4 + '<a name="' + str(label_count) + '"></a>'
+ print tab*4 + "<a name=\"" + str(label_count) + "\"></a>"
- print tab*4 + '<div class="comment_author">' + line.split(".", 1)[1].strip() + '</div>'
+ print tab*4 + "<div class=\"comment_author\">" + line.split(".", 1)[1].strip() + "</div>"
elif line_start_plus.match(line):
- print tab*4 + '<div class="comment_date">' + line.split(".", 1)[1].strip() + '</div>'
- print tab*4 + '<div class="comment_content">'
+ print tab*4 + "<div class=\"comment_date\">" + line.split(".", 1)[1].strip() + "</div>"
+ print tab*4 + "<div class=\"comment_content\">"
else:
- notfirstline = 1;
+ notfirstline = 1
line = line.split(".", 1)[1]
- print tab*5 + line.strip() + '<br />'
- print ''
- print tab*4 + '</div>'
- print tab*3 + '</div>'
+ print tab*5 + line.strip() + "<br />"
+ print ""
+ print tab*4 + "</div>"
+ print tab*3 + "</div>"
comments_content.close()
else:
- print tab*3 + '</div>'
- print tab*2 + '</div>'
- print tab*2 + '<div class="comments">'
+ print tab*3 + "</div>"
+ print tab*2 + "</div>"
+ print tab*2 + "<div class=\"comments\">"
# Form for adding comments
if comments == "True":
random_int_a = randint(1,9)
random_int_b = randint(1,9)
cquizv = random_int_a + random_int_b
- print tab*3 + '<div class="submit_comment">'
- print tab*4 + '<form action="" method="post">'
- print tab*5 + '<input type="hidden" name="ctitle" value="' + title + '" />'
- print tab*5 + '<input type="hidden" name="cquizv" value="' + str(cquizv) + '" />'
- print tab*5 + '<label class="submit_comment_name">' + blog_locale[6] + ':</label><input class="submit_comment_name_input" type="text" id="cname" name="cname" />'
- print tab*5 + '<br /><label class="submit_comment_text">' + blog_locale[7] + ':</label><textarea class="submit_comment_textarea" id="ctext" name="ctext"></textarea>'
- print tab*5 + '<br /><label class="submit_comment_quiz">' + str(random_int_a) + '+' + str(random_int_b) + '=</label><input class="submit_comment_quiz_input" type="text" id="cquiz" name="cquiz" />'
- print tab*5 + '<br /><input class="submit_comment_button" type="submit" id="submit" value="' + blog_locale[8] + '" />'
- print tab*4 + '</form>'
- print tab*3 + '</div>'
+ print tab*3 + "<div class=\"submit_comment\">"
+ print tab*4 + "<form action=\"\" method=\"post\">"
+ print tab*5 + "<input type=\"hidden\" name=\"ctitle\" value=\"" + title + "\" />"
+ print tab*5 + "<input type=\"hidden\" name=\"cquizv\" value=\"" + str(cquizv) + "\" />"
+ print tab*5 + "<label class=\"submit_comment_name\">" + blog_locale[6] + ":</label><input class=\"submit_comment_name_input\" type=\"text\" id=\"cname\" name=\"cname\" />"
+ print tab*5 + "<br /><label class=\"submit_comment_text\">" + blog_locale[7] + ":</label><textarea class=\"submit_comment_textarea\" id=\"ctext\" name=\"ctext\"></textarea>"
+ print tab*5 + "<br /><label class=\"submit_comment_quiz\">" + str(random_int_a) + "+" + str(random_int_b) + "=</label><input class=\"submit_comment_quiz_input\" type=\"text\" id=\"cquiz\" name=\"cquiz\" />"
+ print tab*5 + "<br /><input class=\"submit_comment_button\" type=\"submit\" id=\"submit\" value=\"" + blog_locale[8] + "\" />"
+ print tab*4 + "</form>"
+ print tab*3 + "</div>"
else:
- print tab*3 + '<div class="submit_border_bottom"></div>'
- print ''
+ print tab*3 + "<div class=\"submit_border_bottom\"></div>"
+ print ""
if comments == "True":
- comments_file = glob(entries_dir + title + '.comments')
+ comments_file = glob(entries_dir + title + ".comments")
if not comments_file and not post_display:
- print tab*4 + '<div class="entry_comment">'
- print tab*5 + '<a href="?p=' + title.replace(' ','-') + '" class="entry_comment">' + blog_locale[3] + '</a>'
- print tab*4 + '</div>'
- print tab*3 + '</div>'
- print ''
+ print tab*4 + "<div class=\"entry_comment\">"
+ print tab*5 + "<a href=\"?p=" + title.replace(" " ,"-") + "\" class=\"entry_comment\">" + blog_locale[3] + "</a>"
+ print tab*4 + "</div>"
+ print tab*3 + "</div>"
+ print ""
elif comments_file and not post_display:
comments_content = open(comments_file[0], "r")
comments_counter = 0
for line in comments_content:
if line.split(".", 1)[0] == "-": comments_counter += 1
- print tab*4 + '<div class="entry_comment">'
- print tab*5 + '<a href="?p=' + title.replace(' ', '-') + '" class="entry_comment">' + blog_locale[4] + ' (' + str(comments_counter) + ')</a>'
- print tab*4 + '</div>'
- print tab*3 + '</div>'
- print ''
+ print tab*4 + "<div class=\"entry_comment\">"
+ print tab*5 + "<a href=\"?p=" + title.replace(" ", "-") + "\" class=\"entry_comment\">" + blog_locale[4] + " (" + str(comments_counter) + ")</a>"
+ print tab*4 + "</div>"
+ print tab*3 + "</div>"
+ print ""
comments_content.close()
else:
- print tab*3 + '</div>'
- print ''
+ print tab*3 + "</div>"
+ print ""
content.close()
entry_counter += 1
if not month_display and not post_display and not allentries_display and entry_counter == entries_per_page: # Display pagelist
- print tab*3 + '<div class="entry"><a href="?a=1">' + blog_locale[5] + '</a></div>'
+ print tab*3 + "<div class=\"entry\"><a href=\"?a=1\">" + blog_locale[5] + "</a></div>"
- print tab*2 + '</div>'
- print ''
- print tab + '</body>'
- print '</html>'
+ print tab*2 + "</div>"
+ print ""
+ print tab + "</body>"
+ print "</html>"
# vim: set tw=0 ts=4: