diff --git a/buildScripts/buildFontforge b/buildScripts/buildFontforge index f2d5823..9df9001 100755 --- a/buildScripts/buildFontforge +++ b/buildScripts/buildFontforge @@ -17,7 +17,11 @@ echo "" # see: https://github.com/travis-ci/travis-ci/issues/5301 (unfixed) # if [ -n "$PYTHON_CFLAGS" ] ; then - export PYTHON_CFLAGS="$(pkg-config --cflags python) $PYTHON_CFLAGS" + export PYTHON_CFLAGS="$(python3-config --cflags) $PYTHON_CFLAGS" +fi + +if [ -n "$PYTHON_LIBS" ] ; then + export PYTHON_LIBS="$(python3-config --ldflags) $PYTHON_LIBS" fi echo "" @@ -26,21 +30,34 @@ echo "-------------------------------" echo $PYTHON_CFLAGS echo "-------------------------------" echo "" +echo "" +echo "PYTHON_LIBS:" +echo "-------------------------------" +echo $PYTHON_LIBS +echo "-------------------------------" +echo "" # Can use "configure --disable-silent-rules" to debug configuration/make # problems # cd fontforge + ./bootstrap -./configure + +./configure \ + --prefix=/usr/local \ + --enable-python-scripting=3 \ + --disable-dependency-tracking \ + --disable-silent-rules \ + --without-x # Apply any patches required for fontforge raw sources before we make # -for APATCHFILE in $(ls ../patches/fontforge-$FONTFORGE_VERSION-*) -do - echo "patching fontforge using [$APATCHFILE]" - patch -p 1 < $APATCHFILE -done +#for APATCHFILE in $(ls ../patches/fontforge-$FONTFORGE_VERSION-*) +#do +# echo "patching fontforge using [$APATCHFILE]" +# patch -p 1 < $APATCHFILE +#done make $MAKE_PARALLEL diff --git a/buildScripts/buildInstallLocally b/buildScripts/buildInstallLocally index 4c0a3d3..4c15ffe 100755 --- a/buildScripts/buildInstallLocally +++ b/buildScripts/buildInstallLocally @@ -10,7 +10,7 @@ export MAKE_PARALLEL="-j $(nproc)" # choose one of the following... # -export PDF2HTMLEX_BRANCH=newBuildSystem +export PDF2HTMLEX_BRANCH=fontforge-update # export PDF2HTMLEX_BRANCH="$(git rev-parse --abbrev-ref HEAD)" ################ diff --git a/buildScripts/getDevLibraries b/buildScripts/getDevLibraries index 37b80f5..dadc2e4 100755 --- a/buildScripts/getDevLibraries +++ b/buildScripts/getDevLibraries @@ -24,4 +24,4 @@ sudo apt-get $UNATTENDED install \ liblcms2-dev \ libxml2-dev \ libuninameslist-dev \ - libpython-dev + python3-dev diff --git a/buildScripts/getPdf2htmlEX b/buildScripts/getPdf2htmlEX index 5c988d6..7075601 100755 --- a/buildScripts/getPdf2htmlEX +++ b/buildScripts/getPdf2htmlEX @@ -3,7 +3,7 @@ # This bash script automates the process of getting the original pdf2htmlEX # source -PDF2HTMLEX_BRANCH=newBuildSystem +PDF2HTMLEX_BRANCH=fontforge-update echo "" echo "-------------------------------------------------------------------" diff --git a/buildScripts/uploadImages b/buildScripts/uploadImages old mode 100644 new mode 100755 diff --git a/buildScripts/versionEnvs b/buildScripts/versionEnvs index ccc0093..54b12f4 100755 --- a/buildScripts/versionEnvs +++ b/buildScripts/versionEnvs @@ -6,8 +6,8 @@ #export POPPLER_VERSION=poppler-0.82.0 export POPPLER_VERSION=poppler-0.81.0 -#export FONTFORGE_VERSION=20190801 -export FONTFORGE_VERSION=20170731 +export FONTFORGE_VERSION=20190801 +#export FONTFORGE_VERSION=20170731 if [ -z "$PDF2HTMLEX_BRANCH" ]; then export PDF2HTMLEX_BRANCH="$(git rev-parse --abbrev-ref HEAD)" diff --git a/pdf2htmlEX/CMakeLists.txt b/pdf2htmlEX/CMakeLists.txt index 22c3906..68d77c7 100644 --- a/pdf2htmlEX/CMakeLists.txt +++ b/pdf2htmlEX/CMakeLists.txt @@ -59,6 +59,7 @@ endif() pkg_check_modules(FONTFORGE REQUIRED libfontforge>=2.0.0) include_directories(${FONTFORGE_INCLUDE_DIRS}) link_directories(${FONTFORGE_LIBRARY_DIRS}) +set(FONTFORGE_LIBRARIES ${FONTFORGE_LIBRARIES} -lgutils) set(PDF2HTMLEX_LIBS ${PDF2HTMLEX_LIBS} ${FONTFORGE_LIBRARIES}) # debug build flags (overwrite default cmake debug flags) diff --git a/pdf2htmlEX/src/HTMLRenderer/HTMLRenderer.h b/pdf2htmlEX/src/HTMLRenderer/HTMLRenderer.h index a1195e8..c71d282 100644 --- a/pdf2htmlEX/src/HTMLRenderer/HTMLRenderer.h +++ b/pdf2htmlEX/src/HTMLRenderer/HTMLRenderer.h @@ -75,7 +75,7 @@ namespace pdf2htmlEX { struct HTMLRenderer : OutputDev { - HTMLRenderer(Param & param); + HTMLRenderer(const char* progPath, Param & param); virtual ~HTMLRenderer(); void process(PDFDoc * doc); diff --git a/pdf2htmlEX/src/HTMLRenderer/general.cc b/pdf2htmlEX/src/HTMLRenderer/general.cc index 459e091..7d43d13 100644 --- a/pdf2htmlEX/src/HTMLRenderer/general.cc +++ b/pdf2htmlEX/src/HTMLRenderer/general.cc @@ -41,7 +41,7 @@ using std::abs; using std::cerr; using std::endl; -HTMLRenderer::HTMLRenderer(Param & param) +HTMLRenderer::HTMLRenderer(const char* progPath, Param & param) :OutputDev() ,param(param) ,html_text_page(param, all_manager) @@ -56,7 +56,7 @@ HTMLRenderer::HTMLRenderer(Param & param) globalParams->setErrQuiet(true); } - ffw_init(param.debug); + ffw_init(progPath, param.debug); cur_mapping.resize(0x10000); cur_mapping2.resize(0x100); diff --git a/pdf2htmlEX/src/pdf2htmlEX.cc b/pdf2htmlEX/src/pdf2htmlEX.cc index 9191489..3223752 100644 --- a/pdf2htmlEX/src/pdf2htmlEX.cc +++ b/pdf2htmlEX/src/pdf2htmlEX.cc @@ -439,7 +439,7 @@ int main(int argc, char **argv) param.last_page = min(max(param.last_page, param.first_page), doc->getNumPages()); - unique_ptr(new HTMLRenderer(param))->process(doc); + unique_ptr(new HTMLRenderer(argv[0], param))->process(doc); finished = true; } diff --git a/pdf2htmlEX/src/util/ffw.c b/pdf2htmlEX/src/util/ffw.c index 2101cde..ef09364 100644 --- a/pdf2htmlEX/src/util/ffw.c +++ b/pdf2htmlEX/src/util/ffw.c @@ -18,19 +18,21 @@ #include "SignalHandler.h" -#include "ffw.h" -#include "fontforge-2.0.20170731/autowidth.h" -#include "fontforge-2.0.20170731/bitmapchar.h" -#include "fontforge-2.0.20170731/cvimages.h" -#include "fontforge-2.0.20170731/encoding.h" -#include "fontforge-2.0.20170731/fvfonts.h" -#include "fontforge-2.0.20170731/namelist.h" -#include "fontforge-2.0.20170731/savefont.h" -#include "fontforge-2.0.20170731/splineorder2.h" -#include "fontforge-2.0.20170731/splineutil.h" -#include "fontforge-2.0.20170731/splineutil2.h" -#include "fontforge-2.0.20170731/start.h" -#include "fontforge-2.0.20170731/tottf.h" +#include "ffw.h" // needed for: +#include "gfile.h" // FindProgDir +#include "fontforge-version-extras.h" // FONTFORGE_GIT_VERSION +#include "fontforge-20190801/autowidth.h" // FVRemoveKerns +#include "fontforge-20190801/bitmapchar.h" // SFReplaceEncodingBDFProps +#include "fontforge-20190801/cvimages.h" // FVImportImages +#include "fontforge-20190801/encoding.h" // (helpful as we have a name conflict) +#include "fontforge-20190801/fvfonts.h" // SFFindSlot +#include "fontforge-20190801/namelist.h" // UniFromName +#include "fontforge-20190801/savefont.h" // GenerateScript +#include "fontforge-20190801/splineorder2.h" // SFConvertToOrder2 +#include "fontforge-20190801/splineutil.h" // AltUniFree +#include "fontforge-20190801/splineutil2.h" // SplineFontNew +#include "fontforge-20190801/start.h" // InitSimpleStuff +#include "fontforge-20190801/tottf.h" // SFDefaultOS2Info static real EPS=1e-6; @@ -66,9 +68,11 @@ static void dumb_logwarning(const char * format, ...) { } static void dumb_post_error(const char * title, const char * error, ...) { } -void ffw_init(int debug) +void ffw_init(const char* progPath, int debug) { ffwSetAction("initialize"); + char *localProgPath = strdup(progPath); + FindProgDir(localProgPath); InitSimpleStuff(); if ( default_encoding==NULL ) default_encoding=FindOrMakeEncoding("ISO8859-1"); @@ -126,7 +130,7 @@ const FFWVersionInfo* ffw_get_version_info(void) ffwVersionInfo.gitVersion = FONTFORGE_GIT_VERSION; ffwVersionInfo.majorVersion = xstr(FONTFORGE_VERSION_MAJOR); ffwVersionInfo.minorVersion = xstr(FONTFORGE_VERSION_MINOR); - ffwVersionInfo.versionDate = FONTFORGE_VERSIONDATE; + ffwVersionInfo.versionDate = FONTFORGE_VERSION; return &ffwVersionInfo; } @@ -145,15 +149,18 @@ void ffw_load_font(const char * filename) assert((cur_fv == NULL) && "Previous font is not destroyed"); char * _filename = strcopy(filename); - SplineFont * font = LoadSplineFont(_filename, 1); + SplineFont * font = LoadSplineFont(_filename, of_fstypepermitted); free(_filename); if(!font) err("Cannot load font %s\n", filename); - if(!font->fv) + + if(!font->fv) { + assert(fv_interface && "fv_interface not initialized!"); FVAppend(_FontViewCreate(font)); + } assert(font->fv); @@ -170,9 +177,9 @@ void ffw_load_font(const char * filename) ffwClearAction(); } -/* - * Fight again dirty stuffs - */ +// +// Fight again dirty stuffs +// void ffw_prepare_font(void) { ffwSetAction("prepare"); @@ -181,10 +188,10 @@ void ffw_prepare_font(void) FVRemoveKerns(cur_fv); FVRemoveVKerns(cur_fv); - /* - * Remove Alternate Unicodes - * We never use them because we will do a force encoding - */ + // + // Remove Alternate Unicodes + // We never use them because we will do a force encoding + // int i; SplineFont * sf = cur_fv->sf; for(i = 0; i < sf->glyphcnt; ++i) @@ -201,10 +208,10 @@ void ffw_prepare_font(void) } } - /* - * Wipe out font name - * browsers may rejects fonts with malformed font names - */ + // + // Wipe out font name + // browsers may rejects fonts with malformed font names + // free(sf->fontname); sf->fontname = strcopy(""); ffwClearAction(); @@ -226,6 +233,7 @@ void ffw_save(const char * filename) err("Cannot save font to %s\n", filename); ffwClearAction(); } + void ffw_close(void) { ffwSetAction("close"); @@ -347,14 +355,14 @@ void ffw_cidflatten(void) return; } ffwSetAction("flatten the cid in"); - SFFlatten(cur_fv->sf->cidmaster); + SFFlatten(&(cur_fv->sf->cidmaster)); ffwClearAction(); } -/* - * There is no check if a glyph with the same unicode exists! - * TODO: let FontForge fill in the standard glyph name <- or maybe this might cause collision? - */ +// +// There is no check if a glyph with the same unicode exists! +// TODO: let FontForge fill in the standard glyph name <- or maybe this might cause collision? +// void ffw_add_empty_char(int32_t unicode, int width) { ffwSetAction("add an empty character to"); @@ -424,17 +432,17 @@ void ffw_set_metric(double ascent, double descent) if(a < 0) a = 0; if(d > 0) d = 0; - /* - sf->ascent = min(a, em); - sf->descent = em - bb.maxy; - */ + // + //sf->ascent = min(a, em); + //sf->descent = em - bb.maxy; + // - /* - * The embedded fonts are likely to have inconsistent values for the 3 sets of ascent/descent - * PDF viewers don't care, since they don't even use these values - * But have to unify them, for different browsers on different platforms - * Things may become easier when there are CSS rules for baseline-based positioning. - */ + // + // The embedded fonts are likely to have inconsistent values for the 3 sets of ascent/descent + // PDF viewers don't care, since they don't even use these values + // But have to unify them, for different browsers on different platforms + // Things may become easier when there are CSS rules for baseline-based positioning. + // info->os2_winascent = a; info->os2_typoascent = a; info->hhead_ascent = a; @@ -454,9 +462,9 @@ void ffw_set_metric(double ascent, double descent) ffwClearAction(); } -/* - * TODO:bitmap, reference have not been considered in this function - */ +// +// TODO:bitmap, reference have not been considered in this function +// void ffw_set_widths(int * width_list, int mapping_len, int stretch_narrow, int squeeze_wide) { @@ -475,9 +483,9 @@ void ffw_set_widths(int * width_list, int mapping_len, int imax = min(mapping_len, map->enccount); for(i = 0; i < imax; ++i) { - /* - * Don't mess with it if the glyphs is not used. - */ + // + // Don't mess with it if the glyphs is not used. + // if(width_list[i] == -1) { continue; diff --git a/pdf2htmlEX/src/util/ffw.h b/pdf2htmlEX/src/util/ffw.h index 5ce70e9..1e5e35f 100644 --- a/pdf2htmlEX/src/util/ffw.h +++ b/pdf2htmlEX/src/util/ffw.h @@ -21,7 +21,7 @@ extern "C" { //////////////////////// // global -void ffw_init(int debug); +void ffw_init(const char* progPath, int debug); void ffw_finalize(void); typedef struct ffw_version_info { diff --git a/pdf2htmlEX/src/util/fontforge-2.0.20170731/views.h b/pdf2htmlEX/src/util/fontforge-2.0.20170731/views.h deleted file mode 100644 index 3988e92..0000000 --- a/pdf2htmlEX/src/util/fontforge-2.0.20170731/views.h +++ /dev/null @@ -1,1496 +0,0 @@ -/* 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. - */ -#ifndef _VIEWS_H -#define _VIEWS_H - -#include - -#include "ttfinstrs.h" - -#include "ffglib.h" -#include "baseviews.h" - -#include -#include "dlist.h" -#include "search.h" - - -struct gfi_data; -struct contextchaindlg; -struct statemachinedlg; - - -extern struct cvshows { - int showfore, showback, showgrids, showhhints, showvhints, showdhints; - int showpoints, showfilled; - int showrulers; - int showrounds; /* 0=>no, 1=>auto, 2=>always */ - int showmdx, showmdy; /* minimum distances x,y */ - int showhmetrics, showvmetrics; /* show advance width, baseline, etc. */ - int markextrema; - int markpoi; /* Points of inflection */ - int showblues, showfamilyblues; - int showanchor; - int showcpinfo; - int showtabs; /* with the names of former glyphs */ - int showsidebearings; - int showrefnames; - int snapoutlines; - int showalmosthvlines; - int showalmosthvcurves; - int hvoffset; - int checkselfintersects; /* Not really something shown, but convenient to keep it here */ - int showdebugchanges; /* Changes the way changing rasters are displayed in tt debug mode */ - int alwaysshowcontrolpoints; //< Always show the BCP even when their splinepoint is not selected -} CVShows; - -extern struct bvshows { - int showfore, showoutline, showgrid; - int lastpixelsize; -} BVShows; - -enum debug_wins { dw_registers=0x1, dw_stack=0x2, dw_storage=0x4, dw_points=0x8, - dw_cvt=0x10, dw_raster=0x20, dw_gloss=0x40 }; - -struct instrinfo { - int isel_pos; - int16 lheight,lpos; - char *scroll, *offset; - GWindow v; - GGadget *vsb; - int16 sbw; - int16 vheight, vwidth; - int16 lstopped; - int16 as, fh; - struct instrdata *instrdata; - GFont *gfont; - unsigned int showaddr: 1; - unsigned int showhex: 1; - unsigned int mousedown: 1; - void *userdata; - void (*selection_callback)(struct instrinfo *,int ip); - int (*bpcheck)(struct instrinfo *,int ip); - int (*handle_char)(struct instrinfo *,GEvent *e); -}; - -struct reflist { - RefChar *ref; - struct reflist *parent; -}; - -typedef struct debugview { - struct debugger_context *dc; /* Local to freetype.c */ - GWindow dv, v; - /* Windows for twilight points, cvt, registers, stack, storage, stack gloss */ - GWindow regs, stack, storage, points, cvt, raster, gloss; /* order matters */ - GWindow points_v; - GGadget *cvtsb; - GGadget *pts_vsb; - GGadget *glosssb; - GGadget *storagesb; - GGadget *regsb; - GGadget *stacksb; - struct instrdata id; - struct instrinfo ii; - int dwidth, toph; - struct charview *cv; - double scalex, scaley; - int pts_head, cvt_offtop, gloss_offtop, storage_offtop, stack_offtop, reg_offtop; - int points_offtop; - - int codeSize; - uint8 initialbytes[4]; - struct reflist *active_refs; - int last_npoints; - int layer; -} DebugView; - - -/* The number of tabs allowed in the outline glyph view of former glyphs */ -#define FORMER_MAX 10 - -enum dv_coderange { cr_none=0, cr_fpgm, cr_prep, cr_glyph }; /* cleverly chosen to match ttobjs.h */ - -struct freehand { - struct tracedata *head, *last; /* for the freehand tool */ - SplinePointList *current_trace; - int ignore_wobble; /* Ignore wiggles smaller than this */ - int skip_cnt; -}; - -enum expandedge { ee_none, ee_nw, ee_up, ee_ne, ee_right, ee_se, ee_down, - ee_sw, ee_left, ee_max }; - -enum { charviewtab_charselectedsz = 1024 }; -typedef struct charviewtab -{ - char charselected[ charviewtab_charselectedsz + 1 ]; - char tablabeltxt[ charviewtab_charselectedsz + 1 ]; -} CharViewTab; - -enum { charview_cvtabssz = 100 }; - - - /* approximately BACK_LAYER_MAX / 32 */ -#define BACK_LAYERS_VIEW_MAX 8 - -typedef struct charview { - CharViewBase b; - uint32 showback[BACK_LAYERS_VIEW_MAX]; - unsigned int showfore:1; - unsigned int showgrids:1; - unsigned int showhhints:1; - unsigned int showvhints:1; - unsigned int showdhints:1; - unsigned int showpoints:1; - unsigned int alwaysshowcontrolpoints:1; - unsigned int showfilled:1; - unsigned int showrulers:1; - unsigned int showrounds:2; /* 0=>no, 1=>auto, 2=>always */ - unsigned int showmdx:1; - unsigned int showmdy:1; - unsigned int showhmetrics:1; - unsigned int showvmetrics:1; - unsigned int showblues:1; /* 16 */ - unsigned int showfamilyblues:1; - unsigned int showanchor:1; - unsigned int showpointnumbers:2; - unsigned int markextrema:1; - unsigned int markpoi:1; - unsigned int needsrasterize:1; /* Rasterization (of fill or fontview) needed on mouse up */ - unsigned int recentchange:1; /* a change happened in the grids or background. don't need to rasterize */ - unsigned int info_within: 1; /* cursor is within main window */ - unsigned int back_img_out_of_date: 1; /* Force redraw of back image pixmap */ - unsigned int cntrldown:1; - unsigned int joinvalid:1; - unsigned int widthsel:1; - unsigned int vwidthsel:1; - unsigned int lbearingsel:1; - unsigned int icsel:1; - unsigned int tah_sel:1; - unsigned int inactive:1; /* When in a search view (32) */ - unsigned int show_ft_results: 1; - unsigned int show_ft_results_live_update : 1; - unsigned int coderange: 2; /* For the debugger */ - unsigned int autonomous_ruler_w: 1; - unsigned int showcpinfo: 1; - unsigned int showtabs: 1; - unsigned int showsidebearings: 1; - unsigned int showing_spiro_pt_menu: 1; - unsigned int ruler_pressed: 1; - unsigned int ruler_pressedv: 1; - unsigned int showrefnames: 1; - unsigned int snapoutlines: 1; - unsigned int showalmosthvlines: 1; - unsigned int showalmosthvcurves: 1; - unsigned int checkselfintersects: 1; - unsigned int showdebugchanges: 1; - unsigned int inPreviewMode: 1; - unsigned int inDraggingComparisonOutline: 1; - unsigned int activeModifierControl: 1; //< Is control being held right now? - unsigned int activeModifierAlt: 1; //< Is alt being held right now? - unsigned int changedActiveGlyph: 1; //< Set in CVSwitchActiveSC() cleared in cvmouseup() - - int hvoffset; /* for showalmosthvlines */ - int layers_off_top; - real scale; - GWindow gw, v; - GGadget *vsb, *hsb, *mb, *tabs; - GFont *small, *normal; - GWindow icon; - GWindow ruler_w; - GWindow ruler_linger_w; - unichar_t ruler_linger_lines[40][80]; - int ruler_linger_num_lines; - int num_ruler_intersections; - int allocated_ruler_intersections; - BasePoint *ruler_intersections; - int start_intersection_snapped; - int end_intersection_snapped; - GFont *rfont; - GTimer *pressed; - GWindow backimgs; - GIC *gic; - GIC *gwgic; - int width, height; - float xoff, yoff; /* must be floating point, for precise zoom by scroll */ - int mbh; //< menu bar height - int charselectorh; //< char selection input box height - int infoh; //< info bar height - int rulerh; //< ruler height - int16 sas, sfh, sdh, nas, nfh; - BasePoint info; - SplinePoint *info_sp; - Spline *info_spline; - real info_t; - GPoint e; /* mouse location */ - GPoint olde; - BasePoint last_c; - BDFChar *filled; - GImage gi; /* used for fill bitmap only */ - int enc; - EncMap *map_of_enc; /* Only use for comparison against fontview's map to see if our enc be valid */ - /* Will not be updated when fontview is reencoded */ - PressedOn p; - SplinePoint *lastselpt; - spiro_cp *lastselcp; - /*GWindow tools, layers;*/ - int8 b1_tool, cb1_tool, b2_tool, cb2_tool; /* Button 3 does a popup */ - int8 b1_tool_old; /* Used by mingw port */ - int8 s1_tool, s2_tool, er_tool; /* Bindings for wacom stylus and eraser */ - int8 showing_tool, pressed_tool, pressed_display, had_control, active_tool; - int8 spacebar_hold; /* spacebar is held down */ - SplinePointList *active_spl; - SplinePoint *active_sp; - spiro_cp *active_cp; - IPoint handscroll_base; - uint16 rfh, ras; - BasePoint lastknife; - struct freehand freehand; - enum expandedge expandedge; - BasePoint expandorigin; - real expandwidth, expandheight; - SplinePointList *active_shape; - SplinePoint joinpos; - spiro_cp joincp; - SplineChar *template1, *template2; -#if HANYANG - struct jamodisplay *jamodisplay; -#endif - real oldwidth, oldvwidth; - real oldlbearing; - int16 oldic, oldtah; -#if _ModKeysAutoRepeat - GTimer *autorpt; - int keysym, oldstate; - int oldkeyx, oldkeyy; - GWindow oldkeyw; -#endif - PST *lcarets; - int16 nearcaret; - /* freetype results display */ - int16 ft_dpi, ft_ppemy, ft_ppemx, ft_depth; - real ft_pointsizey, ft_pointsizex; - struct freetype_raster *raster, *oldraster; - DebugView *dv; - uint32 mmvisible; - char *former_names[FORMER_MAX]; - int former_cnt; - AnchorPoint *apmine, *apmatch; - SplineChar *apsc; - int guide_pos; - struct qg_data *qg; - int16 note_x, note_y; - struct dlistnode* pointInfoDialogs; - GGadget* charselector; //< let the user type in more than one char to view at once. - GGadget* charselectorNext; //< move to next word in charselector - GGadget* charselectorPrev; //< move to prev word in charselector - int charselectoridx; - SplineChar* additionalCharsToShow [51]; //< additionalCharsToShowLimit + 1 in size - int additionalCharsToShowActiveIndex; - - CharViewTab cvtabs[ charview_cvtabssz+1 ]; - int oldtabnum; - -} CharView; - -typedef struct bitmapview { - BDFChar *bc; - BDFFont *bdf; - struct fontview *fv; - EncMap *map_of_enc; - int enc; - GWindow gw, v; - GGadget *vsb, *hsb, *mb; - GGadget *recalc; - GFont *small; - int xoff, yoff; - int width, height; - int infoh, mbh; - int scale; - real scscale; - struct bitmapview *next; - unsigned int showfore:1; - unsigned int showoutline:1; - unsigned int showgrid:1; - unsigned int cntrldown:1; - unsigned int recentchange:1; - unsigned int clearing:1; - unsigned int shades_hidden:1; - unsigned int shades_down:1; - /*GWindow tools, layers;*/ - int8 b1_tool, cb1_tool, b2_tool, cb2_tool; /* Button 3 does a popup */ - int8 s1_tool, s2_tool, er_tool; /* Bindings for wacom stylus and eraser */ - int8 showing_tool, pressed_tool, pressed_display, had_control, active_tool; - int pressed_x, pressed_y; - int info_x, info_y; - int event_x, event_y; - int16 sas, sfh; -#if _ModKeysAutoRepeat - GTimer *autorpt; - int keysym, oldstate; -#endif - int color; /* for greyscale fonts (between 0,255) */ - int color_under_cursor; -} BitmapView; - -struct aplist { AnchorPoint *ap; int connected_to, selected; struct aplist *next; }; - -enum mv_grids { mv_hidegrid, mv_showgrid, mv_partialgrid, mv_hidemovinggrid }; -enum mv_type { mv_kernonly, mv_widthonly, mv_kernwidth }; - -struct metricchar { - int16 dx, dwidth; /* position and width of the displayed char */ - int16 dy, dheight; /* displayed info for vertical metrics */ - int xoff, yoff; - int16 mx, mwidth; /* position and width of the text underneath */ - int16 kernafter; - unsigned int selected: 1; - GGadget *width, *lbearing, *rbearing, *kern, *name; - GGadget* updownkparray[10]; /* Cherry picked elements from width...kern allowing up/down key navigation */ -}; - -typedef struct metricsview { - struct fontview *fv; - SplineFont *sf; - int pixelsize; /* If the user has manually requested a pixelsize */ - /* then rasterize at that size no matter how large */ - /* the font is zoomed. For non-user requesed sizes */ - /* this is the pixelsize * zoom-factor */ - BDFFont *bdf; /* We can also see metric info on a bitmap font */ - BDFFont *show; /* Or the rasterized version of the outline font */ - GWindow gw, v; - GFont *font; - GGadget *hsb, *vsb, *mb, *text, *textPrev, *textNext, *script, *features, *subtable_list; - GGadget *namelab, *widthlab, *lbearinglab, *rbearinglab, *kernlab; - int16 xstart; - int16 width, height, dwidth; - int16 vwidth, vheight; - int16 mbh,sbh; - int16 topend; /* y value of the end of the region containing the text field */ - int16 displayend; /* y value of the end of the region showing filled characters */ - int16 fh, as; - int16 cmax, clen; - SplineChar **chars; /* Character input stream */ - struct opentype_str *glyphs;/* after going through the various gsub/gpos transformations */ - struct metricchar *perchar; /* One for each glyph above */ - SplineChar **sstr; /* Character input stream */ - int16 mwidth, mbase; - int16 glyphcnt, max; - int16 pressed_x, pressed_y; - int16 activeoff; - int xoff, coff, yoff; - struct metricsview *next; - unsigned int right_to_left: 1; - unsigned int pressed: 1; - unsigned int pressedwidth: 1; - unsigned int pressedkern: 1; - unsigned int showgrid: 2; - unsigned int antialias: 1; - unsigned int vertical: 1; - unsigned int type: 2; /* enum mv_type */ - unsigned int usehinting: 1; /* should the hints be used during the render */ - unsigned int pixelsize_set_by_window; - int xp, yp, ap_owner; - BasePoint ap_start; - int cursor; - int scale_index; - struct lookup_subtable *cur_subtable; - GTextInfo *scriptlangs; - int word_index; - int layer; - int fake_unicode_base; - GIC *gwgic; - int ptsize, dpi; - int ybaseline; - int oldscript, oldlang; -} MetricsView; - -enum fv_metrics { fvm_baseline=1, fvm_origin=2, fvm_advanceat=4, fvm_advanceto=8 }; -typedef struct fontview { - FontViewBase b; - BDFFont *show, *filled; - GWindow gw, v; - GFont **fontset; - GGadget *vsb, *mb; - GTimer *pressed; - GTimer *resize; - GEvent resize_event; - GIC *gic; - GIC *gwgic; - int width, height; /* of v */ - int16 infoh,mbh; - int16 lab_height, lab_as; - int16 colcnt, rowcnt; /* of display window */ - int32 rowoff, rowltot; /* Can be really big in full unicode */ - int16 cbw,cbh; /* width/height of a character box */ - int pressed_pos, end_pos; - unsigned int antialias:1; - unsigned int bbsized:1; /* displayed bitmap should be scaled by bounding box rather than emsize */ - unsigned int wasonlybitmaps:1; - /*unsigned int refstate: 3;*/ /* 0x1 => paste orig of all non exist refs, 0x2=>don't, 0x3 => don't warn about non-exist refs with no source font */ - unsigned int touched: 1; - unsigned int showhmetrics: 4; - unsigned int showvmetrics: 4; - unsigned int drag_and_drop: 1; - unsigned int has_dd_no_cursor: 1; - unsigned int any_dd_events_sent: 1; - unsigned int resize_expected: 1; - /* Some window managers do not honour my resize requests (if window is*/ - /* maximized for example), but we depend on the resize request to */ - /* fix up the window. We do get a configure notify, but the window */ - /* stays the same size, so kludge things */ - unsigned int glyphlabel: 2; - unsigned int notactive:1; /* When embedded in a dlg */ - int16 magnify; - int16 user_requested_magnify; - struct searchview *sv; - SplineChar *sc_near_top; - int sel_index; - struct lookup_subtable *cur_subtable; - struct qg_data *qg; - GPid pid_webfontserver; -} FontView; - -typedef struct findsel { - GEvent *e; - real fudge; /* One pixel fudge factor */ - real xl,xh, yl, yh; /* One pixel fudge factor */ - real c_xl,c_xh, c_yl, c_yh; /* fudge rectangle for control points, larger than above if alt is depressed */ - unsigned int select_controls: 1; /* notice control points */ - unsigned int seek_controls: 1; /* notice control points before base points */ - unsigned int all_controls: 1; /* notice control points even if the base points aren't selected (in truetype point numbering mode where all cps are visible) */ - unsigned int alwaysshowcontrolpoints:1; /* if the BCP are forced on, then we want the selection code paths - * to also know that so the user can drag the BCP of a non selected splinepoint */ - real scale; - PressedOn *p; -} FindSel; - -typedef struct searchview { - struct cvcontainer base; - FontView dummy_fv; - SplineFont dummy_sf; - LayerInfo layerinfo[2]; - SplineChar *chars[2]; - EncMap dummy_map; - int32 map[2], backmap[2]; - uint8 sel[2]; - CharView cv_srch, cv_rpl; - CharView *lastcv; -/* ****** */ - GWindow gw; - GGadget *mb; - GFont *plain, *bold; - int mbh; - int fh, as; - int rpl_x, cv_y; - int cv_width, cv_height; - short button_height, button_width; -/* ****** */ - SearchData sd; - unsigned int showsfindnext: 1; - unsigned int findenabled: 1; - unsigned int rplallenabled: 1; - unsigned int rplenabled: 1; - unsigned int isvisible: 1; -} SearchView; - -typedef struct mathkernview { - struct cvcontainer base; - FontView dummy_fv; - SplineFont dummy_sf; - LayerInfo layerinfo[2]; - SplineChar sc_topright, sc_topleft, sc_bottomright, sc_bottomleft; - SplineChar *chars[4]; - EncMap dummy_map; - int32 map[4], backmap[4]; - uint8 sel[4]; - CharView cv_topright, cv_topleft, cv_bottomright, cv_bottomleft; - CharView *lastcv; -/* ****** */ - GWindow gw; - GWindow cvparent_w; - GGadget *mb; - GFont *plain, *bold; - int mbh; - int fh, as; - int mid_space, cv_y; - int cv_width, cv_height; - short button_height, button_width; -/* ****** */ - SplineChar *cursc; - int def_layer; - struct mathkern *orig_mathkern; - uint8 saved_mathkern; /* Can't just check if orig is non-NULL, because NULL is a perfectly valid initial state */ - uint8 last_aspect; - uint8 done; -} MathKernDlg; - -# ifdef FONTFORGE_CONFIG_TILEPATH - -typedef struct tilepathdlg { - struct cvcontainer base; - FontView dummy_fv; - SplineFont dummy_sf; - LayerInfo layerinfo[2]; - SplineChar sc_first, sc_medial, sc_final, sc_isolated; - SplineChar *chars[4]; - EncMap dummy_map; - int32 map[4], backmap[4]; - uint8 sel[4]; - CharView cv_first, cv_medial, cv_final, cv_isolated; - CharView *lastcv; -/* ****** */ - GWindow gw; - GGadget *mb; - GFont *plain, *bold; - int mbh; - int fh, as; - int mid_space, cv_y; - int cv_width, cv_height; -/* ****** */ - struct tiledata *td; - SplineFont *base_sf; - uint8 done, oked; -} TilePathDlg; -extern void TPDCharViewInits(TilePathDlg *tpd, int cid); -extern void PTDCharViewInits(TilePathDlg *tpd, int cid); -#endif /* Tile Path */ - -typedef struct gradientdlg { - struct cvcontainer base; - FontView dummy_fv; - SplineFont dummy_sf; - LayerInfo layerinfo[2]; - SplineChar sc_grad; - SplineChar *chars[1]; - EncMap dummy_map; - int32 map[1], backmap[1]; - uint8 sel[1]; - CharView cv_grad; -/* ****** */ - GWindow gw; - GGadget *mb; - GFont *plain, *bold; - int mbh; - int fh, as; - int mid_space, cv_y; - int cv_width, cv_height; -/* ****** */ - uint8 done, oked; - struct gradient *active; -} GradientDlg; -extern void GDDCharViewInits(GradientDlg *gdd,int cid); - -typedef struct strokedlg { - struct cvcontainer base; - FontView dummy_fv; - SplineFont dummy_sf; - LayerInfo layerinfo[2]; - SplineChar sc_stroke; - SplineChar *chars[1]; - EncMap dummy_map; - int32 map[1], backmap[1]; - uint8 sel[1]; - CharView cv_stroke; - int cv_width, cv_height; - GGadget *mb; - int mbh; - SplineSet *old_poly; -/* ****** */ - int done; - GWindow gw; - CharView *cv; - FontView *fv; - SplineFont *sf; - void (*strokeit)(void *,StrokeInfo *,int); - StrokeInfo *si; - GRect r1, r2; - int up[2]; - int dontexpand; -} StrokeDlg; -extern void StrokeCharViewInits(StrokeDlg *sd,int cid); - -struct lksubinfo { - struct lookup_subtable *subtable; - unsigned int deleted: 1; - unsigned int new: 1; - unsigned int selected: 1; - unsigned int moved: 1; -}; - -struct lkinfo { - OTLookup *lookup; - unsigned int open: 1; - unsigned int deleted: 1; - unsigned int new: 1; - unsigned int selected: 1; - unsigned int moved: 1; - int16 subtable_cnt, subtable_max; - struct lksubinfo *subtables; -}; - -struct lkdata { - int cnt, max; - int off_top, off_left; - struct lkinfo *all; -}; - -struct anchor_shows { - CharView *cv; - SplineChar *sc; - int restart; -}; - -struct gfi_data { /* FontInfo */ - SplineFont *sf; - int def_layer; - GWindow gw; - int tn_active; - int private_aspect, ttfv_aspect, tn_aspect, tx_aspect, unicode_aspect; - int old_sel, old_aspect, old_lang, old_strid; - int ttf_set, names_set, tex_set; - int langlocalecode; /* MS code for the current locale */ - unsigned int family_untitled: 1; - unsigned int human_untitled: 1; - unsigned int done: 1; - unsigned int mpdone: 1; - unsigned int lk_drag_and_drop: 1; - unsigned int lk_dropablecursor: 1; - struct anchor_shows anchor_shows[2]; - struct texdata texdata; - GFont *font; - int as, fh; - struct lkdata tables[2]; - int lkwidth, lkheight; - int first_sel_lookup, first_sel_subtable; - int last_panose_family; -}; - -struct kf_dlg /* : fvcontainer */ { - struct fvcontainer base; - struct lookup_subtable *sub; - GWindow gw, dw; - GFont *plain, *bold; - int fh, as; - GGadget *mb, *guts, *topbox; - int mbh, label2_y, infoh; - - SplineFont *sf; - int def_layer; - struct kf_results *results; - int done; - - FontView *active; - FontView *first_fv; - FontView *second_fv; -}; - -enum genfam { gf_none, gf_macfamily, gf_ttc }; - -extern void FVMarkHintsOutOfDate(SplineChar *sc); -extern void FVRefreshChar(FontView *fv,int gid); -extern void _FVMenuOpen(FontView *fv); -extern int _FVMenuSave(FontView *fv); -extern int _FVMenuSaveAs(FontView *fv); -extern int _FVMenuGenerate(FontView *fv,int family); -extern void _FVCloseWindows(FontView *fv); -extern char *GetPostScriptFontName(char *defdir,int mult); -extern void MergeKernInfo(SplineFont *sf,EncMap *map); -extern int SFGenerateFont(SplineFont *sf,int layer, int family,EncMap *map); - -extern void NonLinearDlg(FontView *fv,struct charview *cv); -extern void FVChangeChar(FontView *fv,int encoding); -extern void FVMergeFonts(FontView *fv); -extern void FVInterpolateFonts(FontView *fv); - -extern void FVDeselectAll(FontView *fv); - -extern void FVAutoWidth2(FontView *fv); -/*extern void FVAutoKern(FontView *fv);*/ -/*extern void FVAutoWidth(FontView *fv);*/ - -extern void SC_MarkInstrDlgAsChanged(SplineChar *sc); - -extern void PythonUI_Init(void); -extern void PythonUI_namedpipe_Init(void); - -extern void SCStroke(SplineChar *sc); - -extern void PfaEditSetFallback(void); -extern void RecentFilesRemember(char *filename); -extern void LastFonts_Save(void); - -struct debugger_context; -extern void DebuggerTerminate(struct debugger_context *dc); -extern void DebuggerReset(struct debugger_context *dc,real pointsizey, real pointsizex,int dpi,int dbg_fpgm, int is_bitmap); -extern struct debugger_context *DebuggerCreate(SplineChar *sc,int layer,real pointsizey,real pointsizex,int dpi,int dbg_fpgm, int is_bitmap); -enum debug_gotype { dgt_continue, dgt_step, dgt_next, dgt_stepout }; -extern void DebuggerGo(struct debugger_context *dc,enum debug_gotype,DebugView *dv); -extern struct TT_ExecContextRec_ *DebuggerGetEContext(struct debugger_context *dc); -extern void DebuggerToggleBp(struct debugger_context *dc,int range,int ip); -extern int DebuggerBpCheck(struct debugger_context *dc,int range,int ip); -extern void DebuggerSetWatches(struct debugger_context *dc,int n, uint8 *w); -extern uint8 *DebuggerGetWatches(struct debugger_context *dc, int *n); -extern void DebuggerSetWatchStores(struct debugger_context *dc,int n, uint8 *w); -extern uint8 *DebuggerGetWatchStores(struct debugger_context *dc, int *n); -extern int DebuggerIsStorageSet(struct debugger_context *dc, int index); -extern void DebuggerSetWatchCvts(struct debugger_context *dc,int n, uint8 *w); -extern uint8 *DebuggerGetWatchCvts(struct debugger_context *dc, int *n); -extern int DebuggingFpgm(struct debugger_context *dc); - - -extern void PrintFFDlg(FontView *fv,SplineChar *sc,MetricsView *mv); -extern void PrintWindowClose(void); -extern void InsertTextDlg(CharView *cv); - -extern char *Kern2Text(SplineChar *other,KernPair *kp,int isv); -extern char *PST2Text(PST *pst,SplineFont *sf); - - - -void EmboldenDlg(FontView *fv, CharView *cv); -void CondenseExtendDlg(FontView *fv, CharView *cv); -void ObliqueDlg(FontView *fv, CharView *cv); -void GlyphChangeDlg(FontView *fv, CharView *cv, enum glyphchange_type gc); -void ItalicDlg(FontView *fv, CharView *cv); -void ChangeXHeightDlg(FontView *fv,CharView *cv); - -extern int FVParseSelectByPST(FontView *fv,struct lookup_subtable *sub, - int search_type); -extern void DropChars2Text(GWindow gw, GGadget *glyphs,GEvent *event); - - -extern void FVReplaceOutlineWithReference( FontView *fv, double fudge ); -extern void SVDestroy(struct searchview *sv); - - - -extern int SLICount(SplineFont *sf); -extern unichar_t *ClassName(const char *name,uint32 feature_tag, - uint16 flags, int script_lang_index, int merge_with, int act_type, - int macfeature,SplineFont *sf); -extern unichar_t *DecomposeClassName(const unichar_t *clsnm, unichar_t **name, - uint32 *feature_tag, int *macfeature, - uint16 *flags, uint16 *script_lang_index,int *merge_with,int *act_type, - SplineFont *sf); -extern PST *AddSubs(PST *last,uint32 tag,char *name,uint16 flags, - uint16 sli,SplineChar *sc); - - -extern void FVSetUIToMatch(FontView *destfv,FontView *srcfv); -extern void FVScrollToChar(FontView *fv,int i); -extern void FVRegenChar(FontView *fv,SplineChar *sc); -extern FontView *FontNew(void); -extern void _MenuWarnings(GWindow gw,struct gmenuitem *mi,GEvent *e); -extern void MenuPrefs(GWindow base,struct gmenuitem *mi,GEvent *e); -extern void MenuXRes(GWindow base,struct gmenuitem *mi,GEvent *e); -extern void MenuSaveAll(GWindow base,struct gmenuitem *mi,GEvent *e); -extern void MenuExit(GWindow base,struct gmenuitem *mi,GEvent *e); -extern void MenuHelp(GWindow base,struct gmenuitem *mi,GEvent *e); -extern void MenuIndex(GWindow base,struct gmenuitem *mi,GEvent *e); -extern void MenuAbout(GWindow base,struct gmenuitem *mi,GEvent *e); -extern void MenuLicense(GWindow base,struct gmenuitem *mi,GEvent *e); -extern void MenuNew(GWindow gw,struct gmenuitem *mi,GEvent *e); -extern void WindowMenuBuild(GWindow base,struct gmenuitem *mi,GEvent *); -extern void MenuRecentBuild(GWindow base,struct gmenuitem *mi,GEvent *); -extern void MenuScriptsBuild(GWindow base,struct gmenuitem *mi,GEvent *); -extern void mb2FreeGetText(GMenuItem2 *mb); -extern void mb2DoGetText(GMenuItem2 *mb); -extern void mbFreeGetText(GMenuItem *mb); -extern void mbDoGetText(GMenuItem *mb); -extern int RecentFilesAny(void); -extern void _aplistbuild(struct gmenuitem *mi,SplineFont *sf, - void (*func)(GWindow,struct gmenuitem *,GEvent *)); -extern int32 *ParseBitmapSizes(GGadget *g,char *msg,int *err); -extern GTextInfo *AddMacFeatures(GTextInfo *opentype,enum possub_type type,SplineFont *sf); -extern unichar_t *AskNameTag(char *title,unichar_t *def,uint32 def_tag,uint16 flags, - int script_lang_index, enum possub_type type, SplineFont *sf, SplineChar *default_script, - int merge_with,int act_type); -extern unichar_t *ShowScripts(unichar_t *usedef); -extern GTextInfo *SFLangList(SplineFont *sf,int addfinal,SplineChar *default_script); -extern GTextInfo **SFLangArray(SplineFont *sf,int addfinal); -extern int ScriptLangList(SplineFont *sf,GGadget *list,int sli); -extern void GListDelSelected(GGadget *list); -extern void GListMoveSelected(GGadget *list,int offset); -extern GTextInfo *GListChangeLine(GGadget *list,int pos, const unichar_t *line); -extern GTextInfo *GListAppendLine(GGadget *list,const unichar_t *line,int select); -extern GTextInfo *GListChangeLine8(GGadget *list,int pos, const char *line); -extern GTextInfo *GListAppendLine8(GGadget *list,const char *line,int select); -extern void CharInfoInit(void); -extern void SCLigCaretCheck(SplineChar *sc,int clean); -extern char *DevTab_Dlg(GGadget *g, int r, int c); -extern int DeviceTableOK(char *dvstr, int *_low, int *_high); -extern void VRDevTabParse(struct vr *vr,struct matrix_data *md); -extern DeviceTable *DeviceTableParse(DeviceTable *dv,char *dvstr); -extern void DevTabToString(char **str,DeviceTable *adjust); -extern void ValDevTabToStrings(struct matrix_data *mds,int first_offset,ValDevTab *adjust); -extern void KpMDParse(SplineChar *sc,struct lookup_subtable *sub, - struct matrix_data *possub,int rows,int cols,int i); -extern void GFI_LookupEnableButtons(struct gfi_data *gfi, int isgpos); -extern void GFI_LookupScrollbars(struct gfi_data *gfi, int isgpos, int refresh); -extern void FontInfo(SplineFont *sf,int layer,int aspect,int sync); -extern void FontInfoDestroy(SplineFont *sf); -extern void FontMenuFontInfo(void *fv); -extern struct enc *MakeEncoding(SplineFont *sf, EncMap *map); -extern void LoadEncodingFile(void); -extern void RemoveEncoding(void); -extern void SFPrivateInfo(SplineFont *sf); -extern void FVDelay(FontView *fv,void (*func)(FontView *)); -extern void GFI_FinishContextNew(struct gfi_data *d,FPST *fpst, int success); -extern void SCPreparePopup(GWindow gw,SplineChar *sc, struct remap *remap, int enc, int actualuni); -enum outlinesfm_flags { - sfm_stroke=0x1, - sfm_fill=0x2, - sfm_nothing=0x4, - sfm_stroke_trans = (0x1|0x8), - sfm_clip_preserve = 0x16 -}; -extern void CVDrawSplineSetSpecialized( CharView *cv, GWindow pixmap, SplinePointList *set, - Color fg, int dopoints, DRect *clip, - enum outlinesfm_flags strokeFillMode, - Color AlphaChannelOverride ); -extern void CVDrawSplineSet(CharView *cv, GWindow pixmap, SplinePointList *set, - Color fg, int dopoints, DRect *clip ); -extern void CVDrawSplineSetOutlineOnly(CharView *cv, GWindow pixmap, SplinePointList *set, - Color fg, int dopoints, DRect *clip, enum outlinesfm_flags strokeFillMode ); -extern GWindow CVMakeTools(CharView *cv); -extern GWindow CVMakeLayers(CharView *cv); -extern GWindow BVMakeTools(BitmapView *bv); -extern GWindow BVMakeLayers(BitmapView *bv); -extern void CVSetLayer(CharView *cv,int layer); -extern int CVPaletteMnemonicCheck(GEvent *event); -extern int TrueCharState(GEvent *event); -extern void CVToolsPopup(CharView *cv, GEvent *event); -extern void BVToolsPopup(BitmapView *bv, GEvent *event); -extern real CVRoundRectRadius(void); -extern int CVRectElipseCenter(void); -extern void CVRectEllipsePosDlg(CharView *cv); -extern real CVStarRatio(void); -extern int CVPolyStarPoints(void); -extern StrokeInfo *CVFreeHandInfo(void); -extern void BVToolsSetCursor(BitmapView *bv, int state,char *device); -extern void CVToolsSetCursor(CharView *cv, int state,char *device); -extern int CVPaletteIsVisible(CharView *cv,int which); -extern void CVPaletteSetVisible(CharView *cv,int which,int visible); -extern void CVPalettesRaise(CharView *cv); -extern void CVLayersSet(CharView *cv); -extern void _CVPaletteActivate(CharView *cv,int force); -extern void CVPaletteActivate(CharView *cv); -extern void CV_LayerPaletteCheck(SplineFont *sf); -extern void CVPalettesHideIfMine(CharView *cv); -extern int BVPaletteIsVisible(BitmapView *bv,int which); -extern void BVPaletteSetVisible(BitmapView *bv,int which,int visible); -extern void BVPaletteActivate(BitmapView *bv); -extern void BVPalettesHideIfMine(BitmapView *bv); -extern void BVPaletteColorChange(BitmapView *bv); -extern void BVPaletteColorUnderChange(BitmapView *bv,int color); -extern void BVPaletteChangedChar(BitmapView *bv); -extern void CVPaletteDeactivate(void); -extern void PalettesChangeDocking(void); -extern int CVPalettesWidth(void); -extern int BVPalettesWidth(void); -extern int CVInSpiro( CharView *cv ); - -extern void CVDoTransform(CharView *cv, enum cvtools cvt ); - -// apply transform to specified layer -extern void CVTransFuncLayer(CharView *cv,Layer *ly,real transform[6], enum fvtrans_flags flags); -// apply transform to the current layer only -extern void CVTransFunc(CharView *cv,real transform[6],enum fvtrans_flags); -// apply transform to all layers -extern void CVTransFuncAllLayers(CharView *cv,real transform[6], enum fvtrans_flags flags); -enum transdlg_flags { tdf_enableback=0x1, tdf_enablekerns=0x2, - tdf_defaultkerns=0x4, tdf_addapply=0x8 }; -extern void TransformDlgCreate(void *data,void (*transfunc)(void *,real *,int,BVTFunc *,enum fvtrans_flags), - int (*getorigin)(void *,BasePoint *,int), enum transdlg_flags flags, - enum cvtools cvt); -extern void BitmapDlg(FontView *fv,SplineChar *sc, int isavail); -extern int SimplifyDlg(SplineFont *sf,struct simplifyinfo *smpl); -extern void CVReviewHints(CharView *cv); -extern void CVCreateHint(CharView *cv,int ishstem,int preserveundoes); -extern void SCRemoveSelectedMinimumDistances(SplineChar *sc,int inx); -extern int CVExport(CharView *cv); -extern int BVExport(BitmapView *bv); - -extern void DrawAnchorPoint(GWindow pixmap,int x, int y,int selected); -extern void DefaultY(GRect *pos); -extern void CVDrawRubberRect(GWindow pixmap, CharView *cv); -extern void CVInfoDraw(CharView *cv, GWindow pixmap ); -extern void CVChar(CharView *cv, GEvent *event ); -extern void PI_ShowHints(SplineChar *sc, GGadget *list, int set); -extern GTextInfo *SCHintList(SplineChar *sc,HintMask *); -extern void CVResize(CharView *cv ); -extern CharView *CharViewCreate(SplineChar *sc,FontView *fv,int enc); -extern void CharViewFinishNonStatic(); - -/** - * Extended version of CharViewCreate() which allows a window to be created but - * not displayed. - */ -extern CharView *CharViewCreateExtended(SplineChar *sc, FontView *fv,int enc, int show ); -extern void CharViewFree(CharView *cv); -extern int CVValid(SplineFont *sf, SplineChar *sc, CharView *cv); -extern void CVSetCharChanged(CharView *cv,int changed); -extern int CVAnySel(CharView *cv, int *anyp, int *anyr, int *anyi, int *anya); -extern int CVAnySelPoints(CharView *cv); - -/** - * Get all the selected points in the current cv. - * Caller must g_list_free() the returned value. - */ -extern GList_Glib* CVGetSelectedPoints(CharView *cv); -extern void CVSelectPointAt(CharView *cv); -extern int CVClearSel(CharView *cv); -extern int CVSetSel(CharView *cv,int mask); -extern void CVInvertSel(CharView *cv); -extern int CVAllSelected(CharView *cv); -extern SplinePointList *CVAnySelPointList(CharView *cv); -extern int CVAnySelPoint(CharView *cv, SplinePoint **selsp, spiro_cp **selcp); -extern int CVOneThingSel(CharView *cv, SplinePoint **sp, SplinePointList **spl, - RefChar **ref, ImageList **img, AnchorPoint **ap, spiro_cp **cp); -extern int CVOneContourSel(CharView *cv, SplinePointList **_spl, - RefChar **ref, ImageList **img); -extern void CVInfoDrawText(CharView *cv, GWindow pixmap ); -extern void CVImport(CharView *cv); -extern void BVImport(BitmapView *bv); -extern void FVImport(FontView *bv); -extern void CVFindCenter(CharView *cv, BasePoint *bp, int nosel); -extern void CVStroke(CharView *cv); -extern void FVStroke(FontView *fv); -extern void FreeHandStrokeDlg(StrokeInfo *si); -extern void OutlineDlg(FontView *fv, CharView *cv,MetricsView *mv,int isinline); -extern void ShadowDlg(FontView *fv, CharView *cv,MetricsView *mv,int wireframe); -extern void CVTile(CharView *cv); -extern void FVTile(FontView *fv); -extern void CVPatternTile(CharView *cv); -extern void FVPatternTile(FontView *fv); -extern void SCCharInfo(SplineChar *sc,int deflayer,EncMap *map,int enc); -extern void CharInfoDestroy(struct charinfo *ci); -extern SplineChar *SuffixCheck(SplineChar *sc,char *suffix); -extern void SCSubtableDefaultSubsCheck(SplineChar *sc, struct lookup_subtable *sub, struct matrix_data *possub, int col_cnt, int r,int layer); -extern GImage *PST_GetImage(GGadget *pstk,SplineFont *sf,int def_layer, - struct lookup_subtable *sub,int popup_r, SplineChar *sc ); -extern GImage *NameList_GetImage(SplineFont *sf,SplineChar *sc,int def_layer, - char *namelist, int isliga ); -extern GImage *GV_GetConstructedImage(SplineChar *sc,int def_layer, struct glyphvariants *gv, - int is_horiz); -extern GImage *SC_GetLinedImage(SplineChar *sc, int def_layer, int pos, int is_italic_cor); -extern struct glyphvariants *GV_ParseConstruction(struct glyphvariants *gv, - struct matrix_data *stuff, int rows, int cols); -extern void GV_ToMD(GGadget *g, struct glyphvariants *gv); -extern void CVGetInfo(CharView *cv); -extern void CVPGetInfo(CharView *cv); -extern int SCUsedBySubs(SplineChar *sc); -extern void SCSubBy(SplineChar *sc); -extern void SCRefBy(SplineChar *sc); -extern void ApGetInfo(CharView *cv, AnchorPoint *ap); -extern void CVMakeClipPath(CharView *cv); -extern void CVAddAnchor(CharView *cv); -extern AnchorClass *AnchorClassUnused(SplineChar *sc,int *waslig); -extern void FVSetWidth(FontView *fv,enum widthtype wtype); -extern void CVSetWidth(CharView *cv,enum widthtype wtype); -extern void GenericVSetWidth(FontView *fv,SplineChar* sc,enum widthtype wtype); -extern void CVChangeSC(CharView *cv, SplineChar *sc ); -extern Undoes *CVPreserveTState(CharView *cv); -/** - * If isTState > 0 then CVPreserveTState(cv) - * otherwise CVPreserveState(cv) - */ -extern Undoes *CVPreserveMaybeState(CharView *cv, int isTState ); -extern void CVRestoreTOriginalState(CharView *cv); -extern void CVUndoCleanup(CharView *cv); - -extern void AdjustControls(SplinePoint *sp); -extern void CVAdjustPoint(CharView *cv, SplinePoint *sp); -extern void CVMergeSplineSets(CharView *cv, SplinePoint *active, SplineSet *activess, - SplinePoint *merge, SplineSet *mergess); -extern void CVAdjustControl(CharView *cv,BasePoint *cp, BasePoint *to); -extern int CVMoveSelection(CharView *cv, real dx, real dy, uint32 input_state); -extern int CVTestSelectFromEvent(CharView *cv,GEvent *event); -extern void CVMouseMovePen(CharView *cv, PressedOn *p, GEvent *event); -extern void CVMouseUpPoint(CharView *cv,GEvent *event); -extern int CVMouseMovePointer(CharView *cv, GEvent *event); -extern void CVMouseDownPointer(CharView *cv, FindSel *fs, GEvent *event); -extern void CVMouseDownRuler(CharView *cv, GEvent *event); -extern void CVMouseMoveRuler(CharView *cv, GEvent *event); -extern int CVMouseAtSpline(CharView *cv,GEvent *event); -extern void CVMouseUpRuler(CharView *cv, GEvent *event); -extern void CVMouseMoveHand(CharView *cv, GEvent *event); -extern void CVMouseDownFreeHand(CharView *cv, GEvent *event); -extern void CVMouseMoveFreeHand(CharView *cv, GEvent *event); -extern void CVMouseUpFreeHand(CharView *cv, GEvent *event); -extern void CVMouseDownShape(CharView *cv,GEvent *event); -extern void CPStartInfo(CharView *cv, GEvent *event); -extern void CPUpdateInfo(CharView *cv, GEvent *event); -extern void CPEndInfo(CharView *cv); -extern void BVChar(BitmapView *cv, GEvent *event ); -extern void CVMouseDownPoint(CharView *cv,GEvent *event); -extern void CVMouseMovePoint(CharView *cv,PressedOn *); -extern void CVMouseUpPointer(CharView *cv ); -extern void CVCheckResizeCursors(CharView *cv); -extern void CVMouseDownHand(CharView *cv); -extern void CVMouseUpHand(CharView *cv); -extern void CVMouseDownTransform(CharView *cv); -extern void CVMouseMoveTransform(CharView *cv); -extern void CVMouseUpTransform(CharView *cv); -extern void CVMouseDownKnife(CharView *cv); -extern void CVMouseMoveKnife(CharView *cv,PressedOn *); -extern void CVMouseUpKnife(CharView *cv,GEvent *event); -extern void CVMouseMoveShape(CharView *cv); -extern void CVMouseUpShape(CharView *cv); -extern void LogoExpose(GWindow pixmap,GEvent *event, GRect *r,enum drawmode dm); -extern void CVDebugPointPopup(CharView *cv); - -extern int GotoChar(SplineFont *sf,EncMap *map, int *merge_with_selection); - -extern void CVShowPoint(CharView *cv, BasePoint *me); - -extern void BitmapViewFinishNonStatic(); -extern BitmapView *BitmapViewCreate(BDFChar *bc, BDFFont *bdf, FontView *fv,int enc); -extern BitmapView *BitmapViewCreatePick(int enc, FontView *fv); -extern void BitmapViewFree(BitmapView *bv); -extern void BVMenuRotateInvoked(GWindow gw,struct gmenuitem *mi, GEvent *e); -extern void BVRotateBitmap(BitmapView *bv,enum bvtools type ); -extern int BVColor(BitmapView *bv); -extern void BCGeneralFunction(BitmapView *bv, - void (*SetPoint)(BitmapView *,int x, int y, void *data),void *data); -extern char *BVFlipNames[]; -extern void BVChangeBC(BitmapView *bv, BDFChar *bc, int fitit ); - -extern void MVSetSCs(MetricsView *mv, SplineChar **scs); -extern void MVRefreshChar(MetricsView *mv, SplineChar *sc); -extern void MVRegenChar(MetricsView *mv, SplineChar *sc); -extern void MVReKern(MetricsView *mv); -extern void MetricsViewFinishNonStatic(); -extern MetricsView *MetricsViewCreate(FontView *fv,SplineChar *sc,BDFFont *bdf); -extern void MetricsViewFree(MetricsView *mv); -extern void MVRefreshAll(MetricsView *mv); -extern void MV_FriendlyFeatures(GGadget *g, int pos); -extern GTextInfo *SLOfFont(SplineFont *sf); - -extern void DoPrefs(void); -extern void DoXRes(void); -extern void PointerDlg(CharView *cv); -extern void GListAddStr(GGadget *list,unichar_t *str, void *ud); -extern void GListReplaceStr(GGadget *list,int index, unichar_t *str, void *ud); -extern struct macname *NameGadgetsGetNames( GWindow gw ); -extern void NameGadgetsSetEnabled( GWindow gw, int enable ); -extern int GCDBuildNames(GGadgetCreateData *gcd,GTextInfo *label,int pos,struct macname *names); -extern void GCDFillMacFeat(GGadgetCreateData *mfgcd,GTextInfo *mflabels, int width, - MacFeat *all, int fromprefs, GGadgetCreateData *boxes, - GGadgetCreateData **array); -extern void Prefs_ReplaceMacFeatures(GGadget *list); - -extern unichar_t *FVOpenFont(char *title, const char *defaultfile, int mult); - - - - -extern void ShowAboutScreen(void); -extern void DelayEvent(void (*func)(void *), void *data); - -extern void FindProblems(FontView *fv,CharView *cv,SplineChar *sc); -typedef enum -{ - constrainSelection_AveragePoints = 0, - constrainSelection_SpacePoints = 1, - constrainSelection_SpaceSelectedRegions = 2 -} constrainSelection_t; -extern void CVConstrainSelection(CharView *cv, constrainSelection_t type); -extern void CVMakeParallel(CharView *cv); - -extern void ScriptDlg(FontView *fv,CharView *cv); - -# if HANYANG -extern void MenuNewComposition(GWindow gw, struct gmenuitem *, GEvent *); -extern void CVDisplayCompositions(GWindow gw, struct gmenuitem *, GEvent *); -extern void Disp_DoFinish(struct jamodisplay *d, int cancel); -extern void Disp_RefreshChar(SplineFont *sf,SplineChar *sc); -extern void Disp_DefaultTemplate(CharView *cv); -# endif - -extern SearchView *SVCreate(FontView *fv); -extern void SVCharViewInits(SearchView *sv); -extern void SV_DoClose(struct cvcontainer *cvc); -extern void SVMakeActive(SearchView *sv,CharView *cv); -extern int SVAttachFV(FontView *fv,int ask_if_difficult); -extern void SVDetachFV(FontView *fv); - -extern void MKDMakeActive(MathKernDlg *mkd,CharView *cv); -extern void MKD_DoClose(struct cvcontainer *cvc); -extern void MKDCharViewInits(MathKernDlg *mkd); -extern void MathKernDialog(SplineChar *sc,int def_layer); - -extern void ShowAtt(SplineFont *sf,int def_layer); -extern void FontCompareDlg(FontView *fv); -extern void SFShowKernPairs(SplineFont *sf,SplineChar *sc,AnchorClass *ac,int layer); -extern void SFShowLigatures(SplineFont *sf,SplineChar *sc); - -extern void SCEditInstructions(SplineChar *sc); -extern void SFEditTable(SplineFont *sf, uint32 tag); -extern void IIScrollTo(struct instrinfo *ii,int ip,int mark_stop); -extern void IIReinit(struct instrinfo *ii,int ip); -extern int ii_v_e_h(GWindow gw, GEvent *event); -extern void instr_scroll(struct instrinfo *ii,struct sbevent *sb); - -extern void CVGridFitChar(CharView *cv); -/** - * If a live preview of grid fit is somehow in effect, call CVGridFitChar() for us. - * A caller can call here after a change and any CVGridFitChar() will be updated if need be. - */ -extern void CVGridHandlePossibleFitChar(CharView *cv); -extern void CVFtPpemDlg(CharView *cv,int debug); -extern void SCDeGridFit(SplineChar *sc); -extern void SCReGridFit(SplineChar *sc,int layer); - -extern void CVDebugReInit(CharView *cv,int restart_debug,int dbg_fpgm); -extern void CVDebugFree(DebugView *dv); -extern int DVChar(DebugView *dv, GEvent *e); - -extern void KernClassD(KernClass *kc, SplineFont *sf, int layer, int isv); -extern void ShowKernClasses(SplineFont *sf,MetricsView *mv,int layer,int isv); -extern void KCLD_End(struct kernclasslistdlg *kcld); -extern void KCLD_MvDetach(struct kernclasslistdlg *kcld,MetricsView *mv); -extern void KernPairD(SplineFont *sf,SplineChar *sc1,SplineChar *sc2,int layer, int isv); -extern void KCD_DrawGlyph(GWindow pixmap,int x,int baseline,BDFChar *bdfc,int mag); -extern GTextInfo *BuildFontList(FontView *except); -extern void TFFree(GTextInfo *tf); - -extern void AnchorControl(SplineChar *sc,AnchorPoint *ap,int layer); -extern void AnchorControlClass(SplineFont *_sf,AnchorClass *ac,int layer); - -extern void FVSelectByPST(FontView *fv); - -enum hist_type { hist_hstem, hist_vstem, hist_blues }; -struct psdict; -extern void SFHistogram(SplineFont *sf,int layer, struct psdict *private,uint8 *selected, - EncMap *map, enum hist_type which); - -extern void ContextChainEdit(SplineFont *sf,FPST *fpst, - struct gfi_data *gfi,unichar_t *newname,int layer); -extern char *cu_copybetween(const unichar_t *start, const unichar_t *end); - -extern void StateMachineEdit(SplineFont *sf,ASM *sm,struct gfi_data *d); -extern void GFI_FinishSMNew(struct gfi_data *d,ASM *sm, int success,int isnew); - -extern void MMChangeBlend(MMSet *mm,FontView *fv,int tonew); -extern void MMWizard(MMSet *mm); - -extern int LayerDialog(Layer *layer,SplineFont *sf); -extern void CVLayerChange(CharView *cv); - -extern int PointOfViewDlg(struct pov_data *pov,SplineFont *sf,int flags); - -extern SplineChar *FVMakeChar(FontView *fv,int i); - -extern void CVPointOfView(CharView *cv,struct pov_data *); - -extern void DVCreateGloss(DebugView *dv); -extern void DVMarkPts(DebugView *dv,SplineSet *ss); -extern int CVXPos(DebugView *dv,int offset,int width); - -extern GMenuItem *GetEncodingMenu(void (*func)(GWindow,GMenuItem *,GEvent *), - Encoding *current); - -extern GTextInfo *TIFromName(const char *name); - -enum subtable_data_flags { - /* I have flags for each alternative because I want "unspecified" to be */ - /* an option */ - sdf_kernclass = 0x01, - sdf_kernpair = 0x02, - sdf_verticalkern = 0x04, - sdf_horizontalkern = 0x08, - sdf_dontedit = 0x10 -}; -struct subtable_data { - int flags; - SplineChar *sc; -}; - -extern GTextInfo **SFLookupListFromType(SplineFont *sf, int lookup_type ); -extern GTextInfo *SFLookupArrayFromType(SplineFont *sf, int lookup_type ); -extern GTextInfo *SFLookupArrayFromMask(SplineFont *sf, int lookup_mask ); -extern GTextInfo **SFSubtablesOfType(SplineFont *sf, int lookup_type, int kernclass, int add_none); -extern GTextInfo *SFSubtableListOfType(SplineFont *sf, int lookup_type, int kernclass, int add_none); -extern struct lookup_subtable *SFNewLookupSubtableOfType(SplineFont *sf, int lookup_type, struct subtable_data *sd, int def_layer ); -extern int EditLookup(OTLookup *otl,int isgpos,SplineFont *sf); -extern int EditSubtable(struct lookup_subtable *sub,int isgpos,SplineFont *sf, - struct subtable_data *sd,int def_layer); -extern void _LookupSubtableContents(SplineFont *sf, struct lookup_subtable *sub, - struct subtable_data *sd,int def_layer); -extern char *SCNameUniStr(SplineChar *sc); -extern unichar_t *uSCNameUniStr(SplineChar *sc); -extern char *SFNameList2NameUni(SplineFont *sf, char *str); -extern unichar_t **SFGlyphNameCompletion(SplineFont *sf,GGadget *t,int from_tab, - int new_name_after_space); -extern char *GlyphNameListDeUnicode( char *str ); -extern void AddRmLang(SplineFont *sf, struct lkdata *lk,int add_lang); -extern void FVMassGlyphRename(FontView *fv); - -extern void SFBdfProperties(SplineFont *sf, EncMap *map, BDFFont *thisone); - - - -extern GMenuItem2 helplist[]; -extern BasePoint last_ruler_offset[]; - -extern void CVCopyLayerToLayer(CharView *cv); -extern void FVCopyLayerToLayer(FontView *fv); -extern void CVCompareLayerToLayer(CharView *cv); -extern void FVCompareLayerToLayer(FontView *fv); - -extern void MathInit(void); -extern void SFMathDlg(SplineFont *sf,int def_layer); - -extern GMenuItem2 *cvpy_menu, *fvpy_menu; -extern void cvpy_tllistcheck(GWindow gw,struct gmenuitem *mi,GEvent *e); -extern void fvpy_tllistcheck(GWindow gw,struct gmenuitem *mi,GEvent *e); - -extern GMenuItem2 *cv_menu, *fv_menu; -extern void cv_tl2listcheck(GWindow gw,struct gmenuitem *mi,GEvent *e); -extern void fv_tl2listcheck(GWindow gw,struct gmenuitem *mi,GEvent *e); - -extern void SFValidationWindow(SplineFont *sf,int layer, enum fontformat format); -extern void ValidationDestroy(SplineFont *sf); - - - -extern const char *UI_TTFNameIds(int id); -extern const char *UI_MSLangString(int language); -extern void FontInfoInit(void); -extern void LookupUIInit(void); -extern enum psstrokeflags Ps_StrokeFlagsDlg(void); -extern struct cidmap *AskUserForCIDMap(void); - -extern void DefineGroups(struct fontview *fv); -extern void DisplayGroups(struct fontview *fv); - -extern struct Base *SFBaselines(SplineFont *sf,struct Base *old,int is_vertical); -extern void JustifyDlg(SplineFont *sf); -extern char *GlyphListDlg(SplineFont *sf, char *glyphstr); - -extern void DeltaSuggestionDlg(FontView *fv,CharView *cv); -extern void QGRmFontView(struct qg_data *qg,FontView *fv); -extern void QGRmCharView(struct qg_data *qg,CharView *cv); - - -extern struct hslrgb *SFFontCols(SplineFont *sf,struct hslrgb fontcols[6]); - -extern Color view_bgcol; /* Background color for views */ -extern void MVColInit(void); -extern void CVColInit( void ); - -extern void FontViewRemove(FontView *fv); -extern void FontViewFinishNonStatic(); -extern void FVChar(FontView *fv,GEvent *event); -extern void FVDrawInfo(FontView *fv,GWindow pixmap,GEvent *event); -extern void FVRedrawAllCharViews(FontView *fv); -extern void KFFontViewInits(struct kf_dlg *kf,GGadget *drawable); -extern char *GlyphSetFromSelection(SplineFont *sf,int def_layer,char *current); -extern void ME_ListCheck(GGadget *g,int r, int c, SplineFont *sf); -extern void ME_SetCheckUnique(GGadget *g,int r, int c, SplineFont *sf); -extern void ME_ClassCheckUnique(GGadget *g,int r, int c, SplineFont *sf); -extern void PI_Destroy(struct dlistnode *node); -struct gidata; -extern void PIChangePoint(struct gidata *ci); - -extern void CVRegenFill(CharView *cv); -extern void RulerDlg(CharView *cv); -extern int CVCountSelectedPoints(CharView *cv); -extern void _CVMenuInsertPt(CharView *cv); -extern void _CVMenuNamePoint(CharView *cv, SplinePoint *sp); -extern void _CVMenuNameContour(CharView *cv); - -extern void Prefs_LoadDefaultPreferences( void ); - - -extern CharView* CharViewFindActive(); -extern FontViewBase* FontViewFindActive(); -extern FontViewBase* FontViewFind( int (*testFunc)( FontViewBase*, void* ), void* udata ); - -extern int FontViewFind_byXUID( FontViewBase* fv, void* udata ); -extern int FontViewFind_byXUIDConnected( FontViewBase* fv, void* udata ); -extern int FontViewFind_byCollabPtr( FontViewBase* fv, void* udata ); -extern int FontViewFind_bySplineFont( FontViewBase* fv, void* udata ); -extern int FontViewFind_byCollabBasePort( FontViewBase* fv, void* udata ); - -extern void SPSelectNextPoint( SplinePoint *sp, int state ); -extern void SPSelectPrevPoint( SplinePoint *sp, int state ); - - -/** - * Is the next BCP for the sp selected, and is it the primary BCP for the selection - * @see SPIsNextCPSelected - */ -extern bool SPIsNextCPSelectedSingle( SplinePoint *sp, CharView *cv ); -/** - * Is the prev BCP for the sp selected, and is it the primary BCP for the selection - * @see SPIsNextCPSelected - */ -extern bool SPIsPrevCPSelectedSingle( SplinePoint *sp, CharView *cv ); -/** - * Is the next BCP for the sp selected, it can be the primary or any - * of the secondary selected BCP - * - * The last selected BCP is the 'primary' selected BCP. Code which - * only handles a single selected BCP will only honor the primary - * selected BCP - * - * There can also be one or more seconday selected BCP. These might be - * drawn with slightly less highlight graphically and are only handled - * by code which has been updated to allow mutliple selected BCP to be - * operated on at once. - */ -extern bool SPIsNextCPSelected( SplinePoint *sp, CharView *cv ); -/** - * Is the prev BCP for the sp selected, it can be the primary or any of the secondary selected BCP - * - * @see SPIsNextCPSelected - */ -extern bool SPIsPrevCPSelected( SplinePoint *sp, CharView *cv ); - -typedef struct FE_adjustBCPByDeltaDataS -{ - CharView *cv; //< used to update view - real dx; //< Add this to the BCP x - real dy; //< Add this to the BCP y - int keyboarddx; - -} FE_adjustBCPByDeltaData; - - -/** - * Visitor function type for visitSelectedControlPoints() - */ -typedef void (*visitSelectedControlPointsVisitor) ( void* key, - void* value, - SplinePoint* sp, - BasePoint *which, - bool isnext, - void* udata ); - -/** - * Visitor function to move each BCP by data->dx/data->dy - * - * - * Visitor: visitSelectedControlPointsVisitor - * UsedBy: CVFindAndVisitSelectedControlPoints - */ -extern void FE_adjustBCPByDelta( void* key, - void* value, - SplinePoint* sp, - BasePoint *which, - bool isnext, - void* udata ); - -extern void FE_adjustBCPByDeltaWhilePreservingBCPAngle( void* key, - void* value, - SplinePoint* sp, - BasePoint *which, - bool isnext, - void* udata ); - -/** - * Visitor function to unselect every BCP passed - * - * Visitor: visitSelectedControlPointsVisitor - * UsedBy: CVFindAndVisitSelectedControlPoints - * CVUnselectAllBCP - * - * @see SPIsNextCPSelected - */ -extern void FE_unselectBCP( void* key, - void* value, - SplinePoint* sp, - BasePoint *which, - bool isnext, - void* udata ); - -extern void FE_touchControlPoint( void* key, - void* value, - SplinePoint* sp, - BasePoint *which, - bool isnext, - void* udata ); - -/** - * Find all the selected BCP and apply the visitor function f to them - * passing the user data pointer udata to the 'f' visitor. - * - * This function doesn't use udata at all, it simply passes it on to - * your visitor function so it may do something with it like record - * results or take optional parameters. - * - * If preserveState is true and there are selected BCP then - * CVPreserveState() is called before the visitor function. - */ -extern void CVFindAndVisitSelectedControlPoints( CharView *cv, bool preserveState, - visitSelectedControlPointsVisitor f, void* udata ); -/** - * NOTE: doesn't do all, just all on selected spline. - */ -extern void CVVisitAllControlPoints( CharView *cv, bool preserveState, - visitSelectedControlPointsVisitor f, void* udata ); - -/** - * Unselect all the BCP which are currently selected. - */ -extern void CVUnselectAllBCP( CharView *cv ); - - -/** - * This will call your visitor function 'f' on any selected BCP. This - * is regardless of if the BCP is the next or prev BCP for it's - * splinepoint. - * - * This function doesn't use udata at all, it simply passes it on to - * your visitor function so it may do something with it like record - * results or take optional parameters. - */ -extern void visitSelectedControlPoints( GHashTable *col, visitSelectedControlPointsVisitor f, gpointer udata ); -/** - * NOTE: doesn't do all, just all on selected spline. - */ -extern void visitAllControlPoints( GHashTable *col, visitSelectedControlPointsVisitor f, gpointer udata ); - -extern void CVVisitAdjacentToSelectedControlPoints( CharView *cv, bool preserveState, - visitSelectedControlPointsVisitor f, void* udata ); - -extern void CVFreePreTransformSPL( CharView* cv ); - -extern bool CVShouldInterpolateCPsOnMotion( CharView* cv ); - -extern int CVNearRBearingLine( CharView* cv, real x, real fudge ); -extern int CVNearLBearingLine( CharView* cv, real x, real fudge ); - -extern void CVMenuConstrain(GWindow gw, struct gmenuitem *mi, GEvent *UNUSED(e)); - - - -#endif /* _VIEWS_H */ diff --git a/pdf2htmlEX/src/util/fontforge-20190801/Readme.md b/pdf2htmlEX/src/util/fontforge-20190801/Readme.md new file mode 100644 index 0000000..2cd385b --- /dev/null +++ b/pdf2htmlEX/src/util/fontforge-20190801/Readme.md @@ -0,0 +1,26 @@ +# FontForge: the missing headers + +The FontForge header files in this directory are taken from the +FontForge-20190801 release. + +They are headers which are not usually installed by the FontForge make +system. + + +## Required headers + +- `autowidth.h` required for FVRemoveKerns +- `bitmapchar.h` required for SFReplaceEncodingBDFProps +- `cvimages.h` required for FVImportImages +- `fvfonts.h` required for SFFindSlot +- `namelist.h` required for UniFromName +- `savefont.h` required for GenerateScript +- `splineorder2.h` required for SFConvertToOrder2 +- `splineutil.h` required for AltUniFree +- `splineutil2.h` required for SplineFontNew +- `start.h` required for InitSimpleStuff +- `tottf.h` required for SFDefaultOS2Info + +## Helpful headers + +- `encoding.h` conflicts with an existing header in the src/util directory. diff --git a/pdf2htmlEX/src/util/fontforge-2.0.20170731/autowidth.h b/pdf2htmlEX/src/util/fontforge-20190801/autowidth.h similarity index 100% rename from pdf2htmlEX/src/util/fontforge-2.0.20170731/autowidth.h rename to pdf2htmlEX/src/util/fontforge-20190801/autowidth.h diff --git a/pdf2htmlEX/src/util/fontforge-2.0.20170731/bitmapchar.h b/pdf2htmlEX/src/util/fontforge-20190801/bitmapchar.h similarity index 100% rename from pdf2htmlEX/src/util/fontforge-2.0.20170731/bitmapchar.h rename to pdf2htmlEX/src/util/fontforge-20190801/bitmapchar.h diff --git a/pdf2htmlEX/src/util/fontforge-2.0.20170731/cvimages.h b/pdf2htmlEX/src/util/fontforge-20190801/cvimages.h similarity index 100% rename from pdf2htmlEX/src/util/fontforge-2.0.20170731/cvimages.h rename to pdf2htmlEX/src/util/fontforge-20190801/cvimages.h index 517fd0b..7c77e43 100644 --- a/pdf2htmlEX/src/util/fontforge-2.0.20170731/cvimages.h +++ b/pdf2htmlEX/src/util/fontforge-20190801/cvimages.h @@ -3,8 +3,8 @@ #include "baseviews.h" #include "gimage.h" -#include "splinefont.h" #include "sd.h" +#include "splinefont.h" extern GImage *ImageAlterClut(GImage *image); extern int FVImportImages(FontViewBase *fv, char *path, int format, int toback, int flags); diff --git a/pdf2htmlEX/src/util/fontforge-2.0.20170731/encoding.h b/pdf2htmlEX/src/util/fontforge-20190801/encoding.h similarity index 98% rename from pdf2htmlEX/src/util/fontforge-2.0.20170731/encoding.h rename to pdf2htmlEX/src/util/fontforge-20190801/encoding.h index 6a46e5b..dff132b 100644 --- a/pdf2htmlEX/src/util/fontforge-2.0.20170731/encoding.h +++ b/pdf2htmlEX/src/util/fontforge-20190801/encoding.h @@ -61,7 +61,7 @@ extern int CIDFromName(char *name, SplineFont *cidmaster); extern int CountOfEncoding(Encoding *encoding_name); extern int MaxCID(struct cidmap *map); extern int NameUni2CID(struct cidmap *map, int uni, const char *name); -extern int SFFlattenByCMap(SplineFont *sf, char *cmapname); +extern int SFFlattenByCMap(SplineFont **sf, char *cmapname); extern int SFForceEncoding(SplineFont *sf, EncMap *old, Encoding *new_enc); extern int SFReencode(SplineFont *sf, const char *encname, int force); extern SplineFont *CIDFlatten(SplineFont *cidmaster, SplineChar **glyphs, int charcnt); diff --git a/pdf2htmlEX/src/util/fontforge-2.0.20170731/fvfonts.h b/pdf2htmlEX/src/util/fontforge-20190801/fvfonts.h similarity index 100% rename from pdf2htmlEX/src/util/fontforge-2.0.20170731/fvfonts.h rename to pdf2htmlEX/src/util/fontforge-20190801/fvfonts.h diff --git a/pdf2htmlEX/src/util/fontforge-2.0.20170731/namelist.h b/pdf2htmlEX/src/util/fontforge-20190801/namelist.h similarity index 89% rename from pdf2htmlEX/src/util/fontforge-2.0.20170731/namelist.h rename to pdf2htmlEX/src/util/fontforge-20190801/namelist.h index 3f87c76..6ec85ad 100644 --- a/pdf2htmlEX/src/util/fontforge-2.0.20170731/namelist.h +++ b/pdf2htmlEX/src/util/fontforge-20190801/namelist.h @@ -8,6 +8,7 @@ extern char **AllNamelistNames(void); extern char **SFTemporaryRenameGlyphsToNamelist(SplineFont *sf, NameList *new); extern const char *RenameGlyphToNamelist(char *buffer, SplineChar *sc, NameList *old, NameList *new, char **sofar); extern const char *StdGlyphName(char *buffer, int uni, enum uni_interp interp, NameList *for_this_font); +extern const char *StdGlyphNameBoundsCheck(char *buffer, int uni, enum uni_interp interp, NameList *for_this_font); extern int UniFromName(const char *name, enum uni_interp interp, Encoding *encname); extern NameList *DefaultNameListForNewFonts(void); extern NameList *LoadNamelist(char *filename); diff --git a/pdf2htmlEX/src/util/fontforge-2.0.20170731/savefont.h b/pdf2htmlEX/src/util/fontforge-20190801/savefont.h similarity index 65% rename from pdf2htmlEX/src/util/fontforge-2.0.20170731/savefont.h rename to pdf2htmlEX/src/util/fontforge-20190801/savefont.h index 1bde2a1..62296d2 100644 --- a/pdf2htmlEX/src/util/fontforge-2.0.20170731/savefont.h +++ b/pdf2htmlEX/src/util/fontforge-20190801/savefont.h @@ -32,6 +32,36 @@ #include "splinefont.h" +enum fm_flags { fm_flag_afm = 0x1, + fm_flag_pfm = 0x2, + fm_flag_shortps = 0x4, + fm_flag_nopshints = 0x8, + fm_flag_apple = 0x10, + fm_flag_pfed_comments = 0x20, + fm_flag_pfed_colors = 0x40, + fm_flag_opentype = 0x80, + fm_flag_glyphmap = 0x100, + fm_flag_TeXtable = 0x200, + fm_flag_ofm = 0x400, + fm_flag_applemode = 0x800, + // fm_flag_??? = 0x1000, + fm_flag_symbol = 0x2000, + fm_flag_dummyDSIG = 0x4000, + // fm_flag_??? = 0x8000, + fm_flag_tfm = 0x10000, + fm_flag_nohintsubs = 0x20000, + fm_flag_noflex = 0x40000, + fm_flag_nottfhints = 0x80000, + fm_flag_restrict256 = 0x100000, + fm_flag_round = 0x200000, + fm_flag_afmwithmarks = 0x400000, + fm_flag_pfed_lookups = 0x800000, + fm_flag_pfed_guides = 0x1000000, + fm_flag_pfed_layers = 0x2000000, + fm_flag_winkern = 0x4000000, + fm_flag_nomacnames = 0x8000000, + }; + extern const char (*savefont_extensions[]), (*bitmapextensions[]); extern int old_sfnt_flags; diff --git a/pdf2htmlEX/src/util/fontforge-2.0.20170731/splineorder2.h b/pdf2htmlEX/src/util/fontforge-20190801/splineorder2.h similarity index 100% rename from pdf2htmlEX/src/util/fontforge-2.0.20170731/splineorder2.h rename to pdf2htmlEX/src/util/fontforge-20190801/splineorder2.h diff --git a/pdf2htmlEX/src/util/fontforge-2.0.20170731/splineutil.h b/pdf2htmlEX/src/util/fontforge-20190801/splineutil.h similarity index 98% rename from pdf2htmlEX/src/util/fontforge-2.0.20170731/splineutil.h rename to pdf2htmlEX/src/util/fontforge-20190801/splineutil.h index c0e329b..99d21ab 100644 --- a/pdf2htmlEX/src/util/fontforge-2.0.20170731/splineutil.h +++ b/pdf2htmlEX/src/util/fontforge-20190801/splineutil.h @@ -1,6 +1,7 @@ #ifndef FONTFORGE_SPLINEUTIL_H #define FONTFORGE_SPLINEUTIL_H +#include "glif_name_hash.h" #include "psfont.h" #include "splinefont.h" #include "ttfinstrs.h" @@ -56,6 +57,8 @@ extern int SplineExistsInSS(Spline *s, SplineSet *ss); extern int SplinePointIsACorner(SplinePoint *sp); extern int SplineSetIntersect(SplineSet *spl, Spline **_spline, Spline **_spline2); extern int SplineSetsRemoveAnnoyingExtrema(SplineSet *ss, bigreal err); +extern int SplineRemoveWildControlPoints(Spline *s, bigreal distratio); +extern int SplineSetsRemoveWildControlPoints(SplineSet *ss, bigreal distratio); /* Two lines intersect in at most 1 point */ /* Two quadratics intersect in at most 4 points */ @@ -130,6 +133,7 @@ extern void GlyphVariantsFree(struct glyphvariants *gv); extern void GradientFree(struct gradient *grad); extern void GrowBufferAdd(GrowBuf *gb, int ch); extern void GrowBufferAddStr(GrowBuf *gb, char *str); +extern void GuidelineSetFree(GuidelineSet *gl); extern void ImageListsFree(ImageList *imgs); extern void JstfLangFree(struct jstf_lang *jl); extern void JustifyFree(Justify *just); @@ -172,7 +176,6 @@ extern void SFInstanciateRefs(SplineFont *sf); extern void SFReinstanciateRefs(SplineFont *sf); extern void SFRemoveAnchorClass(SplineFont *sf, AnchorClass *an); extern void SFRemoveSavedTable(SplineFont *sf, uint32 tag); -extern void SPLCategorizePointsKeepCorners(SplinePointList *spl); extern void SplineCharFindBounds(SplineChar *sc, DBounds *bounds); extern void SplineCharFreeContents(SplineChar *sc); extern void SplineCharLayerFindBounds(SplineChar *sc, int layer, DBounds *bounds); @@ -206,12 +209,9 @@ extern void TTFLangNamesFree(struct ttflangname *l); extern void TtfTablesFree(struct ttf_table *tab); extern void ValDevFree(ValDevTab *adjust); -#ifdef FF_UTHASH_GLIF_NAMES -struct glif_name_index; extern int KerningClassSeekByAbsoluteIndex(const struct splinefont *sf, int seek_index, struct kernclass **okc, int *oisv, int *oisr, int *ooffset); extern int HashKerningClassNames(SplineFont *sf, struct glif_name_index * class_name_hash); extern int HashKerningClassNamesCaps(SplineFont *sf, struct glif_name_index * class_name_hash); extern int HashKerningClassNamesFlex(SplineFont *sf, struct glif_name_index * class_name_hash, int capitalize); -#endif /* FF_UTHASH_GLIF_NAMES */ #endif /* FONTFORGE_SPLINEUTIL_H */ diff --git a/pdf2htmlEX/src/util/fontforge-2.0.20170731/splineutil2.h b/pdf2htmlEX/src/util/fontforge-20190801/splineutil2.h similarity index 100% rename from pdf2htmlEX/src/util/fontforge-2.0.20170731/splineutil2.h rename to pdf2htmlEX/src/util/fontforge-20190801/splineutil2.h diff --git a/pdf2htmlEX/src/util/fontforge-2.0.20170731/start.h b/pdf2htmlEX/src/util/fontforge-20190801/start.h similarity index 100% rename from pdf2htmlEX/src/util/fontforge-2.0.20170731/start.h rename to pdf2htmlEX/src/util/fontforge-20190801/start.h diff --git a/pdf2htmlEX/src/util/fontforge-2.0.20170731/tottf.h b/pdf2htmlEX/src/util/fontforge-20190801/tottf.h similarity index 100% rename from pdf2htmlEX/src/util/fontforge-2.0.20170731/tottf.h rename to pdf2htmlEX/src/util/fontforge-20190801/tottf.h