
    jke.                         d dl mZ d dlmZmZ ddlmZ d dlZd dlZdZ	dZ
dZd	d
ddddddddddZd Z G d dej                        Z G d de      Zd Zd Z G d de      Zy)    )sstruct)byteordsafeEval   )DefaultTableNz
		>	# big endian
		tableVersionMajor:			H
		tableVersionMinor:			H
		metaEntriesVersionMajor:	H
		metaEntriesVersionMinor:	H
		unicodeVersion:				L
		metaFlags:					H
		nMetaRecs:					H
z3
		>	# big endian
		glyphID:			H
		nMetaEntry:			H
z2
		>	# big endian
		labelID:			H
		stringLen:			H
MojikumiX4051UNIUnifiedBaseCharsBaseFontNameLanguageCreationDateFoundryNameFoundryCopyrightOwnerURIWritingScriptStrokeCountIndexingRadical)r   r                        
      c                 b    	 t         |    }t        |      S # t        $ r d}Y t        |      S w xY w)NzUnknown label)METALabelDictKeyErrorstr)labelIDlabels     A/usr/lib/python3/dist-packages/fontTools/ttLib/tables/M_E_T_A_.pygetLabelStringr#   >   s=     g& u:   u: s   	 ..c                   (    e Zd Zg Zd Zd Zd Zd Zy)table_M_E_T_A_c                    t        j                  t        ||       \  }}g | _        t	        | j
                        D ]  }t        j                  t        |t                     \  }}| j                  dk(  r&t        j                  d|d d       \  |_        |dd  }nR| j                  dk(  r&t        j                  d|d d       \  |_        |dd  }nJ dt        | j                        z          g |_        ||j                  d  }t	        |j                        D ]  }t        j                  t        |t!                     \  }}| j                  dk(  r&t        j                  d|d d       \  |_        |dd  }n%t        j                  d|d d       \  |_        |dd  }||j                  |j                  |j"                  z    |_        |j                  j'                  |        | j                  j'                  |        y )Nr   >Hr   r   r   zLThe metaFlags field in the META table header has a value other than 0 or 1 :)r   unpack2METAHeaderFormatglyphRecordsrange	nMetaRecsMETAGlyphRecordFormatGlyphRecord	metaFlagsstructunpackoffsetr   
stringRecs
nMetaEntryMETAStringRecordFormatStringRecord	stringLenstringappend)	selfdatattFontdummynewDataiglyphRecordj	stringRecs	            r"   	decompileztable_M_E_T_A_.decompileI   s    )94Fwt~~& 	2A#*??%w$ K ~~"'-}}T72A;'G$#!!"+1$'-}}T72A;'G$#!!"+b$..)*q &(K";--/0G;112 9%,__*G\^&"	7 >>Q&)/tWRa[)I&Y%%abkG)/tWRa[)I&Y%%abkG#'$$y'7'7):M:M'M$	  &&--i89 $$[1?	2    c                    d}t        | j                        | _        d}|dk7  rR|dz   }|dkD  rt        j                          t        j                  t        |       }t        |      | j                  dd| j                  dz  z  z   z  z   }dd| j                  dz  z  z   }| j                  D ]h  }||_	        |j                  dkD  r*| j                  dz  dk(  r| j                  dz   | _        d} n(||j                  |       z   }||j                  |z  z   }j |dk(  rd}|}| j                  D ]  }|j                  t        |      k(  sJ dt        |      z          |j                  D ]e  }	||	_	        |	j                  dkD  r*| j                  dz  dk(  r| j                  dz   | _        d} }||	j                  |       z   }||	j                  z   }g  |dk(  rd}| j                  dz  dk(  r|d	k  r| j                  dz
  | _        d}| j                  D ]W  }|j                  D ]F  }	|	j                  t        |      k(  sJ d
t        |	j                        z          ||	j                  z   }H Y |dk7  rRS )Nr   r   r   r   r   i  z7Glyph record offset did not compile correctly! for rec:i   z4String offset did not compile correctly! for string:)lenr*   r,   pdb	set_tracer   packr)   r/   r2   compiler4   r   r3   r7   r8   )
r:   r<   offsetOKcountmetaDatastringRecsOffsetstringRecSizeglyphRecstringOffsetrB   s
             r"   rK   ztable_M_E_T_A_.compilem   s   T../!mAIEqy||$4d;H"8}t~~A!+,,0   T^^a%7 88M -- 	"2OOe+4>>A3E!2K%)^^a%7DN!H#h&6&6t&<<#3''-7$ 	 2~ ,L -- F#+  LsP  
 "*!4!4 FI'3I$!((508Jq7P)-!);#%')*;*;D*AAH#/)2E2E#ELFF 2~!#)u0D!%!!3 !-- ;!)!4!4 ;I$++s 0  MPS!((Q  
  ()*:*::H;;k !m| rD   c                 2   |j                  d       |j                          t        j                  t              \  }}}|D ]1  }t        | |      }|j                  ||       |j                          3 | j                  D ]  }|j                  ||        y )NzPLengths and number of entries in this table will be recalculated by the compilervalue)	commentnewliner   	getformatr)   getattr	simpletagr*   toXML)	r:   writerr<   formatstringnamesfixesnamerU   rQ   s	            r"   r[   ztable_M_E_T_A_.toXML   s    ^	
 	%,%6%67G%H"eU 	DD$'ET/NN	 )) 	+HNN66*	+rD   c                 X   |dk(  rt        | d      sg | _        t               }| j                  j                  |       |D ]-  }t	        |t
              r|\  }}}|j                  ||||       / d|_        t        |j                        |_
        y t        | |t        |d                y )Nr.   r*   rF   rU   )hasattrr*   r.   r9   
isinstancer   fromXMLr2   rG   r3   r4   setattrr   )r:   r`   attrscontentr<   rQ   elements          r"   rd   ztable_M_E_T_A_.fromXML   s    = 40$&!"}H$$X." ?gs+'.$eW  ugv>	?
 !HO"%h&9&9":HD$w 89rD   N)__name__
__module____qualname__dependenciesrC   rK   r[   rd    rD   r"   r%   r%   F   s    L"2HBH+:rD   r%   c                   *    e Zd Zd Zd Zd Zd Zd Zy)r.   c                 <    d| _         d| _        d| _        g | _        y )NrF   )glyphIDr4   r2   r3   r:   s    r"   __init__zGlyphRecord.__init__   s    rD   c                    |j                  d       |j                          |j                  d| j                         |j                          |j                  d| j                         |j                          | j
                  D ]  }|j                  ||        |j                  d       |j                          y )Nr.   rp   rT   r4   )begintagrW   rZ   rp   r4   r3   r[   endtag)r:   r\   r<   rB   s       r"   r[   zGlyphRecord.toXML   s    &$,,7T__= 	,IOOFF+	,m$rD   c                    |dk(  rlt               }| j                  j                  |       |D ]'  }t        |t              r|j                  ||||       ) t        |j                        |_        y t        | |t        |d                y )Nr6   rU   )r6   r3   r9   rc   r   rd   rG   r8   r7   re   r   )r:   r`   rf   rg   r<   rB   rh   s          r"   rd   zGlyphRecord.fromXML   s    >!$IOO""9-" @gs+!!$w?@ #&i&6&6"7ID$w 89rD   c                    t        j                  t        |       }|j                  dk(  r!t	        j                  d| j
                        }n/|j                  dk(  r t	        j                  d| j
                        }|z   }|S Nr   r'   r   z>L)r   rJ   r-   r/   r0   r2   r:   parentTabler;   datums       r"   rK   zGlyphRecord.compile   se    ||148  A%KKdkk2E""a'KKdkk2Ee|rD   c                     dt        | j                        z   dz   t        | j                        z   dz   t        | j                        z   dz   S )NzGlyphRecord[ glyphID: z, nMetaEntry: 
, offset:  ])r   rp   r4   r2   rq   s    r"   __repr__zGlyphRecord.__repr__   s]    $$,,  $//"# 	
 $++ 	
rD   N)ri   rj   rk   rr   r[   rd   rK   r   rm   rD   r"   r.   r.      s    

:	
rD   r.   c                 ^   t               }t        |       }d}||k  rd}| ||dz    dk(  rd}n| ||dz    dk(  rd}|r=||z   }|}| |   dk7  r|dz   }| |   dk7  r| || }|t        t        d|z               z   }n|t        t	        | |               z   }|dz   }||k  r|j                  d	      S )
Nr   r   &#xr   z&amp;#x;r   0xutf_8)r   rG   chrevalr   encode)r8   uStringstrLenr?   	prefixLenrA   valStrs          r"   mapXMLToUTF8r     s    eG[F	A
f*	!a!e%IAA)+IIAA)s"E )s"Aa[FD$7 88GGF1I$6 77GE! f*$ >>'""rD   c                     | j                  d      }d} |D ]4  }t        |      }|dk  r|dkD  r| |z   } | dz   t        |      dd  z   dz   } 6 | S )Nr          r   r   r   )decodeordhex)r8   r   uCharr?   s       r"   mapUTF8toXMLr     sg    mmG$GF 7JH1t8e^Fe^c!fQRj036F7 MrD   c                   $    e Zd Zd Zd Zd Zd Zy)r6   c                    |j                  d       |j                          |j                  d| j                         |j	                  t        | j                               |j                          |j                          |j                  dt        | j                               |j                          |j                  d       |j                          y )Nr6   r    rT   r8   )	rt   rW   rZ   r    rV   r#   r   r8   ru   )r:   r\   r<   s      r"   r[   zStringRecord.toXML,  s    '$,,7~dll34dkk)BCn%rD   c                     |D ]J  }t        |t              r|\  }}}|d   }|dk(  rt        |      | _        5t	        | |t        |             L y )NrU   r8   )rc   r   r   r8   re   r   )r:   r`   rf   rg   r<   rh   rU   s          r"   rd   zStringRecord.fromXML8  sW     	5G'3'#* D%'NEx*51dHUO4	5rD   c                    t        j                  t        |       }|j                  dk(  r!t	        j                  d| j
                        }n/|j                  dk(  r t	        j                  d| j
                        }|z   }|S rx   )r   rJ   r5   r/   r0   r2   ry   s       r"   rK   zStringRecord.compileC  se    ||2D9  A%KKdkk2E""a'KKdkk2Ee|rD   c                     dt        | j                        z   dz   t        | j                        z   dz   t        | j                        z   dz   t        | j                        z   dz   | j
                  z   dz   S )NzStringRecord [ labelID: z aka r}   z
, length: z
, string: r~   )r   r    r#   r2   r7   r8   rq   s    r"   r   zStringRecord.__repr__L  s    &$,,  T\\*+ 	
 $++  $..!"  kk	 
	
rD   N)ri   rj   rk   r[   rd   rK   r   rm   rD   r"   r6   r6   +  s    
	5
rD   r6   )fontTools.miscr   fontTools.misc.textToolsr   r   r   r   rH   r0   r)   r-   r5   r   r#   r%   objectr.   r   r   r6   rm   rD   r"   <module>r      s    " 6  
 	    F:\.. F:R1
& 1
n#2	.
6 .
rD   