
    jke~                        d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
 ddlmZmZmZmZ ddlmZ d dlZd dlZd dlZd dlZ ej,                  e      ZdZdZ G d	 d
ej"                        Z G d de      Zd Zd Zd Z e d        Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)dZ* G d de      Z+d Z, e,e      Z- e,e      Z. G d de      Z/ G d d e      Z0 G d! d"e0e.e+      Z1 G d# d$e/e.e+      Z2 G d% d&e/e+      Z3 G d' d(e0e-e+      Z4 G d) d*e/e-e+      Z5 G d+ d,e+      Z6 G d- d.e.e6      Z7 G d/ d0e-e6      Z8e1e2e3e4e5e7e8d1Z9y)2    )sstruct)bytechrbyteord	bytesjoinstrjoinsafeEvalreadHexhexStrdeHexStr   )BigGlyphMetricsbigGlyphMetricsFormatSmallGlyphMetricssmallGlyphMetricsFormat)DefaultTableNz"
	> # big endian
	version: 16.16F
z;
	> # big endian
	glyphCode: H
	xOffset:   b
	yOffset:   b
c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)table_E_B_D_T_EBLCc                     t         |   S N)ebdt_bitmap_classes)selfimageFormats     A/usr/lib/python3/dist-packages/fontTools/ttLib/tables/E_B_D_T_.pygetImageFormatClassz"table_E_B_D_T_.getImageFormatClass/   s    ";//    c                    t        j                  t        ||        i }|| j                  j                     }g | _        |j                  D ]  }i }| j
                  j                  |       |j                  D ]o  }t        |j                  |j                        }|D ]H  \  }	}
|
|v r||
   }n4|t        |
    }| j                  |j                        } |||      }|||
<   |||	<   J q  y r   )r   unpack2ebdtTableVersionFormat	__class__locatorName
strikeDatastrikesappendindexSubTableszipnames	locationsslicer   r   )r   datattFont	glyphDictlocator	curStrikebitmapGlyphDictindexSubTabledataItercurNamecurLoccurGlyphcurGlyphDataimageFormatClasss                 r   	decompileztable_E_B_D_T_.decompile2   s   
 	.d; 	
 334  	8I OOO""?3!*!9!9 8}22M4K4KL'/ 8OGV *#,V#4'+E6N';+/+C+C)55,( $4L&#I,4	&)/7OG,88	8r   c                 X   g }|j                  t        j                  t        |              t	        |d         }i }|| j
                  j                     }t        |j                  | j                        D ]  \  }}|j                  D ]  }g }	|j                  D ]{  }
||
   }t        |      }||vrO|j                  |      }|j                  |      }|}|t	        |      z  }|}|j                  |       ||f}|||<   n||   }|	j                  |       } |	|_          t!        |      S )Nr   )r$   r   packr   lenr    r!   r&   r#   r"   r%   r'   idcompilepadBitmapDatar(   r   )r   r+   dataListdataSizer,   r-   r.   curGlyphDictcurIndexSubTabledataLocationsr2   glyphobjectIdr*   	startByteendBytedataLocs                    r   r<   ztable_E_B_D_T_.compileU   sA   %;TBCx{#
 	 334'*7??DOO'L 	;#I|$-$<$< ;  "/55 2G )1E!%yHy0$}}V4/==dC$,	 CI-"* -#,g"6.5	(+"+H"5!((1/26 .; *;;	;@ ""r   c                 2   |j                   dv r|| j                  j                     }t        |j                  | j
                        D ]v  \  }}|j                  D ]b  }|j                  D ]Q  }||   }t        |d      r|j                  |_
        n|j                  |_
        |j                  j                  |_        S d x |j                  dd| j                  fg       |j!                          || j                  j                     }t#        | j
                        D ]w  \  }	}
|j%                  dd|	fg       |j!                          |
j'                         D ]  \  }}|j)                  |	|||        |j+                  d       |j!                          y y )N)rowbitwisemetricsheaderversion
strikedataindex)bitmapGlyphDataFormatr    r!   r&   r#   r"   r%   r'   hasattrrK   exportMetricsbitmapSizeTablebitDepthexportBitDepth	simpletagrM   newline	enumeratebegintagitemstoXMLendtag)r   writerr+   r-   r.   r@   rA   r2   rC   strikeIndexr/   	curBitmaps               r   r[   ztable_E_B_D_T_.toXML   s    ''+==T^^778G+.w+P 
R'	<(1(@(@ 	R$#3#9#9 R ,W 5 #5)427--E/2B2J2JE//8/H/H/Q/Q,R	R
R 	Y$=#>?334,5doo,F 	(KOOLG[+A*BCNN&5&;&;&= F"WffEFMM,'NN	r   c                    |dk(  rt        |d         | _        y |dk(  rYt        | d      sg | _        t        |d         }i }|D ]  }t	        |t
              s|\  }}}|dd  j                  t        dd        rbt        |t        t              d        }|d   }	| j                  |      }
 |
d d       }|j                  ||||       |	|vs
J d|	z         |||	<   t        j                  d	|| j                  j                          |t        | j                        k\  r2| xj                  d g|d
z   t        | j                        z
  z  z  c_        | j                  |   J d       || j                  |<   y y )NrL   rM   rN   r"   rO      namez<Duplicate glyphs with the same name '%s' in the same strike.z%s being ignored by %sr   zDuplicate strike EBDT indices.)r   rM   rQ   r"   
isinstancetuple
startswith_bitmapGlyphSubclassPrefixr:   r   fromXMLlogwarningr    __name__)r   rb   attrscontentr+   r^   r/   elementr   	glyphNamer6   r4   s               r   rg   ztable_E_B_D_T_.fromXML   s   8#E)$45DL\!4."$"5>2K O" Y!'51'.$eW8&&'A!"'EF"*44N0O0Q+R"SK %fI'+'?'?'L$/d;H$$T5'6B$O; V#$; 2:OI.KK 8$@W@WX!Y( c$//22D6[1_s4???S-S#TT,40/04+:DOOK(? "r   N)	rj   
__module____qualname__r!   r   r7   r<   r[   rg    r   r   r   r   (   s"    K
0!8F0#d:";r   r   c                       e Zd Zd Zd Zy)EbdtComponentc                 F   |j                  dd| j                  fg       |j                          t        j                  t
              d   dd  D ]/  }|j                  |t        | |             |j                          1 |j                  d       |j                          y )NebdtComponentrb   r   value)	rY   rb   rW   r   	getformatebdtComponentFormatrV   getattrr\   )r   r]   r+   componentNames       r   r[   zEbdtComponent.toXML   s    6499*=)>?$../BCAFqrJ 	M]'$2NONN	 	o&r   c                    |d   | _         t        t        j                  t              d   dd        }|D ]N  }t        |t              s|\  }}}||v rt        |d         t        |       |<   9t        j                  d|       P y )Nrb   r   rw   z1unknown name '%s' being ignored by EbdtComponent.)rb   setr   rx   ry   rc   rd   r   varsrh   ri   )r   rb   rk   rl   r+   componentNamesrm   s          r   rg   zEbdtComponent.fromXML   s    &M	W../BCAFqrJK 	WGgu-#* D%~%#+E'N#;T
4 OQUV	Wr   Nrj   ro   rp   r[   rg   rq   r   r   rs   rs      s    
Wr   rs   c                     g }| D ][  }t        |      }t        d|      }t        |      D ]/  }|dz  r|j                  d       n|j                  d       |dz	  }1 ||z  }] t	        |      S )N   r   10)r   minranger$   r   )r*   numBits
binaryListcurByterw   
numBitsCutis          r   _data2binaryr      s    J 	 G_
z" 	As{!!#&!!#&QJE	 	:	 :r   c                     g }t        dt        |       d      D ]F  }| ||dz    }d}t        |      D ]  }|dz  }|dk(  s|dz  } |j                  t	        |             H t        |      S )Nr   r   r   r   )r   r:   reversedr$   r   r   )binarybyteListbitLoc
byteStringr   curBits         r   _binary2datar      s    H3v;* *FVaZ0
z* 	FlG}1	 	()* Xr   c                 H      G  fddt               } |       j                  S )Nc                       e Zd Z fdZy)_memoize.<locals>.memodictc                 ^     |      }t        |t              st        |      dk(  r|| |<   |S )Nr   )rc   intr:   )r   keyretfs      r   __missing__z&_memoize.<locals>.memodict.__missing__  s.    C&C#s#s3x1}S	Jr   N)rj   ro   rp   r   )r   s   r   memodictr      s    	r   r   )dict__getitem__)r   r   s   ` r   _memoizer      s    4  :!!!r   c                     t        | t              r't        |       dk7  rt        t	        t
        |             S t        |       }d}t        d      D ]  }|dz  }||dz  z  }|dz	  } t        |      S )zu
    >>> bin(ord(_reverseBytes(0b00100111)))
    '0b11100100'
    >>> _reverseBytes(b'\x00\xf0')
    b'\x00\x0f'
    r   r   r   )	rc   bytesr:   r   map_reverseBytesr   r   r   )r*   byteresultr   s       r   r   r     sw     $3t9>]D1224=DF1X 1$(qy 6?r   c                     |j                  d       |j                          |j                  |j                         |j	                  d       |j                          y )Nrawimagedata)rY   rW   dumphex	imageDatar\   )r^   rn   bitmapObjectr]   r+   s        r   _writeRawImageDatar   $  s@    
OON#
NN
NN<))*
MM.!
NNr   c                 $    t        |      | _        y r   )r	   r   )r   rb   rk   rl   r+   s        r   _readRawImageDatar   ,  s    $W-Lr   c                    |j                   }|` |j                  }|`|j                  d||j                  |j                         |j                          t        |j                        D ]B  }|j                  |||      }|j                  dt        |             |j                          D |j                  d       |j                          y )NrowimagedatarT   widthheightrT   rK   rI   rv   )rR   rU   rY   r   r   rW   r   getRowrV   r
   r\   )	r^   rn   r   r]   r+   rK   rT   curRowrowDatas	            r   _writeRowImageDatar   0  s    ((G"**H#
OOw~~   NN' %%fx%QfWo6 MM.!
NNr   c                 .   t        |d         }t               }t        |d         |_        t        |d         |_        g }|D ]<  }t	        |t
              s|\  }}	}|dk(  s |j                  t        |	d                > | j                  |||       y )NrT   r   r   rI   rw   r   )	r   r   r   r   rc   rd   r$   r   setRows)
r   rb   rk   rl   r+   rT   rK   dataRowsrm   attrs
             r   _readRowImageDatar   B  s    j)*H!GU7^,GMeHo.GNH 5'5)%dG5=OOHT']345 HgFr   c                    |j                   }|` |j                  }|`ddd}|j                  d||j                  |j                         |j                          t        |j                        D ]o  }|j                  |d|d      }	t        |	|j                        }	t        t        |j                  |	            }	|j                  d	|	
       |j                          q |j                  d       |j                          y )N.@)r   r   bitwiseimagedatar   r   TrT   rK   reverseBytesrI   rv   )rR   rU   rY   r   r   rW   r   r   r   r   r   getrV   r\   )
r^   rn   r   r]   r+   rK   rT   
binaryConvr   r   s
             r   _writeBitwiseImageDatar   S  s    ((G"**H# %J
OOmm~~	   NN' %%Qd & 
 w6#jnng67g. MM$%
NNr   c                    t        |d         }t               }t        |d         |_        t        |d         |_        dddd}g }|D ]  }	t	        |	t
              s|	\  }}
}|dk(  s t        |
d   t        j                  d            }t        t        j                  |j                  |            }|j                  t        |              | j                  |||d	
       y )NrT   r   r   r   ) r   r   rI   rw   r   Tr   )r   r   r   r   rc   rd   r&   	itertoolsrepeatr   starmapr   r$   r   r   )r   rb   rk   rl   r+   rT   rK   r   r   rm   r   	mapParamsr   s                r   _readBitwiseImageDatar   p  s    j)*H!GU7^,GMeHo.GN 3/JH 3'5)%dG5=DM9+;+;C+@AIi//
	JKGOOL123 8W4  r   c                    	 t         j                  j                  |j                  j                        }t         j                  j                  |d      }||j                  z   }t         j                  j                  |      st        j                  |       t         j                  j                  |d| z        }t         j                  j                  |      st        j                  |       t         j                  j                  ||      }|j                  d|       |j                          t        |d      5 }|j                  |j                         d d d        y # t
        $ r d}Y <w xY w# 1 sw Y   y xY w)Nr   bitmapszstrike%dextfileimagedatarv   wb)ospathdirnamefilerb   AttributeErrorjoinfileExtensionisdirmakedirsrV   rW   openwriter   )	r^   rn   r   r]   r+   folderfilenamefullPathr   s	            r   _writeExtFileImageDatar     s   !1!12 WW\\&),F<555H77== 
FWW\\&*{":;F77== 
Fww||FH-H
'x8
NN	h	 +

<))*+ +  + +s   3E# >E5#E21E25E>c                 z    |d   }t        |d      5 }|j                         | _        d d d        y # 1 sw Y   y xY w)Nrw   rb)r   readr   )r   rb   rk   rl   r+   r   r   s          r   _readExtFileImageDatar     s:    W~H	h	 -!%- - -s   1:ebdt_bitmap_format_c                   l    e Zd ZdZeefeefee	fe
efdZd Zd ZddZd Zd Zd Zd	 Zd
 Zd Zd Zy)BitmapGlyphz.bin)rawrI   rJ   extfilec                      || _         || _        y r   )r*   r+   )r   r*   r+   s      r   __init__zBitmapGlyph.__init__  s    	r   c                     |d d dk(  rt        |      |dk(  rt        |      | j                          | `t        | |      S )N   __r*   )r   r7   r*   rz   )r   r   s     r   __getattr__zBitmapGlyph.__getattr__  sI    8t &&6> &&ItT""r   c                 B    t        | d      r| j                          | `y y )Nr*   )rQ   r7   r*   )r   recurses     r   ensureDecompiledzBitmapGlyph.ensureDecompiled  s     4 NN	 !r   c                 `    t        | j                  j                  t        t              d        S r   )r   r    rj   r:   rf   r   s    r   	getFormatzBitmapGlyph.getFormat  s%    //4N0O0QRSSr   c                 ,   |j                  | j                  j                  d|fg       |j                          | j	                  ||       | j                  ||||       |j                  | j                  j                         |j                          y )Nrb   )rY   r    rj   rW   writeMetrics	writeDatar\   )r   r^   rn   r]   r+   s        r   r[   zBitmapGlyph.toXML  sn    //692E1FG&&){Ivv>dnn--.r   c                    | j                  ||||       |D ]h  }t        |t              s|\  }}}|j                  d      s,|d t	        d        }|| j
                  j                  v sJ | j                  ||||       j y N	imagedata)readMetricsrc   rd   endswithr:   r    xmlDataFunctionsreadData)r   rb   rk   rl   r+   rm   r   options           r   rg   zBitmapGlyph.fromXML  s    ugv6 		7Ggu-")D$==--S--.FT^^<<<<<MM$gv6		7r   c                      y r   rq   r   r]   r+   s      r   r   zBitmapGlyph.writeMetrics      r   c                      y r   rq   )r   rb   rk   rl   r+   s        r   r   zBitmapGlyph.readMetrics  r  r   c                     	 | j                   j                  |j                     \  }} |||| ||       y # t        $ r	 t        }Y w xY wr   )r    r   rP   KeyErrorr   )r   r^   rn   r]   r+   	writeFuncreadFuncs          r   r   zBitmapGlyph.writeData  sQ    	+"&.."A"A,,#Ix
 	+y$?  	+*I	+s   &5 AAc                 r    |d t        d        }| j                  j                  |   \  }} || ||||       y r   )r:   r    r   )r   rb   rk   rl   r+   r  r  r	  s           r   r   zBitmapGlyph.readData  s@    )[))*"nn==fE	8tUGV4r   N)F)rj   ro   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r[   rg   r   r   r   r   rq   r   r   r   r     sk     M #$56"$56*,AB*,AB	#T	7@5r   r   c                      t         j                  t        j                  g} j                  |j                        }|d|z
      G  fddt              }|S )Nr   c                   "    e Zd Zd Z fdZy)=_createBitmapPlusMetricsMixin.<locals>.BitmapPlusMetricsMixinc                 <    | j                   j                  ||       y r   )rK   r[   r  s      r   r   zJ_createBitmapPlusMetricsMixin.<locals>.BitmapPlusMetricsMixin.writeMetrics  s    LLvv.r   c                     |D ]t  }t        |t              s|\  }}}|k(  r+        | _        | j                  j                  ||||       J|k(  sPt        j                  d| j                                v y )Nz'Warning: %s being ignored in format %d.)rc   rd   rK   rg   rh   ri   r   )	r   rb   rk   rl   r+   rm   curMetricsNamemetricsClassoppositeMetricsNames	         r   r   zI_createBitmapPlusMetricsMixin.<locals>.BitmapPlusMetricsMixin.readMetrics  sy    " !'51'.$eW>)#/>DLLL((ugvF00KKA+(r   N)rj   ro   rp   r   r   )r  r  r  s   r   BitmapPlusMetricsMixinr    s    	/	r   r  )r   rj   r   rO   object)r  metricStrings	metricsIdr  r  r  s   `   @@r   _createBitmapPlusMetricsMixinr  	  s]    $--/@/I/IJM!**N##N3I'I6  & "!r   c                   "    e Zd Zd ZddZddZy)BitAlignedBitmapMixinc                 8    ||j                   z  }||z  }|||z   fS r   r   )r   rI   rT   rK   rowBits	bitOffsets         r   _getBitRangez"BitAlignedBitmapMixin._getBitRange0  s)    W]]*'M	9w.//r   Nc                 ~   || j                   }d|k  r||j                  k  sJ d       g }| j                  |||      }|dz   }t        | D ]  }t	        |dz   |d         }	|	|z
  }
|dz  }|dz  }|	dz  }||k  rd|z
  }n|	|z
  }t        | j                  |         }t        |      |z	  }d|z  dz
  |z  }|}||k  rL|t        | j                        k  r4t        | j                  |         }t        |      |z  }||z  d|
z  dz
  z  }|j                  t        |              t        |      }|st        |      }|S )Nr   Illegal row access in bitmapr   r   r   )rK   r   r  r   r   r   r   r   r:   r$   r   r   )r   rI   rT   rK   r   r>   bitRange	stepRanger   endBitr   cutPointfirstByteLocsecondByteLocr   r   	firstHalfnewByte
secondHalfr*   s                       r   r   zBitAlignedBitmapMixin.getRow5  ss   ?llGCxC'..0P2PP0" $$S(G<tO	Y' 	.F!Xa[1FvoGzH!Q;L"aKMm+\
#f_
#DNN<$@AG(H4Iz/Q.);IGm+DNN@S0S'}(EF$W-;
$z1qG|q6HIOOGG,-%	.* " &Dr   c                    || j                   }|st        t        t        |            }| j	                  t        |      ||      d   dz   dz  }dg|z  }t        |      D ]  \  }}| j	                  |||      }	|	dz   }
t        t        |
 |      D ]  \  }}t        |dz   |	d         }|dz  }|dz  }|dz  }||k  rd|z
  }n||z
  }t        |      }|d|z  dz
  z  }||xx   ||z  z  cc<   ||k  sc||k  si||z	  dd|z
  z  dz
  z  }||xx   |z  cc<     t        t        t        t        |                  | _        y )Nr      r   r!  r   )rK   listr   r   r  r:   rX   r&   r   r   r   r   r   r   )r   r   rT   rK   r   numBytesordDataListrI   r*   r"  r#  r   r   r$  r%  r&  r'  r   	firstByte
secondBytes                       r   r   zBitAlignedBitmapMixin.setRowsf  s   ?llGCx89H %%c(mXwGJQNSTTcHn"8, 	=IC((h@H 4I#&ui'8$#? =VaZ!5!A:%{ &!-/!"XJ!'&J!'*#Z1'<=	L)Y(-BB)-/MH4L")Z"7Q!j.=PTU<U!VJ.*<.=	=( 'yWk1J'KLr   r   NF)rj   ro   rp   r  r   r   rq   r   r   r  r  /  s    0
/bMr   r  c                   "    e Zd Zd ZddZddZy)ByteAlignedBitmapMixinc                 D    ||j                   z  dz   dz  }||z  }|||z   fS )Nr,  r   r  )r   rI   rT   rK   rowBytes
byteOffsets         r   _getByteRangez$ByteAlignedBitmapMixin._getByteRange  s3    w}},q0Q68^
J122r   Nc                     || j                   }d|k  r||j                  k  sJ d       | j                  |||      }| j                  t	        |    }|rt        |      }|S )Nr   r   )rK   r   r8  r   r)   r   )r   rI   rT   rK   r   	byteRanger*   s          r   r   zByteAlignedBitmapMixin.getRow  sg    ?llGCxC'..0P2PP0&&sHg>	~~eY/0 &Dr   c                 d    || j                   }|rt        t        |      }t        |      | _        y r   )rK   r   r   r   r   )r   r   rT   rK   r   s        r   r   zByteAlignedBitmapMixin.setRows  s+    ?llG=(3H"8,r   r2  )rj   ro   rp   r8  r   r   rq   r   r   r4  r4    s    3
-r   r4  c                       e Zd Zd Zd Zy)ebdt_bitmap_format_1c                     t               | _        t        j                  t        | j
                  | j                        \  }}|| _        y r   r   rK   r   r   r   r*   r   r   dummyr*   s      r   r7   zebdt_bitmap_format_1.decompile  2    (*oo&=tyy$,,Wtr   c                 h    t        j                  t        | j                        }|| j                  z   S r   r   r9   r   rK   r   r   r+   r*   s      r   r<   zebdt_bitmap_format_1.compile  &    ||3T\\Bdnn$$r   Nrj   ro   rp   r7   r<   rq   r   r   r=  r=        
%r   r=  c                       e Zd Zd Zd Zy)ebdt_bitmap_format_2c                     t               | _        t        j                  t        | j
                  | j                        \  }}|| _        y r   r?  r@  s      r   r7   zebdt_bitmap_format_2.decompile  rB  r   c                 h    t        j                  t        | j                        }|| j                  z   S r   rD  rE  s      r   r<   zebdt_bitmap_format_2.compile  rF  r   NrG  rq   r   r   rJ  rJ    rH  r   rJ  c                       e Zd Zd Zd Zy)ebdt_bitmap_format_5c                 &    | j                   | _        y r   )r*   r   r   s    r   r7   zebdt_bitmap_format_5.decompile  s    r   c                     | j                   S r   )r   )r   r+   s     r   r<   zebdt_bitmap_format_5.compile  s    ~~r   NrG  rq   r   r   rN  rN    s    #r   rN  c                       e Zd Zd Zd Zy)ebdt_bitmap_format_6c                     t               | _        t        j                  t        | j
                  | j                        \  }}|| _        y r   r   rK   r   r   r   r*   r   r@  s      r   r7   zebdt_bitmap_format_6.decompile  2    &(oo&;TYYUtr   c                 h    t        j                  t        | j                        }|| j                  z   S r   r   r9   r   rK   r   rE  s      r   r<   zebdt_bitmap_format_6.compile  &    ||14<<@dnn$$r   NrG  rq   r   r   rR  rR    rH  r   rR  c                       e Zd Zd Zd Zy)ebdt_bitmap_format_7c                     t               | _        t        j                  t        | j
                  | j                        \  }}|| _        y r   rT  r@  s      r   r7   zebdt_bitmap_format_7.decompile  rU  r   c                 h    t        j                  t        | j                        }|| j                  z   S r   rW  rE  s      r   r<   zebdt_bitmap_format_7.compile  rX  r   NrG  rq   r   r   rZ  rZ    rH  r   rZ  c                       e Zd Zd Zd Zy)ComponentBitmapGlyphc                    |j                  | j                  j                  d|fg       |j                          | j	                  ||       |j                  d       |j                          | j
                  D ]  }|j                  ||        |j                  d       |j                          |j                  | j                  j                         |j                          y )Nrb   
components)rY   r    rj   rW   r   componentArrayr[   r\   )r   r^   rn   r]   r+   curComponents         r   r[   zComponentBitmapGlyph.toXML  s    //692E1FG&&)% // 	/Lvv.	/l#dnn--.r   c                 h   | j                  ||||       |D ]  }t        |t              s|\  }}}|dk(  s g | _        |D ]n  }t        |t              s|\  }}}|dk(  r:t	               }|j                  ||||       | j                  j                  |       Yt        j                  d|       p  y )Nr`  ru   z&'%s' being ignored in component array.)	r   rc   rd   ra  rs   rg   r$   rh   ri   )	r   rb   rk   rl   r+   rm   r   compElementrb  s	            r   rg   zComponentBitmapGlyph.fromXML  s    ugv6 	TGgu-")D$|#&(##* 	TK%k59 +6(D%.'4$,,T5'6J++22<@$LdS	T	Tr   Nr   rq   r   r   r^  r^    s     Tr   r^  c                       e Zd Zd Zd Zy)ebdt_bitmap_format_8c                    t               | _        t        j                  t        | j
                  | j                        \  }}|dd  }t        j                  d|d d       \  }|dd  }g | _        t        |      D ]o  }t               }t        j                  t        ||      \  }}| j                  j                  |j                        |_        | j                  j!                  |       q y )Nr   >Hr   )r   rK   r   r   r   r*   structunpackra  r   rs   ry   r+   getGlyphName	glyphCoderb   r$   r   rA  r*   numComponentsr   rb  s         r   r7   zebdt_bitmap_format_8.decompile  s    (*oo&=tyy$,,WtABx!==tBQx8ABx }% 	5A(?L!//*=t\RKE4 $ 8 89O9O PL&&|4		5r   c                    g }|j                  t        j                  t        | j                               |j                  d       |j                  t        j                  dt        | j                                     | j                  D ]K  }|j                  |j                        |_
        |j                  t        j                  t        |             M t        |      S )N    rh  )r$   r   r9   r   rK   ri  r:   ra  
getGlyphIDrb   rl  ry   r   r   r+   r>   rb  s       r   r<   zebdt_bitmap_format_8.compile  s    %<dllKLD#d.A.A*BCD // 	ML%+%6%6|7H7H%IL"OOGLL)<lKL	M ""r   NrG  rq   r   r   rf  rf     s    5#r   rf  c                       e Zd Zd Zd Zy)ebdt_bitmap_format_9c                    t               | _        t        j                  t        | j
                  | j                        \  }}t        j                  d|d d       \  }|dd  }g | _        t        |      D ]o  }t               }t        j                  t        ||      \  }}| j                  j                  |j                        |_        | j                  j!                  |       q y )Nrh  r   )r   rK   r   r   r   r*   ri  rj  ra  r   rs   ry   r+   rk  rl  rb   r$   rm  s         r   r7   zebdt_bitmap_format_9.decompile  s    &(oo&;TYYUt!==tBQx8ABx }% 	5A(?L!//*=t\RKE4 $ 8 89O9O PL&&|4		5r   c                    g }|j                  t        j                  t        | j                               |j                  t        j                  dt        | j                                     | j                  D ]K  }|j                  |j                        |_
        |j                  t        j                  t        |             M t        |      S )Nrh  )r$   r   r9   r   rK   ri  r:   ra  rq  rb   rl  ry   r   rr  s       r   r<   zebdt_bitmap_format_9.compile'  s    %:DLLIJD#d.A.A*BCD // 	ML%+%6%6|7H7H%IL"OOGLL)<lKL	M ""r   NrG  rq   r   r   rt  rt    s    
5#r   rt  )r   r         r,  r   	   ):fontTools.miscr   fontTools.misc.textToolsr   r   r   r   r   r	   r
   r   BitmapGlyphMetricsr   r   r   r    r   r   r   ri  logging	getLoggerrj   rh   r   ry   r   r  rs   r   r   r   r   r   r   r   r   r   r   r   r   rf   r   r  BitmapPlusBigMetricsMixinBitmapPlusSmallMetricsMixinr  r4  r=  rJ  rN  rR  rZ  r^  rf  rt  r   rq   r   r   <module>r     s   "	 	 	    	   g! 
 ^;\.. ^;BWF W4
" 
 
*.$G":2+,- 3 W5& W5z"> :/J ;<MN UMF UMp-V -0
%7
%
%6
%0+ 
%5{
%
%4k
%"T; "TJ#68L #4#46J #4  r   