--0-1592618721-1023648265=:17605 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Here's a version with the Strategy classes included. This allows for essentially unlimited alternatives on the subjects of long words, full stops, and also permits right justification. This is my preference for resolving "creeping featuritis". Any new feature can be implemented as yet another strategy plug-in. Note that I am AR about superclasses. Python does not require this level of fussiness, but I find that when I leave them out, I always wish I had them as a place to factor out common functions. ===== -- S. Lott, CCP :-{) S_LOTT@YAHOO.COM http://www.mindspring.com/~slott1 Buccaneer #468: KaDiMa Macintosh user: drinking upstream from the herd. __________________________________________________ Do You Yahoo!? Yahoo! - Official partner of 2002 FIFA World Cup http://fifaworldcup.yahoo.com --0-1592618721-1023648265=:17605 Content-Type: application/octet-stream; name="textwrap.py" Content-Transfer-Encoding: base64 Content-Description: textwrap.py Content-Disposition: attachment; filename="textwrap.py" IiIiClV0aWxpdGllcyBmb3Igd3JhcHBpbmcgdGV4dCBzdHJpbmdzIGFuZCBm aWxsaW5nIHRleHQgcGFyYWdyYXBocy4KIiIiCgpfX3JldmlzaW9uX18gPSAi JElkJCIKCmltcG9ydCBzdHJpbmcsIHJlCgoKIyBYWFggaXMgdGhpcyBnb2lu ZyB0byBiZSBpbXBsZW1lbnRlZCBwcm9wZXJseSBzb21ld2hlcmUgaW4gMi4z PwpkZWYgaXNsb3dlciAoYyk6CiAgICByZXR1cm4gYyBpbiBzdHJpbmcubG93 ZXJjYXNlCgojIFRleHRQcmVwcm9jZXNzIGNsYXNzIGhpZXJhcmNoeToKIyAg IFRoZXNlIGNsYXNzZXMgYXJlIGFsbCBwbHVnLWluIHN0cmF0ZWdpZXMgZm9y IHByZXByb2Nlc3NpbmcgdGV4dCBwcmlvciAKIyAgIHRvIHNwbGl0dGluZyBp bnRvIGNodW5rcy4KCmNsYXNzIFRleHRQcmVwcm9jZXNzOgogICAgIiIiUHJl cHJvY2VzcyB0ZXh0IGJlZm9yZSBmaWxsaW5nIGxpbmVzLiIiIgogICAgZGVm IHRyYW5zZm9ybSggc2VsZiwgdGV4dCApOgogICAgICAgIHJldHVybiB0ZXh0 CiAgICAgICAgCmNsYXNzIEV4cGFuZFRhYnMoIFRleHRQcmVwcm9jZXNzICk6 CiAgICAiIiJFeHBhbmQgVGFicyB0byBzcGFjZXMuIiIiCiAgICBkZWYgX19p bml0X18oIHNlbGYsIHdpZHRoICk6CiAgICAgICAgc2VsZi53aWR0aD0gd2lk dGgKICAgIGRlZiB0cmFuc2Zvcm0oIHNlbGYsIHRleHQgKToKICAgICAgICBy ZXR1cm4gdGV4dC5leHBhbmR0YWJzKCkKCmNsYXNzIENsZWFuV2hpdGVzcGFj ZSggVGV4dFByZXByb2Nlc3MgKToKICAgICIiIk5vcm1hbGl6ZSB2YXJpb3Vz IHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0byBiZSBzcGFjZXMuIiIiIAogICAg d2hpdGVzcGFjZV90cmFucz0gc3RyaW5nLm1ha2V0cmFucyggc3RyaW5nLndo aXRlc3BhY2UsIAogICAgICAgICcgJypsZW4oc3RyaW5nLndoaXRlc3BhY2Up ICkKICAgIGRlZiB0cmFuc2Zvcm0oIHNlbGYsIHRleHQgKToKICAgICAgICBy ZXR1cm4gdGV4dC50cmFuc2xhdGUoIHNlbGYud2hpdGVzcGFjZV90cmFucyAp CgojIENodW5rUHJlcHJvY2VzcyBjbGFzcyBoaWVyYXJjaHk6CiMgICAgVGhl c2UgY2xhc3NlcyBhcmUgcGx1Zy1pbiBzdHJhdGVnaWVzIGZvciBwcm9jZXNz aW5nIGEgc2VxdWVuY2Ugb2YgY2h1bmtzCiMgICAgcHJpb3IgdG8gd3JhcHBp bmcuCgpjbGFzcyBDaHVua1ByZXByb2Nlc3M6CiAgICAiIiJQYXJlbnQgY2xh c3MgZm9yIHBvc3Qtc3BsaXQsIHByZS13cmFwIHByb2Nlc3NpbmcuIiIiCiAg ICBkZWYgYWJicmV2KCBzZWxmLCB0ZXh0ICk6CiAgICAgICAgcmV0dXJuIHRl eHRbMF0gaW4gc3RyaW5nLnVwcGVyY2FzZSBhbmQgdGV4dFstMV0gPT0gJy4n CiAgICBkZWYgdHJhbnNmb3JtKCBzZWxmLCBjaHVua3MgKToKICAgICAgICBy ZXR1cm4gY2h1bmtzCiAgICAKY2xhc3MgRnVsbFN0b3BUd29TcGFjZSggQ2h1 bmtQcmVwcm9jZXNzICk6CiAgICAiIiJFbnN1cmUgdGhhdCBmdWxsIHN0b3Bz IGFyZSBmb2xsb3dlZCBieSB0d28gc3BhY2VzLiIiIgogICAgZGVmIHRyYW5z Zm9ybSggc2VsZiwgY2h1bmtzICk6CiAgICAgICAgaT0gMAogICAgICAgIHdo aWxlIGkgPCBsZW4oY2h1bmtzKS0xOgogICAgICAgICAgICBpZiBzZWxmLmFi YnJldiggY2h1bmtzW2ldICkgYW5kIGNodW5rc1tpKzFdLnN0YXJ0c3dpdGgo JyAnKToKICAgICAgICAgICAgICAgIGNodW5rc1tpKzFdPSAnICAnCiAgICAg ICAgICAgICAgICBpICs9IDIKICAgICAgICAgICAgZWxzZToKICAgICAgICAg ICAgICAgIGkgKz0gMQogICAgCmNsYXNzIEZ1bGxTdG9wT25lU3BhY2UoIENo dW5rUHJlcHJvY2VzcyApOgogICAgIiIiRW5zdXJlIHRoYXQgZnVsbCBzdG9w cyBhcmUgZm9sbG93ZWQgYnkgb25lIHNwYWNlLiIiIgogICAgZGVmIHRyYW5z Zm9ybSggc2VsZiwgY2h1bmtzICk6CiAgICAgICAgaT0gMAogICAgICAgIHdo aWxlIGkgPCBsZW4oY2h1bmtzKS0xOgogICAgICAgICAgICBpZiBzZWxmLmFi YnJldiggY2h1bmtzW2ldICkgYW5kIGNodW5rc1tpKzFdLnN0YXJ0c3dpdGgo JyAnKToKICAgICAgICAgICAgICAgIGNodW5rc1tpKzFdPSAnICcKICAgICAg ICAgICAgICAgIGkgKz0gMgogICAgICAgICAgICBlbHNlOgogICAgICAgICAg ICAgICAgaSArPSAxCgojIExvbmdXb3JkIGNsYXNzIGhpZXJhcmNoeToKIyAg ICBUaGVzZSBjbGFzc2VzIGFyZSBhbGwgcGx1Zy1pbiBzdHJhdGVnaWVzIGZv ciBjb3Bpbmcgd2l0aCBsb25nIHdvcmRzCiMgICAgdGhhdCB3b3VsZCBvdmVy ZmxvdyB0aGUgbGluZSBlbmRpbmcuICBBZGRpdGlvbmFsIHN1YmNsYXNzIG1p Z2h0IGJlCiMgICAgd3JpdHRlbiB0byBoYW5kbGUgc3BsaXR0aW5nIHdvcmRz IG9uIGRvdWJsZSBsZXR0ZXJzIG9yIGNvbW1vbiBlbmRpbmdzLgoKY2xhc3Mg TG9uZ1dvcmRzOgogICAgIiIiU3RyYXRlZ3kgZm9yIGhhbmRsaW5nIGxvbmcg d29yZCBicmVha3MuIiIiCiAgICBkZWYgaGFuZGxlKCBzZWxmLCBjaHVua3Ms IGN1cl9saW5lLCBjdXJfbGVuLCB3aWR0aCApOgogICAgICAgIHBhc3MKCmNs YXNzIEJyZWFrTG9uZ1dvcmRzKCBMb25nV29yZHMgKToKICAgICIiIkJyZWFr IGEgbG9uZyB3b3JkIHRvIGtlZXAgdGhlIGxpbmUgYW4gYXBwcm9wcmlhdGUg bGVuZ3RoLiIiIgogICAgZGVmIGhhbmRsZSggc2VsZiwgY2h1bmtzLCBjdXJf bGluZSwgY3VyX2xlbiwgd2lkdGggKToKICAgICAgICBzcGFjZV9sZWZ0PSB3 aWR0aCAtIGN1cl9sZW4KICAgICAgICBjdXJfbGluZS5hcHBlbmQoIGNodW5r c1swXVswOnNwYWNlX2xlZnRdICkKICAgICAgICBjaHVua3NbMF09IGNodW5r c1swXVtzcGFjZV9sZWZ0Ol0KICAgIApjbGFzcyBLZWVwTG9uZ1dvcmRzKCBM b25nV29yZHMgKToKICAgICIiIlB1dCB0aGUgbG9uZyB3b3JkIG9uIHRoZSBu ZXh0IGxpbmUsIHdoZXJlIGl0IG1heSBiZSB0b28gbG9uZy4iIiIKICAgIGRl ZiBoYW5kbGUoIHNlbGYsIGNodW5rcywgY3VyX2xpbmUsIGN1cl9sZW4sIHdp ZHRoICk6CiAgICAgICAgaWYgbm90IGN1cl9saW5lOiAKICAgICAgICAgICAg Y3VyX2xpbmUuYXBwZW5kKCBjaHVua3MucG9wKDApICkKCiMgTGluZSBwb3N0 LXByb2Nlc3MgY2xhc3MgaGllcmFyY2h5OgojICAgICBUaGVzZSBjbGFzc2Vz IGFyZSBwbHVnLWluIHN0cmF0ZWdpZXMgZm9yIHBvc3QtcHJvY2Vzc2luZyBs aW5lcwoKY2xhc3MgTGluZVBvc3Rwcm9jZXNzOgogICAgZGVmIHRyYW5zZm9y bSggc2VsZiwgbGluZXMgKToKICAgICAgICByZXR1cm4gbGluZXMKCmNsYXNz IFRleHRXcmFwcGVyOgogICAgIiIiCiAgICBPYmplY3QgZm9yIHdyYXBwaW5n L2ZpbGxpbmcgdGV4dC4gIFRoZSBwdWJsaWMgaW50ZXJmYWNlIGNvbnNpc3Rz IG9mCiAgICB0aGUgd3JhcCgpIGFuZCBmaWxsKCkgbWV0aG9kczsgdGhlIG90 aGVyIG1ldGhvZHMgYXJlIGp1c3QgdGhlcmUgZm9yCiAgICBzdWJjbGFzc2Vz IHRvIG92ZXJyaWRlIGluIG9yZGVyIHRvIHR3ZWFrIHRoZSBkZWZhdWx0IGJl aGF2aW91ci4KICAgIElmIHlvdSB3YW50IHRvIGNvbXBsZXRlbHkgcmVwbGFj ZSB0aGUgbWFpbiB3cmFwcGluZyBhbGdvcml0aG0sCiAgICB5b3UnbGwgcHJv YmFibHkgaGF2ZSB0byBvdmVycmlkZSBfd3JhcF9jaHVua3MoKS4KCiAgICBT ZXZlcmFsIHN0cmF0ZWd5IGNsYXNzZXMgY2FuIGJlIHVzZWQgdG8gY3VzdG9t aXplIHRoZSBvcGVyYXRpb24uCiAgICAKICAgIEEgc2VxdWVuY2Ugb2YgaW5z dGFuY2VzIG9mIHN1YmNsYXNzIG9mIFRleHRQcmVwcm9jZXNzIGFyZSB1c2Vk CiAgICB0byBwcmUtcHJvY2VzcyB0aGUgdGV4dCBiZWZvcmUgYnJlYWtpbmcg aW50byBjaHVua3MgYW5kIHdyYXBwaW5nLgogICAgICBFeHBhbmRUYWJzCiAg ICAgICAgVGFicyBpbiBpbnB1dCB0ZXh0IHdpbGwgYmUgZXhwYW5kZWQKICAg ICAgICB0byBzcGFjZXMgYmVmb3JlIGZ1cnRoZXIgcHJvY2Vzc2luZy4gIEVh Y2ggdGFiIHdpbGwKICAgICAgICBiZWNvbWUgMSAuLiA4IHNwYWNlcywgZGVw ZW5kaW5nIG9uIGl0cyBwb3NpdGlvbiBpbiBpdHMgbGluZS4KICAgICAgQ2xl YW5XaGl0ZXNwYWNlCiAgICAgICAgQWxsIHdoaXRlc3BhY2UgY2hhcmFjdGVy cyBpbiB0aGUgaW5wdXQKICAgICAgICB0ZXh0IGFyZSByZXBsYWNlZCBieSBz cGFjZXMuCiAgICAKICAgIEEgc2VxdWVuY2Ugb2YgaW5zdGFuY2VzIG9mIHN1 YmNsYXNzIG9mIENodW5rUHJlcHJvY2VzcyBhcmUgdXNlZAogICAgdG8gcHJl LXByb2Nlc3MgdGhlIGNodW5rcyBwcmlvciB0byB3cmFwcGluZy4KICAgICAg RnVsbFN0b3BUd29TcGFjZQogICAgICAgIEVuc3VyZXMgdGhhdCBmdWxsIHN0 b3BzIGFyZSBmb2xsb3dlZCBieSBwcmVjaXNlbHkgdHdvIHNwYWNlcy4KICAg ICAgRnVsbFN0b3BPbmVTcGFjZQogICAgICAgIEVuc3VyZXMgdGhhdCBmdWxs IHN0b3BzIGFyZSBmb2xsb3dlZCBieSBwcmVjaXNlbGUgb25lIHNwYWNlLgog ICAgCiAgICBBbiBpbnN0YW5jZSBvZiBhIHN1YmNsYXNzIG9mIExvbmdXb3Jk cyBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgCiAgICBtZWNoYW5pc20gb2YgYnJl YWtpbmcgb3IgcHJlc2VydmluZyBsb25nIHdvcmRzIGF0IHRoZSBlbmQgb2Yg dGhlIAogICAgbGluZSBkdXJpbmcgd3JhcHBpbmcuCiAgICAgIEJyZWFrTG9u Z1dvcmRzCiAgICAgICAgV29yZHMgbG9uZ2VyIHRoYW4gdGhlIGxpbmUgd2lk dGggY29uc3RyYWludAogICAgICAgIHdpbGwgYmUgYnJva2VuLiAgCiAgICAg IEtlZXBMb25nV29yZHMKICAgICAgICBXb3JkcyBsb25nZXIgdGhhbiB0aGUg bGluZSB3aWR0aCBjb25zdHJhaW50IHdpbGwgbm90IGJlIGJyb2tlbiwKICAg ICAgICBhbmQgc29tZSBsaW5lcyBtaWdodCBiZSBsb25nZXIgdGhhbiB0aGUg d2lkdGggY29uc3RyYWludC4KICAgICAgICAKICAgIFByb3ZpZGUgYSBzZXF1 ZW5jZSBzdHJhdGVnaWVzIHdoZW4geW91IGNvbnN0cnVjdCB0aGUgaW5zdGFu Y2Ugb2YgVGV4dFdyYXBwZXIuCiAgICBUaGV5IGFyZSBleGVjdXRlZCBpbiB0 aGUgb3JkZXIgcHJvdmlkZWQuCiAgICAKICAgIEZvciBleGFtcGxlOgogICAg ICAgIHdyYXA9IFRleHRXcmFwcGVyKCBbIEV4cGFuZFRhYnMoKSwgQ2xlYW5X aGl0ZXNwYWNlKCkgXSwgTm9uZSwgQnJlYWtMb25nV29yZHMoKSApCiAgICAi IiIKCiAgICAjIFRoaXMgZnVua3kgbGl0dGxlIHJlZ2V4IGlzIGp1c3QgdGhl IHRyaWNrIGZvciBzcGxpdHRpbmcgCiAgICAjIHRleHQgdXAgaW50byB3b3Jk LXdyYXBwYWJsZSBjaHVua3MuICBFLmcuCiAgICAjICAgIkhlbGxvIHRoZXJl IC0tIHlvdSBnb29mLWJhbGwsIHVzZSB0aGUgLWIgb3B0aW9uISIKICAgICMg c3BsaXRzIGludG8KICAgICMgICBIZWxsby8gL3RoZXJlLyAvLS0vIC95b3Uv IC9nb29mLS9iYWxsLC8gL3VzZS8gL3RoZS8gLy1iLyAvb3B0aW9uIQogICAg IyAoYWZ0ZXIgc3RyaXBwaW5nIG91dCBlbXB0eSBzdHJpbmdzKS4KICAgIHdv cmRzZXBfcmUgPSByZS5jb21waWxlKHInKFxzK3wnICAgICAgICAgICAgICAg ICAgIyBhbnkgd2hpdGVzcGFjZQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgcidcd3syLH0tKD89XHd7Mix9KXwnICAgICAjIGh5cGhlbmF0ZWQgd29y ZHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInKD88PVx3KS17Mix9 KD89XHcpKScpICAgIyBlbS1kYXNoCgoKICAgIGRlZiBfX2luaXRfXyAoc2Vs Zix0ZXh0UHJlPVtdLGNodW5rUHJlPVtdLGxvbmd3b3Jkcz1bXSxsaW5lUG9z dD1bXSk6CiAgICAgICAgaWYgdGV4dFByZToKICAgICAgICAgICAgc2VsZi50 ZXh0UHJlPSB0ZXh0UHJlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2Vs Zi50ZXh0UHJlPSBbIEV4cGFuZFRhYnMoOCksIENsZWFuV2hpdGVzcGFjZSgp IF0KICAgICAgICBzZWxmLmNodW5rUHJlPSBjaHVua1ByZQogICAgICAgIGlm IGxvbmd3b3JkczoKICAgICAgICAgICAgc2VsZi5sb25nX3dvcmRzPSBsb25n d29yZHMKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLmxvbmdfd29y ZHM9IEJyZWFrTG9uZ1dvcmRzKCkKICAgICAgICBzZWxmLmxpbmVQb3N0PSBs aW5lUG9zdAogICAgICAgIAoKICAgICMgLS0gUHJpdmF0ZSBtZXRob2RzIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgICAjIChwb3NzaWJseSB1c2VmdWwgZm9yIHN1YmNsYXNzZXMgdG8gb3Zl cnJpZGUpCgoKICAgIGRlZiBfc3BsaXQgKHNlbGYsIHRleHQpOgogICAgICAg ICIiIl9zcGxpdCh0ZXh0IDogc3RyaW5nKSAtPiBbc3RyaW5nXQoKICAgICAg ICBTcGxpdCB0aGUgdGV4dCB0byB3cmFwIGludG8gaW5kaXZpc2libGUgY2h1 bmtzLiAgQ2h1bmtzIGFyZQogICAgICAgIG5vdCBxdWl0ZSB0aGUgc2FtZSBh cyB3b3Jkczsgc2VlIHdyYXBfY2h1bmtzKCkgZm9yIGZ1bGwKICAgICAgICBk ZXRhaWxzLiAgQXMgYW4gZXhhbXBsZSwgdGhlIHRleHQKICAgICAgICAgIExv b2ssIGdvb2YtYmFsbCAtLSB1c2UgdGhlIC1iIG9wdGlvbiEKICAgICAgICBi cmVha3MgaW50byB0aGUgZm9sbG93aW5nIGNodW5rczoKICAgICAgICAgICdM b29rLCcsICcgJywgJ2dvb2YtJywgJ2JhbGwnLCAnICcsICctLScsICcgJywK ICAgICAgICAgICd1c2UnLCAnICcsICd0aGUnLCAnICcsICctYicsICcgJywg J29wdGlvbiEnCiAgICAgICAgIiIiCiAgICAgICAgY2h1bmtzID0gc2VsZi53 b3Jkc2VwX3JlLnNwbGl0KHRleHQpCiAgICAgICAgY2h1bmtzID0gZmlsdGVy KE5vbmUsIGNodW5rcykKICAgICAgICByZXR1cm4gY2h1bmtzCgogICAgZGVm IF9maXhfc2VudGVuY2VfZW5kaW5ncyAoc2VsZiwgY2h1bmtzKToKICAgICAg ICAiIiJfZml4X3NlbnRlbmNlX2VuZGluZ3MoY2h1bmtzIDogW3N0cmluZ10p CgogICAgICAgIENvcnJlY3QgZm9yIHNlbnRlbmNlIGVuZGluZ3MgYnVyaWVk IGluICdjaHVua3MnLiAgRWcuIHdoZW4gdGhlCiAgICAgICAgb3JpZ2luYWwg dGV4dCBjb250YWlucyAiLi4uIGZvby5cbkJhciAuLi4iLCBtdW5nZV93aGl0 ZXNwYWNlKCkKICAgICAgICBhbmQgc3BsaXQoKSB3aWxsIGNvbnZlcnQgdGhh dCB0byBbLi4uLCAiZm9vLiIsICIgIiwgIkJhciIsIC4uLl0KICAgICAgICB3 aGljaCBoYXMgb25lIHRvbyBmZXcgc3BhY2VzOyB0aGlzIG1ldGhvZCBzaW1w bHkgY2hhbmdlcyB0aGUgb25lCiAgICAgICAgc3BhY2UgdG8gdHdvLgogICAg ICAgICIiIgogICAgICAgIGkgPSAwCiAgICAgICAgd2hpbGUgaSA8IGxlbihj aHVua3MpLTE6CiAgICAgICAgICAgICMgY2h1bmtzW2ldIGxvb2tzIGxpa2Ug dGhlIGxhc3Qgd29yZCBvZiBhIHNlbnRlbmNlLAogICAgICAgICAgICAjIGFu ZCBpdCdzIGZvbGxvd2VkIGJ5IGEgc2luZ2xlIHNwYWNlLgogICAgICAgICAg ICBpZiAoY2h1bmtzW2ldWy0xXSA9PSAiLiIgYW5kCiAgICAgICAgICAgICAg ICAgIGNodW5rc1tpKzFdID09ICIgIiBhbmQKICAgICAgICAgICAgICAgICAg aXNsb3dlcihjaHVua3NbaV1bLTJdKSk6CiAgICAgICAgICAgICAgICBjaHVu a3NbaSsxXSA9ICIgICIKICAgICAgICAgICAgICAgIGkgKz0gMgogICAgICAg ICAgICBlbHNlOgogICAgICAgICAgICAgICAgaSArPSAxCgoKICAgIGRlZiBf d3JhcF9jaHVua3MgKHNlbGYsIGNodW5rcywgd2lkdGgpOgogICAgICAgICIi Il93cmFwX2NodW5rcyhjaHVua3MgOiBbc3RyaW5nXSwgd2lkdGggOiBpbnQp IC0+IFtzdHJpbmddCgogICAgICAgIFdyYXAgYSBzZXF1ZW5jZSBvZiB0ZXh0 IGNodW5rcyBhbmQgcmV0dXJuIGEgbGlzdCBvZiBsaW5lcyBvZgogICAgICAg IGxlbmd0aCAnd2lkdGgnIG9yIGxlc3MuICAoSWYgJ2JyZWFrX2xvbmdfd29y ZHMnIGlzIGZhbHNlLCBzb21lCiAgICAgICAgbGluZXMgbWF5IGJlIGxvbmdl ciB0aGFuICd3aWR0aCcuKSAgQ2h1bmtzIGNvcnJlc3BvbmQgcm91Z2hseSB0 bwogICAgICAgIHdvcmRzIGFuZCB0aGUgd2hpdGVzcGFjZSBiZXR3ZWVuIHRo ZW06IGVhY2ggY2h1bmsgaXMgaW5kaXZpc2libGUKICAgICAgICAobW9kdWxv ICdsb25nX3dvcmQuaGFuZGxlKCknKSwgYnV0IGEgbGluZSBicmVhayBjYW4g Y29tZSBiZXR3ZWVuCiAgICAgICAgYW55IHR3byBjaHVua3MuICBDaHVua3Mg c2hvdWxkIG5vdCBoYXZlIGludGVybmFsIHdoaXRlc3BhY2U7CiAgICAgICAg aWUuIGEgY2h1bmsgaXMgZWl0aGVyIGFsbCB3aGl0ZXNwYWNlIG9yIGEgIndv cmQiLiAgV2hpdGVzcGFjZQogICAgICAgIGNodW5rcyB3aWxsIGJlIHJlbW92 ZWQgZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgbGluZXMsIGJ1dAog ICAgICAgIGFwYXJ0IGZyb20gdGhhdCB3aGl0ZXNwYWNlIGlzIHByZXNlcnZl ZC4KICAgICAgICAiIiIKICAgICAgICBsaW5lcyA9IFtdCgogICAgICAgIHdo aWxlIGNodW5rczoKCiAgICAgICAgICAgIGN1cl9saW5lID0gW10gICAgICAg ICAgICAgICAgICAgIyBsaXN0IG9mIGNodW5rcyAodG8tYmUtam9pbmVkKQog ICAgICAgICAgICBjdXJfbGVuID0gMCAgICAgICAgICAgICAgICAgICAgICMg bGVuZ3RoIG9mIGN1cnJlbnQgbGluZQoKICAgICAgICAgICAgIyBGaXJzdCBj aHVuayBvbiBsaW5lIGlzIHdoaXRlc3BhY2UgLS0gZHJvcCBpdC4KICAgICAg ICAgICAgaWYgY2h1bmtzWzBdLnN0cmlwKCkgPT0gJyc6CiAgICAgICAgICAg ICAgICBkZWwgY2h1bmtzWzBdCgogICAgICAgICAgICB3aGlsZSBjaHVua3M6 CiAgICAgICAgICAgICAgICBsID0gbGVuKGNodW5rc1swXSkKCiAgICAgICAg ICAgICAgICAjIENhbiBhdCBsZWFzdCBzcXVlZXplIHRoaXMgY2h1bmsgb250 byB0aGUgY3VycmVudCBsaW5lLgogICAgICAgICAgICAgICAgaWYgY3VyX2xl biArIGwgPD0gd2lkdGg6CiAgICAgICAgICAgICAgICAgICAgY3VyX2xpbmUu YXBwZW5kKGNodW5rcy5wb3AoMCkpCiAgICAgICAgICAgICAgICAgICAgY3Vy X2xlbiArPSBsCgogICAgICAgICAgICAgICAgIyBOb3BlLCB0aGlzIGxpbmUg aXMgZnVsbC4KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAg ICAgICAgYnJlYWsKCiAgICAgICAgICAgICMgVGhlIGN1cnJlbnQgbGluZSBp cyBmdWxsLCBhbmQgdGhlIG5leHQgY2h1bmsgaXMgdG9vIGJpZyB0bwogICAg ICAgICAgICAjIGZpdCBvbiAqYW55KiBsaW5lIChub3QganVzdCB0aGlzIG9u ZSkuICAKICAgICAgICAgICAgaWYgY2h1bmtzIGFuZCBsZW4oY2h1bmtzWzBd KSA+IHdpZHRoOgogICAgICAgICAgICAgICAgc2VsZi5sb25nX3dvcmRzLmhh bmRsZShjaHVua3MsIGN1cl9saW5lLCBjdXJfbGVuLCB3aWR0aCkKCiAgICAg ICAgICAgICMgSWYgdGhlIGxhc3QgY2h1bmsgb24gdGhpcyBsaW5lIGlzIGFs bCB3aGl0ZXNwYWNlLCBkcm9wIGl0LgogICAgICAgICAgICBpZiBjdXJfbGlu ZSBhbmQgY3VyX2xpbmVbLTFdLnN0cmlwKCkgPT0gJyc6CiAgICAgICAgICAg ICAgICBkZWwgY3VyX2xpbmVbLTFdCgogICAgICAgICAgICAjIENvbnZlcnQg Y3VycmVudCBsaW5lIGJhY2sgdG8gYSBzdHJpbmcgYW5kIHN0b3JlIGl0IGlu IGxpc3QKICAgICAgICAgICAgIyBvZiBhbGwgbGluZXMgKHJldHVybiB2YWx1 ZSkuCiAgICAgICAgICAgIGlmIGN1cl9saW5lOgogICAgICAgICAgICAgICAg bGluZXMuYXBwZW5kKCcnLmpvaW4oY3VyX2xpbmUpKQoKICAgICAgICByZXR1 cm4gbGluZXMKCgogICAgIyAtLSBQdWJsaWMgaW50ZXJmYWNlIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBk ZWYgd3JhcCAoc2VsZiwgdGV4dCwgd2lkdGgpOgogICAgICAgICIiIndyYXAo dGV4dCA6IHN0cmluZywgd2lkdGggOiBpbnQpIC0+IFtzdHJpbmddCgogICAg ICAgIFNwbGl0ICd0ZXh0JyBpbnRvIG11bHRpcGxlIGxpbmVzIG9mIG5vIG1v cmUgdGhhbiAnd2lkdGgnCiAgICAgICAgY2hhcmFjdGVycyBlYWNoLCBhbmQg cmV0dXJuIHRoZSBsaXN0IG9mIHN0cmluZ3MgdGhhdCByZXN1bHRzLgogICAg ICAgIFRhYnMgaW4gJ3RleHQnIGFyZSBleHBhbmRlZCB3aXRoIHN0cmluZy5l eHBhbmR0YWJzKCksIGFuZCBhbGwKICAgICAgICBvdGhlciB3aGl0ZXNwYWNl IGNoYXJhY3RlcnMgKGluY2x1ZGluZyBuZXdsaW5lKSBhcmUgY29udmVydGVk IHRvCiAgICAgICAgc3BhY2UuCiAgICAgICAgIiIiCiAgICAgICAgZm9yIHBy ZSBpbiBzZWxmLnRleHRQcmU6CiAgICAgICAgICAgIHRleHQgPSBwcmUudHJh bnNmb3JtKHRleHQpCiAgICAgICAgaWYgbGVuKHRleHQpIDw9IHdpZHRoOgog ICAgICAgICAgICByZXR1cm4gW3RleHRdCiAgICAgICAgY2h1bmtzID0gc2Vs Zi5fc3BsaXQodGV4dCkKICAgICAgICBmb3IgcHJlIGluIHNlbGYuY2h1bmtQ cmU6CiAgICAgICAgICAgIGNodW5rcyA9IHByZS50cmFuc2Zvcm0oIGNodW5r cyApCiAgICAgICAgbGluZXM9IHNlbGYuX3dyYXBfY2h1bmtzKGNodW5rcywg d2lkdGgpCiAgICAgICAgZm9yIHBvc3QgaW4gc2VsZi5saW5lUG9zdDoKICAg ICAgICAgICAgbGluZXM9IHBvc3QudHJhbnNmb3JtKCBsaW5lcyApCiAgICAg ICAgcmV0dXJuIGxpbmVzCgogICAgZGVmIGZpbGwgKHNlbGYsIHRleHQsIHdp ZHRoLCBpbml0aWFsX3RhYj0iIiwgc3Vic2VxdWVudF90YWI9IiIpOgogICAg ICAgICIiImZpbGwodGV4dCA6IHN0cmluZywKICAgICAgICAgICAgICAgIHdp ZHRoIDogaW50LAogICAgICAgICAgICAgICAgaW5pdGlhbF90YWIgOiBzdHJp bmcgPSAiIiwKICAgICAgICAgICAgICAgIHN1YnNlcXVlbnRfdGFiIDogc3Ry aW5nID0gIiIpCiAgICAgICAgICAgLT4gc3RyaW5nCgogICAgICAgIFJlZm9y bWF0IHRoZSBwYXJhZ3JhcGggaW4gJ3RleHQnIHRvIGZpdCBpbiBsaW5lcyBv ZiBubyBtb3JlIHRoYW4KICAgICAgICAnd2lkdGgnIGNvbHVtbnMuICBUaGUg Zmlyc3QgbGluZSBpcyBwcmVmaXhlZCB3aXRoICdpbml0aWFsX3RhYicsCiAg ICAgICAgYW5kIHN1YnNlcXVlbnQgbGluZXMgYXJlIHByZWZpeGVkIHdpdGgg J3N1YnNlcXVlbnRfdGFiJzsgdGhlCiAgICAgICAgbGVuZ3RocyBvZiB0aGUg dGFiIHN0cmluZ3MgYXJlIGFjY291bnRlZCBmb3Igd2hlbiB3cmFwcGluZyBs aW5lcwogICAgICAgIHRvIGZpdCBpbiAnd2lkdGgnIGNvbHVtbnMuCiAgICAg ICAgIiIiCiAgICAgICAgbGluZXMgPSBzZWxmLndyYXAodGV4dCwgd2lkdGgp CiAgICAgICAgc2VwID0gIlxuIiArIHN1YnNlcXVlbnRfdGFiCiAgICAgICAg cmV0dXJuIGluaXRpYWxfdGFiICsgc2VwLmpvaW4obGluZXMpCgoKIyBDb252 ZW5pZW5jZSBpbnRlcmZhY2UKCl93cmFwcGVyID0gVGV4dFdyYXBwZXIoIHRl eHRQcmU9WyBFeHBhbmRUYWJzKDgpLCBDbGVhbldoaXRlc3BhY2UoKSBdLCBs b25nd29yZHM9QnJlYWtMb25nV29yZHMoKSApCgpkZWYgd3JhcCAodGV4dCwg d2lkdGgpOgogICAgcmV0dXJuIF93cmFwcGVyLndyYXAodGV4dCwgd2lkdGgp CgpkZWYgZmlsbCAodGV4dCwgd2lkdGgsIGluaXRpYWxfdGFiPSIiLCBzdWJz ZXF1ZW50X3RhYj0iIik6CiAgICByZXR1cm4gX3dyYXBwZXIuZmlsbCh0ZXh0 LCB3aWR0aCwgaW5pdGlhbF90YWIsIHN1YnNlcXVlbnRfdGFiKQo= --0-1592618721-1023648265=:17605 Content-Type: application/octet-stream; name="test_textwrap.py" Content-Transfer-Encoding: base64 Content-Description: test_textwrap.py Content-Disposition: attachment; filename="test_textwrap.py" IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpmcm9tIHRleHR3cmFwIGltcG9ydCBU ZXh0V3JhcHBlcgoKbnVtID0gMAoKZGVmIHRlc3QgKHJlc3VsdCwgZXhwZWN0 KToKICAgIGdsb2JhbCBudW0KICAgIG51bSArPSAxCiAgICBpZiByZXN1bHQg PT0gZXhwZWN0OgogICAgICAgIHByaW50ICIlZDogb2siICUgbnVtCiAgICBl bHNlOgogICAgICAgIHByaW50ICIlZDogbm90IG9rLCBleHBlY3RlZDoiICUg bnVtCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGV4cGVjdCkpOgogICAg ICAgICAgICBwcmludCAiICAlZDogJXIiICUgKGksIGV4cGVjdFtpXSkKICAg ICAgICBwcmludCAiYnV0IGdvdDoiCiAgICAgICAgZm9yIGkgaW4gcmFuZ2Uo bGVuKHJlc3VsdCkpOgogICAgICAgICAgICBwcmludCAiICAlZDogJXIiICUg KGksIHJlc3VsdFtpXSkKCndyYXBwZXIgPSBUZXh0V3JhcHBlcigpCndyYXAg PSB3cmFwcGVyLndyYXAKCgojIFNpbXBsZSBjYXNlOiBqdXN0IHdvcmRzLCBz cGFjZXMsIGFuZCBhIGJpdCBvZiBwdW5jdHVhdGlvbi4KdCA9ICJIZWxsbyB0 aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gIEknbSBnbGFkIHRv IGhlYXIgaXQhIgp0ZXN0KHdyYXAodCwgMTIpLCBbIkhlbGxvIHRoZXJlLCIs CiAgICAgICAgICAgICAgICAgICAiaG93IGFyZSB5b3UiLAogICAgICAgICAg ICAgICAgICAgInRoaXMgZmluZSIsCiAgICAgICAgICAgICAgICAgICAiZGF5 PyAgSSdtIiwKICAgICAgICAgICAgICAgICAgICJnbGFkIHRvIGhlYXIiLAog ICAgICAgICAgICAgICAgICAgIml0ISJdKQp0ZXN0KHdyYXAodCwgNDIpLCBb IkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyIsCiAg ICAgICAgICAgICAgICAgICAiSSdtIGdsYWQgdG8gaGVhciBpdCEiXSkKdGVz dCh3cmFwKHQsIDgwKSwgW3RdKQoKIyBXaGl0ZXNwYWNlIG11bmdpbmcgYW5k IGVuZC1vZi1zZW50ZW5jZSBkZXRlY3Rpb24uCnQgPSAiIiJcClRoaXMgaXMg YSBwYXJhZ3JhcGggdGhhdCBhbHJlYWR5IGhhcwpsaW5lIGJyZWFrcy4gIEJ1 dCBzb21lIG9mIGl0cyBsaW5lcyBhcmUgbXVjaCBsb25nZXIgdGhhbiB0aGUg b3RoZXJzLApzbyBpdCBuZWVkcyB0byBiZSB3cmFwcGVkLgpTb21lIGxpbmVz IGFyZSBcdHRhYmJlZCB0b28uCldoYXQgYSBtZXNzIQoiIiIKdGVzdCh3cmFw KHQsIDQ1KSwgWyJUaGlzIGlzIGEgcGFyYWdyYXBoIHRoYXQgYWxyZWFkeSBo YXMgbGluZSIsCiAgICAgICAgICAgICAgICAgICAiYnJlYWtzLiAgQnV0IHNv bWUgb2YgaXRzIGxpbmVzIGFyZSBtdWNoIiwKICAgICAgICAgICAgICAgICAg ICJsb25nZXIgdGhhbiB0aGUgb3RoZXJzLCBzbyBpdCBuZWVkcyB0byBiZSIs CiAgICAgICAgICAgICAgICAgICAid3JhcHBlZC4gIFNvbWUgbGluZXMgYXJl ICB0YWJiZWQgdG9vLiAgV2hhdCBhIiwKICAgICAgICAgICAgICAgICAgICJt ZXNzISJdKQoKCiMgV3JhcHBpbmcgdG8gbWFrZSBzaG9ydCBsaW5lcyBsb25n ZXIuCnQgPSAiVGhpcyBpcyBhXG5zaG9ydCBwYXJhZ3JhcGguIgp0ZXN0KHdy YXAodCwgMjApLCBbIlRoaXMgaXMgYSBzaG9ydCIsCiAgICAgICAgICAgICAg ICAgICAicGFyYWdyYXBoLiJdKQp0ZXN0KHdyYXAodCwgNDApLCBbIlRoaXMg aXMgYSBzaG9ydCBwYXJhZ3JhcGguIl0pCgoKIyBUZXN0IGJyZWFraW5nIGh5 cGhlbmF0ZWQgd29yZHMuCnQgPSAidGhpcy1pcy1hLXVzZWZ1bC1mZWF0dXJl LWZvci1yZWZvcm1hdHRpbmctcG9zdHMtZnJvbS10aW0tcGV0ZXJzJ2x5Igp0 ZXN0KHdyYXAodCwgNDApLCBbInRoaXMtaXMtYS11c2VmdWwtZmVhdHVyZS1m b3ItIiwKICAgICAgICAgICAgICAgICAgICJyZWZvcm1hdHRpbmctcG9zdHMt ZnJvbS10aW0tcGV0ZXJzJ2x5Il0pCnRlc3Qod3JhcCh0LCA0MSksIFsidGhp cy1pcy1hLXVzZWZ1bC1mZWF0dXJlLWZvci0iLAogICAgICAgICAgICAgICAg ICAgInJlZm9ybWF0dGluZy1wb3N0cy1mcm9tLXRpbS1wZXRlcnMnbHkiXSkK dGVzdCh3cmFwKHQsIDQyKSwgWyJ0aGlzLWlzLWEtdXNlZnVsLWZlYXR1cmUt Zm9yLXJlZm9ybWF0dGluZy0iLAogICAgICAgICAgICAgICAgICAgInBvc3Rz LWZyb20tdGltLXBldGVycydseSJdKQoKIyBFbnN1cmUgdGhhdCB0aGUgc3Rh bmRhcmQgX3NwbGl0KCkgbWV0aG9kIHdvcmtzIGFzIGFkdmVydGlzZWQgaW4K IyB0aGUgY29tbWVudHMgKGRvbid0IHlvdSBoYXRlIGl0IHdoZW4gY29kZSBh bmQgY29tbWVudHMgZGl2ZXJnZT8pLgp0ID0gIkhlbGxvIHRoZXJlIC0tIHlv dSBnb29mLWJhbGwsIHVzZSB0aGUgLWIgb3B0aW9uISIKdGVzdCh3cmFwcGVy Ll9zcGxpdCh0KSwKICAgICBbIkhlbGxvIiwgIiAiLCAidGhlcmUiLCAiICIs ICItLSIsICIgIiwgInlvdSIsICIgIiwgImdvb2YtIiwKICAgICAgImJhbGws IiwgIiAiLCAidXNlIiwgIiAiLCAidGhlIiwgIiAiLCAiLWIiLCAiICIsICAi b3B0aW9uISJdKQoKCnRleHQgPSAnJycKRGlkIHlvdSBzYXkgInN1cGVyY2Fs aWZyYWdpbGlzdGljZXhwaWFsaWRvY2lvdXM/IgpIb3cgKmRvKiB5b3Ugc3Bl bGwgdGhhdCBvZGQgd29yZCwgYW55d2F5cz8KJycnCiMgWFhYIHNlbnRlbmNl IGVuZGluZyBub3QgZGV0ZWN0ZWQgYmVjYXVzZSBvZiBxdW90ZXMKdGVzdCh3 cmFwKHRleHQsIDMwKSwKICAgICBbJ0RpZCB5b3Ugc2F5ICJzdXBlcmNhbGlm cmFnaWxpcycsCiAgICAgICd0aWNleHBpYWxpZG9jaW91cz8iIEhvdyAqZG8q JywKICAgICAgJ3lvdSBzcGVsbCB0aGF0IG9kZCB3b3JkLCcsCiAgICAgICdh bnl3YXlzPyddKQp0ZXN0KHdyYXAodGV4dCwgNTApLAogICAgIFsnRGlkIHlv dSBzYXkgInN1cGVyY2FsaWZyYWdpbGlzdGljZXhwaWFsaWRvY2lvdXM/Iics CiAgICAgICdIb3cgKmRvKiB5b3Ugc3BlbGwgdGhhdCBvZGQgd29yZCwgYW55 d2F5cz8nXSkKCnRlc3QoVGV4dFdyYXBwZXIobG9uZ3dvcmRzPUtlZXBMb25n V29yZHMoKSkud3JhcCh0ZXh0LCAzMCksCiAgICAgWydEaWQgeW91IHNheScs CiAgICAgICcic3VwZXJjYWxpZnJhZ2lsaXN0aWNleHBpYWxpZG9jaW91cz8i JywKICAgICAgJ0hvdyAqZG8qIHlvdSBzcGVsbCB0aGF0IG9kZCcsCiAgICAg ICd3b3JkLCBhbnl3YXlzPyddKQoK --0-1592618721-1023648265=:17605--
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4