prettytables.py - src - atrocities - clsr.net

import random
import re

lipsum = [i.strip()+'.' for i in re.split('\.(\s|$)', '''
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque semper felis ut est hendrerit eget pharetra mi semper. Ut in risus in justo ornare elementum sed vel tortor. Morbi dui metus, facilisis id pulvinar eget, suscipit ut mi. Duis lorem turpis, pellentesque at malesuada ut, laoreet ut est. Praesent aliquet scelerisque lacus a gravida. Vestibulum feugiat purus vel nibh egestas feugiat. Proin laoreet egestas libero, eu tempor est rutrum a. Donec ullamcorper neque in mi dapibus egestas. Curabitur ultricies, lectus vestibulum congue ultrices, odio lectus malesuada ipsum, nec feugiat ipsum mi tempus est. Mauris mollis metus vel arcu ornare sed ultrices enim semper.

Cras tempor ultricies nisl eu sollicitudin. Vestibulum nec neque vel velit ullamcorper luctus id id elit. Vestibulum est justo, cursus eget luctus at, aliquet vel nisi. Maecenas sodales quam a velit lacinia suscipit. Ut venenatis, nisl eu eleifend consectetur, magna magna ornare eros, sit amet consequat diam dolor ut sapien. Mauris mauris purus, porta eu pulvinar sit amet, tempus eget risus. Cras congue turpis non nisi tincidunt ut gravida magna convallis. Cras porttitor, libero in auctor placerat, turpis libero ultrices quam, vel rhoncus tortor justo convallis tellus. Maecenas pharetra velit id turpis sodales vulputate. Nulla facilisi. Vivamus faucibus diam congue turpis porttitor gravida. Vivamus condimentum iaculis congue. Quisque nec mi eget nunc rhoncus volutpat.

Integer sit amet purus lectus, ac accumsan arcu. Etiam elementum elementum libero, at venenatis lectus varius et. Vivamus vel massa molestie nunc tincidunt ultrices. Morbi dignissim odio sit amet lorem pharetra sit amet mollis enim imperdiet. Ut tempor porta felis, eu placerat nunc lobortis sed. In non orci nulla, quis semper velit. Quisque vitae elementum nibh. Vivamus et libero ante. Maecenas euismod elit a tortor iaculis laoreet rhoncus sapien pharetra. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.

Aenean augue mauris, faucibus ut placerat eget, feugiat porttitor turpis. Phasellus vestibulum massa sed diam euismod gravida at et quam. Vestibulum congue ligula ut tellus pretium eu commodo mauris condimentum. Fusce euismod ultricies libero. Fusce vel dignissim dolor. Quisque eget lacus lacus. Morbi vehicula magna et elit auctor non suscipit velit condimentum. Sed ante leo, convallis nec accumsan ac, pellentesque non eros. Nulla vestibulum, dolor sed tempus fermentum, mi purus egestas lectus, a dapibus velit lectus id purus.

Aenean eget orci dui. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent eros mauris, faucibus eget dignissim et, viverra vitae nibh. Suspendisse lacinia ante vitae lorem mattis dictum nec eget orci. Sed eu odio tellus. Nunc mattis, lacus at venenatis porttitor, orci quam viverra enim, eget pretium nunc leo quis mi. Quisque bibendum mollis lacinia. Donec tortor elit, vestibulum vitae porttitor quis, imperdiet quis nisi. Ut fringilla laoreet fringilla. Morbi scelerisque rhoncus nulla ut fringilla.

 Cras fermentum elit ut quam dapibus sollicitudin. Morbi vitae mauris nisi, vitae ultricies magna. Ut posuere turpis id turpis adipiscing id tincidunt felis congue. Pellentesque vel orci eget lorem auctor dignissim. Duis venenatis cursus viverra. Morbi non erat a lacus accumsan aliquet. Donec vel odio a risus bibendum dapibus sed et nunc. Suspendisse potenti. Suspendisse eu arcu lorem, ac eleifend nisl. Nulla eu pharetra tortor. Quisque faucibus nunc id urna varius vitae lobortis risus sagittis.

Sed viverra dictum rutrum. Donec sodales pretium leo in lobortis. Aenean accumsan ultricies dui, nec varius ipsum dignissim nec. Cras venenatis tellus vel urna commodo non facilisis elit venenatis. Praesent vel enim a purus porta rutrum a at diam. Vivamus viverra ullamcorper elit at consectetur. Maecenas malesuada pellentesque aliquet. Praesent purus nisl, vehicula tempus ultrices vitae, consectetur in mauris. Pellentesque auctor bibendum vestibulum.

Praesent ut ante ac urna ultricies venenatis a quis erat. Phasellus suscipit pharetra mollis. Duis sagittis mollis nulla eu porttitor. Fusce id dui sapien. Praesent ac lacus eget eros sodales sodales eget sit amet arcu. Donec tincidunt euismod est. Proin at sapien eros. Curabitur ac augue nisl, in dictum est.

In tempus, metus quis adipiscing condimentum, leo magna venenatis mi, id rhoncus sem metus sed lorem. Etiam eleifend interdum felis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis cursus diam eu purus sagittis vitae euismod ipsum luctus. Mauris mollis ullamcorper posuere. Donec sed nulla at lectus mattis lobortis sed a dui. In hac habitasse platea dictumst. Sed placerat feugiat dolor, nec aliquet nulla egestas eget. Morbi lacus diam, euismod vitae venenatis ut, rutrum ultricies lorem. Etiam vitae magna vel magna pretium vehicula rhoncus eu lectus. Aliquam turpis velit, ultrices convallis volutpat quis, facilisis non urna.

 Quisque quis nibh turpis, et eleifend lectus. Etiam posuere condimentum leo, vitae faucibus augue dapibus a. In hac habitasse platea dictumst. Donec in dictum nibh. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dignissim lacus vel massa posuere congue non vel velit. Donec varius tristique massa in congue. Cras a diam quam, eget iaculis ligula. Integer sit amet sapien odio, pretium posuere felis. Aenean bibendum semper condimentum.

Praesent pellentesque congue odio et tempus. Ut quis auctor elit. Fusce enim lectus, vestibulum sed egestas at, pharetra eu lorem. Aenean fermentum nunc sodales risus suscipit mattis. Sed nec odio quis enim auctor tempus. Aenean tristique, orci quis volutpat porta, dolor lorem laoreet mauris, a elementum ante turpis in ipsum. Vivamus laoreet dolor vitae massa blandit id mattis neque vehicula. In hac habitasse platea dictumst. Curabitur aliquet semper elementum.

Curabitur aliquam odio sit amet nisi cursus tempus. Nulla tincidunt, nisi ut feugiat aliquam, elit magna vulputate nunc, pellentesque commodo odio sem sed purus. Etiam viverra orci a metus ultrices posuere. Phasellus iaculis, diam a bibendum laoreet, orci ipsum accumsan dui, vel auctor sem quam et massa. Maecenas scelerisque tempus libero, sit amet hendrerit tortor porttitor ac. Nulla fringilla imperdiet eros, et tincidunt diam varius in. Mauris aliquam justo eu nisi ultricies vel feugiat velit mollis. Integer tellus risus, bibendum vel iaculis vel, aliquam vel neque. Praesent in venenatis enim.

Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi id faucibus tellus. In consequat auctor ante quis vestibulum. Proin hendrerit faucibus nunc ac euismod. Donec nunc nibh, ultrices nec varius vitae, varius at ligula. Praesent mattis urna et dolor sollicitudin laoreet. Sed adipiscing dapibus faucibus. Donec ultricies blandit tellus vel posuere.

 Sed nibh magna, porta quis facilisis vitae, tristique et tortor. Vivamus dolor elit, hendrerit a gravida non, malesuada id magna. Pellentesque tempor purus rhoncus diam convallis hendrerit. Sed massa justo, aliquam ac ultrices vitae, sagittis vitae nisl. Vestibulum iaculis faucibus sapien, quis ullamcorper mi porta in. In a libero sem. Phasellus a nisi eros. Pellentesque eros leo, venenatis eget fringilla non, lacinia vel metus.

Donec pulvinar tristique odio quis volutpat. Aliquam malesuada facilisis purus. Pellentesque quis enim nec dui consectetur pellentesque et eu neque. Proin lacinia, neque eget feugiat viverra, mi nibh auctor nibh, quis rhoncus nibh eros non ipsum. Nam laoreet, metus id porttitor mattis, ipsum eros rhoncus enim, eu cursus purus arcu et arcu. Pellentesque ultricies accumsan malesuada. Nullam sit amet justo risus. Ut consectetur, sem nec gravida condimentum, tellus mauris rhoncus lorem, sit amet adipiscing sapien mi eget massa. In orci nibh, pharetra nec egestas at, porta ac ante. Mauris at ligula et ipsum sodales egestas quis ac ligula. Duis a mi nisl, ut vehicula magna. Sed porttitor neque in purus faucibus bibendum.

Vestibulum lobortis blandit pellentesque. Vestibulum turpis risus, adipiscing sit amet bibendum nec, molestie vitae leo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce a sem ipsum. Pellentesque dapibus bibendum dolor, id pulvinar risus gravida at. Nullam ut mollis odio. Integer aliquet ante tristique risus venenatis fermentum mattis massa varius. Suspendisse fermentum pulvinar metus, et aliquam augue vestibulum in. Phasellus suscipit viverra convallis. Curabitur ac neque justo, ut convallis sapien.

Suspendisse ac sapien nibh. Curabitur gravida justo et felis faucibus scelerisque pellentesque libero luctus. In imperdiet dignissim malesuada. Maecenas placerat libero eget elit semper dapibus. Nullam vehicula magna ut erat sollicitudin vehicula et semper lorem. Integer sed nibh a metus euismod malesuada. Vivamus eget dui enim. Curabitur lorem nulla, commodo eget fringilla at, sagittis in lacus. Ut vulputate mattis nulla, vitae interdum leo lacinia a.
''') if i.strip()]
lipsumn = 0

def getlipsum():
    global lipsumn
    s = lipsum[lipsumn]
    lipsumn += 1
    return s

table = 'table'
tr = 'tr'
th = 'th'
td = 'td'

attribs = {
    'rowspan': (lambda: random.randrange(1, 5)),
    'colspan': (lambda: random.randrange(1, 5)),
    'align': (lambda: random.choice(('left', 'center', 'right', 'justify', 'char'))),
    'valign': (lambda: random.choice(('top', 'middle', 'bottom', 'baseline'))),
    'bgcolor': (lambda: '%06x' % random.randrange(0, 0xffffff)),
    'border': (lambda: random.randrange(1, 15)),
    'cellpadding': (lambda: random.randrange(1, 15)),
    'cellspacing': (lambda: random.randrange(1, 15)),
    'height': (lambda: random.choice((random.randrange(25, 250), '%d%%'%random.randrange(10, 100)))),
    'width': (lambda: random.choice((random.randrange(25, 250), '%d%%'%random.randrange(10, 100)))),
}

html = [table, tr, th, td]

length = 500

class Tag(object):
    def __init__(self, name, attrib, close):
        self.name = name
        self.attrib = attrib
        self.close = '/' if close else ''

    def __str__(self):
        if self.attrib:
            l = []
            for k, v in self.attrib.items():
                l.append('%s="%s"' % (k, v))
            return '<%s%s %s>' % (self.close, self.name, ' '.join(l))
        return '<%s%s>' % (self.close, self.name)

t = []
print '<!DOCTYPE html>'
print '<html>'
t.append('html')
print '%s%s' % ('  '*len(t), Tag('head', None, False))
t.append('head')
print '%s%s' % ('  '*len(t), Tag('title', None, False))
t.append('title')
print '%s%s' % ('  '*(len(t)-1), Tag(t.pop(-1), None, True))
print '%s%s' % ('  '*(len(t)-1), Tag(t.pop(-1), None, True))

i = -1
while t:
    i += 1
    if length<=i or random.randrange(-i, length-i) <= 0:
        print '%s%s' % ('  '*(len(t)-1), Tag(t.pop(-1), None, True))
    else:
        a = random.choice(html)
        if not i:
            a = 'table'
        j = random.randrange(-6, 6)
        d = {}
        if j > 0:
            b = random.sample(attribs, j)
            for k in b:
                d[k] = str(attribs[k]())
        print '%s%s' % ('  '*len(t), Tag(a, d, False))
        t.append(a)
        if not random.randrange(3):
            print '%s%s' % ('  '*len(t), getlipsum())

print '</html>'