7oUc @sddlmZddlZddlZddlZddlZddlZddddddd d d d d ddg ZdefdYZ e dkr e Z gZ x!eD]Z e e je 7Z qWe je eee eddjee jndS(i(tprint_functionNs#../../core/include/opencv2/core.hpps'../../core/include/opencv2/core/ocl.hpps/../../flann/include/opencv2/flann/miniflann.hpps../../ml/include/opencv2/ml.hpps)../../imgproc/include/opencv2/imgproc.hpps)../../calib3d/include/opencv2/calib3d.hpps/../../features2d/include/opencv2/features2d.hpps.../../video/include/opencv2/video/tracking.hpps5../../video/include/opencv2/video/background_segm.hpps-../../objdetect/include/opencv2/objdetect.hpps-../../imgcodecs/include/opencv2/imgcodecs.hpps)../../videoio/include/opencv2/videoio.hpps)../../highgui/include/opencv2/highgui.hpptCppHeaderParsercBseZdZdZdZdZdZdZedZ dZ dZ d Z d d Z ed Zd ZRS(cCs=d|_d|_d|_d|_d|_t|_dS(Niiiii(t BLOCK_TYPEt BLOCK_NAMEt PROCESS_FLAGtPUBLIC_SECTIONt CLASS_DECLtsett namespaces(tself((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pyt__init__"s      cCs-x&|D]\}}|j||}qW|S(N(treplace(R tstpairstbeforetafter((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pyt batch_replace+scCs|jd|}}|dkrFtd|jftjdnd}x|j|ddg|d\}}|dkrtd|jftjdn|dkr|d7}n|dkrO|d8}|dkrPqqOqO||d|!j|fS(Nt(is'Error: no arguments for the macro at %diit)s.Error: no matching ')' in the macro call at %d(tfindtprinttlinenotsystexittfind_next_tokentstrip(R targ_strtnpostnpos2tnpos3tbalancett((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pyt get_macro_arg0s" %       cCsg}d|kr4|jd|jdd}nd|krb|jd|jdd}nt}|jd}|dkrt}|j||\}}|jd||| ||d }n|jd }|dkr.t}|j||\}}|jd ||| ||d }n|j}d}g} d }x|d 7}|j|d dddddg|\} }|||!j} | dkr| jd||jPn| d'kr| j| n| d(kr| j| n| sPn|d }|d }qOd} d} g}d }d}x| D]} |d 7}| dkr|dkr| r| td d} qB| | 7} qBng| dkr| d7} |jdnA| dks| dkr|st d|j ft j d n| dkr| d7} q| dkr|ddkr`t d|j |j ft j d n|dd kr}| d7} ng|d )qns|r| | 7} |d cd 7 [arg_name] Returns arg_type, arg_name, modlist, argno, where modlist is the list of wrapper-related modifiers (such as "output argument", "has counter", ...) and argno is the new index of an anonymous argument. That is, if no arg_str is just an argument type without argument name, the argument name is set to "arg" + str(argno), and then argno is incremented. tCV_OUTs/Ott CV_IN_OUTs/IOt CV_CARRAYis/A itCV_CUSTOM_CARRAYs/CA it t&t*tt,toperators operator tconsttchartc_stringt_sGError at %d: argument contains ',' or '>' not within template argumentst_and_s)Error at %s:%d: template has no argumentst_end_tstructt~t[t]sError at %d: no closing ]t?targsstd::scv::s::(R"sconst(R"R&R'(sstd::R"(scv::R"(s::R0(tappendR tFalseRtTrueR RRtlenRRRRthnametjoint startswithtstrtendswithR(R RtargnotmodlisttisarrayRt macro_argRt word_startt word_listRtwtarg_typetarg_namet angle_stacktwitprev_wt counter_strtadd_startp1tp2((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pyt parse_argDs         -                          c Cs|}|jd}|djdkr8|d }nd}d}g}x|D]}|jd}t|dkr|d7}d} |r|d} n| t|7} nd}|dj}} |jd|j|dj| gggqQW|S( NR+iR"t=it+isconst (tsplitRR<R@R9tget_dotted_name( R tdecl_strtltlltprev_valtprev_val_deltatdecltpairtpvtval((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pyt parse_enums&    4c Cs>|}g}d|kr:|jdd}|jdnd|krh|jdd}|jdn|jd}|dkr|j||\}}|jd||| ||d }n|j|dddddgj}tjd|}g|D]}|r|^q}|d } |d} | | |fS(s Parses class/struct declaration start in the form: {class|struct} [CV_EXPORTS] [: public [, ...]] Returns class_name1, tCV_EXPORTS_W_MAPR"s/MaptCV_EXPORTS_W_SIMPLEs/Simplet CV_EXPORTS_ASiRSit CV_EXPORTS_Wt CV_EXPORTSspublic virtual R&spublic s::t.s \s*[,:]?\s*i(RdR"(ReR"(spublic virtual R&(spublic R&(s::Rf(R R9RR RRtreRU( R RWRXRCRRERRYtlet classnametbases((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pytparse_class_decls&   '  c Cs|p dj}t}t}|jdrL|tdj}t}n|jdrz|tdj}t}n|jdr|tdj}t}n|jddjdd}|jjdd}x"d |kr|jd d}qW||jd  j}|jd}|d kr@d }n||j}|| j}|j d rd |j}||jd  j}|j dr|jd} | d kr|| dj|}|| j}q||}d}qn|jd } |j d rD|d7}|jd | d} nd|jdd}||ggg} t j d|| } t | r|| | j d}n|| d|jd!j} | dkr| dkrt jdd| } | jd}g}d}x|D]}||j7}|jd |jd}|jd|jd}|d kr|d kr|j|jd}qqWx#|D]}|jd}d}|d kr||dj}nl|jd}|d kr|j||\}}n6|jd}|d krQ|j||\}}n|d kr|jdd}|| j}nt|d}xJ|d kr||dks||js||jr|d8}qW|d kr]||dj}||d j}|j d s=|j d!s=|d0kri|d|j}d}qin |}d}|j d%r|jd&}|||7}|| }n| d'j|||ggqWn|r| d(jd)n|r| d(jd*n|r| d(jd+nt t j d,|r@| d(jd-nt t j d.|rl| d(jd/nd|krt|n| S(1NR"texplicittvirtualtstaticR!R#s R&s RiR,s operator s::is ()scv.Rfs"(\(.*?\))\s*:\s*(\w+\(.*?\),?\s*)+Rtvoids \([^)]*\)cSs|jdjddS(NiR+s@comma@(tgroupR (tm((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pyt6sR+R)R*RSt CV_DEFAULTtCV_WRAP_DEFAULTs@comma@s_[]R'R(tinttStringtMatR6R5iis/Ss/Vs/Es.*\)\s*(const)?\s*=\s*0s/As.*\)\s*const(\s*=\s*0)?s/C(sintsStringsMat(RR:R?R<tlstripR;R RtrfindRARgtmatchtboolRptsubRUtcountR9R tisalphatisdigitR(R RWt static_methodtvirtual_methodtexplicit_methodtfdecltfnametfnpostrettypetrpostaposR\t implmatchtargs0strtargs0targstnargR8t balance_parent balance_angletdfpostdefvaltpos3tpostanametatypetbidx((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pytparse_func_decl_no_wraps                  ? *  $  c Cs|jr@d|kp6d|kp6d|kp6d|ks@gSnd|krY|jrYgS|jd}g}|jd}|dkr|j||\}}|jd||| ||d }n|jd}|dkr&|j||\}}|jd||| ||d }n|j|dAdBdCdDdEdFdGdHgj}t}|d}|jdr|dks|dkr|t dj }t }n|jd} |jdrF|jd| d } | dkrt d|j |ftjdn|| d | !d|| d }|jd} n| dkryt d|j |ftjdn|| j} | jdr|jd| d } | dkrt d|j |ftjdn|| j} | jdr| dd!jd} qnttjd| rBd | } n|j| d\} } }}d@}| j| }|dkr| | jd!d jd"d j}n|dkr|d }| |ks| d#|krd | } } qttjd$|r gSttjd%|r&gSttjd&| rBgSd'| krRgSttjd(|rngSt d)|j|j | ftjdn|jrd*| ks| jd#rgS|j| } |js|j||}| |d<|S| d }|d }d }d}g}g}d }xS|dkr|d 7}|j|ddd+d,d-g|\}}|st d.|j ft |t ||tjdn|d,kr|d 7}n|d-kr|d 8}n|dkr|d 7}n|dkr|d 8}n|d+kr:|d kr:|dksF|dkr0|||!j}|d }|rr|jd}d }g}|dkr||d j}nl|jd/}|dkr|j||\}}n6|jd0}|dkr|j||\}}n|d1kr(d2}n|dkrG|| j}n|j||\}}}}|jrV|d3krd4}n|d5krd4}|jd6n{|d7krd4}|jd8nY|d9krd:}nD|d;krd:}|jd6n"|d<kr d:}|jd8n|j|dIdJdKdLdMdNd>|fgj}n|j||||gn|d }q0q0W|r|jd?n|d@kr| | ||gS| | |||gSd@S(Os Parses the function or method declaration in the form: [([CV_EXPORTS] ) | CVAPI(rettype)] [~] ( [=] [, [=] ...]) [const] {; | } Returns the function declaration entry: [, , , ] (see above) RcRdtCV_WRAPt CV_WRAP_ASsCVAPI(iiRSiRmR"s static inlinetinlineRetCV_CDECLsCV_WRAP R&t CV_INLINERntclassR3RtCVAPIRs2Error at %d. no terminating ) in CVAPI() macro: %ssError at %d: no args in '%s'R,s()is ()s^(\w+::)*(?P\w+)::~?(?P=x)$svoid R'R-R4s\w+\s+\(\*\w+\)\s*\(.*\)s\w+\s+\(\w+::\*\w+\)\s*\(.*\)s[A-Z_]+t __declspecs\w+\s+\(\*\w+\)\[\d+\]s8Error at %s:%d the function/method name is missing: '%s's::R+R)R*sError: no closing ')' at %dRsRttNULLt0t InputArrayRwtInputOutputArrays/IOt OutputArrays/OtInputArrayOfArrayst vector_MattInputOutputArrayOfArraystOutputArrayOfArrayss vectortnoArrays/SN(svirtualR"(s static inlineR"(RR"(s CV_EXPORTS_WR"(s CV_EXPORTSR"(RR"(sCV_WRAP R&(RR"(Rs vector(Rs vector(Rs vector(RsMat(RsMat(RsMat(t wrap_modet block_stackRR R9RRR:R?R<RxR;RRRRRAtrstripR{RgRzRRtNoneRyR R=RVRR( R RWttopt func_modlistRR8RRtcontextt args_begint rtype_endt decl_startRtfuncnameRCRBt original_typetiRiR\t arg_startRt angle_balancet args_declsRRtateqposRRRIRJ((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pytparse_func_declss*     '  !    +   $     *         0                  cCs|js |S|jdr |Sd|kp5d|k}d}x|jD]}||j||j}}|dkr{qHn|dkrtd |j|jftjd n|rH|d ks| rH||d7}qHqHW||jdd7}|j d r d }n|S(s$ adds the dot-separated container class/namespace names to the bare function/class name, e.g. when we have namespace cv { class A { public: f(int); }; } the function will convert "A" to "cv.A" and "f" to "cv.A.f". scv.Rfs::R"tfiletenumR3Rt namespacesDError at %d: there are non-valid entries in the current block stack is .Algorithms cv.Algorithm(sfileR(sstructsclasss namespace( RR?RRRRRRR RA(R tnametqualified_nametntbt block_typet block_name((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pyRV>s&    cCs|jd}||j}d}|dkr5d}n|dkretd|jftjdn|dks}|dkrx|jd}|d krPn|| j}|d)kr|d ks|j r|d krt ||j , , , where the first 3 values only make sense for blocks (i.e. code blocks, namespaces, classes, enums and such) iR"t{tblocks5Error at %d: should not call parse_stmt inside blocksRR3t:itpublict protectedtprivateittemplatestypedef structstypedef sError at %s:%dt_IplR&s: s, Rfs::RdRcRRis texterns"C"t}t;ttypedefRtCV_PROPt CV_PROP_RWs/RWR+i(spublicRsprivateN(RR"(RR"(RRRRRRRRRR;RR:R?RRkR<R=RVR>R RUR9R`RRRRR(R tstmtt end_tokent stack_topRt stmt_typet colon_posRHRiRjRCR\Rt stmt_listt paren_post class_declt var_modlisttvar_listtvar_typet var_name1RBRtv((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pyt parse_stmt_s       "  & #B"#E  *   "* $icCsld}t|}xM|D]E}|j||}|dkrCqn||kr|}|}qqW||fS(s Finds the next token from the 'tlist' in the input 's', starting from position 'p'. Returns the first occured token and its position, or ("", len(s)) when no token is found R"i(R<R(R R ttlisttpttokenttposRR((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pyRs     c Cs||_g}tj|ddd}t|j}|jd}d}d}|} d|ttdgg|_d} d|_ ||_ xn|D]f} |j d7_ | j } | |kr| j d r|} n| |kr| j d s|} qqn| |krH| jd } | dkr1qn| | d} |} n| |kr{td |j | ftjd nx}|j| ddddddg\}} |s| d| 7} Pn|dkr| d| | 7} Pn|dkr@| d| | 7} | jd | d} | dkr,|} Pn| | d} q~n|dkr| d}xn|j| d dg|\}}|dkrtd|j ftjd n|dkrPn|d7}qY| d| |d 7} | |d} q~n| d| | j }dj|j}|jd }|j dr>Pnd}||jr|j||\}}}}|r|dkrx+|D]}|j|qWq|j|n|dkr(g|jD] }|ddkr|d^q|g}|jjdj|q(nddt}}}|dkrq|dkrIt}nt}|jj|||||gn|dkr|jstd|j fng|jd )| dt| kr| | ddkr| d7} qnd} | | d} q~qW|S(s The main method. Parses the input file. Returns the list of declarations (that can be print using print_decls) trttencodingsutf-8iiiRR"t#s\s*/sError at %d: invlid state = %diRs"RRs//s/*R&sError at %d: no terminating '"'t@RRRfRRs%Error at %d: the block stack is emptyN(R=tiotopentlistt readlinestcloseR;RRRRRR?RARRRRRR>RURRR9RtaddR:R<(R R=twmodetdeclstftlinelisttSCANtCOMMENTt DIRECTIVEtstatet block_headtl0RXRRtpos2tt2RRR\RRt parse_flagtdRtchunkstpublic_section((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pytparses             *     !        7   "   *c Csx|D]}t|d|ddj|dxb|dD]V}td|d|d|ddd|drtd j|dq=tq=WqWd S( sS Prints the list of declarations, retrieived by the parse() method iiRiis tendR"s; N(RR>(R RRR((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pyt print_declscs %% (t__name__t __module__R RR RRR`RkR:RRRVRRR;RR(((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pyR s     r ! t  t__main__s namespaces:R&(t __future__RtosRRgtstringRtopencv_hdr_listtobjectRRtparserRR=RRRR<R>tsortedR(((sc/usr/local/google/home/noahp/android/AOSP/master/external/opencv3/modules/python/src2/hdr_parser.pyts4< S