import { Font } from 'src/types/fontkit' ; export interface FontFlagOptions { fixedPitch ? : boolean ; serif ? : boolean ; symbolic ? : boolean ; script ? : boolean ; nonsymbolic ? : boolean ; italic ? : boolean ; allCap ? : boolean ; smallCap ? : boolean ; forceBold ? : boolean ; } const makeFontFlags = ( options ) => { let flags = 0 ; const flipBit = ( bit ) => { flags |= ( 1 << ( bit - 1 ) ) ; } ; if ( options . fixedPitch ) flipBit ( 1 ) ; if ( options . serif ) flipBit ( 2 ) ; if ( options . symbolic ) flipBit ( 3 ) ; if ( options . script ) flipBit ( 4 ) ; if ( options . nonsymbolic ) flipBit ( 6 ) ; if ( options . italic ) flipBit ( 7 ) ; if ( options . allCap ) flipBit ( 17 ) ; if ( options . smallCap ) flipBit ( 18 ) ; if ( options . forceBold ) flipBit ( 19 ) ; return flags ; } ; export const deriveFontFlags = ( font ) : number => { const familyClass = font [ 'OS/2' ] ? font [ 'OS/2' ] . sFamilyClass : 0 ; const flags = makeFontFlags ( { fixedPitch : font . post . isFixedPitch , serif : 1 <= familyClass && familyClass <= 7 , symbolic : true , script : familyClass === 10 , italic : font . head . macStyle . italic , } ) ; return flags ; } ;