+
    Zi4                       ^ RI Ht ^ RIHtHtHtHtHtHtH	t	H
t
 ^ RIHtHt ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHtHt ^ R	IHt ^ R
IHt ]'       d   ^ RIHt ^ RI H!t! ]! RR7      t"R R lt#]] ! R R4      4       4       t$R# )    )annotations)TYPE_CHECKINGAbstractSetAnyDictIterableIteratorOptionalSized)definefield)	UFOReader	UFOWriter)DEFAULT_LAYER_NAME)Error)Layer)_deepcopy_unlazify_attrs_getstate_unlazify_attrs_setstate_attrs)serde)T)Type)	Converter___UFOLIB2_LAZY_LAYER___)namec               (    V ^8  d   QhRRRRRRRR/# )   selfr   	attributevaluer   returnNone )formats   ":/usr/lib/python3/dist-packages/ufoLib2/objects/layerSet.py__annotate__r&   $   s(     ? ?s ?s ?5 ?T ?    c                >    \        V4      '       g   \        R 4      hR# )z"value must have at least one item.N)len
ValueError)r   r   r    s   &&&r%   _must_have_at_least_one_itemr+   $   s    u::=>> r'   c                  r   ] tR t^)t$ Rt]! ]R7      tR]R&   ]! ]	RR7      t
R]R&   ]! R	RRR
7      tR]R&   ]! R	RRR
7      tR]R&   R R lt]R R l4       t]]3R R ll4       t]RBR R ll4       tR R lt]t]t]t]RCR R ll4       tRBR R llt]R R l4       t]P>                  R R  l4       tR! R" lt R# R$ lt!R% R& lt"R' R( lt#R) R* lt$RDR+ R, llt%R- R. lt&R/ R0 lt']R1 R2 l4       t(](P>                  R3 R4 l4       t(R5 R6 lt)RER7 R8 llt*RER9 R: llt+RDR; R< llt,R= R> lt-]R? R@ l4       t.RAt/R	# )FLayerSeta^  Represents a mapping of layer names to Layer objects.

See http://unifiedfontobject.org/versions/ufo3/layercontents.plist/ for layer
semantics.

Behavior:
    LayerSet behaves **partly** like a dictionary of type ``Dict[str, Layer]``,
    but creating and loading layers is done through their own methods. Unless the
    font is loaded eagerly (with ``lazy=False``), the layer objects and their
    glyphs are by default only loaded into memory when accessed.

    To get the number of layers in the font::

        layerCount = len(font.layers)

    To iterate over all layers::

        for layer in font.layers:
            ...

    To check if a specific layer exists::

        exists = "myLayerName" in font.layers

    To get a specific layer::

        font.layers["myLayerName"]

    To delete a specific layer::

        del font.layers["myLayerName"]
)	validatorzDict[str, Layer]_layersF)defaulteqr   _defaultLayerN)r0   initr1   zOptional[bool]_lazyzOptional[UFOReader]_readerc                   V ^8  d   QhRR/# r   r!   r"   r#   )r$   s   "r%   r&   LayerSet.__annotate__V   s     / /T /r'   c                	b  a  S P                   \        8X  di   R pS P                  P                  4        F3  pVP                  '       g   K  V'       d   \        R4      hRpVS n         K5  	  V'       g   \        R4      hR# \        ;QJ d7    V 3R lS P                  P                  4        4       F  '       g   K   RM,	  R M(! V 3R lS P                  P                  4        4       4      '       g#   \        R\        S P                   4       R24      hS P                   P                  '       g   Q hR# )F%more than one layer marked as defaultTno layer marked as defaultc              3  >   <"   T F  qSP                   J x  K  	  R # 5iNr2   ).0layerr   s   & r%   	<genexpr>/LayerSet.__attrs_post_init__.<locals>.<genexpr>b   s     V@Uu 2 22@Us   zdefault layer z must be in layer set.N)r2   _LAYER_NOT_LOADEDr/   values_defaultr*   anyrepr)r   foundr@   s   f  r%   __attrs_post_init__LayerSet.__attrs_post_init__V   s    !22E,,.>>>()PQQ E).D& /  !=>>  3V@S@S@UV333V@S@S@UVVV $T$*<*<%=$>>TU  %%.....r'   c                   V ^8  d   QhRR/# )r   r!   r-   r#   )r$   s   "r%   r&   r8   i   s     , , ,r'   c                6    V P                  \        4       .4      # )z2Return a new LayerSet with an empty default Layer.)from_iterabler   )clss   &r%   r0   LayerSet.defaulth   s       %'++r'   c               $    V ^8  d   QhRRRRRR/# )r   r    zIterable[Layer]defaultLayerNamestrr!   r-   r#   )r$   s   "r%   r&   r8   n   s$     $= $=#$=7:$=	$=r'   c                   V\         8w  d   ^ RIpVP                  R\        4       / pRpV F  p\	        V\
        4      '       g#   \        R\        V4      P                   R24      hVP                  V9   d   \        RVP                   R24      hVP                  V8X  g   VP                  '       d+   Ve   \        R4      hVP                  '       g   RVn        TpWdVP                  &   K  	  Vf   \        R4      hVf   Q hV ! WER	7      # )
zInstantiates a LayerSet from an iterable of :class:`.Layer` objects.

Args:
    value: an iterable of :class:`.Layer` objects.
    defaultLayerName: the name of the default layer of the ones in ``value``.
NzO'defaultLayerName' parameter is deprecated; use Layer.default attribute insteadzexpected 'Layer', found ''zduplicate layer name: 'r:   Tr;   layersdefaultLayer)r   warningswarnDeprecationWarning
isinstancer   	TypeErrortype__name__r   KeyErrorrE   r*   )rN   r    rQ   rX   rV   rW   r@   s   &&&    r%   rM   LayerSet.from_iterablem   s     11MM6"
 $&EeU++";DK<P<P;QQR STTzzV#!8AFGGzz--+$%LMM~~~%)EN$!&5::  9::'''&<<r'   c               $    V ^8  d   QhRRRRRR/# )r   readerr   lazyboolr!   r-   r#   )r$   s   "r%   r&   r8      s!      ) 4 8 r'   c                   / pRpVP                  4       pVP                  4        FA  pWe8H  pV'       g	   V'       g#   V P                  WW'4      pV'       d   TpWV&   K9  \        W6&   KC  	  Vf   Q hV ! W4R7      p	W)n        V'       d   Wn        V	# )zInstantiates a LayerSet object from a :class:`fontTools.ufoLib.UFOReader`.

Args:
    path: The path to the UFO to load.
    lazy: If True, load glyphs, data files and images as they are accessed. If
        False, load everything up front.
NrU   )getDefaultLayerNamegetLayerNames
_loadLayerrC   r4   r5   )
rN   rb   rc   rV   rW   rQ   	layerName	isDefaultr@   r   s
   &&&       r%   readLayerSet.read   s     $&!557--/I!5Iv$J#(L$)y!$5! 0 '''&<
!Lr'   c                   V ^8  d   QhRR/# r7   r#   )r$   s   "r%   r&   r8      s      $ r'   c                j    V P                   '       d   V  F  pVP                  4        K  	  RV n         R# )zLoad all layers into memory.FN)r4   unlazifyr   r@   s   & r%   ro   LayerSet.unlazify   s&    :::  
r'   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r   rb   r   ri   rR   rc   rd   r0   r!   r   r#   )r$   s   "r%   r&   r8      s;     K KK&)K15KGKK	Kr'   c                	T    V P                  V4      p\        P                  ! WW#R 7      # ))rc   r0   )getGlyphSetr   rk   )rb   ri   rc   r0   glyphSets   &&&& r%   rh   LayerSet._loadLayer   s%     %%i0zz)DJJr'   c               $    V ^8  d   QhRRRRRR/# )r   ri   rR   rc   rd   r!   r   r#   )r$   s   "r%   r&   r8      s!      3 d e r'   c                	    V P                   f   Q hWP                  9  d   \        V4      hV P                  V P                   W4      pW0P                  V&   V# r=   )r5   r/   r_   rh   )r   ri   rc   r@   s   &&& r%   	loadLayerLayerSet.loadLayer   sN     ||'''LL(9%%i>"'Yr'   c                   V ^8  d   QhRR/# )r   r!   r   r#   )r$   s   "r%   r&   r8      s     " "e "r'   c                	    V P                   # r=   r>   r   s   &r%   rW   LayerSet.defaultLayer   s    !!!r'   c                    V ^8  d   QhRRRR/# )r   r@   r   r!   r"   r#   )r$   s   "r%   r&   r8      s     # #% #D #r'   c                	   WP                   J d   R # WP                  P                  4       9  d   \        RV: R24      hV P                   P                  \
        8X  d   \        R4      hRV P                   n        RVn        Wn         R # )NzLayer z- not found in layer set; can't set as defaultzFthere's already a layer named 'public.default' which must stay defaultFT)r2   r/   rD   r*   r   r   rE   rp   s   &&r%   rW   r~      s    &&&++--	!NO  ""&88X  ',#"r'   c                    V ^8  d   QhRRRR/# )r   r   rR   r!   rd   r#   )r$   s   "r%   r&   r8      s     $ $ $ $r'   c                	    WP                   9   # r=   )r/   r   r   s   &&r%   __contains__LayerSet.__contains__   s    ||##r'   c                    V ^8  d   QhRRRR/# )r   r   rR   r!   r"   r#   )r$   s   "r%   r&   r8      s        r'   c                	    V P                   e-   WP                   P                  8X  d   \        RV,          4      hV P                  V R # )Nzcannot delete default layer %r)rW   r   r_   r/   r   s   &&r%   __delitem__LayerSet.__delitem__   s=    (((---?$FGGLLr'   c                    V ^8  d   QhRRRR/# )r   r   rR   r!   r   r#   )r$   s   "r%   r&   r8      s        r'   c                	b    V P                   V,          pV\        J d   V P                  V4      # V# r=   )r/   rC   ry   )r   r   layer_objects   && r%   __getitem__LayerSet.__getitem__   s.    ||D),,>>$''r'   c                   V ^8  d   QhRR/# )r   r!   zIterator[Layer]r#   )r$   s   "r%   r&   r8      s     # #/ #r'   c              #  	   "   V P                   P                  4        F(  w  rV\        J d   V P                  V4      x  K$  Vx  K*  	  R # 5ir=   )r/   itemsrC   ry   )r   
layer_namer   s   &  r%   __iter__LayerSet.__iter__   s=     (,(:(:(<$J00nnZ00""	 )=s   A	Ac                   V ^8  d   QhRR/# )r   r!   intr#   )r$   s   "r%   r&   r8      s     ! ! !r'   c                	,    \        V P                  4      # r=   )r)   r/   r}   s   &r%   __len__LayerSet.__len__   s    4<<  r'   c               $    V ^8  d   QhRRRRRR/# )r   r   rR   r0   zT | Noner!   zT | Layer | Noner#   )r$   s   "r%   r&   r8      s"       h :J r'   c                	:     W,          #   \          d    Tu # i ; ir=   )r_   )r   r   r0   s   &&&r%   getLayerSet.get   s#    	: 	N	s   
 c                   V ^8  d   QhRR/# )r   r!   zAbstractSet[str]r#   )r$   s   "r%   r&   r8     s     # #& #r'   c                	6    V P                   P                  4       # r=   )r/   keysr}   s   &r%   r   LayerSet.keys  s    ||  ""r'   c                   V ^8  d   QhRR/# )r   r!   rR   r#   )r$   s   "r%   r&   r8     s     
 
# 
r'   c                	    \        V P                  4      pR P                  V P                  P                  V P                  P
                  TV^8  d   RMR\        \        V 4      4      4      # )z<{}.{} ({} layer{}) at {}>s )r)   r/   r$   	__class__
__module__r^   hexid)r   ns   & r%   __repr__LayerSet.__repr__  sV    +22NN%%NN##q5Cb4M
 	
r'   c                   V ^8  d   QhRR/# )r   r!   	list[str]r#   )r$   s   "r%   r&   r8     s     " "I "r'   c                ,    \        V P                  4      # )a&  The font's layer order.

Getter:
    Returns the font's layer order.

Note:
    The getter always returns a new list, modifications to it do not change
    the LayerSet.

Setter:
    Sets the font's layer order. The set order value must contain all layers
    that are present in the LayerSet.
)listr/   r}   s   &r%   
layerOrderLayerSet.layerOrder  s     DLL!!r'   c                    V ^8  d   QhRRRR/# )r   orderr   r!   r"   r#   )r$   s   "r%   r&   r8   $  s     D D	 Dd Dr'   c                	    \        V4      \        V P                  4      8w  d   \        R 4      hV Uu/ uF  q"V P                  V,          bK  	  upV n        R# u upi )z@`order` must contain the same layers that are currently present.N)setr/   r   )r   r   r   s   && r%   r   r   #  sO    u:T\\**R  >CCUTdll400UCCs   Ac               $    V ^8  d   QhRRRRRR/# )r   r   rR   kwargsr   r!   r   r#   )r$   s   "r%   r&   r8   +  s!      S C E r'   c                    WP                   9   d   \        RV,          4      h\        V3/ VB ;V P                   V&   pVP                  '       d   W0n        V# )z~Creates and returns a named layer.

Args:
    name: The layer name.
    kwargs: Arguments passed to the constructor of Layer.
zlayer %r already exists)r/   r_   r   rE   rW   )r   r   r   r@   s   &&, r%   newLayerLayerSet.newLayer+  sP     <<4t;<<%*4%:6%::TU>>> %r'   c               (    V ^8  d   QhRRRRRRRR/# r   r   rR   newName	overwriterd   r!   r"   r#   )r$   s   "r%   r&   r8   9  s(     & & &c &d &t &r'   c                r  a SV8X  d   R# \         ;QJ d    V3R lV  4       F  '       g   K   RM	  RM! V3R lV  4       4      '       g   \        RS,          4      hV  F'  pW$9   g   K  V'       d   WB K  \        RV,          4      h	  V  F'  pSV9   g   K  VP                  S4      ;WB&   pW%n        K)  	  R# )zRenames a glyph across all layers.

Args:
    name: The old name.
    newName: The new name.
    overwrite: If False, raises exception if newName is already taken in any
        layer. If True, overwrites (read: deletes) the old Glyph object.
Nc              3  .   <"   T F
  pSV9   x  K  	  R # 5ir=   r#   )r?   r@   r   s   & r%   rA   'LayerSet.renameGlyph.<locals>.<genexpr>F  s     3dU45=ds   TFzname %r is not in layer settarget name %r already exists)rF   r_   pop_name)r   r   r   r   r@   glyphs   &f&&  r%   renameGlyphLayerSet.renameGlyph9  s     7?s3d3sss3d33384?@@E"#BW#LMM  Eu}).48% r'   c               (    V ^8  d   QhRRRRRRRR/# r   r#   )r$   s   "r%   r&   r8   U  s(     & & &c &d &t &r'   c                    W8X  d   R# V'       g#   W P                   9   d   \        RV,          4      hW,          pV P                   V W@P                   V&   W$n        V\        8X  d	   W@n        R# R# )zRenames a layer.

Args:
    name: The old name.
    newName: The new name.
    overwrite: If False, raises exception if newName is already taken. If True,
        overwrites (read: deletes) the old Layer object.
Nr   )r/   r_   r   r   rW   )r   r   r   r   r@   s   &&&& r%   renameLayerLayerSet.renameLayerU  sa     ?W4:WDEE
LL %W(( % )r'   c               $    V ^8  d   QhRRRRRR/# )r   writerr   saveAszbool | Noner!   r"   r#   )r$   s   "r%   r&   r8   i  s!     3 3I 3{ 3d 3r'   c                   Vf   V P                   VJpV P                  pV'       gA   \        VP                  4       4      P	                  V4       F  pVP                  V4       K  	  V P                  pVP                  4        FT  w  rFWeJ pV\        J d   V'       d   V P                  VRR7      pMK0  VP                  WGR7      pVP                  WR7       KV  	  VP                  V P                  4       R# )a6  Writes this LayerSet to a :class:`fontTools.ufoLib.UFOWriter`.

Args:
    writer(fontTools.ufoLib.UFOWriter): The writer to write to.
    saveAs: If True, tells the writer to save out-of-place. If False, tells the
        writer to save in-place. This affects how resources are cleaned before
        writing.
NF)rc   )rW   )r   )r5   r/   r   rg   
differencedeleteGlyphSetrW   r   rC   ry   rt   writewriteLayerContentsr   )	r   r   r   rV   r   rW   r@   r0   ru   s	   &&&      r%   r   LayerSet.writei  s     >\\/FF0023>>vF%%d+ G ((!<<>KD+G)) NN4eN<E))$)EHKKK0 * 	!!$//2r'   c                    V ^8  d   QhRRRR/# )r   	converterr   r!   list[dict[str, Any]]r#   )r$   s   "r%   r&   r8     s     @ @i @4H @r'   c                	L    V  Uu. uF  q!P                  V4      NK  	  up# u upi r=   )unstructure)r   r   r@   s   && r%   _unstructureLayerSet._unstructure  s#    :>?$%%e,$???s   !c               (    V ^8  d   QhRRRRRRRR/# )	r   datar   rN   zType[LayerSet]r   r   r!   r-   r#   )r$   s   "r%   r&   r8     s2     V V"V)7VDMV	Vr'   c                	:   a VP                  V3R  lV  4       4      # )c              3  P   <"   T F  pSP                  V\        4      x  K  	  R # 5ir=   )	structurer   )r?   r@   r   s   & r%   rA   &LayerSet._structure.<locals>.<genexpr>  s#      UPTu!4!4UE!B!BPTs   #&)rM   )r   rN   r   s   &&fr%   
_structureLayerSet._structure  s        UPT UUUr'   )r2   r/   r4   r5   rW   )T)TFr=   )F)0r^   r   __qualname____firstlineno____doc__r   r+   r/   __annotations__rC   r2   r4   r5   rI   classmethodr0   r   rM   rk   ro   r   __deepcopy__r   __getstate__r   __setstate__staticmethodrh   ry   propertyrW   setterr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__r#   r'   r%   r-   r-   )   s   B !&.!G  !):uEM5E!$UuEE>E#(Ee#LG L/$ , , =O$= $=L  @ ,L+L"LK K " " # #$#!#
 " "  D D&8&(3:@ V Vr'   r-   N)%
__future__r   typingr   r   r   r   r   r	   r
   r   attrsr   r   fontTools.ufoLibr   r   ufoLib2.constantsr   ufoLib2.errorsr   ufoLib2.objects.layerr   ufoLib2.objects.miscr   r   r   ufoLib2.serder   ufoLib2.typingr   r   cattrsr   rC   r+   r-   r#   r'   r%   <module>r      s{    "	 	 	   1 0   ' 
    9: ?
 bV bV  bVr'   