summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/mm.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/mm.c')
-rw-r--r--Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/mm.c307
1 files changed, 0 insertions, 307 deletions
diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/mm.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/mm.c
deleted file mode 100644
index 4de1319bfa9..00000000000
--- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/mm.c
+++ /dev/null
@@ -1,307 +0,0 @@
-/* Copyright (C) 2003-2012 by George Williams */
-/*
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
-
- * The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
-
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "fontforgevw.h"
-#include "ttf.h"
-
-/******************************************************************************/
-/* MM Validation */
-/******************************************************************************/
-
-static int ContourCount(SplineChar *sc) {
- SplineSet *spl;
- int i;
-
- for ( spl=sc->layers[ly_fore].splines, i=0; spl!=NULL; spl=spl->next, ++i );
-return( i );
-}
-
-static int ContourPtMatch(SplineChar *sc1, SplineChar *sc2) {
- SplineSet *spl1, *spl2;
- SplinePoint *sp1, *sp2;
-
- for ( spl1=sc1->layers[ly_fore].splines, spl2=sc2->layers[ly_fore].splines; spl1!=NULL && spl2!=NULL; spl1=spl1->next, spl2=spl2->next ) {
- for ( sp1=spl1->first, sp2 = spl2->first; ; ) {
- if ( sp1->nonextcp!=sp2->nonextcp || sp1->noprevcp!=sp2->noprevcp )
-return( false );
- if ( sp1->next==NULL || sp2->next==NULL ) {
- if ( sp1->next==NULL && sp2->next==NULL )
- break;
-return( false );
- }
- sp1 = sp1->next->to; sp2 = sp2->next->to;
- if ( sp1==spl1->first || sp2==spl2->first ) {
- if ( sp1==spl1->first && sp2==spl2->first )
- break;
-return( false );
- }
- }
- }
-return( true );
-}
-
-static int ContourDirMatch(SplineChar *sc1, SplineChar *sc2) {
- SplineSet *spl1, *spl2;
-
- for ( spl1=sc1->layers[ly_fore].splines, spl2=sc2->layers[ly_fore].splines; spl1!=NULL && spl2!=NULL; spl1=spl1->next, spl2=spl2->next ) {
- if ( SplinePointListIsClockwise(spl1)!=SplinePointListIsClockwise(spl2) )
-return( false );
- }
-return( true );
-}
-
-static int ContourHintMaskMatch(SplineChar *sc1, SplineChar *sc2) {
- SplineSet *spl1, *spl2;
- SplinePoint *sp1, *sp2;
-
- for ( spl1=sc1->layers[ly_fore].splines, spl2=sc2->layers[ly_fore].splines; spl1!=NULL && spl2!=NULL; spl1=spl1->next, spl2=spl2->next ) {
- for ( sp1=spl1->first, sp2 = spl2->first; ; ) {
- if ( (sp1->hintmask==NULL)!=(sp2->hintmask==NULL) )
-return( false );
- if ( sp1->hintmask!=NULL && memcmp(sp1->hintmask,sp2->hintmask,sizeof(HintMask))!=0 )
-return( false );
- if ( sp1->next==NULL || sp2->next==NULL ) {
- if ( sp1->next==NULL && sp2->next==NULL )
- break;
-return( false );
- }
- sp1 = sp1->next->to; sp2 = sp2->next->to;
- if ( sp1==spl1->first || sp2==spl2->first ) {
- if ( sp1==spl1->first && sp2==spl2->first )
- break;
-return( false );
- }
- }
- }
-return( true );
-}
-
-static int RefMatch(SplineChar *sc1, SplineChar *sc2) {
- RefChar *ref1, *ref2;
- /* I don't require the reference list to be ordered */
-
- for ( ref1=sc1->layers[ly_fore].refs, ref2=sc2->layers[ly_fore].refs; ref1!=NULL && ref2!=NULL; ref1=ref1->next, ref2=ref2->next )
- ref2->checked = false;
- if ( ref1!=NULL || ref2!=NULL )
-return( false );
-
- for ( ref1=sc1->layers[ly_fore].refs; ref1!=NULL ; ref1=ref1->next ) {
- for ( ref2=sc2->layers[ly_fore].refs; ref2!=NULL ; ref2=ref2->next ) {
- if ( ref2->sc->orig_pos==ref1->sc->orig_pos && !ref2->checked )
- break;
- }
- if ( ref2==NULL )
-return( false );
- ref2->checked = true;
- }
-
-return( true );
-}
-
-static int RefTransformsMatch(SplineChar *sc1, SplineChar *sc2) {
- /* Apple only provides a means to change the translation of a reference */
- /* so if rotation, skewing, scaling, etc. differ then we can't deal with */
- /* it. */
- RefChar *r1 = sc1->layers[ly_fore].refs;
- RefChar *r2 = sc2->layers[ly_fore].refs;
-
- while ( r1!=NULL && r2!=NULL ) {
- if ( r1->transform[0]!=r2->transform[0] ||
- r1->transform[1]!=r2->transform[1] ||
- r1->transform[2]!=r2->transform[2] ||
- r1->transform[3]!=r2->transform[3] )
-return( false );
- r1 = r1->next;
- r2 = r2->next;
- }
-return( true );
-}
-
-static int HintsMatch(StemInfo *h1,StemInfo *h2) {
- while ( h1!=NULL && h2!=NULL ) {
- h1 = h1->next;
- h2 = h2->next;
- }
-return ( h1==NULL && h2==NULL );
-}
-
-static int KernsMatch(SplineChar *sc1, SplineChar *sc2) {
- /* I don't require the kern list to be ordered */
- /* Only interested in kerns that go into afm files (ie. no kernclasses) */
- KernPair *k1, *k2;
-
- for ( k1=sc1->kerns, k2=sc2->kerns; k1!=NULL && k2!=NULL; k1=k1->next, k2=k2->next )
- k2->kcid = false;
- if ( k1!=NULL || k2!=NULL )
-return( false );
-
- for ( k1=sc1->kerns; k1!=NULL ; k1=k1->next ) {
- for ( k2=sc2->kerns; k2!=NULL ; k2=k2->next ) {
- if ( k2->sc->orig_pos==k1->sc->orig_pos && !k2->kcid )
- break;
- }
- if ( k2==NULL )
-return( false );
- k2->kcid = true;
- }
-
-return( true );
-}
-
-static int ArrayCount(char *val) {
- char *end;
- int cnt;
-
- if ( val==NULL )
-return( 0 );
- while ( *val==' ' ) ++val;
- if ( *val=='[' ) ++val;
- cnt=0;
- while ( *val ) {
- strtod(val,&end);
- if ( val==end )
- break;
- ++cnt;
- val = end;
- }
-return( cnt );
-}
-
-int MMValid(MMSet *mm,int complain) {
- int i, j;
- SplineFont *sf;
- static char *arrnames[] = { "BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StdHW", "StdVW", "StemSnapH", "StemSnapV", NULL };
-
- if ( mm==NULL )
-return( false );
-
- for ( i=0; i<mm->instance_count; ++i )
- if ( mm->instances[i]->layers[ly_fore].order2 != mm->apple ) {
-return( false );
- }
-
- sf = mm->apple ? mm->normal : mm->instances[0];
-
- if ( !mm->apple && PSDictHasEntry(sf->private,"ForceBold")!=NULL &&
- PSDictHasEntry(mm->normal->private,"ForceBoldThreshold")==NULL) {
-return( false );
- }
-
- for ( j=mm->apple ? 0 : 1; j<mm->instance_count; ++j ) {
- if ( sf->glyphcnt!=mm->instances[j]->glyphcnt ) {
-return( false );
- } else if ( sf->layers[ly_fore].order2!=mm->instances[j]->layers[ly_fore].order2 ) {
-return( false );
- }
- if ( !mm->apple ) {
- if ( PSDictHasEntry(mm->instances[j]->private,"ForceBold")!=NULL &&
- PSDictHasEntry(mm->normal->private,"ForceBoldThreshold")==NULL) {
-return( false );
- }
- for ( i=0; arrnames[i]!=NULL; ++i ) {
- if ( ArrayCount(PSDictHasEntry(mm->instances[j]->private,arrnames[i]))!=
- ArrayCount(PSDictHasEntry(sf->private,arrnames[i])) ) {
-return( false );
- }
- }
- }
- }
-
- for ( i=0; i<sf->glyphcnt; ++i ) {
- for ( j=mm->apple?0:1; j<mm->instance_count; ++j ) {
- if ( SCWorthOutputting(sf->glyphs[i])!=SCWorthOutputting(mm->instances[j]->glyphs[i]) ) {
-return( false );
- }
- }
- if ( SCWorthOutputting(sf->glyphs[i]) ) {
- if ( mm->apple && sf->glyphs[i]->layers[ly_fore].refs!=NULL && sf->glyphs[i]->layers[ly_fore].splines!=NULL ) {
-return( false );
- }
- for ( j=mm->apple?0:1; j<mm->instance_count; ++j ) {
- if ( mm->apple && mm->instances[j]->glyphs[i]->layers[ly_fore].refs!=NULL &&
- mm->instances[j]->glyphs[i]->layers[ly_fore].splines!=NULL ) {
-return( false );
- }
- if ( ContourCount(sf->glyphs[i])!=ContourCount(mm->instances[j]->glyphs[i])) {
-return( false );
- } else if ( !mm->apple && !ContourPtMatch(sf->glyphs[i],mm->instances[j]->glyphs[i])) {
-return( false );
- } else if ( !ContourDirMatch(sf->glyphs[i],mm->instances[j]->glyphs[i])) {
-return( false );
- } else if ( !RefMatch(sf->glyphs[i],mm->instances[j]->glyphs[i])) {
-return( false );
- } else if ( mm->apple && !RefTransformsMatch(sf->glyphs[i],mm->instances[j]->glyphs[i])) {
-return( false );
- } else if ( !mm->apple && !KernsMatch(sf->glyphs[i],mm->instances[j]->glyphs[i])) {
-return( false );
- }
- }
- if ( mm->apple && !ContourPtNumMatch(mm,i)) {
-return( false );
- }
- if ( !mm->apple ) {
- for ( j=1; j<mm->instance_count; ++j ) {
- if ( !HintsMatch(sf->glyphs[i]->hstem,mm->instances[j]->glyphs[i]->hstem)) {
-return( false );
- } else if ( !HintsMatch(sf->glyphs[i]->vstem,mm->instances[j]->glyphs[i]->vstem)) {
-return( false );
- }
- }
- for ( j=1; j<mm->instance_count; ++j ) {
- if ( !ContourHintMaskMatch(sf->glyphs[i],mm->instances[j]->glyphs[i])) {
-return( false );
- }
- }
- }
- }
- }
- if ( mm->apple ) {
- struct ttf_table *cvt;
- for ( cvt = mm->normal->ttf_tables; cvt!=NULL && cvt->tag!=CHR('c','v','t',' '); cvt=cvt->next );
- if ( cvt==NULL ) {
- for ( j=0; j<mm->instance_count; ++j ) {
- if ( mm->instances[j]->ttf_tables!=NULL ) {
-return( false );
- }
- }
- } else {
- /* Not all instances are required to have cvts, but any that do */
- /* must be the same size */
- for ( j=0; j<mm->instance_count; ++j ) {
- if ( mm->instances[j]->ttf_tables!=NULL &&
- (mm->instances[j]->ttf_tables->next!=NULL ||
- mm->instances[j]->ttf_tables->tag!=CHR('c','v','t',' '))) {
-return( false );
- }
- if ( mm->instances[j]->ttf_tables!=NULL &&
- mm->instances[j]->ttf_tables->len!=cvt->len ) {
-return( false );
- }
- }
- }
- }
-return( true );
-}