# Blogroll generator
# Copyright (C) 2002 Phillip Pearson - pp@myelin.co.nz
# 

"""

If you're reading this in your browser, it may look like a complete mess!
Save this file in your gems directory and read the instructions:

	http://www.pycs.net/notes/stories/2002/05/16/autoblogrolling.html

Enjoy!

"""

def formatLink( node, level=0 ):
	prefix = '&sim; ' * level
	s = node._attrs['text'].nodeValue
	link = None
	for tag in [ 'url', 'htmlUrl' ]:
		if node._attrs.has_key( tag ):
			link = node._attrs[tag ].nodeValue
	if link:
		s = '<div class="blogrollLink">' + prefix + '<a href="' + link + '">' + s + '</a></div>'
	else:
		s = '<div class="blogrollNote">' + prefix + s + '</div>'
	return s

def renderOutline( dom, level=0 ):
	s = ""
	for node in dom.childNodes:
		newLevel = level
		if node.nodeName == 'outline':
			s += formatLink( node, level ) + "\n"
			newLevel += 1
		s += renderOutline( node, newLevel )
	return s

def renderRoll( fileName ):
	from xml.dom import minidom
	dom = minidom.parse( open( fileName ) )
	return renderOutline( dom )

styleSheet = """<style type="text/css">
<!--
	body {
		font-family: Arial, sans-serif;
		margin-left: 10%;
		margin-right: 10%;
	}
	.blogrollBlock {
		border: solid;
		border-width: 1px;
		border-color: lightgrey;
		padding: 5px;
	}
	.blogrollLink, .blogrollNote {
		margin-bottom: 0.5em;
	}
	.creditLink {
		color: lightgrey;
	}
-->
</style>
"""

if __name__ == '__main__':

	import sys
	
	fileName = 'blogroll.opml'
	if len( sys.argv ) > 1:
		fileName = sys.argv[1]
	
	title = 'Blogroll'
	if len( sys.argv ) > 2:
		title = sys.argv[2]

	print styleSheet
	print '<table border="0"><tr><td><div class="blogrollblock">'
	print '<div class="blogrollNote"><b>' + title + ':</b></div>'
	print renderRoll( fileName )
	print '<div class="creditLink">[ <a class="creditLink" href="http://www.pycs.net/notes/stories/2002/05/16/autoblogrolling.html">how does this work?</a> ]</div>'
	print '</div></td></tr></table>'

