diff options
Diffstat (limited to 'Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/splinechar.c')
-rw-r--r-- | Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/splinechar.c | 328 |
1 files changed, 0 insertions, 328 deletions
diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/splinechar.c b/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/splinechar.c deleted file mode 100644 index 41cbc0745db..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/fontforge/splinechar.c +++ /dev/null @@ -1,328 +0,0 @@ -/* -*- coding: utf-8 -*- */ -/* Copyright (C) 2000-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 <utype.h> - -#ifdef HAVE_IEEEFP_H -# include <ieeefp.h> /* Solaris defines isnan in ieeefp rather than math.h */ -#endif - -int adjustwidth = true; - -RefChar *HasUseMyMetrics(SplineChar *sc,int layer) { - RefChar *r; - - if ( layer==ly_grid ) layer = ly_fore; - - for ( r=sc->layers[layer].refs; r!=NULL; r=r->next ) - if ( r->use_my_metrics ) -return( r ); - -return( NULL ); -} - -/* if they changed the width, then change the width on all bitmap chars of */ -/* ours, and if we are a letter, then change the width on all chars linked */ -/* to us which had the same width that we used to have (so if we change the */ -/* width of A, we'll also change that of À and Ä and ... */ -void SCSynchronizeWidth(SplineChar *sc,real newwidth, real oldwidth) { - struct splinecharlist *dlist; - RefChar *r = HasUseMyMetrics(sc,ly_fore); - int isprobablybase; - - sc->widthset = true; - if( r!=NULL ) { - if ( oldwidth==r->sc->width ) { - sc->width = r->sc->width; -return; - } - newwidth = r->sc->width; - } - if ( newwidth==oldwidth ) -return; - sc->width = newwidth; - if ( !adjustwidth ) -return; - - isprobablybase = true; - if ( sc->unicodeenc==-1 || sc->unicodeenc>=0x10000 || - !isalpha(sc->unicodeenc) || iscombining(sc->unicodeenc)) - isprobablybase = false; - - for ( dlist=sc->dependents; dlist!=NULL; dlist=dlist->next ) { - RefChar *metrics = HasUseMyMetrics(dlist->sc,ly_fore); - if ( metrics!=NULL && metrics->sc!=sc ) - continue; - else if ( metrics==NULL && !isprobablybase ) - continue; - if ( dlist->sc->width==oldwidth && - (metrics!=NULL)) { - SCSynchronizeWidth(dlist->sc,newwidth,oldwidth); - if ( !dlist->sc->changed ) { - dlist->sc->changed = true; - } - } - } -} - -static int _SCRefNumberPoints2(SplineSet **_rss,SplineChar *sc,int pnum,int layer) { - SplineSet *ss, *rss = *_rss; - SplinePoint *sp, *rsp; - RefChar *r; - int starts_with_cp, startcnt; - - for ( ss=sc->layers[layer].splines; ss!=NULL; ss=ss->next, rss=rss->next ) { - if ( rss==NULL ) /* Can't happen */ - break; - starts_with_cp = !ss->first->noprevcp && - ((ss->first->ttfindex == pnum+1 && ss->first->prev!=NULL && - ss->first->prev->from->nextcpindex==pnum ) || - ((ss->first->ttfindex==0xffff || SPInterpolate( ss->first )))); - startcnt = pnum; - if ( starts_with_cp ) ++pnum; - for ( sp = ss->first, rsp=rss->first; ; ) { - if ( sp->ttfindex==0xffff || SPInterpolate( sp )) - rsp->ttfindex = 0xffff; - else - rsp->ttfindex = pnum++; - if ( sp->next==NULL ) - break; - if ( sp->next!=NULL && sp->next->to == ss->first ) { - if ( sp->nonextcp ) - rsp->nextcpindex = 0xffff; - else if ( starts_with_cp ) - rsp->nextcpindex = startcnt; - else - rsp->nextcpindex = pnum++; - break; - } - if ( sp->nonextcp ) - rsp->nextcpindex = 0xffff; - else - rsp->nextcpindex = pnum++; - if ( sp->next==NULL ) - break; - sp = sp->next->to; - rsp = rsp->next->to; - } - } - - *_rss = rss; - for ( r = sc->layers[layer].refs; r!=NULL; r=r->next ) - pnum = _SCRefNumberPoints2(_rss,r->sc,pnum,layer); -return( pnum ); -} - -static int SCRefNumberPoints2(RefChar *ref,int pnum,int layer) { - SplineSet *rss; - - rss = ref->layers[0].splines; -return( _SCRefNumberPoints2(&rss,ref->sc,pnum,layer)); -} - -int SSTtfNumberPoints(SplineSet *ss) { - int pnum=0; - SplinePoint *sp; - int starts_with_cp; - - for ( ; ss!=NULL; ss=ss->next ) { - starts_with_cp = !ss->first->noprevcp && - ((ss->first->ttfindex == pnum+1 && ss->first->prev!=NULL && - ss->first->prev->from->nextcpindex==pnum ) || - SPInterpolate( ss->first )); - if ( starts_with_cp && ss->first->prev!=NULL ) - ss->first->prev->from->nextcpindex = pnum++; - for ( sp=ss->first; ; ) { - if ( SPInterpolate(sp) ) - sp->ttfindex = 0xffff; - else - sp->ttfindex = pnum++; - if ( sp->nonextcp && sp->nextcpindex!=pnum ) - sp->nextcpindex = 0xffff; - else if ( !starts_with_cp || (sp->next!=NULL && sp->next->to!=ss->first) ) - sp->nextcpindex = pnum++; - if ( sp->next==NULL ) - break; - sp = sp->next->to; - if ( sp==ss->first ) - break; - } - } -return( pnum ); -} - -static int SSPsNumberPoints(SplineChar *sc, SplineSet *splines,int pnum) { - SplineSet *ss; - SplinePoint *sp; - - for ( ss = splines; ss!=NULL; ss=ss->next ) { - for ( sp=ss->first; ; ) { - sp->ttfindex = pnum++; - sp->nextcpindex = 0xffff; - if ( sc->numberpointsbackards ) { - if ( sp->prev==NULL ) - break; - if ( !sp->noprevcp || !sp->prev->from->nonextcp ) - pnum += 2; - sp = sp->prev->from; - } else { - if ( sp->next==NULL ) - break; - if ( !sp->nonextcp || !sp->next->to->noprevcp ) - pnum += 2; - sp = sp->next->to; - } - if ( sp==ss->first ) - break; - } - } -return( pnum ); -} - -int SCNumberPoints(SplineChar *sc,int layer) { - int pnum=0; - SplineSet *ss; - SplinePoint *sp; - RefChar *ref; - - if ( layer<0 || layer>=sc->layer_cnt ) - return( pnum ); - - if ( sc->layers[layer].order2 ) { /* TrueType and its complexities. I ignore svg here */ - if ( sc->layers[layer].refs!=NULL ) { - /* if there are references there can't be splines. So if we've got*/ - /* splines mark all point numbers on them as meaningless */ - for ( ss = sc->layers[layer].splines; ss!=NULL; ss=ss->next ) { - for ( sp=ss->first; ; ) { - sp->ttfindex = 0xfffe; - if ( !sp->nonextcp ) - sp->nextcpindex = 0xfffe; - if ( sp->next==NULL ) - break; - sp = sp->next->to; - if ( sp==ss->first ) - break; - } - } - for ( ref = sc->layers[layer].refs; ref!=NULL; ref=ref->next ) - pnum = SCRefNumberPoints2(ref,pnum,layer); - } else { - pnum = SSTtfNumberPoints(sc->layers[layer].splines); - } - } else { /* cubic (PostScript/SVG) splines */ - int first, last; - if ( sc->parent->multilayer ) { - first = ly_fore; - last = sc->layer_cnt-1; - } else - first = last = layer; - for ( layer=first; layer<=last; ++layer ) { - for ( ref = sc->layers[layer].refs; ref!=NULL; ref=ref->next ) - pnum = SSPsNumberPoints(sc,ref->layers[0].splines,pnum); - pnum = SSPsNumberPoints(sc,sc->layers[layer].splines,pnum); - } - } -return( pnum ); -} - -int SCPointsNumberedProperly(SplineChar *sc,int layer) { - int pnum=0, skipit; - SplineSet *ss; - SplinePoint *sp; - int starts_with_cp; - int start_pnum; - - if ( sc->layers[layer].splines!=NULL && - sc->layers[layer].refs!=NULL ) -return( false ); /* TrueType can't represent this, so always remove instructions. They can't be meaningful */ - - for ( ss = sc->layers[layer].splines; ss!=NULL; ss=ss->next ) { - starts_with_cp = (ss->first->ttfindex == pnum+1 || ss->first->ttfindex==0xffff) && - !ss->first->noprevcp; - start_pnum = pnum; - if ( starts_with_cp ) ++pnum; - for ( sp=ss->first; ; ) { - skipit = SPInterpolate(sp); - if ( sp->nonextcp || sp->noprevcp ) skipit = false; - if ( sp->ttfindex==0xffff && skipit ) - /* Doesn't count */; - else if ( sp->ttfindex!=pnum ) -return( false ); - else - ++pnum; - if ( sp->nonextcp && sp->nextcpindex==0xffff ) - /* Doesn't count */; - else if ( sp->nextcpindex==pnum ) - ++pnum; - else if ( sp->nextcpindex==start_pnum && starts_with_cp && - (sp->next!=NULL && sp->next->to==ss->first) ) - /* Ok */; - else -return( false ); - if ( sp->next==NULL ) - break; - sp = sp->next->to; - if ( sp==ss->first ) - break; - } - /* if ( starts_with_cp ) --pnum; */ - } -return( true ); -} - -void AltUniAdd(SplineChar *sc,int uni) { - struct altuni *altuni; - - if ( sc!=NULL && uni!=-1 && uni!=sc->unicodeenc ) { - for ( altuni = sc->altuni; altuni!=NULL && (altuni->unienc!=uni || - altuni->vs!=-1 || - altuni->fid); altuni=altuni->next ); - if ( altuni==NULL ) { - altuni = chunkalloc(sizeof(struct altuni)); - altuni->next = sc->altuni; - sc->altuni = altuni; - altuni->unienc = uni; - altuni->vs = -1; - altuni->fid = 0; - } - } -} - -void AltUniAdd_DontCheckDups(SplineChar *sc,int uni) { - struct altuni *altuni; - - if ( sc!=NULL && uni!=-1 && uni!=sc->unicodeenc ) { - altuni = chunkalloc(sizeof(struct altuni)); - altuni->next = sc->altuni; - sc->altuni = altuni; - altuni->unienc = uni; - altuni->vs = -1; - altuni->fid = 0; - } -} |