Rename var tab to ind (indention)

This commit is contained in:
Stefan Ritter 2011-03-24 09:42:08 +01:00
parent 5e44ac1906
commit 718bb41ff5

View File

@ -36,7 +36,8 @@ no_break = re.compile("^\s*(<ul|</ul>|<li|</li>|<ol|</ol>|<table|</table>|<tr|</
line_start_hyphen = re.compile("^-.*$")
line_start_plus = re.compile("^\+.*$")
tab = " "
# Indention
ind = " "
def generate_uuid(string):
string_md5sum = md5(string.encode("utf-8")).hexdigest()
@ -46,14 +47,14 @@ def generate_uuid(string):
def errorpage(string):
document_header("html")
print("<head>")
print(tab + "<title>Error!</title>")
print(tab + "<link rel=\"stylesheet\" type=\"text/css\" href=\"error.css\" />")
print(ind + "<title>Error!</title>")
print(ind + "<link rel=\"stylesheet\" type=\"text/css\" href=\"error.css\" />")
print("</head>")
print("<body>")
print(tab + "<div class=\"container\">")
print(tab*2 + "<div class=\"title\"><h1>Error!</h1></div>")
print(tab*2 + "<div class=\"text\"><h2>" + string + "</h2></div>")
print(tab + "</div>")
print(ind + "<div class=\"container\">")
print(ind*2 + "<div class=\"title\"><h1>Error!</h1></div>")
print(ind*2 + "<div class=\"text\"><h2>" + string + "</h2></div>")
print(ind + "</div>")
print("</body>")
print("</html>")
sys.exit()
@ -285,12 +286,12 @@ if feed_display == "atom":
document_header("atom")
print("<link href=\"%s?feed=atom\" rel=\"self\" type=\"application/atom+xml\"/>" % blog_url)
print(tab + "<author>")
print(tab*2 + "<name>%s</name>" % blog_title)
print(tab + "</author>")
print(tab + "<title>%s</title>" % blog_title)
print(tab + "<id>urn:uuid:%s</id>" % blog_title_md5sum)
print(tab + "<updated>%s-%s-%sT%s:%s:%sZ</updated>" % (str(date[0]), month, day, hour, min, sec))
print(ind + "<author>")
print(ind*2 + "<name>%s</name>" % blog_title)
print(ind + "</author>")
print(ind + "<title>%s</title>" % blog_title)
print(ind + "<id>urn:uuid:%s</id>" % blog_title_md5sum)
print(ind + "<updated>%s-%s-%sT%s:%s:%sZ</updated>" % (str(date[0]), month, day, hour, min, sec))
print("")
j = len(entries)
if j > 10: j = 10
@ -298,42 +299,42 @@ if feed_display == "atom":
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>%s</title>" % title)
print(tab*3 + "<link href=\"%s?p=%s\"/>" % (blog_url, title))
print(tab*3 + "<id>urn:uuid:%s</id>" % title_md5sum)
print(tab*3 + "<updated>%s-%s-%sT%s:%s:%sZ</updated>" % (str(date[0]), month, day, hour, min, sec))
print(tab*3 + "<summary>")
print(ind*2 + "<entry>")
print(ind*3 + "<title>%s</title>" % title)
print(ind*3 + "<link href=\"%s?p=%s\"/>" % (blog_url, title))
print(ind*3 + "<id>urn:uuid:%s</id>" % title_md5sum)
print(ind*3 + "<updated>%s-%s-%sT%s:%s:%sZ</updated>" % (str(date[0]), month, day, hour, min, sec))
print(ind*3 + "<summary>")
content = open(str(entries[i][1]), "r")
for h in range(0, int(feed_preview)):
rss_line = content.readline().strip()
if rss_line != "":
print(tab*4 + rss_line)
print(ind*4 + rss_line)
content.close()
print(tab*3 + "</summary>")
print(tab*2 + "</entry>")
print(ind*3 + "</summary>")
print(ind*2 + "</entry>")
print("</feed>")
# Generate rss 2.0 feed
elif feed_display == "rss":
document_header("rss")
print(tab + "<channel>")
print(tab*2 + "<title>%s</title>" % blog_title)
print(tab*2 + "<link>%s</link>" % blog_url)
print(tab*2 + "<description>%s</description>" % blog_subtitle)
print(ind + "<channel>")
print(ind*2 + "<title>%s</title>" % blog_title)
print(ind*2 + "<link>%s</link>" % blog_url)
print(ind*2 + "<description>%s</description>" % blog_subtitle)
date = time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime(time.mktime(entries[0][0])))
print(tab*2 + "<pubDate>%s</pubDate>" % date)
print(ind*2 + "<pubDate>%s</pubDate>" % date)
print("")
j = len(entries)
if j > 10: j = 10
for i in range(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>%s</title>" % title)
print(tab*3 + "<link>%s?p=%s</link>" % (blog_url, title))
print(tab*3 + "<guid>%s?p=%s</guid>" % (blog_url, title))
print(tab*3 + "<pubDate>%s</pubDate>" % date)
print(ind*2 + "<item>")
print(ind*3 + "<title>%s</title>" % title)
print(ind*3 + "<link>%s?p=%s</link>" % (blog_url, title))
print(ind*3 + "<guid>%s?p=%s</guid>" % (blog_url, title))
print(ind*3 + "<pubDate>%s</pubDate>" % date)
content = open(str(entries[i][1]), "r")
rss_description= ""
for h in range(0, int(feed_preview)):
@ -341,23 +342,23 @@ elif feed_display == "rss":
if line:
rss_description = "%s%s<br />" % (rss_description, line)
content.close()
print(tab*3 + "<description><![CDATA[%s]]></description>" % rss_description)
print(tab*2 + "</item>")
print(tab + "</channel>")
print(ind*3 + "<description><![CDATA[%s]]></description>" % rss_description)
print(ind*2 + "</item>")
print(ind + "</channel>")
print("</rss>")
# Generate regular page
else:
document_header("html")
print(tab + "<head>")
print(tab*2 + "<title>%s</title>" % blog_title)
print(tab*2 + "<meta charset=\"utf-8\">")
print(tab*2 + "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />")
print(tab*2 + "<meta name=\"keywords\" content=\"%s\" />" % keywords)
print(tab*2 + "<meta name=\"description\" content=\"%s\" />" % blog_title)
print(tab*2 + "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles/%s/%s.css\" />" % (style, style))
print(tab + "</head>")
print(tab + "<body>")
print(ind + "<head>")
print(ind*2 + "<title>%s</title>" % blog_title)
print(ind*2 + "<meta charset=\"utf-8\">")
print(ind*2 + "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />")
print(ind*2 + "<meta name=\"keywords\" content=\"%s\" />" % keywords)
print(ind*2 + "<meta name=\"description\" content=\"%s\" />" % blog_title)
print(ind*2 + "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles/%s/%s.css\" />" % (style, style))
print(ind + "</head>")
print(ind + "<body>")
print("")
# Plugins
@ -366,26 +367,26 @@ else:
__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\">%s</a>" % blog_title)
print(tab*3 + "</div>")
print(tab*3 + "<div class=\"header_subtitle\">")
print(tab*4 + "<span class=\"header_subtitle\">%s</span>" % blog_subtitle)
print(tab*3 + "</div>")
print(tab*2 + "</div>")
print(ind*2 + "<div class=\"header\">")
print(ind*3 + "<div class=\"header_title\">")
print(ind*4 + "<a href=\"?\" class=\"header_link\">%s</a>" % blog_title)
print(ind*3 + "</div>")
print(ind*3 + "<div class=\"header_subtitle\">")
print(ind*4 + "<span class=\"header_subtitle\">%s</span>" % blog_subtitle)
print(ind*3 + "</div>")
print(ind*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(ind*2 + "<div class=\"rss\">")
print(ind*3 + "<a href=\"?feed=rss\" class=\"rss_link\">rss</a>")
print(ind*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(ind*2 + "<div class=\"atom\">")
print(ind*3 + "<a href=\"?feed=atom\" class=\"atom_link\">atom</a>")
print(ind*2 + "</div>")
print("")
# Staticpages
@ -393,10 +394,10 @@ else:
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\">%s</div>" % blog_locale[0])
print(tab*3 + "<div class=\"pages_list\">")
print(tab*4 + "<ul class=\"pages_list\">")
print(ind*2 + "<div class=\"pages\">")
print(ind*3 + "<div class=\"pages_title\">%s</div>" % blog_locale[0])
print(ind*3 + "<div class=\"pages_list\">")
print(ind*4 + "<ul class=\"pages_list\">")
for staticpage in staticpages_list:
file = open(staticpage, "r")
header = file.readline()
@ -407,77 +408,77 @@ else:
link = "?s=%s" % link
file.close()
title = re.sub("\w+?\/\d+?-", "", staticpage)
print(tab*5 + "<li class=\"pages_list_entry\"><a href=\"%s\" class=\"pages_list_entry\">%s</a></li>" % (link, title))
print(tab*4 + "</ul>")
print(tab*3 + "</div>")
print(tab*3 + "<div class=\"pages_footer\"></div>")
print(tab*2 + "</div>")
print(ind*5 + "<li class=\"pages_list_entry\"><a href=\"%s\" class=\"pages_list_entry\">%s</a></li>" % (link, title))
print(ind*4 + "</ul>")
print(ind*3 + "</div>")
print(ind*3 + "<div class=\"pages_footer\"></div>")
print(ind*2 + "</div>")
print("")
# Monthlist
if monthlist == "True":
olddate = ""
print(tab*2 + "<div class=\"months\">")
print(tab*3 + "<div class=\"months_title\">%s</div>" % blog_locale[1])
print(tab*3 + "<div class=\"months_list\">")
print(tab*4 + "<ul class=\"months_list\">")
print(ind*2 + "<div class=\"months\">")
print(ind*3 + "<div class=\"months_title\">%s</div>" % blog_locale[1])
print(ind*3 + "<div class=\"months_list\">")
print(ind*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=%s\" class=\"months_list_entry\">%s</a></li>" % (date, date_display))
print(ind*5 + "<li class=\"months_list_entry\"><a href=\"?m=%s\" class=\"months_list_entry\">%s</a></li>" % (date, date_display))
olddate = date
print(tab*4 + "</ul>")
print(tab*3 + "</div>")
print(tab*3 + "<div class=\"months_footer\"></div>")
print(tab*2 + "</div>")
print(ind*4 + "</ul>")
print(ind*3 + "</div>")
print(ind*3 + "<div class=\"months_footer\"></div>")
print(ind*2 + "</div>")
print("")
# Linklist
if linklist == "True":
print(tab*2 + "<div class=\"linklist\">")
print(tab*3 + "<div class=\"linklist_title\">%s</div>" % blog_locale[2])
print(tab*3 + "<div class=\"linklist_list\">")
print(tab*4 + "<ul class=\"linklist_list\">")
print(ind*2 + "<div class=\"linklist\">")
print(ind*3 + "<div class=\"linklist_title\">%s</div>" % blog_locale[2])
print(ind*3 + "<div class=\"linklist_list\">")
print(ind*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=\"%s\" class=\"months_list_entry\">%s</a></li>" % (line.split(" ")[0], line.split(" ", 1)[1].strip()))
print(ind*5 + "<li class=\"linklist_list_entry\"><a href=\"%s\" class=\"months_list_entry\">%s</a></li>" % (line.split(" ")[0], line.split(" ", 1)[1].strip()))
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(ind*4 + "</ul>")
print(ind*3 + "</div>")
print(ind*3 + "<div class=\"linklist_footer\"></div>")
print(ind*2 + "</div>")
print("")
print(tab*2 + "<div class=\"entries\">")
print(ind*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\">%s</div>" % re.sub("^\.", "", re.sub("\d+?-", "", static_display)))
print(tab*4 + "<div class=\"entry_content\">")
print(tab*5 + "<p>")
print(ind*3 + "<div class=\"entry\">")
print(ind*4 + "<div class=\"entry_title\">%s</div>" % re.sub("^\.", "", re.sub("\d+?-", "", static_display)))
print(ind*4 + "<div class=\"entry_content\">")
print(ind*5 + "<p>")
for line in content:
if no_break.match(line):
print(tab*5 + line.strip())
print(ind*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(ind*5 + line.strip() + "<br />")
print(ind*5 + "</p>")
print(ind*4 + "</div>")
print(ind*4 + "<div class=\"entry_footer\"></div>")
print(ind*4 + "<div class=\"entry_border_left\"></div>")
print(ind*4 + "<div class=\"entry_border_right\"></div>")
print(ind*4 + "<div class=\"entry_border_top\"></div>")
print(ind*4 + "<div class=\"entry_border_bottom\"></div>")
print(ind*3 + "</div>")
print("")
content.close()
@ -500,24 +501,24 @@ else:
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(ind*3 + "<div class=\"entry\">")
if permalinks:
print(tab*4 + "<div class=\"entry_title\"><a href=\"?p=%s\" class=\"entry_title\">%s</a></div>" % (title.replace(" ", "-"), title))
print(ind*4 + "<div class=\"entry_title\"><a href=\"?p=%s\" class=\"entry_title\">%s</a></div>" % (title.replace(" ", "-"), title))
else:
print(tab*4 + "<div class=\"entry_title\">%s</div>" % title)
print(tab*4 + "<div class=\"entry_date\">%s</div>" % date)
print(tab*4 + "<div class=\"entry_content\">")
print(ind*4 + "<div class=\"entry_title\">%s</div>" % title)
print(ind*4 + "<div class=\"entry_date\">%s</div>" % date)
print(ind*4 + "<div class=\"entry_content\">")
for line in content:
if no_break.match(line):
print(tab*5 + line.strip())
print(ind*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(ind*5 + line.strip() + "<br />")
print(ind*4 + "</div>")
print(ind*4 + "<div class=\"entry_footer\"></div>")
print(ind*4 + "<div class=\"entry_border_left\"></div>")
print(ind*4 + "<div class=\"entry_border_right\"></div>")
print(ind*4 + "<div class=\"entry_border_top\"></div>")
print(ind*4 + "<div class=\"entry_border_bottom\"></div>")
# Comments...
# ... are shown when post_display and comments_file isn't false
@ -525,10 +526,10 @@ else:
if post_display:
if comments_file:
comments_content = open(comments_file[0], "r")
print(tab*3 + "</div>")
print(tab*2 + "</div>")
print(ind*3 + "</div>")
print(ind*2 + "</div>")
print("")
print(tab*2 + "<div class=\"comments\">")
print(ind*2 + "<div class=\"comments\">")
notfirstline = 0 # Ugly fix for closing comment containers
label_count = 0
@ -536,83 +537,83 @@ else:
for line in comments_content:
if line_start_hyphen.match(line):
if notfirstline == 1:
print(tab*4 + "</div>")
print(tab*3 + "</div>")
print(ind*4 + "</div>")
print(ind*3 + "</div>")
notfirstline = 0
print(tab*3 + "<div class=\"comment\">")
print(ind*3 + "<div class=\"comment\">")
# Label for each comment
label_count += 1
print(tab*4 + "<a name=\"%s\"></a>" % str(label_count))
print(ind*4 + "<a name=\"%s\"></a>" % str(label_count))
print(tab*4 + "<div class=\"comment_author\">%s</div>" % line.split(".", 1)[1].strip())
print(ind*4 + "<div class=\"comment_author\">%s</div>" % line.split(".", 1)[1].strip())
elif line_start_plus.match(line):
print(tab*4 + "<div class=\"comment_date\">%s</div>" % line.split(".", 1)[1].strip())
print(tab*4 + "<div class=\"comment_content\">")
print(ind*4 + "<div class=\"comment_date\">%s</div>" % line.split(".", 1)[1].strip())
print(ind*4 + "<div class=\"comment_content\">")
else:
notfirstline = 1
line = line.split(".", 1)[1]
print(tab*5 + line.strip() + "<br />")
print(ind*5 + line.strip() + "<br />")
print("")
print(tab*4 + "</div>")
print(tab*3 + "</div>")
print(ind*4 + "</div>")
print(ind*3 + "</div>")
comments_content.close()
else:
print(tab*3 + "</div>")
print(tab*2 + "</div>")
print(tab*2 + "<div class=\"comments\">")
print(ind*3 + "</div>")
print(ind*2 + "</div>")
print(ind*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=\"%s\" />" % title)
print(tab*5 + "<input type=\"hidden\" name=\"cquizv\" value=\"%s\" />" % str(cquizv))
print(tab*5 + "<label class=\"submit_comment_name\">%s:</label><input class=\"submit_comment_name_input\" type=\"text\" id=\"cname\" name=\"cname\" />" % blog_locale[6])
print(tab*5 + "<br /><label class=\"submit_comment_text\">%s:</label><textarea class=\"submit_comment_textarea\" id=\"ctext\" name=\"ctext\"></textarea>" % blog_locale[7])
print(tab*5 + "<br /><label class=\"submit_comment_quiz\">%s+%s=</label><input class=\"submit_comment_quiz_input\" type=\"text\" id=\"cquiz\" name=\"cquiz\" />" % (str(random_int_a), str(random_int_b)))
print(tab*5 + "<br /><input class=\"submit_comment_button\" type=\"submit\" id=\"submit\" value=\"%s\" />" % blog_locale[8])
print(tab*4 + "</form>")
print(tab*3 + "</div>")
print(ind*3 + "<div class=\"submit_comment\">")
print(ind*4 + "<form action=\"\" method=\"post\">")
print(ind*5 + "<input type=\"hidden\" name=\"ctitle\" value=\"%s\" />" % title)
print(ind*5 + "<input type=\"hidden\" name=\"cquizv\" value=\"%s\" />" % str(cquizv))
print(ind*5 + "<label class=\"submit_comment_name\">%s:</label><input class=\"submit_comment_name_input\" type=\"text\" id=\"cname\" name=\"cname\" />" % blog_locale[6])
print(ind*5 + "<br /><label class=\"submit_comment_text\">%s:</label><textarea class=\"submit_comment_textarea\" id=\"ctext\" name=\"ctext\"></textarea>" % blog_locale[7])
print(ind*5 + "<br /><label class=\"submit_comment_quiz\">%s+%s=</label><input class=\"submit_comment_quiz_input\" type=\"text\" id=\"cquiz\" name=\"cquiz\" />" % (str(random_int_a), str(random_int_b)))
print(ind*5 + "<br /><input class=\"submit_comment_button\" type=\"submit\" id=\"submit\" value=\"%s\" />" % blog_locale[8])
print(ind*4 + "</form>")
print(ind*3 + "</div>")
else:
print(tab*3 + "<div class=\"submit_border_bottom\"></div>")
print(ind*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=%s\" class=\"entry_comment\">%s</a>" % (title.replace(" ", "-"), blog_locale[3]))
print(tab*4 + "</div>")
print(tab*3 + "</div>")
print(ind*4 + "<div class=\"entry_comment\">")
print(ind*5 + "<a href=\"?p=%s\" class=\"entry_comment\">%s</a>" % (title.replace(" ", "-"), blog_locale[3]))
print(ind*4 + "</div>")
print(ind*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=%s\" class=\"entry_comment\">%s (%s)</a>" % (title.replace(" ", "-"), blog_locale[4], str(comments_counter)))
print(tab*4 + "</div>")
print(tab*3 + "</div>")
print(ind*4 + "<div class=\"entry_comment\">")
print(ind*5 + "<a href=\"?p=%s\" class=\"entry_comment\">%s (%s)</a>" % (title.replace(" ", "-"), blog_locale[4], str(comments_counter)))
print(ind*4 + "</div>")
print(ind*3 + "</div>")
print("")
comments_content.close()
else:
print(tab*3 + "</div>")
print(ind*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=\"show_all\"><a href=\"?a=1\">%s</a></div>" % blog_locale[5])
print(ind*3 + "<div class=\"show_all\"><a href=\"?a=1\">%s</a></div>" % blog_locale[5])
print(tab*2 + "</div>")
print(ind*2 + "</div>")
print("")
print(tab + "</body>")
print(ind + "</body>")
print("</html>")
# vim: set sw=4 tw=0 ts=4 expandtab: