; Bc@sdZdkZdkZdkZdkZdkZdkZdklZl Z dk Z dk Z dk Z e i ZedZdZdZeidZeideZeideZeid eZeid eZeid eZeid eZeid eZeideefZeideZeideefZeidZeideefZeidZ eidZ!eidZ"eidZ#eidZ$eidZ%eidZ&eideZ'deefZ(eie(dZ)eie(dZ*dZ+dZ,eid e+e,fZ-d!Z.d"Z/d#Z0d$Z1d%Z2d&Z3d'Z4d(Z5eie.e/e0e1e2e3e4e5ei6Z7d)e8fd*YZ9d+fd,YZ:d-fd.YZ;d/Z<d0fd1YZ=d2fd3YZ>d4fd5YZ?gd6d7Z@eAd8jo1eBd9d:iCZDe?d;eDZEeEiFGHndS(<sParse one Python file and retrieve classes, methods, functions, store the code spans and facilitate the manipulation of method bodies This module is based on 'pyclbr.py' from the standard python lib BUGS Nested methods and classes not handled Continuation lines are not dealt with at all and strings may confuse the hell out of the parser, but it usually works. Continuation lines are now handled for class, method and function defs N(sIntTypes StringTypeis[A-Za-z_][A-Za-z0-9_]*s[A-Za-z_][A-Za-z0-9_.]*s ^[ ]*($|#)s8^[ ]*class[ ]+(?P%s)[ ]*(?P\([^)]*\))?[ ]*:s%^[ ]*class[ ]+(?P%s)[ ]*[\(\:]s:^[ ]*def[ ]+(?P%s)[ ]*\((?P.*)\)[ ]*[:][ ]*$s^[ ]*def[ ]+(?P%s)[ ]*\(s5^def[ ]+(?P%s)[ ]*\((?P.*)\)[ ]*[:][ ]*$s^def[ ]+(?P%s)[ ]*\(s#[ ]*self[.](?P%s)[ ]*=[ ]*s6[ ]*self[.](?P%s)[ ]*=[ ]*(?P%s)\(s[ ]*(?P%s)[ ]*=[ ]*s/[ ]*(?P%s)[ ]*=[ ]*(?P%s)\(s ^[ ]*import[ ]*(?P[^#;]+)sM^[ ]*from[ ]+(?P%s([ ]*\.[ ]*%s)*)[ ]+import[ ]+(?P[^#;]+)s^[^ ]s^[^ ]*s'''s"""s ^[ ]*# XXXs ^[ ]*# TODO:s:^\[(?P.*)\][ ]*[=][ ]*wxNewId[(](?P\d+)[)]$s^#-+(?P.*%s)-+$s-(?P%s)[.]get(?P%s)%%s[(][)]sBitmapsIcons'(\b[rR])?'''([^'\\]|\\.|'(?!''))*(''')?s'(\b[rR])?"""([^"\\]|\\.|"(?!""))*(""")?s(?P%s|%s)s#[-]+.*s# Name:[ ]*(?P.*)s# Purpose:[ ]*(?P.*)s# Author:[ ]*(?P.*)s# Created:[ ]*(?P.*)s# RCS-ID:[ ]*(?P.*)s"# Copyright:[ ]*(?P.*)s&# Licence:[ ]*(?P[^#]*#[-]+)sModuleParseErrorcBstZRS(N(s__name__s __module__(((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pysModuleParseError^ss CodeBlockcBsGtZdZdZdZdZdZdZdZRS(NcCs(||_||_||_h|_dS(N(ssigsselfs signaturesstartsendslocals(sselfssigsstartsend((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pys__init__bs   cCsd|i|ifSdS(Ns [%d - %d](sselfsstartsend(sself((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pys__repr__hscCs|i|jo$|i||_|i||_n%|i|jo|i||_nx'|iiD]}|i||qhWdS(N( sselfsstarts from_lines incrementsendslocalssvaluessattrsrenumber(sselfs from_lines incrementsattr((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pysrenumberkscCs!||ijo ||ijSdS(N(slinesselfsstartsend(sselfsline((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pyscontainsuscCs|i|iSdS(N(sselfsendsstart(sself((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pyssizexscCsh|_xhti|idD]Q}|idd}t|djot |i||ii||| i di fd|||fSnti|ok|id|_t|djo4ti|} | o| id|i|Doc string too big for sreis( sis_docssearchsbodysms RuntimeErrorserrsstrsspansssesstrip(sselfsbodyseserrsmss((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pys searchDocs cCs|io"|i|idiid}nt|i}|io|i |idid}nt|i}|it || }|i di|i|SdS(s Return doc string for module. Scan the area from the start of the file up to the first occurence of a doc string containing structure like func or class iis N(sselfs class_ordersclassessblocksstarts classStartslenssourcesfunction_orders functionss funcStartsminsmodTops searchDocsjoins formatDocStr(sselfsmodTops classStarts funcStart((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pys getModuleDocs " cCsKg}x:|D]2}|i o|idq |i|q W|SdS(Ns

(slslinesslinesstripsappend(sselfslinesslinesl((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pys formatDocStrscCs|i|}t|io|i|idi}n |i i }|i |i it ||i i !}|idi|i|SdS(Nis (sselfsclassess class_namesclsslens method_ordersmethodssstarts methStartsblocksendssourcesminsclassDocs searchDocsjoins formatDocStr(sselfs class_namesclssclassDocs methStart((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pys getClassDocs  cCs5|i||}|idi|i|SdS(s% Extract the doc string for a method s N(sselfsextractMethodBodys class_names meth_namesmethDocs searchDocsjoins formatDocStr(sselfs class_names meth_namesmethDoc((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pysgetClassMethDoc scCs2|i|}|idi|i|SdS(Ns (sselfsextractFunctionBodys function_namesfuncDocs searchDocsjoins formatDocStr(sselfs function_namesfuncDoc((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pysgetFunctionDocscCs|i|}|iid}|i|i||d|i|<||_ |i|=||i|<|i i |}|i |=|i i ||dS(Ni(sselfsclassessold_class_namesclssblocksstartsidxssourcesreplacesnew_class_namesnames class_ordersindexsinsert(sselfsold_class_namesnew_class_namesidxscls((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pys renameClasss     cCs|i|i|}|id}|i|i ||d|i|<|i|i|=||i|i|<||i|i |i|i i |scCsd|i|}|i}|i|}g|i||i+|i i ||i|=|i ||dS(N( sselfs functionss func_namescbsstarts ins_pointsends func_sizessourcesfunction_ordersremovesrenumber(sselfs func_names func_sizes ins_pointscb((sQ/mnt/gmirror/ports/devel/boaconstructor/work/boa-constructor-0.4.4/moduleparse.pysremoveFunctionAs    c Csd}h}|i|ox||iD]z}t|tjo5h||<||g}|i ||||q-|i|i|||ig|||i