visual indentation

Jeremy Dillworth jwdillworth at yahoo.com
Fri Aug 22 22:51:45 CEST 2003


Here's another idea:

def world1():
    RiColor(1.0,1.0,1.0)
    RiSurface('constant')
    RiSphere(1.0,-1.0,1.0,360)

def world2():
    RiColor(1.0,1.0,1.0)
    RiSurface('constant')
    RiSphere(1.0,-1.0,1.0,360)

worlds_to_build = [world1, world2]
for world in worlds_to_build:
    RiWorldBegin()
    world()
    RiWorldEnd()

--- achrist at easystreet.com wrote:
> Hilbert wrote:
> > 
> > Hello,
> > 
> > I'm using python to output RIB streams for Renderman.
> > The RIB stream is a bunch of statements which describes
> > a 3d image. The Rib standard allows for blocks which we
> > usually indent for better visualization for example:
> > 
> > WorldBegin
> >     Color [1 1 1]
> >     Surface "constant"
> >     Sphere(1.0, -1.0, 1.0, 360)
> > WorldEnd
> > 
> > I'm using CGKit in python which has a Renderman binding,
> > so to output the same RIB I'd write:
> > 
> > RiWorldBegin()
> >     RiColor(1.0,1.0,1.0)
> >     RiSurface('constant')
> >     RiSphere(1.0,-1.0,1.0,360)
> > RiWorldEnd()
> > 
> > But I get an error, because python interprets my indentation
> > as a block in the python code. So the only way to write this
> > is without the indentation:
> > 
> > RiWorldBegin()
> > RiColor(1.0,1.0,1.0)
> > RiSurface('constant')
> > RiSphere(1.0,-1.0,1.0,360)
> > RiWorldEnd()
> > 
> > But this is a lot harder to read.
> > 
> > Is there any way to use such "visual" indentation in python?
> > 
> 
> If the code is purely sequential, how about something like this:
> 
> import string
> def RunTheseStatements(s):
> 	stmts = map(string.strip, s.split("\n"))
> 	for stmt in stmts:
> 		eval(stmt)		
> 
> RunTheseStatements("""
> 
> 
> RiWorldBegin()
>     RiColor(1.0,1.0,1.0)
>     RiSurface('constant')
>     RiSphere(1.0,-1.0,1.0,360)
> RiWorldEnd()
> 
> 
> """)
> 
> 
> Al
> -- 
> http://mail.python.org/mailman/listinfo/python-list






More information about the Python-list mailing list