a
    V$cO                     @   s  d dl mZmZmZmZmZ d dlmZ eZ	dd Z
d dlmZmZmZmZmZmZmZmZmZmZmZmZ e
  d dlm  mZ d dlZd dlZd dlZd dlZd dlZzd dl m!Z!m"Z"m#Z# W n e$y   d Z!dZ"dZ#Y n0 e"oe%ed	dZ"erd
dde!fZ&dZ'ndd de!fZ&dZ'd(dd e&D Z)e"s@e)d7 Z)ne#rNe)d7 Z)de) Z*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dej4v Z5d dl6Z6dd Z7e68 d  re7 Z.ndej49dd:drdZ2nHe6; d  rdZ/n4d ej4v rdZ1n"ej6d!ksd"ej4v r
dZ3ndZ0ej49dd#<d$d% Z=e1p4e2p4e3Z>dZ?dZ@dZAi ZBh d&ZCejDfZEh d'ZFG d(d) d)e	ZGdaHd*d+ aId,d- ZJd.d/ ZKd0d1 ZLd2d3 ZMdd krdZNdd krdd4lOmPZP dd5lOmQZQ dd6lOmRZR dd7lOmSZS dd8lOmTZT dd9lOmUZU dd:lOmVZV dd;lOmWZW dd<lOmZ dd=lOmXZX dd>lOmYZY dd?lOmZZZ dd@lOm[Z[ ddAlOm\Z\ ddBlOm]Z] ddClOm^Z^ ddDlOm_Z_ ddElOm`Z` ddFlOmaZa ddGlOmbZb ddHlOmcZc ddIlOmdZd ddJlOmeZe ddKlOmfZf ddLlOmgZg ddMlOmhZh ddNlOmiZi ddOlOmjZj ddPlOmkZk ddQlOmlZl ddRlOmZ ddSlOmmZm ddTlOmnZn ddUlOmoZo ddVlOmpZp ddWlOmqZq ddXlOmrZr ddYlOmsZs ddZlOmtZt dd[lOmuZu dd\lOmvZv dd]lOmwZw dd^lOmxZx dd_lOmyZy dd`lOmzZz ddalOm{Z{ ddblOm|Z| ddclOm}Z} dddlOm~Z~ ddelOmZ ddflOmZ ddglOmZ ddhlOmZ ddilOmZ ddjlOmZ ddklOmZ ddllOmZ ddmlOmZ ddnlOm!Z! ddolOmZ ddplOmZ dS )q    )divisionabsolute_importwith_statementprint_functionunicode_literals)Anyc                  C   s   ddl } ddl}| djd }| j| }|d}z@ddl}t|drr|j	|j
}|j|jj|g|R   W n ty   Y dS 0 dS )z`
    Update the __path__ of package, to import binary modules from a libexec
    directory.
    r   N   __name__.__file__)sysos.path	_getframe	f_globalsmodulessplit_renpyhasattrpathdirnamer   __path__appendjoinImportError)r   osnamepackager   libexec r   renpy/__init__.pyupdate_path!   s    


 r    )PY2
basestringbchrbordchropenpystrrangeroundstrtobytesunicodeN)
vc_versionofficialnightlyFrenpy_build_official         zHeck's Getting Frosty   zHeck Freezes Overr
   c                 c   s   | ]}t |V  qd S N)r*   ).0ir   r   r   	<genexpr>b       r8   unzRen'Py iVL z	-LT1.saver   RENPY_EXPERIMENTALc                     sz   ddl  G  fddd j} zB|  } ||_ jj |}|dkrTW dS |j|j	fW S  t
yt   Y dS 0 dS )z>
    When called on windows, returns the windows version.
    r   Nc                       sl   e Zd Zd jfd jfd jfd jfd jfd jd fd jfd	 jfd
 jfd jfd jfgZdS )z-get_windows_version.<locals>.OSVERSIONINFOEXWdwOSVersionInfoSizedwMajorVersiondwMinorVersiondwBuildNumberdwPlatformIdszCSDVersion   wServicePackMajorwServicePackMinor
wSuiteMaskwProductType	wReservedN)r	   
__module____qualname__c_ulongc_wcharc_ushortc_byte_fields_r   ctypesr   r   OSVERSIONINFOEXW   s   rR   )
   r   )rQ   	Structuresizeofr=   windllNtdllRtlGetVersionbyrefr>   r?   	Exception)rR   
os_versionretcoder   rP   r   get_windows_version   s    r]   RENPY_PLATFORM iosTANDROID_PRIVATE
emscriptenZRENPY_EMSCRIPTENzunknown-unknown-unknown-   >   zrenpy.test.testkeyrenpyzrenpy.test.testmousezrenpy.compat.dictviewszrenpy.test.testparserzrenpy.compatz	renpy.gl2zrenpy.display.swdrawzrenpy.displayzrenpy.display.presplashzrenpy.text.ftfontzrenpy.display.scalezrenpy.display.testzrenpy.test.testastzrenpy.display.pgrenderzrenpy.glzrenpy.objectzrenpy.test.testexecutionz
renpy.testzrenpy.bootstrapzrenpy.debug	renpy.sixrenpycoveragez	renpy.log>   z$renpy.audio.audio.periodic_conditionz(renpy.savelocation.scan_thread_conditionzrenpy.webloader.queue_lockzrenpy.python.store_dictszrenpy.character.TAG_REzrenpy.exports.sdl_dllzrenpy.loader.auto_lockzrenpy.python.string_rez"renpy.persistent.save_MP_instanceszrenpy.display.render.IDENTITYzrenpy.savelocation.disk_lockzrenpy.text.text.VERT_REVERSEz#renpy.loadsave.autosave_not_runningzrenpy.python.unicode_rezrenpy.display.im.cachezrenpy.display.screen.cprofzrenpy.python.store_moduleszrenpy.text.text.VERT_FORWARDzrenpy.display.render.blit_lockzrenpy.audio.audio.lockc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	Backupag  
    This represents a backup of all of the fields in the python modules
    comprising Ren'Py, shortly after they were imported.

    This attempts to preserve object aliasing, but not object identity. If
    renpy.mod.a is renpy.mod.b before the restore, the same will be true
    after the restore - even though renpy.mod.a will have changed identity.
    c                 C   sZ   i | _ i | _i | _trd S tj D ]}|d u r2q$| | q$tj	| jdd| _
i | _d S )NThighest)	variablesobjectsnamesmobiler   r   valuesbackup_modulepickledumpsobjects_pickle)selfmr   r   r   __init__  s    zBackup.__init__c              
   C   s$  z
|j }W n ty   Y dS 0 |ds.dS |tv r:dS |drHdS tt| | j|< t| D ]\}}|dr|	drqjt
|trqj|d | tv rqjt|}|| j||f< || j|< ztj|dd W qj ty   td|d | d	t| td
t|tj Y qj0 qjdS )zI
        Makes a backup of `mod`, which must be a Python module.
        Nre   zrenpy.styledata__r
   Tri   zCannot pickle=zReduce Ex is:)r	   rZ   
startswithbackup_blacklistsetvarskeysrm   itemsendswith
isinstancetype_blacklistname_blacklistidrk   rl   rq   rr   printrepr__reduce_ex__PROTOCOL)rt   modr   kvidvr   r   r   rp   )  s4    




zBackup.backup_modulec           	      C   s~   | j s
dS | j  D ],\}}t|}t| | D ]
}||= q4qt| j}| j D ] \}}|\}}t	||||  qXdS )zz
        Restores the modules to a state similar to the state of the modules
        when the backup was created.
        N)
rm   r~   r|   r{   r}   rq   loadsrs   rk   setattr)	rt   r   rm   modvarsr   rl   r   r   fieldr   r   r   restoreV  s    
zBackup.restoreN)r	   rI   rJ   __doc__rv   rp   r   r   r   r   r   rh     s   	-rh   c                 G   s   dS )zd
    Empty version of renpy.plog that is replaced by the real implementation
    in import_all.
    Nr   )levelevenargsr   r   r   plogt  s    r   c                  C   s.  dd l } dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l	} dd l
} tsfdd l} ndd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l} dd l } dd l!} | j"j#a$dd l%} dd l&} | j'(  | j)t*j+t,d< dd l-} dd l.} dd l/} dd l0} dd l1} dd l2} dd l3} dd l} dd l4} dd l5} dd l6} dd l7} dd l8} dd l9} dd l:} dd l;} dd l<} dd l=} dd l>} dd l?} dd l@} dd lA} | jBjBt*j+t,d< dd lC} dd lD} dd lE} dd lF} dd lG} dd lH} dd lI} dd lJ} dd lK} dd lL} dd lM} dd lN} dd lO} dd lP} dd lQ} dd lR} dd lS} dd lT} dd lU} dd lV} dd lW} dd lX} dd lY} dd lZ} dd l[} dd l\} dd l]} dd l^} dd l_} dd l`} dd la} dd lb} dd lc} dd ld} dd le} dd lf} dd lg} dd lh} dd li} dd lj} dd lk} dd ll} dd lm} dd ln} dd lo} dd lp} dd lq} dd lr} dd ls} dd lt} dd lu} dd lv} dd lw} dd lx} dd ly} dd lz} dd l{} dd l|} dd l}} dd l~} dd l} dd l} dd l} dd l} dd latt*j+t,d< ts$t at  d S )Nr   zrenpy.styleclasszrenpy.display.textrf   )re   renpy.config	renpy.logrenpy.argumentsrenpy.compat.fixesrenpy.displayrenpy.debugrenpy.object
renpy.gamerenpy.preferencesrenpy.loaderr!   renpy.py3analysisrenpy.py2analysisrenpy.pyanalysis	renpy.ast	renpy.atlrenpy.curryrenpy.color
renpy.easyrenpy.executionrenpy.loadsaverenpy.savelocationrenpy.persistentrenpy.scripteditrenpy.parserrenpy.performancerenpy.pydictrenpy.revertablerenpy.rollbackrenpy.pythonrenpy.scriptrenpy.statements
renpy.utilperformancelogr   renpy.styledatarenpy.style	styledataimport_style_functionsstyler   r   r'   renpy.substitutionsrenpy.translationrenpy.translation.scanstringsrenpy.translation.generationrenpy.translation.dialoguerenpy.translation.extractrenpy.translation.mergerenpy.display.presplashrenpy.display.pgrenderrenpy.display.scalerenpy.display.modulerenpy.display.renderrenpy.display.corerenpy.display.swdraw
renpy.textrenpy.text.ftfontrenpy.text.fontrenpy.text.textsupportrenpy.text.texwraprenpy.text.textrenpy.text.extrastextrenpy.gl	renpy.gl2renpy.display.layoutrenpy.display.viewportrenpy.display.transformrenpy.display.motionrenpy.display.behaviorrenpy.display.transitionrenpy.display.movetransitionrenpy.display.imrenpy.display.imagelikerenpy.display.imagerenpy.display.videorenpy.display.focusrenpy.display.animrenpy.display.particlerenpy.display.joystickrenpy.display.controllerrenpy.display.minigamerenpy.display.screenrenpy.display.dragdroprenpy.display.imagemaprenpy.display.predictrenpy.display.emulatorrenpy.display.ttsrenpy.display.gesturerenpy.display.modelrenpy.display.errorrenpy.audiorenpy.audio.audiorenpy.audio.musicrenpy.audio.soundrenpy.uirenpy.screenlang	renpy.sl2renpy.sl2.slastrenpy.sl2.slparserrenpy.sl2.slpropertiesrenpy.sl2.sldisplayables
renpy.lint
renpy.warprenpy.editorrenpy.memoryrenpy.exportsrenpy.characterrenpy.add_from
renpy.dumprenpy.gl2.gl2drawrenpy.gl2.gl2meshrenpy.gl2.gl2modelrenpy.gl2.gl2polygonrenpy.gl2.gl2shaderrenpy.gl2.gl2texturerenpy.gl2.live2drenpy.minstorerenpy.defaultstore
renpy.testrenpy.test.testmouserenpy.test.testfocusrenpy.test.testkeyrenpy.test.testastrenpy.test.testparserrenpy.test.testexecution
renpy.mainsixrn   rh   backuppost_import)re   r   r   r   
import_all}  s   


r  c                  C   s   ddl } | jd tjd | _| j| j_tjd tjd< ddl}|tjtd< | j	j
 D ]\}}| jj
|| q\| j	j| j_t  D ]\}}t| j|| qdS )ze
    This is called after import or reload, to do further initialization
    of various modules.
    r   Nstorerenpy.storezrenpy.subprocess)re   pythoncreate_storer   r   r  exports
subprocessr'   defaultstore__dict__r~   
setdefaultevalglobalsr|   )re   r  r   r   r   r   r   r  @  s    
r  c                 C   s   | |kp|  |d S )Nr
   )ry   )submoduler   r   r   issubmodule_  s    r$  c                     s6  t rtdddl} | jj  | j  | jjj	  | j
  | j  d| jj_| jj  d| j_| jdds| jj  d| j_| jj}| jj}ttj D ]Z t ds dkrtj  }|dur|j  tj = qt fdd	|D rtj = qt !  || j_"| jj#  t$  | j
%  dS )
z[
    Resets all modules to the state they were in right after import_all
    returned.
    z/Reloading is not supported on mobile platforms.r   N_keep_rendererFr  r  c                 3   s   | ]}t  |V  qd S r5   )r$  )r6   ru   r7   r   r   r8     r9   zreload_all.<locals>.<genexpr>)&rn   rZ   re   audioquitr   resetdisplayimcacheloaderquit_importerr  free_memoryrenderscreen_render
mark_sweep	interfacesessiongetdrawr  py_compile_cacheconfigreload_moduleslistr   r   r}   r$  r  anyr  r   old_py_compile_cachereset_moduler  init_importer)re   r7  r9  ru   r   r&  r   
reload_allc  s:    







r?  )add_from)	arguments)ast)atl)r'  )	bootstrap)	character)color)compat)r8  )curry)debug)r  )r*  )dump)easy)editor)error)	execution)r  )game)gl)gl2)lint)r-  )loadsave)r   )main)memory)minstore)object)parser)parsersupport)r   )
persistent)preferences)py2analysis)py3analysis)
pyanalysis)pydict)r  )
revertable)rollback)savelocation)
screenlang)script)
scriptedit)sl2)
statements)r   )r   )substitutions)test)r   )translation)uguu)ui)util)r-   )warp)	webloader)
__future__r   r   r   r   r   typingr   rW  _objectr    renpy.compatr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   renpy.compat.picklerG  rq   r   r   copytypessiterenpy.vc_versionr-   r.   r/   r   getattrversion_tupleversion_namer   version_onlyversionscript_versionsavegame_suffixbytecode_versionwindows	macintoshlinuxandroidr`   rb   environexperimentalplatformr]   	win32_verr5  ry   mac_ver
rpartitionarchrn   macappsafe_mode_checked
autoreloadr4  rz   
ModuleTyper   r   rh   r  r   r  r  r$  r?  r  r_   r@  rA  rB  rC  r'  rD  rE  rF  r8  rH  rI  r  r*  rJ  rK  rL  rM  rN  r  rO  rP  rQ  rR  r-  rS  r   rT  rU  rV  rX  rY  r   rZ  r[  r\  r]  r^  r_  r  r`  ra  rb  rc  rd  re  rf  rg  r   r   rh  ri  r   rj  rk  rl  rm  rn  ro  r   r   r   r   <module>   s  8

	
$h	 DA

