
    Ph/                         d dl mZmZ ddlmZ d dlZd dlmZ d dlZd dl	Z	 G d dej                        Z
 G d d	 ed	d
            Zy)    )	bytesjoinsafeEval   )DefaultTableN)
namedtuplec                   f    e Zd ZdZdZdZddZd ZddZddZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zy)table_C_P_A_L_a+  Color Palette table

    The ``CPAL`` table contains a set of one or more color palettes. The color
    records in each palette can be referenced by the ``COLR`` table to specify
    the colors used in a color glyph.

    See also https://learn.microsoft.com/en-us/typography/opentype/spec/cpal
    i  r   Nc                 |    t         j                   j                  | |       g | _        g | _        g | _        g | _        y N)r   __init__palettespaletteTypespaletteLabelspaletteEntryLabels)selftags     jC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\fontTools/ttLib/tables/C_P_A_L_.pyr   ztable_C_P_A_L_.__init__   s7    !!**45"$    c                 v   t        j                  d|d d       \  | _        | _        }}}| j                  dk  sJ d       g | _        d}t        |      D ]  }t        j                  d|||dz          d   }|| j                  z   |k  sJ |dz  }g }	||dz  z   }
t        | j                        D ]8  }|	j                  t        t        j                  d	||
|
dz                  |
dz  }
: | j                  j                  |	        | j                  dk(  rd}d}d}n(d|dz  z   }t        j                  d
|||dz          \  }}}| j                  |||| j                        | _
        | j                  |||| j                        | _        | j                  ||| j                  | j                        | _        y )N>HHHHL   r   z9Version of CPAL table is higher than I know how to handle>H   r      >BBBB>LLL)default)structunpackversionnumPaletteEntriesr   rangeappendColor_decompileUInt32ArrayDEFAULT_PALETTE_TYPEr   _decompileUInt16Array
NO_NAME_IDr   r   )r   datattFontnumPalettesnumColorRecordsgoffsetFirstColorRecordposi
startIndexpalettepposjoffsetToPaletteTypeArrayoffsetToPaletteLabelArrayoffsetToPaletteEntryLabelArrays                  r   	decompileztable_C_P_A_L_.decompile!   s    MM(D"I.	
L"# LLA	GF	G{#AtT#a-@A!DJ 6 66/III1HCG*Z!^;D4112ufmmGT$PQ=R&STU	 3 MM  ) $ <<1'($()%-.*{Q&C
 fd3r&:;	(). 66$--	 7 
 "77+[$// 8 
 #'"<"<*""OO	 #= #
r   c                     |dk(  r|g|z  S t        j                   d|||d|z  z          }t        j                  dk7  r|j                          t	        |      |k(  sJ |       |j                         S )Nr   Hr   bigarraysys	byteorderbyteswaplentolistr   r)   offsetnumElementsr   results         r   r'   z$table_C_P_A_L_._decompileUInt16ArrayS   o    Q;9{**S$v[0H"IJ==E!OO6{k)161)}}r   c                     |dk(  r|g|z  S t        j                   d|||d|z  z          }t        j                  dk7  r|j                          t	        |      |k(  sJ |       |j                         S )Nr   Ir   r:   r;   rB   s         r   r%   z$table_C_P_A_L_._decompileUInt32Array\   rF   r   c                    | j                         \  }}| j                         }| j                         }| j                         }t	        |      dz  }dt	        |      z   }| j
                  dk\  r|dz  }t        j                  d| j
                  | j                  t	        | j                        ||      }	| j
                  dk(  r|	||g}
t        |
      S |t	        |      z   }t	        |      dk(  rd}n|}|t	        |      z  }t	        |      dk(  rd}n|}|t	        |      z  }t	        |      dk(  rd}n|}|t	        |      z  }t        j                  d|||      }|	||||||g}
t        |
      S )Nr   r   r   r   r   r   )_compileColorRecords_compilePaletteTypes_compilePaletteLabels_compilePaletteEntryLabelsr@   r    r   packr!   r   r   )r   r*   colorRecordIndicescolorRecordsr   r   r   r,   offsetToFirstColorRecordheaderdataListr.   r4   r5   r6   header1s                   r   compileztable_C_P_A_L_.compilee   s   +/+D+D+F(L002224!<<>l+q0#%,>(?#? <<1$*$LL""$
 <<1 2LAHB ""? +S->>C< A%+,(+.(s<((=!Q&,-),/)s=))%&!+12.14.s=))kk().	G ""H ""r   c                     t        |      | j                  k(  sJ d }t        |D cg c]
  } ||       c}      S c c}w )Nc                     t        j                  d| j                  | j                  | j                  | j
                        S )Nr   )r   rN   bluegreenredalpha)cs    r   <lambda>z0table_C_P_A_L_._compilePalette.<locals>.<lambda>   s%    WaffaggquuaggNr   )r@   r!   r   )r   r1   rN   colors       r   _compilePaletteztable_C_P_A_L_._compilePalette   s@    7|t55555N7;7%$u+7;<<;s   =c                 8   g g i }}}| j                   D ]p  }| j                  |      }||v r||   }n!t        |      }|j                  |       |||<   |j                  t	        j
                  d|| j                  z               r t        |      t        |      fS )Nr   )r   r_   r@   r#   r   rN   r!   r   )r   rP   rO   poolr1   packedPaletteindexs          r   rJ   z#table_C_P_A_L_._compileColorRecords   s    13R$(}}G 009M$]+L)##M2&+]#%%fkk$@V@V8V&WX % +,i.EEEr   c           	      n   | j                   dk(  st        | j                        syt        | j                        t        | j                        k(  sJ t        | j                  D cg c]  }t        j                  d|       c}      }t        |      dt        | j                        z  k(  sJ |S c c}w )Nr   r   z>Ir   )r    anyr   r@   r   r   r   rN   )r   ptyperE   s      r   rK   z#table_C_P_A_L_._compilePaletteTypes   s    <<1C(9(9$:4$$%T]]);;;;$BSBSTBSFKKe4BSTU6{a#dmm"44444 Us   &B2c           	           j                   dk(  st         fd j                  D              ryt         j                        t         j                        k(  sJ t         j                  D cg c]  }t        j                  d|       c}      }t        |      dt         j                        z  k(  sJ |S c c}w )Nr   c              3   <   K   | ]  }|j                   k(    y wr   r(   .0lr   s     r   	<genexpr>z7table_C_P_A_L_._compilePaletteLabels.<locals>.<genexpr>   s     #UBTQA$8BT   r   r   r   )r    allr   r@   r   r   r   rN   r   labelrE   s   `  r   rL   z$table_C_P_A_L_._compilePaletteLabels   s    <<1#U$BTBT#U U4%%&#dmm*<<<<$BTBTUBTFKKe4BTUV6{a#dmm"44444 Vs   0B<c           	      ^     j                   dk(  st         fd j                  D              ryt         j                         j                  k(  sJ t         j                  D cg c]  }t        j                  d|       c}      }t        |      d j                  z  k(  sJ |S c c}w )Nr   c              3   <   K   | ]  }|j                   k(    y wr   ri   rj   s     r   rm   z<table_C_P_A_L_._compilePaletteEntryLabels.<locals>.<genexpr>   s      $
*AQA *Arn   r   r   r   )r    ro   r   r@   r!   r   r   rN   rp   s   `  r   rM   z)table_C_P_A_L_._compilePaletteEntryLabels   s    <<1 $
*.*A*A$
 !
 4**+t/E/EEEE373J3JK3J%V[[u%3JK
 6{a$"8"88888 Ls   'B*c                     t         j                        }t         j                        D ci c]  \  }}||
 }}}t         j                        D ci c]  \  }}||
 }}}|j                  d j                         |j                          |j                  d j                         |j                          t         j                        D ]f  \  }	}
d|	i}|j                  |	 j                        }|j                  |	 j                        } j                  dkD  r| j                  k7  r||d<    j                  dkD  r| j                  k7  r||d<    |j                  di | |j                           j                  dkD  rL| j                  k7  r=|r;d	|v r7|d	   j                  |      }|!|j                  |       |j                          t        |
       j                  k(  sJ t        |
      D ]  \  }}|j                  |||        |j!                  d       |j                          i  j                  dkD  rt#         fd
 j$                  D              s|j                  d       |j                          t         j$                        D ]w  \  }	}| j                  k7  s|j                  d|	|        j                  dkD  r/|r-|r+d	|v r'|d	   j                  |      }||j                  |       |j                          y |j!                  d       |j                          y y y c c}}w c c}}w )Nr    )valuer!   rc   r   rq   typer1   namec              3   <   K   | ]  }|j                   k(    y wr   ri   rj   s     r   rm   z'table_C_P_A_L_.toXML.<locals>.<genexpr>   s      (
*AQA *Arn   r   )rc   ru   )r1   )r@   r   	enumerater   r   	simpletagr    newliner!   getr&   r(   begintaggetDebugNamecommenttoXMLendtagro   r   )r   writerr*   r+   r/   nameIDr   typr   rc   r1   attrspaletteTypepaletteLabelrw   cindexr^   rq   s   `                 r   r   ztable_C_P_A_L_.toXML   s   $--(6?@R@R6ST6S{6F6ST/89J9J/KL/K8As3/KL$,,7,D4J4JK'6NE7e$E&**5$2K2KLK(,,UDOODL||aLDOO$C!-g||aK43L3L$L +fFOO//NNq  DOO3f$f~22<@#NN4(NN$w<4#9#9999!*7!3FFF3 "4MM)$NN1 72 <<!C (
*.*A*A(
 %
 OO01NN )$*A*A BuDOO+$$WE$G||a'Ef6AQ%f~::5A+"NN40NN$ !C MM./NN%
? ULs   MMc                    |dk(  r| j                   j                  t        |j                  d| j                                     | j
                  j                  t        |j                  d| j                                     g }|D ]A  }t        |t              r|d   }t        j                  |d         }|j                  |       C | j                  j                  |       y |dk(  ri }|D ]@  }t        |t              r|\  }	}
}|	dk(  s t        |
d         }t        |
d         }|||<   B t        | j                        D cg c]  }|j                  || j                          c}| _        y d|v rAt        |d         }t!        | ||       |dk(  r | j                  g| j                  z  | _        y y y c c}w )	Nr1   rq   rv   r   ru   r   rc   r!   )r   r#   intr|   r(   r   r&   
isinstancestrr$   fromHexr   r   r"   r!   r   setattr)r   rw   r   contentr*   r1   elementr^   colorLabelselementNameelementAttr_
labelIndexr   r/   ru   s                   r   fromXMLztable_C_P_A_L_.fromXML   s   9%%c%))GT__*M&NO$$S64;T;T)U%VWG"gs+
eGn5u% # MM  )))K"gs+.5+[!')!)+g*>!?J%k'&:;F.4K
+ # t556'6A 4??36'D# U7^,ED$&**+/??*;d>T>T*T' + 	's   	#F;r   )r   )__name__
__module____qualname____doc__r(   r&   r   r7   r'   r%   rU   r_   rJ   rK   rL   rM   r   r    r   r   r	   r	      sU     J%0
d3#j=
F
/bUr   r	   c                   @    e Zd Zd Zd ZddZed        Zed        Zy)r$   c                 d    d| j                   | j                  | j                  | j                  fz  S )Nz#%02X%02X%02X%02XrZ   rY   rX   r[   r   s    r   hexz	Color.hex  s&    "dhh

DIItzz%RRRr   c                 "    | j                         S r   )r   r   s    r   __repr__zColor.__repr__  s    xxzr   Nc                 h    |j                  d| j                         |       |j                          y )Nr^   )ru   rc   )rz   r   r{   )r   r   r*   rc   s       r   r   zColor.toXML!  s'    
%@r   c                     |d   dk(  r|dd  }t        |dd d      }t        |dd d      }t        |dd d      }t        |      dk\  rt        |dd d      nd	} | ||||
      S )Nr   #r   r      r            r   )r   r@   )clsru   rZ   rY   rX   r[   s         r   r   zColor.fromHex%  s}    8s?!"IE%!*b!E!AJ#51:r"'*5zQE!AJ#Ds%d%@@r   c                      | ||||      S )Nr   r   )r   rZ   rY   rX   r[   s        r   fromRGBAzColor.fromRGBA/  s    s%d%@@r   r   )	r   r   r   r   r   r   classmethodr   r   r   r   r   r$   r$     s>    S A A A Ar   r$   zblue green red alpha)fontTools.misc.textToolsr   r    r   r<   collectionsr   r   r=   r	   r$   r   r   r   <module>r      sF   
 9   "  
JU\.. JUZAJw 67 Ar   