
    PhY                        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                   2    e Zd ZdZdZd Zd Zd Zd Zd Z	y)	table_E_B_D_T_zEmbedded Bitmap Data table

    The ``EBDT`` table contains monochrome or grayscale bitmap data for
    glyphs. It must be used in concert with the ``EBLC`` table.

    See also https://learn.microsoft.com/en-us/typography/opentype/spec/ebdt
    EBLCc                     t         |   S N)ebdt_bitmap_classes)selfimageFormats     jC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\fontTools/ttLib/tables/E_B_D_T_.pygetImageFormatClassz"table_E_B_D_T_.getImageFormatClass7   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_.decompile:   s    
 	.d; 	
 334 I OOO""?3!*!9!9}22M4K4KL'/OGV *#,V#4'+E6N';+/+C+C)55,( $4L&#I,4	&)/7OG, (0 ": )r   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_.compile]   s3   %;TBCx{#
 	 334'*7??DOO'L#I|$-$<$<  "/55G )1E!%yHy0$}}V4/==dC$,	 CI-"* -#,g"6.5	(+"+H"5!((1/  66 .; *; %= (M@ ""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   sa    ''+==T^^778G+.w+P'	<(1(@(@$#3#9#9 ,W 5 #5)427--E/2B2J2JE//8/H/H/Q/Q, $: )A ,Q 	Y$=#>?334,5doo,F(KOOLG[+A*BCNN&5&;&;&="WffE '>MM,'NN -G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"!'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! #( c$//22D6[1_s4???S-S#TT,40/04+:DOOK(? "r   N)
rj   
__module____qualname____doc__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JM]'$2NONN K 	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   rx   z1unknown name '%s' being ignored by EbdtComponent.)rb   setr   ry   rz   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Ggu-#* D%~%#+E'N#;T
4 OQUV r   Nrj   ro   rp   r[   rg   rr   r   r   rt   rt      s    
Wr   rt   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curByterx   
numBitsCutis          r   _data2binaryr      sz    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     sr     $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   4  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   rw   )rR   rU   rY   r   r   rW   r   getRowrV   r
   r\   )	r^   rn   r   r]   r+   rK   rT   curRowrowDatas	            r   _writeRowImageDatar   8  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   rx   r   )	r   r   r   r   rc   rd   r$   r   setRows)
r   rb   rk   rl   r+   rT   rK   dataRowsrm   attrs
             r   _readRowImageDatar   J  s    j)*H!GU7^,GMeHo.GNH'5)%dG5=OOHT']34  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   rw   )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    ((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   rx   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   x  s    j)*H!GU7^,GMeHo.GN 3/JH'5)%dG5=DM9+;+;C+@AIi//
	JKGOOL12  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extfileimagedatarw   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)Nrx   rb)r   readr   )r   rb   rk   rl   r+   r   r   s          r   _readExtFileImageDatar     s1    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*   r{   )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Ggu-")D$==--S--.FT^^<<<<<MM$gv6 r   c                      y r   rr   r   r]   r+   s      r   r   zBitmapGlyph.writeMetrics      r   c                      y r   rr   )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  rr   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  st    "!'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._getBitRange8  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.getRow=  sn   ?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.setRowsn  sv   ?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   rr   r   r   r  r  7  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   r9  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   r3  )rj   ro   rp   r9  r   r   rr   r   r   r5  r5    s    3
-r   r5  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<   rr   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@  rA  s      r   r7   zebdt_bitmap_format_2.decompile  rC  r   c                 h    t        j                  t        | j                        }|| j                  z   S r   rE  rF  s      r   r<   zebdt_bitmap_format_2.compile  rG  r   NrH  rr   r   r   rK  rK    rI  r   rK  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   NrH  rr   r   r   rO  rO    s    #r   rO  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   rA  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   rF  s      r   r<   zebdt_bitmap_format_6.compile  &    ||14<<@dnn$$r   NrH  rr   r   r   rS  rS    rI  r   rS  c                       e Zd Zd Zd Zy)ebdt_bitmap_format_7c                     t               | _        t        j                  t        | j
                  | j                        \  }}|| _        y r   rU  rA  s      r   r7   zebdt_bitmap_format_7.decompile  rV  r   c                 h    t        j                  t        | j                        }|| j                  z   S r   rX  rF  s      r   r<   zebdt_bitmap_format_7.compile  rY  r   NrH  rr   r   r   r[  r[    rI  r   r[  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. 0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 )Nra  rv   z&'%s' being ignored in component array.)	r   rc   rd   rb  rt   rg   r$   rh   ri   )	r   rb   rk   rl   r+   rm   r   compElementrc  s	            r   rg   zComponentBitmapGlyph.fromXML  s    ugv6Ggu-")D$|#&(##*K%k59 +6(D%.'4$,,T5'6J++22<@$LdS $+ r   Nr   rr   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unpackrb  r   rt   rz   r+   getGlyphName	glyphCoderb   r$   r   rB  r*   numComponentsr   rc  s         r   r7   zebdt_bitmap_format_8.decompile	  s    (*oo&=tyy$,,WtABx!==tBQx8ABx }%A(?L!//*=t\RKE4 $ 8 89O9O PL&&|4	 &r   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    ri  )r$   r   r9   r   rK   rj  r:   rb  
getGlyphIDrb   rm  rz   r   r   r+   r>   rc  s       r   r<   zebdt_bitmap_format_8.compile  s    %<dllKLD#d.A.A*BCD //L%+%6%6|7H7H%IL"OOGLL)<lKL 0 ""r   NrH  rr   r   r   rg  rg    s    5#r   rg  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 )Nri  r   )r   rK   r   r   r   r*   rj  rk  rb  r   rt   rz   r+   rl  rm  rb   r$   rn  s         r   r7   zebdt_bitmap_format_9.decompile#  s    &(oo&;TYYUt!==tBQx8ABx }%A(?L!//*=t\RKE4 $ 8 89O9O PL&&|4	 &r   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 )Nri  )r$   r   r9   r   rK   rj  r:   rb  rr  rb   rm  rz   r   rs  s       r   r<   zebdt_bitmap_format_9.compile/  s    %:DLLIJD#d.A.A*BCD //L%+%6%6|7H7H%IL"OOGLL)<lKL 0 ""r   NrH  rr   r   r   ru  ru  "  s    
5#r   ru  )r   r         r-  r   	   ):fontTools.miscr   fontTools.misc.textToolsr   r   r   r   r   r	   r
   r   BitmapGlyphMetricsr   r   r   r    r   r   r   rj  logging	getLoggerrj   rh   r   rz   r   r  rt   r   r   r   r   r   r   r   r   r   r   r   r   rf   r   r  BitmapPlusBigMetricsMixinBitmapPlusSmallMetricsMixinr  r5  r>  rK  rO  rS  r[  r_  rg  ru  r   rr   r   r   <module>r     s   "	 	 	    	   g! 
 f;\.. f;R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   