Lines Matching refs:fpst

72 FPST *FPSTGlyphToClass(FPST *fpst) {  in FPSTGlyphToClass()  argument
78 if ( fpst->format!=pst_glyphs ) in FPSTGlyphToClass()
82 new->type = fpst->type; in FPSTGlyphToClass()
84 new->subtable = fpst->subtable; in FPSTGlyphToClass()
85 new->rule_cnt = fpst->rule_cnt; in FPSTGlyphToClass()
86 new->rules = calloc(fpst->rule_cnt,sizeof(struct fpst_rule)); in FPSTGlyphToClass()
91 for ( i=0; i<fpst->rule_cnt; ++i ) { in FPSTGlyphToClass()
94 if ( (&fpst->rules[i].u.glyph.names)[j]!=NULL && *(&fpst->rules[i].u.glyph.names)[j]!='\0' ) { in FPSTGlyphToClass()
95 for ( pt=(&fpst->rules[i].u.glyph.names)[j]; *pt; ) { in FPSTGlyphToClass()
107 for ( pt=(&fpst->rules[i].u.glyph.names)[j]; *pt; pt=end ) { in FPSTGlyphToClass()
126 new->rules[i].lookup_cnt = fpst->rules[i].lookup_cnt; in FPSTGlyphToClass()
127 new->rules[i].lookups = malloc(fpst->rules[i].lookup_cnt*sizeof(struct seqlookup)); in FPSTGlyphToClass()
128 memcpy(new->rules[i].lookups,fpst->rules[i].lookups, in FPSTGlyphToClass()
129 fpst->rules[i].lookup_cnt*sizeof(struct seqlookup)); in FPSTGlyphToClass()
134 if ( fpst->type==pst_chainpos || fpst->type==pst_chainsub ) { in FPSTGlyphToClass()
264 static struct contexttree *_FPST2Tree(FPST *fpst,struct contexttree *parent,int class) { in _FPST2Tree() argument
269 if ( fpst!=NULL ) { in _FPST2Tree()
271 me->rule_cnt = fpst->rule_cnt; in _FPST2Tree()
274 me->rules[i].rule = &fpst->rules[i]; in _FPST2Tree()
316 static void FPSTBuildAllClasses(FPST *fpst) { in FPSTBuildAllClasses() argument
319 for ( i=0; i<fpst->rule_cnt; ++i ) { in FPSTBuildAllClasses()
320 fpst->rules[i].u.class.allclasses = malloc((fpst->rules[i].u.class.bcnt+ in FPSTBuildAllClasses()
321 fpst->rules[i].u.class.ncnt+ in FPSTBuildAllClasses()
322 fpst->rules[i].u.class.fcnt+ in FPSTBuildAllClasses()
324 off = fpst->rules[i].u.class.bcnt; in FPSTBuildAllClasses()
326 fpst->rules[i].u.class.allclasses[j] = fpst->rules[i].u.class.bclasses[off-1-j]; in FPSTBuildAllClasses()
327 for ( j=0; j<fpst->rules[i].u.class.ncnt; ++j ) in FPSTBuildAllClasses()
328 fpst->rules[i].u.class.allclasses[off+j] = fpst->rules[i].u.class.nclasses[j]; in FPSTBuildAllClasses()
330 for ( j=0; j<fpst->rules[i].u.class.fcnt; ++j ) in FPSTBuildAllClasses()
331 fpst->rules[i].u.class.allclasses[off+j] = fpst->rules[i].u.class.fclasses[j]; in FPSTBuildAllClasses()
332 fpst->rules[i].u.class.allclasses[off+j] = 0xffff; /* End of rule marker */ in FPSTBuildAllClasses()
336 static void FPSTFreeAllClasses(FPST *fpst) { in FPSTFreeAllClasses() argument
339 for ( i=0; i<fpst->rule_cnt; ++i ) { in FPSTFreeAllClasses()
340 free( fpst->rules[i].u.class.allclasses ); in FPSTFreeAllClasses()
341 fpst->rules[i].u.class.allclasses = NULL; in FPSTFreeAllClasses()
345 static struct contexttree *FPST2Tree(SplineFont *sf,FPST *fpst) { in FPST2Tree() argument
348 if ( fpst->format != pst_class ) in FPST2Tree()
353 if ( (fpst->bccnt!=0 && !ClassesMatch(fpst->bccnt,fpst->bclass,fpst->nccnt,fpst->nclass)) || in FPST2Tree()
354 (fpst->fccnt!=0 && !ClassesMatch(fpst->fccnt,fpst->fclass,fpst->nccnt,fpst->nclass))) in FPST2Tree()
357 FPSTBuildAllClasses(fpst); in FPST2Tree()
359 ret = _FPST2Tree(fpst,NULL,0); in FPST2Tree()
366 FPSTFreeAllClasses(fpst); in FPST2Tree()
398 int FPSTisMacable(SplineFont *sf, FPST *fpst) { in FPSTisMacable() argument
404 if ( fpst->type!=pst_contextsub && fpst->type!=pst_chainsub ) in FPSTisMacable()
406 for ( fl = fpst->subtable->lookup->features; fl!=NULL; fl=fl->next ) { in FPSTisMacable()
414 if ( fpst->format == pst_glyphs ) { in FPSTisMacable()
415 FPST *tempfpst = FPSTGlyphToClass(fpst); in FPSTisMacable()
420 } else if ( fpst->format == pst_class ) { in FPSTisMacable()
421 ret = FPST2Tree(sf, fpst); in FPSTisMacable()
424 } else if ( fpst->format != pst_coverage ) in FPSTisMacable()
427 for ( i=0; i<fpst->rule_cnt; ++i ) { in FPSTisMacable()
428 if ( fpst->rules[i].u.coverage.ncnt+ in FPSTisMacable()
429 fpst->rules[i].u.coverage.bcnt+ in FPSTisMacable()
430 fpst->rules[i].u.coverage.fcnt>=10 ) in FPSTisMacable()
433 if ( fpst->rules[i].lookup_cnt==2 ) { in FPSTisMacable()
434 switch ( fpst->format ) { in FPSTisMacable()
437 if ( fpst->rules[i].u.coverage.fcnt!=0 || in FPSTisMacable()
438 fpst->rules[i].lookups[0].seq==fpst->rules[i].lookups[1].seq || in FPSTisMacable()
439 (fpst->rules[i].lookups[0].seq!=fpst->rules[i].u.coverage.ncnt-1 && in FPSTisMacable()
440 fpst->rules[i].lookups[1].seq!=fpst->rules[i].u.coverage.ncnt-1) ) in FPSTisMacable()
446 if ( !ValidSubs(fpst->rules[i].lookups[1].lookup) ) in FPSTisMacable()
449 } else if ( fpst->rules[i].lookup_cnt!=1 ) in FPSTisMacable()
451 if ( !ValidSubs(fpst->rules[i].lookups[0].lookup) ) in FPSTisMacable()
455 return( fpst->rule_cnt>0 ); in FPSTisMacable()
676 FPST *fpst,SplineFont *sf,int ordered) { in morx_cg_FigureClasses() argument
738 if ( fpst->subtable->lookup->lookup_flags & pst_ignorecombiningmarks ) { in morx_cg_FigureClasses()
784 static ASM *ASMFromCoverageFPST(SplineFont *sf,FPST *fpst,int ordered) { in ASMFromCoverageFPST() argument
788 struct fpst_rule *r = &fpst->rules[0]; in ASMFromCoverageFPST()
823 &classes,&class_cnt,&map,&gcnt,fpst,sf,ordered); in ASMFromCoverageFPST()
837 sm->flags = (fpst->subtable->lookup->lookup_flags&pst_r2l) ? asm_descending : 0; in ASMFromCoverageFPST()
869 …} else if ( i==2 || ((fpst->subtable->lookup->lookup_flags&pst_ignorecombiningmarks) && i==class_c… in ASMFromCoverageFPST()
954 static ASM *ASMFromClassFPST(SplineFont *sf,FPST *fpst, struct contexttree *tree) { in ASMFromClassFPST() argument
961 sm->flags = (fpst->subtable->lookup->lookup_flags&pst_r2l) ? asm_descending : 0; in ASMFromClassFPST()
963 …sm->class_cnt = (fpst->subtable->lookup->lookup_flags&pst_ignorecombiningmarks) ? fpst->nccnt+4 : in ASMFromClassFPST()
966 for ( i=1; i<fpst->nccnt; ++i ) in ASMFromClassFPST()
967 sm->classes[i+3] = copy(fpst->nclass[i]); in ASMFromClassFPST()
968 if ( fpst->subtable->lookup->lookup_flags&pst_ignorecombiningmarks ) in ASMFromClassFPST()
979 if ( fpst->subtable->lookup->lookup_flags&pst_ignorecombiningmarks ) in ASMFromClassFPST()
981 for ( i=1; i<fpst->nccnt; ++i ) in ASMFromClassFPST()
988 FPSTBuildAllClasses(fpst); in ASMFromClassFPST()
991 for ( i=1; i<fpst->nccnt; ++i ) if ( FailureTrans(&sm->state[off+3+i]) ) { in ASMFromClassFPST()
998 FPSTFreeAllClasses(fpst); in ASMFromClassFPST()
1002 ASM *ASMFromFPST(SplineFont *sf,FPST *fpst,int ordered) { in ASMFromFPST() argument
1003 FPST *tempfpst=fpst; in ASMFromFPST()
1007 if ( fpst->format==pst_glyphs ) in ASMFromFPST()
1008 tempfpst = FPSTGlyphToClass( fpst ); in ASMFromFPST()
1010 sm = ASMFromCoverageFPST(sf,fpst,ordered); in ASMFromFPST()
1020 if ( tempfpst!=fpst ) in ASMFromFPST()
1025 sm->subtable = fpst->subtable; in ASMFromFPST()