ó
ø¨ÖTc           @   s´  d  d l  Z  d  d l Z d  d l m Z m Z d  d l j j Z y d  d l	 Z	 e
 a Wn e k
 ro e a n Xe d „ Z e e d „ Z d d „ Z d d „ Z d	 f  d
 „  ƒ  YZ e d k r°d GHd GHd GHHe e  j ƒ d k  r0d GHd GHd GHd GHd GHd GHd GHd GHd GHd GHd GHd GHe  j ƒ  n  e  j d Z e d d f k rÖe j j e ƒ rÄe e d ƒ Z e j d ƒ Z e j ƒ  e d  k r£d Z d! GHn d Z d" GHe  j j  d e ƒ n d# GHe  j ƒ  n  e d k rÄe  j d Z! e e  j ƒ d k re  j d$ n e  j d d% Z" e e  j ƒ d& k rDe  j d n e j j# e" ƒ d d' Z$ d( e j j# e! ƒ d GHe ƒ  j% e! ƒ Z& e& r¢d) GHe  j ƒ  n  d* GHd+ GHe& j' e" e$ ƒ d, GHn  e d k r­e  j d Z! e e  j ƒ d k rÿe  j d$ n$ d- j( e  j d j# d- ƒ d   ƒ d. Z" d( e j j# e! ƒ d GHy e ƒ  j) e! e ƒ Z& Wn e* j+ k
 ryd/ GHe Z& n Xe& rŽe  j ƒ  n  d* GHd0 GHe& j, e" ƒ d1 GHn  n  d S(2   iÿÿÿÿN(   t	   b64encodet	   b64decodec         C   sK   d } t  t |  ƒ } | r( | j ƒ  n  x | D] } | d >| B} q/ W| S(   Ni    i   (   t   mapt   ordt   reverse(   t   asciit   LittleEndiant   rett   lt   i(    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pyt   AscDec   s     c         C   s¹   g  } x. |  d k r6 | j  d |  d @ƒ |  d L}  q	 W| r t | ƒ | k r] | | } n  t | ƒ | k  r d g | t | ƒ | } q n  | r£ | j ƒ  n  d j t t | ƒ ƒ S(   Ni    iÿ   i   t    (   t   insertt   lenR   t   joinR   t   chr(   t   dect   lengthR   t   out(    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pyt   DecAsc"   s    ! i   c         C   s   |  | r |  d |  | S|  S(   Ni   (    (   R   t   r(    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pyt   zipalign3   s    i    c         C   så   d | d } t  |  ƒ rµ |  j s4 |  j j ƒ  rD | d |  _ n  |  j s^ |  j j ƒ  rj | |  _ n  x |  D] }  t |  | d ƒ qq W|  j s¦ |  j j ƒ  rá | |  _ qá n, | rá |  j sÕ |  j j ƒ  rá | |  _ n  d  S(   Ns   
s   	i   (   R   t   textt   stript   tailt	   indentXML(   t   elemt   levelR	   (    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pyR   5   s     t   UGOc           B   sP   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d d d „ Z e d „ Z	 RS(	   c         C   s   t  |  _ d  S(   N(   t   Falset   Loaded(   t   self(    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pyt   __init__F   s    c         C   s2   t  | d ƒ } |  j | j ƒ  ƒ } | j ƒ  | S(   Nt   rb(   t   opent   Readt   readt   close(   R   t   patht   fR   (    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pyt   ReadFileH   s    
c         C   s2  | d  d k r t  St | d d !t ƒ } | d k rR t | d d !t ƒ |  _ n  | d k rz t | d d !t ƒ |  _ n  | d k rœ d G| GHd	 GHd
 GHn  d | d } | d k ræ t d „  | | | |  j !j d ƒ Dƒ ƒ } n g  } | d k r)| t | |  j ƒ t | |  j ƒ |  j !} n  g  |  _ g  |  _	 d } d } d } g  }	 xÏ| D]Ç}
 t
 |
 d ƒ } | d k r¥|  j j d t t
 |
 d ƒ f ƒ qZn]| d k rt
 |
 d ƒ } g  t d d ƒ D] } t |
 | ƒ j d ƒ ^ qÑ} |  j j d | | f ƒ qZní| d k r||
 d } t |
 d ƒ j d ƒ } t
 |
 d ƒ d k } |  j j d | | | f ƒ qZn†| d k rÊ|
 d } t |
 d ƒ j d ƒ } |  j j d | | f ƒ qZn8| d k r|
 d } t
 |
 d ƒ } t |
 d ƒ j d ƒ } |
 d } d  } | d k  rÚ| rÚ| d k r:qÚ| | | d !d k r"| | | d !} | d 7} t ršt j ƒ  j | ƒ } | j d  } ~ n d | } | d 7} | d |	 k rþd } x$ d | | f |	 k rê| d 7} qÇWd | | f } n  | d | f } |	 j | d ƒ qÚ| j d d ƒ } | sQd  | } | d 7} n  | d! |	 k r¡d } x$ d" | | f |	 k r| d 7} qjWd | | f } n  | d! | | | d# !f } |	 j | d! ƒ | d# 7} n  |  j j d$ | | | | | f ƒ qZn  |  j j d% |
 f ƒ d& G|
 GHqZWt |  _ |  S('   Ni   t   UGARi   i   i   i   i   s:   Warning: This UGO file has more than the 2 known sections:s4   Please send this UGO file to pbsds over at pbsds.nets/   This file could possibly be read incorrectly...c         s   s   |  ] } | j  d  ƒ Vq d S(   s   	N(   t   split(   t   .0R	   (    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pys	   <genexpr>g   s    s   
i    t   layouti   s   UTF-16LEs   topscreen texti   t   categoryt   postid   s    t   PARAi   iüÿÿÿs   embedded tmb #%is   .tmbs	   %s_%i.tmbs   %s_%iR   t   ignores   nameless ntft %is   .ntfts
   %s_%i.ntfti   t   buttont   unknowns   Unknown UGO item discovered:(   R   R
   t   Truet   TableLengtht   ExtraLengtht   tupleR*   R   t   Itemst   Filest   intt   appendR   t   xrangeR   t   decodet   Nonet   HasPPMt   PPMt   TMBR#   t   CurrentFilenamet   encodeR   (   R   t   datat   Sectionst   headerlengtht   TableOfContentst	   ExtraDatat   post   tmbcountt	   ntftcountt   namesR	   t   typet   numt   nt   labelst   linkt   labelt   selectedt   traitt   othert   filet   tmbt   namet   j(    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pyR#   M   s®     	01		#5







"	c         C   sP   |  j  rL |  j ƒ  } | rE t | d ƒ } | j | ƒ | j ƒ  t St Sn  d  S(   Nt   wb(   R   t   PackR"   t   writeR%   R3   R   (   R   R&   R   R'   (    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pyt	   WriteFileë   s    	
c         C   s¼  |  j  s t Sd d  g } g  } g  } xƒ|  j D]x} | d d k rb | j d j | d ƒ ƒ q/ | d d k r¥ | j d j d g t t t | d ƒ ƒ ƒ ƒ q/ | d d k rG| d \ } } t | ƒ } x1 t	 d	 ƒ D]# } t
 | | j d
 ƒ ƒ | | <qÞ W| j d j d | | d | d | d | d | d f ƒ ƒ q/ | d d k r´| d \ } } }	 t
 | j d
 ƒ ƒ } t d |	 ƒ }	 | j d j d | | |	 f ƒ ƒ q/ | d d k r| d \ } } t
 | j d
 ƒ ƒ } | j d j d | | f ƒ ƒ q/ | d d k rž| d \ }
 } } } } t |
 ƒ }
 t
 | j d
 ƒ ƒ } | j d j d | |
 | g t | ƒ ƒ ƒ | r§| j | d ƒ q§q/ d G| GHq/ Wd j | ƒ } d j | ƒ } d } | r0| d 7} | j t t | ƒ d t ƒ ƒ t | ƒ d r0| d d t | ƒ d 7} q0n  | r‘| d 7} | j t t | ƒ d t ƒ ƒ t | ƒ d r‘| d d t | ƒ d 7} q‘n  t | d t ƒ | d <d j | ƒ | | S(   NR)   i    R2   s   	i   R,   t   0s   topscreen texti   s   UTF-16LEt   1i   i   i   R-   t   2R.   t   3R1   t   4s!   Unrecognized entry in self.Items:s   
R   t    (   R   R   R=   R7   R:   R   R   t   strt   listR;   R    RB   R   R   R3   (   R   t   HeaderRF   RG   R	   RO   RM   RP   RQ   RR   RS   RT   RU   RD   (    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pyRZ   õ   s`    	 3!B%",
"
"s   content.ugoxmls   content.ugoxml embeddedc         C   s_  |  j  s t St j j | ƒ \ } } t j d ƒ } g  } xf|  j D][} | d d k r® t j | d d | d d ƒ} x+ | d d D] } | t j | d ƒ _	 q‰ WqD qD | d d k rt j | d ƒ } x- | d D]! } t
 | ƒ t j | d ƒ _	 qÛ WqD qD | d d	 k rt j | d
 ƒ } | d \ }	 }
 x# |	 D] } | t j | d ƒ _	 q?Wt
 |
 ƒ t j | d ƒ _	 qD qD | d d k rt j | d ƒ } | d \ } } } | t j | d ƒ _	 | t j | d ƒ _	 t
 | ƒ j ƒ  t j | d ƒ _	 qD | d d k rat j | d ƒ } | d \ } } | t j | d ƒ _	 | t j | d ƒ _	 qD | d d k rD t j | d ƒ } | d \ } } } } } | t j | d ƒ _	 | t j | d ƒ _	 t
 | ƒ t j | d ƒ _	 x] t | ƒ D]O \ } } t j | d ƒ } | | _	 | d k rî| d k rîd | j d <qîqîW| rŸt j j | | d ƒ t j | d ƒ _	 | j t j j | | d ƒ | d f ƒ qŸqD qD Wt | ƒ | j | t j | d d ƒf ƒ t j j t j j | | ƒ ƒ st j t j j | | ƒ ƒ n  xI | D]A \ } } t t j j | | ƒ d ƒ } | j | ƒ | j ƒ  qWd  S(   Nt   ugo_xmli    R2   t   rawRL   i   t   valueR,   s   topscreen textt   titleRQ   RM   R-   t   addressRR   R.   R1   RS   i   t   starst   tipt   embedded_filet   encodings   UTF-8RY   (   R   R   t   osR&   R*   t   ETt   ElementR7   t
   SubElementR   Rc   t   lowert	   enumeratet   attribR   R:   R   t   tostringt   isdirt   mkdirR"   R[   R%   (   R   t   xmlnamet   folderR&   Rf   t   filesR	   R   Rh   RO   RM   RQ   RP   RR   RS   RT   RU   RN   t   entryRW   RC   R'   (    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pyt   WriteXML;  sp    	  $	(4
"!c         C   sá  t  j | ƒ j ƒ  } t j j | ƒ d } g  } x—| D]} | j d k rì d | j k rn | sj d GHn  t S| j d g } xU | D]M } | j d k r³ | s¯ d | j GHn  t S| j	 | j
 rË | j
 n d ƒ q… W| j	 d | f ƒ q8 | j d	 k rŽg  } xt | D]l } | j d k r6| s2d
 | j GHn  t S| j
 j ƒ  s^| sZd | j GHn  t S| j	 t | j
 ƒ ƒ qW| j	 d	 | f ƒ q8 | j d k rÉd d d d d g }	 d }
 d } t } xé | D]á } | j d/ k rù| sõd | j GHn  t S| j d k rL| d k r&| s"d GHn  t S| j
 r?| j
 |	 | <n  | d 7} qË| j d k rË| rs| sod GHn  t S| j
 j ƒ  s”| sd GHn  t St | j
 ƒ }
 t } qËqËW| j	 d |	 |
 f ƒ q8 | j d k r$d  } d  } d  } x| D]} | j d0 k r| sd | j GHn  t S| j d k rjt | t ƒ rO| sKd GHn  t S| j
 ra| j
 n d } qñ| j d k rµt | t ƒ rš| s–d GHn  t S| j
 r¬| j
 n d } qñ| j d k rñ| t t f k rè| säd GHn  t S| j
 d j ƒ  d k } qñqñW| j	 d | | | f ƒ q8 | j d k r#d  } d  } x¤ | D]œ } | j d k r—t | t ƒ r|| sxd GHn  t S| j
 rŽ| j
 n d } qF| j d k rFt | t ƒ rÇ| sÃd  GHn  t S| j
 rÙ| j
 n d } qFqFWd  | | f k r
| sd! GHn  t S| j	 d | | f ƒ q8 | j d" k r²d  } d  } d  } g  } d  } x| D]} | j d1 k r…| sd% | j GHn  t S| j d k rÐt | t ƒ rµ| s±d& GHn  t S| j
 rÇ| j
 n d } qW| j d k rt | t ƒ r | süd' GHn  t S| j
 r| j
 n d } qW| j d# k r~t | t ƒ rK| sGd( GHn  t S| j
 j ƒ  sl| shd) GHn  t St | j
 ƒ } qW| j d k r¯| j	 | j
 r¥| j
 n d ƒ qW| j d$ k rW| d  k rÜ| sØd* GHn  t St j j | | j
 ƒ } t j j | ƒ s$| sd+ | j
 GHn  | GHt St | d, ƒ } t j j | j
 ƒ d | j ƒ  f } | j ƒ  qWqWWd  | | | f k r| sŒd- GHn  t S| j	 d" | | | | | f ƒ q8 | s8 d. | j GHq8 q8 W| |  _ t |  _ |  S(2   Ni    Rg   RL   s2   Invalid formatting. <raw> without "type" attributeRh   s/   Invalid formatting. <%s> found within <unknown>R   R2   R,   s.   Invalid formatting. <%s> found within <layout>s2   Invalid entry. <value> in <layout> is not a numberRi   RQ   RM   s-   Invalid formatting. <%s> found within <title>i   s3   Invalid formatting. More than 5 <labels> in <title>i   s-   Invalid formatting. Multible <num> in <title>s0   Invalid entry. <num> in <title> is not a number!s   topscreen textR-   Rj   RR   s0   Invalid formatting. <%s> found within <category>s8   Invalid formatting. multible <address> within <category>s6   Invalid formatting. multible <label> within <category>s9   Invalid formatting. multible <selected> within <category>t   t1R.   s2   Invalid formatting. Multible <label> within <post>s4   Invalid formatting. Multible <address> within <post>s@   Invalid formatting. <button> lacks either a <address> or <label>R1   RS   Rm   s.   Invalid formatting. <%s> found within <button>s4   Invalid formatting. Multible <label> within <button>s6   Invalid formatting. Multible <address> within <button>s4   Invalid formatting. Multible <trait> within <button>s2   Invalid entry. <trait> in <button> is not a numbers<   Invalid formatting. Multible <embedded_file> within <button>s,   Invalid entry. Embedded file "%s" not found!R!   sM   Invalid formatting. <button> lacks either a <trait>, a <address> or a <label>s/   Invalid formatting: <%s> found within <ugo_xml>(   s   labels   num(   s   labels   addresss   selected(   s   labels   addresss   traits   values   embedded_file(   Rp   t   parset   getrootRo   R&   R*   t   tagRu   R   R:   R   t   isdigitR9   R3   R=   t
   isinstanceRc   Rs   R   t   isfileR"   R$   R%   R7   R   (   R   t   xmlfilet   silentRf   t   xmlpathR7   R   t   valuesRh   RO   RM   RH   t   numsetRP   RQ   RR   RS   RT   RU   R&   R'   (    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pyt   ReadXML‚  sP     #    	                "  % "		(
   t   __name__t
   __module__R    R(   R#   R\   RZ   R}   R3   RŠ   (    (    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pyR   E   s   			ž	
	FGt   __main__s$                 ==      UGO.py      ==s%                ==      by pbsds      ==s$                 ==       v0.93      ==i   s   Usage:s7         UGO.py [<mode>] <input> [<output> [<foldername>]]R   s         <Mode>:sM             -d: Converts the UGO file in <input> to a UGOXML file with the samesL                 name, unless <output> is specified. Any embedded files will besM                 written to a folder called UGOXML-filename + " embedded" unlesss$                 <foldername> is given.s2                 <foldername> is relative to the XML.sM             -e: Converts the UGOXML file in <input> to a UGO file with the sames1                 name, unless <output> is specified.sF             If mode is not specified, it will try to find out for itselfi   s   -ds   -eR!   R)   s'   No mode specified. UGO -> UGOXML chosens'   No mode specified. UGOXML -> UGO chosens   Invalid <mode> given!i   t   xmli   s	    embeddeds   Reading %s...s)   Error!
 The given file is not a UGO file!s   Done!s   Writing XML...s   Done!

Have a nice day!t   .s   .ugos/   Error!
The given file is not in the XML format!s   Writing UGO...t   Done(-   t   sysRo   t   base64R    R   t   xml.etree.ElementTreet   etreet   ElementTreeRp   R?   R3   R>   t   ImportErrorR   R
   R=   R   R   R   R   R‹   R   t   argvt   exitt   modeR&   t   existsR"   R'   R$   t   magicR%   R   t   inputt   outputR*   t
   foldernameR(   t   ugoR}   R   RŠ   t   ELt
   ParseErrorR\   (    (    (    sD   C:\Users\pbsdsjhgfjhgfjhg\Desktop\Flipnote-Player\Hatenatools\UGO.pyt   <module>   s”   

ÿ ã
3<I
