
    i              
           S r SSKJrJrJr  SSKJrJr   " S S\5      r\R                  SSS	.S
SS	.SSS	.SSS	.SSS	.SSS	.S.5      r
 " S S\\5      r " S S\5      r " S S\5      rg)z5Extractors for https://imhentai.xxx/ and mirror sites   )GalleryExtractorBaseExtractorMessage   )textutilc                       \ rS rSrSrS rSrg)ImhentaiExtractor   IMHentaic              #     #    S nU R                   S-   nS[        0n U R                  U5      R                  nUR	                  S5      nUS:  a  US U n[        R
                  " U5      n U" SS5      nX:X  a  M  U(       d  O[        R                  X8-   U4v   UnM3  [        R                  " USS5      n	U	(       a  U	S	:X  a  g U	S   S
:X  a  U	S   S
:X  a  SU	-   n	OU R                   U	-   n	U	nM  7f)N	/gallery/
_extractorzclass="ranking_list"    zhref="/gallery/"zclass='page-link' href=''#/r   zhttps:)	rootImhentaiGalleryExtractorrequestr   findextract_fromr   Queuerextr)
selfurlprevbasedatapageposextr
gallery_idhrefs
             J/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/imhentai.py_paginationImhentaiExtractor._pagination   s     yy;&67<<$))D))23CaxDSz$$T*D!"3S9
%!mmT%6<<!  ::d$>DD43;Aw#~7c>#d?D99t+DC5 s   C-C/ N)__name__
__module____qualname____firstlineno__basecategoryr'   __static_attributes__r)       r&   r
   r
      s    Lr0   r
   zhttps://imhentai.xxxz(?:www\.)?imhentai\.xxx)r   patternzhttps://hentaiera.comz(?:www\.)?hentaiera\.comzhttps://hentairox.comz(?:www\.)?hentairox\.comzhttps://hentaifox.comz(?:www\.)?hentaifox\.comzhttps://hentaienvy.comz(?:www\.)?hentaienvy\.comzhttps://hentaizap.comz(?:www\.)?hentaizap\.com)imhentai	hentaiera	hentairox	hentaifox
hentaienvy	hentaizapc                   >    \ rS rSrSr\S-   rSrS rS r	S r
S rS	rg
)r   P   z Extractor for imhentai galleriesz/(?:gallery|view)/(\d+)z#https://imhentai.xxx/gallery/12345/c                     [         R                  X5        U R                  S   U l        U R                   SU R                   S3U l        g )Nr   r   )r
   __init__groupsr$   r   page_url)r   matchs     r&   r<   !ImhentaiGalleryExtractor.__init__U   s<    ""4/++b/99+Yt.?qAr0   c                    [         R                  " U5      nU" SS5      nU" SS5      nU" SS5      (       a  SOSn[         R                  " U R                  5      [         R                  " U5      [         R                  " U5      U R                  U" SU5      5      U R                  U" S	U5      5      U R                  U" S
U5      5      U R                  U" SU5      5      U R                  U" SU5      5      U R                  U" SU5      5      U" SS5      S.
nUS   (       a  [        R                  " US   S   5      US'   U$ )Nz<h1><zclass="subtitle">z<ul class="galleries_info>z</li>z</ul>z	>Parodiesz>Charactersz>Tagsz>Artistsz>Groupsz
>Languageszhref='/category/r   )
r$   title	title_altparody	charactertagsartistgrouplanguagetyperK   r   lang)r   r   	parse_intr$   unescape_splitr   language_to_code)r   r!   r#   rD   rE   endr    s          r&   metadata!ImhentaiGalleryExtractor.metadataZ   s     &VS!,c2	93??gW ..9--.--	2++d;&<=++d=#&>?++d7C&89++d:s&;<++d9c&:;++d<&=>137
 
00j1A!1DEDLr0   c                    / n[         R                  " USS5       HV  nSU;   =(       d    SU;   n[         R                  " U5      nU(       a  UR                  S5      S   nUR	                  U5        MX     UR                  5         U$ )NrC   z</a>zbadge'>zclass='badge r   )r   extract_iterremove_html
rpartitionappendsort)r   htmlresultstagbadges        r&   rP   ImhentaiGalleryExtractor._splitr   sv    $$T37C#%>3)>E""3'CnnS)!,NN3 8 	r0   c           	      2  ^^ [         R                  " USS5      R                  S5      S   S-   mSSSSS	S
.m [        R                  " [         R                  " USS5      5      nUc  U R                  R                  SU R                  5        UU4S jn[         R                  " [         R                  " USS5      5      n[        SUS-   5       Vs/ s H  nT U S3SU" U5      04PM     sn$ / n[        [        [        S[        U5      S-   5      5       Hc  nX%   R                  S5      u  pxn	T U STU    3n
UR                  U
[         R                  " U5      [         R                  " U	5      S.45        Me     U$ ! [
         a    S n GN+f = fs  snf )Nz
data-src="r   r   r   jpgpnggifwebpavif)jpgwaz$.parseJSON('r   z%s: Missing image datac              3   |   >#    [         R                  " TR                  5       S5       H  nT U  SU 3v   M     g 7f)Nr   .)r   advancevalues)iextr   extss     r&   _fallback_exts7ImhentaiGalleryExtractor.images.<locals>._fallback_exts   s6     <<q9C!F1#Qse,, :s   9<zid="load_pages" value="r   z.jpg	_fallback,rm   )widthheight)r   r#   rY   r   
json_loads	Exceptionlogwarningr$   rN   rangemapstrlensplitrZ   )r   r!   r    rs   cntrp   r]   rq   rw   rx   r   r   rr   s              @@r&   imagesImhentaiGalleryExtractor.images}   s   yy|S1<<SA!DsJUfM	??499T?C#HID <HH5tG- ../"6 7C #1c!e_., vaS%^A5F'GH,. . S%3t9Q;/0A!%s!3CF1#QtCyk*CNNC../..0"   1 -  	D	.s   ,F FFF)r$   r>   N)r*   r+   r,   r-   __doc__BASE_PATTERNr1   exampler<   rS   rP   r   r/   r)   r0   r&   r   r   P   s*    *77G3GB
0	r0   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	ImhentaiTagExtractor   z#Extractor for imhentai tag searchesr^   zD(/(?:artist|category|character|group|language|parody|tag)/([^/?#]+))zhttps://imhentai.xxx/tag/TAG/c                 b    U R                   U R                  S   -   S-   nU R                  U5      $ )Nr   )r   r=   r'   )r   r   s     r&   itemsImhentaiTagExtractor.items   s.    ii$++b/)C/$$r0   r)   Nr*   r+   r,   r-   r   subcategoryr   r1   r   r   r/   r)   r0   r&   r   r      s%    -K  G .G%r0   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	ImhentaiSearchExtractor   z%Extractor for imhentai search resultssearchz+(/(?:advanced-)?search/?\?[^#]+|/[^/?#]+/?)z&https://imhentai.xxx/search/?key=QUERYc                 X    U R                  U R                  U R                  S   -   5      $ )Nr;   )r'   r   r=   )r   s    r&   r   ImhentaiSearchExtractor.items   s$    		DKKO ;<<r0   r)   Nr   r)   r0   r&   r   r      s    /KKKG6G=r0   r   N)r   commonr   r   r    r   r   r
   updater   r   r   r   r)   r0   r&   <module>r      s    < < < " "J !''&-
 (.
 (.
 (.
 )/
 (.+) 8I02B IX
%, 
%=/ =r0   