o 3a7@sdZddlZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z zddlZddlZddlZWn eyCd ZYnwd Zd d Zd dZd"ddZddddddZddZd#ddZer}ejjjdeeD] \ZZ eee qse dZ!e dZ"ddZ#d d!Z$dS)$zBMisc. utility functions/classes for admin documentation generator.N)HeaderParseError) HeaderParser)cleandoc)reverse)_lazy_re_compile) mark_safeFTcCs"|j}t|d|jj}|d|S)N __qualname__.) __module__getattr __class____name__) view_funcmod_name view_namer@/usr/lib/python3/dist-packages/django/contrib/admindocs/utils.py get_view_names rcCs|sddifSt|}td|}|d}t|dkr d}i}nz7 .. default-role:: cmsreference %s .. default-role:: Nhtml) source_pathdestination_path writer_namesettings_overridesfragment)rrstripdocutilscore publish_partsr)textr)thing_being_parsed overridessourcerrrr parse_rst8s   r;z %s/models/%s/z %s/views/%s/z%s/templates/%s/z%s/filters/#%sz %s/tags/#%s)modelviewtemplatefiltertagcs$dfdd }tjjj||dS)NcsB|duri}tjj||fd|jjj|fi|}|ggfSNrefuri)r4nodes referencedocumentsettingsr*lower)namerawtextr7linenoinlineroptionscontentnodeurlbaserr_rolecs z$create_reference_role.._roleNN)r4parsersrstrolesregister_canonical_role)rolenamerPrQrrOrcreate_reference_rolebs rXc CsP|duri}|jjj}tjj||fdt||jjj|fi|}|ggfSrA) rErFr)r4rCrDROLESr*rG) rHrIr7rJrKrLrMcontextrNrrrdefault_reference_roless  r[ cmsreferencez \(\?P(<\w+>)z\(c Csddt|D}g}|D]F\}}}d\}}t||dD]4\}} | dkr0|dkr0|d7}n | dkr<|dkr<|d8}| }|d krS|||||d|fnqq|D] \} }|| |}qW|S) a Find named groups in `pattern` and replace them with the group name. E.g., 1. ^(?P\w+)/b/(\w+)$ ==> ^/b/(\w+)$ 2. ^(?P\w+)/b/(?P\w+)/$ ==> ^/b//$ 3. ^(?P\w+)/b/(\w+) ==> ^/b/(\w+) 4. ^(?P\w+)/b/(?P\w+) ==> ^/b/ cSs&g|]}|d|d|dfqS)rr)startend.0mrrr sz(replace_named_groups..rNN(\r)r)named_group_matcherfinditer enumerateappendreplace) patternnamed_group_indicesgroup_pattern_and_namer]r^ group_nameunmatched_open_brackets prev_charidxval group_patternrrrreplace_named_groupss(  ruc CsDddt|D}g}|D]A}d\}}t||ddD]0\}}|dkr/|dkr/|d7}n |dkr;|dkr;|d8}|}|d krN|||d |fnqqg}d} |D]\}} | r`|| ksb| si||| f| } qV|rgd} } |D]\}} | r| || || |d|d | } qu| || dd | S|S) a) Find unnamed groups in `pattern` and replace them with ''. E.g., 1. ^(?P\w+)/b/(\w+)$ ==> ^(?P\w+)/b/$ 2. ^(?P\w+)/b/((x|y)\w+)$ ==> ^(?P\w+)/b/$ 3. ^(?P\w+)/b/(\w+) ==> ^(?P\w+)/b/ 4. ^(?P\w+)/b/((x|y)\w+) ==> ^(?P\w+)/b/ cSsg|]}|dqS)r)r]r_rrrrbsz*replace_unnamed_groups..rcrNrdrerfrzr)unnamed_group_matcherrhrirjr) rlunnamed_group_indices group_indicesr]rprqrrrsgroup_start_end_indicesprev_endr^ final_patternrrrreplace_unnamed_groupss>     r})NrR)%__doc__r email.errorsr email.parserrinspectr django.urlsrdjango.utils.regex_helperrdjango.utils.safestringr docutils.corer4docutils.nodesdocutils.parsers.rst.roles ImportErrordocutils_is_availablerr$r;rYrXr[rSrTrUrVrrHrPrgrwrur}rrrrsF         "   &