aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Ritter <xeno@thehappy.de>2010-12-14 11:26:21 +0100
committerStefan Ritter <xeno@thehappy.de>2010-12-14 11:26:21 +0100
commitb76a97c26ae4842dac0e380e470543875b9bae3f (patch)
treef4597ee7412e59bf81197ddd33d89a287a8a97a9
parentb48033facada8e216f2f6c89a6a7477233179af2 (diff)
Following guidelines from http://www.python.org/dev/peps/pep-0008/
Diffstat (limited to '')
-rwxr-xr-xblogthon.cgi1090
1 files changed, 578 insertions, 512 deletions
diff --git a/blogthon.cgi b/blogthon.cgi
index 1a00590..47847ed 100755
--- a/blogthon.cgi
+++ b/blogthon.cgi
@@ -26,168 +26,228 @@ 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>).*$")
+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("^\+.*$")
+line_start_plus = re.compile("^\+.*$")
tab = "\t"
def generate_uuid(string):
- string_md5sum = md5(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]))
- return string
+ string_md5sum = md5(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]))
+ return string
def errorpage(string):
- document_header("xhtml-strict")
- print "<head><title>Error!</title></head>"
- print "<body>"
- print tab + string
- print "</body>"
- print "</html>"
- sys.exit()
+ document_header("xhtml-strict")
+ print "<head><title>Error!</title></head>"
+ print "<body>"
+ print tab + string
+ 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\">"
- 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\">"
- 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\">"
- if string == "rss":
- print "Content-type: application/rss+xml\n"
- print "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
- print "<rss version=\"2.0\">"
+ 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\">"
+ 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\">"
+ 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\">"
+ if string == "rss":
+ print "Content-type: application/rss+xml\n"
+ print "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ print "<rss version=\"2.0\">"
# Parse configuration
configuration = ConfigParser()
for config in ["../blogthonrc", "../.blogthonrc", "configuration"]:
- if os.path.exists(config):
- configuration.read(config)
- config = True
- break
- else:
- config = False
+ if os.path.exists(config):
+ configuration.read(config)
+ config = True
+ break
+ else:
+ config = False
if not config:
- errorpage("No suitable configuration found!")
+ 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")
- for i in locales_de:
- try:
- locale.setlocale(locale.LC_TIME, i)
- break
- except: continue
- else: locale.setlocale(locale.LC_TIME, None)
+ 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")
+ for i in locales_de:
+ try:
+ locale.setlocale(locale.LC_TIME, i)
+ break
+ except:
+ continue
+ else:
+ locale.setlocale(locale.LC_TIME, None)
else:
- blog_locale = ("pages", "months", "links", "no comments", "comments", "View all entries...", "name", "text", "commit")
- locales_en = ("en_US.UTF-8", "en_US.ISO-8859-15", "en_US")
- for i in locales_en:
- try:
- locale.setlocale(locale.LC_TIME, i)
- break
- 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: 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: linklist = configuration.get("look", "linklist")
-except: errorpage("\"linklist\" is missing in configuration!")
+ blog_locale = ("pages", "months", "links", "no comments", "comments", "View all entries...", "name", "text", "commit")
+ locales_en = ("en_US.UTF-8", "en_US.ISO-8859-15", "en_US")
+ for i in locales_en:
+ try:
+ locale.setlocale(locale.LC_TIME, i)
+ break
+ 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:
+ 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:
+ linklist = configuration.get("look", "linklist")
+except:
+ errorpage("\"linklist\" is missing in configuration!")
if not os.path.exists("linklist"):
- errorpage("\"linklist\" does not exist!")
-
-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: 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: 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: feed_preview = configuration.get("feed", "feed_preview")
-except: errorpage("\"feed_preview\" is missing or empty in configuration!")
+ errorpage("\"linklist\" does not exist!")
+
+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:
+ 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:
+ 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:
+ 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")
static_display = action.getvalue("s")
-if static_display: static_display = static_display.replace("/", "")
+if static_display:
+ static_display = static_display.replace("/", "")
post_display = action.getvalue("p")
-if post_display: post_display = post_display.replace(" ", "-").replace("/", "")
+if post_display:
+ post_display = post_display.replace(" ", "-").replace("/", "")
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 = ""
-if not allentries_display: allentries_display = ""
-if not feed_display: feed_display = ""
+
+if not month_display:
+ month_display = ""
+
+if not post_display:
+ post_display = ""
+
+if not static_display:
+ static_display = ""
+
+if not allentries_display:
+ allentries_display = ""
+
+if not feed_display:
+ feed_display = ""
# Commentstuff
ctitle = action.getvalue("ctitle")
@@ -195,417 +255,423 @@ 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 = ""
-if not cquiz: cquiz = ""
-if not cquizv: cquizv = ""
+
+if not ctitle:
+ ctitle = ""
+if not cname:
+ cname = ""
+if not ctext:
+ ctext = ""
+if not cquiz:
+ cquiz = ""
+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;")
-
- # Add comment
- if not cquiz == cquizv:
- errorpage("Brainmode")
- else:
- comments_file = os.path.join(entries_dir, ctitle + ".comments")
- if not os.path.exists(comments_file):
- try:
- content = open(comments_file, "w")
- content.close()
- except:
- errorpage("\"" + entries_dir + "\" isn\'t writable!")
-
- try:
- 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(" ", "-")
- smtp = SMTP(smtp_host)
- smtp.starttls()
- smtp.sendmail(blog_title, mail_to, msg)
- smtp.quit()
- except:
- errorpage("Comment cannot be written!")
+ # Prevent XSS hacks
+ 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 = os.path.join(entries_dir, ctitle + ".comments")
+ if not os.path.exists(comments_file):
+ try:
+ content = open(comments_file, "w")
+ content.close()
+ except:
+ errorpage("\"" + entries_dir + "\" isn\'t writable!")
+
+ try:
+ 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(" ", "-")
+ smtp = SMTP(smtp_host)
+ smtp.starttls()
+ smtp.sendmail(blog_title, mail_to, msg)
+ smtp.quit()
+ except:
+ errorpage("Comment cannot be written!")
# Read entries and store their title and timestamp
-entries = []
-entries_list = glob(os.path.join(entries_dir, "*." + entries_suffix))
+entries = []
+entries_list = glob(os.path.join(entries_dir, "*." + entries_suffix))
for entry in entries_list:
- title = entry.replace(entries_dir, "", 1)
- title = title.replace("." + entries_suffix, "")
-
- 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")
- stamp.close()
- utime = os.utime(stampfile, (os.stat(entry)[8], os.stat(entry)[8]))
-
- timestamp = time.localtime(timestamp[8])
- entry = timestamp, entry
- entries.append(entry)
+ title = entry.replace(entries_dir, "", 1)
+ title = title.replace("." + entries_suffix, "")
+
+ 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")
+ stamp.close()
+ utime = os.utime(stampfile, (os.stat(entry)[8], os.stat(entry)[8]))
+
+ timestamp = time.localtime(timestamp[8])
+ entry = timestamp, entry
+ entries.append(entry)
if newest_first:
- entries.sort(reverse=True)
+ entries.sort(reverse=True)
else:
- entries.sort()
+ entries.sort()
# Generate atom feed
if feed_display == "atom":
- date = entries[0][0]
- 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])}
-
- 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 ""
- j = len(entries)
- if j > 10: j = 10
- for i in xrange(0, j):
- 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")
- for h in xrange(0, int(feed_preview)):
- rss_line = content.readline().strip()
- if rss_line != "":
- print tab*4 + rss_line
- content.close()
- print tab*3 + "</summary>"
- print tab*2 + "</entry>"
- print "</feed>"
+ date = entries[0][0]
+ 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])}
+
+ 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 ""
+ j = len(entries)
+ if j > 10: j = 10
+ for i in xrange(0, j):
+ 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")
+ for h in xrange(0, int(feed_preview)):
+ rss_line = content.readline().strip()
+ if rss_line != "":
+ print tab*4 + rss_line
+ content.close()
+ 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>"
- date = time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime(time.mktime(entries[0][0])))
- 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_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= ""
- for h in xrange(0, int(feed_preview)):
- line = content.readline().strip()
- if line:
- 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>"
+ 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>"
+ date = time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime(time.mktime(entries[0][0])))
+ 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_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= ""
+ for h in xrange(0, int(feed_preview)):
+ line = content.readline().strip()
+ if line:
+ 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>"
# 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 ""
-
- # Plugins
- sys.path.append(plugins_dir)
- 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 ""
-
- # 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 ""
-
- # 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 ""
-
- # Staticpages
- if staticpages == "True":
- staticpages = []
- staticpages_list = glob(os.path.join(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\">"
- for staticpage in staticpages_list:
- file = open(staticpage, "r")
- header = file.readline()
- if header.split(":", 1)[0] == "extern_link":
- link = header.split(":", 1)[1].strip()
- else:
- 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 ""
-
- # 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\">"
- 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>"
- olddate = date
- 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\">"
- try:
- content = open("linklist", "r")
- for line in content:
- if line.strip() is "":
- 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>"
- 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 tab*2 + "<div class=\"entries\">"
- print ""
-
- # Staticpage
- if static_display != "":
- content = open(os.path.join(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>"
- 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 ""
- content.close()
-
- # Entry
- else:
- entry_counter = 0
- for entry in entries:
- 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, "")
-
- 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 allentries_display == "1" or entry_counter < entries_per_page:
- content = open(entry, "r")
- 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>"
- 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\">"
- 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>"
-
- # Comments...
- # ... are shown when post_display and comments_file isn't false
- comments_file = glob(os.path.join(entries_dir, title + ".comments"))
- if post_display:
- if comments_file:
- comments_content = open(comments_file[0], "r")
- 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
-
- 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\">"
-
- # Label for each comment
- label_count += 1
- print tab*4 + "<a name=\"" + str(label_count) + "\"></a>"
-
- 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\">"
- else:
- notfirstline = 1
- line = line.split(".", 1)[1]
- 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\">"
-
- # 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>"
- else:
- print tab*3 + "<div class=\"submit_border_bottom\"></div>"
- print ""
-
- if comments == "True":
- comments_file = glob(os.path.join(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 ""
- 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 ""
- comments_content.close()
- else:
- 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*2 + "</div>"
- print ""
- print tab + "</body>"
- print "</html>"
-
-# vim: set tw=0 ts=4:
+ 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 ""
+
+ # Plugins
+ sys.path.append(plugins_dir)
+ 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 ""
+
+ # 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 ""
+
+ # 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 ""
+
+ # Staticpages
+ if staticpages == "True":
+ staticpages = []
+ staticpages_list = glob(os.path.join(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\">"
+ for staticpage in staticpages_list:
+ file = open(staticpage, "r")
+ header = file.readline()
+ if header.split(":", 1)[0] == "extern_link":
+ link = header.split(":", 1)[1].strip()
+ else:
+ 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 ""
+
+ # 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\">"
+ 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>"
+ olddate = date
+ 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\">"
+ try:
+ content = open("linklist", "r")
+ for line in content:
+ if line.strip() is "":
+ 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>"
+ 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 tab*2 + "<div class=\"entries\">"
+ print ""
+
+ # Staticpage
+ if static_display != "":
+ content = open(os.path.join(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>"
+ 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 ""
+ content.close()
+
+ # Entry
+ else:
+ entry_counter = 0
+ for entry in entries:
+ 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, "")
+
+ 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 allentries_display == "1" or entry_counter < entries_per_page:
+ content = open(entry, "r")
+ 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>"
+ 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\">"
+ 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>"
+
+ # Comments...
+ # ... are shown when post_display and comments_file isn't false
+ comments_file = glob(os.path.join(entries_dir, title + ".comments"))
+ if post_display:
+ if comments_file:
+ comments_content = open(comments_file[0], "r")
+ 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
+
+ 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\">"
+
+ # Label for each comment
+ label_count += 1
+ print tab*4 + "<a name=\"" + str(label_count) + "\"></a>"
+
+ 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\">"
+ else:
+ notfirstline = 1
+ line = line.split(".", 1)[1]
+ 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\">"
+
+ # 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>"
+ else:
+ print tab*3 + "<div class=\"submit_border_bottom\"></div>"
+ print ""
+
+ if comments == "True":
+ comments_file = glob(os.path.join(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 ""
+ 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 ""
+ comments_content.close()
+ else:
+ 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*2 + "</div>"
+ print ""
+ print tab + "</body>"
+ print "</html>"
+
+# vim: set sw=4 tw=0 ts=4 expandtab: