summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/fontviewbase.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/fontviewbase.c')
-rw-r--r--Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/fontviewbase.c286
1 files changed, 286 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/fontviewbase.c b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/fontviewbase.c
new file mode 100644
index 00000000000..7f2a34f1f05
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/fontviewbase.c
@@ -0,0 +1,286 @@
+/* Copyright (C) 2000-2008 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 "pfaedit.h"
+#include "baseviews.h"
+#include "psfont.h"
+#include <gfile.h>
+#include <gio.h>
+#include <ustring.h>
+#include <utype.h>
+#include <chardata.h>
+#include <gresource.h>
+#include <math.h>
+#include <unistd.h>
+
+static FontViewBase *fv_list=NULL;
+
+extern int onlycopydisplayed;
+float joinsnap=0;
+
+
+/* FV Interface */
+
+static FontViewBase *_FontViewBaseCreate(SplineFont *sf) {
+ FontViewBase *fv = gcalloc(1,sizeof(FontViewBase));
+ int i;
+
+ fv->nextsame = sf->fv;
+ fv->active_layer = ly_fore;
+ sf->fv = fv;
+ if ( sf->mm!=NULL ) {
+ sf->mm->normal->fv = fv;
+ for ( i = 0; i<sf->mm->instance_count; ++i )
+ sf->mm->instances[i]->fv = fv;
+ }
+ if ( sf->subfontcnt==0 ) {
+ fv->sf = sf;
+ if ( fv->nextsame!=NULL ) {
+ fv->map = EncMapCopy(fv->nextsame->map);
+ fv->normal = fv->nextsame->normal==NULL ? NULL : EncMapCopy(fv->nextsame->normal);
+ } else if ( sf->compacted ) {
+ fv->normal = sf->map;
+ fv->map = CompactEncMap(EncMapCopy(sf->map),sf);
+ } else {
+ fv->map = sf->map;
+ fv->normal = NULL;
+ }
+ } else {
+ fv->cidmaster = sf;
+ for ( i=0; i<sf->subfontcnt; ++i )
+ sf->subfonts[i]->fv = fv;
+ for ( i=0; i<sf->subfontcnt; ++i ) /* Search for a subfont that contains more than ".notdef" (most significant in .gai fonts) */
+ if ( sf->subfonts[i]->glyphcnt>1 ) {
+ fv->sf = sf->subfonts[i];
+ break;
+ }
+ if ( fv->sf==NULL )
+ fv->sf = sf->subfonts[0];
+ sf = fv->sf;
+ if ( fv->nextsame==NULL ) EncMapFree(sf->map);
+ fv->map = EncMap1to1(sf->glyphcnt);
+ }
+ fv->selected = gcalloc(fv->map->enccount,sizeof(char));
+
+#ifndef _NO_PYTHON
+ PyFF_InitFontHook(fv);
+#endif
+return( fv );
+}
+
+static FontViewBase *FontViewBase_Create(SplineFont *sf,int hide) {
+ FontViewBase *fv = _FontViewBaseCreate(sf);
+ (void)hide;
+return( fv );
+}
+
+static FontViewBase *FontViewBase_Append(FontViewBase *fv) {
+ /* Normally fontviews get added to the fv list when their windows are */
+ /* created. but we don't create any windows here, so... */
+ FontViewBase *test;
+
+ if ( fv_list==NULL ) fv_list = fv;
+ else {
+ for ( test = fv_list; test->next!=NULL; test=test->next );
+ test->next = fv;
+ }
+return( fv );
+}
+
+static void FontViewBase_Free(FontViewBase *fv) {
+ int i;
+ FontViewBase *prev;
+
+ if ( fv->nextsame==NULL && fv->sf->fv==fv ) {
+ EncMapFree(fv->map);
+ SplineFontFree(fv->cidmaster?fv->cidmaster:fv->sf);
+ } else {
+ EncMapFree(fv->map);
+ if ( fv->sf->fv==fv ) {
+ if ( fv->cidmaster==NULL )
+ fv->sf->fv = fv->nextsame;
+ else {
+ fv->cidmaster->fv = fv->nextsame;
+ for ( i=0; i<fv->cidmaster->subfontcnt; ++i )
+ fv->cidmaster->subfonts[i]->fv = fv->nextsame;
+ }
+ } else {
+ for ( prev = fv->sf->fv; prev->nextsame!=fv; prev=prev->nextsame );
+ prev->nextsame = fv->nextsame;
+ }
+ }
+#ifndef _NO_FFSCRIPT
+ DictionaryFree(fv->fontvars);
+ free(fv->fontvars);
+#endif
+ free(fv->selected);
+#ifndef _NO_PYTHON
+ PyFF_FreeFV(fv);
+#endif
+ free(fv);
+}
+
+static int FontViewBaseWinInfo(FontViewBase *fv, int *cc, int *rc) {
+ (void)fv;
+ *cc = 16; *rc = 4;
+return( -1 );
+}
+
+static void FontViewBaseSetTitle(FontViewBase *foo) { (void)foo; }
+static void FontViewBaseSetTitles(SplineFont *foo) { (void)foo; }
+static void FontViewBaseRefreshAll(SplineFont *foo) { (void)foo; }
+static void FontViewBaseReformatOne(FontViewBase *foo) { (void)foo; }
+static void FontViewBaseReformatAll(SplineFont *foo) { (void)foo; }
+static void FontViewBaseLayerChanged(FontViewBase *foo) {(void)foo; }
+static void FV_ToggleCharChanged(SplineChar *foo) {(void)foo; }
+static FontViewBase *FVAny(void) { return fv_list; }
+static int FontIsActive(SplineFont *sf) {
+ FontViewBase *fv;
+
+ for ( fv=fv_list; fv!=NULL; fv=fv->next )
+ if ( fv->sf == sf )
+return( true );
+
+return( false );
+}
+
+static SplineFont *FontOfFilename(const char *filename) {
+ char buffer[1025];
+ FontViewBase *fv;
+
+ GFileGetAbsoluteName((char *) filename,buffer,sizeof(buffer));
+ for ( fv=fv_list; fv!=NULL ; fv=fv->next ) {
+ if ( fv->sf->filename!=NULL && strcmp(fv->sf->filename,buffer)==0 )
+return( fv->sf );
+ else if ( fv->sf->origname!=NULL && strcmp(fv->sf->origname,buffer)==0 )
+return( fv->sf );
+ }
+return( NULL );
+}
+
+static void FVExtraEncSlots(FontViewBase *fv, int encmax) {
+ (void)fv;
+ (void)encmax;
+}
+
+static void FontViewBase_Close(FontViewBase *fv) {
+ if ( fv_list==fv )
+ fv_list = fv->next;
+ else {
+ FontViewBase *n;
+ for ( n=fv_list; n->next!=fv; n=n->next );
+ n->next = fv->next;
+ }
+ FontViewFree(fv);
+}
+
+static void FVB_ChangeDisplayBitmap(FontViewBase *fv, BDFFont *bdf) {
+ fv->active_bitmap = bdf;
+}
+
+static void FVB_ShowFilled(FontViewBase *fv) {
+ fv->active_bitmap = NULL;
+}
+
+static void FVB_ReattachCVs(SplineFont *old, SplineFont *new) {
+ (void)old;
+ (void)new;
+}
+
+static void FVB_DeselectAll(FontViewBase *fv) {
+ memset(fv->selected,0,fv->map->encmax);
+}
+
+static void FVB_DisplayChar(FontViewBase *fv,int gid) {
+ (void)fv;
+ (void)gid;
+}
+
+static int SFB_CloseAllInstrs(SplineFont *sf) {
+ (void)sf;
+return( true );
+}
+
+struct fv_interface noui_fv = {
+ FontViewBase_Create,
+ _FontViewBaseCreate,
+ FontViewBase_Close,
+ FontViewBase_Free,
+ FontViewBaseSetTitle,
+ FontViewBaseSetTitles,
+ FontViewBaseRefreshAll,
+ FontViewBaseReformatOne,
+ FontViewBaseReformatAll,
+ FontViewBaseLayerChanged,
+ FV_ToggleCharChanged,
+ FontViewBaseWinInfo,
+ FontIsActive,
+ FVAny,
+ FontViewBase_Append,
+ FontOfFilename,
+ FVExtraEncSlots,
+ FVExtraEncSlots,
+ FVB_ChangeDisplayBitmap,
+ FVB_ShowFilled,
+ FVB_ReattachCVs,
+ FVB_DeselectAll,
+ FVB_DisplayChar,
+ FVB_DisplayChar,
+ FVB_DisplayChar,
+ SFB_CloseAllInstrs
+};
+
+struct fv_interface *fv_interface = &noui_fv;
+
+
+/******************************************************************************/
+static int NoGlyphs(struct metricsview *mv) {
+ (void)mv;
+return( 0 );
+}
+
+static SplineChar *Nothing(struct metricsview *mv, int i) {
+ (void)mv;
+ (void)i;
+return( NULL );
+}
+
+static void NoReKern(struct splinefont *sf) {
+ (void)sf;
+}
+
+static void NoCloseAll(struct splinefont *sf) {
+ (void)sf;
+}
+
+struct mv_interface noui_mv = {
+ NoGlyphs,
+ Nothing,
+ NoReKern,
+ NoCloseAll
+};
+
+struct mv_interface *mv_interface = &noui_mv;