After quite a few weeks of work, Graffiti has (again) reached the stage where it can render it's first words. It's now at 488 lines of code, of which the CSS related stuff itself comes in at 288 lines! There is no word wrapping yet, or any layout logic. I've been busy fixing quite a few bugs in the CSS overlays and so on.
This is how you would use it.
from pygame.locals import *
import graffiti as g # 1
g.init() # 2
pygame.display.set_caption('Graffiti Render Test')
screen = pygame.display.set_mode((800, 600))
screen.fill((0, 0, 0))
page = g.page.Page('<body><p>Testing Graffiti</p></body>') # 3
page.render.on(screen) # 4
for event in pygame.event.get():
if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):