+
    ZiX                        ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIHtHtH	t	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Ht ^ RIHt ^ RIHt ^ RIHt ^ R	IH t  ^ R
I!H"t" ^ RI#H$t$ ^ RI%H&t& ^ RI'H(t(H)t) ^ RI*H+t+ ^ RI,H-t- ^ RI.H/t/H0t0H1t1H2t2H3t3H4t4 ^ RI5H6t6H7t7H8t8H9t9H:t:H;t; ^ RI<H=t= ^ RI>H?t?H@t@HAtAHBtB R R ltCR R ltDR R ltER R ltFR R ltGR R ltHR  R! ltIR" R# ltJ]=]! R$R%7       ! R& R'4      4       4       tKR# )(    )annotationsN)AnyDictIterableIteratorKeysViewListMappingMutableMappingOptionalSequencecast)definefield)UFOFileStructure	UFOReader	UFOWriter)DEFAULT_LAYER_NAME)DataSet)Features)Glyph)	Guideline)ImageSet)Info)KerningKerningPair)Layer)LayerSet)Lib_convert_Lib_get_lib_get_tempLib_set_lib_set_tempLib)BoundingBox_deepcopy_unlazify_attrs_getstate_unlazify_attrs_object_lib_prune_object_libs_setstate_attrs)serde)
PATH_TYPESHasIdentifierPathLikeTc                    V ^8  d   QhRRRR/# )   valuezLayerSet | Iterable[Layer]returnr    )formats   "6/usr/lib/python3/dist-packages/ufoLib2/objects/font.py__annotate__r7   6   s     S S7 SH S    c                ^    \        V \        4      '       d   V # \        P                  ! V 4      # N)
isinstancer   from_iterabler2   s   &r6   _convert_LayerSetr>   6   s$    uh//5RX5K5KE5RRr8   c                    V ^8  d   QhRRRR/# )r1   r2   zInfo | Mapping[str, Any]r3   r   r4   )r5   s   "r6   r7   r7   :   s     ? ?1 ?d ?r8   c                H    \        V \        4      '       d   V # \        R/ V B # )Nr4   )r;   r   r=   s   &r6   _convert_InforA   :   s    ud++5>>r8   c                    V ^8  d   QhRRRR/# )r1   r2   z$DataSet | MutableMapping[str, bytes]r3   r   r4   )r5   s   "r6   r7   r7   >   s     C C@ CW Cr8   c                H    \        V \        4      '       d   V # \        V 4      # r:   )r;   r   r=   s   &r6   _convert_DataSetrD   >       ug..5BGENBr8   c                    V ^8  d   QhRRRR/# )r1   r2   z%ImageSet | MutableMapping[str, bytes]r3   r   r4   )r5   s   "r6   r7   r7   B   s     E EB Ex Er8   c                H    \        V \        4      '       d   V # \        V 4      # r:   )r;   r   r=   s   &r6   _convert_ImageSetrH   B       uh//5DXe_Dr8   c                    V ^8  d   QhRRRR/# )r1   r2   zFeatures | strr3   r   r4   )r5   s   "r6   r7   r7   F   s     E E^ E Er8   c                H    \        V \        4      '       d   V # \        V 4      # r:   )r;   r   r=   s   &r6   _convert_FeaturesrL   F   rI   r8   c                    V ^8  d   QhRRRR/# )r1   r2   Mapping[KerningPair, float]r3   r   r4   )r5   s   "r6   r7   r7   J   s     C C7 CG Cr8   c                H    \        V \        4      '       d   V # \        V 4      # r:   )r;   r   r=   s   &r6   _convert_KerningrP   J   rE   r8   c                    V ^8  d   QhRRRR/# )r1   selfFontr3   r   r4   )r5   s   "r6   r7   r7   N   s      t  r8   c                    V P                   # r:   )_kerningrR   s   &r6   _get_kerningrW   N   s    ==r8   c               $    V ^8  d   QhRRRRRR/# )r1   rR   rS   r2   rN   r3   Noner4   )r5   s   "r6   r7   r7   R   s"     , ,t ,$? ,D ,r8   c                &    \        V4      V n        R # r:   )rP   rU   rR   r2   s   &&r6   _set_kerningr\   R   s    $U+DMr8   T)kw_onlyc                  V   ] tR t^Vt$ Rt]! ]P                  ]RR/R7      t	R]
R&    ]! ]]R7      tR]
R	&    ]! ]]R7      tR
]
R&    ]! ]R7      tR]
R&    ]! ]]R7      tR]
R&    ]! ]]R7      tR]
R&    ]! ]]R7      tR]
R&    ]! ]]R7      t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RR7      t"R]
R &   ]! RRRR7      t#R!]
R"&   ]$RhR# R$ ll4       t%]$RiR% R& ll4       t&R' R( lt'R) R* lt(R+ R, lt)R- R. lt*R/ R0 lt+R1 R2 lt,RjR3 R4 llt-R5 R6 lt.R7 R8 lt/R9 R: lt0R; R< lt1R= R> lt2R? R@ lt3RA RB lt4]5RC RD l4       t6RE RF lt7]8t9]:t;]<t=]5RG RH l4       t>]>P~                  RI RJ l4       t>]5RK RL l4       t@]@P~                  RM RN l4       t@]5! ]A]B4      tC]5! ]D]E4      tF]5! ]G]H4      tIRO RP ltJ]5RQ RR l4       tK]5RS RT l4       tL]5RU RV l4       tMRW RX ltNRY RZ ltOR[ R\ ltPRkR] R^ lltQRkR_ R` lltRRa Rb ltSRjRc Rd lltTRlRe Rf lltURgtVR# )mrS   a&  A data class representing a single Unified Font Object (UFO).

Font uses :class:`fontTools.ufoLib.UFOReader` and
:class:`fontTools.ufoLib.UFOWriter` to read and write UFO data from and to disk.
It will default to reading lazily, loading glyphs, data and images as they are
accessed. Copying a font implicitly loads everything eagerly before.

The data model is formally specified at
http://unifiedfontobject.org/versions/ufo3/index.html.

Parameters:
    layers (LayerSet): A mapping of layer names to Layer objects.
    info (Info): The font Info object.
    features (Features): The font Features object.
    groups (Dict[str, List[str]]): A mapping of group names to a list of glyph
        names.
    kerning (Dict[Tuple[str, str], float]): A mapping of a tuple of first and
        second kerning pair to a kerning value.
    lib (Dict[str, Any]): A mapping of keys to arbitrary values.
    data (DataSet): A mapping of data file paths to arbitrary data.
    images (ImageSet): A mapping of image file paths to arbitrary image data.
    tempLib (Dict[str, Any]): A temporary mapping of keys to arbitrary values
        which unlike lib are *not* saved to disk.

Behavior:
    The Font object has some dict-like behavior for quick access to glyphs on the
    the default layer. For example, to get a glyph by name from the default layer::

        glyph = font["aGlyphName"]

    To iterate over all glyphs in the default layer::

        for glyph in font:
            pass

    To get the number of glyphs in the default layer::

        glyphCount = len(font)

    To find out if a font contains a particular glyph in the default layer by name::

        exists = "aGlyphName" in font

    To remove a glyph from the default layer by name::

        del font["aGlyphName"]

    To replace a glyph in the default layer with another :class:`.Glyph` object::

        font["aGlyphName"] = otherGlyph

    To copy a font::

        import copy
        fontCopy = copy.deepcopy(font)

    Layers behave the same, for when you're working on something other than the
    default layer.
omit_if_defaultF)factory	convertermetadatar   layers)r`   ra   r   infor   features)r`   zDict[str, List[str]]groupsr   rU   r   _libr   datar   images_tempLibN)defaulteqinitzOptional[PathLike]_path)rk   rm   rl   zOptional[bool]_lazyzOptional[UFOReader]_readerzOptional[UFOFileStructure]_fileStructurec               (    V ^8  d   QhRRRRRRRR/# )r1   pathr.   lazyboolvalidater3   rS   r4   )r5   s   "r6   r7   Font.__annotate__   s(        t t r8   c                ~    \        WR7      pV P                  WBR7      pWn        V'       g   VP                  4        V# )aV  Instantiates a new Font object from a path to a UFO.

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.
    validate: If True, enable UFO data model validation during loading. If
        False, load whatever is deserializable.
)rv   rt   )r   readrn   close)clsrs   rt   rv   readerrR   s   &&&&  r6   open	Font.open   s4     43xxx*
LLNr8   c               $    V ^8  d   QhRRRRRR/# )r1   r}   r   rt   ru   r3   rS   r4   )r5   s   "r6   r7   rw      s!      ) 4 4 r8   c                   V ! \         P                  ! WR7      \        P                  ! WR7      \        P                  ! WR7      \        P                  ! V4      \        VP                  4       4      VP                  4       \        VP                  4       4      \        VP                  4       4      R7      pW#n        VP                  Vn        V'       d   Wn        V# )zInstantiates a Font 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.
ry   )rc   rh   ri   rd   re   rf   kerninglib)r   rz   r   r   r   r   readFeatures
readGroupsr   readKerningr   readLibro   fileStructurerq   rp   )r|   r}   rt   rR   s   &&& r6   rz   	Font.read   s     ==3f0==36"f1134$$&F..01FNN$%	
 
$22!Lr8   c                    V ^8  d   QhRRRR/# )r1   nameobjectr3   ru   r4   )r5   s   "r6   r7   rw      s     1 1 1D 1r8   c                	2    WP                   P                  9   # r:   rc   _defaultLayerrR   r   s   &&r6   __contains__Font.__contains__   s    {{0000r8   c                    V ^8  d   QhRRRR/# )r1   r   strr3   rY   r4   )r5   s   "r6   r7   rw      s     , , , ,r8   c                	4    V P                   P                  V R # r:   r   r   s   &&r6   __delitem__Font.__delitem__   s    KK%%d+r8   c                    V ^8  d   QhRRRR/# r1   r   r   r3   r   r4   )r5   s   "r6   r7   rw      s     / / / /r8   c                	<    V P                   P                  V,          # r:   r   r   s   &&r6   __getitem__Font.__getitem__   s    {{((..r8   c               $    V ^8  d   QhRRRRRR/# )r1   r   r   glyphr   r3   rY   r4   )r5   s   "r6   r7   rw      s!     0 0 0E 0d 0r8   c                	6    W P                   P                  V&   R # r:   r   )rR   r   r   s   &&&r6   __setitem__Font.__setitem__   s    */!!$'r8   c                   V ^8  d   QhRR/# )r1   r3   zIterator[Glyph]r4   )r5   s   "r6   r7   rw      s     / // /r8   c                	@    \        V P                  P                  4      # r:   )iterrc   r   rV   s   &r6   __iter__Font.__iter__   s    DKK--..r8   c                   V ^8  d   QhRR/# )r1   r3   intr4   )r5   s   "r6   r7   rw      s     . . .r8   c                	@    \        V P                  P                  4      # r:   )lenrc   r   rV   s   &r6   __len__Font.__len__   s    4;;,,--r8   c               $    V ^8  d   QhRRRRRR/# )r1   r   r   rk   zT | Noner3   zT | Glyph | Noner4   )r5   s   "r6   r7   rw      s"     < < <h <:J <r8   c                L    V P                   P                  P                  W4      # )zoReturn the :class:`.Glyph` object for name if it is present in the
default layer, otherwise return ``default``.)rc   r   get)rR   r   rk   s   &&&r6   r   Font.get   s     {{((,,T;;r8   c                   V ^8  d   QhRR/# )r1   r3   zKeysView[str]r4   )r5   s   "r6   r7   rw      s     0 0m 0r8   c                J    V P                   P                  P                  4       # )z2Return a list of glyph names in the default layer.)rc   r   keysrV   s   &r6   r   	Font.keys   s    {{((--//r8   c                   V ^8  d   QhRR/# r1   r3   rY   r4   )r5   s   "r6   r7   rw     s     ! !t !r8   c                Z    V P                   e   V P                   P                  4        R# R# )zTCloses the UFOReader if it still exists to finalize any outstanding
file operations.N)rp   r{   rV   s   &r6   r{   
Font.close  s#     <<#LL  $r8   c                   V ^8  d   QhRR/# )r1   r3   rS   r4   )r5   s   "r6   r7   rw   
  s      4 r8   c                	    V # r:   r4   rV   s   &r6   	__enter__Font.__enter__
  s    r8   c               (    V ^8  d   QhRRRRRRRR/# )r1   exc_typer   	exc_valueexc_tbr3   rY   r4   )r5   s   "r6   r7   rw     s(        c d r8   c                	&    V P                  4        R # r:   )r{   )rR   r   r   r   s   &&&&r6   __exit__Font.__exit__  s    

r8   c                   V ^8  d   QhRR/# )r1   r3   r   r4   )r5   s   "r6   r7   rw     s     
 
# 
r8   c           
     	p   \        \        R V P                  P                  V P                  P                  .4      4      pV'       d!   RP                  RP                  V4      4      MRpRP                  V P                  P                  V P                  P                  V\        \        V 4      4      4      # )Nz '{}'  z<{}.{}{} at {}>)listfilterrd   
familyName	styleNamer5   join	__class__
__module____name__hexid)rR   namesfontNames   &  r6   __repr__Font.__repr__  s    VD499#7#79L9L"MNO6;7>>#((5/2 ''NN%%t~~'>'>#bQUh-
 	
r8   c                    V ^8  d   QhRRRR/# r1   otherr   r3   ru   r4   )r5   s   "r6   r7   rw     s     
 
F 
t 
r8   c           	     	(   VP                   V P                   Jd   \        # \        \        V4      pW3 F'  pVP                  '       g   K  VP                  4        K)  	  V P                  V P                  V P                  V P                  V P                  V P                  V P                  V P                  3VP                  VP                  VP                  VP                  VP                  VP                  VP                  VP                  38H  # r:   )r   NotImplementedr   rS   ro   unlazifyrc   rd   re   rf   r   r   rh   ri   )rR   r   fonts   && r6   __eq__Font.__eq__  s     ??$..0!!T5!MDzzz "
 KKIIMMKKLLHHIIKK	
 LLJJNNLLMMIIJJLL	

 	
r8   c                    V ^8  d   QhRRRR/# r   r4   )r5   s   "r6   r7   rw   8  s      F t r8   c                	R    V P                  V4      pV\        J d   \        # V'       * # r:   )r   r   )rR   r   results   && r6   __ne__Font.__ne__8  s&    U#^#!!zr8   c                   V ^8  d   QhRR/# )r1   r3   zUFOReader | Noner4   )r5   s   "r6   r7   rw   ?  s      ( r8   c                    V P                   # )z;Returns the underlying :class:`fontTools.ufoLib.UFOReader`.)rp   rV   s   &r6   r}   Font.reader>  s     ||r8   c                   V ^8  d   QhRR/# r   r4   )r5   s   "r6   r7   rw   C  s      $ r8   c                    V P                   '       d_   V P                  f   Q hV P                  P                  4        V P                  P                  4        V P
                  P                  4        RV n         R# )zXLoad all glyphs, data files and images if the Font object loaded
them lazily previously.NF)ro   rp   rc   r   rh   ri   rV   s   &r6   r   Font.unlazifyC  sT     :::<<+++KK  "II KK  "
r8   c                   V ^8  d   QhRR/# )r1   r3   z	list[str]r4   )r5   s   "r6   r7   rw   S  s     P PI Pr8   c           	     ~    \        \        \        \        ,          V P                  P                  R. 4      4      4      # )a  The font's glyph order.

See http://unifiedfontobject.org/versions/ufo3/lib.plist/#publicglyphorder for
semantics.

Getter:
    Return the font's glyph order, if it is set in lib, or an empty list.

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

Setter:
    Sets the font's glyph order. If ``value`` is None or an empty list, the
    glyph order key will be deleted from the lib if it exists.
public.glyphOrder)r   r   r   r   r   r   rV   s   &r6   
glyphOrderFont.glyphOrderR  s*    $ D#5H"(MNOOr8   c                    V ^8  d   QhRRRR/# )r1   r2   zlist[str] | Noner3   rY   r4   )r5   s   "r6   r7   rw   g  s     2 2 0 2T 2r8   c                	    Ve   \        V4      ^ 8X  d#   RV P                  9   d   V P                  R R # R # WP                  R&   R # )Nr   )r   r   r[   s   &&r6   r   r   f  s>    =CJ!O"dhh.HH01 / -2HH()r8   c                   V ^8  d   QhRR/# )r1   r3   zlist[Guideline]r4   )r5   s   "r6   r7   rw   o  s     $ $O $r8   c                b    V P                   P                  f   . # V P                   P                  # )zThe font's global guidelines.

Getter:
    Returns the font's global guidelines or an empty list.

Setter:
    Appends the list of Guidelines to the global Guidelines.
        XXX Should it replace them?
)rd   
guidelinesrV   s   &r6   r   Font.guidelinesn  s)     99'Iyy###r8   c                    V ^8  d   QhRRRR/# )r1   r2   z'Iterable[Guideline | Mapping[str, Any]]r3   rY   r4   )r5   s   "r6   r7   rw   ~  s     , , G ,D ,r8   c                	\    . V P                   n        V F  pV P                  V4       K  	  R # r:   )rd   r   appendGuideline)rR   r2   	guidelines   && r6   r   r   }  s&    !		I  + r8   c                    V ^8  d   QhRRRR/# )r1   r   r-   r3   zdict[str, Any]r4   )r5   s   "r6   r7   rw     s     - - -. -r8   c                .    \        V P                  V4      # )a  Return the lib for an object with an identifier, as stored in a font's lib.

If the object does not yet have an identifier, a new one is assigned to it. If
the font lib does not yet contain the object's lib, a new one is inserted and
returned.

.. doctest::

    >>> from ufoLib2.objects import Font, Guideline
    >>> font = Font()
    >>> font.guidelines = [Guideline(x=100)]
    >>> guideline_lib = font.objectLib(font.guidelines[0])
    >>> guideline_lib["com.test.foo"] = 1234
    >>> guideline_id = font.guidelines[0].identifier
    >>> assert guideline_id is not None
    >>> assert font.lib["public.objectLibs"][guideline_id] is guideline_lib
)r(   r   )rR   r   s   &&r6   	objectLibFont.objectLib  s    & 488V,,r8   c                   V ^8  d   QhRR/# )r1   r3   PathLike | Noner4   )r5   s   "r6   r7   rw     s      o r8   c                    V P                   # )z3Return the path of the UFO, if it was set, or None.)rn   rV   s   &r6   rs   	Font.path  s     zzr8   c                   V ^8  d   QhRR/# r1   r3   zBoundingBox | Noner4   )r5   s   "r6   r7   rw     s     0 0* 0r8   c                B    V P                   P                  P                  # )zReturns the (xMin, yMin, xMax, yMax) bounding box of the default
layer, taking the actual contours into account.

|defcon_compat|
)rc   r   boundsrV   s   &r6   r  Font.bounds  s     {{((///r8   c                   V ^8  d   QhRR/# r  r4   )r5   s   "r6   r7   rw     s     < <$6 <r8   c                B    V P                   P                  P                  # )z~Returns the (xMin, yMin, xMax, yMax) bounding box of the layer,
taking only the control points into account.

|defcon_compat|
)rc   r   controlPointBoundsrV   s   &r6   r  Font.controlPointBounds  s     {{((;;;r8   c                    V ^8  d   QhRRRR/# )r1   r   r   r3   rY   r4   )r5   s   "r6   r7   rw     s     2 2e 2 2r8   c                P    V P                   P                  P                  V4       R# )zAppends glyph object to the default layer unless its name is already
taken.

Note:
    Call the method on the layer directly if you want to overwrite entries
    with the same name or append copies of the glyph.
N)rc   r   addGlyph)rR   r   s   &&r6   r  Font.addGlyph  s     	!!**51r8   c                    V ^8  d   QhRRRR/# r   r4   )r5   s   "r6   r7   rw     s     8 8S 8U 8r8   c                L    V P                   P                  P                  V4      # )zJCreates and returns new :class:`.Glyph` object in default layer with
name.)rc   r   newGlyphr   s   &&r6   r  Font.newGlyph  s     {{((11$77r8   c               $    V ^8  d   QhRRRRRR/# )r1   r   r   kwargsr   r3   r   r4   )r5   s   "r6   r7   rw     s!     4 4S 4C 4E 4r8   c                <    V P                   P                  ! V3/ VB # )zCreates and returns a new :class:`.Layer`.

Args:
    name: The name of the new layer.
    kwargs: The arguments passed to the Layer object constructor.
)rc   newLayer)rR   r   r  s   &&,r6   r  Font.newLayer  s     {{##D3F33r8   c               (    V ^8  d   QhRRRRRRRR/# r1   r   r   newName	overwriteru   r3   rY   r4   )r5   s   "r6   r7   rw     s.     	H 	H 	Hc 	Hd 	Ht 	Hr8   c                R    V P                   P                  P                  WV4       R# )a  Renames a :class:`.Glyph` object in the default 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 :class:`.Glyph` object.
N)rc   r   renameGlyphrR   r   r  r  s   &&&&r6   r  Font.renameGlyph  s     	!!--dYGr8   c               (    V ^8  d   QhRRRRRRRR/# r  r4   )r5   s   "r6   r7   rw     s(     	: 	: 	:c 	:d 	:t 	:r8   c                >    V P                   P                  WV4       R# )zRenames a :class:`.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 :class:`.Layer` object.
N)rc   renameLayerr  s   &&&&r6   r!  Font.renameLayer  s     	y9r8   c                    V ^8  d   QhRRRR/# )r1   r   zGuideline | Mapping[str, Any]r3   rY   r4   )r5   s   "r6   r7   rw     s     / /)F /4 /r8   c                T   \        V\        4      '       gD   \        V\        4      '       g#   \        RR\	        V4      P
                   24      h\        R/ VB pV P                  P                  f   . V P                  n        V P                  P                  P                  V4       R# )zAppends a guideline to the list of the font's global guidelines.

Creates the global guideline list unless it already exists.

Args:
    guideline: A :class:`.Guideline` object or a mapping for the Guideline
        constructor.
z/Expected Guideline object or a Mapping for the zGuideline constructor, found Nr4   )	r;   r   r
   	TypeErrortyper   rd   r   append)rR   r   s   &&r6   r   Font.appendGuideline  s     )Y//i11E3DO4L4L3MN  ".I.I99'#%DII 		##I.r8   c               $    V ^8  d   QhRRRRRR/# )r1   writerr   saveAszbool | Noner3   rY   r4   )r5   s   "r6   r7   rw     s!     1 1I 1{ 1d 1r8   c                $   Vf   V P                   VJpV P                  P                  P                  \        8w  d"   \        V P                  P
                  9  g   Q hVP                  V P                  P                  4       VP                  V P                  4       VP                  V P                  4       VP                  V P                  4       \        V P                   V P"                   Uu0 uF  q3P$                  f   K  VP$                  kK   	  up4       VP'                  V P                   4       V P                  P)                  WR7       V P*                  P)                  WR7       V P,                  P)                  WR7       R# u upi )a3  Writes this Font to a :class:`fontTools.ufoLib.UFOWriter`.

Args:
    writer: The :class:`fontTools.ufoLib.UFOWriter` 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.
Nr+  )rp   rc   r   r   r   
layerOrderwriteFeaturesre   textwriteGroupsrf   	writeInford   writeKerningr   r)   r   r   
identifierwriteLibwriterh   ri   )rR   r*  r+  gs   &&& r6   r6  
Font.write  s    >\\/F;;$$))-??%T[[-C-CCCCT]]//04;;'#DLL)HH#'??O?all\Q\\?O	
 	!&0		.&0 Ps   1F
F
c               0    V ^8  d   QhRRRRRRRRR	RR
R/# )r1   rs   r   formatVersionr   	structurezUFOFileStructure | Noner  ru   rv   r3   rY   r4   )r5   s   "r6   r7   rw     sN     [ [[ [ +	[
 [ [ 
[r8   c                   V^8w  d   \        RV 24      hVe   \        V4      pMV P                  e   V P                  pVe^   \        V\        4      '       dH   \
        P                  ! \
        P                  P                  \
        P                  ! V4      4      4      pR;rgVRJpV'       d   \        V\        4      '       d   \
        P                  P                  V4      '       d   V'       d   Tp\        P                  R	8  d   \        P                  ! 4       pM\        P                  ! RR7      p\
        P                  P!                  VP"                  \
        P                  P%                  V4      4      pMG^ RIp	\)        V	P*                  RV,          4      hM%V P                  f   \-        R4      hV P                  p \/        WVR7      ;_uu_ 4       p
V P1                  WR7       RRR4       X
P3                  4        Ve   \        V\        4      '       g   Q h\
        P                  P5                  V4      '       d   \6        P8                  ! V4       M;\
        P                  P;                  V4      '       d   \
        P<                  ! V4       \6        P>                  ! W4       TpTe    TPC                  4        M \        T\        4      '       d	   Yn#        R# R#   + '       g   i     EL; i  \@         d    h i ; i  \D         d     LQi ; i  Te$    TPC                  4        i   \D         d     i i ; ii ; i)
aU  Saves the font to ``path``.

Args:
    path: The target path. If it is None, the path from the last save or when
        the font was first opened will be used.
    formatVersion: The version to save the UFO as. Only version 3 is supported
        currently.
    structure (fontTools.ufoLib.UFOFileStructure): How to store the UFO.
        Can be either None, "zip" or "package". If None, it tries to use the
        same structure as the original UFO at the output path. If "zip", the
        UFO will be saved as compressed archive. If "package", it is saved as
        a regular folder or "package".
    overwrite: If False, raises OSError when the target path exists. If True,
        overwrites the target path.
    validate: If True, will validate the data in Font before writing it out. If
        False, will write out whatever is serializable.
zunsupported format version: NT)ignore_cleanup_errorszpath %r already existsz)'path' is required when saving a new Font)r;  rv   r-  )   
   )$NotImplementedErrorr   rq   r;   r,   osfsdecoders   normpathfspathr   existssysversion_infotempfileTemporaryDirectoryr   r   basenameerrnoOSErrorEEXISTr%  r   r6  setModificationTimeisdirshutilrmtreeisfileremovemove	ExceptioncleanupPermissionErrorrn   )rR   rs   r:  r;  r  rv   overwritePathtmpr+  rK  r*  s   &&&&&&     r6   save	Font.save  s~   2 A%(D]O&TUU  (3I  ,++I 
4 < <;;rww//		$@AD""T!$$$)=)=$(M'''1&99;&99PTU77<<"''2B2B42HID !%,,0H40OPPYYGHH99D	4xHHF

6
1 I&&( (!$,,,, 77==//MM-0WW^^M22IIm,D0$ KKM  dC  J !; IHH  		$ '  KKM&  sy   K= K)/K= A L ;L .L 7L )K:	4	K= =L

L LLM$L54M5M MMM)rq   ro   rn   rp   )TT)Tr:   )F)Nr>  NFT)Wr   r   __qualname____firstlineno____doc__r   r   rk   r>   rc   __annotations__r   rA   rd   r   rL   re   dictrf   r   rP   rU   r   r    rg   r   rD   rh   r   rH   ri   rj   rn   ro   rp   rq   classmethodr~   rz   r   r   r   r   r   r   r   r   r{   r   r   r   r   r   propertyr}   r   r&   __deepcopy__r'   __getstate__r*   __setstate__r   setterr   rW   r\   r   r!   r#   r   r"   r$   tempLibr   rs   r  r  r  r  r  r  r!  r   r6  rZ  __static_attributes__r4   r8   r6   rS   rS   V   s   :x   ##U+FH 
 ?t}=D$=%x;LMHhM-#(#6F 6Rg9IJHgJ  c\:D#:Q'5EFD'FBX9JKFHKJ#>Hc>O !&du5 IEI!$UuEE>E#(Ee#LG L165U2N.   "  21,/0/.<
0!

@   ,L+L"LP P& 2 2 $ $ , ,
 |\2G
8X
&C|\2G-*   0 0 < <28
4	H	:/(1<[ [r8   rS   )L
__future__r   rA  rP  rF  rH  typingr   r   r   r   r   r	   r
   r   r   r   r   attrsr   r   fontTools.ufoLibr   r   r   ufoLib2.constantsr   ufoLib2.objects.dataSetr   ufoLib2.objects.featuresr   ufoLib2.objects.glyphr   ufoLib2.objects.guideliner   ufoLib2.objects.imageSetr   ufoLib2.objects.infor   ufoLib2.objects.kerningr   r   ufoLib2.objects.layerr   ufoLib2.objects.layerSetr   ufoLib2.objects.libr   r    r!   r"   r#   r$   ufoLib2.objects.miscr%   r&   r'   r(   r)   r*   ufoLib2.serder+   ufoLib2.typingr,   r-   r.   r/   r>   rA   rD   rH   rL   rP   rW   r\   rS   r4   r8   r6   <module>r{     s    " 	  
       C C 0 + - ' / - % 8 ' -     A AS?CEEC, X X  Xr8   