<fold text='SupportStuff'>#region SupportStuff
class SupportClass(object):<fold text='...'>
    pass</fold>


def supportFunction():<fold text='...'>
    return</fold>
#endregion</fold>

class ImportantClass(object):<fold text='...'>
    <fold text='Class body'>#region Class body
    def f(self):<fold text='...'>
            return 'hello world'</fold>
    #endregion</fold>
    pass</fold>

<fold text='VeryImportant'>#region VeryImportant
def importantFunction():<fold text='...'>
    if (x > 0):
        <fold text='Body'>#region Body
        print "abc"
        #endregion</fold>
    return</fold>
pass
#endregion</fold>