
     #e9                    P   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZmZ d dlZd dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ ddlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' dZ(d%dZ)ejT                  jW                  e)      Z, G d de      Z-d&dZ.e G d de             Z/e G d de             Z0 G d de      Z1 ede      Z2	 	 	 	 	 	 d'dZ3	 	 	 	 d(dZ4	 	 	 	 d)dZ5	 	 	 	 d*dZ6d+dZ7	 	 	 	 d,dZ8	 d-	 	 	 	 	 	 	 d.d Z9d-d/d!Z:d-d/d"Z;ee G d# d$                    Z<y)0    )annotations)IntEnum)partial)AnyCallableListMappingOptionalSequenceTypeVarN)definefield)	UFOReader)	Guideline)AttrDictMixin)serde   )WoffMetadataCopyrightWoffMetadataCreditWoffMetadataCreditsWoffMetadataDescriptionWoffMetadataExtensionWoffMetadataExtensionItemWoffMetadataExtensionNameWoffMetadataExtensionValueWoffMetadataLicenseWoffMetadataLicenseeWoffMetadataTextWoffMetadataTrademarkWoffMetadataUniqueIDWoffMetadataVendor)InfoGaspRangeRecord
NameRecord
WidthClassr   r   r   r   r   r   r   r   r   r   r   r   r    r!   c                Z    |dk  r&t        dj                  |j                  |            y )Nr   z+'{name}' must be at least 0 (got {value!r}))namevalue)
ValueErrorformatr'   )instance	attributer(   s      ?/usr/lib/python3/dist-packages/ufoLib2/objects/info/__init__.py	_positiver.   6   s8    qy9@@^^5 A 
 	
     c                      e Zd ZdZdZdZdZy)GaspBehaviorr   r         N)__name__
__module____qualname__GRIDFITDOGRAYSYMMETRIC_GRIDFITSYMMETRIC_SMOOTHING r/   r-   r1   r1   C   s    GFr/   r1   c                b    | D cg c]  }t        |t              r|n
t        |      ! c}S c c}w N)
isinstancer1   )seqvs     r-   _convert_GaspBehaviorrA   J   s(    KNOaA|,A,q/AOOOs   $,c                  F    e Zd ZU  ee      Zded<    ee      Zded<   y)r#   	validatorintrangeMaxPPEM)	converterzList[GaspBehavior]rangeGaspBehaviorN)	r4   r5   r6   r   r.   rF   __annotations__rA   rH   r;   r/   r-   r#   r#   N   s#    	2L#2,1<Q,R)Rr/   r#   c                      e Zd ZU  ee      Zded<    ee      Zded<    ee      Zded<    ee      Z	ded<   dZ
ded	<   y
)r$   rC   rE   nameID
platformID
encodingID
languageID strstringN)r4   r5   r6   r   r.   rK   rI   rL   rM   rN   rQ   r;   r/   r-   r$   r$   U   sH    ),FC,i0J0i0J0i0J0FCr/   r$   c                  4    e Zd ZdZdZdZdZdZdZdZ	dZ
dZd	Zy
)r%   r   r2   r3                  	   N)r4   r5   r6   ULTRA_CONDENSEDEXTRA_CONDESED	CONDENSEDSEMI_CONDENSEDNORMALMEDIUMSEMI_EXPANDEDEXPANDEDEXTRA_EXPANDEDULTRA_EXPANDEDr;   r/   r-   r%   r%   ^   s4    ONINFFMHNNr/   r%   Tc)boundc                P    |y |D cg c]  }| j                  |       c}S c c}w r=   )coerce_from_dict)clslstds      r-   _convert_optional_list_of_dictsrj   n   s+     {-01C  #111s   #c                "    t        t        |       S r=   )rj   r   valuess    r-   _convert_guidelinesrn   v   s     +9f==r/   c                "    t        t        |       S r=   )rj   r#   rl   s    r-   _convert_gasp_range_recordsrp   |   s     +?FCCr/   c                "    t        t        |       S r=   )rj   r$   rl   s    r-   _convert_name_recordsrr      s     +:v>>r/   c                     | d S t        |       S r=   )r%   )r(   s    r-   _convert_WidthClassrt      s    =47j&77r/   c                "    t        t        |       S r=   )rj   r   rl   s    r-   _convert_WoffMetadataExtensionsrv      s     ++@&IIr/   c                    |'| j                   }d|d   j                          |dd   }|dfd}dfd}t        ||      S )N_r   r   c                    t        |       S r=   )getattr)self	attr_names    r-   getterz*_converter_setter_property.<locals>.getter   s    tY''r/   c                ,    t        |  |             y r=   )setattr)r{   r(   r|   rG   s     r-   setterz*_converter_setter_property.<locals>.setter   s    i5!12r/   )r{   r   returnr   )r{   r   r(   r   r   None)r4   lowerproperty)rg   rG   r'   
class_namer}   r   r|   s    `    @r-   _converter_setter_propertyr      sV     |\\
:a=&&()*QR.)9:I(3 FF##r/   c                0    t        | | j                  |      S r=   )r   coerce_from_optional_dictrg   r'   s     r-   _dict_setter_propertyr      s    %c3+H+H$OOr/   c                8    t        | t        t        |       |      S r=   )r   r   rj   r   s     r-   _dict_list_setter_propertyr      s    %W4c:D r/   c                  	   e Zd ZU dZdZded<   dZded<   dZded<   dZded<    e	de
      Zd	ed
<    e	de
      Zd	ed<   dZded<   dZded<    e	de
      Zded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<    e	de      Zded<   edd       Zej4                  dd       Z e	de      Zded<   edd       Zej4                  dd       ZdZded<    e	de
      Zd	ed <   dZ d!ed"<   dZ!d	ed#<   dZ"d	ed$<   dZ#d	ed%<   dZ$d	ed&<   dZ%d	ed'<   dZ&d	ed(<   dZ'ded)<   dZ(ded*<   dZ)ded+<   dZ*ded,<   dZ+ded-<   dZ,ded.<   dZ-ded/<   dZ.ded0<   dZ/ded1<   dZ0ded2<   dZ1ded3<   dZ2ded4<   dZ3ded5<   dZ4ded6<   dZ5ded7<    e	de6      Z7d8ed9<   edd:       Z8e8j4                  dd;       Z8 e	de9      Z:d<ed=<   edd>       Z;e;j4                  dd?       Z; e	d@      Z<d	edA<   e<jz                  ddB       Z>dZ?d!edC<   dZ@dedD<   dZAd!edE<   dZBd!edF<   dZCd!edG<   dZDd!edH<   dZEd	edI<   dZFd	edJ<   dZGd	edK<    e	de
      ZHd	edL<    e	de
      ZId	edM<   dZJd!edN<   dZKd	edO<   dZLd	edP<   dZMd	edQ<   dZNd	edR<   dZOd	edS<   dZPd	edT<   dZQd	edU<   dZRd	edV<   dZSd	edW<   dZTd	edX<   dZUd	edY<   dZVd	edZ<   dZWd	ed[<   dZXd	ed\<   dZYd	ed]<   dZZd	ed^<   dZ[ded_<   dZ\ded`<   dZ]deda<   dZ^d	edb<   dZ_dedc<   dZ`dedd<   dZadeedf<   dZbdgedh<   dZcdgedi<   dZddgedj<   dZedgedk<   dZfdgedl<   dZgdgedm<   dZhdedn<   dZidedo<   dZjdedp<   dZkdeedq<   dZldedr<   dZmdeds<   dZndedt<   dZodedu<   dZpd	edv<   dZqdedw<   dZrd	edx<   dZsd	edy<    e	de
      Ztd	edz<    e	de
      Zud	ed{<    e	devj                        Zxd|ed}<    eyev      Zz e	de{j                        Z|d~ed<    eye{      Z} e	de~j                        Zded<    eye~      Z e	dej                        Zded<    eye      Z e	dej                        Zded<    eye      Z e	dej                        Zded<    eye      Z e	dej                        Zded<    eye      Z e	dej                        Zded<    eye      Z e	de      Zded<    eed      Zedd       Zy)r"   zA data class representing the contents of fontinfo.plist.

    The attributes are formally specified at
    http://unifiedfontobject.org/versions/ufo3/fontinfo.plist/. Value validation is
    mostly done during saving and loading.
    NzOptional[str]
familyName	styleNamestyleMapFamilyNamestyleMapStyleName)defaultrD   zOptional[int]versionMajorversionMinor	copyright	trademarkzOptional[float]
unitsPerEm	descenderxHeight	capHeightascenderitalicAnglenote)r   rG   zOptional[List[Guideline]]_guidelinesc                    | j                   S r=   )r   r{   s    r-   
guidelineszInfo.guidelines   s    r/   c                $    t        |      | _        y r=   )rn   r   r{   r(   s     r-   r   zInfo.guidelines   s    .u5r/   zOptional[List[GaspRangeRecord]]_openTypeGaspRangeRecordsc                    | j                   S r=   )r   r   s    r-   openTypeGaspRangeRecordszInfo.openTypeGaspRangeRecords   s    ---r/   c                $    t        |      | _        y r=   )rp   r   r   s     r-   r   zInfo.openTypeGaspRangeRecords   s    )DU)K&r/   openTypeHeadCreatedopenTypeHeadLowestRecPPEMzOptional[List[int]]openTypeHeadFlagsopenTypeHheaAscenderopenTypeHheaDescenderopenTypeHheaLineGapopenTypeHheaCaretSlopeRiseopenTypeHheaCaretSlopeRunopenTypeHheaCaretOffsetopenTypeNameDesigneropenTypeNameDesignerURLopenTypeNameManufactureropenTypeNameManufacturerURLopenTypeNameLicenseopenTypeNameLicenseURLopenTypeNameVersionopenTypeNameUniqueIDopenTypeNameDescriptionopenTypeNamePreferredFamilyName"openTypeNamePreferredSubfamilyNameopenTypeNameCompatibleFullNameopenTypeNameSampleTextopenTypeNameWWSFamilyNameopenTypeNameWWSSubfamilyNamezOptional[List[NameRecord]]_openTypeNameRecordsc                    | j                   S r=   )r   r   s    r-   openTypeNameRecordszInfo.openTypeNameRecords  s    (((r/   c                $    t        |      | _        y r=   )rr   r   r   s     r-   r   zInfo.openTypeNameRecords  s    $9%$@!r/   zOptional[WidthClass]_openTypeOS2WidthClassc                    | j                   S r=   )r   r   s    r-   openTypeOS2WidthClasszInfo.openTypeOS2WidthClass  s    ***r/   c                8    ||| _        y t        |      | _        y r=   )r%   r   r   s     r-   r   zInfo.openTypeOS2WidthClass  s    /4}e#*UBS#r/   )r   openTypeOS2WeightClassc                4    ||dk  s|dkD  rt        d      y y )Nr   i  z3'openTypeOS2WeightClass' must be between 1 and 1000)r)   )r{   r,   r(   s      r-   _validate_weight_classzInfo._validate_weight_class  s(    %!)ut|RSS 0<r/   openTypeOS2SelectionopenTypeOS2VendorIDopenTypeOS2PanoseopenTypeOS2FamilyClassopenTypeOS2UnicodeRangesopenTypeOS2CodePageRangesopenTypeOS2TypoAscenderopenTypeOS2TypoDescenderopenTypeOS2TypoLineGapopenTypeOS2WinAscentopenTypeOS2WinDescentopenTypeOS2TypeopenTypeOS2SubscriptXSizeopenTypeOS2SubscriptYSizeopenTypeOS2SubscriptXOffsetopenTypeOS2SubscriptYOffsetopenTypeOS2SuperscriptXSizeopenTypeOS2SuperscriptYSizeopenTypeOS2SuperscriptXOffsetopenTypeOS2SuperscriptYOffsetopenTypeOS2StrikeoutSizeopenTypeOS2StrikeoutPositionopenTypeVheaVertTypoAscenderopenTypeVheaVertTypoDescenderopenTypeVheaVertTypoLineGapopenTypeVheaCaretSlopeRiseopenTypeVheaCaretSlopeRunopenTypeVheaCaretOffsetpostscriptFontNamepostscriptFullNamepostscriptSlantAnglepostscriptUniqueIDpostscriptUnderlineThicknesspostscriptUnderlinePositionzOptional[bool]postscriptIsFixedPitchzOptional[List[float]]postscriptBlueValuespostscriptOtherBluespostscriptFamilyBluespostscriptFamilyOtherBluespostscriptStemSnapHpostscriptStemSnapVpostscriptBlueFuzzpostscriptBlueShiftpostscriptBlueScalepostscriptForceBoldpostscriptDefaultWidthXpostscriptNominalWidthXpostscriptWeightNamepostscriptDefaultCharacterpostscriptWindowsCharacterSetmacintoshFONDNamemacintoshFONDFamilyIDyearwoffMajorVersionwoffMinorVersionzOptional[WoffMetadataUniqueID]_woffMetadataUniqueIDzOptional[WoffMetadataVendor]_woffMetadataVendorzOptional[WoffMetadataCredits]_woffMetadataCreditsz!Optional[WoffMetadataDescription]_woffMetadataDescriptionzOptional[WoffMetadataLicense]_woffMetadataLicensezOptional[WoffMetadataCopyright]_woffMetadataCopyrightzOptional[WoffMetadataTrademark]_woffMetadataTrademarkzOptional[WoffMetadataLicensee]_woffMetadataLicenseez%Optional[List[WoffMetadataExtension]]_woffMetadataExtensionsc                6     |        }|j                  |       |S )zNInstantiates a Info object from a
        :class:`fontTools.ufoLib.UFOReader`.)readInfo)rg   readerr{   s      r-   readz	Info.read  s     ur/   )r   list[Guideline] | None)r(   r  r   r   )r   list[GaspRangeRecord] | None)r(   r  r   r   )r   list[NameRecord] | None)r(   r  r   r   )r   WidthClass | None)r(   r  r   r   )r,   r   r(   
int | Noner   r   )r  r   r   r"   )r4   r5   r6   __doc__r   rI   r   r   r   r   _optional_positiver   r   r   r   r   r   r   r   r   r   r   rn   r   r   r   r   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r   r   rt   r   r   r   rD   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r    r   r  r   woffMetadataUniqueIDr!   r  woffMetadataVendorr   r  woffMetadataCreditsr   r  woffMetadataDescriptionr   r  woffMetadataLicenser   r  woffMetadataCopyrightr   r  woffMetadataTrademarkr   r	  woffMetadataLicenseerv   r
  r   r   woffMetadataExtensionsclassmethodr  r;   r/   r-   r"   r"      sn    !%J$#I}#(,,'+}+"'@R"SL-S"'@R"SL-S#I}##I}#"'@R"SJS!%I%#G_#!%I% $Ho$#'K'D--2 3.K*      6 6 BG ;B>  . . $$L %L *.-/4 20}  .2*1*.-.+/=/)--044/3}3-1]1*.-.-1]1.2m2155)--,0M0)--*.-.-1]159#]98<&<48"M8,0M0/3}326 -67< 584  ) ) A  A 49 340  + + !!T "T -2$,?M?%%T &T 15-4)---1*126/648185929-1]1.2m2,0M0*/ 2+-  ,1 2,=  ,0O(//3}3/3}315515515515537!=737!=7.2m226 -626 -637!=7155044/3}3-1]1(,,(,,,0/0(,,48 /8377-1N126/626/637078< 5<15.515.5*..+//+//*../3_3/3_3*.-.04437!=7 (,}++/=/D- ',DDV&WmW&+DDV&WmW<A '@@=9  11EF8=$>>95  //AB:?%??;7  00CDBG)CCC?  44KL:?%??;7  00CD>C'AA?;  22GH>C'AA?;  22GH<A&@@=9  11EFEJ1FB  88  r/   r"   )r+   r   r,   r   r(   rE   r   r   )r?   zSequence[GaspBehavior | int]r   zlist[GaspBehavior])rg   type[Tc]rh   z'Sequence[Tc | Mapping[str, Any]] | Noner   zlist[Tc] | None)rm   z.Sequence[Guideline | Mapping[str, Any]] | Noner   r  )rm   z4Sequence[GaspRangeRecord | Mapping[str, Any]] | Noner   r  )rm   z/Sequence[NameRecord | Mapping[str, Any]] | Noner   r  )r(   r  r   r  )rm   z:Sequence[WoffMetadataExtension | Mapping[str, Any]] | Noner   z"list[WoffMetadataExtension] | Noner=   )rg   z	type[Any]rG   zCallable[[Any], Any]r'   
str | Noner   r   )rg   r   r'   r!  r   r   )=
__future__r   enumr   	functoolsr   typingr   r   r   r	   r
   r   r   attrsr   r   fontTools.ufoLibr   ufoLib2.objects.guideliner   ufoLib2.objects.miscr   ufoLib2.serder   woffr   r   r   r   r   r   r   r   r   r   r   r   r    r!   __all__r.   
validatorsoptionalr  r1   rA   r#   r$   r%   rc   rj   rn   rp   rr   rt   rv   r   r   r   r"   r;   r/   r-   <module>r/     s   "   L L L   & / .    ",
 %%..y9 7 P Sm S S   
 
 T'2	2?22>:>>D@D!D?;??8JFJ'J IM$	$3$;E$$$P q q  qr/   