
    qh$                     L   S SK r S SKrS SKrS SKJrJr  S SKJr  S SKJ	r	J
r
Jr  S SKJr  SSKJr  SSKJrJr  SS	KJrJrJr  SS
KJr  \" \R2                  5      R4                  R4                  rS\\   S\4S jrSS\\   S\S\4S jjrS\\   S\4S jrS\S\4S jr SS jr!g)    N)IterableSequence)Path)Gamederegister_modregister_mod)logging   )file_parser)TextModStateall_text_mods)ModInfoget_cached_mod_infoupdate_cached_mod_info)TextModlinesreturnc                 Z   ^  S[         [           4U 4S jjnSR                  U" 5       5      $ )z
Joins a list of lines similarly to how markdown does it.

Adjacent lines get space separated, you need an entirely empty line to add a newline.

Args:
    lines: The lines to join.
Returns:
    The lines joined into a single string.
r   c               3      >#    Sn T H:  nUR                  5       nU(       a  U (       d  Sv   Uv   Sn M-  U (       d  Sv   Sn M<     g 7f)NT F
strip)no_spacelinestrippedr   s      aZ:\mnt\Skyabridged\SteamLibrary\steamapps\common\Borderlands 2\sdk_mods\text_mod_loader\loader.py_markdown_iterator4join_lines_markdown_like.<locals>._markdown_iterator   sB     Dzz|HI J s   AA r   strjoin)r   r   s   ` r   join_lines_markdown_liker$      s(        77%'((    entriesfinal_connectorc                 ^   ^ ^ S[         [           4U U4S jjnSR                  U" 5       5      $ )a  
Joins a list of strings as in a sentence listing them.

e.g. ["Alice", "Bob", "Carl"] -> "Alice, Bob, and Carl"

Args:
    entries: The list to join.
    final_connector: The word to use to connect the final two entries.
Returns:
    The list joined into a single string.
r   c               3   r   >#    TS S  H  n U v   Sv   M     [        T5      S:  a  Tv   Sv   TS   v   g 7f)Nz,    r   )len)entryr&   r'   s    r   _sentence_iterator)join_sentence.<locals>._sentence_iterator<   sC     Sb\EKJ " w<!!!Ibks   47r    r!   )r&   r'   r.   s   `` r   join_sentencer0   /   s-       77%'((r%   c                    [         R                  n[        [        SS U  5       5      5      nU(       d  U$ US   US   SR	                  S U 5       5      SR	                  S U 5       5      4nU HU  nS[        U5      -  n[        [        S	 U5      5      n[        U5      U:  d  M8  USR	                  [        U5      5      -  nMW     U$ )
a-  
Given a list of strings, try detect characters used to create ASCII art edges around them.

Will always return whitespace, so that you can pass the return value directly to `str.strip()`.

Args:
    lines: The list of lines to search though.
Returns:
    A string containing all detected characters.
Nc              3   @   #    U  H  oR                  5       v   M     g 7fNr   .0r   s     r   	<genexpr>'find_edge_characters.<locals>.<genexpr>V   s     'G

   r   r*   r    c              3   *   #    U  H	  oS    v   M     g7f)r   N r4   s     r   r6   r7   ]   s     3NDQN   c              3   *   #    U  H	  oS    v   M     g7f)r*   Nr:   r4   s     r   r6   r7   ^   s     4^TR^r;   g?c                 ,    U R                  5       (       + $ r3   )isalnum)cs    r   <lambda>&find_edge_characters.<locals>.<lambda>c   s    AIIKr%   )string
whitespacelistfilterr#   r,   set)r   strip_charsstripped_linesedgesedge	thresholdsymbolss          r   find_edge_charactersrM   H   s     ##K &'G'GHIN 	qr
3N33
4^44	E #d)O	v7>?w<)#2773w<00K	  r%   pathc           
      d  ^  [         R                  " U 5      n/ nUR                  R                  S5      =nb  UR                  US	   5        UR                  R                  S
5      =nb  UR                  S U 5       5        UR                  R                  S5      =nb  [        U5      nO4[!        UR"                  5      m[        U4S jUR"                   5       5      nU R                  5       R                  SUR                  ;   UR$                  UR&                  c  SO([(        R*                  R                  UR&                  5      UR                  R                  SU R
                  45      S	   U(       a  [-        U5      OSUR                  R                  SS5      S	   US.$ ! [         a}    [        R                  " SU R
                   S35        [        R                  " [        R                  " 5       5        U R                  5       R                  SSSU R
                  SSSS.s $ f = f)zn
Loads metadata for a specific mod.

Args:
    path: The path to load from.
Returns:
    The loaded mod info.
z0[TML]: Failed to extract mod metadata for file ''FNzText Mod Loaderr    )modify_time	ignore_mespark_service_idxrecommended_gametitleauthorversiondescriptionz@main-authorr   z@authorc              3   @   #    U  H  oR                  5       v   M     g 7fr3   r   )r5   xs     r   r6    load_mod_info.<locals>.<genexpr>   s     <1WWYYr8   z@descriptionc              3   D   >#    U  H  oR                  T5      v   M     g 7fr3   r   )r5   r   rG   s     r   r6   r[      s      /
0KJJ{##0Ks    z@tml-ignore-mez@titlez@version)r    )r   parse	Exceptionr	   warningnamedev_warning	traceback
format_excstatst_mtime
blimp_tagsgetappendextendr$   rM   untagged_linesrS   gamer   __members__r0   )rN   parse_resultblimp_authorsmain_authorauthor_listdescription_listrX   rG   s          @r   load_mod_inforr   j   s   
"((.   "M#..22>BBO[^,#..229==J<<< )3377GGT./?@ +<+F+FG. /
0<0K0K/
 

 yy{++%)@)@@);; %%-D43C3C3G3GHYHY3Z((,,X		|DQG2?-.EV**..z5A!D" ?  
J499+UVWXI0023  99;//!% $YY'	
 		
	
s   F( (BH/.H/c                     [        [        R                  " 5       5       H  n U R                  5         U R                  (       a  M&  U R
                  ==[        R                  :X  a  OA=[        R                  :X  a  O,=[        R                  :X  a  O=[        R                  :X  a  O  O/    [        R                  " U R                  5        [        U 5        M  =[        R                  :X  a  O-=[        R                  :X  a  O=[        R                   :X  a  O  M    M     ["        R%                  5        H  nUR'                  5       (       d  M  U[        ;   a  M&  [)        U5      =nc  [+        U5      n[-        X5        US   (       a  MV  [/        US   US   US   UUS   US   US   S	9n U [        U'   [1        U 5        M     g)
z'(Re-)Loads all text mods from binaries.NrR   rU   rV   rW   rS   rT   rX   )r`   rV   rW   filerS   rT   internal_description)rD   r   valuescheck_deletedprevent_reloadingstater   DisabledLockedHotfixesLockedBadServiceDeletedInactivepoprt   r   EnabledDisableOnRestartDeletedActiveBINARIES_DIRiterdiris_filer   rr   r   r   r   )modr-   mod_infos      r   load_all_text_modsr      sf    M((*+  ii/%%%-,--/,//.,../
 !!#((+s# &%%(E(E(EHbHbHbb' ,* %%'}} M!+E22H;$U+H"53K '"H%Y'&':;%&89!)-!8
  #eS5 (r%   )and)r   N)"rB   sysrb   collections.abcr   r   pathlibr   	mods_baser   r   r   	unrealsdkr	   r    r   anti_circular_importr   r   settingsr   r   r   text_modr   
executableparentr   r"   r$   r0   rM   rr   r   r:   r%   r   <module>r      s     
  .  8 8   = J J CNN#**11)HSM )c ):)8C= )3 )3 )2 # D5 5 5p2r%   