texlive[57374] Build/source/texk/web2c: MFLua 1.0.0-alpha
commits+lscarso at tug.org
commits+lscarso at tug.org
Sun Jan 10 21:13:27 CET 2021
Revision: 57374
http://tug.org/svn/texlive?view=revision&revision=57374
Author: lscarso
Date: 2021-01-10 21:13:26 +0100 (Sun, 10 Jan 2021)
Log Message:
-----------
MFLua 1.0.0-alpha
Modified Paths:
--------------
trunk/Build/source/texk/web2c/Makefile.am
trunk/Build/source/texk/web2c/Makefile.in
trunk/Build/source/texk/web2c/mfluadir/ChangeLog
trunk/Build/source/texk/web2c/mfluadir/am/mflua.am
trunk/Build/source/texk/web2c/mfluadir/mf-lua.ch
trunk/Build/source/texk/web2c/mfluadir/mflua_version.h
trunk/Build/source/texk/web2c/mfluadir/mfluac.c
trunk/Build/source/texk/web2c/mfluajitdir/am/mfluajit.am
Added Paths:
-----------
trunk/Build/source/texk/web2c/mfluadir/am/mfluaotfcc.am
trunk/Build/source/texk/web2c/mfluadir/otfcc/
trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/
trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/
trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/
trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json-builder.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sds.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sdsalloc.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/buffer.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/element.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/ownership.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/vector.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json-builder.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/sds.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/uthash.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/font.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/glyph-order.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/handle.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/logger.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/options.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt-builder.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/BASE.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CFF.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/COLR.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CPAL.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/GDEF.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/LTSH.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/OS_2.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/SVG.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/TSI5.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VDMX.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VORG.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/_TSI.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cmap.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cvt.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fpgm-prep.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fvar.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/gasp.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/glyf.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hdmx.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/head.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hhea.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hmtx.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/maxp.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/meta.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/name.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/classdef.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/coverage.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/post.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/table-common.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vhea.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vmtx.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/axis.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/region.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vf.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vq.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vv.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-font.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt-builder.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-reader/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-reader/json-reader.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-codecs.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-opmean.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-parser.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-string.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-util.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-writer.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/libcff.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/logger/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/logger/logger.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/otf-reader.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/otf-writer.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aliases.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/bin-io.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/buffer/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/buffer/buffer.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/element-impl.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/glyph-order.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/handle.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-funcs.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/options.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/otfcc-alloc.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/primitives.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/tag.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/util.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/vector-impl.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CFF.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CFF.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/COLR.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/COLR.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CPAL.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CPAL.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/GDEF.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/GDEF.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/LTSH.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/LTSH.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/OS_2.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/OS_2.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/SVG.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/SVG.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/TSI5.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/TSI5.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/VDMX.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/VORG.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/VORG.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/_TSI.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/_TSI.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/all.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/cmap.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/cmap.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/cvt.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/cvt.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/fpgm-prep.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/fpgm-prep.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/fvar.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/fvar.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/gasp.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/gasp.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/glyf/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/glyf/build.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/glyf/glyf.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/glyf/read.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/glyf.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/hdmx.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/hdmx.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/head.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/head.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/hhea.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/hhea.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/hmtx.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/hmtx.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/maxp.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/maxp.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta/build.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta/dump.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta/parse.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta/read.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta/type.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/name.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/name.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/build.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/classdef.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/constants.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/coverage.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/dump.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/otl.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/parse.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/private.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/read.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/common.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/common.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/extend.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/extend.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-common.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-single.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-single.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/post.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/post.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vdmx/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vdmx/funcs.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vdmx/type.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vhea.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vhea.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vmtx.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vmtx.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/vf/
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/vf/axis.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/vf/region.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/vf/vq.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/src/
trunk/Build/source/texk/web2c/mfluadir/otfcc/src/aliases.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/src/luafunc.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/src/otfccbuild.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/src/otfccdll.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/src/otfccdump.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/src/platform.h
trunk/Build/source/texk/web2c/mfluadir/otfcc/src/stopwatch.c
trunk/Build/source/texk/web2c/mfluadir/otfcc/src/stopwatch.h
Modified: trunk/Build/source/texk/web2c/Makefile.am
===================================================================
--- trunk/Build/source/texk/web2c/Makefile.am 2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/Makefile.am 2021-01-10 20:13:26 UTC (rev 57374)
@@ -195,6 +195,7 @@
## MFLua
include $(srcdir)/mfluadir/am/mflua.am
+include $(srcdir)/mfluadir/am/mfluaotfcc.am
## MFLuaJIT
include $(srcdir)/mfluajitdir/am/mfluajit.am
Modified: trunk/Build/source/texk/web2c/Makefile.in
===================================================================
--- trunk/Build/source/texk/web2c/Makefile.in 2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/Makefile.in 2021-01-10 20:13:26 UTC (rev 57374)
@@ -990,6 +990,133 @@
libmfluajit_a-mfluajit-pool.$(OBJEXT)
libmfluajit_a_OBJECTS = $(dist_libmfluajit_a_OBJECTS) \
$(nodist_libmfluajit_a_OBJECTS)
+libmfluajitotfcc_a_AR = $(AR) $(ARFLAGS)
+libmfluajitotfcc_a_LIBADD =
+libmfluajitotfcc_a_SOURCES = libmfluajitotfcc.c
+libmfluajitotfcc_a_OBJECTS = \
+ libmfluajitotfcc_a-libmfluajitotfcc.$(OBJEXT)
+libmfluaotfcc_a_AR = $(AR) $(ARFLAGS)
+libmfluaotfcc_a_LIBADD =
+am_libmfluaotfcc_a_OBJECTS = mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.$(OBJEXT) \
+ mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.$(OBJEXT) \
+ mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.$(OBJEXT) \
+ mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.$(OBJEXT) \
+ mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.$(OBJEXT) \
+ mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.$(OBJEXT) \
+ mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.$(OBJEXT) \
+ mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.$(OBJEXT) \
+ mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.$(OBJEXT) \
+ mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.$(OBJEXT) \
+ mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.$(OBJEXT) \
+ mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.$(OBJEXT) \
+ mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.$(OBJEXT) \
+ mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.$(OBJEXT) \
+ mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.$(OBJEXT) \
+ mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.$(OBJEXT) \
+ mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.$(OBJEXT) \
+ mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.$(OBJEXT) \
+ mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.$(OBJEXT) \
+ mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.$(OBJEXT) \
+ mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.$(OBJEXT) \
+ mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.$(OBJEXT) \
+ mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.$(OBJEXT) \
+ mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.$(OBJEXT) \
+ mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.$(OBJEXT) \
+ mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.$(OBJEXT) \
+ mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.$(OBJEXT) \
+ mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.$(OBJEXT) \
+ mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.$(OBJEXT) \
+ mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.$(OBJEXT) \
+ mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.$(OBJEXT) \
+ mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.$(OBJEXT) \
+ mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.$(OBJEXT) \
+ mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.$(OBJEXT) \
+ mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.$(OBJEXT) \
+ mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.$(OBJEXT) \
+ mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.$(OBJEXT) \
+ mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.$(OBJEXT) \
+ mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.$(OBJEXT) \
+ mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.$(OBJEXT) \
+ mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.$(OBJEXT) \
+ mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.$(OBJEXT) \
+ mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.$(OBJEXT) \
+ mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.$(OBJEXT) \
+ mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.$(OBJEXT) \
+ mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.$(OBJEXT) \
+ mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.$(OBJEXT) \
+ mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.$(OBJEXT) \
+ mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.$(OBJEXT) \
+ mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.$(OBJEXT) \
+ mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.$(OBJEXT) \
+ mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.$(OBJEXT) \
+ mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.$(OBJEXT) \
+ mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.$(OBJEXT) \
+ mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.$(OBJEXT) \
+ mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.$(OBJEXT) \
+ mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.$(OBJEXT) \
+ mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.$(OBJEXT) \
+ mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.$(OBJEXT) \
+ mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.$(OBJEXT)
+libmfluaotfcc_a_OBJECTS = $(am_libmfluaotfcc_a_OBJECTS)
libmplibbackends_a_AR = $(AR) $(ARFLAGS)
libmplibbackends_a_LIBADD =
am__objects_17 = libmplibbackends_a-pngout.$(OBJEXT)
@@ -1315,8 +1442,8 @@
mf_nowin_DEPENDENCIES = libmf.a $(am__DEPENDENCIES_2) $(windowlib)
dist_mflua_OBJECTS = mfluadir/mflua-mfluaextra.$(OBJEXT)
mflua_OBJECTS = $(dist_mflua_OBJECTS)
-mflua_DEPENDENCIES = libmflua.a $(am__DEPENDENCIES_2) $(windowlib) \
- $(am__DEPENDENCIES_9) $(am__DEPENDENCIES_6)
+mflua_DEPENDENCIES = libmflua.a libmfluaotfcc.a $(am__DEPENDENCIES_2) \
+ $(windowlib) $(am__DEPENDENCIES_9) $(am__DEPENDENCIES_6)
mflua_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(mflua_LDFLAGS) $(LDFLAGS) -o $@
@@ -1323,15 +1450,16 @@
am__objects_41 = mfluadir/mflua_nowin-mfluaextra.$(OBJEXT)
nodist_mflua_nowin_OBJECTS = $(am__objects_41)
mflua_nowin_OBJECTS = $(nodist_mflua_nowin_OBJECTS)
-mflua_nowin_DEPENDENCIES = libmflua.a $(am__DEPENDENCIES_2) \
- $(windowlib) $(am__DEPENDENCIES_6)
+mflua_nowin_DEPENDENCIES = libmflua.a libmfluaotfcc.a \
+ $(am__DEPENDENCIES_2) $(windowlib) $(am__DEPENDENCIES_6)
mflua_nowin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(mflua_nowin_LDFLAGS) $(LDFLAGS) -o $@
dist_mfluajit_OBJECTS = mfluajitdir/mfluajit-mfluajitextra.$(OBJEXT)
mfluajit_OBJECTS = $(dist_mfluajit_OBJECTS)
-mfluajit_DEPENDENCIES = libmfluajit.a $(am__DEPENDENCIES_2) \
- $(windowlib) $(am__DEPENDENCIES_9) $(am__DEPENDENCIES_1)
+mfluajit_DEPENDENCIES = libmfluajit.a libmfluaotfcc.a \
+ $(am__DEPENDENCIES_2) $(windowlib) $(am__DEPENDENCIES_9) \
+ $(am__DEPENDENCIES_1)
mfluajit_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(mfluajit_LDFLAGS) $(LDFLAGS) -o $@
@@ -1338,8 +1466,8 @@
am__objects_42 = mfluajitdir/mfluajit_nowin-mfluajitextra.$(OBJEXT)
nodist_mfluajit_nowin_OBJECTS = $(am__objects_42)
mfluajit_nowin_OBJECTS = $(nodist_mfluajit_nowin_OBJECTS)
-mfluajit_nowin_DEPENDENCIES = libmfluajit.a $(am__DEPENDENCIES_2) \
- $(windowlib) $(am__DEPENDENCIES_1)
+mfluajit_nowin_DEPENDENCIES = libmfluajit.a libmfluaotfcc.a \
+ $(am__DEPENDENCIES_2) $(windowlib) $(am__DEPENDENCIES_1)
mfluajit_nowin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(AM_CFLAGS) $(CFLAGS) $(mfluajit_nowin_LDFLAGS) $(LDFLAGS) -o \
@@ -1640,6 +1768,7 @@
./$(DEPDIR)/libmfluajit_a-mfluajit-pool.Po \
./$(DEPDIR)/libmfluajit_a-mfluajit0.Po \
./$(DEPDIR)/libmfluajit_a-mfluajitini.Po \
+ ./$(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Po \
./$(DEPDIR)/libmplibbackends_a-pngout.Po \
./$(DEPDIR)/libmplibbackends_a-svgout.Po \
./$(DEPDIR)/libmplibcore_a-mp.Po \
@@ -2077,6 +2206,125 @@
mfluadir/$(DEPDIR)/libmfluajit_a-mfluac.Po \
mfluadir/$(DEPDIR)/mflua-mfluaextra.Po \
mfluadir/$(DEPDIR)/mflua_nowin-mfluaextra.Po \
+ mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Po \
+ mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Po \
+ mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Po \
+ mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Po \
+ mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Po \
+ mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Po \
+ mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Po \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Po \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Po \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Po \
+ mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Po \
+ mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Po \
+ mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Po \
+ mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Po \
+ mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Po \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Po \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Po \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Po \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Po \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Po \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Po \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Po \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Po \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Po \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Po \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Po \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Po \
+ mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Po \
+ mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Po \
+ mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Po \
+ mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Po \
+ mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Po \
+ mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Po \
+ mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Po \
+ mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Po \
+ mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Po \
+ mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Po \
+ mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Po \
+ mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Po \
+ mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Po \
+ mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Po \
+ mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Po \
+ mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Po \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Po \
+ mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Po \
+ mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Po \
+ mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Po \
+ mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Po \
+ mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Po \
+ mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Po \
+ mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Po \
+ mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Po \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Po \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Po \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Po \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Po \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Po \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Po \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Po \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Po \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Po \
+ mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Po \
+ mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Po \
+ mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Po \
+ mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Po \
+ mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Po \
+ mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Po \
+ mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Po \
+ mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Po \
+ mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Po \
+ mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Po \
mfluajitdir/$(DEPDIR)/mfluajit-mfluajitextra.Po \
mfluajitdir/$(DEPDIR)/mfluajit_nowin-mfluajitextra.Po \
mplibdir/$(DEPDIR)/libmputil_a-avl.Po \
@@ -2225,7 +2473,8 @@
$(nodist_libluatexspecific_a_SOURCES) $(libmd5_a_SOURCES) \
$(nodist_libmf_a_SOURCES) $(dist_libmflua_a_SOURCES) \
$(nodist_libmflua_a_SOURCES) $(dist_libmfluajit_a_SOURCES) \
- $(nodist_libmfluajit_a_SOURCES) \
+ $(nodist_libmfluajit_a_SOURCES) libmfluajitotfcc.c \
+ $(libmfluaotfcc_a_SOURCES) \
$(nodist_libmplibbackends_a_SOURCES) \
$(nodist_libmplibcore_a_SOURCES) \
$(nodist_libmplibextramath_a_SOURCES) $(libmputil_a_SOURCES) \
@@ -2289,7 +2538,8 @@
$(libluaharfbuzz_a_SOURCES) $(libluajitharfbuzz_a_SOURCES) \
$(dist_libluajittex_a_SOURCES) $(dist_libluatex_a_SOURCES) \
$(libmd5_a_SOURCES) $(dist_libmflua_a_SOURCES) \
- $(dist_libmfluajit_a_SOURCES) $(libmputil_a_SOURCES) \
+ $(dist_libmfluajit_a_SOURCES) libmfluajitotfcc.c \
+ $(libmfluaotfcc_a_SOURCES) $(libmputil_a_SOURCES) \
$(am__libpdftex_a_SOURCES_DIST) $(EXTRA_libpdftex_a_SOURCES) \
$(libukanji_a_SOURCES) $(libunilib_a_SOURCES) \
$(am__libxetex_a_SOURCES_DIST) $(libsynctex_la_SOURCES) \
@@ -2559,6 +2809,7 @@
$(srcdir)/luatexdir/am/luasocket.am \
$(srcdir)/luatexdir/am/luatex.am \
$(srcdir)/mfluadir/am/mflua.am \
+ $(srcdir)/mfluadir/am/mfluaotfcc.am \
$(srcdir)/mfluajitdir/am/mfluajit.am \
$(srcdir)/mplibdir/am/libmplib.am \
$(srcdir)/mplibdir/am/libmputil.am \
@@ -2871,7 +3122,8 @@
#EXTRA_LIBRARIES += libluamisc.a liblua53misc.a libluajitmisc.a
#EXTRA_LIBRARIES += libluaffi.a liblua53ffi.a
-EXTRA_LIBRARIES = libmf.a libmflua.a libmfluajit.a libmputil.a \
+EXTRA_LIBRARIES = libmf.a libmflua.a libmfluaotfcc.a libmfluaotfcc.a \
+ libmfluajitotfcc.a libmfluajit.a libmfluaotfcc.a libmputil.a \
libmplibcore.a libmplibextramath.a libmplibbackends.a \
libkanji.a libukanji.a libpdftex.a libluasocket.a \
libluajitsocket.a libluamisc.a libluajitmisc.a libunilib.a \
@@ -3547,11 +3799,11 @@
call_mflua_LDADD =
dist_mflua_SOURCES = mfluadir/mfluaextra.c mfluadir/mfluaextra.h mfluadir/mflua_version.h
mflua_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS) $(LUA_INCLUDES)
-mflua_LDADD = libmflua.a $(LDADD) $(windowlib) $(mf_x_libs) $(LUA_LIBS)
+mflua_LDADD = libmflua.a libmfluaotfcc.a $(LDADD) $(windowlib) $(mf_x_libs) $(LUA_LIBS)
mflua_LDFLAGS = -export-dynamic
nodist_mflua_nowin_SOURCES = $(dist_mflua_SOURCES)
mflua_nowin_CPPFLAGS = $(mflua_CPPFLAGS) -DMFNOWIN $(LUA_INCLUDES)
-mflua_nowin_LDADD = libmflua.a $(LDADD) $(windowlib) $(LUA_LIBS)
+mflua_nowin_LDADD = libmflua.a libmfluaotfcc.a $(LDADD) $(windowlib) $(LUA_LIBS)
mflua_nowin_LDFLAGS = -export-dynamic
# MFLua C sources
@@ -3572,16 +3824,299 @@
# MFLua tests
#
mflua_tests = mfluadir/mfluatraptest.test
+libmfluaotfcc_a_CPPFLAGS = \
+ -D_CARYLL_USE_PRE_SERIALIZED -DMAIN_VER=0 -DSECONDARY_VER=10 -DPATCH_VER=4 \
+ -I$(top_srcdir)/mfluadir/otfcc/include \
+ -I$(top_srcdir)/mfluadir/otfcc/include/dep \
+ -I$(top_srcdir)/mfluadir/otfcc/lib \
+ $(LUA_INCLUDES)
+
+libmfluajitotfcc_a_CPPFLAGS = \
+ -D_CARYLL_USE_PRE_SERIALIZED -DMAIN_VER=0 -DSECONDARY_VER=10 -DPATCH_VER=4 \
+ -DJIT \
+ -I$(top_srcdir)/mfluadir/otfcc/include \
+ -I$(top_srcdir)/mfluadir/otfcc/include/dep \
+ -I$(top_srcdir)/mfluadir/otfcc/lib \
+ $(LUAJIT_INCLUDES)
+
+libmfluaotfcc_a_CFLAGS = # $(WARNING_CFLAGS)
+libmfluajitotfcc_a_CFLAGS = # $(WARNING_CFLAGS)
+
+#nodist_libmfluaotfcc_a_SOURCES = $(libmfluaotfcc_sources)
+#nodist_libmfluajitotfcc_a_SOURCES = $(libmfluaotfcc_sources)
+libmfluaotfcc_a_SOURCES = \
+ mfluadir/otfcc/dep/extern/sdsalloc.h \
+ mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c \
+ mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.h \
+ mfluadir/otfcc/dep/extern/json.c \
+ mfluadir/otfcc/dep/extern/json-builder.c \
+ mfluadir/otfcc/dep/extern/sds.c \
+ mfluadir/otfcc/src/aliases.h \
+ mfluadir/otfcc/src/luafunc.c \
+ mfluadir/otfcc/src/otfccbuild.c \
+ mfluadir/otfcc/src/otfccdump.c \
+ mfluadir/otfcc/src/platform.h \
+ mfluadir/otfcc/src/otfccdll.c \
+ mfluadir/otfcc/src/stopwatch.c \
+ mfluadir/otfcc/src/stopwatch.h \
+ mfluadir/otfcc/include/dep/json.h \
+ mfluadir/otfcc/include/dep/json-builder.h \
+ mfluadir/otfcc/include/dep/sds.h \
+ mfluadir/otfcc/include/dep/uthash.h \
+ mfluadir/otfcc/include/otfcc/options.h \
+ mfluadir/otfcc/include/otfcc/primitives.h \
+ mfluadir/otfcc/include/otfcc/handle.h \
+ mfluadir/otfcc/include/otfcc/vf/vf.h \
+ mfluadir/otfcc/include/otfcc/vf/vv.h \
+ mfluadir/otfcc/include/otfcc/vf/region.h \
+ mfluadir/otfcc/include/otfcc/vf/axis.h \
+ mfluadir/otfcc/include/otfcc/vf/vq.h \
+ mfluadir/otfcc/include/otfcc/sfnt.h \
+ mfluadir/otfcc/include/otfcc/glyph-order.h \
+ mfluadir/otfcc/include/otfcc/sfnt-builder.h \
+ mfluadir/otfcc/include/otfcc/logger.h \
+ mfluadir/otfcc/include/otfcc/font.h \
+ mfluadir/otfcc/include/otfcc/table/fvar.h \
+ mfluadir/otfcc/include/otfcc/table/maxp.h \
+ mfluadir/otfcc/include/otfcc/table/BASE.h \
+ mfluadir/otfcc/include/otfcc/table/post.h \
+ mfluadir/otfcc/include/otfcc/table/vmtx.h \
+ mfluadir/otfcc/include/otfcc/table/glyf.h \
+ mfluadir/otfcc/include/otfcc/table/fpgm-prep.h \
+ mfluadir/otfcc/include/otfcc/table/vhea.h \
+ mfluadir/otfcc/include/otfcc/table/gasp.h \
+ mfluadir/otfcc/include/otfcc/table/name.h \
+ mfluadir/otfcc/include/otfcc/table/hmtx.h \
+ mfluadir/otfcc/include/otfcc/table/OS_2.h \
+ mfluadir/otfcc/include/otfcc/table/CPAL.h \
+ mfluadir/otfcc/include/otfcc/table/GDEF.h \
+ mfluadir/otfcc/include/otfcc/table/TSI5.h \
+ mfluadir/otfcc/include/otfcc/table/hdmx.h \
+ mfluadir/otfcc/include/otfcc/table/table-common.h \
+ mfluadir/otfcc/include/otfcc/table/LTSH.h \
+ mfluadir/otfcc/include/otfcc/table/VORG.h \
+ mfluadir/otfcc/include/otfcc/table/cmap.h \
+ mfluadir/otfcc/include/otfcc/table/_TSI.h \
+ mfluadir/otfcc/include/otfcc/table/COLR.h \
+ mfluadir/otfcc/include/otfcc/table/CFF.h \
+ mfluadir/otfcc/include/otfcc/table/otl/coverage.h \
+ mfluadir/otfcc/include/otfcc/table/otl/classdef.h \
+ mfluadir/otfcc/include/otfcc/table/otl.h \
+ mfluadir/otfcc/include/otfcc/table/cvt.h \
+ mfluadir/otfcc/include/otfcc/table/meta.h \
+ mfluadir/otfcc/include/otfcc/table/SVG.h \
+ mfluadir/otfcc/include/otfcc/table/hhea.h \
+ mfluadir/otfcc/include/otfcc/table/VDMX.h \
+ mfluadir/otfcc/include/otfcc/table/head.h \
+ mfluadir/otfcc/include/caryll/ownership.h \
+ mfluadir/otfcc/include/caryll/element.h \
+ mfluadir/otfcc/include/caryll/buffer.h \
+ mfluadir/otfcc/include/caryll/vector.h \
+ mfluadir/otfcc/lib/consolidate/consolidate.c \
+ mfluadir/otfcc/lib/consolidate/consolidate.h \
+ mfluadir/otfcc/lib/consolidate/otl/gpos-single.h \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-single.c \
+ mfluadir/otfcc/lib/consolidate/otl/gpos-single.c \
+ mfluadir/otfcc/lib/consolidate/otl/chaining.c \
+ mfluadir/otfcc/lib/consolidate/otl/common.c \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.h \
+ mfluadir/otfcc/lib/consolidate/otl/gpos-pair.h \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-single.h \
+ mfluadir/otfcc/lib/consolidate/otl/chaining.h \
+ mfluadir/otfcc/lib/consolidate/otl/GDEF.h \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c \
+ mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.h \
+ mfluadir/otfcc/lib/consolidate/otl/mark.h \
+ mfluadir/otfcc/lib/consolidate/otl/common.h \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c \
+ mfluadir/otfcc/lib/consolidate/otl/GDEF.c \
+ mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-multi.h \
+ mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c \
+ mfluadir/otfcc/lib/consolidate/otl/mark.c \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.h \
+ mfluadir/otfcc/lib/support/options.c \
+ mfluadir/otfcc/lib/support/aliases.h \
+ mfluadir/otfcc/lib/support/tag.h \
+ mfluadir/otfcc/lib/support/bin-io.h \
+ mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c \
+ mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.h \
+ mfluadir/otfcc/lib/support/handle.c \
+ mfluadir/otfcc/lib/support/otfcc-alloc.h \
+ mfluadir/otfcc/lib/support/util.h \
+ mfluadir/otfcc/lib/support/element-impl.h \
+ mfluadir/otfcc/lib/support/buffer/buffer.c \
+ mfluadir/otfcc/lib/support/vector-impl.h \
+ mfluadir/otfcc/lib/support/primitives.c \
+ mfluadir/otfcc/lib/support/glyph-order.c \
+ mfluadir/otfcc/lib/support/sha1/sha1.h \
+ mfluadir/otfcc/lib/support/sha1/sha1.c \
+ mfluadir/otfcc/lib/support/ttinstr/ttinstr.c \
+ mfluadir/otfcc/lib/support/ttinstr/ttinstr.h \
+ mfluadir/otfcc/lib/support/base64/base64.h \
+ mfluadir/otfcc/lib/support/base64/base64.c \
+ mfluadir/otfcc/lib/support/json/json-ident.c \
+ mfluadir/otfcc/lib/support/json/json-funcs.h \
+ mfluadir/otfcc/lib/support/json/json-ident.h \
+ mfluadir/otfcc/lib/support/aglfn/aglfn.c \
+ mfluadir/otfcc/lib/support/aglfn/aglfn.h \
+ mfluadir/otfcc/lib/otf-writer/stat.h \
+ mfluadir/otfcc/lib/otf-writer/stat.c \
+ mfluadir/otfcc/lib/otf-writer/otf-writer.c \
+ mfluadir/otfcc/lib/otf-reader/otf-reader.c \
+ mfluadir/otfcc/lib/otf-reader/unconsolidate.c \
+ mfluadir/otfcc/lib/otf-reader/unconsolidate.h \
+ mfluadir/otfcc/lib/vf/axis.c \
+ mfluadir/otfcc/lib/vf/region.c \
+ mfluadir/otfcc/lib/vf/vq.c \
+ mfluadir/otfcc/lib/logger/logger.c \
+ mfluadir/otfcc/lib/bk/bkblock.h \
+ mfluadir/otfcc/lib/bk/bkgraph.h \
+ mfluadir/otfcc/lib/bk/bkgraph.c \
+ mfluadir/otfcc/lib/bk/bkblock.c \
+ mfluadir/otfcc/lib/font/caryll-font.c \
+ mfluadir/otfcc/lib/font/caryll-sfnt-builder.c \
+ mfluadir/otfcc/lib/font/caryll-sfnt.c \
+ mfluadir/otfcc/lib/json-writer/json-writer.c \
+ mfluadir/otfcc/lib/json-reader/json-reader.c \
+ mfluadir/otfcc/lib/libcff/charstring-il.h \
+ mfluadir/otfcc/lib/libcff/cff-index.h \
+ mfluadir/otfcc/lib/libcff/cff-dict.h \
+ mfluadir/otfcc/lib/libcff/cff-value.h \
+ mfluadir/otfcc/lib/libcff/cff-string.c \
+ mfluadir/otfcc/lib/libcff/cff-opmean.c \
+ mfluadir/otfcc/lib/libcff/libcff.h \
+ mfluadir/otfcc/lib/libcff/charstring-il.c \
+ mfluadir/otfcc/lib/libcff/cff-fdselect.c \
+ mfluadir/otfcc/lib/libcff/cff-parser.c \
+ mfluadir/otfcc/lib/libcff/subr.c \
+ mfluadir/otfcc/lib/libcff/cff-charset.c \
+ mfluadir/otfcc/lib/libcff/cff-index.c \
+ mfluadir/otfcc/lib/libcff/cff-codecs.c \
+ mfluadir/otfcc/lib/libcff/cff-charset.h \
+ mfluadir/otfcc/lib/libcff/cff-util.h \
+ mfluadir/otfcc/lib/libcff/cff-writer.c \
+ mfluadir/otfcc/lib/libcff/subr.h \
+ mfluadir/otfcc/lib/libcff/cff-fdselect.h \
+ mfluadir/otfcc/lib/libcff/cff-dict.c \
+ mfluadir/otfcc/lib/libcff/cff-value.c \
+ mfluadir/otfcc/lib/table/vhea.c \
+ mfluadir/otfcc/lib/table/fvar.c \
+ mfluadir/otfcc/lib/table/cmap.c \
+ mfluadir/otfcc/lib/table/meta/read.c \
+ mfluadir/otfcc/lib/table/meta/type.c \
+ mfluadir/otfcc/lib/table/meta/build.c \
+ mfluadir/otfcc/lib/table/meta/parse.c \
+ mfluadir/otfcc/lib/table/meta/dump.c \
+ mfluadir/otfcc/lib/table/vdmx/type.c \
+ mfluadir/otfcc/lib/table/vdmx/funcs.c \
+ mfluadir/otfcc/lib/table/hhea.c \
+ mfluadir/otfcc/lib/table/fvar.h \
+ mfluadir/otfcc/lib/table/maxp.h \
+ mfluadir/otfcc/lib/table/BASE.h \
+ mfluadir/otfcc/lib/table/post.h \
+ mfluadir/otfcc/lib/table/post.c \
+ mfluadir/otfcc/lib/table/cvt.c \
+ mfluadir/otfcc/lib/table/CFF.c \
+ mfluadir/otfcc/lib/table/vmtx.h \
+ mfluadir/otfcc/lib/table/glyf.h \
+ mfluadir/otfcc/lib/table/gasp.c \
+ mfluadir/otfcc/lib/table/LTSH.c \
+ mfluadir/otfcc/lib/table/maxp.c \
+ mfluadir/otfcc/lib/table/fpgm-prep.h \
+ mfluadir/otfcc/lib/table/all.h \
+ mfluadir/otfcc/lib/table/COLR.c \
+ mfluadir/otfcc/lib/table/vmtx.c \
+ mfluadir/otfcc/lib/table/vhea.h \
+ mfluadir/otfcc/lib/table/gasp.h \
+ mfluadir/otfcc/lib/table/fpgm-prep.c \
+ mfluadir/otfcc/lib/table/name.h \
+ mfluadir/otfcc/lib/table/hmtx.h \
+ mfluadir/otfcc/lib/table/head.c \
+ mfluadir/otfcc/lib/table/OS_2.h \
+ mfluadir/otfcc/lib/table/CPAL.c \
+ mfluadir/otfcc/lib/table/CPAL.h \
+ mfluadir/otfcc/lib/table/GDEF.h \
+ mfluadir/otfcc/lib/table/TSI5.h \
+ mfluadir/otfcc/lib/table/hdmx.h \
+ mfluadir/otfcc/lib/table/_TSI.c \
+ mfluadir/otfcc/lib/table/LTSH.h \
+ mfluadir/otfcc/lib/table/VORG.h \
+ mfluadir/otfcc/lib/table/name.c \
+ mfluadir/otfcc/lib/table/cmap.h \
+ mfluadir/otfcc/lib/table/OS_2.c \
+ mfluadir/otfcc/lib/table/hdmx.c \
+ mfluadir/otfcc/lib/table/glyf/read.c \
+ mfluadir/otfcc/lib/table/glyf/glyf.c \
+ mfluadir/otfcc/lib/table/glyf/build.c \
+ mfluadir/otfcc/lib/table/_TSI.h \
+ mfluadir/otfcc/lib/table/GDEF.c \
+ mfluadir/otfcc/lib/table/COLR.h \
+ mfluadir/otfcc/lib/table/VORG.c \
+ mfluadir/otfcc/lib/table/CFF.h \
+ mfluadir/otfcc/lib/table/otl/coverage.c \
+ mfluadir/otfcc/lib/table/otl/read.c \
+ mfluadir/otfcc/lib/table/otl/private.h \
+ mfluadir/otfcc/lib/table/otl/classdef.c \
+ mfluadir/otfcc/lib/table/otl/build.c \
+ mfluadir/otfcc/lib/table/otl/parse.c \
+ mfluadir/otfcc/lib/table/otl/dump.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-single.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-common.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.h \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/common.h \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-single.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.h \
+ mfluadir/otfcc/lib/table/otl/subtables/common.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c \
+ mfluadir/otfcc/lib/table/otl/subtables/extend.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.h \
+ mfluadir/otfcc/lib/table/otl/subtables/extend.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.h \
+ mfluadir/otfcc/lib/table/otl/otl.c \
+ mfluadir/otfcc/lib/table/otl/constants.c \
+ mfluadir/otfcc/lib/table/hmtx.c \
+ mfluadir/otfcc/lib/table/otl.h \
+ mfluadir/otfcc/lib/table/cvt.h \
+ mfluadir/otfcc/lib/table/meta.h \
+ mfluadir/otfcc/lib/table/SVG.h \
+ mfluadir/otfcc/lib/table/hhea.h \
+ mfluadir/otfcc/lib/table/BASE.c \
+ mfluadir/otfcc/lib/table/VDMX.h \
+ mfluadir/otfcc/lib/table/SVG.c \
+ mfluadir/otfcc/lib/table/head.h \
+ mfluadir/otfcc/lib/table/TSI5.c
+
call_mfluajit_CPPFLAGS = -DEXEPROG=\"mfluajit.exe\"
nodist_call_mfluajit_SOURCES = callexe.c
call_mfluajit_LDADD =
dist_mfluajit_SOURCES = mfluajitdir/mfluajitextra.c mfluajitdir/mfluajitextra.h mfluadir/mflua_version.h
mfluajit_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS) $(LUAJIT_INCLUDES) $(LUAJIT_DEFINES)
-mfluajit_LDADD = libmfluajit.a $(LDADD) $(windowlib) $(mf_x_libs) $(LUAJIT_LIBS)
+mfluajit_LDADD = libmfluajit.a libmfluaotfcc.a $(LDADD) $(windowlib) $(mf_x_libs) $(LUAJIT_LIBS)
mfluajit_LDFLAGS = -export-dynamic $(LUAJIT_LDEXTRA)
nodist_mfluajit_nowin_SOURCES = $(dist_mfluajit_SOURCES)
mfluajit_nowin_CPPFLAGS = $(mfluajit_CPPFLAGS) -DMFNOWIN $(LUAJIT_INCLUDES) $(LUAJIT_DEFINES)
-mfluajit_nowin_LDADD = libmfluajit.a $(LDADD) $(windowlib) $(LUAJIT_LIBS)
+mfluajit_nowin_LDADD = libmfluajit.a libmfluaotfcc.a $(LDADD) $(windowlib) $(LUAJIT_LIBS)
mfluajit_nowin_LDFLAGS = -export-dynamic $(LUAJIT_LDEXTRA)
# MFLuaJIT C sources
@@ -4927,7 +5462,7 @@
.SUFFIXES: .c .cc .cin .cpp .cxx .h .hin .lo .log .mm .o .obj .p .pin .pl .pl$(EXEEXT) .test .test$(EXEEXT) .trs
am--refresh: Makefile
@:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../../am/dist_hook.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mfluadir/am/mflua.am $(srcdir)/mfluajitdir/am/mfluajit.am $(srcdir)/mplibdir/am/mplib.am $(srcdir)/pmpostdir/am/pmpost.am $(srcdir)/mplibdir/am/libmputil.am $(srcdir)/mplibdir/am/libmplib.am $(srcdir)/etexdir/am/etex.am $(srcdir)/ptexdir/am/ptex.am $(srcdir)/eptexdir/am/eptex.am $(srcdir)/uptexdir/am/uptex.am $(srcdir)/euptexdir/am/euptex.am $(srcdir)/pdftexdir/am/libpdftex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/pdftexdir/am/ttf2afm.am $(srcdir)/pdftexdir/am/pdftosrc.am $(srcdir)/luatexdir/am/luasocket.am $(srcdir)/luatexdir/am/luamisc.am $(srcdir)/luatexdir/am/libunilib.am $(srcdir)/luatexdir/am/luafontforge.am $(srcdir)/luatexdir/am/libluatex.am $(srcdir)/luatexdir/am/luaffi.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/luatexdir/am/luaharfbuzz.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(srcdir)/../../am/bin_links.am $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../../am/dist_hook.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mfluadir/am/mflua.am $(srcdir)/mfluadir/am/mfluaotfcc.am $(srcdir)/mfluajitdir/am/mfluajit.am $(srcdir)/mplibdir/am/mplib.am $(srcdir)/pmpostdir/am/pmpost.am $(srcdir)/mplibdir/am/libmputil.am $(srcdir)/mplibdir/am/libmplib.am $(srcdir)/etexdir/am/etex.am $(srcdir)/ptexdir/am/ptex.am $(srcdir)/eptexdir/am/eptex.am $(srcdir)/uptexdir/am/uptex.am $(srcdir)/euptexdir/am/euptex.am $(srcdir)/pdftexdir/am/libpdftex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/pdftexdir/am/ttf2afm.am $(srcdir)/pdftexdir/am/pdftosrc.am $(srcdir)/luatexdir/am/luasocket.am $(srcdir)/luatexdir/am/luamisc.am $(srcdir)/luatexdir/am/libunilib.am $(srcdir)/luatexdir/am/luafontforge.am $(srcdir)/luatexdir/am/libluatex.am $(srcdir)/luatexdir/am/luaffi.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/luatexdir/am/luaharfbuzz.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(srcdir)/../../am/bin_links.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -4949,7 +5484,7 @@
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
esac;
-$(srcdir)/../../am/dist_hook.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mfluadir/am/mflua.am $(srcdir)/mfluajitdir/am/mfluajit.am $(srcdir)/mplibdir/am/mplib.am $(srcdir)/pmpostdir/am/pmpost.am $(srcdir)/mplibdir/am/libmputil.am $(srcdir)/mplibdir/am/libmplib.am $(srcdir)/etexdir/am/etex.am $(srcdir)/ptexdir/am/ptex.am $(srcdir)/eptexdir/am/eptex.am $(srcdir)/uptexdir/am/uptex.am $(srcdir)/euptexdir/am/euptex.am $(srcdir)/pdftexdir/am/libpdftex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/pdftexdir/am/ttf2afm.am $(srcdir)/pdftexdir/am/pdftosrc.am $(srcdir)/luatexdir/am/luasocket.am $(srcdir)/luatexdir/am/luamisc.am $(srcdir)/luatexdir/am/libunilib.am $(srcdir)/luatexdir/am/luafontforge.am $(srcdir)/luatexdir/am/libluatex.am $(srcdir)/luatexdir/am/luaffi.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/luatexdir/am/luaharfbuzz.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(srcdir)/../../am/bin_links.am $(am__empty):
+$(srcdir)/../../am/dist_hook.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mfluadir/am/mflua.am $(srcdir)/mfluadir/am/mfluaotfcc.am $(srcdir)/mfluajitdir/am/mfluajit.am $(srcdir)/mplibdir/am/mplib.am $(srcdir)/pmpostdir/am/pmpost.am $(srcdir)/mplibdir/am/libmputil.am $(srcdir)/mplibdir/am/libmplib.am $(srcdir)/etexdir/am/etex.am $(srcdir)/ptexdir/am/ptex.am $(srcdir)/eptexdir/am/eptex.am $(srcdir)/uptexdir/am/uptex.am $(srcdir)/euptexdir/am/euptex.am $(srcdir)/pdftexdir/am/libpdftex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/pdftexdir/am/ttf2afm.am $(srcdir)/pdftexdir/am/pdftosrc.am $(srcdir)/luatexdir/am/luasocket.am $(srcdir)/luatexdir/am/luamisc.am $(srcdir)/luatexdir/am/libunilib.am $(srcdir)/luatexdir/am/luafontforge.am $(srcdir)/luatexdir/am/libluatex.am $(srcdir)/luatexdir/am/luaffi.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/luatexdir/am/luaharfbuzz.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(srcdir)/../../am/bin_links.am $(am__empty):
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
@@ -6439,6 +6974,541 @@
$(AM_V_AR)$(libmfluajit_a_AR) libmfluajit.a $(libmfluajit_a_OBJECTS) $(libmfluajit_a_LIBADD)
$(AM_V_at)$(RANLIB) libmfluajit.a
+libmfluajitotfcc.a: $(libmfluajitotfcc_a_OBJECTS) $(libmfluajitotfcc_a_DEPENDENCIES) $(EXTRA_libmfluajitotfcc_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libmfluajitotfcc.a
+ $(AM_V_AR)$(libmfluajitotfcc_a_AR) libmfluajitotfcc.a $(libmfluajitotfcc_a_OBJECTS) $(libmfluajitotfcc_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libmfluajitotfcc.a
+mfluadir/otfcc/dep/extern/emyg-dtoa/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/dep/extern/emyg-dtoa
+ @: > mfluadir/otfcc/dep/extern/emyg-dtoa/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)
+ @: > mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.$(OBJEXT): \
+ mfluadir/otfcc/dep/extern/emyg-dtoa/$(am__dirstamp) \
+ mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/dep/extern
+ @: > mfluadir/otfcc/dep/extern/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/dep/extern/$(DEPDIR)
+ @: > mfluadir/otfcc/dep/extern/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.$(OBJEXT): \
+ mfluadir/otfcc/dep/extern/$(am__dirstamp) \
+ mfluadir/otfcc/dep/extern/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.$(OBJEXT): \
+ mfluadir/otfcc/dep/extern/$(am__dirstamp) \
+ mfluadir/otfcc/dep/extern/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.$(OBJEXT): \
+ mfluadir/otfcc/dep/extern/$(am__dirstamp) \
+ mfluadir/otfcc/dep/extern/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/src/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/src
+ @: > mfluadir/otfcc/src/$(am__dirstamp)
+mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/src/$(DEPDIR)
+ @: > mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.$(OBJEXT): \
+ mfluadir/otfcc/src/$(am__dirstamp) \
+ mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.$(OBJEXT): \
+ mfluadir/otfcc/src/$(am__dirstamp) \
+ mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.$(OBJEXT): \
+ mfluadir/otfcc/src/$(am__dirstamp) \
+ mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.$(OBJEXT): \
+ mfluadir/otfcc/src/$(am__dirstamp) \
+ mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.$(OBJEXT): \
+ mfluadir/otfcc/src/$(am__dirstamp) \
+ mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/consolidate
+ @: > mfluadir/otfcc/lib/consolidate/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/consolidate/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/consolidate/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.$(OBJEXT): \
+ mfluadir/otfcc/lib/consolidate/$(am__dirstamp) \
+ mfluadir/otfcc/lib/consolidate/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/consolidate/otl
+ @: > mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.$(OBJEXT): \
+ mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.$(OBJEXT): \
+ mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.$(OBJEXT): \
+ mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.$(OBJEXT): \
+ mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.$(OBJEXT): \
+ mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.$(OBJEXT): \
+ mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.$(OBJEXT): \
+ mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.$(OBJEXT): \
+ mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.$(OBJEXT): \
+ mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.$(OBJEXT): \
+ mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.$(OBJEXT): \
+ mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support
+ @: > mfluadir/otfcc/lib/support/$(am__dirstamp)
+mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.$(OBJEXT): \
+ mfluadir/otfcc/lib/support/$(am__dirstamp) \
+ mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/unicodeconv/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/unicodeconv
+ @: > mfluadir/otfcc/lib/support/unicodeconv/$(am__dirstamp)
+mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.$(OBJEXT): \
+ mfluadir/otfcc/lib/support/unicodeconv/$(am__dirstamp) \
+ mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.$(OBJEXT): \
+ mfluadir/otfcc/lib/support/$(am__dirstamp) \
+ mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/buffer/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/buffer
+ @: > mfluadir/otfcc/lib/support/buffer/$(am__dirstamp)
+mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/buffer/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.$(OBJEXT): \
+ mfluadir/otfcc/lib/support/buffer/$(am__dirstamp) \
+ mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.$(OBJEXT): \
+ mfluadir/otfcc/lib/support/$(am__dirstamp) \
+ mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.$(OBJEXT): \
+ mfluadir/otfcc/lib/support/$(am__dirstamp) \
+ mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/sha1/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/sha1
+ @: > mfluadir/otfcc/lib/support/sha1/$(am__dirstamp)
+mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/sha1/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.$(OBJEXT): \
+ mfluadir/otfcc/lib/support/sha1/$(am__dirstamp) \
+ mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/ttinstr/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/ttinstr
+ @: > mfluadir/otfcc/lib/support/ttinstr/$(am__dirstamp)
+mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.$(OBJEXT): \
+ mfluadir/otfcc/lib/support/ttinstr/$(am__dirstamp) \
+ mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/base64/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/base64
+ @: > mfluadir/otfcc/lib/support/base64/$(am__dirstamp)
+mfluadir/otfcc/lib/support/base64/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/base64/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/support/base64/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.$(OBJEXT): \
+ mfluadir/otfcc/lib/support/base64/$(am__dirstamp) \
+ mfluadir/otfcc/lib/support/base64/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/json/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/json
+ @: > mfluadir/otfcc/lib/support/json/$(am__dirstamp)
+mfluadir/otfcc/lib/support/json/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/json/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/support/json/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.$(OBJEXT): \
+ mfluadir/otfcc/lib/support/json/$(am__dirstamp) \
+ mfluadir/otfcc/lib/support/json/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/aglfn/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/aglfn
+ @: > mfluadir/otfcc/lib/support/aglfn/$(am__dirstamp)
+mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.$(OBJEXT): \
+ mfluadir/otfcc/lib/support/aglfn/$(am__dirstamp) \
+ mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-writer/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/otf-writer
+ @: > mfluadir/otfcc/lib/otf-writer/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/otf-writer/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.$(OBJEXT): \
+ mfluadir/otfcc/lib/otf-writer/$(am__dirstamp) \
+ mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.$(OBJEXT): \
+ mfluadir/otfcc/lib/otf-writer/$(am__dirstamp) \
+ mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-reader/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/otf-reader
+ @: > mfluadir/otfcc/lib/otf-reader/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/otf-reader/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.$(OBJEXT): \
+ mfluadir/otfcc/lib/otf-reader/$(am__dirstamp) \
+ mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.$(OBJEXT): \
+ mfluadir/otfcc/lib/otf-reader/$(am__dirstamp) \
+ mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/vf/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/vf
+ @: > mfluadir/otfcc/lib/vf/$(am__dirstamp)
+mfluadir/otfcc/lib/vf/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/vf/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/vf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.$(OBJEXT): \
+ mfluadir/otfcc/lib/vf/$(am__dirstamp) \
+ mfluadir/otfcc/lib/vf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.$(OBJEXT): \
+ mfluadir/otfcc/lib/vf/$(am__dirstamp) \
+ mfluadir/otfcc/lib/vf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.$(OBJEXT): \
+ mfluadir/otfcc/lib/vf/$(am__dirstamp) \
+ mfluadir/otfcc/lib/vf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/logger/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/logger
+ @: > mfluadir/otfcc/lib/logger/$(am__dirstamp)
+mfluadir/otfcc/lib/logger/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/logger/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/logger/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.$(OBJEXT): \
+ mfluadir/otfcc/lib/logger/$(am__dirstamp) \
+ mfluadir/otfcc/lib/logger/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/bk/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/bk
+ @: > mfluadir/otfcc/lib/bk/$(am__dirstamp)
+mfluadir/otfcc/lib/bk/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/bk/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/bk/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.$(OBJEXT): \
+ mfluadir/otfcc/lib/bk/$(am__dirstamp) \
+ mfluadir/otfcc/lib/bk/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.$(OBJEXT): \
+ mfluadir/otfcc/lib/bk/$(am__dirstamp) \
+ mfluadir/otfcc/lib/bk/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/font/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/font
+ @: > mfluadir/otfcc/lib/font/$(am__dirstamp)
+mfluadir/otfcc/lib/font/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/font/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/font/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.$(OBJEXT): \
+ mfluadir/otfcc/lib/font/$(am__dirstamp) \
+ mfluadir/otfcc/lib/font/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.$(OBJEXT): \
+ mfluadir/otfcc/lib/font/$(am__dirstamp) \
+ mfluadir/otfcc/lib/font/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.$(OBJEXT): \
+ mfluadir/otfcc/lib/font/$(am__dirstamp) \
+ mfluadir/otfcc/lib/font/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/json-writer/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/json-writer
+ @: > mfluadir/otfcc/lib/json-writer/$(am__dirstamp)
+mfluadir/otfcc/lib/json-writer/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/json-writer/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/json-writer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.$(OBJEXT): \
+ mfluadir/otfcc/lib/json-writer/$(am__dirstamp) \
+ mfluadir/otfcc/lib/json-writer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/json-reader/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/json-reader
+ @: > mfluadir/otfcc/lib/json-reader/$(am__dirstamp)
+mfluadir/otfcc/lib/json-reader/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/json-reader/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/json-reader/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.$(OBJEXT): \
+ mfluadir/otfcc/lib/json-reader/$(am__dirstamp) \
+ mfluadir/otfcc/lib/json-reader/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/libcff
+ @: > mfluadir/otfcc/lib/libcff/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/libcff/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.$(OBJEXT): \
+ mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.$(OBJEXT): \
+ mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.$(OBJEXT): \
+ mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.$(OBJEXT): \
+ mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.$(OBJEXT): \
+ mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.$(OBJEXT): \
+ mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.$(OBJEXT): \
+ mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.$(OBJEXT): \
+ mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.$(OBJEXT): \
+ mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.$(OBJEXT): \
+ mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.$(OBJEXT): \
+ mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.$(OBJEXT): \
+ mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+ mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table
+ @: > mfluadir/otfcc/lib/table/$(am__dirstamp)
+mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table/meta
+ @: > mfluadir/otfcc/lib/table/meta/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table/meta/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/meta/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/meta/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/meta/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/meta/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/meta/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/vdmx/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table/vdmx
+ @: > mfluadir/otfcc/lib/table/vdmx/$(am__dirstamp)
+mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/vdmx/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/vdmx/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/glyf/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table/glyf
+ @: > mfluadir/otfcc/lib/table/glyf/$(am__dirstamp)
+mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/glyf/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/glyf/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/glyf/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table/otl
+ @: > mfluadir/otfcc/lib/table/otl/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table/otl/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table/otl/subtables
+ @: > mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table/otl/subtables/chaining
+ @: > mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)
+ @: > mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.$(OBJEXT): mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.$(OBJEXT): mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.$(OBJEXT): mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.$(OBJEXT): mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.$(OBJEXT): mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.$(OBJEXT): mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.$(OBJEXT): \
+ mfluadir/otfcc/lib/table/$(am__dirstamp) \
+ mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+
+libmfluaotfcc.a: $(libmfluaotfcc_a_OBJECTS) $(libmfluaotfcc_a_DEPENDENCIES) $(EXTRA_libmfluaotfcc_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libmfluaotfcc.a
+ $(AM_V_AR)$(libmfluaotfcc_a_AR) libmfluaotfcc.a $(libmfluaotfcc_a_OBJECTS) $(libmfluaotfcc_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libmfluaotfcc.a
+
libmplibbackends.a: $(libmplibbackends_a_OBJECTS) $(libmplibbackends_a_DEPENDENCIES) $(EXTRA_libmplibbackends_a_DEPENDENCIES)
$(AM_V_at)-rm -f libmplibbackends.a
$(AM_V_AR)$(libmplibbackends_a_AR) libmplibbackends.a $(libmplibbackends_a_OBJECTS) $(libmplibbackends_a_LIBADD)
@@ -7126,6 +8196,35 @@
-rm -f luatexdir/unilib/*.$(OBJEXT)
-rm -f luatexdir/utils/*.$(OBJEXT)
-rm -f mfluadir/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/dep/extern/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/dep/extern/emyg-dtoa/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/bk/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/consolidate/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/font/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/json-reader/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/json-writer/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/libcff/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/logger/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/otf-reader/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/otf-writer/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/support/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/support/aglfn/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/support/base64/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/support/buffer/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/support/json/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/support/sha1/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/support/ttinstr/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/support/unicodeconv/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/table/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/table/glyf/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/table/meta/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/table/otl/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/table/vdmx/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/lib/vf/*.$(OBJEXT)
+ -rm -f mfluadir/otfcc/src/*.$(OBJEXT)
-rm -f mfluajitdir/*.$(OBJEXT)
-rm -f mplibdir/*.$(OBJEXT)
-rm -f pdftexdir/*.$(OBJEXT)
@@ -7192,6 +8291,7 @@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmfluajit_a-mfluajit-pool.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmfluajit_a-mfluajit0.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmfluajit_a-mfluajitini.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmplibbackends_a-pngout.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmplibbackends_a-svgout.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmplibcore_a-mp.Po at am__quote@ # am--include-marker
@@ -7664,6 +8764,125 @@
@AMDEP_TRUE@@am__include@ @am__quote at mfluadir/$(DEPDIR)/libmfluajit_a-mfluac.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at mfluadir/$(DEPDIR)/mflua-mfluaextra.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at mfluadir/$(DEPDIR)/mflua_nowin-mfluaextra.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at mfluajitdir/$(DEPDIR)/mfluajit-mfluajitextra.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at mfluajitdir/$(DEPDIR)/mfluajit_nowin-mfluajitextra.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at mplibdir/$(DEPDIR)/libmputil_a-avl.Po at am__quote@ # am--include-marker
@@ -13051,6 +14270,1686 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluajit_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmfluajit_a-mfluajit-pool.obj `if test -f 'mfluajit-pool.c'; then $(CYGPATH_W) 'mfluajit-pool.c'; else $(CYGPATH_W) '$(srcdir)/mfluajit-pool.c'; fi`
+libmfluajitotfcc_a-libmfluajitotfcc.o: libmfluajitotfcc.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluajitotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluajitotfcc_a_CFLAGS) $(CFLAGS) -MT libmfluajitotfcc_a-libmfluajitotfcc.o -MD -MP -MF $(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Tpo -c -o libmfluajitotfcc_a-libmfluajitotfcc.o `test -f 'libmfluajitotfcc.c' || echo '$(srcdir)/'`libmfluajitotfcc.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Tpo $(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libmfluajitotfcc.c' object='libmfluajitotfcc_a-libmfluajitotfcc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluajitotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluajitotfcc_a_CFLAGS) $(CFLAGS) -c -o libmfluajitotfcc_a-libmfluajitotfcc.o `test -f 'libmfluajitotfcc.c' || echo '$(srcdir)/'`libmfluajitotfcc.c
+
+libmfluajitotfcc_a-libmfluajitotfcc.obj: libmfluajitotfcc.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluajitotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluajitotfcc_a_CFLAGS) $(CFLAGS) -MT libmfluajitotfcc_a-libmfluajitotfcc.obj -MD -MP -MF $(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Tpo -c -o libmfluajitotfcc_a-libmfluajitotfcc.obj `if test -f 'libmfluajitotfcc.c'; then $(CYGPATH_W) 'libmfluajitotfcc.c'; else $(CYGPATH_W) '$(srcdir)/libmfluajitotfcc.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Tpo $(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libmfluajitotfcc.c' object='libmfluajitotfcc_a-libmfluajitotfcc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluajitotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluajitotfcc_a_CFLAGS) $(CFLAGS) -c -o libmfluajitotfcc_a-libmfluajitotfcc.obj `if test -f 'libmfluajitotfcc.c'; then $(CYGPATH_W) 'libmfluajitotfcc.c'; else $(CYGPATH_W) '$(srcdir)/libmfluajitotfcc.c'; fi`
+
+mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.o: mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.o -MD -MP -MF mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Tpo -c -o mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.o `test -f 'mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Tpo mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c' object='mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.o `test -f 'mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c
+
+mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.obj: mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.obj -MD -MP -MF mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Tpo -c -o mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.obj `if test -f 'mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Tpo mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c' object='mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.obj `if test -f 'mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c'; fi`
+
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.o: mfluadir/otfcc/dep/extern/json.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.o -MD -MP -MF mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Tpo -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.o `test -f 'mfluadir/otfcc/dep/extern/json.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/json.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Tpo mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/dep/extern/json.c' object='mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.o `test -f 'mfluadir/otfcc/dep/extern/json.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/json.c
+
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.obj: mfluadir/otfcc/dep/extern/json.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.obj -MD -MP -MF mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Tpo -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.obj `if test -f 'mfluadir/otfcc/dep/extern/json.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/json.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/json.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Tpo mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/dep/extern/json.c' object='mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.obj `if test -f 'mfluadir/otfcc/dep/extern/json.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/json.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/json.c'; fi`
+
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.o: mfluadir/otfcc/dep/extern/json-builder.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.o -MD -MP -MF mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Tpo -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.o `test -f 'mfluadir/otfcc/dep/extern/json-builder.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/json-builder.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Tpo mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/dep/extern/json-builder.c' object='mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.o `test -f 'mfluadir/otfcc/dep/extern/json-builder.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/json-builder.c
+
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.obj: mfluadir/otfcc/dep/extern/json-builder.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.obj -MD -MP -MF mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Tpo -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.obj `if test -f 'mfluadir/otfcc/dep/extern/json-builder.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/json-builder.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/json-builder.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Tpo mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/dep/extern/json-builder.c' object='mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.obj `if test -f 'mfluadir/otfcc/dep/extern/json-builder.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/json-builder.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/json-builder.c'; fi`
+
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.o: mfluadir/otfcc/dep/extern/sds.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.o -MD -MP -MF mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Tpo -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.o `test -f 'mfluadir/otfcc/dep/extern/sds.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/sds.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Tpo mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/dep/extern/sds.c' object='mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.o `test -f 'mfluadir/otfcc/dep/extern/sds.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/sds.c
+
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.obj: mfluadir/otfcc/dep/extern/sds.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.obj -MD -MP -MF mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Tpo -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.obj `if test -f 'mfluadir/otfcc/dep/extern/sds.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/sds.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/sds.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Tpo mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/dep/extern/sds.c' object='mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.obj `if test -f 'mfluadir/otfcc/dep/extern/sds.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/sds.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/sds.c'; fi`
+
+mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.o: mfluadir/otfcc/src/luafunc.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.o -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.o `test -f 'mfluadir/otfcc/src/luafunc.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/luafunc.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/src/luafunc.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.o `test -f 'mfluadir/otfcc/src/luafunc.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/luafunc.c
+
+mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.obj: mfluadir/otfcc/src/luafunc.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.obj -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.obj `if test -f 'mfluadir/otfcc/src/luafunc.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/luafunc.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/luafunc.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/src/luafunc.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.obj `if test -f 'mfluadir/otfcc/src/luafunc.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/luafunc.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/luafunc.c'; fi`
+
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.o: mfluadir/otfcc/src/otfccbuild.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.o -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.o `test -f 'mfluadir/otfcc/src/otfccbuild.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/otfccbuild.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/src/otfccbuild.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.o `test -f 'mfluadir/otfcc/src/otfccbuild.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/otfccbuild.c
+
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.obj: mfluadir/otfcc/src/otfccbuild.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.obj -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.obj `if test -f 'mfluadir/otfcc/src/otfccbuild.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/otfccbuild.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/otfccbuild.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/src/otfccbuild.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.obj `if test -f 'mfluadir/otfcc/src/otfccbuild.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/otfccbuild.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/otfccbuild.c'; fi`
+
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.o: mfluadir/otfcc/src/otfccdump.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.o -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.o `test -f 'mfluadir/otfcc/src/otfccdump.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/otfccdump.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/src/otfccdump.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.o `test -f 'mfluadir/otfcc/src/otfccdump.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/otfccdump.c
+
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.obj: mfluadir/otfcc/src/otfccdump.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.obj -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.obj `if test -f 'mfluadir/otfcc/src/otfccdump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/otfccdump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/otfccdump.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/src/otfccdump.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.obj `if test -f 'mfluadir/otfcc/src/otfccdump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/otfccdump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/otfccdump.c'; fi`
+
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.o: mfluadir/otfcc/src/otfccdll.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.o -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.o `test -f 'mfluadir/otfcc/src/otfccdll.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/otfccdll.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/src/otfccdll.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.o `test -f 'mfluadir/otfcc/src/otfccdll.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/otfccdll.c
+
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.obj: mfluadir/otfcc/src/otfccdll.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.obj -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.obj `if test -f 'mfluadir/otfcc/src/otfccdll.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/otfccdll.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/otfccdll.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/src/otfccdll.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.obj `if test -f 'mfluadir/otfcc/src/otfccdll.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/otfccdll.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/otfccdll.c'; fi`
+
+mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.o: mfluadir/otfcc/src/stopwatch.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.o -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.o `test -f 'mfluadir/otfcc/src/stopwatch.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/stopwatch.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/src/stopwatch.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.o `test -f 'mfluadir/otfcc/src/stopwatch.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/stopwatch.c
+
+mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.obj: mfluadir/otfcc/src/stopwatch.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.obj -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.obj `if test -f 'mfluadir/otfcc/src/stopwatch.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/stopwatch.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/stopwatch.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/src/stopwatch.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.obj `if test -f 'mfluadir/otfcc/src/stopwatch.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/stopwatch.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/stopwatch.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.o: mfluadir/otfcc/lib/consolidate/consolidate.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Tpo -c -o mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.o `test -f 'mfluadir/otfcc/lib/consolidate/consolidate.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/consolidate.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Tpo mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/consolidate.c' object='mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.o `test -f 'mfluadir/otfcc/lib/consolidate/consolidate.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/consolidate.c
+
+mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.obj: mfluadir/otfcc/lib/consolidate/consolidate.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Tpo -c -o mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.obj `if test -f 'mfluadir/otfcc/lib/consolidate/consolidate.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/consolidate.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/consolidate.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Tpo mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/consolidate.c' object='mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.obj `if test -f 'mfluadir/otfcc/lib/consolidate/consolidate.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/consolidate.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/consolidate.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.o: mfluadir/otfcc/lib/consolidate/otl/gsub-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-single.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-single.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.obj: mfluadir/otfcc/lib/consolidate/otl/gsub-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-single.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-single.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-single.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.o: mfluadir/otfcc/lib/consolidate/otl/gpos-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gpos-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gpos-single.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gpos-single.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.obj: mfluadir/otfcc/lib/consolidate/otl/gpos-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gpos-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gpos-single.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gpos-single.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gpos-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gpos-single.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.o: mfluadir/otfcc/lib/consolidate/otl/chaining.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/chaining.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/chaining.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/chaining.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/chaining.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/chaining.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.obj: mfluadir/otfcc/lib/consolidate/otl/chaining.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/chaining.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/chaining.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/chaining.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/chaining.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/chaining.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/chaining.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/chaining.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.o: mfluadir/otfcc/lib/consolidate/otl/common.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/common.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/common.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/common.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/common.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/common.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.obj: mfluadir/otfcc/lib/consolidate/otl/common.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/common.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/common.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/common.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/common.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/common.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/common.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/common.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.o: mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.obj: mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.o: mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.obj: mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.o: mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.obj: mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.o: mfluadir/otfcc/lib/consolidate/otl/GDEF.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/GDEF.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/GDEF.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/GDEF.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/GDEF.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/GDEF.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.obj: mfluadir/otfcc/lib/consolidate/otl/GDEF.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/GDEF.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/GDEF.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/GDEF.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/GDEF.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/GDEF.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/GDEF.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/GDEF.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.o: mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.obj: mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.o: mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.obj: mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.o: mfluadir/otfcc/lib/consolidate/otl/mark.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/mark.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/mark.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/mark.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/mark.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/mark.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.obj: mfluadir/otfcc/lib/consolidate/otl/mark.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/mark.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/mark.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/mark.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/mark.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/mark.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/mark.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/mark.c'; fi`
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.o: mfluadir/otfcc/lib/support/options.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.o -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.o `test -f 'mfluadir/otfcc/lib/support/options.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/options.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/options.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.o `test -f 'mfluadir/otfcc/lib/support/options.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/options.c
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.obj: mfluadir/otfcc/lib/support/options.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.obj -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.obj `if test -f 'mfluadir/otfcc/lib/support/options.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/options.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/options.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/options.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.obj `if test -f 'mfluadir/otfcc/lib/support/options.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/options.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/options.c'; fi`
+
+mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.o: mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.o -MD -MP -MF mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Tpo -c -o mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.o `test -f 'mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Tpo mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c' object='mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.o `test -f 'mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c
+
+mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.obj: mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.obj -MD -MP -MF mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Tpo -c -o mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.obj `if test -f 'mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Tpo mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c' object='mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.obj `if test -f 'mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c'; fi`
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.o: mfluadir/otfcc/lib/support/handle.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.o -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.o `test -f 'mfluadir/otfcc/lib/support/handle.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/handle.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/handle.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.o `test -f 'mfluadir/otfcc/lib/support/handle.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/handle.c
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.obj: mfluadir/otfcc/lib/support/handle.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.obj -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.obj `if test -f 'mfluadir/otfcc/lib/support/handle.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/handle.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/handle.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/handle.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.obj `if test -f 'mfluadir/otfcc/lib/support/handle.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/handle.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/handle.c'; fi`
+
+mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.o: mfluadir/otfcc/lib/support/buffer/buffer.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.o -MD -MP -MF mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Tpo -c -o mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.o `test -f 'mfluadir/otfcc/lib/support/buffer/buffer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/buffer/buffer.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Tpo mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/buffer/buffer.c' object='mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.o `test -f 'mfluadir/otfcc/lib/support/buffer/buffer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/buffer/buffer.c
+
+mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.obj: mfluadir/otfcc/lib/support/buffer/buffer.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.obj -MD -MP -MF mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Tpo -c -o mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.obj `if test -f 'mfluadir/otfcc/lib/support/buffer/buffer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/buffer/buffer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/buffer/buffer.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Tpo mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/buffer/buffer.c' object='mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.obj `if test -f 'mfluadir/otfcc/lib/support/buffer/buffer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/buffer/buffer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/buffer/buffer.c'; fi`
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.o: mfluadir/otfcc/lib/support/primitives.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.o -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.o `test -f 'mfluadir/otfcc/lib/support/primitives.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/primitives.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/primitives.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.o `test -f 'mfluadir/otfcc/lib/support/primitives.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/primitives.c
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.obj: mfluadir/otfcc/lib/support/primitives.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.obj -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.obj `if test -f 'mfluadir/otfcc/lib/support/primitives.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/primitives.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/primitives.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/primitives.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.obj `if test -f 'mfluadir/otfcc/lib/support/primitives.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/primitives.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/primitives.c'; fi`
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.o: mfluadir/otfcc/lib/support/glyph-order.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.o -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.o `test -f 'mfluadir/otfcc/lib/support/glyph-order.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/glyph-order.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/glyph-order.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.o `test -f 'mfluadir/otfcc/lib/support/glyph-order.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/glyph-order.c
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.obj: mfluadir/otfcc/lib/support/glyph-order.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.obj -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.obj `if test -f 'mfluadir/otfcc/lib/support/glyph-order.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/glyph-order.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/glyph-order.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/glyph-order.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.obj `if test -f 'mfluadir/otfcc/lib/support/glyph-order.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/glyph-order.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/glyph-order.c'; fi`
+
+mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.o: mfluadir/otfcc/lib/support/sha1/sha1.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.o -MD -MP -MF mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Tpo -c -o mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.o `test -f 'mfluadir/otfcc/lib/support/sha1/sha1.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/sha1/sha1.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Tpo mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/sha1/sha1.c' object='mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.o `test -f 'mfluadir/otfcc/lib/support/sha1/sha1.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/sha1/sha1.c
+
+mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.obj: mfluadir/otfcc/lib/support/sha1/sha1.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.obj -MD -MP -MF mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Tpo -c -o mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.obj `if test -f 'mfluadir/otfcc/lib/support/sha1/sha1.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/sha1/sha1.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/sha1/sha1.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Tpo mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/sha1/sha1.c' object='mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.obj `if test -f 'mfluadir/otfcc/lib/support/sha1/sha1.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/sha1/sha1.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/sha1/sha1.c'; fi`
+
+mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.o: mfluadir/otfcc/lib/support/ttinstr/ttinstr.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.o -MD -MP -MF mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Tpo -c -o mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.o `test -f 'mfluadir/otfcc/lib/support/ttinstr/ttinstr.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/ttinstr/ttinstr.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Tpo mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/ttinstr/ttinstr.c' object='mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.o `test -f 'mfluadir/otfcc/lib/support/ttinstr/ttinstr.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/ttinstr/ttinstr.c
+
+mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.obj: mfluadir/otfcc/lib/support/ttinstr/ttinstr.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.obj -MD -MP -MF mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Tpo -c -o mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.obj `if test -f 'mfluadir/otfcc/lib/support/ttinstr/ttinstr.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/ttinstr/ttinstr.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/ttinstr/ttinstr.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Tpo mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/ttinstr/ttinstr.c' object='mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.obj `if test -f 'mfluadir/otfcc/lib/support/ttinstr/ttinstr.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/ttinstr/ttinstr.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/ttinstr/ttinstr.c'; fi`
+
+mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.o: mfluadir/otfcc/lib/support/base64/base64.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.o -MD -MP -MF mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Tpo -c -o mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.o `test -f 'mfluadir/otfcc/lib/support/base64/base64.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/base64/base64.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Tpo mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/base64/base64.c' object='mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.o `test -f 'mfluadir/otfcc/lib/support/base64/base64.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/base64/base64.c
+
+mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.obj: mfluadir/otfcc/lib/support/base64/base64.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.obj -MD -MP -MF mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Tpo -c -o mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.obj `if test -f 'mfluadir/otfcc/lib/support/base64/base64.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/base64/base64.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/base64/base64.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Tpo mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/base64/base64.c' object='mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.obj `if test -f 'mfluadir/otfcc/lib/support/base64/base64.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/base64/base64.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/base64/base64.c'; fi`
+
+mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.o: mfluadir/otfcc/lib/support/json/json-ident.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.o -MD -MP -MF mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Tpo -c -o mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.o `test -f 'mfluadir/otfcc/lib/support/json/json-ident.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/json/json-ident.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Tpo mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/json/json-ident.c' object='mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.o `test -f 'mfluadir/otfcc/lib/support/json/json-ident.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/json/json-ident.c
+
+mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.obj: mfluadir/otfcc/lib/support/json/json-ident.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.obj -MD -MP -MF mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Tpo -c -o mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.obj `if test -f 'mfluadir/otfcc/lib/support/json/json-ident.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/json/json-ident.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/json/json-ident.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Tpo mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/json/json-ident.c' object='mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.obj `if test -f 'mfluadir/otfcc/lib/support/json/json-ident.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/json/json-ident.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/json/json-ident.c'; fi`
+
+mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.o: mfluadir/otfcc/lib/support/aglfn/aglfn.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.o -MD -MP -MF mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Tpo -c -o mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.o `test -f 'mfluadir/otfcc/lib/support/aglfn/aglfn.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/aglfn/aglfn.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Tpo mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/aglfn/aglfn.c' object='mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.o `test -f 'mfluadir/otfcc/lib/support/aglfn/aglfn.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/aglfn/aglfn.c
+
+mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.obj: mfluadir/otfcc/lib/support/aglfn/aglfn.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.obj -MD -MP -MF mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Tpo -c -o mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.obj `if test -f 'mfluadir/otfcc/lib/support/aglfn/aglfn.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/aglfn/aglfn.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/aglfn/aglfn.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Tpo mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/support/aglfn/aglfn.c' object='mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.obj `if test -f 'mfluadir/otfcc/lib/support/aglfn/aglfn.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/aglfn/aglfn.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/aglfn/aglfn.c'; fi`
+
+mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.o: mfluadir/otfcc/lib/otf-writer/stat.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.o -MD -MP -MF mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Tpo -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.o `test -f 'mfluadir/otfcc/lib/otf-writer/stat.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-writer/stat.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Tpo mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/otf-writer/stat.c' object='mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.o `test -f 'mfluadir/otfcc/lib/otf-writer/stat.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-writer/stat.c
+
+mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.obj: mfluadir/otfcc/lib/otf-writer/stat.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.obj -MD -MP -MF mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Tpo -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.obj `if test -f 'mfluadir/otfcc/lib/otf-writer/stat.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-writer/stat.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-writer/stat.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Tpo mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/otf-writer/stat.c' object='mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.obj `if test -f 'mfluadir/otfcc/lib/otf-writer/stat.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-writer/stat.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-writer/stat.c'; fi`
+
+mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.o: mfluadir/otfcc/lib/otf-writer/otf-writer.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.o -MD -MP -MF mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Tpo -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.o `test -f 'mfluadir/otfcc/lib/otf-writer/otf-writer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-writer/otf-writer.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Tpo mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/otf-writer/otf-writer.c' object='mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.o `test -f 'mfluadir/otfcc/lib/otf-writer/otf-writer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-writer/otf-writer.c
+
+mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.obj: mfluadir/otfcc/lib/otf-writer/otf-writer.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.obj -MD -MP -MF mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Tpo -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.obj `if test -f 'mfluadir/otfcc/lib/otf-writer/otf-writer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-writer/otf-writer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-writer/otf-writer.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Tpo mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/otf-writer/otf-writer.c' object='mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.obj `if test -f 'mfluadir/otfcc/lib/otf-writer/otf-writer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-writer/otf-writer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-writer/otf-writer.c'; fi`
+
+mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.o: mfluadir/otfcc/lib/otf-reader/otf-reader.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.o -MD -MP -MF mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Tpo -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.o `test -f 'mfluadir/otfcc/lib/otf-reader/otf-reader.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-reader/otf-reader.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Tpo mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/otf-reader/otf-reader.c' object='mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.o `test -f 'mfluadir/otfcc/lib/otf-reader/otf-reader.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-reader/otf-reader.c
+
+mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.obj: mfluadir/otfcc/lib/otf-reader/otf-reader.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.obj -MD -MP -MF mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Tpo -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.obj `if test -f 'mfluadir/otfcc/lib/otf-reader/otf-reader.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-reader/otf-reader.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-reader/otf-reader.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Tpo mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/otf-reader/otf-reader.c' object='mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.obj `if test -f 'mfluadir/otfcc/lib/otf-reader/otf-reader.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-reader/otf-reader.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-reader/otf-reader.c'; fi`
+
+mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.o: mfluadir/otfcc/lib/otf-reader/unconsolidate.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.o -MD -MP -MF mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Tpo -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.o `test -f 'mfluadir/otfcc/lib/otf-reader/unconsolidate.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-reader/unconsolidate.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Tpo mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/otf-reader/unconsolidate.c' object='mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.o `test -f 'mfluadir/otfcc/lib/otf-reader/unconsolidate.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-reader/unconsolidate.c
+
+mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.obj: mfluadir/otfcc/lib/otf-reader/unconsolidate.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.obj -MD -MP -MF mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Tpo -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.obj `if test -f 'mfluadir/otfcc/lib/otf-reader/unconsolidate.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-reader/unconsolidate.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-reader/unconsolidate.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Tpo mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/otf-reader/unconsolidate.c' object='mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.obj `if test -f 'mfluadir/otfcc/lib/otf-reader/unconsolidate.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-reader/unconsolidate.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-reader/unconsolidate.c'; fi`
+
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.o: mfluadir/otfcc/lib/vf/axis.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.o -MD -MP -MF mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Tpo -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.o `test -f 'mfluadir/otfcc/lib/vf/axis.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/vf/axis.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Tpo mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/vf/axis.c' object='mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.o `test -f 'mfluadir/otfcc/lib/vf/axis.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/vf/axis.c
+
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.obj: mfluadir/otfcc/lib/vf/axis.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.obj -MD -MP -MF mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Tpo -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.obj `if test -f 'mfluadir/otfcc/lib/vf/axis.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/vf/axis.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/vf/axis.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Tpo mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/vf/axis.c' object='mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.obj `if test -f 'mfluadir/otfcc/lib/vf/axis.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/vf/axis.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/vf/axis.c'; fi`
+
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.o: mfluadir/otfcc/lib/vf/region.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.o -MD -MP -MF mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Tpo -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.o `test -f 'mfluadir/otfcc/lib/vf/region.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/vf/region.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Tpo mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/vf/region.c' object='mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.o `test -f 'mfluadir/otfcc/lib/vf/region.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/vf/region.c
+
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.obj: mfluadir/otfcc/lib/vf/region.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.obj -MD -MP -MF mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Tpo -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.obj `if test -f 'mfluadir/otfcc/lib/vf/region.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/vf/region.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/vf/region.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Tpo mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/vf/region.c' object='mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.obj `if test -f 'mfluadir/otfcc/lib/vf/region.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/vf/region.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/vf/region.c'; fi`
+
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.o: mfluadir/otfcc/lib/vf/vq.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.o -MD -MP -MF mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Tpo -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.o `test -f 'mfluadir/otfcc/lib/vf/vq.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/vf/vq.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Tpo mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/vf/vq.c' object='mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.o `test -f 'mfluadir/otfcc/lib/vf/vq.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/vf/vq.c
+
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.obj: mfluadir/otfcc/lib/vf/vq.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.obj -MD -MP -MF mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Tpo -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.obj `if test -f 'mfluadir/otfcc/lib/vf/vq.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/vf/vq.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/vf/vq.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Tpo mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/vf/vq.c' object='mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.obj `if test -f 'mfluadir/otfcc/lib/vf/vq.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/vf/vq.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/vf/vq.c'; fi`
+
+mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.o: mfluadir/otfcc/lib/logger/logger.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.o -MD -MP -MF mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Tpo -c -o mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.o `test -f 'mfluadir/otfcc/lib/logger/logger.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/logger/logger.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Tpo mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/logger/logger.c' object='mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.o `test -f 'mfluadir/otfcc/lib/logger/logger.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/logger/logger.c
+
+mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.obj: mfluadir/otfcc/lib/logger/logger.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.obj -MD -MP -MF mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Tpo -c -o mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.obj `if test -f 'mfluadir/otfcc/lib/logger/logger.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/logger/logger.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/logger/logger.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Tpo mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/logger/logger.c' object='mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.obj `if test -f 'mfluadir/otfcc/lib/logger/logger.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/logger/logger.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/logger/logger.c'; fi`
+
+mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.o: mfluadir/otfcc/lib/bk/bkgraph.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.o -MD -MP -MF mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Tpo -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.o `test -f 'mfluadir/otfcc/lib/bk/bkgraph.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/bk/bkgraph.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Tpo mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/bk/bkgraph.c' object='mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.o `test -f 'mfluadir/otfcc/lib/bk/bkgraph.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/bk/bkgraph.c
+
+mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.obj: mfluadir/otfcc/lib/bk/bkgraph.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.obj -MD -MP -MF mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Tpo -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.obj `if test -f 'mfluadir/otfcc/lib/bk/bkgraph.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/bk/bkgraph.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/bk/bkgraph.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Tpo mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/bk/bkgraph.c' object='mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.obj `if test -f 'mfluadir/otfcc/lib/bk/bkgraph.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/bk/bkgraph.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/bk/bkgraph.c'; fi`
+
+mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.o: mfluadir/otfcc/lib/bk/bkblock.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.o -MD -MP -MF mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Tpo -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.o `test -f 'mfluadir/otfcc/lib/bk/bkblock.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/bk/bkblock.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Tpo mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/bk/bkblock.c' object='mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.o `test -f 'mfluadir/otfcc/lib/bk/bkblock.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/bk/bkblock.c
+
+mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.obj: mfluadir/otfcc/lib/bk/bkblock.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.obj -MD -MP -MF mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Tpo -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.obj `if test -f 'mfluadir/otfcc/lib/bk/bkblock.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/bk/bkblock.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/bk/bkblock.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Tpo mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/bk/bkblock.c' object='mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.obj `if test -f 'mfluadir/otfcc/lib/bk/bkblock.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/bk/bkblock.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/bk/bkblock.c'; fi`
+
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.o: mfluadir/otfcc/lib/font/caryll-font.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.o -MD -MP -MF mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Tpo -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.o `test -f 'mfluadir/otfcc/lib/font/caryll-font.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/font/caryll-font.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Tpo mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/font/caryll-font.c' object='mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.o `test -f 'mfluadir/otfcc/lib/font/caryll-font.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/font/caryll-font.c
+
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.obj: mfluadir/otfcc/lib/font/caryll-font.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.obj -MD -MP -MF mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Tpo -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.obj `if test -f 'mfluadir/otfcc/lib/font/caryll-font.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/font/caryll-font.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/font/caryll-font.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Tpo mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/font/caryll-font.c' object='mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.obj `if test -f 'mfluadir/otfcc/lib/font/caryll-font.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/font/caryll-font.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/font/caryll-font.c'; fi`
+
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.o: mfluadir/otfcc/lib/font/caryll-sfnt-builder.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.o -MD -MP -MF mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Tpo -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.o `test -f 'mfluadir/otfcc/lib/font/caryll-sfnt-builder.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/font/caryll-sfnt-builder.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Tpo mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/font/caryll-sfnt-builder.c' object='mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.o `test -f 'mfluadir/otfcc/lib/font/caryll-sfnt-builder.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/font/caryll-sfnt-builder.c
+
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.obj: mfluadir/otfcc/lib/font/caryll-sfnt-builder.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.obj -MD -MP -MF mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Tpo -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.obj `if test -f 'mfluadir/otfcc/lib/font/caryll-sfnt-builder.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/font/caryll-sfnt-builder.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/font/caryll-sfnt-builder.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Tpo mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/font/caryll-sfnt-builder.c' object='mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.obj `if test -f 'mfluadir/otfcc/lib/font/caryll-sfnt-builder.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/font/caryll-sfnt-builder.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/font/caryll-sfnt-builder.c'; fi`
+
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.o: mfluadir/otfcc/lib/font/caryll-sfnt.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.o -MD -MP -MF mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Tpo -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.o `test -f 'mfluadir/otfcc/lib/font/caryll-sfnt.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/font/caryll-sfnt.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Tpo mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/font/caryll-sfnt.c' object='mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.o `test -f 'mfluadir/otfcc/lib/font/caryll-sfnt.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/font/caryll-sfnt.c
+
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.obj: mfluadir/otfcc/lib/font/caryll-sfnt.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.obj -MD -MP -MF mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Tpo -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.obj `if test -f 'mfluadir/otfcc/lib/font/caryll-sfnt.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/font/caryll-sfnt.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/font/caryll-sfnt.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Tpo mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/font/caryll-sfnt.c' object='mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.obj `if test -f 'mfluadir/otfcc/lib/font/caryll-sfnt.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/font/caryll-sfnt.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/font/caryll-sfnt.c'; fi`
+
+mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.o: mfluadir/otfcc/lib/json-writer/json-writer.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.o -MD -MP -MF mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Tpo -c -o mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.o `test -f 'mfluadir/otfcc/lib/json-writer/json-writer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/json-writer/json-writer.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Tpo mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/json-writer/json-writer.c' object='mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.o `test -f 'mfluadir/otfcc/lib/json-writer/json-writer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/json-writer/json-writer.c
+
+mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.obj: mfluadir/otfcc/lib/json-writer/json-writer.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.obj -MD -MP -MF mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Tpo -c -o mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.obj `if test -f 'mfluadir/otfcc/lib/json-writer/json-writer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/json-writer/json-writer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/json-writer/json-writer.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Tpo mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/json-writer/json-writer.c' object='mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.obj `if test -f 'mfluadir/otfcc/lib/json-writer/json-writer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/json-writer/json-writer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/json-writer/json-writer.c'; fi`
+
+mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.o: mfluadir/otfcc/lib/json-reader/json-reader.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.o -MD -MP -MF mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Tpo -c -o mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.o `test -f 'mfluadir/otfcc/lib/json-reader/json-reader.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/json-reader/json-reader.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Tpo mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/json-reader/json-reader.c' object='mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.o `test -f 'mfluadir/otfcc/lib/json-reader/json-reader.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/json-reader/json-reader.c
+
+mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.obj: mfluadir/otfcc/lib/json-reader/json-reader.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.obj -MD -MP -MF mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Tpo -c -o mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.obj `if test -f 'mfluadir/otfcc/lib/json-reader/json-reader.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/json-reader/json-reader.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/json-reader/json-reader.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Tpo mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/json-reader/json-reader.c' object='mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.obj `if test -f 'mfluadir/otfcc/lib/json-reader/json-reader.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/json-reader/json-reader.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/json-reader/json-reader.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.o: mfluadir/otfcc/lib/libcff/cff-string.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.o `test -f 'mfluadir/otfcc/lib/libcff/cff-string.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-string.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-string.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.o `test -f 'mfluadir/otfcc/lib/libcff/cff-string.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-string.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.obj: mfluadir/otfcc/lib/libcff/cff-string.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-string.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-string.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-string.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-string.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-string.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-string.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-string.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.o: mfluadir/otfcc/lib/libcff/cff-opmean.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.o `test -f 'mfluadir/otfcc/lib/libcff/cff-opmean.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-opmean.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-opmean.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.o `test -f 'mfluadir/otfcc/lib/libcff/cff-opmean.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-opmean.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.obj: mfluadir/otfcc/lib/libcff/cff-opmean.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-opmean.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-opmean.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-opmean.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-opmean.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-opmean.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-opmean.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-opmean.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.o: mfluadir/otfcc/lib/libcff/charstring-il.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.o `test -f 'mfluadir/otfcc/lib/libcff/charstring-il.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/charstring-il.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/charstring-il.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.o `test -f 'mfluadir/otfcc/lib/libcff/charstring-il.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/charstring-il.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.obj: mfluadir/otfcc/lib/libcff/charstring-il.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.obj `if test -f 'mfluadir/otfcc/lib/libcff/charstring-il.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/charstring-il.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/charstring-il.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/charstring-il.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.obj `if test -f 'mfluadir/otfcc/lib/libcff/charstring-il.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/charstring-il.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/charstring-il.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.o: mfluadir/otfcc/lib/libcff/cff-fdselect.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.o `test -f 'mfluadir/otfcc/lib/libcff/cff-fdselect.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-fdselect.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-fdselect.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.o `test -f 'mfluadir/otfcc/lib/libcff/cff-fdselect.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-fdselect.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.obj: mfluadir/otfcc/lib/libcff/cff-fdselect.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-fdselect.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-fdselect.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-fdselect.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-fdselect.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-fdselect.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-fdselect.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-fdselect.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.o: mfluadir/otfcc/lib/libcff/cff-parser.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.o `test -f 'mfluadir/otfcc/lib/libcff/cff-parser.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-parser.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-parser.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.o `test -f 'mfluadir/otfcc/lib/libcff/cff-parser.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-parser.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.obj: mfluadir/otfcc/lib/libcff/cff-parser.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-parser.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-parser.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-parser.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-parser.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-parser.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-parser.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-parser.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.o: mfluadir/otfcc/lib/libcff/subr.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.o `test -f 'mfluadir/otfcc/lib/libcff/subr.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/subr.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/subr.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.o `test -f 'mfluadir/otfcc/lib/libcff/subr.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/subr.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.obj: mfluadir/otfcc/lib/libcff/subr.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.obj `if test -f 'mfluadir/otfcc/lib/libcff/subr.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/subr.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/subr.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/subr.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.obj `if test -f 'mfluadir/otfcc/lib/libcff/subr.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/subr.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/subr.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.o: mfluadir/otfcc/lib/libcff/cff-charset.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.o `test -f 'mfluadir/otfcc/lib/libcff/cff-charset.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-charset.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-charset.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.o `test -f 'mfluadir/otfcc/lib/libcff/cff-charset.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-charset.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.obj: mfluadir/otfcc/lib/libcff/cff-charset.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-charset.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-charset.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-charset.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-charset.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-charset.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-charset.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-charset.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.o: mfluadir/otfcc/lib/libcff/cff-index.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.o `test -f 'mfluadir/otfcc/lib/libcff/cff-index.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-index.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-index.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.o `test -f 'mfluadir/otfcc/lib/libcff/cff-index.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-index.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.obj: mfluadir/otfcc/lib/libcff/cff-index.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-index.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-index.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-index.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-index.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-index.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-index.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-index.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.o: mfluadir/otfcc/lib/libcff/cff-codecs.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.o `test -f 'mfluadir/otfcc/lib/libcff/cff-codecs.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-codecs.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-codecs.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.o `test -f 'mfluadir/otfcc/lib/libcff/cff-codecs.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-codecs.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.obj: mfluadir/otfcc/lib/libcff/cff-codecs.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-codecs.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-codecs.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-codecs.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-codecs.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-codecs.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-codecs.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-codecs.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.o: mfluadir/otfcc/lib/libcff/cff-writer.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.o `test -f 'mfluadir/otfcc/lib/libcff/cff-writer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-writer.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-writer.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.o `test -f 'mfluadir/otfcc/lib/libcff/cff-writer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-writer.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.obj: mfluadir/otfcc/lib/libcff/cff-writer.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-writer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-writer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-writer.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-writer.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-writer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-writer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-writer.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.o: mfluadir/otfcc/lib/libcff/cff-dict.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.o `test -f 'mfluadir/otfcc/lib/libcff/cff-dict.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-dict.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-dict.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.o `test -f 'mfluadir/otfcc/lib/libcff/cff-dict.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-dict.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.obj: mfluadir/otfcc/lib/libcff/cff-dict.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-dict.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-dict.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-dict.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-dict.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-dict.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-dict.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-dict.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.o: mfluadir/otfcc/lib/libcff/cff-value.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.o `test -f 'mfluadir/otfcc/lib/libcff/cff-value.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-value.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-value.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.o `test -f 'mfluadir/otfcc/lib/libcff/cff-value.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-value.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.obj: mfluadir/otfcc/lib/libcff/cff-value.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-value.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-value.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-value.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-value.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-value.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-value.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-value.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.o: mfluadir/otfcc/lib/table/vhea.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.o `test -f 'mfluadir/otfcc/lib/table/vhea.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vhea.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/vhea.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.o `test -f 'mfluadir/otfcc/lib/table/vhea.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vhea.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.obj: mfluadir/otfcc/lib/table/vhea.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.obj `if test -f 'mfluadir/otfcc/lib/table/vhea.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vhea.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vhea.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/vhea.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.obj `if test -f 'mfluadir/otfcc/lib/table/vhea.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vhea.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vhea.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.o: mfluadir/otfcc/lib/table/fvar.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.o `test -f 'mfluadir/otfcc/lib/table/fvar.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/fvar.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/fvar.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.o `test -f 'mfluadir/otfcc/lib/table/fvar.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/fvar.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.obj: mfluadir/otfcc/lib/table/fvar.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.obj `if test -f 'mfluadir/otfcc/lib/table/fvar.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/fvar.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/fvar.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/fvar.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.obj `if test -f 'mfluadir/otfcc/lib/table/fvar.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/fvar.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/fvar.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.o: mfluadir/otfcc/lib/table/cmap.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.o `test -f 'mfluadir/otfcc/lib/table/cmap.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/cmap.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/cmap.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.o `test -f 'mfluadir/otfcc/lib/table/cmap.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/cmap.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.obj: mfluadir/otfcc/lib/table/cmap.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.obj `if test -f 'mfluadir/otfcc/lib/table/cmap.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/cmap.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/cmap.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/cmap.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.obj `if test -f 'mfluadir/otfcc/lib/table/cmap.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/cmap.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/cmap.c'; fi`
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.o: mfluadir/otfcc/lib/table/meta/read.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.o -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/meta/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/read.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/read.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/meta/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/read.c
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.obj: mfluadir/otfcc/lib/table/meta/read.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.obj -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/meta/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/read.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/read.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/meta/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/read.c'; fi`
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.o: mfluadir/otfcc/lib/table/meta/type.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.o -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.o `test -f 'mfluadir/otfcc/lib/table/meta/type.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/type.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/type.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.o `test -f 'mfluadir/otfcc/lib/table/meta/type.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/type.c
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.obj: mfluadir/otfcc/lib/table/meta/type.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.obj -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.obj `if test -f 'mfluadir/otfcc/lib/table/meta/type.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/type.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/type.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/type.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.obj `if test -f 'mfluadir/otfcc/lib/table/meta/type.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/type.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/type.c'; fi`
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.o: mfluadir/otfcc/lib/table/meta/build.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.o -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/meta/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/build.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/build.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/meta/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/build.c
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.obj: mfluadir/otfcc/lib/table/meta/build.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.obj -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/meta/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/build.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/build.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/meta/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/build.c'; fi`
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.o: mfluadir/otfcc/lib/table/meta/parse.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.o -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.o `test -f 'mfluadir/otfcc/lib/table/meta/parse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/parse.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/parse.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.o `test -f 'mfluadir/otfcc/lib/table/meta/parse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/parse.c
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.obj: mfluadir/otfcc/lib/table/meta/parse.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.obj -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.obj `if test -f 'mfluadir/otfcc/lib/table/meta/parse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/parse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/parse.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/parse.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.obj `if test -f 'mfluadir/otfcc/lib/table/meta/parse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/parse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/parse.c'; fi`
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.o: mfluadir/otfcc/lib/table/meta/dump.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.o -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.o `test -f 'mfluadir/otfcc/lib/table/meta/dump.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/dump.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/dump.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.o `test -f 'mfluadir/otfcc/lib/table/meta/dump.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/dump.c
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.obj: mfluadir/otfcc/lib/table/meta/dump.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.obj -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.obj `if test -f 'mfluadir/otfcc/lib/table/meta/dump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/dump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/dump.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/dump.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.obj `if test -f 'mfluadir/otfcc/lib/table/meta/dump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/dump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/dump.c'; fi`
+
+mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.o: mfluadir/otfcc/lib/table/vdmx/type.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.o -MD -MP -MF mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Tpo -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.o `test -f 'mfluadir/otfcc/lib/table/vdmx/type.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vdmx/type.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Tpo mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/vdmx/type.c' object='mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.o `test -f 'mfluadir/otfcc/lib/table/vdmx/type.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vdmx/type.c
+
+mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.obj: mfluadir/otfcc/lib/table/vdmx/type.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.obj -MD -MP -MF mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Tpo -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.obj `if test -f 'mfluadir/otfcc/lib/table/vdmx/type.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vdmx/type.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vdmx/type.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Tpo mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/vdmx/type.c' object='mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.obj `if test -f 'mfluadir/otfcc/lib/table/vdmx/type.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vdmx/type.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vdmx/type.c'; fi`
+
+mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.o: mfluadir/otfcc/lib/table/vdmx/funcs.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.o -MD -MP -MF mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Tpo -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.o `test -f 'mfluadir/otfcc/lib/table/vdmx/funcs.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vdmx/funcs.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Tpo mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/vdmx/funcs.c' object='mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.o `test -f 'mfluadir/otfcc/lib/table/vdmx/funcs.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vdmx/funcs.c
+
+mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.obj: mfluadir/otfcc/lib/table/vdmx/funcs.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.obj -MD -MP -MF mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Tpo -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.obj `if test -f 'mfluadir/otfcc/lib/table/vdmx/funcs.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vdmx/funcs.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vdmx/funcs.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Tpo mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/vdmx/funcs.c' object='mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.obj `if test -f 'mfluadir/otfcc/lib/table/vdmx/funcs.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vdmx/funcs.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vdmx/funcs.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.o: mfluadir/otfcc/lib/table/hhea.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.o `test -f 'mfluadir/otfcc/lib/table/hhea.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/hhea.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/hhea.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.o `test -f 'mfluadir/otfcc/lib/table/hhea.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/hhea.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.obj: mfluadir/otfcc/lib/table/hhea.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.obj `if test -f 'mfluadir/otfcc/lib/table/hhea.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/hhea.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/hhea.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/hhea.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.obj `if test -f 'mfluadir/otfcc/lib/table/hhea.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/hhea.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/hhea.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.o: mfluadir/otfcc/lib/table/post.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.o `test -f 'mfluadir/otfcc/lib/table/post.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/post.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/post.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.o `test -f 'mfluadir/otfcc/lib/table/post.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/post.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.obj: mfluadir/otfcc/lib/table/post.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.obj `if test -f 'mfluadir/otfcc/lib/table/post.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/post.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/post.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/post.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.obj `if test -f 'mfluadir/otfcc/lib/table/post.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/post.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/post.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.o: mfluadir/otfcc/lib/table/cvt.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.o `test -f 'mfluadir/otfcc/lib/table/cvt.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/cvt.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/cvt.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.o `test -f 'mfluadir/otfcc/lib/table/cvt.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/cvt.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.obj: mfluadir/otfcc/lib/table/cvt.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.obj `if test -f 'mfluadir/otfcc/lib/table/cvt.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/cvt.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/cvt.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/cvt.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.obj `if test -f 'mfluadir/otfcc/lib/table/cvt.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/cvt.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/cvt.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.o: mfluadir/otfcc/lib/table/CFF.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.o `test -f 'mfluadir/otfcc/lib/table/CFF.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/CFF.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/CFF.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.o `test -f 'mfluadir/otfcc/lib/table/CFF.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/CFF.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.obj: mfluadir/otfcc/lib/table/CFF.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.obj `if test -f 'mfluadir/otfcc/lib/table/CFF.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/CFF.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/CFF.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/CFF.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.obj `if test -f 'mfluadir/otfcc/lib/table/CFF.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/CFF.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/CFF.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.o: mfluadir/otfcc/lib/table/gasp.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.o `test -f 'mfluadir/otfcc/lib/table/gasp.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/gasp.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/gasp.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.o `test -f 'mfluadir/otfcc/lib/table/gasp.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/gasp.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.obj: mfluadir/otfcc/lib/table/gasp.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.obj `if test -f 'mfluadir/otfcc/lib/table/gasp.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/gasp.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/gasp.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/gasp.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.obj `if test -f 'mfluadir/otfcc/lib/table/gasp.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/gasp.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/gasp.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.o: mfluadir/otfcc/lib/table/LTSH.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.o `test -f 'mfluadir/otfcc/lib/table/LTSH.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/LTSH.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/LTSH.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.o `test -f 'mfluadir/otfcc/lib/table/LTSH.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/LTSH.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.obj: mfluadir/otfcc/lib/table/LTSH.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.obj `if test -f 'mfluadir/otfcc/lib/table/LTSH.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/LTSH.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/LTSH.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/LTSH.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.obj `if test -f 'mfluadir/otfcc/lib/table/LTSH.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/LTSH.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/LTSH.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.o: mfluadir/otfcc/lib/table/maxp.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.o `test -f 'mfluadir/otfcc/lib/table/maxp.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/maxp.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/maxp.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.o `test -f 'mfluadir/otfcc/lib/table/maxp.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/maxp.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.obj: mfluadir/otfcc/lib/table/maxp.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.obj `if test -f 'mfluadir/otfcc/lib/table/maxp.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/maxp.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/maxp.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/maxp.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.obj `if test -f 'mfluadir/otfcc/lib/table/maxp.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/maxp.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/maxp.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.o: mfluadir/otfcc/lib/table/COLR.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.o `test -f 'mfluadir/otfcc/lib/table/COLR.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/COLR.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/COLR.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.o `test -f 'mfluadir/otfcc/lib/table/COLR.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/COLR.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.obj: mfluadir/otfcc/lib/table/COLR.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.obj `if test -f 'mfluadir/otfcc/lib/table/COLR.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/COLR.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/COLR.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/COLR.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.obj `if test -f 'mfluadir/otfcc/lib/table/COLR.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/COLR.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/COLR.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.o: mfluadir/otfcc/lib/table/vmtx.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.o `test -f 'mfluadir/otfcc/lib/table/vmtx.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vmtx.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/vmtx.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.o `test -f 'mfluadir/otfcc/lib/table/vmtx.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vmtx.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.obj: mfluadir/otfcc/lib/table/vmtx.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.obj `if test -f 'mfluadir/otfcc/lib/table/vmtx.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vmtx.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vmtx.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/vmtx.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.obj `if test -f 'mfluadir/otfcc/lib/table/vmtx.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vmtx.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vmtx.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.o: mfluadir/otfcc/lib/table/fpgm-prep.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.o `test -f 'mfluadir/otfcc/lib/table/fpgm-prep.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/fpgm-prep.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/fpgm-prep.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.o `test -f 'mfluadir/otfcc/lib/table/fpgm-prep.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/fpgm-prep.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.obj: mfluadir/otfcc/lib/table/fpgm-prep.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.obj `if test -f 'mfluadir/otfcc/lib/table/fpgm-prep.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/fpgm-prep.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/fpgm-prep.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/fpgm-prep.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.obj `if test -f 'mfluadir/otfcc/lib/table/fpgm-prep.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/fpgm-prep.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/fpgm-prep.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.o: mfluadir/otfcc/lib/table/head.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.o `test -f 'mfluadir/otfcc/lib/table/head.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/head.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/head.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.o `test -f 'mfluadir/otfcc/lib/table/head.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/head.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.obj: mfluadir/otfcc/lib/table/head.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.obj `if test -f 'mfluadir/otfcc/lib/table/head.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/head.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/head.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/head.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.obj `if test -f 'mfluadir/otfcc/lib/table/head.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/head.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/head.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.o: mfluadir/otfcc/lib/table/CPAL.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.o `test -f 'mfluadir/otfcc/lib/table/CPAL.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/CPAL.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/CPAL.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.o `test -f 'mfluadir/otfcc/lib/table/CPAL.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/CPAL.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.obj: mfluadir/otfcc/lib/table/CPAL.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.obj `if test -f 'mfluadir/otfcc/lib/table/CPAL.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/CPAL.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/CPAL.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/CPAL.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.obj `if test -f 'mfluadir/otfcc/lib/table/CPAL.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/CPAL.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/CPAL.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.o: mfluadir/otfcc/lib/table/_TSI.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.o `test -f 'mfluadir/otfcc/lib/table/_TSI.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/_TSI.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/_TSI.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.o `test -f 'mfluadir/otfcc/lib/table/_TSI.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/_TSI.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.obj: mfluadir/otfcc/lib/table/_TSI.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.obj `if test -f 'mfluadir/otfcc/lib/table/_TSI.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/_TSI.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/_TSI.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/_TSI.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.obj `if test -f 'mfluadir/otfcc/lib/table/_TSI.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/_TSI.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/_TSI.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.o: mfluadir/otfcc/lib/table/name.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.o `test -f 'mfluadir/otfcc/lib/table/name.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/name.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/name.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.o `test -f 'mfluadir/otfcc/lib/table/name.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/name.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.obj: mfluadir/otfcc/lib/table/name.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.obj `if test -f 'mfluadir/otfcc/lib/table/name.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/name.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/name.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/name.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.obj `if test -f 'mfluadir/otfcc/lib/table/name.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/name.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/name.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.o: mfluadir/otfcc/lib/table/OS_2.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.o `test -f 'mfluadir/otfcc/lib/table/OS_2.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/OS_2.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/OS_2.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.o `test -f 'mfluadir/otfcc/lib/table/OS_2.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/OS_2.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.obj: mfluadir/otfcc/lib/table/OS_2.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.obj `if test -f 'mfluadir/otfcc/lib/table/OS_2.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/OS_2.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/OS_2.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/OS_2.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.obj `if test -f 'mfluadir/otfcc/lib/table/OS_2.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/OS_2.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/OS_2.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.o: mfluadir/otfcc/lib/table/hdmx.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.o `test -f 'mfluadir/otfcc/lib/table/hdmx.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/hdmx.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/hdmx.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.o `test -f 'mfluadir/otfcc/lib/table/hdmx.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/hdmx.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.obj: mfluadir/otfcc/lib/table/hdmx.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.obj `if test -f 'mfluadir/otfcc/lib/table/hdmx.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/hdmx.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/hdmx.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/hdmx.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.obj `if test -f 'mfluadir/otfcc/lib/table/hdmx.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/hdmx.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/hdmx.c'; fi`
+
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.o: mfluadir/otfcc/lib/table/glyf/read.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.o -MD -MP -MF mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/glyf/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/glyf/read.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/glyf/read.c' object='mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/glyf/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/glyf/read.c
+
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.obj: mfluadir/otfcc/lib/table/glyf/read.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.obj -MD -MP -MF mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/glyf/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/glyf/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/glyf/read.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/glyf/read.c' object='mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/glyf/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/glyf/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/glyf/read.c'; fi`
+
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.o: mfluadir/otfcc/lib/table/glyf/glyf.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.o -MD -MP -MF mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Tpo -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.o `test -f 'mfluadir/otfcc/lib/table/glyf/glyf.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/glyf/glyf.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Tpo mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/glyf/glyf.c' object='mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.o `test -f 'mfluadir/otfcc/lib/table/glyf/glyf.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/glyf/glyf.c
+
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.obj: mfluadir/otfcc/lib/table/glyf/glyf.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.obj -MD -MP -MF mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Tpo -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.obj `if test -f 'mfluadir/otfcc/lib/table/glyf/glyf.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/glyf/glyf.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/glyf/glyf.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Tpo mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/glyf/glyf.c' object='mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.obj `if test -f 'mfluadir/otfcc/lib/table/glyf/glyf.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/glyf/glyf.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/glyf/glyf.c'; fi`
+
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.o: mfluadir/otfcc/lib/table/glyf/build.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.o -MD -MP -MF mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/glyf/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/glyf/build.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/glyf/build.c' object='mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/glyf/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/glyf/build.c
+
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.obj: mfluadir/otfcc/lib/table/glyf/build.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.obj -MD -MP -MF mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/glyf/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/glyf/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/glyf/build.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/glyf/build.c' object='mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/glyf/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/glyf/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/glyf/build.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.o: mfluadir/otfcc/lib/table/GDEF.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.o `test -f 'mfluadir/otfcc/lib/table/GDEF.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/GDEF.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/GDEF.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.o `test -f 'mfluadir/otfcc/lib/table/GDEF.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/GDEF.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.obj: mfluadir/otfcc/lib/table/GDEF.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.obj `if test -f 'mfluadir/otfcc/lib/table/GDEF.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/GDEF.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/GDEF.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/GDEF.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.obj `if test -f 'mfluadir/otfcc/lib/table/GDEF.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/GDEF.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/GDEF.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.o: mfluadir/otfcc/lib/table/VORG.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.o `test -f 'mfluadir/otfcc/lib/table/VORG.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/VORG.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/VORG.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.o `test -f 'mfluadir/otfcc/lib/table/VORG.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/VORG.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.obj: mfluadir/otfcc/lib/table/VORG.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.obj `if test -f 'mfluadir/otfcc/lib/table/VORG.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/VORG.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/VORG.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/VORG.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.obj `if test -f 'mfluadir/otfcc/lib/table/VORG.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/VORG.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/VORG.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.o: mfluadir/otfcc/lib/table/otl/coverage.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.o `test -f 'mfluadir/otfcc/lib/table/otl/coverage.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/coverage.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/coverage.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.o `test -f 'mfluadir/otfcc/lib/table/otl/coverage.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/coverage.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.obj: mfluadir/otfcc/lib/table/otl/coverage.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.obj `if test -f 'mfluadir/otfcc/lib/table/otl/coverage.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/coverage.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/coverage.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/coverage.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.obj `if test -f 'mfluadir/otfcc/lib/table/otl/coverage.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/coverage.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/coverage.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.o: mfluadir/otfcc/lib/table/otl/read.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/otl/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/read.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/read.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/otl/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/read.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.obj: mfluadir/otfcc/lib/table/otl/read.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/otl/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/read.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/read.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/otl/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/read.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.o: mfluadir/otfcc/lib/table/otl/classdef.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.o `test -f 'mfluadir/otfcc/lib/table/otl/classdef.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/classdef.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/classdef.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.o `test -f 'mfluadir/otfcc/lib/table/otl/classdef.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/classdef.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.obj: mfluadir/otfcc/lib/table/otl/classdef.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.obj `if test -f 'mfluadir/otfcc/lib/table/otl/classdef.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/classdef.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/classdef.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/classdef.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.obj `if test -f 'mfluadir/otfcc/lib/table/otl/classdef.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/classdef.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/classdef.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.o: mfluadir/otfcc/lib/table/otl/build.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/otl/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/build.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/build.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/otl/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/build.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.obj: mfluadir/otfcc/lib/table/otl/build.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/otl/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/build.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/build.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/otl/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/build.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.o: mfluadir/otfcc/lib/table/otl/parse.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.o `test -f 'mfluadir/otfcc/lib/table/otl/parse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/parse.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/parse.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.o `test -f 'mfluadir/otfcc/lib/table/otl/parse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/parse.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.obj: mfluadir/otfcc/lib/table/otl/parse.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.obj `if test -f 'mfluadir/otfcc/lib/table/otl/parse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/parse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/parse.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/parse.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.obj `if test -f 'mfluadir/otfcc/lib/table/otl/parse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/parse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/parse.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.o: mfluadir/otfcc/lib/table/otl/dump.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.o `test -f 'mfluadir/otfcc/lib/table/otl/dump.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/dump.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/dump.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.o `test -f 'mfluadir/otfcc/lib/table/otl/dump.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/dump.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.obj: mfluadir/otfcc/lib/table/otl/dump.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.obj `if test -f 'mfluadir/otfcc/lib/table/otl/dump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/dump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/dump.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/dump.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.obj `if test -f 'mfluadir/otfcc/lib/table/otl/dump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/dump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/dump.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.o: mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.obj: mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.o: mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.obj: mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.o: mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.obj: mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.o: mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.obj: mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.o: mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.obj: mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.o: mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.obj: mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.o: mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.obj: mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.o: mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.obj: mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.o: mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.obj: mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.o: mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.obj: mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.o: mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.obj: mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.o: mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.obj: mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.o: mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.obj: mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.o: mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.obj: mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.o: mfluadir/otfcc/lib/table/otl/subtables/extend.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/extend.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/extend.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/extend.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/extend.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/extend.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.obj: mfluadir/otfcc/lib/table/otl/subtables/extend.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/extend.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/extend.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/extend.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/extend.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/extend.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/extend.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/extend.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.o: mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.obj: mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.o: mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.obj: mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.o: mfluadir/otfcc/lib/table/otl/otl.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.o `test -f 'mfluadir/otfcc/lib/table/otl/otl.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/otl.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/otl.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.o `test -f 'mfluadir/otfcc/lib/table/otl/otl.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/otl.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.obj: mfluadir/otfcc/lib/table/otl/otl.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.obj `if test -f 'mfluadir/otfcc/lib/table/otl/otl.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/otl.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/otl.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/otl.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.obj `if test -f 'mfluadir/otfcc/lib/table/otl/otl.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/otl.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/otl.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.o: mfluadir/otfcc/lib/table/otl/constants.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.o `test -f 'mfluadir/otfcc/lib/table/otl/constants.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/constants.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/constants.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.o `test -f 'mfluadir/otfcc/lib/table/otl/constants.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/constants.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.obj: mfluadir/otfcc/lib/table/otl/constants.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.obj `if test -f 'mfluadir/otfcc/lib/table/otl/constants.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/constants.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/constants.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/constants.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.obj `if test -f 'mfluadir/otfcc/lib/table/otl/constants.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/constants.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/constants.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.o: mfluadir/otfcc/lib/table/hmtx.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.o `test -f 'mfluadir/otfcc/lib/table/hmtx.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/hmtx.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/hmtx.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.o `test -f 'mfluadir/otfcc/lib/table/hmtx.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/hmtx.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.obj: mfluadir/otfcc/lib/table/hmtx.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.obj `if test -f 'mfluadir/otfcc/lib/table/hmtx.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/hmtx.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/hmtx.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/hmtx.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.obj `if test -f 'mfluadir/otfcc/lib/table/hmtx.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/hmtx.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/hmtx.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.o: mfluadir/otfcc/lib/table/BASE.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.o `test -f 'mfluadir/otfcc/lib/table/BASE.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/BASE.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/BASE.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.o `test -f 'mfluadir/otfcc/lib/table/BASE.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/BASE.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.obj: mfluadir/otfcc/lib/table/BASE.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.obj `if test -f 'mfluadir/otfcc/lib/table/BASE.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/BASE.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/BASE.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/BASE.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.obj `if test -f 'mfluadir/otfcc/lib/table/BASE.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/BASE.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/BASE.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.o: mfluadir/otfcc/lib/table/SVG.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.o `test -f 'mfluadir/otfcc/lib/table/SVG.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/SVG.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/SVG.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.o `test -f 'mfluadir/otfcc/lib/table/SVG.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/SVG.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.obj: mfluadir/otfcc/lib/table/SVG.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.obj `if test -f 'mfluadir/otfcc/lib/table/SVG.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/SVG.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/SVG.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/SVG.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.obj `if test -f 'mfluadir/otfcc/lib/table/SVG.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/SVG.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/SVG.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.o: mfluadir/otfcc/lib/table/TSI5.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.o `test -f 'mfluadir/otfcc/lib/table/TSI5.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/TSI5.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/TSI5.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.o `test -f 'mfluadir/otfcc/lib/table/TSI5.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/TSI5.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.obj: mfluadir/otfcc/lib/table/TSI5.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.obj `if test -f 'mfluadir/otfcc/lib/table/TSI5.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/TSI5.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/TSI5.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfluadir/otfcc/lib/table/TSI5.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.obj `if test -f 'mfluadir/otfcc/lib/table/TSI5.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/TSI5.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/TSI5.c'; fi`
+
libmplibbackends_a-pngout.o: pngout.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmplibbackends_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmplibbackends_a-pngout.o -MD -MP -MF $(DEPDIR)/libmplibbackends_a-pngout.Tpo -c -o libmplibbackends_a-pngout.o `test -f 'pngout.c' || echo '$(srcdir)/'`pngout.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libmplibbackends_a-pngout.Tpo $(DEPDIR)/libmplibbackends_a-pngout.Po
@@ -16477,6 +19376,64 @@
-rm -f luatexdir/utils/$(am__dirstamp)
-rm -f mfluadir/$(DEPDIR)/$(am__dirstamp)
-rm -f mfluadir/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/dep/extern/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/dep/extern/emyg-dtoa/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/bk/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/bk/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/consolidate/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/consolidate/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/font/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/json-reader/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/json-reader/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/json-writer/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/json-writer/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/libcff/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/logger/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/logger/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/otf-reader/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/otf-writer/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/aglfn/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/base64/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/base64/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/buffer/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/json/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/json/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/sha1/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/ttinstr/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/support/unicodeconv/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/glyf/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/meta/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/otl/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/table/vdmx/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/lib/vf/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+ -rm -f mfluadir/otfcc/src/$(am__dirstamp)
-rm -f mfluajitdir/$(DEPDIR)/$(am__dirstamp)
-rm -f mfluajitdir/$(am__dirstamp)
-rm -f mplibdir/$(DEPDIR)/$(am__dirstamp)
@@ -16560,6 +19517,7 @@
-rm -f ./$(DEPDIR)/libmfluajit_a-mfluajit-pool.Po
-rm -f ./$(DEPDIR)/libmfluajit_a-mfluajit0.Po
-rm -f ./$(DEPDIR)/libmfluajit_a-mfluajitini.Po
+ -rm -f ./$(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Po
-rm -f ./$(DEPDIR)/libmplibbackends_a-pngout.Po
-rm -f ./$(DEPDIR)/libmplibbackends_a-svgout.Po
-rm -f ./$(DEPDIR)/libmplibcore_a-mp.Po
@@ -17032,6 +19990,125 @@
-rm -f mfluadir/$(DEPDIR)/libmfluajit_a-mfluac.Po
-rm -f mfluadir/$(DEPDIR)/mflua-mfluaextra.Po
-rm -f mfluadir/$(DEPDIR)/mflua_nowin-mfluaextra.Po
+ -rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Po
+ -rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Po
+ -rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Po
+ -rm -f mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Po
+ -rm -f mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Po
+ -rm -f mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Po
+ -rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Po
+ -rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Po
+ -rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Po
+ -rm -f mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Po
+ -rm -f mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Po
+ -rm -f mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Po
+ -rm -f mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Po
+ -rm -f mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Po
+ -rm -f mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Po
+ -rm -f mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Po
+ -rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Po
+ -rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Po
+ -rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Po
+ -rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Po
+ -rm -f mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Po
+ -rm -f mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Po
+ -rm -f mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Po
+ -rm -f mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Po
+ -rm -f mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Po
+ -rm -f mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Po
+ -rm -f mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Po
+ -rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ -rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Po
+ -rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ -rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ -rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ -rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ -rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ -rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ -rm -f mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Po
+ -rm -f mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Po
+ -rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Po
+ -rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Po
+ -rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Po
+ -rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Po
+ -rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Po
+ -rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Po
+ -rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Po
+ -rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Po
-rm -f mfluajitdir/$(DEPDIR)/mfluajit-mfluajitextra.Po
-rm -f mfluajitdir/$(DEPDIR)/mfluajit_nowin-mfluajitextra.Po
-rm -f mplibdir/$(DEPDIR)/libmputil_a-avl.Po
@@ -17212,6 +20289,7 @@
-rm -f ./$(DEPDIR)/libmfluajit_a-mfluajit-pool.Po
-rm -f ./$(DEPDIR)/libmfluajit_a-mfluajit0.Po
-rm -f ./$(DEPDIR)/libmfluajit_a-mfluajitini.Po
+ -rm -f ./$(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Po
-rm -f ./$(DEPDIR)/libmplibbackends_a-pngout.Po
-rm -f ./$(DEPDIR)/libmplibbackends_a-svgout.Po
-rm -f ./$(DEPDIR)/libmplibcore_a-mp.Po
@@ -17684,6 +20762,125 @@
-rm -f mfluadir/$(DEPDIR)/libmfluajit_a-mfluac.Po
-rm -f mfluadir/$(DEPDIR)/mflua-mfluaextra.Po
-rm -f mfluadir/$(DEPDIR)/mflua_nowin-mfluaextra.Po
+ -rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Po
+ -rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Po
+ -rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Po
+ -rm -f mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Po
+ -rm -f mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Po
+ -rm -f mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+ -rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Po
+ -rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Po
+ -rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Po
+ -rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Po
+ -rm -f mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Po
+ -rm -f mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Po
+ -rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Po
+ -rm -f mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Po
+ -rm -f mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Po
+ -rm -f mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Po
+ -rm -f mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Po
+ -rm -f mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Po
+ -rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Po
+ -rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Po
+ -rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Po
+ -rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Po
+ -rm -f mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Po
+ -rm -f mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Po
+ -rm -f mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Po
+ -rm -f mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Po
+ -rm -f mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Po
+ -rm -f mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Po
+ -rm -f mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Po
+ -rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Po
+ -rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ -rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Po
+ -rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ -rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ -rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ -rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ -rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ -rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ -rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ -rm -f mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Po
+ -rm -f mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Po
+ -rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Po
+ -rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Po
+ -rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Po
+ -rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Po
+ -rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Po
+ -rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Po
+ -rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Po
+ -rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Po
-rm -f mfluajitdir/$(DEPDIR)/mfluajit-mfluajitextra.Po
-rm -f mfluajitdir/$(DEPDIR)/mfluajit_nowin-mfluajitextra.Po
-rm -f mplibdir/$(DEPDIR)/libmputil_a-avl.Po
@@ -18159,6 +21356,16 @@
mfluatrap-clean:
rm -rf mfluatrapdir
+#libmfluaotfcc_a_DEPENDENCIES = $(ZLIB_DEPEND)
+#libmfluajitotfcc_a_DEPENDENCIES = $(ZLIB_DEPEND)
+
+$(libmfluaotfcc_a_OBJECTS): $(LUA_DEPEND)
+$(libmfluajitotfcc_a_OBJECTS): $(LUAJIT_DEPEND)
+
+#EXTRA_DIST +=
+
+#EXTRA_DIST +=
+
.PHONY: install-mfluajit-links uninstall-mfluajit-links
@WIN32_TRUE at install-mfluajit-links: call_mfluajit$(EXEEXT)
@MFLUAJITN_FALSE@@WIN32_TRUE@ $(INSTALL_PROGRAM) call_mfluajit$(EXEEXT) $(DESTDIR)$(bindir)/mfluajit-nowin$(EXEEXT)
Modified: trunk/Build/source/texk/web2c/mfluadir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/ChangeLog 2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/mfluadir/ChangeLog 2021-01-10 20:13:26 UTC (rev 57374)
@@ -1,3 +1,8 @@
+2021-01-05 Luigi Scarso <luigi.scarso at gmail.com>
+
+ * MFLua 1.0.0-alpha: embedding of otfcc (see https://github.com/caryll/otfcc)
+
+
2020-02-16 Luigi Scarso <luigi.scarso at gmail.com>
Small clean up.
Modified: trunk/Build/source/texk/web2c/mfluadir/am/mflua.am
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/am/mflua.am 2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/mfluadir/am/mflua.am 2021-01-10 20:13:26 UTC (rev 57374)
@@ -42,11 +42,11 @@
dist_mflua_SOURCES = mfluadir/mfluaextra.c mfluadir/mfluaextra.h mfluadir/mflua_version.h
mflua_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS) $(LUA_INCLUDES)
-mflua_LDADD = libmflua.a $(LDADD) $(windowlib) $(mf_x_libs) $(LUA_LIBS)
+mflua_LDADD = libmflua.a libmfluaotfcc.a $(LDADD) $(windowlib) $(mf_x_libs) $(LUA_LIBS)
mflua_LDFLAGS = -export-dynamic
nodist_mflua_nowin_SOURCES = $(dist_mflua_SOURCES)
mflua_nowin_CPPFLAGS = $(mflua_CPPFLAGS) -DMFNOWIN $(LUA_INCLUDES)
-mflua_nowin_LDADD = libmflua.a $(LDADD) $(windowlib) $(LUA_LIBS)
+mflua_nowin_LDADD = libmflua.a libmfluaotfcc.a $(LDADD) $(windowlib) $(LUA_LIBS)
mflua_nowin_LDFLAGS = -export-dynamic
# We must create mfluad.h and mfluadir/mflua_version.h before compiling mfluaextra.c.
@@ -55,7 +55,7 @@
## mflua and mflua-nowin compile mfluaextra.c with different CPPFLAGS.
## Automake, however, does not support CPPFLAGS for individual source files.
## To avoid compiling everything twice, the common objects are in a library.
-EXTRA_LIBRARIES += libmflua.a
+EXTRA_LIBRARIES += libmflua.a libmfluaotfcc.a
# MFLua C sources
mflua_c_h = mfluaini.c mflua0.c mfluacoerce.h mfluad.h
Added: trunk/Build/source/texk/web2c/mfluadir/am/mfluaotfcc.am
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/am/mfluaotfcc.am (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/am/mfluaotfcc.am 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,306 @@
+## texk/web2c/luatexdir/am/mfluaotfcc.am: Makefile fragment for libmfluaotfcc.
+##
+## Copyright (C) 2021 Luigi Scarso <tex-live at tug.org>
+## You may freely use, modify and/or distribute this file.
+
+## mfluaotfcc
+##
+EXTRA_LIBRARIES += libmfluaotfcc.a libmfluajitotfcc.a
+
+#libmfluaotfcc_a_DEPENDENCIES = $(ZLIB_DEPEND)
+#libmfluajitotfcc_a_DEPENDENCIES = $(ZLIB_DEPEND)
+
+$(libmfluaotfcc_a_OBJECTS): $(LUA_DEPEND)
+$(libmfluajitotfcc_a_OBJECTS): $(LUAJIT_DEPEND)
+
+libmfluaotfcc_a_CPPFLAGS = \
+ -D_CARYLL_USE_PRE_SERIALIZED -DMAIN_VER=0 -DSECONDARY_VER=10 -DPATCH_VER=4 \
+ -I$(top_srcdir)/mfluadir/otfcc/include \
+ -I$(top_srcdir)/mfluadir/otfcc/include/dep \
+ -I$(top_srcdir)/mfluadir/otfcc/lib \
+ $(LUA_INCLUDES)
+
+
+libmfluajitotfcc_a_CPPFLAGS = \
+ -D_CARYLL_USE_PRE_SERIALIZED -DMAIN_VER=0 -DSECONDARY_VER=10 -DPATCH_VER=4 \
+ -DJIT \
+ -I$(top_srcdir)/mfluadir/otfcc/include \
+ -I$(top_srcdir)/mfluadir/otfcc/include/dep \
+ -I$(top_srcdir)/mfluadir/otfcc/lib \
+ $(LUAJIT_INCLUDES)
+
+libmfluaotfcc_a_CFLAGS = # $(WARNING_CFLAGS)
+libmfluajitotfcc_a_CFLAGS = # $(WARNING_CFLAGS)
+
+#nodist_libmfluaotfcc_a_SOURCES = $(libmfluaotfcc_sources)
+#nodist_libmfluajitotfcc_a_SOURCES = $(libmfluaotfcc_sources)
+
+libmfluaotfcc_a_SOURCES = \
+ mfluadir/otfcc/dep/extern/sdsalloc.h \
+ mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c \
+ mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.h \
+ mfluadir/otfcc/dep/extern/json.c \
+ mfluadir/otfcc/dep/extern/json-builder.c \
+ mfluadir/otfcc/dep/extern/sds.c \
+ mfluadir/otfcc/src/aliases.h \
+ mfluadir/otfcc/src/luafunc.c \
+ mfluadir/otfcc/src/otfccbuild.c \
+ mfluadir/otfcc/src/otfccdump.c \
+ mfluadir/otfcc/src/platform.h \
+ mfluadir/otfcc/src/otfccdll.c \
+ mfluadir/otfcc/src/stopwatch.c \
+ mfluadir/otfcc/src/stopwatch.h \
+ mfluadir/otfcc/include/dep/json.h \
+ mfluadir/otfcc/include/dep/json-builder.h \
+ mfluadir/otfcc/include/dep/sds.h \
+ mfluadir/otfcc/include/dep/uthash.h \
+ mfluadir/otfcc/include/otfcc/options.h \
+ mfluadir/otfcc/include/otfcc/primitives.h \
+ mfluadir/otfcc/include/otfcc/handle.h \
+ mfluadir/otfcc/include/otfcc/vf/vf.h \
+ mfluadir/otfcc/include/otfcc/vf/vv.h \
+ mfluadir/otfcc/include/otfcc/vf/region.h \
+ mfluadir/otfcc/include/otfcc/vf/axis.h \
+ mfluadir/otfcc/include/otfcc/vf/vq.h \
+ mfluadir/otfcc/include/otfcc/sfnt.h \
+ mfluadir/otfcc/include/otfcc/glyph-order.h \
+ mfluadir/otfcc/include/otfcc/sfnt-builder.h \
+ mfluadir/otfcc/include/otfcc/logger.h \
+ mfluadir/otfcc/include/otfcc/font.h \
+ mfluadir/otfcc/include/otfcc/table/fvar.h \
+ mfluadir/otfcc/include/otfcc/table/maxp.h \
+ mfluadir/otfcc/include/otfcc/table/BASE.h \
+ mfluadir/otfcc/include/otfcc/table/post.h \
+ mfluadir/otfcc/include/otfcc/table/vmtx.h \
+ mfluadir/otfcc/include/otfcc/table/glyf.h \
+ mfluadir/otfcc/include/otfcc/table/fpgm-prep.h \
+ mfluadir/otfcc/include/otfcc/table/vhea.h \
+ mfluadir/otfcc/include/otfcc/table/gasp.h \
+ mfluadir/otfcc/include/otfcc/table/name.h \
+ mfluadir/otfcc/include/otfcc/table/hmtx.h \
+ mfluadir/otfcc/include/otfcc/table/OS_2.h \
+ mfluadir/otfcc/include/otfcc/table/CPAL.h \
+ mfluadir/otfcc/include/otfcc/table/GDEF.h \
+ mfluadir/otfcc/include/otfcc/table/TSI5.h \
+ mfluadir/otfcc/include/otfcc/table/hdmx.h \
+ mfluadir/otfcc/include/otfcc/table/table-common.h \
+ mfluadir/otfcc/include/otfcc/table/LTSH.h \
+ mfluadir/otfcc/include/otfcc/table/VORG.h \
+ mfluadir/otfcc/include/otfcc/table/cmap.h \
+ mfluadir/otfcc/include/otfcc/table/_TSI.h \
+ mfluadir/otfcc/include/otfcc/table/COLR.h \
+ mfluadir/otfcc/include/otfcc/table/CFF.h \
+ mfluadir/otfcc/include/otfcc/table/otl/coverage.h \
+ mfluadir/otfcc/include/otfcc/table/otl/classdef.h \
+ mfluadir/otfcc/include/otfcc/table/otl.h \
+ mfluadir/otfcc/include/otfcc/table/cvt.h \
+ mfluadir/otfcc/include/otfcc/table/meta.h \
+ mfluadir/otfcc/include/otfcc/table/SVG.h \
+ mfluadir/otfcc/include/otfcc/table/hhea.h \
+ mfluadir/otfcc/include/otfcc/table/VDMX.h \
+ mfluadir/otfcc/include/otfcc/table/head.h \
+ mfluadir/otfcc/include/caryll/ownership.h \
+ mfluadir/otfcc/include/caryll/element.h \
+ mfluadir/otfcc/include/caryll/buffer.h \
+ mfluadir/otfcc/include/caryll/vector.h \
+ mfluadir/otfcc/lib/consolidate/consolidate.c \
+ mfluadir/otfcc/lib/consolidate/consolidate.h \
+ mfluadir/otfcc/lib/consolidate/otl/gpos-single.h \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-single.c \
+ mfluadir/otfcc/lib/consolidate/otl/gpos-single.c \
+ mfluadir/otfcc/lib/consolidate/otl/chaining.c \
+ mfluadir/otfcc/lib/consolidate/otl/common.c \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.h \
+ mfluadir/otfcc/lib/consolidate/otl/gpos-pair.h \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-single.h \
+ mfluadir/otfcc/lib/consolidate/otl/chaining.h \
+ mfluadir/otfcc/lib/consolidate/otl/GDEF.h \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c \
+ mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.h \
+ mfluadir/otfcc/lib/consolidate/otl/mark.h \
+ mfluadir/otfcc/lib/consolidate/otl/common.h \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c \
+ mfluadir/otfcc/lib/consolidate/otl/GDEF.c \
+ mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-multi.h \
+ mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c \
+ mfluadir/otfcc/lib/consolidate/otl/mark.c \
+ mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.h \
+ mfluadir/otfcc/lib/support/options.c \
+ mfluadir/otfcc/lib/support/aliases.h \
+ mfluadir/otfcc/lib/support/tag.h \
+ mfluadir/otfcc/lib/support/bin-io.h \
+ mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c \
+ mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.h \
+ mfluadir/otfcc/lib/support/handle.c \
+ mfluadir/otfcc/lib/support/otfcc-alloc.h \
+ mfluadir/otfcc/lib/support/util.h \
+ mfluadir/otfcc/lib/support/element-impl.h \
+ mfluadir/otfcc/lib/support/buffer/buffer.c \
+ mfluadir/otfcc/lib/support/vector-impl.h \
+ mfluadir/otfcc/lib/support/primitives.c \
+ mfluadir/otfcc/lib/support/glyph-order.c \
+ mfluadir/otfcc/lib/support/sha1/sha1.h \
+ mfluadir/otfcc/lib/support/sha1/sha1.c \
+ mfluadir/otfcc/lib/support/ttinstr/ttinstr.c \
+ mfluadir/otfcc/lib/support/ttinstr/ttinstr.h \
+ mfluadir/otfcc/lib/support/base64/base64.h \
+ mfluadir/otfcc/lib/support/base64/base64.c \
+ mfluadir/otfcc/lib/support/json/json-ident.c \
+ mfluadir/otfcc/lib/support/json/json-funcs.h \
+ mfluadir/otfcc/lib/support/json/json-ident.h \
+ mfluadir/otfcc/lib/support/aglfn/aglfn.c \
+ mfluadir/otfcc/lib/support/aglfn/aglfn.h \
+ mfluadir/otfcc/lib/otf-writer/stat.h \
+ mfluadir/otfcc/lib/otf-writer/stat.c \
+ mfluadir/otfcc/lib/otf-writer/otf-writer.c \
+ mfluadir/otfcc/lib/otf-reader/otf-reader.c \
+ mfluadir/otfcc/lib/otf-reader/unconsolidate.c \
+ mfluadir/otfcc/lib/otf-reader/unconsolidate.h \
+ mfluadir/otfcc/lib/vf/axis.c \
+ mfluadir/otfcc/lib/vf/region.c \
+ mfluadir/otfcc/lib/vf/vq.c \
+ mfluadir/otfcc/lib/logger/logger.c \
+ mfluadir/otfcc/lib/bk/bkblock.h \
+ mfluadir/otfcc/lib/bk/bkgraph.h \
+ mfluadir/otfcc/lib/bk/bkgraph.c \
+ mfluadir/otfcc/lib/bk/bkblock.c \
+ mfluadir/otfcc/lib/font/caryll-font.c \
+ mfluadir/otfcc/lib/font/caryll-sfnt-builder.c \
+ mfluadir/otfcc/lib/font/caryll-sfnt.c \
+ mfluadir/otfcc/lib/json-writer/json-writer.c \
+ mfluadir/otfcc/lib/json-reader/json-reader.c \
+ mfluadir/otfcc/lib/libcff/charstring-il.h \
+ mfluadir/otfcc/lib/libcff/cff-index.h \
+ mfluadir/otfcc/lib/libcff/cff-dict.h \
+ mfluadir/otfcc/lib/libcff/cff-value.h \
+ mfluadir/otfcc/lib/libcff/cff-string.c \
+ mfluadir/otfcc/lib/libcff/cff-opmean.c \
+ mfluadir/otfcc/lib/libcff/libcff.h \
+ mfluadir/otfcc/lib/libcff/charstring-il.c \
+ mfluadir/otfcc/lib/libcff/cff-fdselect.c \
+ mfluadir/otfcc/lib/libcff/cff-parser.c \
+ mfluadir/otfcc/lib/libcff/subr.c \
+ mfluadir/otfcc/lib/libcff/cff-charset.c \
+ mfluadir/otfcc/lib/libcff/cff-index.c \
+ mfluadir/otfcc/lib/libcff/cff-codecs.c \
+ mfluadir/otfcc/lib/libcff/cff-charset.h \
+ mfluadir/otfcc/lib/libcff/cff-util.h \
+ mfluadir/otfcc/lib/libcff/cff-writer.c \
+ mfluadir/otfcc/lib/libcff/subr.h \
+ mfluadir/otfcc/lib/libcff/cff-fdselect.h \
+ mfluadir/otfcc/lib/libcff/cff-dict.c \
+ mfluadir/otfcc/lib/libcff/cff-value.c \
+ mfluadir/otfcc/lib/table/vhea.c \
+ mfluadir/otfcc/lib/table/fvar.c \
+ mfluadir/otfcc/lib/table/cmap.c \
+ mfluadir/otfcc/lib/table/meta/read.c \
+ mfluadir/otfcc/lib/table/meta/type.c \
+ mfluadir/otfcc/lib/table/meta/build.c \
+ mfluadir/otfcc/lib/table/meta/parse.c \
+ mfluadir/otfcc/lib/table/meta/dump.c \
+ mfluadir/otfcc/lib/table/vdmx/type.c \
+ mfluadir/otfcc/lib/table/vdmx/funcs.c \
+ mfluadir/otfcc/lib/table/hhea.c \
+ mfluadir/otfcc/lib/table/fvar.h \
+ mfluadir/otfcc/lib/table/maxp.h \
+ mfluadir/otfcc/lib/table/BASE.h \
+ mfluadir/otfcc/lib/table/post.h \
+ mfluadir/otfcc/lib/table/post.c \
+ mfluadir/otfcc/lib/table/cvt.c \
+ mfluadir/otfcc/lib/table/CFF.c \
+ mfluadir/otfcc/lib/table/vmtx.h \
+ mfluadir/otfcc/lib/table/glyf.h \
+ mfluadir/otfcc/lib/table/gasp.c \
+ mfluadir/otfcc/lib/table/LTSH.c \
+ mfluadir/otfcc/lib/table/maxp.c \
+ mfluadir/otfcc/lib/table/fpgm-prep.h \
+ mfluadir/otfcc/lib/table/all.h \
+ mfluadir/otfcc/lib/table/COLR.c \
+ mfluadir/otfcc/lib/table/vmtx.c \
+ mfluadir/otfcc/lib/table/vhea.h \
+ mfluadir/otfcc/lib/table/gasp.h \
+ mfluadir/otfcc/lib/table/fpgm-prep.c \
+ mfluadir/otfcc/lib/table/name.h \
+ mfluadir/otfcc/lib/table/hmtx.h \
+ mfluadir/otfcc/lib/table/head.c \
+ mfluadir/otfcc/lib/table/OS_2.h \
+ mfluadir/otfcc/lib/table/CPAL.c \
+ mfluadir/otfcc/lib/table/CPAL.h \
+ mfluadir/otfcc/lib/table/GDEF.h \
+ mfluadir/otfcc/lib/table/TSI5.h \
+ mfluadir/otfcc/lib/table/hdmx.h \
+ mfluadir/otfcc/lib/table/_TSI.c \
+ mfluadir/otfcc/lib/table/LTSH.h \
+ mfluadir/otfcc/lib/table/VORG.h \
+ mfluadir/otfcc/lib/table/name.c \
+ mfluadir/otfcc/lib/table/cmap.h \
+ mfluadir/otfcc/lib/table/OS_2.c \
+ mfluadir/otfcc/lib/table/hdmx.c \
+ mfluadir/otfcc/lib/table/glyf/read.c \
+ mfluadir/otfcc/lib/table/glyf/glyf.c \
+ mfluadir/otfcc/lib/table/glyf/build.c \
+ mfluadir/otfcc/lib/table/_TSI.h \
+ mfluadir/otfcc/lib/table/GDEF.c \
+ mfluadir/otfcc/lib/table/COLR.h \
+ mfluadir/otfcc/lib/table/VORG.c \
+ mfluadir/otfcc/lib/table/CFF.h \
+ mfluadir/otfcc/lib/table/otl/coverage.c \
+ mfluadir/otfcc/lib/table/otl/read.c \
+ mfluadir/otfcc/lib/table/otl/private.h \
+ mfluadir/otfcc/lib/table/otl/classdef.c \
+ mfluadir/otfcc/lib/table/otl/build.c \
+ mfluadir/otfcc/lib/table/otl/parse.c \
+ mfluadir/otfcc/lib/table/otl/dump.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-single.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-common.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.h \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/common.h \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-single.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c \
+ mfluadir/otfcc/lib/table/otl/subtables/chaining.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.h \
+ mfluadir/otfcc/lib/table/otl/subtables/common.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c \
+ mfluadir/otfcc/lib/table/otl/subtables/extend.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.h \
+ mfluadir/otfcc/lib/table/otl/subtables/extend.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.h \
+ mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c \
+ mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.h \
+ mfluadir/otfcc/lib/table/otl/otl.c \
+ mfluadir/otfcc/lib/table/otl/constants.c \
+ mfluadir/otfcc/lib/table/hmtx.c \
+ mfluadir/otfcc/lib/table/otl.h \
+ mfluadir/otfcc/lib/table/cvt.h \
+ mfluadir/otfcc/lib/table/meta.h \
+ mfluadir/otfcc/lib/table/SVG.h \
+ mfluadir/otfcc/lib/table/hhea.h \
+ mfluadir/otfcc/lib/table/BASE.c \
+ mfluadir/otfcc/lib/table/VDMX.h \
+ mfluadir/otfcc/lib/table/SVG.c \
+ mfluadir/otfcc/lib/table/head.h \
+ mfluadir/otfcc/lib/table/TSI5.c
+
+##
+#EXTRA_DIST +=
+
+## Not used
+##
+#EXTRA_DIST +=
Modified: trunk/Build/source/texk/web2c/mfluadir/mf-lua.ch
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/mf-lua.ch 2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/mfluadir/mf-lua.ch 2021-01-10 20:13:26 UTC (rev 57374)
@@ -19,7 +19,7 @@
@y
@d METAFONT_banner=='This is METAFONT, Version 2.7182818' {printed when \MF\ starts}
@#
- at d MFLua_version_string=='-0.9.1'
+ at d MFLua_version_string=='-1.0.0-alpha'
@#
@d MFLua_banner=='This is MFLua, Version 2.7182818', MFLua_version_string
{printed when MFLua starts}
Modified: trunk/Build/source/texk/web2c/mfluadir/mflua_version.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/mflua_version.h 2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/mfluadir/mflua_version.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -1,2 +1,2 @@
-#define MFLUA_VERSION "0.9.1"
+#define MFLUA_VERSION "1.0.0-alpha"
#define BANNER "This is MFLua, Version 2.7182818-" MFLUA_VERSION
\ No newline at end of file
Modified: trunk/Build/source/texk/web2c/mfluadir/mfluac.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/mfluac.c 2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/mfluadir/mfluac.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -1,5 +1,8 @@
+#include <string.h>
+
#define EXTERN extern
+
#if defined(JIT)
#include "mfluajitd.h"
#else
@@ -14,6 +17,14 @@
#include <luajit.h>
#endif
+
+#if defined(NO_OTFCC)
+/* */
+#else
+extern int otfcc_build(int argc, char *argv[]);
+extern int otfcc_dump(int argc, char *argv[]);
+#endif
+
/* See shell_cmd_is_allowed below */
int shellenabledp = 1;
int restrictedshell = 0;
@@ -20,7 +31,7 @@
/**************************************************************/
/* */
-/* private functions */
+/* MFbuiltin private functions */
/* */
/**************************************************************/
static lua_State *Luas[1];
@@ -472,8 +483,156 @@
}
+/**************************************************************/
+/* */
+/* otfcc private functions */
+/* */
+/**************************************************************/
+#ifdef MFLuaJIT
+static void lua_len (lua_State *L, int i) {
+ switch (lua_type(L, i)) {
+ case LUA_TSTRING:
+ lua_pushnumber(L, (lua_Number)lua_objlen(L, i));
+ break;
+ case LUA_TTABLE:
+ if (!luaL_callmeta(L, i, "__len"))
+ lua_pushnumber(L, (lua_Number)lua_objlen(L, i));
+ break;
+ case LUA_TUSERDATA:
+ if (luaL_callmeta(L, i, "__len"))
+ break;
+ /* FALLTHROUGH */
+ default:
+ luaL_error(L, "attempt to get length of a %s value",
+ lua_typename(L, lua_type(L, i)));
+ }
+}
+static int lua_absindex (lua_State *L, int i) {
+ if (i < 0 && i > LUA_REGISTRYINDEX)
+ i += lua_gettop(L) + 1;
+ return i;
+}
+static int lua_geti (lua_State *L, int index, lua_Integer i) {
+ index = lua_absindex(L, index);
+ lua_pushinteger(L, i);
+ lua_gettable(L, index);
+ return lua_type(L, -1);
+}
+#endif
+
+static int priv_mflua_otf_dump(lua_State *L) {
+ if (!lua_istable(L, -1)) {
+ fprintf(stderr, "! dump: expected a table\n");
+ lua_pop(L,1);
+ return 0;
+ } else {
+ /* table is in the stack at index '-1' */
+ size_t l=0;
+ int j;
+ char **av;
+
+ lua_len (L, -1);
+ l = (size_t)(lua_tonumber(L,-1));
+ lua_pop(L,1);
+ if (l==0 )
+ return 0;
+ av = malloc((l+1) * sizeof(char*));
+ if (av==NULL) {
+ fprintf(stderr, "! dump: unable to allocate av\n");
+ return 0;
+ }
+ av[0] = malloc((strlen("/dump")+1)*sizeof(char));
+ if (av[0]==NULL) {
+ fprintf(stderr, "! dump: unable to allocate av[0]\n");
+ return 0;
+ }
+ strcpy(av[0], "/dump");
+ /* fill the av array */
+ for(j=1;j<=l;j++){
+ const char *k;
+ lua_geti(L,-1,j);
+ k = lua_tostring(L, -1);
+ av[j] = malloc((strlen(k)+1)*sizeof(char));
+ if (av[j]==NULL) {
+ fprintf(stderr, "! dump: unable to allocate av[%d]\n",j);
+ return 0;
+ }
+ strcpy(av[j], k);
+ lua_pop(L,1);
+ }
+#if defined(NO_OTFCC)
+/* */
+#else
+ otfcc_dump(l+1,av);
+#endif
+ /* release the av */
+ free(av[0]);
+ for(j=1;j<=l;j++)
+ free(av[j]);
+ free(av);
+ return 0;
+ }
+}
+
+
+static int priv_mflua_otf_build(lua_State *L) {
+ if (!lua_istable(L, -1)) {
+ fprintf(stderr, "! build: expected a table\n");
+ lua_pop(L,1);
+ return 0;
+ } else {
+ /* table is in the stack at index '-1' */
+ size_t l=0;
+ int j;
+ char **av;
+
+ lua_len (L, -1);
+ l = (size_t)(lua_tonumber(L,-1)) ;
+ lua_pop(L,1);
+ if (l==0 )
+ return 0;
+ av = malloc((l+1) * sizeof(char*));
+ if (av==NULL) {
+ fprintf(stderr, "! build: unable to allocate av\n");
+ return 0;
+ }
+ av[0] = malloc((strlen("/build")+1)*sizeof(char));
+ if (av[0]==NULL) {
+ fprintf(stderr, "! build: unable to allocate av[0]\n");
+ return 0;
+ }
+ strcpy(av[0], "/build");
+ /* fill the av array */
+ for(j=1;j<=l;j++){
+ const char *k;
+ lua_geti(L,-1,j);
+ k = lua_tostring(L, -1);
+ av[j] = malloc((strlen(k)+1)*sizeof(char));
+ if (av[j]==NULL) {
+ fprintf(stderr, "! build: unable to allocate av[%d]\n",j);
+ return 0;
+ }
+ strcpy(av[j], k);
+ lua_pop(L,1);
+ }
+#if defined(NO_OTFCC)
+/* */
+#else
+ otfcc_build(l+1,av);
+#endif
+ /* release the av */
+ free(av[0]);
+ for(j=1;j<=l;j++)
+ free(av[j]);
+ free(av);
+ return 0;
+ }
+}
+
+
+
/**************************************************************/
/* */
/* mflua layer */
@@ -519,7 +678,13 @@
{NULL, NULL} /* sentinel */
};
+static struct luaL_Reg mflua_otfcc[] = {
+ { "build", priv_mflua_otf_build },
+ { "dump", priv_mflua_otf_dump },
+ { NULL, NULL}
+};
+
#define lua_swap(L) lua_insert(L, -2)
#define GETGLOBALTABLEMFLUA(a) lua_getglobal(L, "mflua");\
@@ -567,6 +732,17 @@
luaL_newlib(L,MFbuiltin_l);
#endif
lua_settable(L, -3);
+ /* set the otfcc table */
+ lua_pushstring(L,"otf");
+#ifdef MFLuaJIT
+ /* 5.1 */
+ lua_newtable(L);
+ luaL_register (L,NULL,mflua_otfcc);
+#else
+ luaL_newlib(L,mflua_otfcc);
+#endif
+ lua_settable(L, -3);
+
}
lua_pop(L,1);
}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,437 @@
+/* emyg_dtoa.c
+** Copyright (C) 2015 Doug Currie
+** based on dtoa_milo.h
+** Copyright (C) 2014 Milo Yip
+**
+** Permission is hereby granted, free of charge, to any person obtaining a copy
+** of this software and associated documentation files (the "Software"), to deal
+** in the Software without restriction, including without limitation the rights
+** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+** copies of the Software, and to permit persons to whom the Software is
+** furnished to do so, subject to the following conditions:
+**
+** The above copyright notice and this permission notice shall be included in
+** all copies or substantial portions of the Software.
+**
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+** THE SOFTWARE.
+*/
+
+/* This code is a mostly mechanical translation of Milo Yip's C++ version of
+** Grisu2 to C. For algorithm information, see Loitsch, Florian. "Printing
+** floating-point numbers quickly and accurately with integers." ACM Sigplan
+** Notices 45.6 (2010): 233-243.
+*/
+
+#include <assert.h>
+#include <math.h>
+
+#if defined(_MSC_VER)
+#include <intrin.h>
+#endif
+
+#include <stdint.h>
+
+#include <string.h>
+
+#include "emyg-dtoa.h"
+
+#define UINT64_C2(h, l) (((uint64_t)(h) << 32) | (uint64_t)(l))
+
+typedef struct DiyFp_s {
+ uint64_t f;
+ int e;
+} DiyFp;
+
+static const int kDiySignificandSize = 64;
+static const int kDpSignificandSize = 52;
+static const int kDpExponentBias = 0x3FF + 52;
+static const int kDpMinExponent = -0x3FF - 52;
+static const uint64_t kDpExponentMask = UINT64_C2(0x7FF00000, 0x00000000);
+static const uint64_t kDpSignificandMask = UINT64_C2(0x000FFFFF, 0xFFFFFFFF);
+static const uint64_t kDpHiddenBit = UINT64_C2(0x00100000, 0x00000000);
+
+static inline DiyFp DiyFp_from_parts(uint64_t f, int e) {
+ DiyFp fp;
+ fp.f = f;
+ fp.e = e;
+ return fp;
+}
+
+static inline DiyFp DiyFp_from_double(double d) {
+ union {
+ double d;
+ uint64_t u64;
+ } u = {d};
+ DiyFp res;
+
+ int biased_e = (int)((u.u64 & kDpExponentMask) >> kDpSignificandSize);
+ uint64_t significand = (u.u64 & kDpSignificandMask);
+ if (biased_e != 0) {
+ res.f = significand + kDpHiddenBit;
+ res.e = biased_e - kDpExponentBias;
+ } else {
+ res.f = significand;
+ res.e = kDpMinExponent + 1;
+ }
+ return res;
+}
+
+static inline DiyFp DiyFp_subtract(const DiyFp lhs, const DiyFp rhs) {
+ assert(lhs.e == rhs.e);
+ assert(lhs.f >= rhs.f);
+ return DiyFp_from_parts(lhs.f - rhs.f, lhs.e);
+}
+
+static inline DiyFp DiyFp_multiply(const DiyFp lhs, const DiyFp rhs) {
+#if defined(_MSC_VER) && defined(_M_AMD64) && !defined(__clang__)
+ uint64_t h;
+ uint64_t l = _umul128(lhs.f, rhs.f, &h);
+ if (l & ((uint64_t)(1) << 63)) { // rounding
+ h++;
+ }
+ return DiyFp_from_parts(h, lhs.e + rhs.e + 64);
+#elif (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && defined(__x86_64__) && !defined(_MSC_VER)
+ unsigned __int128 p = (unsigned __int128)(lhs.f) * (unsigned __int128)(rhs.f);
+ uint64_t h = p >> 64;
+ uint64_t l = (uint64_t)(p);
+ if (l & ((uint64_t)(1) << 63)) // rounding
+ h++;
+ return DiyFp_from_parts(h, lhs.e + rhs.e + 64);
+#else
+ const uint64_t M32 = 0xFFFFFFFF;
+ const uint64_t a = lhs.f >> 32;
+ const uint64_t b = lhs.f & M32;
+ const uint64_t c = rhs.f >> 32;
+ const uint64_t d = rhs.f & M32;
+ const uint64_t ac = a * c;
+ const uint64_t bc = b * c;
+ const uint64_t ad = a * d;
+ const uint64_t bd = b * d;
+ uint64_t tmp = (bd >> 32) + (ad & M32) + (bc & M32);
+ tmp += 1U << 31; /// mult_round
+ return DiyFp_from_parts(ac + (ad >> 32) + (bc >> 32) + (tmp >> 32), lhs.e + rhs.e + 64);
+#endif
+}
+
+static inline DiyFp Normalize(const DiyFp lhs) {
+#if defined(_MSC_VER) && defined(_M_AMD64) && !defined(__clang__)
+ unsigned long index;
+ _BitScanReverse64(&index, lhs.f);
+ return DiyFp_from_parts(lhs.f << (63 - index), lhs.e - (63 - index));
+#elif defined(__GNUC__) && !defined(_MSC_VER)
+ int s = __builtin_clzll(lhs.f);
+ return DiyFp_from_parts(lhs.f << s, lhs.e - s);
+#else
+ DiyFp res = lhs;
+ while (!(res.f & kDpHiddenBit)) {
+ res.f <<= 1;
+ res.e--;
+ }
+ res.f <<= (kDiySignificandSize - kDpSignificandSize - 1);
+ res.e = res.e - (kDiySignificandSize - kDpSignificandSize - 1);
+ return res;
+#endif
+}
+
+static inline DiyFp NormalizeBoundary(const DiyFp lhs) {
+#if defined(_MSC_VER) && defined(_M_AMD64) && !defined(__clang__)
+ unsigned long index;
+ _BitScanReverse64(&index, lhs.f);
+ return DiyFp_from_parts(lhs.f << (63 - index), lhs.e - (63 - index));
+#else
+ DiyFp res = lhs;
+ while (!(res.f & (kDpHiddenBit << 1))) {
+ res.f <<= 1;
+ res.e--;
+ }
+ res.f <<= (kDiySignificandSize - kDpSignificandSize - 2);
+ res.e = res.e - (kDiySignificandSize - kDpSignificandSize - 2);
+ return res;
+#endif
+}
+
+static inline void NormalizedBoundaries(DiyFp lhs, DiyFp *minus, DiyFp *plus) {
+ DiyFp pl = NormalizeBoundary(DiyFp_from_parts((lhs.f << 1) + 1, lhs.e - 1));
+ DiyFp mi = (lhs.f == kDpHiddenBit) ? DiyFp_from_parts((lhs.f << 2) - 1, lhs.e - 2)
+ : DiyFp_from_parts((lhs.f << 1) - 1, lhs.e - 1);
+ mi.f <<= mi.e - pl.e;
+ mi.e = pl.e;
+ *plus = pl;
+ *minus = mi;
+}
+
+static inline DiyFp GetCachedPower(int e, int *K) {
+ // 10^-348, 10^-340, ..., 10^340
+ static const uint64_t kCachedPowers_F[] = {
+ UINT64_C2(0xfa8fd5a0, 0x081c0288), UINT64_C2(0xbaaee17f, 0xa23ebf76), UINT64_C2(0x8b16fb20, 0x3055ac76),
+ UINT64_C2(0xcf42894a, 0x5dce35ea), UINT64_C2(0x9a6bb0aa, 0x55653b2d), UINT64_C2(0xe61acf03, 0x3d1a45df),
+ UINT64_C2(0xab70fe17, 0xc79ac6ca), UINT64_C2(0xff77b1fc, 0xbebcdc4f), UINT64_C2(0xbe5691ef, 0x416bd60c),
+ UINT64_C2(0x8dd01fad, 0x907ffc3c), UINT64_C2(0xd3515c28, 0x31559a83), UINT64_C2(0x9d71ac8f, 0xada6c9b5),
+ UINT64_C2(0xea9c2277, 0x23ee8bcb), UINT64_C2(0xaecc4991, 0x4078536d), UINT64_C2(0x823c1279, 0x5db6ce57),
+ UINT64_C2(0xc2109436, 0x4dfb5637), UINT64_C2(0x9096ea6f, 0x3848984f), UINT64_C2(0xd77485cb, 0x25823ac7),
+ UINT64_C2(0xa086cfcd, 0x97bf97f4), UINT64_C2(0xef340a98, 0x172aace5), UINT64_C2(0xb23867fb, 0x2a35b28e),
+ UINT64_C2(0x84c8d4df, 0xd2c63f3b), UINT64_C2(0xc5dd4427, 0x1ad3cdba), UINT64_C2(0x936b9fce, 0xbb25c996),
+ UINT64_C2(0xdbac6c24, 0x7d62a584), UINT64_C2(0xa3ab6658, 0x0d5fdaf6), UINT64_C2(0xf3e2f893, 0xdec3f126),
+ UINT64_C2(0xb5b5ada8, 0xaaff80b8), UINT64_C2(0x87625f05, 0x6c7c4a8b), UINT64_C2(0xc9bcff60, 0x34c13053),
+ UINT64_C2(0x964e858c, 0x91ba2655), UINT64_C2(0xdff97724, 0x70297ebd), UINT64_C2(0xa6dfbd9f, 0xb8e5b88f),
+ UINT64_C2(0xf8a95fcf, 0x88747d94), UINT64_C2(0xb9447093, 0x8fa89bcf), UINT64_C2(0x8a08f0f8, 0xbf0f156b),
+ UINT64_C2(0xcdb02555, 0x653131b6), UINT64_C2(0x993fe2c6, 0xd07b7fac), UINT64_C2(0xe45c10c4, 0x2a2b3b06),
+ UINT64_C2(0xaa242499, 0x697392d3), UINT64_C2(0xfd87b5f2, 0x8300ca0e), UINT64_C2(0xbce50864, 0x92111aeb),
+ UINT64_C2(0x8cbccc09, 0x6f5088cc), UINT64_C2(0xd1b71758, 0xe219652c), UINT64_C2(0x9c400000, 0x00000000),
+ UINT64_C2(0xe8d4a510, 0x00000000), UINT64_C2(0xad78ebc5, 0xac620000), UINT64_C2(0x813f3978, 0xf8940984),
+ UINT64_C2(0xc097ce7b, 0xc90715b3), UINT64_C2(0x8f7e32ce, 0x7bea5c70), UINT64_C2(0xd5d238a4, 0xabe98068),
+ UINT64_C2(0x9f4f2726, 0x179a2245), UINT64_C2(0xed63a231, 0xd4c4fb27), UINT64_C2(0xb0de6538, 0x8cc8ada8),
+ UINT64_C2(0x83c7088e, 0x1aab65db), UINT64_C2(0xc45d1df9, 0x42711d9a), UINT64_C2(0x924d692c, 0xa61be758),
+ UINT64_C2(0xda01ee64, 0x1a708dea), UINT64_C2(0xa26da399, 0x9aef774a), UINT64_C2(0xf209787b, 0xb47d6b85),
+ UINT64_C2(0xb454e4a1, 0x79dd1877), UINT64_C2(0x865b8692, 0x5b9bc5c2), UINT64_C2(0xc83553c5, 0xc8965d3d),
+ UINT64_C2(0x952ab45c, 0xfa97a0b3), UINT64_C2(0xde469fbd, 0x99a05fe3), UINT64_C2(0xa59bc234, 0xdb398c25),
+ UINT64_C2(0xf6c69a72, 0xa3989f5c), UINT64_C2(0xb7dcbf53, 0x54e9bece), UINT64_C2(0x88fcf317, 0xf22241e2),
+ UINT64_C2(0xcc20ce9b, 0xd35c78a5), UINT64_C2(0x98165af3, 0x7b2153df), UINT64_C2(0xe2a0b5dc, 0x971f303a),
+ UINT64_C2(0xa8d9d153, 0x5ce3b396), UINT64_C2(0xfb9b7cd9, 0xa4a7443c), UINT64_C2(0xbb764c4c, 0xa7a44410),
+ UINT64_C2(0x8bab8eef, 0xb6409c1a), UINT64_C2(0xd01fef10, 0xa657842c), UINT64_C2(0x9b10a4e5, 0xe9913129),
+ UINT64_C2(0xe7109bfb, 0xa19c0c9d), UINT64_C2(0xac2820d9, 0x623bf429), UINT64_C2(0x80444b5e, 0x7aa7cf85),
+ UINT64_C2(0xbf21e440, 0x03acdd2d), UINT64_C2(0x8e679c2f, 0x5e44ff8f), UINT64_C2(0xd433179d, 0x9c8cb841),
+ UINT64_C2(0x9e19db92, 0xb4e31ba9), UINT64_C2(0xeb96bf6e, 0xbadf77d9), UINT64_C2(0xaf87023b, 0x9bf0ee6b)};
+ static const int16_t kCachedPowers_E[] = {
+ -1220, -1193, -1166, -1140, -1113, -1087, -1060, -1034, -1007, -980, -954, -927, -901, -874, -847,
+ -821, -794, -768, -741, -715, -688, -661, -635, -608, -582, -555, -529, -502, -475, -449,
+ -422, -396, -369, -343, -316, -289, -263, -236, -210, -183, -157, -130, -103, -77, -50,
+ -24, 3, 30, 56, 83, 109, 136, 162, 189, 216, 242, 269, 295, 322, 348,
+ 375, 402, 428, 455, 481, 508, 534, 561, 588, 614, 641, 667, 694, 720, 747,
+ 774, 800, 827, 853, 880, 907, 933, 960, 986, 1013, 1039, 1066};
+
+ // int k = (int )(ceil((-61 - e) * 0.30102999566398114)) + 374;
+ double dk = (-61 - e) * 0.30102999566398114 + 347; // dk must be positive, so can do ceiling in positive
+ int k = (int)(dk);
+ if (k != dk) k++;
+
+ unsigned index = (unsigned)((k >> 3) + 1);
+ *K = -(-348 + (int)(index << 3)); // decimal exponent no need lookup table
+
+ assert(index < sizeof(kCachedPowers_F) / sizeof(kCachedPowers_F[0]));
+ return DiyFp_from_parts(kCachedPowers_F[index], kCachedPowers_E[index]);
+}
+
+static inline void GrisuRound(char *buffer, int len, uint64_t delta, uint64_t rest, uint64_t ten_kappa, uint64_t wp_w) {
+ while (rest < wp_w && delta - rest >= ten_kappa && (rest + ten_kappa < wp_w || /// closer
+ wp_w - rest > rest + ten_kappa - wp_w)) {
+ buffer[len - 1]--;
+ rest += ten_kappa;
+ }
+}
+
+static inline unsigned CountDecimalDigit32(uint32_t n) {
+ // Simple pure C++ implementation was faster than __builtin_clz version in this situation.
+ if (n < 10) return 1;
+ if (n < 100) return 2;
+ if (n < 1000) return 3;
+ if (n < 10000) return 4;
+ if (n < 100000) return 5;
+ if (n < 1000000) return 6;
+ if (n < 10000000) return 7;
+ if (n < 100000000) return 8;
+ if (n < 1000000000) return 9;
+ return 10;
+}
+
+static inline void DigitGen(const DiyFp W, const DiyFp Mp, uint64_t delta, char *buffer, int *len, int *K) {
+ static const uint32_t kPow10[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
+ const DiyFp one = DiyFp_from_parts((uint64_t)(1) << -Mp.e, Mp.e);
+ const DiyFp wp_w = DiyFp_subtract(Mp, W);
+ uint32_t p1 = (uint32_t)(Mp.f >> -one.e);
+ uint64_t p2 = Mp.f & (one.f - 1);
+ int kappa = (int)(CountDecimalDigit32(p1));
+ *len = 0;
+
+ while (kappa > 0) {
+ uint32_t d = 0;
+ switch (kappa) {
+ case 10:
+ d = p1 / 1000000000;
+ p1 %= 1000000000;
+ break;
+ case 9:
+ d = p1 / 100000000;
+ p1 %= 100000000;
+ break;
+ case 8:
+ d = p1 / 10000000;
+ p1 %= 10000000;
+ break;
+ case 7:
+ d = p1 / 1000000;
+ p1 %= 1000000;
+ break;
+ case 6:
+ d = p1 / 100000;
+ p1 %= 100000;
+ break;
+ case 5:
+ d = p1 / 10000;
+ p1 %= 10000;
+ break;
+ case 4:
+ d = p1 / 1000;
+ p1 %= 1000;
+ break;
+ case 3:
+ d = p1 / 100;
+ p1 %= 100;
+ break;
+ case 2:
+ d = p1 / 10;
+ p1 %= 10;
+ break;
+ case 1:
+ d = p1;
+ p1 = 0;
+ break;
+ default:
+#if defined(_MSC_VER)
+ __assume(0);
+#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+ __builtin_unreachable();
+#else
+ d = 0;
+#endif
+ }
+ if (d || *len) buffer[(*len)++] = '0' + (char)(d);
+ kappa--;
+ uint64_t tmp = ((uint64_t)(p1) << -one.e) + p2;
+ if (tmp <= delta) {
+ *K += kappa;
+ GrisuRound(buffer, *len, delta, tmp, (uint64_t)(kPow10[kappa]) << -one.e, wp_w.f);
+ return;
+ }
+ }
+
+ // kappa = 0
+ for (;;) {
+ p2 *= 10;
+ delta *= 10;
+ char d = (char)(p2 >> -one.e);
+ if (d || *len) buffer[(*len)++] = '0' + d;
+ p2 &= one.f - 1;
+ kappa--;
+ if (p2 < delta) {
+ *K += kappa;
+ GrisuRound(buffer, *len, delta, p2, one.f, wp_w.f * kPow10[-kappa]);
+ return;
+ }
+ }
+}
+
+static inline void Grisu2(double value, char *buffer, int *length, int *K) {
+ const DiyFp v = DiyFp_from_double(value);
+ DiyFp w_m, w_p;
+ NormalizedBoundaries(v, &w_m, &w_p);
+
+ const DiyFp c_mk = GetCachedPower(w_p.e, K);
+ const DiyFp W = DiyFp_multiply(Normalize(v), c_mk);
+ DiyFp Wp = DiyFp_multiply(w_p, c_mk);
+ DiyFp Wm = DiyFp_multiply(w_m, c_mk);
+ Wm.f++;
+ Wp.f--;
+ DigitGen(W, Wp, Wp.f - Wm.f, buffer, length, K);
+}
+
+static inline const char *GetDigitsLut() {
+ static const char cDigitsLut[200] = {
+ '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9',
+ '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9',
+ '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9',
+ '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', '9',
+ '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8', '4', '9',
+ '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9',
+ '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9',
+ '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9',
+ '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9',
+ '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7', '9', '8', '9', '9'};
+ return cDigitsLut;
+}
+
+static inline void WriteExponent(int K, char *buffer) {
+ if (K < 0) {
+ *buffer++ = '-';
+ K = -K;
+ }
+
+ if (K >= 100) {
+ *buffer++ = '0' + (char)(K / 100);
+ K %= 100;
+ const char *d = GetDigitsLut() + K * 2;
+ *buffer++ = d[0];
+ *buffer++ = d[1];
+ } else if (K >= 10) {
+ const char *d = GetDigitsLut() + K * 2;
+ *buffer++ = d[0];
+ *buffer++ = d[1];
+ } else
+ *buffer++ = '0' + (char)(K);
+
+ *buffer = '\0';
+}
+
+static inline void Prettify(char *buffer, int length, int k) {
+ const int kk = length + k; // 10^(kk-1) <= v < 10^kk
+
+ if (length <= kk && kk <= 21) {
+ // 1234e7 -> 12340000000
+ for (int i = length; i < kk; i++)
+ buffer[i] = '0';
+ buffer[kk] = '.';
+ buffer[kk + 1] = '0';
+ buffer[kk + 2] = '\0';
+ } else if (0 < kk && kk <= 21) {
+ // 1234e-2 -> 12.34
+ memmove(&buffer[kk + 1], &buffer[kk], length - kk);
+ buffer[kk] = '.';
+ buffer[length + 1] = '\0';
+ } else if (-6 < kk && kk <= 0) {
+ // 1234e-6 -> 0.001234
+ const int offset = 2 - kk;
+ memmove(&buffer[offset], &buffer[0], length);
+ buffer[0] = '0';
+ buffer[1] = '.';
+ for (int i = 2; i < offset; i++)
+ buffer[i] = '0';
+ buffer[length + offset] = '\0';
+ } else if (length == 1) {
+ // 1e30
+ buffer[1] = 'e';
+ WriteExponent(kk - 1, &buffer[2]);
+ } else {
+ // 1234e30 -> 1.234e33
+ memmove(&buffer[2], &buffer[1], length - 1);
+ buffer[1] = '.';
+ buffer[length + 1] = 'e';
+ WriteExponent(kk - 1, &buffer[0 + length + 2]);
+ }
+}
+
+void emyg_dtoa(double value, char *buffer) {
+ // Not handling NaN and inf
+ assert(!isnan(value));
+ assert(!isinf(value));
+
+ if (value == 0) {
+ buffer[0] = '0';
+ buffer[1] = '.';
+ buffer[2] = '0';
+ buffer[3] = '\0';
+ } else {
+ if (value < 0) {
+ *buffer++ = '-';
+ value = -value;
+ }
+ int length, K;
+ Grisu2(value, buffer, &length, &K);
+ Prettify(buffer, length, K);
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,6 @@
+#ifndef CARYLL_DEP_EMYG_DTOA_H
+#define CARYLL_DEP_EMYG_DTOA_H
+
+void emyg_dtoa(double value, char *buffer);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json-builder.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json-builder.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json-builder.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,889 @@
+
+/* vim: set et ts=3 sw=3 sts=3 ft=c:
+ *
+ * Copyright (C) 2014 James McLaughlin. All rights reserved.
+ * https://github.com/udp/json-builder
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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 "json-builder.h"
+#include "emyg-dtoa/emyg-dtoa.h"
+
+#include <string.h>
+#include <assert.h>
+#include <stdio.h>
+#include <math.h>
+
+#ifdef _MSC_VER
+#define snprintf _snprintf
+#endif
+
+const static json_serialize_opts default_opts = {
+ json_serialize_mode_single_line, 0, 3 /* indent_size */
+};
+
+typedef struct json_builder_value {
+ json_value value;
+
+ int is_builder_value;
+
+ size_t additional_length_allocated;
+ size_t length_iterated;
+
+} json_builder_value;
+
+static int builderize(json_value *value) {
+ if (((json_builder_value *)value)->is_builder_value) return 1;
+
+ if (value->type == json_object) {
+ unsigned int i;
+
+ /* Values straight out of the parser have the names of object entries
+ * allocated in the same allocation as the values array itself. This is
+ * not desirable when manipulating values because the names would be easy
+ * to clobber.
+ */
+ for (i = 0; i < value->u.object.length; ++i) {
+ json_char *name_copy;
+ json_object_entry *entry = &value->u.object.values[i];
+
+ if (!(name_copy = (json_char *)malloc((entry->name_length + 1) * sizeof(json_char)))) return 0;
+
+ memcpy(name_copy, entry->name, entry->name_length + 1);
+ entry->name = name_copy;
+ }
+ }
+
+ ((json_builder_value *)value)->is_builder_value = 1;
+
+ return 1;
+}
+
+const size_t json_builder_extra = sizeof(json_builder_value) - sizeof(json_value);
+
+/* These flags are set up from the opts before serializing to make the
+ * serializer conditions simpler.
+ */
+const int f_spaces_around_brackets = (1 << 0);
+const int f_spaces_after_commas = (1 << 1);
+const int f_spaces_after_colons = (1 << 2);
+const int f_tabs = (1 << 3);
+
+static int get_serialize_flags(json_serialize_opts opts) {
+ int flags = 0;
+
+ if (opts.mode == json_serialize_mode_packed) return 0;
+
+ if (opts.mode == json_serialize_mode_multiline) {
+ if (opts.opts & json_serialize_opt_use_tabs) flags |= f_tabs;
+ } else {
+ if (!(opts.opts & json_serialize_opt_pack_brackets)) flags |= f_spaces_around_brackets;
+
+ if (!(opts.opts & json_serialize_opt_no_space_after_comma)) flags |= f_spaces_after_commas;
+ }
+
+ if (!(opts.opts & json_serialize_opt_no_space_after_colon)) flags |= f_spaces_after_colons;
+
+ return flags;
+}
+
+json_value *json_array_new(size_t length) {
+ json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+ if (!value) return NULL;
+
+ ((json_builder_value *)value)->is_builder_value = 1;
+
+ value->type = json_array;
+
+ if (!(value->u.array.values = (json_value **)malloc(length * sizeof(json_value *)))) {
+ free(value);
+ return NULL;
+ }
+
+ ((json_builder_value *)value)->additional_length_allocated = length;
+
+ return value;
+}
+
+json_value *json_array_push(json_value *array, json_value *value) {
+ assert(array->type == json_array);
+
+ if (!builderize(array) || !builderize(value)) return NULL;
+
+ if (((json_builder_value *)array)->additional_length_allocated > 0) {
+ --((json_builder_value *)array)->additional_length_allocated;
+ } else {
+ json_value **values_new =
+ (json_value **)realloc(array->u.array.values, sizeof(json_value *) * (array->u.array.length + 1));
+
+ if (!values_new) return NULL;
+
+ array->u.array.values = values_new;
+ }
+
+ array->u.array.values[array->u.array.length] = value;
+ ++array->u.array.length;
+
+ value->parent = array;
+
+ return value;
+}
+
+json_value *json_object_new(size_t length) {
+ json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+ if (!value) return NULL;
+
+ ((json_builder_value *)value)->is_builder_value = 1;
+
+ value->type = json_object;
+
+ if (!(value->u.object.values = (json_object_entry *)calloc(length, sizeof(*value->u.object.values)))) {
+ free(value);
+ return NULL;
+ }
+
+ ((json_builder_value *)value)->additional_length_allocated = length;
+
+ return value;
+}
+
+json_value *json_object_push(json_value *object, const json_char *name, json_value *value) {
+ return json_object_push_length(object, strlen(name), name, value);
+}
+
+json_value *json_object_push_length(json_value *object, unsigned int name_length, const json_char *name,
+ json_value *value) {
+ json_char *name_copy;
+
+ assert(object->type == json_object);
+
+ if (!(name_copy = (json_char *)malloc((name_length + 1) * sizeof(json_char)))) return NULL;
+
+ memcpy(name_copy, name, name_length * sizeof(json_char));
+ name_copy[name_length] = 0;
+
+ if (!json_object_push_nocopy(object, name_length, name_copy, value)) {
+ free(name_copy);
+ return NULL;
+ }
+
+ return value;
+}
+
+json_value *json_object_push_nocopy(json_value *object, unsigned int name_length, json_char *name, json_value *value) {
+ json_object_entry *entry;
+
+ assert(object->type == json_object);
+
+ if (!builderize(object) || !builderize(value)) return NULL;
+
+ if (((json_builder_value *)object)->additional_length_allocated > 0) {
+ --((json_builder_value *)object)->additional_length_allocated;
+ } else {
+ json_object_entry *values_new = (json_object_entry *)realloc(
+ object->u.object.values, sizeof(*object->u.object.values) * (object->u.object.length + 1));
+
+ if (!values_new) return NULL;
+
+ object->u.object.values = values_new;
+ }
+
+ entry = object->u.object.values + object->u.object.length;
+
+ entry->name_length = name_length;
+ entry->name = name;
+ entry->value = value;
+
+ ++object->u.object.length;
+
+ value->parent = object;
+
+ return value;
+}
+
+json_value *json_string_new(const json_char *buf) {
+ return json_string_new_length(strlen(buf), buf);
+}
+
+json_value *json_string_new_length(unsigned int length, const json_char *buf) {
+ json_value *value;
+ json_char *copy = (json_char *)malloc((length + 1) * sizeof(json_char));
+
+ if (!copy) return NULL;
+
+ memcpy(copy, buf, length * sizeof(json_char));
+ copy[length] = 0;
+
+ if (!(value = json_string_new_nocopy(length, copy))) {
+ free(copy);
+ return NULL;
+ }
+
+ return value;
+}
+
+json_value *json_string_new_nocopy(unsigned int length, json_char *buf) {
+ json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+ if (!value) return NULL;
+
+ ((json_builder_value *)value)->is_builder_value = 1;
+
+ value->type = json_string;
+ value->u.string.length = length;
+ value->u.string.ptr = buf;
+
+ return value;
+}
+
+json_value *json_integer_new(json_int_t integer) {
+ json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+ if (!value) return NULL;
+
+ ((json_builder_value *)value)->is_builder_value = 1;
+
+ value->type = json_integer;
+ value->u.integer = integer;
+
+ return value;
+}
+
+json_value *json_double_new(double dbl) {
+ json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+ if (!value) return NULL;
+
+ ((json_builder_value *)value)->is_builder_value = 1;
+
+ value->type = json_double;
+ value->u.dbl = dbl;
+
+ return value;
+}
+
+json_value *json_boolean_new(int b) {
+ json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+ if (!value) return NULL;
+
+ ((json_builder_value *)value)->is_builder_value = 1;
+
+ value->type = json_boolean;
+ value->u.boolean = b;
+
+ return value;
+}
+
+json_value *json_null_new(void) {
+ json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+ if (!value) return NULL;
+
+ ((json_builder_value *)value)->is_builder_value = 1;
+
+ value->type = json_null;
+
+ return value;
+}
+
+void json_object_sort(json_value *object, json_value *proto) {
+ unsigned int i, out_index = 0;
+
+ if (!builderize(object)) return; /* TODO error */
+
+ assert(object->type == json_object);
+ assert(proto->type == json_object);
+
+ for (i = 0; i < proto->u.object.length; ++i) {
+ unsigned int j;
+ json_object_entry proto_entry = proto->u.object.values[i];
+
+ for (j = 0; j < object->u.object.length; ++j) {
+ json_object_entry entry = object->u.object.values[j];
+
+ if (entry.name_length != proto_entry.name_length) continue;
+
+ if (memcmp(entry.name, proto_entry.name, entry.name_length) != 0) continue;
+
+ object->u.object.values[j] = object->u.object.values[out_index];
+ object->u.object.values[out_index] = entry;
+
+ ++out_index;
+ }
+ }
+}
+
+json_value *json_object_merge(json_value *objectA, json_value *objectB) {
+ unsigned int i;
+
+ assert(objectA->type == json_object);
+ assert(objectB->type == json_object);
+ assert(objectA != objectB);
+
+ if (!builderize(objectA) || !builderize(objectB)) return NULL;
+
+ if (objectB->u.object.length <= ((json_builder_value *)objectA)->additional_length_allocated) {
+ ((json_builder_value *)objectA)->additional_length_allocated -= objectB->u.object.length;
+ } else {
+ json_object_entry *values_new;
+
+ unsigned int alloc = objectA->u.object.length + ((json_builder_value *)objectA)->additional_length_allocated +
+ objectB->u.object.length;
+
+ if (!(values_new = (json_object_entry *)realloc(objectA->u.object.values, sizeof(json_object_entry) * alloc))) {
+ return NULL;
+ }
+
+ objectA->u.object.values = values_new;
+ }
+
+ for (i = 0; i < objectB->u.object.length; ++i) {
+ json_object_entry *entry = &objectA->u.object.values[objectA->u.object.length + i];
+
+ *entry = objectB->u.object.values[i];
+ entry->value->parent = objectA;
+ }
+
+ objectA->u.object.length += objectB->u.object.length;
+
+ free(objectB->u.object.values);
+ free(objectB);
+
+ return objectA;
+}
+
+static size_t measure_string(unsigned int length, const json_char *str) {
+ unsigned int i;
+ size_t measured_length = 0;
+
+ for (i = 0; i < length; ++i) {
+ json_char c = str[i];
+
+ switch (c) {
+ case 0:
+ case 0xb:
+ measured_length += 6;
+ break;
+ case '"':
+ case '\\':
+ case '\b':
+ case '\f':
+ case '\n':
+ case '\r':
+ case '\t':
+
+ measured_length += 2;
+ break;
+
+ default:
+
+ ++measured_length;
+ break;
+ };
+ };
+
+ return measured_length;
+}
+
+#define PRINT_ESCAPED(c) \
+ do { \
+ *buf++ = '\\'; \
+ *buf++ = (c); \
+ } while (0);
+
+static size_t serialize_string(json_char *buf, unsigned int length, const json_char *str) {
+ json_char *orig_buf = buf;
+ unsigned int i;
+
+ for (i = 0; i < length; ++i) {
+ json_char c = str[i];
+
+ switch (c) {
+ case 0:
+ *buf++ = '\\';
+ *buf++ = 'u';
+ *buf++ = '0';
+ *buf++ = '0';
+ *buf++ = '0';
+ *buf++ = '0';
+ continue;
+ case '"':
+ PRINT_ESCAPED('\"');
+ continue;
+ case '\\':
+ PRINT_ESCAPED('\\');
+ continue;
+ case '\b':
+ PRINT_ESCAPED('b');
+ continue;
+ case '\f':
+ PRINT_ESCAPED('f');
+ continue;
+ case '\n':
+ PRINT_ESCAPED('n');
+ continue;
+ case '\r':
+ PRINT_ESCAPED('r');
+ continue;
+ case '\t':
+ PRINT_ESCAPED('t');
+ continue;
+ case 0xb:
+ *buf++ = '\\';
+ *buf++ = 'u';
+ *buf++ = '0';
+ *buf++ = '0';
+ *buf++ = '0';
+ *buf++ = 'b';
+ continue;
+
+ default:
+
+ *buf++ = c;
+ break;
+ };
+ };
+
+ return buf - orig_buf;
+}
+
+size_t json_measure(json_value *value) {
+ return json_measure_ex(value, default_opts);
+}
+
+#define MEASURE_NEWLINE() \
+ do { \
+ ++newlines; \
+ indents += depth; \
+ } while (0);
+
+size_t json_measure_ex(json_value *value, json_serialize_opts opts) {
+ size_t total = 1; /* null terminator */
+ size_t newlines = 0;
+ size_t depth = 0;
+ size_t indents = 0;
+ int flags;
+ int bracket_size, comma_size, colon_size;
+
+ flags = get_serialize_flags(opts);
+
+ /* to reduce branching
+ */
+ bracket_size = flags & f_spaces_around_brackets ? 2 : 1;
+ comma_size = flags & f_spaces_after_commas ? 2 : 1;
+ colon_size = flags & f_spaces_after_colons ? 2 : 1;
+
+ while (value) {
+ json_int_t integer;
+ json_object_entry *entry;
+
+ switch (value->type) {
+ case json_array:
+
+ if (((json_builder_value *)value)->length_iterated == 0) {
+ if (value->u.array.length == 0) {
+ total += 2; /* `[]` */
+ break;
+ }
+
+ total += bracket_size; /* `[` */
+
+ ++depth;
+ MEASURE_NEWLINE(); /* \n after [ */
+ }
+
+ if (((json_builder_value *)value)->length_iterated == value->u.array.length) {
+ --depth;
+ MEASURE_NEWLINE();
+ total += bracket_size; /* `]` */
+
+ ((json_builder_value *)value)->length_iterated = 0;
+ break;
+ }
+
+ if (((json_builder_value *)value)->length_iterated > 0) {
+ total += comma_size; /* `, ` */
+
+ MEASURE_NEWLINE();
+ }
+
+ ((json_builder_value *)value)->length_iterated++;
+ value = value->u.array.values[((json_builder_value *)value)->length_iterated - 1];
+ continue;
+
+ case json_object:
+
+ if (((json_builder_value *)value)->length_iterated == 0) {
+ if (value->u.object.length == 0) {
+ total += 2; /* `{}` */
+ break;
+ }
+
+ total += bracket_size; /* `{` */
+
+ ++depth;
+ MEASURE_NEWLINE(); /* \n after { */
+ }
+
+ if (((json_builder_value *)value)->length_iterated == value->u.object.length) {
+ --depth;
+ MEASURE_NEWLINE();
+ total += bracket_size; /* `}` */
+
+ ((json_builder_value *)value)->length_iterated = 0;
+ break;
+ }
+
+ if (((json_builder_value *)value)->length_iterated > 0) {
+ total += comma_size; /* `, ` */
+ MEASURE_NEWLINE();
+ }
+
+ entry = value->u.object.values + (((json_builder_value *)value)->length_iterated++);
+
+ total += 2 + colon_size; /* `"": ` */
+ total += measure_string(entry->name_length, entry->name);
+
+ value = entry->value;
+ continue;
+#ifdef CARYLL_USE_PRE_SERIALIZED
+ case json_pre_serialized:
+
+ total += value->u.string.length;
+ break;
+#endif
+ case json_string:
+ total += 2; /* `""` */
+ total += measure_string(value->u.string.length, value->u.string.ptr);
+ break;
+
+ case json_integer:
+
+ integer = value->u.integer;
+
+ if (integer < 0) {
+ total += 1; /* `-` */
+ integer = -integer;
+ }
+
+ ++total; /* first digit */
+
+ while (integer >= 10) {
+ ++total; /* another digit */
+ integer /= 10;
+ }
+
+ break;
+
+ case json_double: {
+ char buffer[256];
+ emyg_dtoa(value->u.dbl, buffer);
+ total += strlen(buffer);
+ break;
+ }
+
+ case json_boolean:
+
+ total += value->u.boolean ? 4 : /* `true` */
+ 5; /* `false` */
+
+ break;
+
+ case json_null:
+
+ total += 4; /* `null` */
+ break;
+
+ default:
+ break;
+ };
+
+ value = value->parent;
+ }
+
+ if (opts.mode == json_serialize_mode_multiline) {
+ total += newlines * (((opts.opts & json_serialize_opt_CRLF) ? 2 : 1) + opts.indent_size);
+ total += indents * opts.indent_size;
+ }
+
+ return total;
+}
+
+void json_serialize(json_char *buf, json_value *value) {
+ json_serialize_ex(buf, value, default_opts);
+}
+
+#define PRINT_NEWLINE() \
+ do { \
+ if (opts.mode == json_serialize_mode_multiline) { \
+ if (opts.opts & json_serialize_opt_CRLF) *buf++ = '\r'; \
+ *buf++ = '\n'; \
+ for (i = 0; i < indent; ++i) \
+ *buf++ = indent_char; \
+ } \
+ } while (0);
+
+#define PRINT_OPENING_BRACKET(c) \
+ do { \
+ *buf++ = (c); \
+ if (flags & f_spaces_around_brackets) *buf++ = ' '; \
+ } while (0);
+
+#define PRINT_CLOSING_BRACKET(c) \
+ do { \
+ if (flags & f_spaces_around_brackets) *buf++ = ' '; \
+ *buf++ = (c); \
+ } while (0);
+
+void json_serialize_ex(json_char *buf, json_value *value, json_serialize_opts opts) {
+ json_int_t integer, orig_integer;
+ json_object_entry *entry;
+ json_char *ptr;
+ int indent = 0;
+ char indent_char;
+ int i;
+ int flags;
+
+ flags = get_serialize_flags(opts);
+
+ indent_char = flags & f_tabs ? '\t' : ' ';
+
+ while (value) {
+ switch (value->type) {
+ case json_array:
+
+ if (((json_builder_value *)value)->length_iterated == 0) {
+ if (value->u.array.length == 0) {
+ *buf++ = '[';
+ *buf++ = ']';
+
+ break;
+ }
+
+ PRINT_OPENING_BRACKET('[');
+
+ indent += opts.indent_size;
+ PRINT_NEWLINE();
+ }
+
+ if (((json_builder_value *)value)->length_iterated == value->u.array.length) {
+ indent -= opts.indent_size;
+ PRINT_NEWLINE();
+ PRINT_CLOSING_BRACKET(']');
+
+ ((json_builder_value *)value)->length_iterated = 0;
+ break;
+ }
+
+ if (((json_builder_value *)value)->length_iterated > 0) {
+ *buf++ = ',';
+
+ if (flags & f_spaces_after_commas) *buf++ = ' ';
+
+ PRINT_NEWLINE();
+ }
+
+ ((json_builder_value *)value)->length_iterated++;
+ value = value->u.array.values[((json_builder_value *)value)->length_iterated - 1];
+ continue;
+
+ case json_object:
+
+ if (((json_builder_value *)value)->length_iterated == 0) {
+ if (value->u.object.length == 0) {
+ *buf++ = '{';
+ *buf++ = '}';
+
+ break;
+ }
+
+ PRINT_OPENING_BRACKET('{');
+
+ indent += opts.indent_size;
+ PRINT_NEWLINE();
+ }
+
+ if (((json_builder_value *)value)->length_iterated == value->u.object.length) {
+ indent -= opts.indent_size;
+ PRINT_NEWLINE();
+ PRINT_CLOSING_BRACKET('}');
+
+ ((json_builder_value *)value)->length_iterated = 0;
+ break;
+ }
+
+ if (((json_builder_value *)value)->length_iterated > 0) {
+ *buf++ = ',';
+
+ if (flags & f_spaces_after_commas) *buf++ = ' ';
+
+ PRINT_NEWLINE();
+ }
+
+ entry = value->u.object.values + (((json_builder_value *)value)->length_iterated++);
+
+ *buf++ = '\"';
+ buf += serialize_string(buf, entry->name_length, entry->name);
+ *buf++ = '\"';
+ *buf++ = ':';
+
+ if (flags & f_spaces_after_colons) *buf++ = ' ';
+
+ value = entry->value;
+ continue;
+#ifdef CARYLL_USE_PRE_SERIALIZED
+ case json_pre_serialized:
+ memcpy(buf, value->u.string.ptr, value->u.string.length);
+ buf += value->u.string.length;
+ break;
+#endif
+ case json_string:
+
+ *buf++ = '\"';
+ buf += serialize_string(buf, value->u.string.length, value->u.string.ptr);
+ *buf++ = '\"';
+ break;
+
+ case json_integer:
+
+ integer = value->u.integer;
+
+ if (integer < 0) {
+ *buf++ = '-';
+ integer = -integer;
+ }
+
+ orig_integer = integer;
+
+ ++buf;
+
+ while (integer >= 10) {
+ ++buf;
+ integer /= 10;
+ }
+
+ integer = orig_integer;
+ ptr = buf;
+
+ do {
+ *--ptr = "0123456789"[integer % 10];
+ } while ((integer /= 10) > 0);
+
+ break;
+
+ case json_double: {
+ char tmp[256];
+ emyg_dtoa(value->u.dbl, tmp);
+ memcpy(buf, tmp, strlen(tmp));
+ buf += strlen(tmp);
+ break;
+ }
+
+ case json_boolean:
+
+ if (value->u.boolean) {
+ memcpy(buf, "true", 4);
+ buf += 4;
+ } else {
+ memcpy(buf, "false", 5);
+ buf += 5;
+ }
+
+ break;
+
+ case json_null:
+
+ memcpy(buf, "null", 4);
+ buf += 4;
+ break;
+
+ default:
+ break;
+ };
+
+ value = value->parent;
+ }
+
+ *buf = 0;
+}
+
+void json_builder_free(json_value *value) {
+ json_value *cur_value;
+
+ if (!value) return;
+
+ value->parent = 0;
+
+ while (value) {
+ switch (value->type) {
+ case json_array:
+
+ if (!value->u.array.length) {
+ free(value->u.array.values);
+ break;
+ }
+
+ value = value->u.array.values[--value->u.array.length];
+ continue;
+
+ case json_object:
+
+ if (!value->u.object.length) {
+ free(value->u.object.values);
+ break;
+ }
+
+ --value->u.object.length;
+
+ if (((json_builder_value *)value)->is_builder_value) {
+ /* Names are allocated separately for builder values. In parser
+ * values, they are part of the same allocation as the values array
+ * itself.
+ */
+ free(value->u.object.values[value->u.object.length].name);
+ }
+
+ value = value->u.object.values[value->u.object.length].value;
+ continue;
+
+ case json_string:
+#ifdef CARYLL_USE_PRE_SERIALIZED
+ case json_pre_serialized:
+#endif
+ free(value->u.string.ptr);
+ break;
+
+ default:
+ break;
+ };
+
+ cur_value = value;
+ value = value->parent;
+ free(cur_value);
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,1039 @@
+/* vim: set et ts=3 sw=3 sts=3 ft=c:
+ *
+ * Copyright (C) 2012, 2013, 2014 James McLaughlin et al. All rights reserved.
+ * https://github.com/udp/json-parser
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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 "json.h"
+
+#ifdef _MSC_VER
+ #ifndef _CRT_SECURE_NO_WARNINGS
+ #define _CRT_SECURE_NO_WARNINGS
+ #endif
+#endif
+
+const struct _json_value json_value_none;
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+
+typedef unsigned int json_uchar;
+
+static unsigned char hex_value (json_char c)
+{
+ if (isdigit(c))
+ return c - '0';
+
+ switch (c) {
+ case 'a': case 'A': return 0x0A;
+ case 'b': case 'B': return 0x0B;
+ case 'c': case 'C': return 0x0C;
+ case 'd': case 'D': return 0x0D;
+ case 'e': case 'E': return 0x0E;
+ case 'f': case 'F': return 0x0F;
+ default: return 0xFF;
+ }
+}
+
+typedef struct
+{
+ unsigned long used_memory;
+
+ unsigned int uint_max;
+ unsigned long ulong_max;
+
+ json_settings settings;
+ int first_pass;
+
+ const json_char * ptr;
+ unsigned int cur_line, cur_col;
+
+} json_state;
+
+static void * default_alloc (size_t size, int zero, void * user_data)
+{
+ return zero ? calloc (1, size) : malloc (size);
+}
+
+static void default_free (void * ptr, void * user_data)
+{
+ free (ptr);
+}
+
+static void * json_alloc (json_state * state, unsigned long size, int zero)
+{
+ if ((state->ulong_max - state->used_memory) < size)
+ return 0;
+
+ if (state->settings.max_memory
+ && (state->used_memory += size) > state->settings.max_memory)
+ {
+ return 0;
+ }
+
+ return state->settings.mem_alloc (size, zero, state->settings.user_data);
+}
+
+static int new_value (json_state * state,
+ json_value ** top, json_value ** root, json_value ** alloc,
+ json_type type)
+{
+ json_value * value;
+ int values_size;
+
+ if (!state->first_pass)
+ {
+ value = *top = *alloc;
+ *alloc = (*alloc)->_reserved.next_alloc;
+
+ if (!*root)
+ *root = value;
+
+ switch (value->type)
+ {
+ case json_array:
+
+ if (value->u.array.length == 0)
+ break;
+
+ if (! (value->u.array.values = (json_value **) json_alloc
+ (state, value->u.array.length * sizeof (json_value *), 0)) )
+ {
+ return 0;
+ }
+
+ value->u.array.length = 0;
+ break;
+
+ case json_object:
+
+ if (value->u.object.length == 0)
+ break;
+
+ values_size = sizeof (*value->u.object.values) * value->u.object.length;
+
+ if (! (value->u.object.values = (json_object_entry *) json_alloc
+ (state, values_size + ((uintptr_t) value->u.object.values), 0)) )
+ {
+ return 0;
+ }
+
+ value->_reserved.object_mem = (*(char **) &value->u.object.values) + values_size;
+
+ value->u.object.length = 0;
+ break;
+
+ case json_string:
+
+ if (! (value->u.string.ptr = (json_char *) json_alloc
+ (state, (value->u.string.length + 1) * sizeof (json_char), 0)) )
+ {
+ return 0;
+ }
+
+ value->u.string.length = 0;
+ break;
+
+ default:
+ break;
+ };
+
+ return 1;
+ }
+
+ if (! (value = (json_value *) json_alloc
+ (state, sizeof (json_value) + state->settings.value_extra, 1)))
+ {
+ return 0;
+ }
+
+ if (!*root)
+ *root = value;
+
+ value->type = type;
+ value->parent = *top;
+
+ #ifdef JSON_TRACK_SOURCE
+ value->line = state->cur_line;
+ value->col = state->cur_col;
+ #endif
+
+ if (*alloc)
+ (*alloc)->_reserved.next_alloc = value;
+
+ *alloc = *top = value;
+
+ return 1;
+}
+
+#define whitespace \
+ case '\n': ++ state.cur_line; state.cur_col = 0; \
+ case ' ': case '\t': case '\r'
+
+#define string_add(b) \
+ do { if (!state.first_pass) string [string_length] = b; ++ string_length; } while (0);
+
+#define line_and_col \
+ state.cur_line, state.cur_col
+
+static const long
+ flag_next = 1 << 0,
+ flag_reproc = 1 << 1,
+ flag_need_comma = 1 << 2,
+ flag_seek_value = 1 << 3,
+ flag_escaped = 1 << 4,
+ flag_string = 1 << 5,
+ flag_need_colon = 1 << 6,
+ flag_done = 1 << 7,
+ flag_num_negative = 1 << 8,
+ flag_num_zero = 1 << 9,
+ flag_num_e = 1 << 10,
+ flag_num_e_got_sign = 1 << 11,
+ flag_num_e_negative = 1 << 12,
+ flag_line_comment = 1 << 13,
+ flag_block_comment = 1 << 14;
+
+json_value * json_parse_ex (json_settings * settings,
+ const json_char * json,
+ size_t length,
+ char * error_buf)
+{
+ json_char error [json_error_max];
+ const json_char * end;
+ json_value * top, * root, * alloc = 0;
+ json_state state;
+ state.used_memory = 0;
+ state.uint_max = 0;
+ state.ulong_max = 0;
+ state.settings.max_memory = 0;
+ state.settings.mem_alloc = NULL;
+ state.settings.mem_free = NULL;
+ state.settings.settings = 0;
+ state.settings.user_data = NULL;
+ state.settings.value_extra = 0;
+ state.first_pass = 0;
+ state.ptr = NULL;
+ state.cur_col = 0;
+ state.cur_line = 0;
+
+ long flags;
+ long num_digits = 0, num_e = 0;
+ json_int_t num_fraction = 0;
+
+ /* Skip UTF-8 BOM
+ */
+ if (length >= 3 && ((unsigned char) json [0]) == 0xEF
+ && ((unsigned char) json [1]) == 0xBB
+ && ((unsigned char) json [2]) == 0xBF)
+ {
+ json += 3;
+ length -= 3;
+ }
+
+ error[0] = '\0';
+ end = (json + length);
+
+ memcpy (&state.settings, settings, sizeof (json_settings));
+
+ if (!state.settings.mem_alloc)
+ state.settings.mem_alloc = default_alloc;
+
+ if (!state.settings.mem_free)
+ state.settings.mem_free = default_free;
+
+ memset (&state.uint_max, 0xFF, sizeof (state.uint_max));
+ memset (&state.ulong_max, 0xFF, sizeof (state.ulong_max));
+
+ state.uint_max -= 8; /* limit of how much can be added before next check */
+ state.ulong_max -= 8;
+
+ for (state.first_pass = 1; state.first_pass >= 0; -- state.first_pass)
+ {
+ json_uchar uchar;
+ unsigned char uc_b1, uc_b2, uc_b3, uc_b4;
+ json_char * string = 0;
+ unsigned int string_length = 0;
+
+ top = root = 0;
+ flags = flag_seek_value;
+
+ state.cur_line = 1;
+
+ for (state.ptr = json ;; ++ state.ptr)
+ {
+ json_char b = (state.ptr == end ? 0 : *state.ptr);
+
+ if (flags & flag_string)
+ {
+ if (!b)
+ { sprintf (error, "Unexpected EOF in string (at %d:%d)", line_and_col);
+ goto e_failed;
+ }
+
+ if (string_length > state.uint_max)
+ goto e_overflow;
+
+ if (flags & flag_escaped)
+ {
+ flags &= ~ flag_escaped;
+
+ switch (b)
+ {
+ case 'b': string_add ('\b'); break;
+ case 'f': string_add ('\f'); break;
+ case 'n': string_add ('\n'); break;
+ case 'r': string_add ('\r'); break;
+ case 't': string_add ('\t'); break;
+ case 'u':
+
+ if (end - state.ptr < 4 ||
+ (uc_b1 = hex_value (*++ state.ptr)) == 0xFF ||
+ (uc_b2 = hex_value (*++ state.ptr)) == 0xFF ||
+ (uc_b3 = hex_value (*++ state.ptr)) == 0xFF ||
+ (uc_b4 = hex_value (*++ state.ptr)) == 0xFF)
+ {
+ sprintf (error, "Invalid character value `%c` (at %d:%d)", b, line_and_col);
+ goto e_failed;
+ }
+
+ uc_b1 = (uc_b1 << 4) | uc_b2;
+ uc_b2 = (uc_b3 << 4) | uc_b4;
+ uchar = (uc_b1 << 8) | uc_b2;
+
+ if ((uchar & 0xF800) == 0xD800) {
+ json_uchar uchar2;
+
+ if (end - state.ptr < 6 || (*++ state.ptr) != '\\' || (*++ state.ptr) != 'u' ||
+ (uc_b1 = hex_value (*++ state.ptr)) == 0xFF ||
+ (uc_b2 = hex_value (*++ state.ptr)) == 0xFF ||
+ (uc_b3 = hex_value (*++ state.ptr)) == 0xFF ||
+ (uc_b4 = hex_value (*++ state.ptr)) == 0xFF)
+ {
+ sprintf (error, "Invalid character value `%c` (at %d:%d)", b, line_and_col);
+ goto e_failed;
+ }
+
+ uc_b1 = (uc_b1 << 4) | uc_b2;
+ uc_b2 = (uc_b3 << 4) | uc_b4;
+ uchar2 = (uc_b1 << 8) | uc_b2;
+
+ uchar = 0x010000 + ((uchar & 0x3FF) << 10) | (uchar2 & 0x3FF);
+ }
+
+ if (sizeof (json_char) >= sizeof (json_uchar) || (uchar <= 0x7F))
+ {
+ string_add ((json_char) uchar);
+ break;
+ }
+
+ if (uchar <= 0x7FF)
+ {
+ if (state.first_pass)
+ string_length += 2;
+ else
+ { string [string_length ++] = 0xC0 | (uchar >> 6);
+ string [string_length ++] = 0x80 | (uchar & 0x3F);
+ }
+
+ break;
+ }
+
+ if (uchar <= 0xFFFF) {
+ if (state.first_pass)
+ string_length += 3;
+ else
+ { string [string_length ++] = 0xE0 | (uchar >> 12);
+ string [string_length ++] = 0x80 | ((uchar >> 6) & 0x3F);
+ string [string_length ++] = 0x80 | (uchar & 0x3F);
+ }
+
+ break;
+ }
+
+ if (state.first_pass)
+ string_length += 4;
+ else
+ { string [string_length ++] = 0xF0 | (uchar >> 18);
+ string [string_length ++] = 0x80 | ((uchar >> 12) & 0x3F);
+ string [string_length ++] = 0x80 | ((uchar >> 6) & 0x3F);
+ string [string_length ++] = 0x80 | (uchar & 0x3F);
+ }
+
+ break;
+
+ default:
+ string_add (b);
+ };
+
+ continue;
+ }
+
+ if (b == '\\')
+ {
+ flags |= flag_escaped;
+ continue;
+ }
+
+ if (b == '"')
+ {
+ if (!state.first_pass)
+ string [string_length] = 0;
+
+ flags &= ~ flag_string;
+ string = 0;
+
+ switch (top->type)
+ {
+ case json_string:
+
+ top->u.string.length = string_length;
+ flags |= flag_next;
+
+ break;
+
+ case json_object:
+
+ if (state.first_pass)
+ (*(json_char **) &top->u.object.values) += string_length + 1;
+ else
+ {
+ top->u.object.values [top->u.object.length].name
+ = (json_char *) top->_reserved.object_mem;
+
+ top->u.object.values [top->u.object.length].name_length
+ = string_length;
+
+ (*(json_char **) &top->_reserved.object_mem) += string_length + 1;
+ }
+
+ flags |= flag_seek_value | flag_need_colon;
+ continue;
+
+ default:
+ break;
+ };
+ }
+ else
+ {
+ string_add (b);
+ continue;
+ }
+ }
+
+ if (state.settings.settings & json_enable_comments)
+ {
+ if (flags & (flag_line_comment | flag_block_comment))
+ {
+ if (flags & flag_line_comment)
+ {
+ if (b == '\r' || b == '\n' || !b)
+ {
+ flags &= ~ flag_line_comment;
+ -- state.ptr; /* so null can be reproc'd */
+ }
+
+ continue;
+ }
+
+ if (flags & flag_block_comment)
+ {
+ if (!b)
+ { sprintf (error, "%d:%d: Unexpected EOF in block comment", line_and_col);
+ goto e_failed;
+ }
+
+ if (b == '*' && state.ptr < (end - 1) && state.ptr [1] == '/')
+ {
+ flags &= ~ flag_block_comment;
+ ++ state.ptr; /* skip closing sequence */
+ }
+
+ continue;
+ }
+ }
+ else if (b == '/')
+ {
+ if (! (flags & (flag_seek_value | flag_done)) && top->type != json_object)
+ { sprintf (error, "%d:%d: Comment not allowed here", line_and_col);
+ goto e_failed;
+ }
+
+ if (++ state.ptr == end)
+ { sprintf (error, "%d:%d: EOF unexpected", line_and_col);
+ goto e_failed;
+ }
+
+ switch (b = *state.ptr)
+ {
+ case '/':
+ flags |= flag_line_comment;
+ continue;
+
+ case '*':
+ flags |= flag_block_comment;
+ continue;
+
+ default:
+ sprintf (error, "%d:%d: Unexpected `%c` in comment opening sequence", line_and_col, b);
+ goto e_failed;
+ };
+ }
+ }
+
+ if (flags & flag_done)
+ {
+ if (!b)
+ break;
+
+ switch (b)
+ {
+ whitespace:
+ continue;
+
+ default:
+
+ sprintf (error, "%d:%d: Trailing garbage: `%c`",
+ state.cur_line, state.cur_col, b);
+
+ goto e_failed;
+ };
+ }
+
+ if (flags & flag_seek_value)
+ {
+ switch (b)
+ {
+ whitespace:
+ continue;
+
+ case ']':
+
+ if (top && top->type == json_array)
+ flags = (flags & ~ (flag_need_comma | flag_seek_value)) | flag_next;
+ else
+ { sprintf (error, "%d:%d: Unexpected ]", line_and_col);
+ goto e_failed;
+ }
+
+ break;
+
+ default:
+
+ if (flags & flag_need_comma)
+ {
+ if (b == ',')
+ { flags &= ~ flag_need_comma;
+ continue;
+ }
+ else
+ {
+ sprintf (error, "%d:%d: Expected , before %c",
+ state.cur_line, state.cur_col, b);
+
+ goto e_failed;
+ }
+ }
+
+ if (flags & flag_need_colon)
+ {
+ if (b == ':')
+ { flags &= ~ flag_need_colon;
+ continue;
+ }
+ else
+ {
+ sprintf (error, "%d:%d: Expected : before %c",
+ state.cur_line, state.cur_col, b);
+
+ goto e_failed;
+ }
+ }
+
+ flags &= ~ flag_seek_value;
+
+ switch (b)
+ {
+ case '{':
+
+ if (!new_value (&state, &top, &root, &alloc, json_object))
+ goto e_alloc_failure;
+
+ continue;
+
+ case '[':
+
+ if (!new_value (&state, &top, &root, &alloc, json_array))
+ goto e_alloc_failure;
+
+ flags |= flag_seek_value;
+ continue;
+
+ case '"':
+
+ if (!new_value (&state, &top, &root, &alloc, json_string))
+ goto e_alloc_failure;
+
+ flags |= flag_string;
+
+ string = top->u.string.ptr;
+ string_length = 0;
+
+ continue;
+
+ case 't':
+
+ if ((end - state.ptr) < 3 || *(++ state.ptr) != 'r' ||
+ *(++ state.ptr) != 'u' || *(++ state.ptr) != 'e')
+ {
+ goto e_unknown_value;
+ }
+
+ if (!new_value (&state, &top, &root, &alloc, json_boolean))
+ goto e_alloc_failure;
+
+ top->u.boolean = 1;
+
+ flags |= flag_next;
+ break;
+
+ case 'f':
+
+ if ((end - state.ptr) < 4 || *(++ state.ptr) != 'a' ||
+ *(++ state.ptr) != 'l' || *(++ state.ptr) != 's' ||
+ *(++ state.ptr) != 'e')
+ {
+ goto e_unknown_value;
+ }
+
+ if (!new_value (&state, &top, &root, &alloc, json_boolean))
+ goto e_alloc_failure;
+
+ flags |= flag_next;
+ break;
+
+ case 'n':
+
+ if ((end - state.ptr) < 3 || *(++ state.ptr) != 'u' ||
+ *(++ state.ptr) != 'l' || *(++ state.ptr) != 'l')
+ {
+ goto e_unknown_value;
+ }
+
+ if (!new_value (&state, &top, &root, &alloc, json_null))
+ goto e_alloc_failure;
+
+ flags |= flag_next;
+ break;
+
+ default:
+
+ if (isdigit (b) || b == '-')
+ {
+ if (!new_value (&state, &top, &root, &alloc, json_integer))
+ goto e_alloc_failure;
+
+ if (!state.first_pass)
+ {
+ while (isdigit (b) || b == '+' || b == '-'
+ || b == 'e' || b == 'E' || b == '.')
+ {
+ if ( (++ state.ptr) == end)
+ {
+ b = 0;
+ break;
+ }
+
+ b = *state.ptr;
+ }
+
+ flags |= flag_next | flag_reproc;
+ break;
+ }
+
+ flags &= ~ (flag_num_negative | flag_num_e |
+ flag_num_e_got_sign | flag_num_e_negative |
+ flag_num_zero);
+
+ num_digits = 0;
+ num_fraction = 0;
+ num_e = 0;
+
+ if (b != '-')
+ {
+ flags |= flag_reproc;
+ break;
+ }
+
+ flags |= flag_num_negative;
+ continue;
+ }
+ else
+ { sprintf (error, "%d:%d: Unexpected %c when seeking value", line_and_col, b);
+ goto e_failed;
+ }
+ };
+ };
+ }
+ else
+ {
+ switch (top->type)
+ {
+ case json_object:
+
+ switch (b)
+ {
+ whitespace:
+ continue;
+
+ case '"':
+
+ if (flags & flag_need_comma)
+ { sprintf (error, "%d:%d: Expected , before \"", line_and_col);
+ goto e_failed;
+ }
+
+ flags |= flag_string;
+
+ string = (json_char *) top->_reserved.object_mem;
+ string_length = 0;
+
+ break;
+
+ case '}':
+
+ flags = (flags & ~ flag_need_comma) | flag_next;
+ break;
+
+ case ',':
+
+ if (flags & flag_need_comma)
+ {
+ flags &= ~ flag_need_comma;
+ break;
+ }
+
+ default:
+ sprintf (error, "%d:%d: Unexpected `%c` in object", line_and_col, b);
+ goto e_failed;
+ };
+
+ break;
+
+ case json_integer:
+ case json_double:
+
+ if (isdigit (b))
+ {
+ ++ num_digits;
+
+ if (top->type == json_integer || flags & flag_num_e)
+ {
+ if (! (flags & flag_num_e))
+ {
+ if (flags & flag_num_zero)
+ { sprintf (error, "%d:%d: Unexpected `0` before `%c`", line_and_col, b);
+ goto e_failed;
+ }
+
+ if (num_digits == 1 && b == '0')
+ flags |= flag_num_zero;
+ }
+ else
+ {
+ flags |= flag_num_e_got_sign;
+ num_e = (num_e * 10) + (b - '0');
+ continue;
+ }
+
+ top->u.integer = (top->u.integer * 10) + (b - '0');
+ continue;
+ }
+
+ num_fraction = (num_fraction * 10) + (b - '0');
+ continue;
+ }
+
+ if (b == '+' || b == '-')
+ {
+ if ( (flags & flag_num_e) && !(flags & flag_num_e_got_sign))
+ {
+ flags |= flag_num_e_got_sign;
+
+ if (b == '-')
+ flags |= flag_num_e_negative;
+
+ continue;
+ }
+ }
+ else if (b == '.' && top->type == json_integer)
+ {
+ if (!num_digits)
+ { sprintf (error, "%d:%d: Expected digit before `.`", line_and_col);
+ goto e_failed;
+ }
+
+ top->type = json_double;
+ top->u.dbl = (double) top->u.integer;
+
+ num_digits = 0;
+ continue;
+ }
+
+ if (! (flags & flag_num_e))
+ {
+ if (top->type == json_double)
+ {
+ if (!num_digits)
+ { sprintf (error, "%d:%d: Expected digit after `.`", line_and_col);
+ goto e_failed;
+ }
+
+ top->u.dbl += ((double) num_fraction) / (pow (10.0, (double) num_digits));
+ }
+
+ if (b == 'e' || b == 'E')
+ {
+ flags |= flag_num_e;
+
+ if (top->type == json_integer)
+ {
+ top->type = json_double;
+ top->u.dbl = (double) top->u.integer;
+ }
+
+ num_digits = 0;
+ flags &= ~ flag_num_zero;
+
+ continue;
+ }
+ }
+ else
+ {
+ if (!num_digits)
+ { sprintf (error, "%d:%d: Expected digit after `e`", line_and_col);
+ goto e_failed;
+ }
+
+ top->u.dbl *= pow (10.0, (double)
+ (flags & flag_num_e_negative ? - num_e : num_e));
+ }
+
+ if (flags & flag_num_negative)
+ {
+ if (top->type == json_integer)
+ top->u.integer = - top->u.integer;
+ else
+ top->u.dbl = - top->u.dbl;
+ }
+
+ flags |= flag_next | flag_reproc;
+ break;
+
+ default:
+ break;
+ };
+ }
+
+ if (flags & flag_reproc)
+ {
+ flags &= ~ flag_reproc;
+ -- state.ptr;
+ }
+
+ if (flags & flag_next)
+ {
+ flags = (flags & ~ flag_next) | flag_need_comma;
+
+ if (!top->parent)
+ {
+ /* root value done */
+
+ flags |= flag_done;
+ continue;
+ }
+
+ if (top->parent->type == json_array)
+ flags |= flag_seek_value;
+
+ if (!state.first_pass)
+ {
+ json_value * parent = top->parent;
+
+ switch (parent->type)
+ {
+ case json_object:
+
+ parent->u.object.values
+ [parent->u.object.length].value = top;
+
+ break;
+
+ case json_array:
+
+ parent->u.array.values
+ [parent->u.array.length] = top;
+
+ break;
+
+ default:
+ break;
+ };
+ }
+
+ if ( (++ top->parent->u.array.length) > state.uint_max)
+ goto e_overflow;
+
+ top = top->parent;
+
+ continue;
+ }
+ }
+
+ alloc = root;
+ }
+
+ return root;
+
+e_unknown_value:
+
+ sprintf (error, "%d:%d: Unknown value", line_and_col);
+ goto e_failed;
+
+e_alloc_failure:
+
+ strcpy (error, "Memory allocation failure");
+ goto e_failed;
+
+e_overflow:
+
+ sprintf (error, "%d:%d: Too long (caught overflow)", line_and_col);
+ goto e_failed;
+
+e_failed:
+
+ if (error_buf)
+ {
+ if (*error)
+ strcpy (error_buf, error);
+ else
+ strcpy (error_buf, "Unknown error");
+ }
+
+ if (state.first_pass)
+ alloc = root;
+
+ while (alloc)
+ {
+ top = alloc->_reserved.next_alloc;
+ state.settings.mem_free (alloc, state.settings.user_data);
+ alloc = top;
+ }
+
+ if (!state.first_pass)
+ json_value_free_ex (&state.settings, root);
+
+ return 0;
+}
+
+json_value * json_parse (const json_char * json, size_t length)
+{
+ json_settings settings;
+ settings.max_memory = 0;
+ settings.settings = 0;
+ settings.mem_alloc = NULL;
+ settings.mem_free = NULL;
+ settings.user_data = NULL;
+ settings.value_extra = 0;
+ return json_parse_ex (&settings, json, length, 0);
+}
+
+void json_value_free_ex (json_settings * settings, json_value * value)
+{
+ json_value * cur_value;
+
+ if (!value)
+ return;
+
+ value->parent = 0;
+
+ while (value)
+ {
+ switch (value->type)
+ {
+ case json_array:
+
+ if (!value->u.array.length)
+ {
+ settings->mem_free (value->u.array.values, settings->user_data);
+ break;
+ }
+
+ value = value->u.array.values [-- value->u.array.length];
+ continue;
+
+ case json_object:
+
+ if (!value->u.object.length)
+ {
+ settings->mem_free (value->u.object.values, settings->user_data);
+ break;
+ }
+
+ value = value->u.object.values [-- value->u.object.length].value;
+ continue;
+
+ case json_string:
+#ifdef CARYLL_USE_PRE_SERIALIZED
+ case json_pre_serialized:
+#endif
+ settings->mem_free (value->u.string.ptr, settings->user_data);
+ break;
+
+ default:
+ break;
+ };
+
+ cur_value = value;
+ value = value->parent;
+ settings->mem_free (cur_value, settings->user_data);
+ }
+}
+
+void json_value_free (json_value * value)
+{
+ json_settings settings;
+ settings.max_memory = 0;
+ settings.settings = 0;
+ settings.mem_alloc = NULL;
+ settings.mem_free = NULL;
+ settings.user_data = NULL;
+ settings.value_extra = 0;
+ settings.mem_free = default_free;
+ json_value_free_ex (&settings, value);
+}
+
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sds.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sds.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sds.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,1264 @@
+/* SDSLib 2.0 -- A C dynamic strings library
+ *
+ * Copyright (c) 2006-2015, Salvatore Sanfilippo <antirez at gmail dot com>
+ * Copyright (c) 2015, Redis Labs, Inc
+ * All rights reserved.
+ *
+ * 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.
+ * * Neither the name of Redis nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include "sds.h"
+#include "sdsalloc.h"
+
+static inline int sdsHdrSize(char type) {
+ switch(type&SDS_TYPE_MASK) {
+ case SDS_TYPE_5:
+ return sizeof(struct sdshdr5);
+ case SDS_TYPE_8:
+ return sizeof(struct sdshdr8);
+ case SDS_TYPE_16:
+ return sizeof(struct sdshdr16);
+ case SDS_TYPE_32:
+ return sizeof(struct sdshdr32);
+ case SDS_TYPE_64:
+ return sizeof(struct sdshdr64);
+ }
+ return 0;
+}
+
+static inline char sdsReqType(size_t string_size) {
+ if (string_size < 32)
+ return SDS_TYPE_5;
+ if (string_size < 0xff)
+ return SDS_TYPE_8;
+ if (string_size < 0xffff)
+ return SDS_TYPE_16;
+ if (string_size < 0xffffffff)
+ return SDS_TYPE_32;
+ return SDS_TYPE_64;
+}
+
+/* Create a new sds string with the content specified by the 'init' pointer
+ * and 'initlen'.
+ * If NULL is used for 'init' the string is initialized with zero bytes.
+ *
+ * The string is always null-termined (all the sds strings are, always) so
+ * even if you create an sds string with:
+ *
+ * mystring = sdsnewlen("abc",3);
+ *
+ * You can print the string with printf() as there is an implicit \0 at the
+ * end of the string. However the string is binary safe and can contain
+ * \0 characters in the middle, as the length is stored in the sds header. */
+sds sdsnewlen(const void *init, size_t initlen) {
+ void *sh;
+ sds s;
+ char type = sdsReqType(initlen);
+ /* Empty strings are usually created in order to append. Use type 8
+ * since type 5 is not good at this. */
+ if (type == SDS_TYPE_5 && initlen == 0) type = SDS_TYPE_8;
+ int hdrlen = sdsHdrSize(type);
+ unsigned char *fp; /* flags pointer. */
+
+ sh = s_malloc(hdrlen+initlen+1);
+ if (!init)
+ memset(sh, 0, hdrlen+initlen+1);
+ if (sh == NULL) return NULL;
+ s = (char*)sh+hdrlen;
+ fp = ((unsigned char*)s)-1;
+ switch(type) {
+ case SDS_TYPE_5: {
+ *fp = type | (initlen << SDS_TYPE_BITS);
+ break;
+ }
+ case SDS_TYPE_8: {
+ SDS_HDR_VAR(8,s);
+ sh->len = initlen;
+ sh->alloc = initlen;
+ *fp = type;
+ break;
+ }
+ case SDS_TYPE_16: {
+ SDS_HDR_VAR(16,s);
+ sh->len = initlen;
+ sh->alloc = initlen;
+ *fp = type;
+ break;
+ }
+ case SDS_TYPE_32: {
+ SDS_HDR_VAR(32,s);
+ sh->len = initlen;
+ sh->alloc = initlen;
+ *fp = type;
+ break;
+ }
+ case SDS_TYPE_64: {
+ SDS_HDR_VAR(64,s);
+ sh->len = initlen;
+ sh->alloc = initlen;
+ *fp = type;
+ break;
+ }
+ }
+ if (initlen && init)
+ memcpy(s, init, initlen);
+ s[initlen] = '\0';
+ return s;
+}
+
+/* Create an empty (zero length) sds string. Even in this case the string
+ * always has an implicit null term. */
+sds sdsempty(void) {
+ return sdsnewlen("",0);
+}
+
+/* Create a new sds string starting from a null terminated C string. */
+sds sdsnew(const char *init) {
+ size_t initlen = (init == NULL) ? 0 : strlen(init);
+ return sdsnewlen(init, initlen);
+}
+
+/* Duplicate an sds string. */
+sds sdsdup(const sds s) {
+ return sdsnewlen(s, sdslen(s));
+}
+
+/* Free an sds string. No operation is performed if 's' is NULL. */
+void sdsfree(sds s) {
+ if (s == NULL) return;
+ s_free((char*)s-sdsHdrSize(s[-1]));
+}
+
+/* Set the sds string length to the length as obtained with strlen(), so
+ * considering as content only up to the first null term character.
+ *
+ * This function is useful when the sds string is hacked manually in some
+ * way, like in the following example:
+ *
+ * s = sdsnew("foobar");
+ * s[2] = '\0';
+ * sdsupdatelen(s);
+ * printf("%d\n", sdslen(s));
+ *
+ * The output will be "2", but if we comment out the call to sdsupdatelen()
+ * the output will be "6" as the string was modified but the logical length
+ * remains 6 bytes. */
+void sdsupdatelen(sds s) {
+ int reallen = strlen(s);
+ sdssetlen(s, reallen);
+}
+
+/* Modify an sds string in-place to make it empty (zero length).
+ * However all the existing buffer is not discarded but set as free space
+ * so that next append operations will not require allocations up to the
+ * number of bytes previously available. */
+void sdsclear(sds s) {
+ sdssetlen(s, 0);
+ s[0] = '\0';
+}
+
+/* Enlarge the free space at the end of the sds string so that the caller
+ * is sure that after calling this function can overwrite up to addlen
+ * bytes after the end of the string, plus one more byte for nul term.
+ *
+ * Note: this does not change the *length* of the sds string as returned
+ * by sdslen(), but only the free buffer space we have. */
+sds sdsMakeRoomFor(sds s, size_t addlen) {
+ void *sh, *newsh;
+ size_t avail = sdsavail(s);
+ size_t len, newlen;
+ char type, oldtype = s[-1] & SDS_TYPE_MASK;
+ int hdrlen;
+
+ /* Return ASAP if there is enough space left. */
+ if (avail >= addlen) return s;
+
+ len = sdslen(s);
+ sh = (char*)s-sdsHdrSize(oldtype);
+ newlen = (len+addlen);
+ if (newlen < SDS_MAX_PREALLOC)
+ newlen *= 2;
+ else
+ newlen += SDS_MAX_PREALLOC;
+
+ type = sdsReqType(newlen);
+
+ /* Don't use type 5: the user is appending to the string and type 5 is
+ * not able to remember empty space, so sdsMakeRoomFor() must be called
+ * at every appending operation. */
+ if (type == SDS_TYPE_5) type = SDS_TYPE_8;
+
+ hdrlen = sdsHdrSize(type);
+ if (oldtype==type) {
+ newsh = s_realloc(sh, hdrlen+newlen+1);
+ if (newsh == NULL) return NULL;
+ s = (char*)newsh+hdrlen;
+ } else {
+ /* Since the header size changes, need to move the string forward,
+ * and can't use realloc */
+ newsh = s_malloc(hdrlen+newlen+1);
+ if (newsh == NULL) return NULL;
+ memcpy((char*)newsh+hdrlen, s, len+1);
+ s_free(sh);
+ s = (char*)newsh+hdrlen;
+ s[-1] = type;
+ sdssetlen(s, len);
+ }
+ sdssetalloc(s, newlen);
+ return s;
+}
+
+/* Reallocate the sds string so that it has no free space at the end. The
+ * contained string remains not altered, but next concatenation operations
+ * will require a reallocation.
+ *
+ * After the call, the passed sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call. */
+sds sdsRemoveFreeSpace(sds s) {
+ void *sh, *newsh;
+ char type, oldtype = s[-1] & SDS_TYPE_MASK;
+ int hdrlen;
+ size_t len = sdslen(s);
+ sh = (char*)s-sdsHdrSize(oldtype);
+
+ type = sdsReqType(len);
+ hdrlen = sdsHdrSize(type);
+ if (oldtype==type) {
+ newsh = s_realloc(sh, hdrlen+len+1);
+ if (newsh == NULL) return NULL;
+ s = (char*)newsh+hdrlen;
+ } else {
+ newsh = s_malloc(hdrlen+len+1);
+ if (newsh == NULL) return NULL;
+ memcpy((char*)newsh+hdrlen, s, len+1);
+ s_free(sh);
+ s = (char*)newsh+hdrlen;
+ s[-1] = type;
+ sdssetlen(s, len);
+ }
+ sdssetalloc(s, len);
+ return s;
+}
+
+/* Return the total size of the allocation of the specifed sds string,
+ * including:
+ * 1) The sds header before the pointer.
+ * 2) The string.
+ * 3) The free buffer at the end if any.
+ * 4) The implicit null term.
+ */
+size_t sdsAllocSize(sds s) {
+ size_t alloc = sdsalloc(s);
+ return sdsHdrSize(s[-1])+alloc+1;
+}
+
+/* Return the pointer of the actual SDS allocation (normally SDS strings
+ * are referenced by the start of the string buffer). */
+void *sdsAllocPtr(sds s) {
+ return (void*) (s-sdsHdrSize(s[-1]));
+}
+
+/* Increment the sds length and decrements the left free space at the
+ * end of the string according to 'incr'. Also set the null term
+ * in the new end of the string.
+ *
+ * This function is used in order to fix the string length after the
+ * user calls sdsMakeRoomFor(), writes something after the end of
+ * the current string, and finally needs to set the new length.
+ *
+ * Note: it is possible to use a negative increment in order to
+ * right-trim the string.
+ *
+ * Usage example:
+ *
+ * Using sdsIncrLen() and sdsMakeRoomFor() it is possible to mount the
+ * following schema, to cat bytes coming from the kernel to the end of an
+ * sds string without copying into an intermediate buffer:
+ *
+ * oldlen = sdslen(s);
+ * s = sdsMakeRoomFor(s, BUFFER_SIZE);
+ * nread = read(fd, s+oldlen, BUFFER_SIZE);
+ * ... check for nread <= 0 and handle it ...
+ * sdsIncrLen(s, nread);
+ */
+void sdsIncrLen(sds s, int incr) {
+ unsigned char flags = s[-1];
+ size_t len;
+ switch(flags&SDS_TYPE_MASK) {
+ case SDS_TYPE_5: {
+ unsigned char *fp = ((unsigned char*)s)-1;
+ unsigned char oldlen = SDS_TYPE_5_LEN(flags);
+ assert((incr > 0 && oldlen+incr < 32) || (incr < 0 && oldlen >= (unsigned int)(-incr)));
+ *fp = SDS_TYPE_5 | ((oldlen+incr) << SDS_TYPE_BITS);
+ len = oldlen+incr;
+ break;
+ }
+ case SDS_TYPE_8: {
+ SDS_HDR_VAR(8,s);
+ assert((incr >= 0 && sh->alloc-sh->len >= incr) || (incr < 0 && sh->len >= (unsigned int)(-incr)));
+ len = (sh->len += incr);
+ break;
+ }
+ case SDS_TYPE_16: {
+ SDS_HDR_VAR(16,s);
+ assert((incr >= 0 && sh->alloc-sh->len >= incr) || (incr < 0 && sh->len >= (unsigned int)(-incr)));
+ len = (sh->len += incr);
+ break;
+ }
+ case SDS_TYPE_32: {
+ SDS_HDR_VAR(32,s);
+ assert((incr >= 0 && sh->alloc-sh->len >= (unsigned int)incr) || (incr < 0 && sh->len >= (unsigned int)(-incr)));
+ len = (sh->len += incr);
+ break;
+ }
+ case SDS_TYPE_64: {
+ SDS_HDR_VAR(64,s);
+ assert((incr >= 0 && sh->alloc-sh->len >= (uint64_t)incr) || (incr < 0 && sh->len >= (uint64_t)(-incr)));
+ len = (sh->len += incr);
+ break;
+ }
+ default: len = 0; /* Just to avoid compilation warnings. */
+ }
+ s[len] = '\0';
+}
+
+/* Grow the sds to have the specified length. Bytes that were not part of
+ * the original length of the sds will be set to zero.
+ *
+ * if the specified length is smaller than the current length, no operation
+ * is performed. */
+sds sdsgrowzero(sds s, size_t len) {
+ size_t curlen = sdslen(s);
+
+ if (len <= curlen) return s;
+ s = sdsMakeRoomFor(s,len-curlen);
+ if (s == NULL) return NULL;
+
+ /* Make sure added region doesn't contain garbage */
+ memset(s+curlen,0,(len-curlen+1)); /* also set trailing \0 byte */
+ sdssetlen(s, len);
+ return s;
+}
+
+/* Append the specified binary-safe string pointed by 't' of 'len' bytes to the
+ * end of the specified sds string 's'.
+ *
+ * After the call, the passed sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call. */
+sds sdscatlen(sds s, const void *t, size_t len) {
+ size_t curlen = sdslen(s);
+
+ s = sdsMakeRoomFor(s,len);
+ if (s == NULL) return NULL;
+ memcpy(s+curlen, t, len);
+ sdssetlen(s, curlen+len);
+ s[curlen+len] = '\0';
+ return s;
+}
+
+/* Append the specified null termianted C string to the sds string 's'.
+ *
+ * After the call, the passed sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call. */
+sds sdscat(sds s, const char *t) {
+ return sdscatlen(s, t, strlen(t));
+}
+
+/* Append the specified sds 't' to the existing sds 's'.
+ *
+ * After the call, the modified sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call. */
+sds sdscatsds(sds s, const sds t) {
+ return sdscatlen(s, t, sdslen(t));
+}
+
+/* Destructively modify the sds string 's' to hold the specified binary
+ * safe string pointed by 't' of length 'len' bytes. */
+sds sdscpylen(sds s, const char *t, size_t len) {
+ if (sdsalloc(s) < len) {
+ s = sdsMakeRoomFor(s,len-sdslen(s));
+ if (s == NULL) return NULL;
+ }
+ memcpy(s, t, len);
+ s[len] = '\0';
+ sdssetlen(s, len);
+ return s;
+}
+
+/* Like sdscpylen() but 't' must be a null-termined string so that the length
+ * of the string is obtained with strlen(). */
+sds sdscpy(sds s, const char *t) {
+ return sdscpylen(s, t, strlen(t));
+}
+
+/* Helper for sdscatlonglong() doing the actual number -> string
+ * conversion. 's' must point to a string with room for at least
+ * SDS_LLSTR_SIZE bytes.
+ *
+ * The function returns the length of the null-terminated string
+ * representation stored at 's'. */
+#define SDS_LLSTR_SIZE 21
+static int sdsll2str(char *s, long long value) {
+ char *p, aux;
+ unsigned long long v;
+ size_t l;
+
+ /* Generate the string representation, this method produces
+ * an reversed string. */
+ v = (value < 0) ? -value : value;
+ p = s;
+ do {
+ *p++ = '0'+(v%10);
+ v /= 10;
+ } while(v);
+ if (value < 0) *p++ = '-';
+
+ /* Compute length and add null term. */
+ l = p-s;
+ *p = '\0';
+
+ /* Reverse the string. */
+ p--;
+ while(s < p) {
+ aux = *s;
+ *s = *p;
+ *p = aux;
+ s++;
+ p--;
+ }
+ return l;
+}
+
+/* Identical sdsll2str(), but for unsigned long long type. */
+static int sdsull2str(char *s, unsigned long long v) {
+ char *p, aux;
+ size_t l;
+
+ /* Generate the string representation, this method produces
+ * an reversed string. */
+ p = s;
+ do {
+ *p++ = '0'+(v%10);
+ v /= 10;
+ } while(v);
+
+ /* Compute length and add null term. */
+ l = p-s;
+ *p = '\0';
+
+ /* Reverse the string. */
+ p--;
+ while(s < p) {
+ aux = *s;
+ *s = *p;
+ *p = aux;
+ s++;
+ p--;
+ }
+ return l;
+}
+
+/* Create an sds string from a long long value. It is much faster than:
+ *
+ * sdscatprintf(sdsempty(),"%lld\n", value);
+ */
+sds sdsfromlonglong(long long value) {
+ char buf[SDS_LLSTR_SIZE];
+ int len = sdsll2str(buf,value);
+
+ return sdsnewlen(buf,len);
+}
+
+/* Like sdscatprintf() but gets va_list instead of being variadic. */
+sds sdscatvprintf(sds s, const char *fmt, va_list ap) {
+ va_list cpy;
+ char staticbuf[1024], *buf = staticbuf, *t;
+ size_t buflen = strlen(fmt)*2;
+
+ /* We try to start using a static buffer for speed.
+ * If not possible we revert to heap allocation. */
+ if (buflen > sizeof(staticbuf)) {
+ buf = s_malloc(buflen);
+ if (buf == NULL) return NULL;
+ } else {
+ buflen = sizeof(staticbuf);
+ }
+
+ /* Try with buffers two times bigger every time we fail to
+ * fit the string in the current buffer size. */
+ while(1) {
+ buf[buflen-2] = '\0';
+ va_copy(cpy,ap);
+ vsnprintf(buf, buflen, fmt, cpy);
+ va_end(cpy);
+ if (buf[buflen-2] != '\0') {
+ if (buf != staticbuf) s_free(buf);
+ buflen *= 2;
+ buf = s_malloc(buflen);
+ if (buf == NULL) return NULL;
+ continue;
+ }
+ break;
+ }
+
+ /* Finally concat the obtained string to the SDS string and return it. */
+ t = sdscat(s, buf);
+ if (buf != staticbuf) s_free(buf);
+ return t;
+}
+
+/* Append to the sds string 's' a string obtained using printf-alike format
+ * specifier.
+ *
+ * After the call, the modified sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call.
+ *
+ * Example:
+ *
+ * s = sdsnew("Sum is: ");
+ * s = sdscatprintf(s,"%d+%d = %d",a,b,a+b).
+ *
+ * Often you need to create a string from scratch with the printf-alike
+ * format. When this is the need, just use sdsempty() as the target string:
+ *
+ * s = sdscatprintf(sdsempty(), "... your format ...", args);
+ */
+sds sdscatprintf(sds s, const char *fmt, ...) {
+ va_list ap;
+ char *t;
+ va_start(ap, fmt);
+ t = sdscatvprintf(s,fmt,ap);
+ va_end(ap);
+ return t;
+}
+
+/* This function is similar to sdscatprintf, but much faster as it does
+ * not rely on sprintf() family functions implemented by the libc that
+ * are often very slow. Moreover directly handling the sds string as
+ * new data is concatenated provides a performance improvement.
+ *
+ * However this function only handles an incompatible subset of printf-alike
+ * format specifiers:
+ *
+ * %s - C String
+ * %S - SDS string
+ * %i - signed int
+ * %I - 64 bit signed integer (long long, int64_t)
+ * %u - unsigned int
+ * %U - 64 bit unsigned integer (unsigned long long, uint64_t)
+ * %% - Verbatim "%" character.
+ */
+sds sdscatfmt(sds s, char const *fmt, ...) {
+ size_t initlen = sdslen(s);
+ const char *f = fmt;
+ int i;
+ va_list ap;
+
+ va_start(ap,fmt);
+ f = fmt; /* Next format specifier byte to process. */
+ i = initlen; /* Position of the next byte to write to dest str. */
+ while(*f) {
+ char next, *str;
+ size_t l;
+ long long num;
+ unsigned long long unum;
+
+ /* Make sure there is always space for at least 1 char. */
+ if (sdsavail(s)==0) {
+ s = sdsMakeRoomFor(s,1);
+ }
+
+ switch(*f) {
+ case '%':
+ next = *(f+1);
+ f++;
+ switch(next) {
+ case 's':
+ case 'S':
+ str = va_arg(ap,char*);
+ l = (next == 's') ? strlen(str) : sdslen(str);
+ if (sdsavail(s) < l) {
+ s = sdsMakeRoomFor(s,l);
+ }
+ memcpy(s+i,str,l);
+ sdsinclen(s,l);
+ i += l;
+ break;
+ case 'i':
+ case 'I':
+ if (next == 'i')
+ num = va_arg(ap,int);
+ else
+ num = va_arg(ap,long long);
+ {
+ char buf[SDS_LLSTR_SIZE];
+ l = sdsll2str(buf,num);
+ if (sdsavail(s) < l) {
+ s = sdsMakeRoomFor(s,l);
+ }
+ memcpy(s+i,buf,l);
+ sdsinclen(s,l);
+ i += l;
+ }
+ break;
+ case 'u':
+ case 'U':
+ if (next == 'u')
+ unum = va_arg(ap,unsigned int);
+ else
+ unum = va_arg(ap,unsigned long long);
+ {
+ char buf[SDS_LLSTR_SIZE];
+ l = sdsull2str(buf,unum);
+ if (sdsavail(s) < l) {
+ s = sdsMakeRoomFor(s,l);
+ }
+ memcpy(s+i,buf,l);
+ sdsinclen(s,l);
+ i += l;
+ }
+ break;
+ default: /* Handle %% and generally %<unknown>. */
+ s[i++] = next;
+ sdsinclen(s,1);
+ break;
+ }
+ break;
+ default:
+ s[i++] = *f;
+ sdsinclen(s,1);
+ break;
+ }
+ f++;
+ }
+ va_end(ap);
+
+ /* Add null-term */
+ s[i] = '\0';
+ return s;
+}
+
+/* Remove the part of the string from left and from right composed just of
+ * contiguous characters found in 'cset', that is a null terminted C string.
+ *
+ * After the call, the modified sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call.
+ *
+ * Example:
+ *
+ * s = sdsnew("AA...AA.a.aa.aHelloWorld :::");
+ * s = sdstrim(s,"Aa. :");
+ * printf("%s\n", s);
+ *
+ * Output will be just "Hello World".
+ */
+sds sdstrim(sds s, const char *cset) {
+ char *start, *end, *sp, *ep;
+ size_t len;
+
+ sp = start = s;
+ ep = end = s+sdslen(s)-1;
+ while(sp <= end && strchr(cset, *sp)) sp++;
+ while(ep > sp && strchr(cset, *ep)) ep--;
+ len = (sp > ep) ? 0 : ((ep-sp)+1);
+ if (s != sp) memmove(s, sp, len);
+ s[len] = '\0';
+ sdssetlen(s,len);
+ return s;
+}
+
+/* Turn the string into a smaller (or equal) string containing only the
+ * substring specified by the 'start' and 'end' indexes.
+ *
+ * start and end can be negative, where -1 means the last character of the
+ * string, -2 the penultimate character, and so forth.
+ *
+ * The interval is inclusive, so the start and end characters will be part
+ * of the resulting string.
+ *
+ * The string is modified in-place.
+ *
+ * Example:
+ *
+ * s = sdsnew("Hello World");
+ * sdsrange(s,1,-1); => "ello World"
+ */
+void sdsrange(sds s, int start, int end) {
+ size_t newlen, len = sdslen(s);
+
+ if (len == 0) return;
+ if (start < 0) {
+ start = len+start;
+ if (start < 0) start = 0;
+ }
+ if (end < 0) {
+ end = len+end;
+ if (end < 0) end = 0;
+ }
+ newlen = (start > end) ? 0 : (end-start)+1;
+ if (newlen != 0) {
+ if (start >= (signed)len) {
+ newlen = 0;
+ } else if (end >= (signed)len) {
+ end = len-1;
+ newlen = (start > end) ? 0 : (end-start)+1;
+ }
+ } else {
+ start = 0;
+ }
+ if (start && newlen) memmove(s, s+start, newlen);
+ s[newlen] = 0;
+ sdssetlen(s,newlen);
+}
+
+/* Apply tolower() to every character of the sds string 's'. */
+void sdstolower(sds s) {
+ int len = sdslen(s), j;
+
+ for (j = 0; j < len; j++) s[j] = tolower(s[j]);
+}
+
+/* Apply toupper() to every character of the sds string 's'. */
+void sdstoupper(sds s) {
+ int len = sdslen(s), j;
+
+ for (j = 0; j < len; j++) s[j] = toupper(s[j]);
+}
+
+/* Compare two sds strings s1 and s2 with memcmp().
+ *
+ * Return value:
+ *
+ * positive if s1 > s2.
+ * negative if s1 < s2.
+ * 0 if s1 and s2 are exactly the same binary string.
+ *
+ * If two strings share exactly the same prefix, but one of the two has
+ * additional characters, the longer string is considered to be greater than
+ * the smaller one. */
+int sdscmp(const sds s1, const sds s2) {
+ size_t l1, l2, minlen;
+ int cmp;
+
+ l1 = sdslen(s1);
+ l2 = sdslen(s2);
+ minlen = (l1 < l2) ? l1 : l2;
+ cmp = memcmp(s1,s2,minlen);
+ if (cmp == 0) return l1-l2;
+ return cmp;
+}
+
+/* Split 's' with separator in 'sep'. An array
+ * of sds strings is returned. *count will be set
+ * by reference to the number of tokens returned.
+ *
+ * On out of memory, zero length string, zero length
+ * separator, NULL is returned.
+ *
+ * Note that 'sep' is able to split a string using
+ * a multi-character separator. For example
+ * sdssplit("foo_-_bar","_-_"); will return two
+ * elements "foo" and "bar".
+ *
+ * This version of the function is binary-safe but
+ * requires length arguments. sdssplit() is just the
+ * same function but for zero-terminated strings.
+ */
+sds *sdssplitlen(const char *s, int len, const char *sep, int seplen, int *count) {
+ int elements = 0, slots = 5, start = 0, j;
+ sds *tokens;
+
+ if (seplen < 1 || len < 0) return NULL;
+
+ tokens = s_malloc(sizeof(sds)*slots);
+ if (tokens == NULL) return NULL;
+
+ if (len == 0) {
+ *count = 0;
+ return tokens;
+ }
+ for (j = 0; j < (len-(seplen-1)); j++) {
+ /* make sure there is room for the next element and the final one */
+ if (slots < elements+2) {
+ sds *newtokens;
+
+ slots *= 2;
+ newtokens = s_realloc(tokens,sizeof(sds)*slots);
+ if (newtokens == NULL) goto cleanup;
+ tokens = newtokens;
+ }
+ /* search the separator */
+ if ((seplen == 1 && *(s+j) == sep[0]) || (memcmp(s+j,sep,seplen) == 0)) {
+ tokens[elements] = sdsnewlen(s+start,j-start);
+ if (tokens[elements] == NULL) goto cleanup;
+ elements++;
+ start = j+seplen;
+ j = j+seplen-1; /* skip the separator */
+ }
+ }
+ /* Add the final element. We are sure there is room in the tokens array. */
+ tokens[elements] = sdsnewlen(s+start,len-start);
+ if (tokens[elements] == NULL) goto cleanup;
+ elements++;
+ *count = elements;
+ return tokens;
+
+cleanup:
+ {
+ int i;
+ for (i = 0; i < elements; i++) sdsfree(tokens[i]);
+ s_free(tokens);
+ *count = 0;
+ return NULL;
+ }
+}
+
+/* Free the result returned by sdssplitlen(), or do nothing if 'tokens' is NULL. */
+void sdsfreesplitres(sds *tokens, int count) {
+ if (!tokens) return;
+ while(count--)
+ sdsfree(tokens[count]);
+ s_free(tokens);
+}
+
+/* Append to the sds string "s" an escaped string representation where
+ * all the non-printable characters (tested with isprint()) are turned into
+ * escapes in the form "\n\r\a...." or "\x<hex-number>".
+ *
+ * After the call, the modified sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call. */
+sds sdscatrepr(sds s, const char *p, size_t len) {
+ s = sdscatlen(s,"\"",1);
+ while(len--) {
+ switch(*p) {
+ case '\\':
+ case '"':
+ s = sdscatprintf(s,"\\%c",*p);
+ break;
+ case '\n': s = sdscatlen(s,"\\n",2); break;
+ case '\r': s = sdscatlen(s,"\\r",2); break;
+ case '\t': s = sdscatlen(s,"\\t",2); break;
+ case '\a': s = sdscatlen(s,"\\a",2); break;
+ case '\b': s = sdscatlen(s,"\\b",2); break;
+ default:
+ if (isprint(*p))
+ s = sdscatprintf(s,"%c",*p);
+ else
+ s = sdscatprintf(s,"\\x%02x",(unsigned char)*p);
+ break;
+ }
+ p++;
+ }
+ return sdscatlen(s,"\"",1);
+}
+
+/* Helper function for sdssplitargs() that returns non zero if 'c'
+ * is a valid hex digit. */
+static int is_hex_digit(char c) {
+ return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') ||
+ (c >= 'A' && c <= 'F');
+}
+
+/* Helper function for sdssplitargs() that converts a hex digit into an
+ * integer from 0 to 15 */
+static int hex_digit_to_int(char c) {
+ switch(c) {
+ case '0': return 0;
+ case '1': return 1;
+ case '2': return 2;
+ case '3': return 3;
+ case '4': return 4;
+ case '5': return 5;
+ case '6': return 6;
+ case '7': return 7;
+ case '8': return 8;
+ case '9': return 9;
+ case 'a': case 'A': return 10;
+ case 'b': case 'B': return 11;
+ case 'c': case 'C': return 12;
+ case 'd': case 'D': return 13;
+ case 'e': case 'E': return 14;
+ case 'f': case 'F': return 15;
+ default: return 0;
+ }
+}
+
+/* Split a line into arguments, where every argument can be in the
+ * following programming-language REPL-alike form:
+ *
+ * foo bar "newline are supported\n" and "\xff\x00otherstuff"
+ *
+ * The number of arguments is stored into *argc, and an array
+ * of sds is returned.
+ *
+ * The caller should free the resulting array of sds strings with
+ * sdsfreesplitres().
+ *
+ * Note that sdscatrepr() is able to convert back a string into
+ * a quoted string in the same format sdssplitargs() is able to parse.
+ *
+ * The function returns the allocated tokens on success, even when the
+ * input string is empty, or NULL if the input contains unbalanced
+ * quotes or closed quotes followed by non space characters
+ * as in: "foo"bar or "foo'
+ */
+sds *sdssplitargs(const char *line, int *argc) {
+ const char *p = line;
+ char *current = NULL;
+ char **vector = NULL;
+
+ *argc = 0;
+ while(1) {
+ /* skip blanks */
+ while(*p && isspace(*p)) p++;
+ if (*p) {
+ /* get a token */
+ int inq=0; /* set to 1 if we are in "quotes" */
+ int insq=0; /* set to 1 if we are in 'single quotes' */
+ int done=0;
+
+ if (current == NULL) current = sdsempty();
+ while(!done) {
+ if (inq) {
+ if (*p == '\\' && *(p+1) == 'x' &&
+ is_hex_digit(*(p+2)) &&
+ is_hex_digit(*(p+3)))
+ {
+ unsigned char byte;
+
+ byte = (hex_digit_to_int(*(p+2))*16)+
+ hex_digit_to_int(*(p+3));
+ current = sdscatlen(current,(char*)&byte,1);
+ p += 3;
+ } else if (*p == '\\' && *(p+1)) {
+ char c;
+
+ p++;
+ switch(*p) {
+ case 'n': c = '\n'; break;
+ case 'r': c = '\r'; break;
+ case 't': c = '\t'; break;
+ case 'b': c = '\b'; break;
+ case 'a': c = '\a'; break;
+ default: c = *p; break;
+ }
+ current = sdscatlen(current,&c,1);
+ } else if (*p == '"') {
+ /* closing quote must be followed by a space or
+ * nothing at all. */
+ if (*(p+1) && !isspace(*(p+1))) goto err;
+ done=1;
+ } else if (!*p) {
+ /* unterminated quotes */
+ goto err;
+ } else {
+ current = sdscatlen(current,p,1);
+ }
+ } else if (insq) {
+ if (*p == '\\' && *(p+1) == '\'') {
+ p++;
+ current = sdscatlen(current,"'",1);
+ } else if (*p == '\'') {
+ /* closing quote must be followed by a space or
+ * nothing at all. */
+ if (*(p+1) && !isspace(*(p+1))) goto err;
+ done=1;
+ } else if (!*p) {
+ /* unterminated quotes */
+ goto err;
+ } else {
+ current = sdscatlen(current,p,1);
+ }
+ } else {
+ switch(*p) {
+ case ' ':
+ case '\n':
+ case '\r':
+ case '\t':
+ case '\0':
+ done=1;
+ break;
+ case '"':
+ inq=1;
+ break;
+ case '\'':
+ insq=1;
+ break;
+ default:
+ current = sdscatlen(current,p,1);
+ break;
+ }
+ }
+ if (*p) p++;
+ }
+ /* add the token to the vector */
+ vector = s_realloc(vector,((*argc)+1)*sizeof(char*));
+ vector[*argc] = current;
+ (*argc)++;
+ current = NULL;
+ } else {
+ /* Even on empty input string return something not NULL. */
+ if (vector == NULL) vector = s_malloc(sizeof(void*));
+ return vector;
+ }
+ }
+
+err:
+ while((*argc)--)
+ sdsfree(vector[*argc]);
+ s_free(vector);
+ if (current) sdsfree(current);
+ *argc = 0;
+ return NULL;
+}
+
+/* Modify the string substituting all the occurrences of the set of
+ * characters specified in the 'from' string to the corresponding character
+ * in the 'to' array.
+ *
+ * For instance: sdsmapchars(mystring, "ho", "01", 2)
+ * will have the effect of turning the string "hello" into "0ell1".
+ *
+ * The function returns the sds string pointer, that is always the same
+ * as the input pointer since no resize is needed. */
+sds sdsmapchars(sds s, const char *from, const char *to, size_t setlen) {
+ size_t j, i, l = sdslen(s);
+
+ for (j = 0; j < l; j++) {
+ for (i = 0; i < setlen; i++) {
+ if (s[j] == from[i]) {
+ s[j] = to[i];
+ break;
+ }
+ }
+ }
+ return s;
+}
+
+/* Join an array of C strings using the specified separator (also a C string).
+ * Returns the result as an sds string. */
+sds sdsjoin(char **argv, int argc, char *sep) {
+ sds join = sdsempty();
+ int j;
+
+ for (j = 0; j < argc; j++) {
+ join = sdscat(join, argv[j]);
+ if (j != argc-1) join = sdscat(join,sep);
+ }
+ return join;
+}
+
+/* Like sdsjoin, but joins an array of SDS strings. */
+sds sdsjoinsds(sds *argv, int argc, const char *sep, size_t seplen) {
+ sds join = sdsempty();
+ int j;
+
+ for (j = 0; j < argc; j++) {
+ join = sdscatsds(join, argv[j]);
+ if (j != argc-1) join = sdscatlen(join,sep,seplen);
+ }
+ return join;
+}
+
+#if defined(SDS_TEST_MAIN)
+#include <stdio.h>
+#include "testhelp.h"
+#include "limits.h"
+
+#define UNUSED(x) (void)(x)
+int sdsTest(void) {
+ {
+ sds x = sdsnew("foo"), y;
+
+ test_cond("Create a string and obtain the length",
+ sdslen(x) == 3 && memcmp(x,"foo\0",4) == 0)
+
+ sdsfree(x);
+ x = sdsnewlen("foo",2);
+ test_cond("Create a string with specified length",
+ sdslen(x) == 2 && memcmp(x,"fo\0",3) == 0)
+
+ x = sdscat(x,"bar");
+ test_cond("Strings concatenation",
+ sdslen(x) == 5 && memcmp(x,"fobar\0",6) == 0);
+
+ x = sdscpy(x,"a");
+ test_cond("sdscpy() against an originally longer string",
+ sdslen(x) == 1 && memcmp(x,"a\0",2) == 0)
+
+ x = sdscpy(x,"xyzxxxxxxxxxxyyyyyyyyyykkkkkkkkkk");
+ test_cond("sdscpy() against an originally shorter string",
+ sdslen(x) == 33 &&
+ memcmp(x,"xyzxxxxxxxxxxyyyyyyyyyykkkkkkkkkk\0",33) == 0)
+
+ sdsfree(x);
+ x = sdscatprintf(sdsempty(),"%d",123);
+ test_cond("sdscatprintf() seems working in the base case",
+ sdslen(x) == 3 && memcmp(x,"123\0",4) == 0)
+
+ sdsfree(x);
+ x = sdsnew("--");
+ x = sdscatfmt(x, "Hello %s World %I,%I--", "Hi!", LLONG_MIN,LLONG_MAX);
+ test_cond("sdscatfmt() seems working in the base case",
+ sdslen(x) == 60 &&
+ memcmp(x,"--Hello Hi! World -9223372036854775808,"
+ "9223372036854775807--",60) == 0)
+ printf("[%s]\n",x);
+
+ sdsfree(x);
+ x = sdsnew("--");
+ x = sdscatfmt(x, "%u,%U--", UINT_MAX, ULLONG_MAX);
+ test_cond("sdscatfmt() seems working with unsigned numbers",
+ sdslen(x) == 35 &&
+ memcmp(x,"--4294967295,18446744073709551615--",35) == 0)
+
+ sdsfree(x);
+ x = sdsnew(" x ");
+ sdstrim(x," x");
+ test_cond("sdstrim() works when all chars match",
+ sdslen(x) == 0)
+
+ sdsfree(x);
+ x = sdsnew(" x ");
+ sdstrim(x," ");
+ test_cond("sdstrim() works when a single char remains",
+ sdslen(x) == 1 && x[0] == 'x')
+
+ sdsfree(x);
+ x = sdsnew("xxciaoyyy");
+ sdstrim(x,"xy");
+ test_cond("sdstrim() correctly trims characters",
+ sdslen(x) == 4 && memcmp(x,"ciao\0",5) == 0)
+
+ y = sdsdup(x);
+ sdsrange(y,1,1);
+ test_cond("sdsrange(...,1,1)",
+ sdslen(y) == 1 && memcmp(y,"i\0",2) == 0)
+
+ sdsfree(y);
+ y = sdsdup(x);
+ sdsrange(y,1,-1);
+ test_cond("sdsrange(...,1,-1)",
+ sdslen(y) == 3 && memcmp(y,"iao\0",4) == 0)
+
+ sdsfree(y);
+ y = sdsdup(x);
+ sdsrange(y,-2,-1);
+ test_cond("sdsrange(...,-2,-1)",
+ sdslen(y) == 2 && memcmp(y,"ao\0",3) == 0)
+
+ sdsfree(y);
+ y = sdsdup(x);
+ sdsrange(y,2,1);
+ test_cond("sdsrange(...,2,1)",
+ sdslen(y) == 0 && memcmp(y,"\0",1) == 0)
+
+ sdsfree(y);
+ y = sdsdup(x);
+ sdsrange(y,1,100);
+ test_cond("sdsrange(...,1,100)",
+ sdslen(y) == 3 && memcmp(y,"iao\0",4) == 0)
+
+ sdsfree(y);
+ y = sdsdup(x);
+ sdsrange(y,100,100);
+ test_cond("sdsrange(...,100,100)",
+ sdslen(y) == 0 && memcmp(y,"\0",1) == 0)
+
+ sdsfree(y);
+ sdsfree(x);
+ x = sdsnew("foo");
+ y = sdsnew("foa");
+ test_cond("sdscmp(foo,foa)", sdscmp(x,y) > 0)
+
+ sdsfree(y);
+ sdsfree(x);
+ x = sdsnew("bar");
+ y = sdsnew("bar");
+ test_cond("sdscmp(bar,bar)", sdscmp(x,y) == 0)
+
+ sdsfree(y);
+ sdsfree(x);
+ x = sdsnew("aar");
+ y = sdsnew("bar");
+ test_cond("sdscmp(bar,bar)", sdscmp(x,y) < 0)
+
+ sdsfree(y);
+ sdsfree(x);
+ x = sdsnewlen("\a\n\0foo\r",7);
+ y = sdscatrepr(sdsempty(),x,sdslen(x));
+ test_cond("sdscatrepr(...data...)",
+ memcmp(y,"\"\\a\\n\\x00foo\\r\"",15) == 0)
+
+ {
+ unsigned int oldfree;
+ char *p;
+ int step = 10, j, i;
+
+ sdsfree(x);
+ sdsfree(y);
+ x = sdsnew("0");
+ test_cond("sdsnew() free/len buffers", sdslen(x) == 1 && sdsavail(x) == 0);
+
+ /* Run the test a few times in order to hit the first two
+ * SDS header types. */
+ for (i = 0; i < 10; i++) {
+ int oldlen = sdslen(x);
+ x = sdsMakeRoomFor(x,step);
+ int type = x[-1]&SDS_TYPE_MASK;
+
+ test_cond("sdsMakeRoomFor() len", sdslen(x) == oldlen);
+ if (type != SDS_TYPE_5) {
+ test_cond("sdsMakeRoomFor() free", sdsavail(x) >= step);
+ oldfree = sdsavail(x);
+ }
+ p = x+oldlen;
+ for (j = 0; j < step; j++) {
+ p[j] = 'A'+j;
+ }
+ sdsIncrLen(x,step);
+ }
+ test_cond("sdsMakeRoomFor() content",
+ memcmp("0ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ",x,101) == 0);
+ test_cond("sdsMakeRoomFor() final length",sdslen(x)==101);
+
+ sdsfree(x);
+ }
+ }
+ test_report()
+ return 0;
+}
+#endif
+
+#ifdef SDS_TEST_MAIN
+int main(void) {
+ return sdsTest();
+}
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sdsalloc.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sdsalloc.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sdsalloc.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,41 @@
+/* SDSLib 2.0 -- A C dynamic strings library
+ *
+ * Copyright (c) 2006-2015, Salvatore Sanfilippo <antirez at gmail dot com>
+ * Copyright (c) 2015, Redis Labs, Inc
+ * All rights reserved.
+ *
+ * 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.
+ * * Neither the name of Redis nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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.
+ */
+
+/* SDS allocator selection.
+ *
+ * This file is used in order to change the SDS allocator at compile time.
+ * Just define the following defines to what you want to use. Also add
+ * the include of your alternate allocator if needed (not needed in order
+ * to use the default libc allocator). */
+
+#define s_malloc malloc
+#define s_realloc realloc
+#define s_free free
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/buffer.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/buffer.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/buffer.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,52 @@
+#ifndef CARYLL_INCLUDE_BUFFER_H
+#define CARYLL_INCLUDE_BUFFER_H
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdarg.h>
+#include "dep/sds.h"
+
+typedef struct caryll_Buffer {
+ size_t cursor;
+ size_t size;
+ size_t free;
+ uint8_t *data;
+} caryll_Buffer;
+
+caryll_Buffer *bufnew(void);
+caryll_Buffer *bufninit(uint32_t n, ...);
+void buffree(caryll_Buffer *buf);
+size_t buflen(caryll_Buffer *buf);
+size_t bufpos(caryll_Buffer *buf);
+void bufseek(caryll_Buffer *buf, size_t pos);
+void bufclear(caryll_Buffer *buf);
+
+void bufwrite8(caryll_Buffer *buf, uint8_t byte);
+void bufwrite16l(caryll_Buffer *buf, uint16_t x);
+void bufwrite16b(caryll_Buffer *buf, uint16_t x);
+void bufwrite24l(caryll_Buffer *buf, uint32_t x);
+void bufwrite24b(caryll_Buffer *buf, uint32_t x);
+void bufwrite32l(caryll_Buffer *buf, uint32_t x);
+void bufwrite32b(caryll_Buffer *buf, uint32_t x);
+void bufwrite64l(caryll_Buffer *buf, uint64_t x);
+void bufwrite64b(caryll_Buffer *buf, uint64_t x);
+
+void bufnwrite8(caryll_Buffer *buf, uint32_t n, ...);
+
+void bufwrite_sds(caryll_Buffer *buf, sds str);
+void bufwrite_str(caryll_Buffer *buf, const char *str);
+void bufwrite_bytes(caryll_Buffer *buf, size_t size, const uint8_t *str);
+void bufwrite_buf(caryll_Buffer *buf, caryll_Buffer *that);
+void bufwrite_bufdel(caryll_Buffer *buf, caryll_Buffer *that);
+
+void bufping16b(caryll_Buffer *buf, size_t *offset, size_t *cp);
+void bufping16bd(caryll_Buffer *buf, size_t *offset, size_t *shift, size_t *cp);
+void bufpingpong16b(caryll_Buffer *buf, caryll_Buffer *that, size_t *offset, size_t *cp);
+void bufpong(caryll_Buffer *buf, size_t *offset, size_t *cp);
+
+void bufprint(caryll_Buffer *buf);
+
+void buflongalign(caryll_Buffer *buf);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/element.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/element.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/element.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,67 @@
+#ifndef CARYLL_INCLUDE_ELEMENT_H
+#define CARYLL_INCLUDE_ELEMENT_H
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+
+#include "ownership.h"
+
+// We assume all T have trivial move constructors.
+#define caryll_T(T) \
+ void (*init)(MODIFY T *); \
+ void (*copy)(MODIFY T *, const T *); \
+ void (*move)(MODIFY T *, T *); \
+ void (*dispose)(MOVE T *); \
+ void (*replace)(MODIFY T *, MOVE const T); \
+ void (*copyReplace)(MODIFY T *, const T);
+
+#define caryll_VT(T) \
+ caryll_T(T); \
+ T (*empty)(); \
+ T (*dup)(const T);
+#define caryll_RT(T) \
+ caryll_T(T); \
+ T *(*create)(); \
+ void (*free)(MOVE T *);
+
+#define caryll_ElementInterfaceOf(T) const struct __caryll_elementinterface_##T
+#define caryll_ElementInterface(T) \
+ caryll_ElementInterfaceOf(T) { \
+ caryll_T(T); \
+ }
+#define caryll_RefElementInterface(T) \
+ caryll_ElementInterfaceOf(T) { \
+ caryll_RT(T); \
+ }
+#define caryll_ValElementInterface(T) \
+ caryll_ElementInterfaceOf(T) { \
+ caryll_VT(T); \
+ }
+
+/// Individual traits
+
+#define caryll_Show(T) void (*show)(const T);
+#define caryll_Eq(T) bool (*equal)(const T, const T);
+#define caryll_Ord(T) \
+ caryll_Eq(T); \
+ int (*compare)(const T a, const T b); \
+ int (*compareRef)(const T *a, const T *b);
+#define caryll_Monoid(T) \
+ T (*neutral)(); \
+ T (*plus)(const T a, const T b); \
+ void (*inplacePlus)(MODIFY T * a, const T b);
+#define caryll_Group(T) \
+ caryll_Monoid(T); \
+ void (*inplaceNegate)(MODIFY T * a); \
+ T (*negate)(const T); \
+ void (*inplaceMinus)(MODIFY T *, const T); \
+ T (*minus)(const T, const T);
+#define caryll_Module(T, TScale) \
+ caryll_Group(T); \
+ void (*inplaceScale)(MODIFY T * a, TScale b); \
+ void (*inplacePlusScale)(MODIFY T * a, TScale b, const T c); \
+ T (*scale)(const T a, TScale b);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/ownership.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/ownership.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/ownership.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,11 @@
+#ifndef CARYLL_INCLUDE_OWNERSHIP_H
+#define CARYLL_INCLUDE_OWNERSHIP_H
+
+#define OWNING /*owning*/
+#define MOVE /*move*/
+#define OBSERVE /*shared*/ const
+#define MODIFY /*modify*/
+#define COPY /*shared*/
+#define OUT /*shared*/
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/vector.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/vector.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/vector.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,38 @@
+#ifndef CARYLL_INCLUDE_VECTOR_H
+#define CARYLL_INCLUDE_VECTOR_H
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+
+#include "element.h"
+
+// We assume all T have trivial move constructors.
+#define caryll_Vector(T) \
+ struct { \
+ size_t length; \
+ size_t capacity; \
+ T *items; \
+ }
+#define caryll_VectorInterfaceTypeName(__TV) const struct __caryll_vectorinterface_##__TV
+#define caryll_VectorInterfaceTrait(__TV, __T) \
+ caryll_RT(__TV); \
+ void (*initN)(MODIFY __TV * arr, size_t n); \
+ void (*initCapN)(MODIFY __TV * arr, size_t n); \
+ __TV *(*createN)(size_t n); \
+ void (*fill)(MODIFY __TV * arr, size_t n); \
+ void (*clear)(MODIFY __TV * arr); \
+ void (*push)(MODIFY __TV * arr, MOVE __T obj); \
+ void (*shrinkToFit)(MODIFY __TV * arr); \
+ __T (*pop)(MODIFY __TV * arr); \
+ void (*disposeItem)(MODIFY __TV * arr, size_t n); \
+ void (*filterEnv)(MODIFY __TV * arr, bool (*fn)(const __T *x, void *env), void *env); \
+ void (*sort)(MODIFY __TV * arr, int (*fn)(const __T *a, const __T *b));
+
+#define caryll_VectorInterface(__TV, __T) \
+ caryll_VectorInterfaceTypeName(__TV) { \
+ caryll_VectorInterfaceTrait(__TV, __T); \
+ }
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json-builder.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json-builder.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json-builder.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,139 @@
+
+/* vim: set et ts=3 sw=3 sts=3 ft=c:
+ *
+ * Copyright (C) 2014 James McLaughlin. All rights reserved.
+ * https://github.com/udp/json-builder
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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 _JSON_BUILDER_H
+#define _JSON_BUILDER_H
+
+/* Requires json.h from json-parser
+ * https://github.com/udp/json-parser
+ */
+#include "json.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* IMPORTANT NOTE: If you want to use json-builder functions with values
+ * allocated by json-parser as part of the parsing process, you must pass
+ * json_builder_extra as the value_extra setting in json_settings when
+ * parsing. Otherwise there will not be room for the extra state and
+ * json-builder WILL invoke undefined behaviour.
+ *
+ * Also note that unlike json-parser, json-builder does not currently support
+ * custom allocators (for no particular reason other than that it doesn't have
+ * any settings or global state.)
+ */
+extern const size_t json_builder_extra;
+
+/*** Arrays
+ ***
+ * Note that all of these length arguments are just a hint to allow for
+ * pre-allocation - passing 0 is fine.
+ */
+json_value *json_array_new(size_t length);
+json_value *json_array_push(json_value *array, json_value *);
+
+/*** Objects
+ ***/
+json_value *json_object_new(size_t length);
+
+json_value *json_object_push(json_value *object, const json_char *name, json_value *);
+
+/* Same as json_object_push, but doesn't call strlen() for you.
+ */
+json_value *json_object_push_length(json_value *object, unsigned int name_length, const json_char *name, json_value *);
+
+/* Same as json_object_push_length, but doesn't copy the name buffer before
+ * storing it in the value. Use this micro-optimisation at your own risk.
+ */
+json_value *json_object_push_nocopy(json_value *object, unsigned int name_length, json_char *name, json_value *);
+
+/* Merges all entries from objectB into objectA and frees objectB.
+ */
+json_value *json_object_merge(json_value *objectA, json_value *objectB);
+
+/* Sort the entries of an object based on the order in a prototype object.
+ * Helpful when reading JSON and writing it again to preserve user order.
+ */
+void json_object_sort(json_value *object, json_value *proto);
+
+/*** Strings
+ ***/
+json_value *json_string_new(const json_char *);
+json_value *json_string_new_length(unsigned int length, const json_char *);
+json_value *json_string_new_nocopy(unsigned int length, json_char *);
+
+/*** Everything else
+ ***/
+json_value *json_integer_new(json_int_t);
+json_value *json_double_new(double);
+json_value *json_boolean_new(int);
+json_value *json_null_new(void);
+
+/*** Serializing
+ ***/
+#define json_serialize_mode_multiline 0
+#define json_serialize_mode_single_line 1
+#define json_serialize_mode_packed 2
+
+#define json_serialize_opt_CRLF (1 << 1)
+#define json_serialize_opt_pack_brackets (1 << 2)
+#define json_serialize_opt_no_space_after_comma (1 << 3)
+#define json_serialize_opt_no_space_after_colon (1 << 4)
+#define json_serialize_opt_use_tabs (1 << 5)
+
+typedef struct json_serialize_opts {
+ int mode;
+ int opts;
+ int indent_size;
+
+} json_serialize_opts;
+
+/* Returns a length in characters that is at least large enough to hold the
+ * value in its serialized form, including a null terminator.
+ */
+size_t json_measure(json_value *);
+size_t json_measure_ex(json_value *, json_serialize_opts);
+
+/* Serializes a JSON value into the buffer given (which must already be
+ * allocated with a length of at least json_measure(value, opts))
+ */
+void json_serialize(json_char *buf, json_value *);
+void json_serialize_ex(json_char *buf, json_value *, json_serialize_opts);
+
+/*** Cleaning up
+ ***/
+void json_builder_free(json_value *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,291 @@
+
+/* vim: set et ts=3 sw=3 sts=3 ft=c:
+ *
+ * Copyright (C) 2012, 2013, 2014 James McLaughlin et al. All rights reserved.
+ * https://github.com/udp/json-parser
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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 _JSON_H
+#define _JSON_H
+
+#ifndef json_char
+ #define json_char char
+#endif
+
+#ifdef _CARYLL_USE_PRE_SERIALIZED
+ #define CARYLL_USE_PRE_SERIALIZED
+#endif
+
+#ifndef json_int_t
+ #include <stdint.h>
+ #ifndef _MSC_VER
+ #include <inttypes.h>
+ #define json_int_t int64_t
+ #else
+ #define json_int_t __int64
+ #endif
+#endif
+
+#include <stdlib.h>
+
+#ifdef __cplusplus
+
+ #include <string.h>
+
+ extern "C"
+ {
+
+#endif
+
+typedef struct
+{
+ unsigned long max_memory;
+ int settings;
+
+ /* Custom allocator support (leave null to use malloc/free)
+ */
+
+ void * (* mem_alloc) (size_t, int zero, void * user_data);
+ void (* mem_free) (void *, void * user_data);
+
+ void * user_data; /* will be passed to mem_alloc and mem_free */
+
+ size_t value_extra; /* how much extra space to allocate for values? */
+
+} json_settings;
+
+#define json_enable_comments 0x01
+
+typedef enum
+{
+ json_none,
+ json_object,
+ json_array,
+ json_integer,
+ json_double,
+ json_string,
+ json_boolean,
+ json_null
+#ifdef CARYLL_USE_PRE_SERIALIZED
+,
+ json_pre_serialized
+#endif
+} json_type;
+
+extern const struct _json_value json_value_none;
+
+typedef struct _json_object_entry
+{
+ json_char * name;
+ unsigned int name_length;
+
+ struct _json_value * value;
+
+} json_object_entry;
+
+typedef struct _json_value
+{
+ struct _json_value * parent;
+
+ json_type type;
+
+ union
+ {
+ int boolean;
+ json_int_t integer;
+ double dbl;
+
+ struct
+ {
+ unsigned int length;
+ json_char * ptr; /* null terminated */
+
+ } string;
+
+ struct
+ {
+ unsigned int length;
+
+ json_object_entry * values;
+
+ #if defined(__cplusplus) && __cplusplus >= 201103L
+ decltype(values) begin () const
+ { return values;
+ }
+ decltype(values) end () const
+ { return values + length;
+ }
+ #endif
+
+ } object;
+
+ struct
+ {
+ unsigned int length;
+ struct _json_value ** values;
+
+ #if defined(__cplusplus) && __cplusplus >= 201103L
+ decltype(values) begin () const
+ { return values;
+ }
+ decltype(values) end () const
+ { return values + length;
+ }
+ #endif
+
+ } array;
+
+ } u;
+
+ union
+ {
+ struct _json_value * next_alloc;
+ void * object_mem;
+
+ } _reserved;
+
+ #ifdef JSON_TRACK_SOURCE
+
+ /* Location of the value in the source JSON
+ */
+ unsigned int line, col;
+
+ #endif
+
+
+ /* Some C++ operator sugar */
+
+ #ifdef __cplusplus
+
+ public:
+
+ inline _json_value ()
+ { memset (this, 0, sizeof (_json_value));
+ }
+
+ inline const struct _json_value &operator [] (int index) const
+ {
+ if (type != json_array || index < 0
+ || ((unsigned int) index) >= u.array.length)
+ {
+ return json_value_none;
+ }
+
+ return *u.array.values [index];
+ }
+
+ inline const struct _json_value &operator [] (const char * index) const
+ {
+ if (type != json_object)
+ return json_value_none;
+
+ for (unsigned int i = 0; i < u.object.length; ++ i)
+ if (!strcmp (u.object.values [i].name, index))
+ return *u.object.values [i].value;
+
+ return json_value_none;
+ }
+
+ inline operator const char * () const
+ {
+ switch (type)
+ {
+ case json_string:
+ return u.string.ptr;
+
+ default:
+ return "";
+ };
+ }
+
+ inline operator json_int_t () const
+ {
+ switch (type)
+ {
+ case json_integer:
+ return u.integer;
+
+ case json_double:
+ return (json_int_t) u.dbl;
+
+ default:
+ return 0;
+ };
+ }
+
+ inline operator bool () const
+ {
+ if (type != json_boolean)
+ return false;
+
+ return u.boolean != 0;
+ }
+
+ inline operator double () const
+ {
+ switch (type)
+ {
+ case json_integer:
+ return (double) u.integer;
+
+ case json_double:
+ return u.dbl;
+
+ default:
+ return 0;
+ };
+ }
+
+ #endif
+
+} json_value;
+
+json_value * json_parse (const json_char * json,
+ size_t length);
+
+#define json_error_max 128
+json_value * json_parse_ex (json_settings * settings,
+ const json_char * json,
+ size_t length,
+ char * error);
+
+void json_value_free (json_value *);
+
+
+/* Not usually necessary, unless you used a custom mem_alloc and now want to
+ * use a custom mem_free.
+ */
+void json_value_free_ex (json_settings * settings,
+ json_value *);
+
+
+#ifdef __cplusplus
+ } /* extern "C" */
+#endif
+
+#endif
+
+
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/sds.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/sds.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/sds.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,259 @@
+/* SDSLib 2.0 -- A C dynamic strings library
+ *
+ * Copyright (c) 2006-2015, Salvatore Sanfilippo <antirez at gmail dot com>
+ * Copyright (c) 2015, Redis Labs, Inc
+ * All rights reserved.
+ *
+ * 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.
+ * * Neither the name of Redis nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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 __SDS_H
+#define __SDS_H
+
+#define SDS_MAX_PREALLOC (1024 * 1024)
+
+#include <sys/types.h>
+#include <stdarg.h>
+#include <stdint.h>
+
+typedef char *sds;
+
+/* Note: sdshdr5 is never used, we just access the flags byte directly.
+ * However is here to document the layout of type 5 SDS strings. */
+struct __attribute__((__packed__)) sdshdr5 {
+ unsigned char flags; /* 3 lsb of type, and 5 msb of string length */
+ char buf[];
+};
+struct __attribute__((__packed__)) sdshdr8 {
+ uint8_t len; /* used */
+ uint8_t alloc; /* excluding the header and null terminator */
+ unsigned char flags; /* 3 lsb of type, 5 unused bits */
+ char buf[];
+};
+struct __attribute__((__packed__)) sdshdr16 {
+ uint16_t len; /* used */
+ uint16_t alloc; /* excluding the header and null terminator */
+ unsigned char flags; /* 3 lsb of type, 5 unused bits */
+ char buf[];
+};
+struct __attribute__((__packed__)) sdshdr32 {
+ uint32_t len; /* used */
+ uint32_t alloc; /* excluding the header and null terminator */
+ unsigned char flags; /* 3 lsb of type, 5 unused bits */
+ char buf[];
+};
+struct __attribute__((__packed__)) sdshdr64 {
+ uint64_t len; /* used */
+ uint64_t alloc; /* excluding the header and null terminator */
+ unsigned char flags; /* 3 lsb of type, 5 unused bits */
+ char buf[];
+};
+
+#define SDS_TYPE_5 0
+#define SDS_TYPE_8 1
+#define SDS_TYPE_16 2
+#define SDS_TYPE_32 3
+#define SDS_TYPE_64 4
+#define SDS_TYPE_MASK 7
+#define SDS_TYPE_BITS 3
+#define SDS_HDR_VAR(T, s) struct sdshdr##T *sh = (void *)((s) - (sizeof(struct sdshdr##T)));
+#define SDS_HDR(T, s) ((struct sdshdr##T *)((s) - (sizeof(struct sdshdr##T))))
+#define SDS_TYPE_5_LEN(f) ((f) >> SDS_TYPE_BITS)
+
+static inline size_t sdslen(const sds s) {
+ unsigned char flags = s[-1];
+ switch (flags & SDS_TYPE_MASK) {
+ case SDS_TYPE_5:
+ return SDS_TYPE_5_LEN(flags);
+ case SDS_TYPE_8:
+ return SDS_HDR(8, s)->len;
+ case SDS_TYPE_16:
+ return SDS_HDR(16, s)->len;
+ case SDS_TYPE_32:
+ return SDS_HDR(32, s)->len;
+ case SDS_TYPE_64:
+ return SDS_HDR(64, s)->len;
+ }
+ return 0;
+}
+
+static inline size_t sdsavail(const sds s) {
+ unsigned char flags = s[-1];
+ switch (flags & SDS_TYPE_MASK) {
+ case SDS_TYPE_5: {
+ return 0;
+ }
+ case SDS_TYPE_8: {
+ SDS_HDR_VAR(8, s);
+ return sh->alloc - sh->len;
+ }
+ case SDS_TYPE_16: {
+ SDS_HDR_VAR(16, s);
+ return sh->alloc - sh->len;
+ }
+ case SDS_TYPE_32: {
+ SDS_HDR_VAR(32, s);
+ return sh->alloc - sh->len;
+ }
+ case SDS_TYPE_64: {
+ SDS_HDR_VAR(64, s);
+ return sh->alloc - sh->len;
+ }
+ }
+ return 0;
+}
+
+static inline void sdssetlen(sds s, size_t newlen) {
+ unsigned char flags = s[-1];
+ switch (flags & SDS_TYPE_MASK) {
+ case SDS_TYPE_5: {
+ unsigned char *fp = ((unsigned char *)s) - 1;
+ *fp = SDS_TYPE_5 | (newlen << SDS_TYPE_BITS);
+ } break;
+ case SDS_TYPE_8:
+ SDS_HDR(8, s)->len = (uint8_t)newlen;
+ break;
+ case SDS_TYPE_16:
+ SDS_HDR(16, s)->len = (uint16_t)newlen;
+ break;
+ case SDS_TYPE_32:
+ SDS_HDR(32, s)->len = (uint32_t)newlen;
+ break;
+ case SDS_TYPE_64:
+ SDS_HDR(64, s)->len = newlen;
+ break;
+ }
+}
+
+static inline void sdsinclen(sds s, size_t inc) {
+ unsigned char flags = s[-1];
+ switch (flags & SDS_TYPE_MASK) {
+ case SDS_TYPE_5: {
+ unsigned char *fp = ((unsigned char *)s) - 1;
+ unsigned char newlen = SDS_TYPE_5_LEN(flags) + inc;
+ *fp = SDS_TYPE_5 | (newlen << SDS_TYPE_BITS);
+ } break;
+ case SDS_TYPE_8:
+ SDS_HDR(8, s)->len += (uint8_t)inc;
+ break;
+ case SDS_TYPE_16:
+ SDS_HDR(16, s)->len += (uint16_t)inc;
+ break;
+ case SDS_TYPE_32:
+ SDS_HDR(32, s)->len += (uint32_t)inc;
+ break;
+ case SDS_TYPE_64:
+ SDS_HDR(64, s)->len += inc;
+ break;
+ }
+}
+
+/* sdsalloc() = sdsavail() + sdslen() */
+static inline size_t sdsalloc(const sds s) {
+ unsigned char flags = s[-1];
+ switch (flags & SDS_TYPE_MASK) {
+ case SDS_TYPE_5:
+ return SDS_TYPE_5_LEN(flags);
+ case SDS_TYPE_8:
+ return SDS_HDR(8, s)->alloc;
+ case SDS_TYPE_16:
+ return SDS_HDR(16, s)->alloc;
+ case SDS_TYPE_32:
+ return SDS_HDR(32, s)->alloc;
+ case SDS_TYPE_64:
+ return SDS_HDR(64, s)->alloc;
+ }
+ return 0;
+}
+
+static inline void sdssetalloc(sds s, size_t newlen) {
+ unsigned char flags = s[-1];
+ switch (flags & SDS_TYPE_MASK) {
+ case SDS_TYPE_5:
+ /* Nothing to do, this type has no total allocation info. */
+ break;
+ case SDS_TYPE_8:
+ SDS_HDR(8, s)->alloc = (uint8_t)newlen;
+ break;
+ case SDS_TYPE_16:
+ SDS_HDR(16, s)->alloc = (uint16_t)newlen;
+ break;
+ case SDS_TYPE_32:
+ SDS_HDR(32, s)->alloc = (uint32_t)newlen;
+ break;
+ case SDS_TYPE_64:
+ SDS_HDR(64, s)->alloc = newlen;
+ break;
+ }
+}
+
+sds sdsnewlen(const void *init, size_t initlen);
+sds sdsnew(const char *init);
+sds sdsempty(void);
+sds sdsdup(const sds s);
+void sdsfree(sds s);
+sds sdsgrowzero(sds s, size_t len);
+sds sdscatlen(sds s, const void *t, size_t len);
+sds sdscat(sds s, const char *t);
+sds sdscatsds(sds s, const sds t);
+sds sdscpylen(sds s, const char *t, size_t len);
+sds sdscpy(sds s, const char *t);
+
+sds sdscatvprintf(sds s, const char *fmt, va_list ap);
+#ifdef __GNUC__
+sds sdscatprintf(sds s, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
+#else
+sds sdscatprintf(sds s, const char *fmt, ...);
+#endif
+
+sds sdscatfmt(sds s, char const *fmt, ...);
+sds sdstrim(sds s, const char *cset);
+void sdsrange(sds s, int start, int end);
+void sdsupdatelen(sds s);
+void sdsclear(sds s);
+int sdscmp(const sds s1, const sds s2);
+sds *sdssplitlen(const char *s, int len, const char *sep, int seplen, int *count);
+void sdsfreesplitres(sds *tokens, int count);
+void sdstolower(sds s);
+void sdstoupper(sds s);
+sds sdsfromlonglong(long long value);
+sds sdscatrepr(sds s, const char *p, size_t len);
+sds *sdssplitargs(const char *line, int *argc);
+sds sdsmapchars(sds s, const char *from, const char *to, size_t setlen);
+sds sdsjoin(char **argv, int argc, char *sep);
+sds sdsjoinsds(sds *argv, int argc, const char *sep, size_t seplen);
+
+/* Low level functions exposed to the user API */
+sds sdsMakeRoomFor(sds s, size_t addlen);
+void sdsIncrLen(sds s, int incr);
+sds sdsRemoveFreeSpace(sds s);
+size_t sdsAllocSize(sds s);
+void *sdsAllocPtr(sds s);
+
+#ifdef REDIS_TEST
+int sdsTest(int argc, char *argv[]);
+#endif
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/uthash.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/uthash.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/uthash.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,1208 @@
+/*
+Copyright (c) 2003-2017, Troy D. Hanson http://troydhanson.github.com/uthash/
+All rights reserved.
+
+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.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER
+OR CONTRIBUTORS 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 UTHASH_H
+#define UTHASH_H
+
+#define UTHASH_VERSION 2.0.2
+
+#include <string.h> /* memcmp, memset, strlen */
+#include <stddef.h> /* ptrdiff_t */
+#include <stdlib.h> /* exit */
+
+/* These macros use decltype or the earlier __typeof GNU extension.
+ As decltype is only available in newer compilers (VS2010 or gcc 4.3+
+ when compiling c++ source) this code uses whatever method is needed
+ or, for VS2008 where neither is available, uses casting workarounds. */
+#if !defined(DECLTYPE) && !defined(NO_DECLTYPE)
+#if defined(_MSC_VER) /* MS compiler */
+#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */
+#define DECLTYPE(x) (decltype(x))
+#else /* VS2008 or older (or VS2010 in C mode) */
+#define NO_DECLTYPE
+#endif
+#elif defined(__BORLANDC__) || defined(__ICCARM__) || defined(__LCC__) || defined(__WATCOMC__)
+#define NO_DECLTYPE
+#else /* GNU, Sun and other compilers */
+#define DECLTYPE(x) (__typeof(x))
+#endif
+#endif
+
+#ifdef NO_DECLTYPE
+#define DECLTYPE(x)
+#define DECLTYPE_ASSIGN(dst,src) \
+do { \
+ char **_da_dst = (char**)(&(dst)); \
+ *_da_dst = (char*)(src); \
+} while (0)
+#else
+#define DECLTYPE_ASSIGN(dst,src) \
+do { \
+ (dst) = DECLTYPE(dst)(src); \
+} while (0)
+#endif
+
+/* a number of the hash function use uint32_t which isn't defined on Pre VS2010 */
+#if defined(_WIN32)
+#if defined(_MSC_VER) && _MSC_VER >= 1600
+#include <stdint.h>
+#elif defined(__WATCOMC__) || defined(__MINGW32__) || defined(__CYGWIN__)
+#include <stdint.h>
+#else
+typedef unsigned int uint32_t;
+typedef unsigned char uint8_t;
+#endif
+#elif defined(__GNUC__) && !defined(__VXWORKS__)
+#include <stdint.h>
+#else
+typedef unsigned int uint32_t;
+typedef unsigned char uint8_t;
+#endif
+
+#ifndef uthash_malloc
+#define uthash_malloc(sz) malloc(sz) /* malloc fcn */
+#endif
+#ifndef uthash_free
+#define uthash_free(ptr,sz) free(ptr) /* free fcn */
+#endif
+#ifndef uthash_bzero
+#define uthash_bzero(a,n) memset(a,'\0',n)
+#endif
+#ifndef uthash_memcmp
+#define uthash_memcmp(a,b,n) memcmp(a,b,n)
+#endif
+#ifndef uthash_strlen
+#define uthash_strlen(s) strlen(s)
+#endif
+
+#ifndef uthash_noexpand_fyi
+#define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */
+#endif
+#ifndef uthash_expand_fyi
+#define uthash_expand_fyi(tbl) /* can be defined to log expands */
+#endif
+
+#ifndef HASH_NONFATAL_OOM
+#define HASH_NONFATAL_OOM 0
+#endif
+
+#if HASH_NONFATAL_OOM
+/* malloc failures can be recovered from */
+
+#ifndef uthash_nonfatal_oom
+#define uthash_nonfatal_oom(obj) do {} while (0) /* non-fatal OOM error */
+#endif
+
+#define HASH_RECORD_OOM(oomed) do { (oomed) = 1; } while (0)
+#define IF_HASH_NONFATAL_OOM(x) x
+
+#else
+/* malloc failures result in lost memory, hash tables are unusable */
+
+#ifndef uthash_fatal
+#define uthash_fatal(msg) exit(-1) /* fatal OOM error */
+#endif
+
+#define HASH_RECORD_OOM(oomed) uthash_fatal("out of memory")
+#define IF_HASH_NONFATAL_OOM(x)
+
+#endif
+
+/* initial number of buckets */
+#define HASH_INITIAL_NUM_BUCKETS 32U /* initial number of buckets */
+#define HASH_INITIAL_NUM_BUCKETS_LOG2 5U /* lg2 of initial number of buckets */
+#define HASH_BKT_CAPACITY_THRESH 10U /* expand when bucket count reaches */
+
+/* calculate the element whose hash handle address is hhp */
+#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho)))
+/* calculate the hash handle from element address elp */
+#define HH_FROM_ELMT(tbl,elp) ((UT_hash_handle *)(((char*)(elp)) + ((tbl)->hho)))
+
+#define HASH_ROLLBACK_BKT(hh, head, itemptrhh) \
+do { \
+ struct UT_hash_handle *_hd_hh_item = (itemptrhh); \
+ unsigned _hd_bkt; \
+ HASH_TO_BKT(_hd_hh_item->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
+ (head)->hh.tbl->buckets[_hd_bkt].count++; \
+ _hd_hh_item->hh_next = NULL; \
+ _hd_hh_item->hh_prev = NULL; \
+} while (0)
+
+#define HASH_VALUE(keyptr,keylen,hashv) \
+do { \
+ HASH_FCN(keyptr, keylen, hashv); \
+} while (0)
+
+#define HASH_FIND_BYHASHVALUE(hh,head,keyptr,keylen,hashval,out) \
+do { \
+ (out) = NULL; \
+ if (head) { \
+ unsigned _hf_bkt; \
+ HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _hf_bkt); \
+ if (HASH_BLOOM_TEST((head)->hh.tbl, hashval) != 0) { \
+ HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], keyptr, keylen, hashval, out); \
+ } \
+ } \
+} while (0)
+
+#define HASH_FIND(hh,head,keyptr,keylen,out) \
+do { \
+ unsigned _hf_hashv; \
+ HASH_VALUE(keyptr, keylen, _hf_hashv); \
+ HASH_FIND_BYHASHVALUE(hh, head, keyptr, keylen, _hf_hashv, out); \
+} while (0)
+
+#ifdef HASH_BLOOM
+#define HASH_BLOOM_BITLEN (1UL << HASH_BLOOM)
+#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8UL) + (((HASH_BLOOM_BITLEN%8UL)!=0UL) ? 1UL : 0UL)
+#define HASH_BLOOM_MAKE(tbl,oomed) \
+do { \
+ (tbl)->bloom_nbits = HASH_BLOOM; \
+ (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \
+ if (!(tbl)->bloom_bv) { \
+ HASH_RECORD_OOM(oomed); \
+ } else { \
+ uthash_bzero((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \
+ (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \
+ } \
+} while (0)
+
+#define HASH_BLOOM_FREE(tbl) \
+do { \
+ uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \
+} while (0)
+
+#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8U] |= (1U << ((idx)%8U)))
+#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8U] & (1U << ((idx)%8U)))
+
+#define HASH_BLOOM_ADD(tbl,hashv) \
+ HASH_BLOOM_BITSET((tbl)->bloom_bv, ((hashv) & (uint32_t)((1UL << (tbl)->bloom_nbits) - 1U)))
+
+#define HASH_BLOOM_TEST(tbl,hashv) \
+ HASH_BLOOM_BITTEST((tbl)->bloom_bv, ((hashv) & (uint32_t)((1UL << (tbl)->bloom_nbits) - 1U)))
+
+#else
+#define HASH_BLOOM_MAKE(tbl,oomed)
+#define HASH_BLOOM_FREE(tbl)
+#define HASH_BLOOM_ADD(tbl,hashv)
+#define HASH_BLOOM_TEST(tbl,hashv) (1)
+#define HASH_BLOOM_BYTELEN 0U
+#endif
+
+#define HASH_MAKE_TABLE(hh,head,oomed) \
+do { \
+ (head)->hh.tbl = (UT_hash_table*)uthash_malloc(sizeof(UT_hash_table)); \
+ if (!(head)->hh.tbl) { \
+ HASH_RECORD_OOM(oomed); \
+ } else { \
+ uthash_bzero((head)->hh.tbl, sizeof(UT_hash_table)); \
+ (head)->hh.tbl->tail = &((head)->hh); \
+ (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \
+ (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \
+ (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \
+ (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \
+ HASH_INITIAL_NUM_BUCKETS * sizeof(struct UT_hash_bucket)); \
+ (head)->hh.tbl->signature = HASH_SIGNATURE; \
+ if (!(head)->hh.tbl->buckets) { \
+ HASH_RECORD_OOM(oomed); \
+ uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
+ } else { \
+ uthash_bzero((head)->hh.tbl->buckets, \
+ HASH_INITIAL_NUM_BUCKETS * sizeof(struct UT_hash_bucket)); \
+ HASH_BLOOM_MAKE((head)->hh.tbl, oomed); \
+ IF_HASH_NONFATAL_OOM( \
+ if (oomed) { \
+ uthash_free((head)->hh.tbl->buckets, \
+ HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \
+ uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
+ } \
+ ) \
+ } \
+ } \
+} while (0)
+
+#define HASH_REPLACE_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,replaced,cmpfcn) \
+do { \
+ (replaced) = NULL; \
+ HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \
+ if (replaced) { \
+ HASH_DELETE(hh, head, replaced); \
+ } \
+ HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn); \
+} while (0)
+
+#define HASH_REPLACE_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add,replaced) \
+do { \
+ (replaced) = NULL; \
+ HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \
+ if (replaced) { \
+ HASH_DELETE(hh, head, replaced); \
+ } \
+ HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add); \
+} while (0)
+
+#define HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \
+do { \
+ unsigned _hr_hashv; \
+ HASH_VALUE(&((add)->fieldname), keylen_in, _hr_hashv); \
+ HASH_REPLACE_BYHASHVALUE(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced); \
+} while (0)
+
+#define HASH_REPLACE_INORDER(hh,head,fieldname,keylen_in,add,replaced,cmpfcn) \
+do { \
+ unsigned _hr_hashv; \
+ HASH_VALUE(&((add)->fieldname), keylen_in, _hr_hashv); \
+ HASH_REPLACE_BYHASHVALUE_INORDER(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced, cmpfcn); \
+} while (0)
+
+#define HASH_APPEND_LIST(hh, head, add) \
+do { \
+ (add)->hh.next = NULL; \
+ (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \
+ (head)->hh.tbl->tail->next = (add); \
+ (head)->hh.tbl->tail = &((add)->hh); \
+} while (0)
+
+#define HASH_AKBI_INNER_LOOP(hh,head,add,cmpfcn) \
+do { \
+ do { \
+ if (cmpfcn(DECLTYPE(head)(_hs_iter), add) > 0) { \
+ break; \
+ } \
+ } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next)); \
+} while (0)
+
+#ifdef NO_DECLTYPE
+#undef HASH_AKBI_INNER_LOOP
+#define HASH_AKBI_INNER_LOOP(hh,head,add,cmpfcn) \
+do { \
+ char *_hs_saved_head = (char*)(head); \
+ do { \
+ DECLTYPE_ASSIGN(head, _hs_iter); \
+ if (cmpfcn(head, add) > 0) { \
+ DECLTYPE_ASSIGN(head, _hs_saved_head); \
+ break; \
+ } \
+ DECLTYPE_ASSIGN(head, _hs_saved_head); \
+ } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next)); \
+} while (0)
+#endif
+
+#if HASH_NONFATAL_OOM
+
+#define HASH_ADD_TO_TABLE(hh,head,keyptr,keylen_in,hashval,add,oomed) \
+do { \
+ if (!(oomed)) { \
+ unsigned _ha_bkt; \
+ (head)->hh.tbl->num_items++; \
+ HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \
+ HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed); \
+ if (oomed) { \
+ HASH_ROLLBACK_BKT(hh, head, &(add)->hh); \
+ HASH_DELETE_HH(hh, head, &(add)->hh); \
+ (add)->hh.tbl = NULL; \
+ uthash_nonfatal_oom(add); \
+ } else { \
+ HASH_BLOOM_ADD((head)->hh.tbl, hashval); \
+ HASH_EMIT_KEY(hh, head, keyptr, keylen_in); \
+ } \
+ } else { \
+ (add)->hh.tbl = NULL; \
+ uthash_nonfatal_oom(add); \
+ } \
+} while (0)
+
+#else
+
+#define HASH_ADD_TO_TABLE(hh,head,keyptr,keylen_in,hashval,add,oomed) \
+do { \
+ unsigned _ha_bkt; \
+ (head)->hh.tbl->num_items++; \
+ HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \
+ HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed); \
+ HASH_BLOOM_ADD((head)->hh.tbl, hashval); \
+ HASH_EMIT_KEY(hh, head, keyptr, keylen_in); \
+} while (0)
+
+#endif
+
+
+#define HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh,head,keyptr,keylen_in,hashval,add,cmpfcn) \
+do { \
+ IF_HASH_NONFATAL_OOM( int _ha_oomed = 0; ) \
+ (add)->hh.hashv = (hashval); \
+ (add)->hh.key = (char*) (keyptr); \
+ (add)->hh.keylen = (unsigned) (keylen_in); \
+ if (!(head)) { \
+ (add)->hh.next = NULL; \
+ (add)->hh.prev = NULL; \
+ HASH_MAKE_TABLE(hh, add, _ha_oomed); \
+ IF_HASH_NONFATAL_OOM( if (!_ha_oomed) { ) \
+ (head) = (add); \
+ IF_HASH_NONFATAL_OOM( } ) \
+ } else { \
+ void *_hs_iter = (head); \
+ (add)->hh.tbl = (head)->hh.tbl; \
+ HASH_AKBI_INNER_LOOP(hh, head, add, cmpfcn); \
+ if (_hs_iter) { \
+ (add)->hh.next = _hs_iter; \
+ if (((add)->hh.prev = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev)) { \
+ HH_FROM_ELMT((head)->hh.tbl, (add)->hh.prev)->next = (add); \
+ } else { \
+ (head) = (add); \
+ } \
+ HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev = (add); \
+ } else { \
+ HASH_APPEND_LIST(hh, head, add); \
+ } \
+ } \
+ HASH_ADD_TO_TABLE(hh, head, keyptr, keylen_in, hashval, add, _ha_oomed); \
+ HASH_FSCK(hh, head, "HASH_ADD_KEYPTR_BYHASHVALUE_INORDER"); \
+} while (0)
+
+#define HASH_ADD_KEYPTR_INORDER(hh,head,keyptr,keylen_in,add,cmpfcn) \
+do { \
+ unsigned _hs_hashv; \
+ HASH_VALUE(keyptr, keylen_in, _hs_hashv); \
+ HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, keyptr, keylen_in, _hs_hashv, add, cmpfcn); \
+} while (0)
+
+#define HASH_ADD_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,cmpfcn) \
+ HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn)
+
+#define HASH_ADD_INORDER(hh,head,fieldname,keylen_in,add,cmpfcn) \
+ HASH_ADD_KEYPTR_INORDER(hh, head, &((add)->fieldname), keylen_in, add, cmpfcn)
+
+#define HASH_ADD_KEYPTR_BYHASHVALUE(hh,head,keyptr,keylen_in,hashval,add) \
+do { \
+ IF_HASH_NONFATAL_OOM( int _ha_oomed = 0; ) \
+ (add)->hh.hashv = (hashval); \
+ (add)->hh.key = (char*) (keyptr); \
+ (add)->hh.keylen = (unsigned) (keylen_in); \
+ if (!(head)) { \
+ (add)->hh.next = NULL; \
+ (add)->hh.prev = NULL; \
+ HASH_MAKE_TABLE(hh, add, _ha_oomed); \
+ IF_HASH_NONFATAL_OOM( if (!_ha_oomed) { ) \
+ (head) = (add); \
+ IF_HASH_NONFATAL_OOM( } ) \
+ } else { \
+ (add)->hh.tbl = (head)->hh.tbl; \
+ HASH_APPEND_LIST(hh, head, add); \
+ } \
+ HASH_ADD_TO_TABLE(hh, head, keyptr, keylen_in, hashval, add, _ha_oomed); \
+ HASH_FSCK(hh, head, "HASH_ADD_KEYPTR_BYHASHVALUE"); \
+} while (0)
+
+#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \
+do { \
+ unsigned _ha_hashv; \
+ HASH_VALUE(keyptr, keylen_in, _ha_hashv); \
+ HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, keyptr, keylen_in, _ha_hashv, add); \
+} while (0)
+
+#define HASH_ADD_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add) \
+ HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add)
+
+#define HASH_ADD(hh,head,fieldname,keylen_in,add) \
+ HASH_ADD_KEYPTR(hh, head, &((add)->fieldname), keylen_in, add)
+
+#define HASH_TO_BKT(hashv,num_bkts,bkt) \
+do { \
+ bkt = ((hashv) & ((num_bkts) - 1U)); \
+} while (0)
+
+/* delete "delptr" from the hash table.
+ * "the usual" patch-up process for the app-order doubly-linked-list.
+ * The use of _hd_hh_del below deserves special explanation.
+ * These used to be expressed using (delptr) but that led to a bug
+ * if someone used the same symbol for the head and deletee, like
+ * HASH_DELETE(hh,users,users);
+ * We want that to work, but by changing the head (users) below
+ * we were forfeiting our ability to further refer to the deletee (users)
+ * in the patch-up process. Solution: use scratch space to
+ * copy the deletee pointer, then the latter references are via that
+ * scratch pointer rather than through the repointed (users) symbol.
+ */
+#define HASH_DELETE(hh,head,delptr) \
+ HASH_DELETE_HH(hh, head, &(delptr)->hh)
+
+#define HASH_DELETE_HH(hh,head,delptrhh) \
+do { \
+ struct UT_hash_handle *_hd_hh_del = (delptrhh); \
+ if ((_hd_hh_del->prev == NULL) && (_hd_hh_del->next == NULL)) { \
+ HASH_BLOOM_FREE((head)->hh.tbl); \
+ uthash_free((head)->hh.tbl->buckets, \
+ (head)->hh.tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
+ uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
+ (head) = NULL; \
+ } else { \
+ unsigned _hd_bkt; \
+ if (_hd_hh_del == (head)->hh.tbl->tail) { \
+ (head)->hh.tbl->tail = HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev); \
+ } \
+ if (_hd_hh_del->prev != NULL) { \
+ HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev)->next = _hd_hh_del->next; \
+ } else { \
+ DECLTYPE_ASSIGN(head, _hd_hh_del->next); \
+ } \
+ if (_hd_hh_del->next != NULL) { \
+ HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->next)->prev = _hd_hh_del->prev; \
+ } \
+ HASH_TO_BKT(_hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
+ HASH_DEL_IN_BKT((head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \
+ (head)->hh.tbl->num_items--; \
+ } \
+ HASH_FSCK(hh, head, "HASH_DELETE_HH"); \
+} while (0)
+
+/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */
+#define HASH_FIND_STR(head,findstr,out) \
+ HASH_FIND(hh,head,findstr,(unsigned)uthash_strlen(findstr),out)
+#define HASH_ADD_STR(head,strfield,add) \
+ HASH_ADD(hh,head,strfield[0],(unsigned)uthash_strlen(add->strfield),add)
+#define HASH_REPLACE_STR(head,strfield,add,replaced) \
+ HASH_REPLACE(hh,head,strfield[0],(unsigned)uthash_strlen(add->strfield),add,replaced)
+#define HASH_FIND_INT(head,findint,out) \
+ HASH_FIND(hh,head,findint,sizeof(int),out)
+#define HASH_ADD_INT(head,intfield,add) \
+ HASH_ADD(hh,head,intfield,sizeof(int),add)
+#define HASH_REPLACE_INT(head,intfield,add,replaced) \
+ HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced)
+#define HASH_FIND_PTR(head,findptr,out) \
+ HASH_FIND(hh,head,findptr,sizeof(void *),out)
+#define HASH_ADD_PTR(head,ptrfield,add) \
+ HASH_ADD(hh,head,ptrfield,sizeof(void *),add)
+#define HASH_REPLACE_PTR(head,ptrfield,add,replaced) \
+ HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced)
+#define HASH_DEL(head,delptr) \
+ HASH_DELETE(hh,head,delptr)
+
+/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined.
+ * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined.
+ */
+#ifdef HASH_DEBUG
+#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0)
+#define HASH_FSCK(hh,head,where) \
+do { \
+ struct UT_hash_handle *_thh; \
+ if (head) { \
+ unsigned _bkt_i; \
+ unsigned _count = 0; \
+ char *_prev; \
+ for (_bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; ++_bkt_i) { \
+ unsigned _bkt_count = 0; \
+ _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \
+ _prev = NULL; \
+ while (_thh) { \
+ if (_prev != (char*)(_thh->hh_prev)) { \
+ HASH_OOPS("%s: invalid hh_prev %p, actual %p\n", \
+ (where), (void*)_thh->hh_prev, (void*)_prev); \
+ } \
+ _bkt_count++; \
+ _prev = (char*)(_thh); \
+ _thh = _thh->hh_next; \
+ } \
+ _count += _bkt_count; \
+ if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \
+ HASH_OOPS("%s: invalid bucket count %u, actual %u\n", \
+ (where), (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \
+ } \
+ } \
+ if (_count != (head)->hh.tbl->num_items) { \
+ HASH_OOPS("%s: invalid hh item count %u, actual %u\n", \
+ (where), (head)->hh.tbl->num_items, _count); \
+ } \
+ _count = 0; \
+ _prev = NULL; \
+ _thh = &(head)->hh; \
+ while (_thh) { \
+ _count++; \
+ if (_prev != (char*)_thh->prev) { \
+ HASH_OOPS("%s: invalid prev %p, actual %p\n", \
+ (where), (void*)_thh->prev, (void*)_prev); \
+ } \
+ _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \
+ _thh = (_thh->next ? HH_FROM_ELMT((head)->hh.tbl, _thh->next) : NULL); \
+ } \
+ if (_count != (head)->hh.tbl->num_items) { \
+ HASH_OOPS("%s: invalid app item count %u, actual %u\n", \
+ (where), (head)->hh.tbl->num_items, _count); \
+ } \
+ } \
+} while (0)
+#else
+#define HASH_FSCK(hh,head,where)
+#endif
+
+/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to
+ * the descriptor to which this macro is defined for tuning the hash function.
+ * The app can #include <unistd.h> to get the prototype for write(2). */
+#ifdef HASH_EMIT_KEYS
+#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \
+do { \
+ unsigned _klen = fieldlen; \
+ write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \
+ write(HASH_EMIT_KEYS, keyptr, (unsigned long)fieldlen); \
+} while (0)
+#else
+#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen)
+#endif
+
+/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */
+#ifdef HASH_FUNCTION
+#define HASH_FCN HASH_FUNCTION
+#else
+#define HASH_FCN HASH_JEN
+#endif
+
+/* The Bernstein hash function, used in Perl prior to v5.6. Note (x<<5+x)=x*33. */
+#define HASH_BER(key,keylen,hashv) \
+do { \
+ unsigned _hb_keylen = (unsigned)keylen; \
+ const unsigned char *_hb_key = (const unsigned char*)(key); \
+ (hashv) = 0; \
+ while (_hb_keylen-- != 0U) { \
+ (hashv) = (((hashv) << 5) + (hashv)) + *_hb_key++; \
+ } \
+} while (0)
+
+
+/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at
+ * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */
+#define HASH_SAX(key,keylen,hashv) \
+do { \
+ unsigned _sx_i; \
+ const unsigned char *_hs_key = (const unsigned char*)(key); \
+ hashv = 0; \
+ for (_sx_i=0; _sx_i < keylen; _sx_i++) { \
+ hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \
+ } \
+} while (0)
+/* FNV-1a variation */
+#define HASH_FNV(key,keylen,hashv) \
+do { \
+ unsigned _fn_i; \
+ const unsigned char *_hf_key = (const unsigned char*)(key); \
+ (hashv) = 2166136261U; \
+ for (_fn_i=0; _fn_i < keylen; _fn_i++) { \
+ hashv = hashv ^ _hf_key[_fn_i]; \
+ hashv = hashv * 16777619U; \
+ } \
+} while (0)
+
+#define HASH_OAT(key,keylen,hashv) \
+do { \
+ unsigned _ho_i; \
+ const unsigned char *_ho_key=(const unsigned char*)(key); \
+ hashv = 0; \
+ for(_ho_i=0; _ho_i < keylen; _ho_i++) { \
+ hashv += _ho_key[_ho_i]; \
+ hashv += (hashv << 10); \
+ hashv ^= (hashv >> 6); \
+ } \
+ hashv += (hashv << 3); \
+ hashv ^= (hashv >> 11); \
+ hashv += (hashv << 15); \
+} while (0)
+
+#define HASH_JEN_MIX(a,b,c) \
+do { \
+ a -= b; a -= c; a ^= ( c >> 13 ); \
+ b -= c; b -= a; b ^= ( a << 8 ); \
+ c -= a; c -= b; c ^= ( b >> 13 ); \
+ a -= b; a -= c; a ^= ( c >> 12 ); \
+ b -= c; b -= a; b ^= ( a << 16 ); \
+ c -= a; c -= b; c ^= ( b >> 5 ); \
+ a -= b; a -= c; a ^= ( c >> 3 ); \
+ b -= c; b -= a; b ^= ( a << 10 ); \
+ c -= a; c -= b; c ^= ( b >> 15 ); \
+} while (0)
+
+#define HASH_JEN(key,keylen,hashv) \
+do { \
+ unsigned _hj_i,_hj_j,_hj_k; \
+ unsigned const char *_hj_key=(unsigned const char*)(key); \
+ hashv = 0xfeedbeefu; \
+ _hj_i = _hj_j = 0x9e3779b9u; \
+ _hj_k = (unsigned)(keylen); \
+ while (_hj_k >= 12U) { \
+ _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \
+ + ( (unsigned)_hj_key[2] << 16 ) \
+ + ( (unsigned)_hj_key[3] << 24 ) ); \
+ _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \
+ + ( (unsigned)_hj_key[6] << 16 ) \
+ + ( (unsigned)_hj_key[7] << 24 ) ); \
+ hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \
+ + ( (unsigned)_hj_key[10] << 16 ) \
+ + ( (unsigned)_hj_key[11] << 24 ) ); \
+ \
+ HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+ \
+ _hj_key += 12; \
+ _hj_k -= 12U; \
+ } \
+ hashv += (unsigned)(keylen); \
+ switch ( _hj_k ) { \
+ case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); /* FALLTHROUGH */ \
+ case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); /* FALLTHROUGH */ \
+ case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); /* FALLTHROUGH */ \
+ case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); /* FALLTHROUGH */ \
+ case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); /* FALLTHROUGH */ \
+ case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); /* FALLTHROUGH */ \
+ case 5: _hj_j += _hj_key[4]; /* FALLTHROUGH */ \
+ case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); /* FALLTHROUGH */ \
+ case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); /* FALLTHROUGH */ \
+ case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); /* FALLTHROUGH */ \
+ case 1: _hj_i += _hj_key[0]; \
+ } \
+ HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+} while (0)
+
+/* The Paul Hsieh hash function */
+#undef get16bits
+#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \
+ || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
+#define get16bits(d) (*((const uint16_t *) (d)))
+#endif
+
+#if !defined (get16bits)
+#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \
+ +(uint32_t)(((const uint8_t *)(d))[0]) )
+#endif
+#define HASH_SFH(key,keylen,hashv) \
+do { \
+ unsigned const char *_sfh_key=(unsigned const char*)(key); \
+ uint32_t _sfh_tmp, _sfh_len = (uint32_t)keylen; \
+ \
+ unsigned _sfh_rem = _sfh_len & 3U; \
+ _sfh_len >>= 2; \
+ hashv = 0xcafebabeu; \
+ \
+ /* Main loop */ \
+ for (;_sfh_len > 0U; _sfh_len--) { \
+ hashv += get16bits (_sfh_key); \
+ _sfh_tmp = ((uint32_t)(get16bits (_sfh_key+2)) << 11) ^ hashv; \
+ hashv = (hashv << 16) ^ _sfh_tmp; \
+ _sfh_key += 2U*sizeof (uint16_t); \
+ hashv += hashv >> 11; \
+ } \
+ \
+ /* Handle end cases */ \
+ switch (_sfh_rem) { \
+ case 3: hashv += get16bits (_sfh_key); \
+ hashv ^= hashv << 16; \
+ hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)]) << 18; \
+ hashv += hashv >> 11; \
+ break; \
+ case 2: hashv += get16bits (_sfh_key); \
+ hashv ^= hashv << 11; \
+ hashv += hashv >> 17; \
+ break; \
+ case 1: hashv += *_sfh_key; \
+ hashv ^= hashv << 10; \
+ hashv += hashv >> 1; \
+ } \
+ \
+ /* Force "avalanching" of final 127 bits */ \
+ hashv ^= hashv << 3; \
+ hashv += hashv >> 5; \
+ hashv ^= hashv << 4; \
+ hashv += hashv >> 17; \
+ hashv ^= hashv << 25; \
+ hashv += hashv >> 6; \
+} while (0)
+
+#ifdef HASH_USING_NO_STRICT_ALIASING
+/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads.
+ * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error.
+ * MurmurHash uses the faster approach only on CPU's where we know it's safe.
+ *
+ * Note the preprocessor built-in defines can be emitted using:
+ *
+ * gcc -m64 -dM -E - < /dev/null (on gcc)
+ * cc -## a.c (where a.c is a simple test file) (Sun Studio)
+ */
+#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86))
+#define MUR_GETBLOCK(p,i) p[i]
+#else /* non intel */
+#define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 3UL) == 0UL)
+#define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 3UL) == 1UL)
+#define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 3UL) == 2UL)
+#define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 3UL) == 3UL)
+#define WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL))
+#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__))
+#define MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24))
+#define MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16))
+#define MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8))
+#else /* assume little endian non-intel */
+#define MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24))
+#define MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16))
+#define MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8))
+#endif
+#define MUR_GETBLOCK(p,i) (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \
+ (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \
+ (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) : \
+ MUR_ONE_THREE(p))))
+#endif
+#define MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))
+#define MUR_FMIX(_h) \
+do { \
+ _h ^= _h >> 16; \
+ _h *= 0x85ebca6bu; \
+ _h ^= _h >> 13; \
+ _h *= 0xc2b2ae35u; \
+ _h ^= _h >> 16; \
+} while (0)
+
+#define HASH_MUR(key,keylen,hashv) \
+do { \
+ const uint8_t *_mur_data = (const uint8_t*)(key); \
+ const int _mur_nblocks = (int)(keylen) / 4; \
+ uint32_t _mur_h1 = 0xf88D5353u; \
+ uint32_t _mur_c1 = 0xcc9e2d51u; \
+ uint32_t _mur_c2 = 0x1b873593u; \
+ uint32_t _mur_k1 = 0; \
+ const uint8_t *_mur_tail; \
+ const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+(_mur_nblocks*4)); \
+ int _mur_i; \
+ for (_mur_i = -_mur_nblocks; _mur_i != 0; _mur_i++) { \
+ _mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i); \
+ _mur_k1 *= _mur_c1; \
+ _mur_k1 = MUR_ROTL32(_mur_k1,15); \
+ _mur_k1 *= _mur_c2; \
+ \
+ _mur_h1 ^= _mur_k1; \
+ _mur_h1 = MUR_ROTL32(_mur_h1,13); \
+ _mur_h1 = (_mur_h1*5U) + 0xe6546b64u; \
+ } \
+ _mur_tail = (const uint8_t*)(_mur_data + (_mur_nblocks*4)); \
+ _mur_k1=0; \
+ switch ((keylen) & 3U) { \
+ case 0: break; \
+ case 3: _mur_k1 ^= (uint32_t)_mur_tail[2] << 16; /* FALLTHROUGH */ \
+ case 2: _mur_k1 ^= (uint32_t)_mur_tail[1] << 8; /* FALLTHROUGH */ \
+ case 1: _mur_k1 ^= (uint32_t)_mur_tail[0]; \
+ _mur_k1 *= _mur_c1; \
+ _mur_k1 = MUR_ROTL32(_mur_k1,15); \
+ _mur_k1 *= _mur_c2; \
+ _mur_h1 ^= _mur_k1; \
+ } \
+ _mur_h1 ^= (uint32_t)(keylen); \
+ MUR_FMIX(_mur_h1); \
+ hashv = _mur_h1; \
+} while (0)
+#endif /* HASH_USING_NO_STRICT_ALIASING */
+
+/* iterate over items in a known bucket to find desired item */
+#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,hashval,out) \
+do { \
+ if ((head).hh_head != NULL) { \
+ DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (head).hh_head)); \
+ } else { \
+ (out) = NULL; \
+ } \
+ while ((out) != NULL) { \
+ if ((out)->hh.hashv == (hashval) && (out)->hh.keylen == (keylen_in)) { \
+ if (uthash_memcmp((out)->hh.key, keyptr, keylen_in) == 0) { \
+ break; \
+ } \
+ } \
+ if ((out)->hh.hh_next != NULL) { \
+ DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (out)->hh.hh_next)); \
+ } else { \
+ (out) = NULL; \
+ } \
+ } \
+} while (0)
+
+/* add an item to a bucket */
+#define HASH_ADD_TO_BKT(head,hh,addhh,oomed) \
+do { \
+ UT_hash_bucket *_ha_head = &(head); \
+ _ha_head->count++; \
+ (addhh)->hh_next = _ha_head->hh_head; \
+ (addhh)->hh_prev = NULL; \
+ if (_ha_head->hh_head != NULL) { \
+ _ha_head->hh_head->hh_prev = (addhh); \
+ } \
+ _ha_head->hh_head = (addhh); \
+ if ((_ha_head->count >= ((_ha_head->expand_mult + 1U) * HASH_BKT_CAPACITY_THRESH)) \
+ && !(addhh)->tbl->noexpand) { \
+ HASH_EXPAND_BUCKETS(addhh,(addhh)->tbl, oomed); \
+ IF_HASH_NONFATAL_OOM( \
+ if (oomed) { \
+ HASH_DEL_IN_BKT(head,addhh); \
+ } \
+ ) \
+ } \
+} while (0)
+
+/* remove an item from a given bucket */
+#define HASH_DEL_IN_BKT(head,delhh) \
+do { \
+ UT_hash_bucket *_hd_head = &(head); \
+ _hd_head->count--; \
+ if (_hd_head->hh_head == (delhh)) { \
+ _hd_head->hh_head = (delhh)->hh_next; \
+ } \
+ if ((delhh)->hh_prev) { \
+ (delhh)->hh_prev->hh_next = (delhh)->hh_next; \
+ } \
+ if ((delhh)->hh_next) { \
+ (delhh)->hh_next->hh_prev = (delhh)->hh_prev; \
+ } \
+} while (0)
+
+/* Bucket expansion has the effect of doubling the number of buckets
+ * and redistributing the items into the new buckets. Ideally the
+ * items will distribute more or less evenly into the new buckets
+ * (the extent to which this is true is a measure of the quality of
+ * the hash function as it applies to the key domain).
+ *
+ * With the items distributed into more buckets, the chain length
+ * (item count) in each bucket is reduced. Thus by expanding buckets
+ * the hash keeps a bound on the chain length. This bounded chain
+ * length is the essence of how a hash provides constant time lookup.
+ *
+ * The calculation of tbl->ideal_chain_maxlen below deserves some
+ * explanation. First, keep in mind that we're calculating the ideal
+ * maximum chain length based on the *new* (doubled) bucket count.
+ * In fractions this is just n/b (n=number of items,b=new num buckets).
+ * Since the ideal chain length is an integer, we want to calculate
+ * ceil(n/b). We don't depend on floating point arithmetic in this
+ * hash, so to calculate ceil(n/b) with integers we could write
+ *
+ * ceil(n/b) = (n/b) + ((n%b)?1:0)
+ *
+ * and in fact a previous version of this hash did just that.
+ * But now we have improved things a bit by recognizing that b is
+ * always a power of two. We keep its base 2 log handy (call it lb),
+ * so now we can write this with a bit shift and logical AND:
+ *
+ * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0)
+ *
+ */
+#define HASH_EXPAND_BUCKETS(hh,tbl,oomed) \
+do { \
+ unsigned _he_bkt; \
+ unsigned _he_bkt_i; \
+ struct UT_hash_handle *_he_thh, *_he_hh_nxt; \
+ UT_hash_bucket *_he_new_buckets, *_he_newbkt; \
+ _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \
+ 2UL * (tbl)->num_buckets * sizeof(struct UT_hash_bucket)); \
+ if (!_he_new_buckets) { \
+ HASH_RECORD_OOM(oomed); \
+ } else { \
+ uthash_bzero(_he_new_buckets, \
+ 2UL * (tbl)->num_buckets * sizeof(struct UT_hash_bucket)); \
+ (tbl)->ideal_chain_maxlen = \
+ ((tbl)->num_items >> ((tbl)->log2_num_buckets+1U)) + \
+ ((((tbl)->num_items & (((tbl)->num_buckets*2U)-1U)) != 0U) ? 1U : 0U); \
+ (tbl)->nonideal_items = 0; \
+ for (_he_bkt_i = 0; _he_bkt_i < (tbl)->num_buckets; _he_bkt_i++) { \
+ _he_thh = (tbl)->buckets[ _he_bkt_i ].hh_head; \
+ while (_he_thh != NULL) { \
+ _he_hh_nxt = _he_thh->hh_next; \
+ HASH_TO_BKT(_he_thh->hashv, (tbl)->num_buckets * 2U, _he_bkt); \
+ _he_newbkt = &(_he_new_buckets[_he_bkt]); \
+ if (++(_he_newbkt->count) > (tbl)->ideal_chain_maxlen) { \
+ (tbl)->nonideal_items++; \
+ _he_newbkt->expand_mult = _he_newbkt->count / (tbl)->ideal_chain_maxlen; \
+ } \
+ _he_thh->hh_prev = NULL; \
+ _he_thh->hh_next = _he_newbkt->hh_head; \
+ if (_he_newbkt->hh_head != NULL) { \
+ _he_newbkt->hh_head->hh_prev = _he_thh; \
+ } \
+ _he_newbkt->hh_head = _he_thh; \
+ _he_thh = _he_hh_nxt; \
+ } \
+ } \
+ uthash_free((tbl)->buckets, (tbl)->num_buckets * sizeof(struct UT_hash_bucket)); \
+ (tbl)->num_buckets *= 2U; \
+ (tbl)->log2_num_buckets++; \
+ (tbl)->buckets = _he_new_buckets; \
+ (tbl)->ineff_expands = ((tbl)->nonideal_items > ((tbl)->num_items >> 1)) ? \
+ ((tbl)->ineff_expands+1U) : 0U; \
+ if ((tbl)->ineff_expands > 1U) { \
+ (tbl)->noexpand = 1; \
+ uthash_noexpand_fyi(tbl); \
+ } \
+ uthash_expand_fyi(tbl); \
+ } \
+} while (0)
+
+
+/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */
+/* Note that HASH_SORT assumes the hash handle name to be hh.
+ * HASH_SRT was added to allow the hash handle name to be passed in. */
+#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn)
+#define HASH_SRT(hh,head,cmpfcn) \
+do { \
+ unsigned _hs_i; \
+ unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \
+ struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \
+ if (head != NULL) { \
+ _hs_insize = 1; \
+ _hs_looping = 1; \
+ _hs_list = &((head)->hh); \
+ while (_hs_looping != 0U) { \
+ _hs_p = _hs_list; \
+ _hs_list = NULL; \
+ _hs_tail = NULL; \
+ _hs_nmerges = 0; \
+ while (_hs_p != NULL) { \
+ _hs_nmerges++; \
+ _hs_q = _hs_p; \
+ _hs_psize = 0; \
+ for (_hs_i = 0; _hs_i < _hs_insize; ++_hs_i) { \
+ _hs_psize++; \
+ _hs_q = ((_hs_q->next != NULL) ? \
+ HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
+ if (_hs_q == NULL) { \
+ break; \
+ } \
+ } \
+ _hs_qsize = _hs_insize; \
+ while ((_hs_psize != 0U) || ((_hs_qsize != 0U) && (_hs_q != NULL))) { \
+ if (_hs_psize == 0U) { \
+ _hs_e = _hs_q; \
+ _hs_q = ((_hs_q->next != NULL) ? \
+ HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
+ _hs_qsize--; \
+ } else if ((_hs_qsize == 0U) || (_hs_q == NULL)) { \
+ _hs_e = _hs_p; \
+ if (_hs_p != NULL) { \
+ _hs_p = ((_hs_p->next != NULL) ? \
+ HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \
+ } \
+ _hs_psize--; \
+ } else if ((cmpfcn( \
+ DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_p)), \
+ DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_q)) \
+ )) <= 0) { \
+ _hs_e = _hs_p; \
+ if (_hs_p != NULL) { \
+ _hs_p = ((_hs_p->next != NULL) ? \
+ HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \
+ } \
+ _hs_psize--; \
+ } else { \
+ _hs_e = _hs_q; \
+ _hs_q = ((_hs_q->next != NULL) ? \
+ HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
+ _hs_qsize--; \
+ } \
+ if ( _hs_tail != NULL ) { \
+ _hs_tail->next = ((_hs_e != NULL) ? \
+ ELMT_FROM_HH((head)->hh.tbl, _hs_e) : NULL); \
+ } else { \
+ _hs_list = _hs_e; \
+ } \
+ if (_hs_e != NULL) { \
+ _hs_e->prev = ((_hs_tail != NULL) ? \
+ ELMT_FROM_HH((head)->hh.tbl, _hs_tail) : NULL); \
+ } \
+ _hs_tail = _hs_e; \
+ } \
+ _hs_p = _hs_q; \
+ } \
+ if (_hs_tail != NULL) { \
+ _hs_tail->next = NULL; \
+ } \
+ if (_hs_nmerges <= 1U) { \
+ _hs_looping = 0; \
+ (head)->hh.tbl->tail = _hs_tail; \
+ DECLTYPE_ASSIGN(head, ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \
+ } \
+ _hs_insize *= 2U; \
+ } \
+ HASH_FSCK(hh, head, "HASH_SRT"); \
+ } \
+} while (0)
+
+/* This function selects items from one hash into another hash.
+ * The end result is that the selected items have dual presence
+ * in both hashes. There is no copy of the items made; rather
+ * they are added into the new hash through a secondary hash
+ * hash handle that must be present in the structure. */
+#define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \
+do { \
+ unsigned _src_bkt, _dst_bkt; \
+ void *_last_elt = NULL, *_elt; \
+ UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \
+ ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \
+ if ((src) != NULL) { \
+ for (_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \
+ for (_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \
+ _src_hh != NULL; \
+ _src_hh = _src_hh->hh_next) { \
+ _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \
+ if (cond(_elt)) { \
+ IF_HASH_NONFATAL_OOM( int _hs_oomed = 0; ) \
+ _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho); \
+ _dst_hh->key = _src_hh->key; \
+ _dst_hh->keylen = _src_hh->keylen; \
+ _dst_hh->hashv = _src_hh->hashv; \
+ _dst_hh->prev = _last_elt; \
+ _dst_hh->next = NULL; \
+ if (_last_elt_hh != NULL) { \
+ _last_elt_hh->next = _elt; \
+ } \
+ if ((dst) == NULL) { \
+ DECLTYPE_ASSIGN(dst, _elt); \
+ HASH_MAKE_TABLE(hh_dst, dst, _hs_oomed); \
+ IF_HASH_NONFATAL_OOM( \
+ if (_hs_oomed) { \
+ uthash_nonfatal_oom(_elt); \
+ (dst) = NULL; \
+ continue; \
+ } \
+ ) \
+ } else { \
+ _dst_hh->tbl = (dst)->hh_dst.tbl; \
+ } \
+ HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \
+ HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt], hh_dst, _dst_hh, _hs_oomed); \
+ (dst)->hh_dst.tbl->num_items++; \
+ IF_HASH_NONFATAL_OOM( \
+ if (_hs_oomed) { \
+ HASH_ROLLBACK_BKT(hh_dst, dst, _dst_hh); \
+ HASH_DELETE_HH(hh_dst, dst, _dst_hh); \
+ _dst_hh->tbl = NULL; \
+ uthash_nonfatal_oom(_elt); \
+ continue; \
+ } \
+ ) \
+ HASH_BLOOM_ADD(_dst_hh->tbl, _dst_hh->hashv); \
+ _last_elt = _elt; \
+ _last_elt_hh = _dst_hh; \
+ } \
+ } \
+ } \
+ } \
+ HASH_FSCK(hh_dst, dst, "HASH_SELECT"); \
+} while (0)
+
+#define HASH_CLEAR(hh,head) \
+do { \
+ if ((head) != NULL) { \
+ HASH_BLOOM_FREE((head)->hh.tbl); \
+ uthash_free((head)->hh.tbl->buckets, \
+ (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \
+ uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
+ (head) = NULL; \
+ } \
+} while (0)
+
+#define HASH_OVERHEAD(hh,head) \
+ (((head) != NULL) ? ( \
+ (size_t)(((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \
+ ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \
+ sizeof(UT_hash_table) + \
+ (HASH_BLOOM_BYTELEN))) : 0U)
+
+#ifdef NO_DECLTYPE
+#define HASH_ITER(hh,head,el,tmp) \
+for(((el)=(head)), ((*(char**)(&(tmp)))=(char*)((head!=NULL)?(head)->hh.next:NULL)); \
+ (el) != NULL; ((el)=(tmp)), ((*(char**)(&(tmp)))=(char*)((tmp!=NULL)?(tmp)->hh.next:NULL)))
+#else
+#define HASH_ITER(hh,head,el,tmp) \
+for(((el)=(head)), ((tmp)=DECLTYPE(el)((head!=NULL)?(head)->hh.next:NULL)); \
+ (el) != NULL; ((el)=(tmp)), ((tmp)=DECLTYPE(el)((tmp!=NULL)?(tmp)->hh.next:NULL)))
+#endif
+
+/* obtain a count of items in the hash */
+#define HASH_COUNT(head) HASH_CNT(hh,head)
+#define HASH_CNT(hh,head) ((head != NULL)?((head)->hh.tbl->num_items):0U)
+
+typedef struct UT_hash_bucket {
+ struct UT_hash_handle *hh_head;
+ unsigned count;
+
+ /* expand_mult is normally set to 0. In this situation, the max chain length
+ * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If
+ * the bucket's chain exceeds this length, bucket expansion is triggered).
+ * However, setting expand_mult to a non-zero value delays bucket expansion
+ * (that would be triggered by additions to this particular bucket)
+ * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH.
+ * (The multiplier is simply expand_mult+1). The whole idea of this
+ * multiplier is to reduce bucket expansions, since they are expensive, in
+ * situations where we know that a particular bucket tends to be overused.
+ * It is better to let its chain length grow to a longer yet-still-bounded
+ * value, than to do an O(n) bucket expansion too often.
+ */
+ unsigned expand_mult;
+
+} UT_hash_bucket;
+
+/* random signature used only to find hash tables in external analysis */
+#define HASH_SIGNATURE 0xa0111fe1u
+#define HASH_BLOOM_SIGNATURE 0xb12220f2u
+
+typedef struct UT_hash_table {
+ UT_hash_bucket *buckets;
+ unsigned num_buckets, log2_num_buckets;
+ unsigned num_items;
+ struct UT_hash_handle *tail; /* tail hh in app order, for fast append */
+ ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */
+
+ /* in an ideal situation (all buckets used equally), no bucket would have
+ * more than ceil(#items/#buckets) items. that's the ideal chain length. */
+ unsigned ideal_chain_maxlen;
+
+ /* nonideal_items is the number of items in the hash whose chain position
+ * exceeds the ideal chain maxlen. these items pay the penalty for an uneven
+ * hash distribution; reaching them in a chain traversal takes >ideal steps */
+ unsigned nonideal_items;
+
+ /* ineffective expands occur when a bucket doubling was performed, but
+ * afterward, more than half the items in the hash had nonideal chain
+ * positions. If this happens on two consecutive expansions we inhibit any
+ * further expansion, as it's not helping; this happens when the hash
+ * function isn't a good fit for the key domain. When expansion is inhibited
+ * the hash will still work, albeit no longer in constant time. */
+ unsigned ineff_expands, noexpand;
+
+ uint32_t signature; /* used only to find hash tables in external analysis */
+#ifdef HASH_BLOOM
+ uint32_t bloom_sig; /* used only to test bloom exists in external analysis */
+ uint8_t *bloom_bv;
+ uint8_t bloom_nbits;
+#endif
+
+} UT_hash_table;
+
+typedef struct UT_hash_handle {
+ struct UT_hash_table *tbl;
+ void *prev; /* prev element in app order */
+ void *next; /* next element in app order */
+ struct UT_hash_handle *hh_prev; /* previous hh in bucket order */
+ struct UT_hash_handle *hh_next; /* next hh in bucket order */
+ void *key; /* ptr to enclosing struct's key */
+ unsigned keylen; /* enclosing struct's key len */
+ unsigned hashv; /* result of hash-fcn(key) */
+} UT_hash_handle;
+
+#endif /* UTHASH_H */
\ No newline at end of file
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/font.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/font.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/font.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,120 @@
+#ifndef CARYLL_FONT_H
+#define CARYLL_FONT_H
+
+#include "sfnt.h"
+
+struct _caryll_font;
+typedef struct _caryll_font otfcc_Font;
+
+#include "otfcc/glyph-order.h"
+
+#include "otfcc/table/fvar.h"
+
+#include "otfcc/table/head.h"
+#include "otfcc/table/glyf.h"
+#include "otfcc/table/CFF.h"
+#include "otfcc/table/maxp.h"
+#include "otfcc/table/hhea.h"
+#include "otfcc/table/hmtx.h"
+#include "otfcc/table/hdmx.h"
+#include "otfcc/table/vhea.h"
+#include "otfcc/table/vmtx.h"
+#include "otfcc/table/OS_2.h"
+#include "otfcc/table/post.h"
+#include "otfcc/table/name.h"
+#include "otfcc/table/meta.h"
+
+#include "otfcc/table/cmap.h"
+#include "otfcc/table/cvt.h"
+#include "otfcc/table/fpgm-prep.h"
+#include "otfcc/table/gasp.h"
+#include "otfcc/table/VDMX.h"
+
+#include "otfcc/table/LTSH.h"
+#include "otfcc/table/VORG.h"
+
+#include "otfcc/table/GDEF.h"
+#include "otfcc/table/BASE.h"
+#include "otfcc/table/otl.h"
+
+#include "otfcc/table/CPAL.h"
+#include "otfcc/table/COLR.h"
+#include "otfcc/table/SVG.h"
+
+#include "otfcc/table/_TSI.h"
+#include "otfcc/table/TSI5.h"
+
+typedef enum { FONTTYPE_TTF, FONTTYPE_CFF } otfcc_font_subtype;
+
+struct _caryll_font {
+ otfcc_font_subtype subtype;
+
+ table_fvar *fvar;
+
+ table_head *head;
+ table_hhea *hhea;
+ table_maxp *maxp;
+ table_OS_2 *OS_2;
+ table_hmtx *hmtx;
+ table_post *post;
+ table_hdmx *hdmx;
+
+ table_vhea *vhea;
+ table_vmtx *vmtx;
+ table_VORG *VORG;
+
+ table_CFF *CFF_;
+ table_glyf *glyf;
+ table_cmap *cmap;
+ table_name *name;
+ table_meta *meta;
+
+ table_fpgm_prep *fpgm;
+ table_fpgm_prep *prep;
+ table_cvt *cvt_;
+ table_gasp *gasp;
+ table_VDMX *VDMX;
+
+ table_LTSH *LTSH;
+
+ table_OTL *GSUB;
+ table_OTL *GPOS;
+ table_GDEF *GDEF;
+ table_BASE *BASE;
+
+ table_CPAL *CPAL;
+ table_COLR *COLR;
+ table_SVG *SVG_;
+
+ table_TSI *TSI_01;
+ table_TSI *TSI_23;
+ table_TSI5 *TSI5;
+
+ otfcc_GlyphOrder *glyph_order;
+};
+
+extern caryll_ElementInterfaceOf(otfcc_Font) {
+ caryll_RT(otfcc_Font);
+ void (*consolidate)(otfcc_Font * font, const otfcc_Options *options);
+ void *(*createTable)(otfcc_Font * font, const uint32_t tag);
+ void (*deleteTable)(otfcc_Font * font, const uint32_t tag);
+}
+otfcc_iFont;
+
+// Font builder interfaces
+typedef struct otfcc_IFontBuilder {
+ otfcc_Font *(*read)(void *source, uint32_t index, const otfcc_Options *options);
+ void (*free)(struct otfcc_IFontBuilder *self);
+} otfcc_IFontBuilder;
+otfcc_IFontBuilder *otfcc_newOTFReader(void);
+otfcc_IFontBuilder *otfcc_newJsonReader(void);
+
+// Font serializer interface
+typedef struct otfcc_IFontSerializer {
+ void *(*serialize)(otfcc_Font *font, const otfcc_Options *options);
+ void (*free)(struct otfcc_IFontSerializer *self);
+} otfcc_IFontSerializer;
+otfcc_IFontSerializer *otfcc_newJsonWriter(void);
+otfcc_IFontSerializer *otfcc_newOTFWriter(void);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/glyph-order.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/glyph-order.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/glyph-order.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,37 @@
+#ifndef CARYLL_INCLUDE_GLYPH_ORDER_H
+#define CARYLL_INCLUDE_GLYPH_ORDER_H
+
+#include "dep/sds.h"
+#include "dep/json.h"
+#include "dep/uthash.h"
+#include "caryll/ownership.h"
+#include "otfcc/primitives.h"
+#include "otfcc/handle.h"
+#include "otfcc/options.h"
+
+typedef struct {
+ glyphid_t gid;
+ sds name;
+ uint8_t orderType;
+ uint32_t orderEntry;
+ UT_hash_handle hhID;
+ UT_hash_handle hhName;
+} otfcc_GlyphOrderEntry;
+
+typedef struct {
+ otfcc_GlyphOrderEntry *byGID;
+ otfcc_GlyphOrderEntry *byName;
+} otfcc_GlyphOrder;
+
+struct otfcc_GlyphOrderPackage {
+ caryll_RT(otfcc_GlyphOrder);
+ sds (*setByGID)(otfcc_GlyphOrder *go, glyphid_t gid, sds name);
+ bool (*setByName)(otfcc_GlyphOrder *go, sds name, glyphid_t gid);
+ bool (*nameAField_Shared)(otfcc_GlyphOrder *go, glyphid_t gid, sds *field); // return a shared name pointer
+ bool (*consolidateHandle)(otfcc_GlyphOrder *go, otfcc_GlyphHandle *h);
+ bool (*lookupName)(otfcc_GlyphOrder *go, sds name);
+};
+
+extern const struct otfcc_GlyphOrderPackage otfcc_pkgGlyphOrder;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/handle.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/handle.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/handle.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,40 @@
+#ifndef CARYLL_INCLUDE_OTFCC_HANDLE_H
+#define CARYLL_INCLUDE_OTFCC_HANDLE_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include "dep/sds.h"
+#include "caryll/ownership.h"
+#include "caryll/element.h"
+#include "primitives.h"
+
+typedef enum {
+ HANDLE_STATE_EMPTY = 0,
+ HANDLE_STATE_INDEX = 1,
+ HANDLE_STATE_NAME = 2,
+ HANDLE_STATE_CONSOLIDATED = 3
+} handle_state;
+struct otfcc_Handle {
+ handle_state state;
+ glyphid_t index;
+ OWNING sds name;
+};
+
+typedef struct otfcc_Handle otfcc_Handle;
+typedef struct otfcc_Handle otfcc_GlyphHandle;
+typedef struct otfcc_Handle otfcc_FDHandle;
+typedef struct otfcc_Handle otfcc_LookupHandle;
+typedef struct otfcc_Handle otfcc_AxisHandle;
+
+struct otfcc_HandlePackage {
+ caryll_VT(otfcc_Handle);
+ struct otfcc_Handle (*fromIndex)(glyphid_t id);
+ struct otfcc_Handle (*fromName)(MOVE sds s);
+ struct otfcc_Handle (*fromConsolidated)(glyphid_t id, COPY sds s);
+ void (*consolidateTo)(struct otfcc_Handle *h, glyphid_t id, sds name);
+};
+
+extern const struct otfcc_HandlePackage otfcc_iHandle;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/logger.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/logger.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/logger.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,35 @@
+#ifndef CARYLL_INCLUDE_LOGGER_H
+#define CARYLL_INCLUDE_LOGGER_H
+
+#include "dep/sds.h"
+#include "caryll/ownership.h"
+#include "primitives.h"
+
+typedef struct otfcc_ILoggerTarget {
+ void (*dispose)(struct otfcc_ILoggerTarget *self); // destructor
+ void (*push)(struct otfcc_ILoggerTarget *self, MOVE sds data); // push data
+} otfcc_ILoggerTarget;
+
+typedef enum { log_type_error = 0, log_type_warning = 1, log_type_info = 2, log_type_progress = 3 } otfcc_LoggerType;
+enum { log_vl_critical = 0, log_vl_important = 1, log_vl_notice = 2, log_vl_info = 5, log_vl_progress = 10 };
+
+typedef struct otfcc_ILogger {
+ void (*dispose)(struct otfcc_ILogger *self); // destructor
+ void (*indent)(struct otfcc_ILogger *self, const char *segment); // add a level
+ void (*indentSDS)(struct otfcc_ILogger *self, MOVE sds segment); // add a level, using SDS
+ void (*start)(struct otfcc_ILogger *self, const char *segment); // add a level, output a progress
+ void (*startSDS)(struct otfcc_ILogger *self, MOVE sds segment); // add a level, output a progress
+ void (*log)(struct otfcc_ILogger *self, uint8_t verbosity, otfcc_LoggerType type, const char *data); // log a data
+ void (*logSDS)(struct otfcc_ILogger *self, uint8_t verbosity, otfcc_LoggerType type, MOVE sds data); // log a data
+ void (*dedent)(struct otfcc_ILogger *self); // remove a level
+ void (*finish)(struct otfcc_ILogger *self); // remove a level, finishing a ask
+ void (*end)(struct otfcc_ILogger *self); // remove a level
+ void (*setVerbosity)(struct otfcc_ILogger *self, uint8_t verbosity); // remove a level
+ otfcc_ILoggerTarget *(*getTarget)(struct otfcc_ILogger *self); // query target
+} otfcc_ILogger;
+
+otfcc_ILogger *otfcc_newLogger(otfcc_ILoggerTarget *target);
+otfcc_ILoggerTarget *otfcc_newStdErrTarget(void);
+otfcc_ILoggerTarget *otfcc_newEmptyTarget(void);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/options.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/options.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/options.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,41 @@
+#ifndef CARYLL_INCLUDE_OPTIONS_H
+#define CARYLL_INCLUDE_OPTIONS_H
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "logger.h"
+
+typedef struct {
+ bool debug_wait_on_start;
+ bool ignore_glyph_order;
+ bool ignore_hints;
+ bool has_vertical_metrics;
+ bool export_fdselect;
+ bool keep_average_char_width;
+ bool keep_unicode_ranges;
+ bool short_post;
+ bool dummy_DSIG;
+ bool keep_modified_time;
+ bool instr_as_bytes;
+ bool verbose;
+ bool quiet;
+ bool cff_short_vmtx;
+ bool merge_lookups;
+ bool merge_features;
+ bool force_cid;
+ bool cff_rollCharString;
+ bool cff_doSubroutinize;
+ bool stub_cmap4;
+ bool decimal_cmap;
+ bool name_glyphs_by_hash;
+ bool name_glyphs_by_gid;
+ char *glyph_name_prefix;
+ otfcc_ILogger *logger;
+} otfcc_Options;
+
+otfcc_Options *otfcc_newOptions(void);
+void otfcc_deleteOptions(otfcc_Options *options);
+void otfcc_Options_optimizeTo(otfcc_Options *options, uint8_t level);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,47 @@
+#ifndef CARYLL_INCLUDE_OTFCC_PRIMITIVES_H
+#define CARYLL_INCLUDE_OTFCC_PRIMITIVES_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <float.h>
+
+typedef int16_t f2dot14; // 2.14 Fixed number, representing a value between [-1, 1].
+typedef int32_t f16dot16; // 16.16 Fixed number, usually used by intermediate coordiantes of a font.
+ // To deal with implicit deltas in GVAR we must be very careful about it.
+ // Arithmetic operators saturate towards positive or negative infinity.
+ // Infinity values short circuit expressions.
+
+typedef uint16_t glyphid_t; // Glyph index
+typedef uint16_t glyphclass_t; // Glyph class
+typedef uint16_t glyphsize_t; // GASP glyph size
+typedef uint16_t tableid_t; // Table/Font structure index
+typedef uint16_t colorid_t; // Color index
+typedef uint16_t shapeid_t; // Shape index
+typedef uint16_t cffsid_t; // CFF/CFF2 String index
+typedef uint32_t arity_t; // CFF Arity/Stack depth
+typedef uint32_t unicode_t; // Unicode
+
+typedef double pos_t; // Position
+typedef double scale_t; // transform scaling
+#define POS_MAX FLT_MAX
+#define POS_MIN FLT_MIN
+
+typedef double length_t; // Length
+
+double otfcc_from_f2dot14(const f2dot14 x);
+int16_t otfcc_to_f2dot14(const double x);
+double otfcc_from_fixed(const f16dot16 x);
+f16dot16 otfcc_to_fixed(const double x);
+
+#define f16dot16_precision 16
+#define f16dot16_k (1 << (f16dot16_precision - 1))
+#define f16dot16_infinity ((f16dot16)0x7fffffff)
+#define f16dot16_negativeIntinity ((f16dot16)0x80000000)
+
+f16dot16 otfcc_f1616_add(f16dot16 a, f16dot16 b);
+f16dot16 otfcc_f1616_minus(f16dot16 a, f16dot16 b);
+f16dot16 otfcc_f1616_multiply(f16dot16 a, f16dot16 b);
+f16dot16 otfcc_f1616_divide(f16dot16 a, f16dot16 b);
+f16dot16 otfcc_f1616_muldiv(f16dot16 a, f16dot16 b, f16dot16 c);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt-builder.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt-builder.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt-builder.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,30 @@
+#ifndef CARYLL_SFNT_BUILDER_H
+#define CARYLL_SFNT_BUILDER_H
+
+#include "primitives.h"
+#include "caryll/buffer.h"
+#include "otfcc/options.h"
+#include "dep/uthash.h"
+
+typedef struct {
+ int tag;
+ uint32_t length;
+ uint32_t checksum;
+ caryll_Buffer *buffer;
+ UT_hash_handle hh;
+} otfcc_SFNTTableEntry;
+
+typedef struct {
+ uint32_t count;
+ uint32_t header;
+ otfcc_SFNTTableEntry *tables;
+ const otfcc_Options *options;
+} otfcc_SFNTBuilder;
+
+otfcc_SFNTBuilder *otfcc_newSFNTBuilder(uint32_t header, const otfcc_Options *options);
+void otfcc_SFNTBuilder_pushTable(otfcc_SFNTBuilder *builder, uint32_t tag, caryll_Buffer *buffer);
+void otfcc_deleteSFNTBuilder(otfcc_SFNTBuilder *builder);
+
+caryll_Buffer *otfcc_SFNTBuilder_serialize(otfcc_SFNTBuilder *builder);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,34 @@
+#ifndef CARYLL_INCLUDE_OTFCC_SFNT_H
+#define CARYLL_INCLUDE_OTFCC_SFNT_H
+
+#include <stdint.h>
+#include <stdio.h>
+
+typedef struct {
+ uint32_t tag;
+ uint32_t checkSum;
+ uint32_t offset;
+ uint32_t length;
+ uint8_t *data;
+} otfcc_PacketPiece;
+
+typedef struct {
+ uint32_t sfnt_version;
+ uint16_t numTables;
+ uint16_t searchRange;
+ uint16_t entrySelector;
+ uint16_t rangeShift;
+ otfcc_PacketPiece *pieces;
+} otfcc_Packet;
+
+typedef struct {
+ uint32_t type;
+ uint32_t count;
+ uint32_t *offsets;
+ otfcc_Packet *packets;
+} otfcc_SplineFontContainer;
+
+otfcc_SplineFontContainer *otfcc_readSFNT(FILE *file);
+void otfcc_deleteSFNT(otfcc_SplineFontContainer *font);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/BASE.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/BASE.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/BASE.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,30 @@
+#ifndef CARYLL_INCLUDE_TABLE_BASE_H
+#define CARYLL_INCLUDE_TABLE_BASE_H
+
+#include "otl.h"
+
+typedef struct {
+ uint32_t tag;
+ pos_t coordinate;
+} otl_BaseValue;
+
+typedef struct {
+ uint32_t tag;
+ uint32_t defaultBaselineTag;
+ tableid_t baseValuesCount;
+ OWNING otl_BaseValue *baseValues;
+} otl_BaseScriptEntry;
+
+typedef struct {
+ tableid_t scriptCount;
+ otl_BaseScriptEntry *entries;
+} otl_BaseAxis;
+
+typedef struct {
+ otl_BaseAxis *horizontal;
+ otl_BaseAxis *vertical;
+} table_BASE;
+
+extern caryll_RefElementInterface(table_BASE) table_iBASE;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CFF.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CFF.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CFF.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,90 @@
+#ifndef CARYLL_INCLUDE_TABLE_CFF_H
+#define CARYLL_INCLUDE_TABLE_CFF_H
+
+#include "table-common.h"
+#include "head.h"
+#include "glyf.h"
+
+typedef struct {
+ scale_t a;
+ scale_t b;
+ scale_t c;
+ scale_t d;
+ VQ x;
+ VQ y;
+} cff_FontMatrix;
+
+typedef struct {
+ arity_t blueValuesCount;
+ OWNING double *blueValues;
+ arity_t otherBluesCount;
+ OWNING double *otherBlues;
+ arity_t familyBluesCount;
+ OWNING double *familyBlues;
+ arity_t familyOtherBluesCount;
+ OWNING double *familyOtherBlues;
+ double blueScale;
+ double blueShift;
+ double blueFuzz;
+ double stdHW;
+ double stdVW;
+ arity_t stemSnapHCount;
+ OWNING double *stemSnapH;
+ arity_t stemSnapVCount;
+ OWNING double *stemSnapV;
+ bool forceBold;
+ uint32_t languageGroup;
+ double expansionFactor;
+ double initialRandomSeed;
+ double defaultWidthX;
+ double nominalWidthX;
+} cff_PrivateDict;
+
+typedef struct _table_CFF table_CFF;
+
+struct _table_CFF {
+ // Name
+ sds fontName;
+
+ // General properties
+ bool isCID;
+ sds version;
+ sds notice;
+ sds copyright;
+ sds fullName;
+ sds familyName;
+ sds weight;
+ bool isFixedPitch;
+ double italicAngle;
+ double underlinePosition;
+ double underlineThickness;
+ double fontBBoxTop;
+ double fontBBoxBottom;
+ double fontBBoxLeft;
+ double fontBBoxRight;
+ double strokeWidth;
+ OWNING cff_PrivateDict *privateDict;
+ OWNING cff_FontMatrix *fontMatrix;
+
+ // CID-only operators
+ sds cidRegistry;
+ sds cidOrdering;
+ uint32_t cidSupplement;
+ double cidFontVersion;
+ double cidFontRevision;
+ uint32_t cidCount;
+ uint32_t UIDBase;
+ // CID FDArray
+ tableid_t fdArrayCount;
+ OWNING table_CFF **fdArray;
+};
+
+extern caryll_RefElementInterface(table_CFF) table_iCFF;
+
+// CFF and glyf
+typedef struct {
+ OWNING table_CFF *meta;
+ OWNING table_glyf *glyphs;
+} table_CFFAndGlyf;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/COLR.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/COLR.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/COLR.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,24 @@
+#ifndef CARYLL_INCLUDE_TABLE_COLR_H
+#define CARYLL_INCLUDE_TABLE_COLR_H
+
+#include "table-common.h"
+
+// Layer and layer vector
+typedef struct {
+ otfcc_GlyphHandle glyph;
+ colorid_t paletteIndex;
+} colr_Layer;
+extern caryll_ElementInterface(colr_Layer) colr_iLayer;
+typedef caryll_Vector(colr_Layer) colr_LayerList;
+extern caryll_VectorInterface(colr_LayerList, colr_Layer) colr_iLayerList;
+
+// glyph-to-layers mapping and COLR table
+typedef struct {
+ otfcc_GlyphHandle glyph;
+ colr_LayerList layers;
+} colr_Mapping;
+extern caryll_ElementInterface(colr_Mapping) colr_iMapping;
+typedef caryll_Vector(colr_Mapping) table_COLR;
+extern caryll_VectorInterface(table_COLR, colr_Mapping) table_iCOLR;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CPAL.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CPAL.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CPAL.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,35 @@
+#ifndef CARYLL_INCLUDE_TABLE_CPAL_H
+#define CARYLL_INCLUDE_TABLE_CPAL_H
+
+#include "table-common.h"
+
+// Color and Color list
+typedef struct {
+ uint8_t red;
+ uint8_t green;
+ uint8_t blue;
+ uint8_t alpha;
+ uint16_t label;
+} cpal_Color;
+extern caryll_ElementInterface(cpal_Color) cpal_iColor;
+typedef caryll_Vector(cpal_Color) cpal_ColorSet;
+extern caryll_VectorInterface(cpal_ColorSet, cpal_Color) cpal_iColorSet;
+
+// Palette and Palette list
+typedef struct {
+ cpal_ColorSet colorset;
+ uint32_t type;
+ uint32_t label;
+} cpal_Palette;
+extern caryll_ElementInterface(cpal_Palette) cpal_iPalette;
+typedef caryll_Vector(cpal_Palette) cpal_PaletteSet;
+extern caryll_VectorInterface(cpal_PaletteSet, cpal_Palette) cpal_iPaletteSet;
+
+// CPAL table
+typedef struct {
+ uint16_t version;
+ cpal_PaletteSet palettes;
+} table_CPAL;
+extern caryll_RefElementInterface(table_CPAL) table_iCPAL;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/GDEF.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/GDEF.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/GDEF.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,31 @@
+#ifndef CARYLL_INCLUDE_TABLE_GEDF_H
+#define CARYLL_INCLUDE_TABLE_GEDF_H
+
+#include "otl.h"
+
+typedef struct {
+ int8_t format;
+ pos_t coordiante;
+ int16_t pointIndex;
+} otl_CaretValue;
+extern caryll_ElementInterface(otl_CaretValue) otl_iCaretValue;
+typedef caryll_Vector(otl_CaretValue) otl_CaretValueList;
+extern caryll_VectorInterface(otl_CaretValueList, otl_CaretValue) otl_iCaretValueList;
+
+typedef struct {
+ otfcc_GlyphHandle glyph;
+ OWNING otl_CaretValueList carets;
+} otl_CaretValueRecord;
+extern caryll_ElementInterface(otl_CaretValueRecord) otl_iCaretValueRecord;
+typedef caryll_Vector(otl_CaretValueRecord) otl_LigCaretTable;
+extern caryll_VectorInterface(otl_LigCaretTable, otl_CaretValueRecord) otl_iLigCaretTable;
+
+typedef struct {
+ OWNING otl_ClassDef *glyphClassDef;
+ OWNING otl_ClassDef *markAttachClassDef;
+ OWNING otl_LigCaretTable ligCarets;
+} table_GDEF;
+
+extern caryll_RefElementInterface(table_GDEF) table_iGDEF;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/LTSH.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/LTSH.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/LTSH.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,13 @@
+#ifndef CARYLL_INCLUDE_TABLE_LTSH_H
+#define CARYLL_INCLUDE_TABLE_LTSH_H
+
+#include "table-common.h"
+
+typedef struct {
+ uint16_t version;
+ glyphid_t numGlyphs;
+ OWNING uint8_t *yPels;
+} table_LTSH;
+extern caryll_RefElementInterface(table_LTSH) table_iLTSH;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/OS_2.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/OS_2.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/OS_2.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,50 @@
+#ifndef CARYLL_INCLUDE_TABLE_OS_2_H
+#define CARYLL_INCLUDE_TABLE_OS_2_H
+
+#include "table-common.h"
+
+typedef struct {
+ // OS/2 and Windows specific metrics
+ uint16_t version;
+ int16_t xAvgCharWidth;
+ uint16_t usWeightClass;
+ uint16_t usWidthClass;
+ uint16_t fsType;
+ int16_t ySubscriptXSize;
+ int16_t ySubscriptYSize;
+ int16_t ySubscriptXOffset;
+ int16_t ySubscriptYOffset;
+ int16_t ySupscriptXSize;
+ int16_t ySupscriptYSize;
+ int16_t ySupscriptXOffset;
+ int16_t ySupscriptYOffset;
+ int16_t yStrikeoutSize;
+ int16_t yStrikeoutPosition;
+ int16_t sFamilyClass;
+ uint8_t panose[10];
+ uint32_t ulUnicodeRange1;
+ uint32_t ulUnicodeRange2;
+ uint32_t ulUnicodeRange3;
+ uint32_t ulUnicodeRange4;
+ uint8_t achVendID[4];
+ uint16_t fsSelection;
+ uint16_t usFirstCharIndex;
+ uint16_t usLastCharIndex;
+ int16_t sTypoAscender;
+ int16_t sTypoDescender;
+ int16_t sTypoLineGap;
+ uint16_t usWinAscent;
+ uint16_t usWinDescent;
+ uint32_t ulCodePageRange1;
+ uint32_t ulCodePageRange2;
+ int16_t sxHeight;
+ int16_t sCapHeight;
+ uint16_t usDefaultChar;
+ uint16_t usBreakChar;
+ uint16_t usMaxContext;
+ uint16_t usLowerOpticalPointSize;
+ uint16_t usUpperOpticalPointSize;
+} table_OS_2;
+extern caryll_RefElementInterface(table_OS_2) table_iOS_2;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/SVG.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/SVG.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/SVG.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,18 @@
+#ifndef CARYLL_INCLUDE_TABLE_SVG_H
+#define CARYLL_INCLUDE_TABLE_SVG_H
+
+#include "table-common.h"
+
+// SVG assignment
+typedef struct {
+ // Due to the outward references from SVG document to GID.
+ // We have to use GID here. Sorry.
+ glyphid_t start;
+ glyphid_t end;
+ caryll_Buffer *document;
+} svg_Assignment;
+extern caryll_ValElementInterface(svg_Assignment) svg_iAssignment;
+typedef caryll_Vector(svg_Assignment) table_SVG;
+extern caryll_VectorInterface(table_SVG, svg_Assignment) table_iSVG;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/TSI5.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/TSI5.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/TSI5.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,10 @@
+#ifndef CARYLL_INCLUDE_TABLE_TSI5_H
+#define CARYLL_INCLUDE_TABLE_TSI5_H
+
+#include "table-common.h"
+#include "otl/classdef.h"
+
+// A TSI5 table is simply an OTL Class definition.
+typedef otl_ClassDef table_TSI5;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VDMX.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VDMX.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VDMX.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,36 @@
+#ifndef CARYLL_INCLUDE_TABLE_VDMX_H
+#define CARYLL_INCLUDE_TABLE_VDMX_H
+
+#include "table-common.h"
+
+typedef struct {
+ uint16_t yPelHeight;
+ int16_t yMax;
+ int16_t yMin;
+} vdmx_Record;
+
+extern caryll_ValElementInterface(vdmx_Record) vdmx_iRecord;
+typedef caryll_Vector(vdmx_Record) vdmx_Group;
+extern caryll_VectorInterface(vdmx_Group, vdmx_Record) vdmx_iGroup;
+
+typedef struct {
+ uint8_t bCharset;
+ uint8_t xRatio;
+ uint8_t yStartRatio;
+ uint8_t yEndRatio;
+
+ vdmx_Group records;
+} vdmx_RatioRange;
+
+extern caryll_ElementInterface(vdmx_RatioRange) vdmx_iRatioRange;
+typedef caryll_Vector(vdmx_RatioRange) vdmx_RatioRagneList;
+extern caryll_VectorInterface(vdmx_RatioRagneList, vdmx_RatioRange) vdmx_iRatioRangeList;
+
+typedef struct {
+ uint16_t version;
+ vdmx_RatioRagneList ratios;
+} table_VDMX;
+
+extern caryll_RefElementInterface(table_VDMX) table_iVDMX;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VORG.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VORG.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VORG.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,19 @@
+#ifndef CARYLL_INCLUDE_TABLE_VORG_H
+#define CARYLL_INCLUDE_TABLE_VORG_H
+
+#include "table-common.h"
+
+typedef struct {
+ glyphid_t gid;
+ int16_t verticalOrigin;
+} VORG_entry;
+
+typedef struct {
+ glyphid_t numVertOriginYMetrics;
+ pos_t defaultVerticalOrigin;
+ OWNING VORG_entry *entries;
+} table_VORG;
+
+extern caryll_RefElementInterface(table_VORG) table_iVORG;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/_TSI.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/_TSI.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/_TSI.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,19 @@
+#ifndef CARYLL_INCLUDE_TABLE_TSI_H
+#define CARYLL_INCLUDE_TABLE_TSI_H
+
+#include "table-common.h"
+
+// TSI entries
+typedef enum { TSI_GLYPH, TSI_FPGM, TSI_PREP, TSI_CVT, TSI_RESERVED_FFFC } tsi_EntryType;
+
+typedef struct {
+ tsi_EntryType type;
+ otfcc_GlyphHandle glyph;
+ sds content;
+} tsi_Entry;
+
+extern caryll_ElementInterface(tsi_Entry) tsi_iEntry;
+typedef caryll_Vector(tsi_Entry) table_TSI;
+extern caryll_VectorInterface(table_TSI, tsi_Entry) table_iTSI;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cmap.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cmap.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cmap.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,44 @@
+#ifndef CARYLL_INCLUDE_TABLE_CMAP_H
+#define CARYLL_INCLUDE_TABLE_CMAP_H
+
+#include "table-common.h"
+
+// We will support format 0, 4, 12 and 14 of CMAP only
+typedef struct {
+ UT_hash_handle hh;
+ int unicode;
+ otfcc_GlyphHandle glyph;
+} cmap_Entry;
+
+typedef struct {
+ uint32_t unicode;
+ uint32_t selector;
+} cmap_UVS_key;
+
+typedef struct {
+ UT_hash_handle hh;
+ cmap_UVS_key key;
+ otfcc_GlyphHandle glyph;
+} cmap_UVS_Entry;
+
+typedef struct {
+ OWNING cmap_Entry *unicodes;
+ OWNING cmap_UVS_Entry *uvs;
+} table_cmap;
+
+extern caryll_ElementInterfaceOf(table_cmap) {
+ caryll_RT(table_cmap);
+ // unicode
+ bool (*encodeByIndex)(table_cmap * cmap, int c, uint16_t gid);
+ bool (*encodeByName)(table_cmap * cmap, int c, MOVE sds name);
+ bool (*unmap)(table_cmap * cmap, int c);
+ otfcc_GlyphHandle *(*lookup)(const table_cmap *cmap, int c);
+ // uvs
+ bool (*encodeUVSByIndex)(table_cmap * cmap, cmap_UVS_key c, uint16_t gid);
+ bool (*encodeUVSByName)(table_cmap * cmap, cmap_UVS_key c, MOVE sds name);
+ bool (*unmapUVS)(table_cmap * cmap, cmap_UVS_key c);
+ otfcc_GlyphHandle *(*lookupUVS)(const table_cmap *cmap, cmap_UVS_key c);
+}
+table_iCmap;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cvt.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cvt.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cvt.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,12 @@
+#ifndef CARYLL_INCLUDE_TABLE_CVT_H
+#define CARYLL_INCLUDE_TABLE_CVT_H
+
+#include "table-common.h"
+
+typedef struct {
+ uint32_t length;
+ OWNING uint16_t *words;
+} table_cvt;
+extern caryll_RefElementInterface(table_cvt) table_iCvt;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fpgm-prep.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fpgm-prep.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fpgm-prep.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,14 @@
+#ifndef CARYLL_INCLUDE_TABLE_FPGM_PREP_H
+#define CARYLL_INCLUDE_TABLE_FPGM_PREP_H
+
+#include "table-common.h"
+
+typedef struct {
+ sds tag;
+ uint32_t length;
+ OWNING uint8_t *bytes;
+} table_fpgm_prep;
+
+extern caryll_RefElementInterface(table_fpgm_prep) table_iFpgm_prep;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fvar.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fvar.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fvar.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,40 @@
+#ifndef CARYLL_INCLUDE_TABLE_FVAR_H
+#define CARYLL_INCLUDE_TABLE_FVAR_H
+
+#include "table-common.h"
+#include "otfcc/vf/vf.h"
+
+// vf_Axis and vf_Axes are defined in vf/vf.h
+// fvar_Instance is defined below
+typedef struct {
+ uint16_t subfamilyNameID;
+ uint16_t flags;
+ VV coordinates;
+ uint16_t postScriptNameID;
+} fvar_Instance;
+extern caryll_ElementInterface(fvar_Instance) fvar_iInstance;
+typedef caryll_Vector(fvar_Instance) fvar_InstanceList;
+extern caryll_VectorInterface(fvar_InstanceList, fvar_Instance) fvar_iInstanceList;
+
+typedef struct {
+ sds name;
+ vq_Region *region;
+ UT_hash_handle hh;
+} fvar_Master;
+
+typedef struct {
+ uint16_t majorVersion;
+ uint16_t minorVersion;
+ vf_Axes axes;
+ fvar_InstanceList instances;
+ fvar_Master *masters;
+} table_fvar;
+
+extern caryll_ElementInterfaceOf(table_fvar) {
+ caryll_RT(table_fvar);
+ const vq_Region *(*registerRegion)(table_fvar * fvar, MOVE vq_Region * region);
+ const fvar_Master *(*findMasterByRegion)(const table_fvar *fvar, const vq_Region *region);
+}
+table_iFvar;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/gasp.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/gasp.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/gasp.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,24 @@
+#ifndef CARYLL_INCLUDE_TABLE_GASP_H
+#define CARYLL_INCLUDE_TABLE_GASP_H
+
+#include "table-common.h"
+
+typedef struct {
+ glyphsize_t rangeMaxPPEM;
+ bool dogray;
+ bool gridfit;
+ bool symmetric_smoothing;
+ bool symmetric_gridfit;
+} gasp_Record;
+extern caryll_ElementInterface(gasp_Record) gasp_iRecord;
+typedef caryll_Vector(gasp_Record) gasp_RecordList;
+extern caryll_VectorInterface(gasp_RecordList, gasp_Record) gasp_iRecordList;
+
+typedef struct {
+ uint16_t version;
+ OWNING gasp_RecordList records;
+} table_gasp;
+
+extern caryll_RefElementInterface(table_gasp) table_iGasp;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/glyf.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/glyf.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/glyf.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,129 @@
+#ifndef CARYLL_INCLUDE_TABLE_GLYF_H
+#define CARYLL_INCLUDE_TABLE_GLYF_H
+
+#include "table-common.h"
+#include "head.h"
+#include "maxp.h"
+#include "fvar.h"
+
+enum GlyphType { SIMPLE, COMPOSITE };
+
+typedef struct {
+ VQ x;
+ VQ y;
+ int8_t onCurve; // a mask indicates whether a point is on-curve or off-curve
+ // bit 0 : 1 for on-curve, 0 for off-curve. JSON field: "on"
+ // bit 1 - 7 : unused, set to 0
+ // in JSON, they are separated into several boolean fields.
+} glyf_Point;
+extern caryll_ValElementInterface(glyf_Point) glyf_iPoint;
+typedef caryll_Vector(glyf_Point) glyf_Contour;
+extern caryll_VectorInterface(glyf_Contour, glyf_Point) glyf_iContour;
+
+typedef caryll_Vector(glyf_Contour) glyf_ContourList;
+extern caryll_VectorInterface(glyf_ContourList, glyf_Contour) glyf_iContourList;
+
+// CFF stems and hint masks
+typedef struct {
+ pos_t position;
+ pos_t width;
+ uint16_t map;
+} glyf_PostscriptStemDef;
+extern caryll_ElementInterface(glyf_PostscriptStemDef) glyf_iPostscriptStemDef;
+typedef caryll_Vector(glyf_PostscriptStemDef) glyf_StemDefList;
+extern caryll_VectorInterface(glyf_StemDefList, glyf_PostscriptStemDef) glyf_iStemDefList;
+
+typedef struct {
+ uint16_t pointsBefore;
+ uint16_t contoursBefore;
+ bool maskH[0x100];
+ bool maskV[0x100];
+} glyf_PostscriptHintMask;
+extern caryll_ElementInterface(glyf_PostscriptHintMask) glyf_iPostscriptHintMask;
+typedef caryll_Vector(glyf_PostscriptHintMask) glyf_MaskList;
+extern caryll_VectorInterface(glyf_MaskList, glyf_PostscriptHintMask) glyf_iMaskList;
+
+typedef enum {
+ REF_XY = 0,
+ REF_ANCHOR_ANCHOR = 1,
+ REF_ANCHOR_XY = 2,
+ REF_ANCHOR_CONSOLIDATED = 3,
+ REF_ANCHOR_CONSOLIDATING_ANCHOR = 4,
+ REF_ANCHOR_CONSOLIDATING_XY = 5,
+} RefAnchorStatus;
+
+typedef struct {
+ //// NOTE: this part and below looks like a glyf_Point
+ VQ x;
+ VQ y;
+ // flags
+ bool roundToGrid;
+ bool useMyMetrics;
+ // the glyph being referenced
+ otfcc_GlyphHandle glyph;
+ // transformation term
+ scale_t a;
+ scale_t b;
+ scale_t c;
+ scale_t d;
+ // Anchorness term
+ RefAnchorStatus isAnchored;
+ shapeid_t inner;
+ shapeid_t outer;
+} glyf_ComponentReference;
+extern caryll_ValElementInterface(glyf_ComponentReference) glyf_iComponentReference;
+typedef caryll_Vector(glyf_ComponentReference) glyf_ReferenceList;
+extern caryll_VectorInterface(glyf_ReferenceList, glyf_ComponentReference) glyf_iReferenceList;
+
+typedef struct {
+ pos_t xMin;
+ pos_t xMax;
+ pos_t yMin;
+ pos_t yMax;
+ uint16_t nestDepth;
+ uint16_t nPoints;
+ uint16_t nContours;
+ uint16_t nCompositePoints;
+ uint16_t nCompositeContours;
+} glyf_GlyphStat;
+
+typedef struct {
+ sds name;
+
+ // Metrics
+ VQ horizontalOrigin;
+ VQ advanceWidth;
+ VQ verticalOrigin;
+ VQ advanceHeight;
+
+ // Outline
+ // NOTE: SFNT does not support mixed glyphs, but we do.
+ OWNING glyf_ContourList contours;
+ OWNING glyf_ReferenceList references;
+
+ // Postscript hints
+ OWNING glyf_StemDefList stemH;
+ OWNING glyf_StemDefList stemV;
+ OWNING glyf_MaskList hintMasks;
+ OWNING glyf_MaskList contourMasks;
+
+ // TTF instructions
+ uint16_t instructionsLength;
+ uint8_t *instructions;
+ // TTF Screen specific
+ uint8_t yPel;
+
+ // CID FDSelect
+ otfcc_FDHandle fdSelect;
+ glyphid_t cid; // Subset CID fonts may need this to represent the original CID entry
+
+ // Stats
+ glyf_GlyphStat stat;
+} glyf_Glyph;
+
+typedef glyf_Glyph *glyf_GlyphPtr;
+extern caryll_ElementInterface(glyf_GlyphPtr) glyf_iGlyphPtr;
+typedef caryll_Vector(glyf_GlyphPtr) table_glyf;
+extern caryll_VectorInterface(table_glyf, glyf_GlyphPtr) table_iGlyf;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hdmx.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hdmx.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hdmx.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,23 @@
+#ifndef CARYLL_INCLUDE_TABLE_HDMX_H
+#define CARYLL_INCLUDE_TABLE_HDMX_H
+
+#include "table-common.h"
+#include "maxp.h"
+
+typedef struct {
+ uint8_t pixelSize;
+ uint8_t maxWidth;
+ uint8_t *widths;
+} device_record;
+
+typedef struct {
+ // Horizontal device metrics
+ uint16_t version;
+ uint16_t numRecords;
+ uint32_t sizeDeviceRecord;
+ OWNING device_record *records;
+} table_hdmx;
+
+extern caryll_RefElementInterface(table_hdmx) table_iHdmx;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/head.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/head.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/head.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,29 @@
+#ifndef CARYLL_INCLUDE_TABLE_HEAD_H
+#define CARYLL_INCLUDE_TABLE_HEAD_H
+
+#include "table-common.h"
+
+typedef struct {
+ // Font header
+ f16dot16 version;
+ uint32_t fontRevision;
+ uint32_t checkSumAdjustment;
+ uint32_t magicNumber;
+ uint16_t flags;
+ uint16_t unitsPerEm;
+ int64_t created;
+ int64_t modified;
+ int16_t xMin;
+ int16_t yMin;
+ int16_t xMax;
+ int16_t yMax;
+ uint16_t macStyle;
+ uint16_t lowestRecPPEM;
+ int16_t fontDirectoryHint;
+ int16_t indexToLocFormat;
+ int16_t glyphDataFormat;
+} table_head;
+
+extern caryll_RefElementInterface(table_head) table_iHead;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hhea.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hhea.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hhea.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,25 @@
+#ifndef CARYLL_INCLUDE_TABLE_HHEA_H
+#define CARYLL_INCLUDE_TABLE_HHEA_H
+
+#include "table-common.h"
+
+typedef struct {
+ // Horizontal header
+ f16dot16 version;
+ int16_t ascender;
+ int16_t descender;
+ int16_t lineGap;
+ uint16_t advanceWidthMax;
+ int16_t minLeftSideBearing;
+ int16_t minRightSideBearing;
+ int16_t xMaxExtent;
+ int16_t caretSlopeRise;
+ int16_t caretSlopeRun;
+ int16_t caretOffset;
+ int16_t reserved[4];
+ int16_t metricDataFormat;
+ uint16_t numberOfMetrics;
+} table_hhea;
+extern caryll_RefElementInterface(table_hhea) table_iHhea;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hmtx.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hmtx.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hmtx.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,21 @@
+#ifndef CARYLL_INCLUDE_TABLE_HMTX_H
+#define CARYLL_INCLUDE_TABLE_HMTX_H
+
+#include "table-common.h"
+
+#include "hhea.h"
+#include "maxp.h"
+
+typedef struct {
+ length_t advanceWidth;
+ pos_t lsb;
+} horizontal_metric;
+
+typedef struct {
+ // Horizontal metrics
+ OWNING horizontal_metric *metrics;
+ OWNING pos_t *leftSideBearing;
+} table_hmtx;
+extern caryll_RefElementInterface(table_hmtx) table_iHmtx;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/maxp.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/maxp.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/maxp.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,27 @@
+#ifndef CARYLL_INCLUDE_TABLE_MAXP_H
+#define CARYLL_INCLUDE_TABLE_MAXP_H
+
+#include "table-common.h"
+
+typedef struct {
+ // Maximum profile
+ f16dot16 version;
+ uint16_t numGlyphs;
+ uint16_t maxPoints;
+ uint16_t maxContours;
+ uint16_t maxCompositePoints;
+ uint16_t maxCompositeContours;
+ uint16_t maxZones;
+ uint16_t maxTwilightPoints;
+ uint16_t maxStorage;
+ uint16_t maxFunctionDefs;
+ uint16_t maxInstructionDefs;
+ uint16_t maxStackElements;
+ uint16_t maxSizeOfInstructions;
+ uint16_t maxComponentElements;
+ uint16_t maxComponentDepth;
+} table_maxp;
+
+extern caryll_RefElementInterface(table_maxp) table_iMaxp;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/meta.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/meta.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/meta.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,23 @@
+#ifndef CARYLL_INCLUDE_TABLE_META_H
+#define CARYLL_INCLUDE_TABLE_META_H
+
+#include "table-common.h"
+
+// Layer and layer vector
+typedef struct {
+ uint32_t tag;
+ sds data;
+} meta_Entry;
+extern caryll_ElementInterface(meta_Entry) meta_iEntry;
+typedef caryll_Vector(meta_Entry) meta_Entries;
+extern caryll_VectorInterface(meta_Entries, meta_Entry) meta_iEntries;
+
+// glyph-to-layers mapping and COLR table
+typedef struct {
+ uint32_t version;
+ uint32_t flags;
+ meta_Entries entries;
+} table_meta;
+extern caryll_RefElementInterface(table_meta) table_iMeta;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/name.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/name.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/name.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,17 @@
+#ifndef CARYLL_INCLUDE_TABLE_NAME_H
+#define CARYLL_INCLUDE_TABLE_NAME_H
+
+#include "table-common.h"
+
+typedef struct {
+ uint16_t platformID;
+ uint16_t encodingID;
+ uint16_t languageID;
+ uint16_t nameID;
+ sds nameString;
+} otfcc_NameRecord;
+extern caryll_ElementInterface(otfcc_NameRecord) otfcc_iNameRecord;
+typedef caryll_Vector(otfcc_NameRecord) table_name;
+extern caryll_VectorInterface(table_name, otfcc_NameRecord) table_iName;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/classdef.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/classdef.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/classdef.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,28 @@
+#ifndef CARYLL_INCLUDE_TABLE_OTL_CLASSDEF_H
+#define CARYLL_INCLUDE_TABLE_OTL_CLASSDEF_H
+#include "../table-common.h"
+#include "coverage.h"
+
+typedef struct {
+ glyphid_t numGlyphs;
+ uint32_t capacity;
+ glyphclass_t maxclass;
+ otfcc_GlyphHandle *glyphs;
+ glyphclass_t *classes;
+} otl_ClassDef;
+
+struct __otfcc_IClassDef {
+ caryll_RT(otl_ClassDef);
+ void (*push)(otl_ClassDef *cd, MOVE otfcc_GlyphHandle h, glyphclass_t cls);
+
+ otl_ClassDef *(*read)(const uint8_t *data, uint32_t tableLength, uint32_t offset);
+ otl_ClassDef *(*expand)(otl_Coverage *cov, otl_ClassDef *ocd);
+ json_value *(*dump)(const otl_ClassDef *cd);
+ otl_ClassDef *(*parse)(const json_value *_cd);
+ caryll_Buffer *(*build)(const otl_ClassDef *cd);
+ void (*shrink)(otl_ClassDef *cd);
+};
+
+extern const struct __otfcc_IClassDef otl_iClassDef;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/coverage.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/coverage.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/coverage.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,25 @@
+#ifndef CARYLL_INCLUDE_TABLE_OTL_COVERAGE_H
+#define CARYLL_INCLUDE_TABLE_OTL_COVERAGE_H
+#include "../table-common.h"
+
+typedef struct {
+ glyphid_t numGlyphs;
+ uint32_t capacity;
+ otfcc_GlyphHandle *glyphs;
+} otl_Coverage;
+
+struct __otfcc_ICoverage {
+ caryll_RT(otl_Coverage);
+ void (*clear)(otl_Coverage *coverage, uint32_t n);
+ otl_Coverage *(*read)(const uint8_t *data, uint32_t tableLength, uint32_t offset);
+ json_value *(*dump)(const otl_Coverage *coverage);
+ otl_Coverage *(*parse)(const json_value *cov);
+ caryll_Buffer *(*build)(const otl_Coverage *coverage);
+ caryll_Buffer *(*buildFormat)(const otl_Coverage *coverage, uint16_t format);
+ void (*shrink)(otl_Coverage *coverage, bool dosort);
+ void (*push)(otl_Coverage *coverage, MOVE otfcc_GlyphHandle h);
+};
+
+extern const struct __otfcc_ICoverage otl_iCoverage;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,257 @@
+#ifndef CARYLL_INCLUDE_TABLE_OTL_H
+#define CARYLL_INCLUDE_TABLE_OTL_H
+
+#include "caryll/vector.h"
+#include "table-common.h"
+#include "otl/coverage.h"
+#include "otl/classdef.h"
+
+typedef enum {
+ otl_type_unknown = 0,
+
+ otl_type_gsub_unknown = 0x10,
+ otl_type_gsub_single = 0x11,
+ otl_type_gsub_multiple = 0x12,
+ otl_type_gsub_alternate = 0x13,
+ otl_type_gsub_ligature = 0x14,
+ otl_type_gsub_context = 0x15,
+ otl_type_gsub_chaining = 0x16,
+ otl_type_gsub_extend = 0x17,
+ otl_type_gsub_reverse = 0x18,
+
+ otl_type_gpos_unknown = 0x20,
+ otl_type_gpos_single = 0x21,
+ otl_type_gpos_pair = 0x22,
+ otl_type_gpos_cursive = 0x23,
+ otl_type_gpos_markToBase = 0x24,
+ otl_type_gpos_markToLigature = 0x25,
+ otl_type_gpos_markToMark = 0x26,
+ otl_type_gpos_context = 0x27,
+ otl_type_gpos_chaining = 0x28,
+ otl_type_gpos_extend = 0x29
+} otl_LookupType;
+
+typedef union _otl_subtable otl_Subtable;
+typedef struct _otl_lookup otl_Lookup;
+
+typedef struct {
+ pos_t dx;
+ pos_t dy;
+ pos_t dWidth;
+ pos_t dHeight;
+} otl_PositionValue;
+
+// GSUB subtable formats
+typedef struct {
+ OWNING otfcc_GlyphHandle from;
+ OWNING otfcc_GlyphHandle to;
+} otl_GsubSingleEntry;
+typedef caryll_Vector(otl_GsubSingleEntry) subtable_gsub_single;
+extern caryll_VectorInterface(subtable_gsub_single, otl_GsubSingleEntry) iSubtable_gsub_single;
+
+typedef struct {
+ OWNING otfcc_GlyphHandle from;
+ OWNING otl_Coverage *to;
+} otl_GsubMultiEntry;
+typedef caryll_Vector(otl_GsubMultiEntry) subtable_gsub_multi;
+extern caryll_VectorInterface(subtable_gsub_multi, otl_GsubMultiEntry) iSubtable_gsub_multi;
+
+typedef struct {
+ OWNING otl_Coverage *from;
+ OWNING otfcc_GlyphHandle to;
+} otl_GsubLigatureEntry;
+typedef caryll_Vector(otl_GsubLigatureEntry) subtable_gsub_ligature;
+extern caryll_VectorInterface(subtable_gsub_ligature,
+ otl_GsubLigatureEntry) iSubtable_gsub_ligature;
+
+typedef enum {
+ otl_chaining_canonical =
+ 0, // The canonical form of chaining contextual substitution, one rule per subtable.
+ otl_chaining_poly = 1, // The multi-rule form, right after reading OTF. N rule per subtable.
+ otl_chaining_classified =
+ 2 // The classified intermediate form, for building TTF with compression.
+ // N rules, has classdefs, and coverage GID interpreted as class number.
+} otl_chaining_type;
+
+typedef struct {
+ tableid_t index;
+ otfcc_LookupHandle lookup;
+} otl_ChainLookupApplication;
+typedef struct {
+ tableid_t matchCount;
+ tableid_t inputBegins;
+ tableid_t inputEnds;
+ OWNING otl_Coverage **match;
+ tableid_t applyCount;
+ OWNING otl_ChainLookupApplication *apply;
+} otl_ChainingRule;
+typedef struct {
+ otl_chaining_type type;
+ union {
+ otl_ChainingRule rule; // for type = otl_chaining_canonical
+ struct { // for type = otl_chaining_poly or otl_chaining_classified
+ tableid_t rulesCount;
+ OWNING otl_ChainingRule **rules;
+ OWNING otl_ClassDef *bc;
+ OWNING otl_ClassDef *ic;
+ OWNING otl_ClassDef *fc;
+ };
+ };
+} subtable_chaining;
+extern caryll_RefElementInterface(subtable_chaining) iSubtable_chaining;
+
+typedef struct {
+ tableid_t matchCount;
+ tableid_t inputIndex;
+ OWNING otl_Coverage **match;
+ OWNING otl_Coverage *to;
+} subtable_gsub_reverse;
+extern caryll_RefElementInterface(subtable_gsub_reverse) iSubtable_gsub_reverse;
+
+// GPOS subtable formats
+typedef struct {
+ OWNING otfcc_GlyphHandle target;
+ OWNING otl_PositionValue value;
+} otl_GposSingleEntry;
+typedef caryll_Vector(otl_GposSingleEntry) subtable_gpos_single;
+extern caryll_VectorInterface(subtable_gpos_single, otl_GposSingleEntry) iSubtable_gpos_single;
+
+typedef struct {
+ bool present;
+ pos_t x;
+ pos_t y;
+} otl_Anchor;
+
+typedef struct {
+ OWNING otl_ClassDef *first;
+ OWNING otl_ClassDef *second;
+ OWNING otl_PositionValue **firstValues;
+ OWNING otl_PositionValue **secondValues;
+} subtable_gpos_pair;
+extern caryll_RefElementInterface(subtable_gpos_pair) iSubtable_gpos_pair;
+
+typedef struct {
+ OWNING otfcc_GlyphHandle target;
+ OWNING otl_Anchor enter;
+ OWNING otl_Anchor exit;
+} otl_GposCursiveEntry;
+typedef caryll_Vector(otl_GposCursiveEntry) subtable_gpos_cursive;
+extern caryll_VectorInterface(subtable_gpos_cursive, otl_GposCursiveEntry) iSubtable_gpos_cursive;
+
+typedef struct {
+ OWNING otfcc_GlyphHandle glyph;
+ glyphclass_t markClass;
+ otl_Anchor anchor;
+} otl_MarkRecord;
+typedef caryll_Vector(otl_MarkRecord) otl_MarkArray;
+extern caryll_VectorInterface(otl_MarkArray, otl_MarkRecord) otl_iMarkArray;
+
+typedef struct {
+ OWNING otfcc_GlyphHandle glyph;
+ OWNING otl_Anchor *anchors;
+} otl_BaseRecord;
+typedef caryll_Vector(otl_BaseRecord) otl_BaseArray;
+extern caryll_VectorInterface(otl_BaseArray, otl_BaseRecord) otl_iBaseArray;
+
+typedef struct {
+ glyphclass_t classCount;
+ OWNING otl_MarkArray markArray;
+ otl_BaseArray baseArray;
+} subtable_gpos_markToSingle;
+extern caryll_RefElementInterface(subtable_gpos_markToSingle) iSubtable_gpos_markToSingle;
+
+typedef struct {
+ OWNING otfcc_GlyphHandle glyph;
+ glyphid_t componentCount;
+ OWNING otl_Anchor **anchors;
+} otl_LigatureBaseRecord;
+typedef caryll_Vector(otl_LigatureBaseRecord) otl_LigatureArray;
+extern caryll_VectorInterface(otl_LigatureArray, otl_LigatureBaseRecord) otl_iLigatureArray;
+
+typedef struct {
+ glyphclass_t classCount;
+ OWNING otl_MarkArray markArray;
+ otl_LigatureArray ligArray;
+} subtable_gpos_markToLigature;
+extern caryll_RefElementInterface(subtable_gpos_markToLigature) iSubtable_gpos_markToLigature;
+
+typedef struct {
+ otl_LookupType type;
+ otl_Subtable *subtable;
+} subtable_extend;
+
+typedef union _otl_subtable {
+ subtable_gsub_single gsub_single;
+ subtable_gsub_multi gsub_multi;
+ subtable_gsub_ligature gsub_ligature;
+ subtable_chaining chaining;
+ subtable_gsub_reverse gsub_reverse;
+ subtable_gpos_single gpos_single;
+ subtable_gpos_pair gpos_pair;
+ subtable_gpos_cursive gpos_cursive;
+ subtable_gpos_markToSingle gpos_markToSingle;
+ subtable_gpos_markToLigature gpos_markToLigature;
+ subtable_extend extend;
+} otl_Subtable;
+
+typedef otl_Subtable *otl_SubtablePtr;
+typedef caryll_Vector(otl_SubtablePtr) otl_SubtableList;
+extern caryll_VectorInterfaceTypeName(otl_SubtableList) {
+ caryll_VectorInterfaceTrait(otl_SubtableList, otl_SubtablePtr);
+ void (*disposeDependent)(MODIFY otl_SubtableList *, const otl_Lookup *);
+}
+otl_iSubtableList;
+
+struct _otl_lookup {
+ sds name;
+ otl_LookupType type;
+ uint32_t _offset;
+ uint16_t flags;
+ OWNING otl_SubtableList subtables;
+};
+
+// owning lookup list
+typedef OWNING otl_Lookup *otl_LookupPtr;
+extern caryll_ElementInterface(otl_LookupPtr) otl_iLookupPtr;
+typedef caryll_Vector(otl_LookupPtr) otl_LookupList;
+extern caryll_VectorInterface(otl_LookupList, otl_LookupPtr) otl_iLookupList;
+
+// observe lookup list
+typedef OBSERVE otl_Lookup *otl_LookupRef;
+extern caryll_ElementInterface(otl_LookupRef) otl_iLookupRef;
+typedef caryll_Vector(otl_LookupRef) otl_LookupRefList;
+extern caryll_VectorInterface(otl_LookupRefList, otl_LookupRef) otl_iLookupRefList;
+
+typedef struct {
+ sds name;
+ OWNING otl_LookupRefList lookups;
+} otl_Feature;
+// owning feature list
+typedef OWNING otl_Feature *otl_FeaturePtr;
+extern caryll_ElementInterface(otl_FeaturePtr) otl_iFeaturePtr;
+typedef caryll_Vector(otl_FeaturePtr) otl_FeatureList;
+extern caryll_VectorInterface(otl_FeatureList, otl_FeaturePtr) otl_iFeatureList;
+// observe feature list
+typedef OBSERVE otl_Feature *otl_FeatureRef;
+extern caryll_ElementInterface(otl_FeatureRef) otl_iFeatureRef;
+typedef caryll_Vector(otl_FeatureRef) otl_FeatureRefList;
+extern caryll_VectorInterface(otl_FeatureRefList, otl_FeatureRef) otl_iFeatureRefList;
+
+typedef struct {
+ sds name;
+ OWNING otl_FeatureRef requiredFeature;
+ OWNING otl_FeatureRefList features;
+} otl_LanguageSystem;
+typedef otl_LanguageSystem *otl_LanguageSystemPtr;
+extern caryll_ElementInterface(otl_LanguageSystemPtr) otl_iLanguageSystem;
+typedef caryll_Vector(otl_LanguageSystemPtr) otl_LangSystemList;
+extern caryll_VectorInterface(otl_LangSystemList, otl_LanguageSystemPtr) otl_iLangSystemList;
+
+typedef struct {
+ otl_LookupList lookups;
+ otl_FeatureList features;
+ otl_LangSystemList languages;
+} table_OTL;
+extern caryll_RefElementInterface(table_OTL) table_iOTL;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/post.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/post.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/post.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,22 @@
+#ifndef CARYLL_INCLUDE_TABLE_POST_H
+#define CARYLL_INCLUDE_TABLE_POST_H
+
+#include "table-common.h"
+
+typedef struct {
+ // PostScript information
+ f16dot16 version;
+ f16dot16 italicAngle;
+ int16_t underlinePosition;
+ int16_t underlineThickness;
+ uint32_t isFixedPitch;
+ uint32_t minMemType42;
+ uint32_t maxMemType42;
+ uint32_t minMemType1;
+ uint32_t maxMemType1;
+ OWNING otfcc_GlyphOrder *post_name_map;
+} table_post;
+
+extern caryll_RefElementInterface(table_post) iTable_post;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/table-common.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/table-common.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/table-common.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,18 @@
+#ifndef CARYLL_INCLUDE_TABLE_COMMON_H
+#define CARYLL_INCLUDE_TABLE_COMMON_H
+
+#include "dep/json.h"
+
+#include "caryll/buffer.h"
+#include "caryll/ownership.h"
+#include "caryll/vector.h"
+
+#include "otfcc/handle.h"
+#include "otfcc/glyph-order.h"
+#include "otfcc/primitives.h"
+#include "otfcc/sfnt.h"
+#include "otfcc/options.h"
+
+#include "otfcc/vf/vq.h"
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vhea.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vhea.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vhea.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,28 @@
+#ifndef CARYLL_INCLUDE_TABLE_VHEA_H
+#define CARYLL_INCLUDE_TABLE_VHEA_H
+
+#include "table-common.h"
+
+typedef struct {
+ f16dot16 version;
+ int16_t ascent;
+ int16_t descent;
+ int16_t lineGap;
+ int16_t advanceHeightMax;
+ int16_t minTop;
+ int16_t minBottom;
+ int16_t yMaxExtent;
+ int16_t caretSlopeRise;
+ int16_t caretSlopeRun;
+ int16_t caretOffset;
+ int16_t dummy0;
+ int16_t dummy1;
+ int16_t dummy2;
+ int16_t dummy3;
+ int16_t metricDataFormat;
+ uint16_t numOfLongVerMetrics;
+} table_vhea;
+
+extern caryll_RefElementInterface(table_vhea) table_iVhea;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vmtx.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vmtx.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vmtx.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,21 @@
+#ifndef CARYLL_INCLUDE_TABLE_VMTX_H
+#define CARYLL_INCLUDE_TABLE_VMTX_H
+
+#include "table-common.h"
+
+#include "vhea.h"
+#include "maxp.h"
+
+typedef struct {
+ length_t advanceHeight;
+ pos_t tsb;
+} vertical_metric;
+
+typedef struct {
+ OWNING vertical_metric *metrics;
+ pos_t *topSideBearing;
+} table_vmtx;
+
+extern caryll_RefElementInterface(table_vmtx) table_iVmtx;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/axis.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/axis.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/axis.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,21 @@
+#ifndef CARYLL_VF_AXIS_H
+#define CARYLL_VF_AXIS_H
+
+#include "caryll/element.h"
+#include "caryll/vector.h"
+#include "otfcc/primitives.h"
+
+typedef struct {
+ uint32_t tag;
+ pos_t minValue;
+ pos_t defaultValue;
+ pos_t maxValue;
+ uint16_t flags;
+ uint16_t axisNameID;
+} vf_Axis;
+
+extern caryll_ValElementInterface(vf_Axis) vf_iAxis;
+typedef caryll_Vector(vf_Axis) vf_Axes;
+extern caryll_VectorInterface(vf_Axes, vf_Axis) vf_iAxes;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/region.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/region.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/region.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,34 @@
+#ifndef CARYLL_VF_REGION_H
+#define CARYLL_VF_REGION_H
+
+#include "caryll/element.h"
+#include "caryll/vector.h"
+#include "otfcc/primitives.h"
+
+#include "vv.h"
+
+typedef struct {
+ pos_t start;
+ pos_t peak;
+ pos_t end;
+} vq_AxisSpan;
+
+bool vq_AxisSpanIsOne(const vq_AxisSpan *a);
+
+typedef struct {
+ shapeid_t dimensions;
+ vq_AxisSpan spans[];
+} vq_Region;
+
+vq_Region *vq_createRegion(shapeid_t dimensions);
+void vq_deleteRegion(MOVE vq_Region *region);
+vq_Region *vq_copyRegion(const vq_Region *region);
+
+int vq_compareRegion(const vq_Region *a, const vq_Region *b);
+pos_t vq_regionGetWeight(const vq_Region *r, const VV *v);
+void vq_showRegion(const vq_Region *r);
+
+// function macros
+#define VQ_REGION_SIZE(n) (sizeof(vq_Region) + sizeof(vq_AxisSpan) * (n))
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vf.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vf.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vf.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,14 @@
+#ifndef CARYLL_VF_VF_H
+#define CARYLL_VF_VF_H
+
+// According to OT 1.8 specification, computing a final coordinate from a variable is a inner
+// product:
+// <x, delta | VS_AVAR | style >
+// We will treat the data representing a point coordinate or a metric as a Functional, while the
+// VS-AVAR
+// part as a Ket.
+
+#include "otfcc/vf/vq.h"
+#include "otfcc/vf/axis.h"
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vq.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vq.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vq.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,61 @@
+#ifndef CARYLL_VF_FUNCTIONAL_H
+#define CARYLL_VF_FUNCTIONAL_H
+
+#include "caryll/ownership.h"
+#include "caryll/element.h"
+#include "caryll/vector.h"
+#include "otfcc/primitives.h"
+#include "otfcc/handle.h"
+
+#include "region.h"
+
+typedef enum { VQ_STILL = 0, VQ_DELTA = 1 } VQSegType;
+typedef struct {
+ VQSegType type;
+ union {
+ pos_t still;
+ struct {
+ pos_t quantity;
+ bool touched;
+ const vq_Region *region; // non-owning : they are in FVAR
+ } delta;
+ } val;
+} vq_Segment;
+
+extern caryll_ElementInterfaceOf(vq_Segment) {
+ caryll_VT(vq_Segment);
+ caryll_Show(vq_Segment);
+ caryll_Ord(vq_Segment);
+ vq_Segment (*createStill)(pos_t x);
+ vq_Segment (*createDelta)(pos_t delta, vq_Region * region);
+}
+vq_iSegment;
+typedef caryll_Vector(vq_Segment) vq_SegList;
+extern caryll_VectorInterface(vq_SegList, vq_Segment) vq_iSegList;
+
+// VQ
+typedef struct {
+ pos_t kernel;
+ vq_SegList shift;
+} VQ;
+extern caryll_VectorInterfaceTypeName(VQ) {
+ caryll_VT(VQ);
+ caryll_Module(VQ, scale_t); // VQ forms a module (vector space)
+ caryll_Ord(VQ); // VQs are comparable
+ caryll_Show(VQ);
+ // Getting still
+ pos_t (*getStill)(const VQ v);
+ // Creating still
+ VQ (*createStill)(pos_t x);
+ // Being still
+ bool (*isStill)(const VQ v);
+ // Being zero
+ bool (*isZero)(const VQ v, const pos_t err);
+ // util functions
+ // point linear transform
+ VQ (*pointLinearTfm)(const VQ ax, pos_t a, const VQ x, pos_t b, const VQ y);
+ void (*addDelta)(MODIFY VQ * v, const bool touched, const vq_Region *const r,
+ const pos_t quantity);
+}
+iVQ;
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vv.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vv.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vv.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,18 @@
+#ifndef CARYLL_VF_VV_H
+#define CARYLL_VF_VV_H
+
+#include "caryll/element.h"
+#include "caryll/vector.h"
+#include "otfcc/primitives.h"
+
+extern caryll_ValElementInterface(pos_t) vq_iPosT;
+typedef caryll_Vector(pos_t) VV;
+extern caryll_VectorInterfaceTypeName(VV) {
+ caryll_VectorInterfaceTrait(VV, pos_t);
+ // Monoid instances
+ VV (*neutral)(tableid_t dimensions);
+}
+iVV;
+// extern caryll_VectorInterface(VV, pos_t) iVV;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,132 @@
+#include "bkblock.h"
+
+static void bkblock_acells(bk_Block *b, uint32_t len) {
+ if (len <= b->length + b->free) {
+ // We have enough space
+ b->free -= len - b->length;
+ b->length = len;
+ } else {
+ // allocate space
+ b->length = len;
+ b->free = (len >> 1) & 0xFFFFFF;
+ RESIZE(b->cells, b->length + b->free);
+ }
+}
+bool bk_cellIsPointer(bk_Cell *cell) {
+ return cell->t >= p16;
+}
+
+static bk_Cell *bkblock_grow(bk_Block *b, uint32_t len) {
+ uint32_t olen = b->length;
+ bkblock_acells(b, olen + len);
+ return &(b->cells[olen]);
+}
+
+bk_Block *_bkblock_init() {
+ bk_Block *b;
+ NEW(b);
+ bkblock_acells(b, 0);
+ return b;
+}
+
+static void bkblock_pushint(bk_Block *b, bk_CellType type, uint32_t x) {
+ bk_Cell *cell = bkblock_grow(b, 1);
+ cell->t = type;
+ cell->z = x;
+}
+static void bkblock_pushptr(bk_Block *b, bk_CellType type, bk_Block *p) {
+ bk_Cell *cell = bkblock_grow(b, 1);
+ cell->t = type;
+ cell->p = p;
+}
+
+static void vbkpushitems(bk_Block *b, bk_CellType type0, va_list ap) {
+ bk_CellType curtype = type0;
+ while (curtype) {
+ if (curtype == bkcopy || curtype == bkembed) {
+ bk_Block *par = va_arg(ap, bk_Block *);
+ if (par && par->cells) {
+ for (uint32_t j = 0; j < par->length; j++) {
+ if (bk_cellIsPointer(par->cells + j)) {
+ bkblock_pushptr(b, par->cells[j].t, par->cells[j].p);
+ } else {
+ bkblock_pushint(b, par->cells[j].t, par->cells[j].z);
+ }
+ }
+ }
+ if (curtype == bkembed && par) {
+ FREE(par->cells);
+ FREE(par);
+ }
+ } else if (curtype < p16) {
+ uint32_t par = va_arg(ap, int);
+ bkblock_pushint(b, curtype, par);
+ } else {
+ bk_Block *par = va_arg(ap, bk_Block *);
+ bkblock_pushptr(b, curtype, par);
+ }
+ curtype = va_arg(ap, int);
+ }
+}
+
+bk_Block *bk_new_Block(int type0, ...) {
+ va_list ap;
+ va_start(ap, type0);
+ bk_Block *b = _bkblock_init();
+ vbkpushitems(b, type0, ap);
+ va_end(ap);
+ return b;
+}
+
+bk_Block *bk_push(bk_Block *b, int type0, ...) {
+ va_list ap;
+ va_start(ap, type0);
+ vbkpushitems(b, type0, ap);
+ va_end(ap);
+ return b;
+}
+
+bk_Block *bk_newBlockFromStringLen(size_t len, const char *str) {
+ if (!str) return NULL;
+ bk_Block *b = bk_new_Block(bkover);
+ for (size_t j = 0; j < len; j++) {
+ bkblock_pushint(b, b8, str[j]);
+ }
+ return b;
+}
+
+bk_Block *bk_newBlockFromBuffer(MOVE caryll_Buffer *buf) {
+ if (!buf) return NULL;
+ bk_Block *b = bk_new_Block(bkover);
+ for (size_t j = 0; j < buf->size; j++) {
+ bkblock_pushint(b, b8, buf->data[j]);
+ }
+ buffree(buf);
+ return b;
+}
+bk_Block *bk_newBlockFromBufferCopy(OBSERVE caryll_Buffer *buf) {
+ if (!buf) return NULL;
+ bk_Block *b = bk_new_Block(bkover);
+ for (size_t j = 0; j < buf->size; j++) {
+ bkblock_pushint(b, b8, buf->data[j]);
+ }
+ return b;
+}
+
+void bk_printBlock(bk_Block *b) {
+ fprintf(stderr, "Block size %08x\n", (uint32_t)b->length);
+ fprintf(stderr, "------------------\n");
+ for (uint32_t j = 0; j < b->length; j++) {
+ if (bk_cellIsPointer(b->cells + j)) {
+ if (b->cells[j].p) {
+ fprintf(stderr, " %3d %p[%d]\n", b->cells[j].t, b->cells[j].p,
+ b->cells[j].p->_index);
+ } else {
+ fprintf(stderr, " %3d [NULL]\n", b->cells[j].t);
+ }
+ } else {
+ fprintf(stderr, " %3d %d\n", b->cells[j].t, b->cells[j].z);
+ }
+ }
+ fprintf(stderr, "------------------\n");
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,55 @@
+#ifndef CARYLL_BK_BLOCK_H
+#define CARYLL_BK_BLOCK_H
+
+#include <stdint.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <limits.h>
+#include "caryll/ownership.h"
+#include "support/otfcc-alloc.h"
+#include "caryll/buffer.h"
+
+struct __caryll_bkblock;
+typedef enum {
+ bkover = 0, // nothing
+ b8 = 1, // byte
+ b16 = 2, // short
+ b32 = 3, // long
+ p16 = 0x10, // 16-bit offset, p = pointer to block
+ p32 = 0x11, // 32-bit offset, p = pointer to block
+ sp16 = 0x80, // 16-bit offset, p = pointer to block, marked as compact
+ sp32 = 0x81, // 32-bit offset, p = pointer to block, marked as compact
+ bkcopy = 0xFE, // Embed another block
+ bkembed = 0xFF // Embed another block
+} bk_CellType;
+typedef enum { VISIT_WHITE, VISIT_GRAY, VISIT_BLACK } bk_cell_visit_state;
+
+typedef struct {
+ bk_CellType t;
+ union {
+ uint32_t z;
+ struct __caryll_bkblock *p;
+ };
+} bk_Cell;
+
+typedef struct __caryll_bkblock {
+ bk_cell_visit_state _visitstate;
+ uint32_t _index;
+ uint32_t _height;
+ uint32_t _depth;
+ uint32_t length;
+ uint32_t free;
+ bk_Cell *cells;
+} bk_Block;
+
+bk_Block *_bkblock_init(void);
+bk_Block *bk_new_Block(int type0, ...);
+bk_Block *bk_push(bk_Block *b, int type0, ...);
+bk_Block *bk_newBlockFromStringLen(size_t len, const char *str);
+bk_Block *bk_newBlockFromBuffer(MOVE caryll_Buffer *buf);
+bk_Block *bk_newBlockFromBufferCopy(OBSERVE caryll_Buffer *buf);
+bool bk_cellIsPointer(bk_Cell *cell);
+void bk_printBlock(bk_Block *b);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,410 @@
+#include "bkgraph.h"
+
+static bk_GraphNode *_bkgraph_grow(bk_Graph *f) {
+ if (f->free) {
+ f->length++;
+ f->free--;
+ } else {
+ f->length = f->length + 1;
+ f->free = (f->length >> 1) & 0xFFFFFF;
+ RESIZE(f->entries, f->length + f->free);
+ }
+ return &(f->entries[f->length - 1]);
+}
+
+static uint32_t dfs_insert_cells(bk_Block *b, bk_Graph *f, uint32_t *order) {
+ if (!b || b->_visitstate == VISIT_GRAY) return 0;
+ if (b->_visitstate == VISIT_BLACK) return b->_height;
+ b->_visitstate = VISIT_GRAY;
+ uint32_t height = 0;
+ for (uint32_t j = 0; j < b->length; j++) {
+ bk_Cell *cell = &(b->cells[j]);
+ if (bk_cellIsPointer(cell) && cell->p) {
+ uint32_t thatHeight = dfs_insert_cells(cell->p, f, order);
+ if (thatHeight + 1 > height) height = thatHeight + 1;
+ }
+ }
+ bk_GraphNode *e = _bkgraph_grow(f);
+ e->alias = 0;
+ e->block = b;
+ *order += 1;
+ e->order = *order;
+ e->height = b->_height = height;
+ b->_visitstate = VISIT_BLACK;
+ return height;
+}
+
+static int _by_height(const void *_a, const void *_b) {
+ const bk_GraphNode *a = _a;
+ const bk_GraphNode *b = _b;
+ return a->height == b->height ? a->order - b->order : b->height - a->height;
+}
+
+static int _by_order(const void *_a, const void *_b) {
+ const bk_GraphNode *a = _a;
+ const bk_GraphNode *b = _b;
+ return a->block && b->block && a->block->_visitstate != b->block->_visitstate // Visited first
+ ? b->block->_visitstate - a->block->_visitstate
+ : a->block && b->block && a->block->_depth != b->block->_depth // By depth
+ ? a->block->_depth - b->block->_depth
+ : b->order - a->order; // By order
+}
+
+bk_Graph *bk_newGraphFromRootBlock(bk_Block *b) {
+ bk_Graph *forest;
+ NEW(forest);
+ uint32_t tsOrder = 0;
+ dfs_insert_cells(b, forest, &tsOrder);
+ qsort(forest->entries, forest->length, sizeof(bk_GraphNode), _by_height);
+ for (uint32_t j = 0; j < forest->length; j++) {
+ forest->entries[j].block->_index = j;
+ forest->entries[j].alias = j;
+ }
+ return forest;
+}
+
+void bk_delete_Graph(bk_Graph *f) {
+ if (!f || !f->entries) return;
+ for (uint32_t j = 0; j < f->length; j++) {
+ bk_Block *b = f->entries[j].block;
+ if (b && b->cells) FREE(b->cells);
+ FREE(b);
+ }
+ FREE(f->entries);
+ FREE(f);
+}
+
+static uint32_t gethash(bk_Block *b) {
+ uint32_t h = 5381;
+ for (uint32_t j = 0; j < b->length; j++) {
+ h = ((h << 5) + h) + b->cells[j].t;
+ h = ((h << 5) + h);
+ switch (b->cells[j].t) {
+ case b8:
+ case b16:
+ case b32:
+ h += b->cells[j].z;
+ break;
+ case p16:
+ case p32:
+ case sp16:
+ case sp32:
+ if (b->cells[j].p) { h += b->cells[j].p->_index; }
+ break;
+ default:
+ break;
+ }
+ }
+ return h;
+}
+
+static bool compareblock(bk_Block *a, bk_Block *b) {
+ if (!a && !b) return true;
+ if (!a || !b) return false;
+ if (a->length != b->length) return false;
+ for (uint32_t j = 0; j < a->length; j++) {
+ if (a->cells[j].t != b->cells[j].t) return false;
+ switch (a->cells[j].t) {
+ case b8:
+ case b16:
+ case b32:
+ if (a->cells[j].z != b->cells[j].z) return false;
+ break;
+ case p16:
+ case p32:
+ case sp16:
+ case sp32:
+ if (a->cells[j].p != b->cells[j].p) return false;
+ break;
+ default:
+ break;
+ }
+ }
+ return true;
+}
+static bool compareEntry(bk_GraphNode *a, bk_GraphNode *b) {
+ if (a->hash != b->hash) return false;
+ return compareblock(a->block, b->block);
+}
+
+static void replaceptr(bk_Graph *f, bk_Block *b) {
+ for (uint32_t j = 0; j < b->length; j++) {
+ switch (b->cells[j].t) {
+ case p16:
+ case p32:
+ case sp16:
+ case sp32:
+ if (b->cells[j].p) {
+ uint32_t index = b->cells[j].p->_index;
+ while (f->entries[index].alias != index) {
+ index = f->entries[index].alias;
+ }
+ b->cells[j].p = f->entries[index].block;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void bk_minimizeGraph(bk_Graph *f) {
+ uint32_t rear = (uint32_t)(f->length - 1);
+ while (rear > 0) {
+ uint32_t front = rear;
+ while (f->entries[front].height == f->entries[rear].height && front > 0) {
+ front--;
+ }
+ front++;
+ for (uint32_t j = front; j <= rear; j++) {
+ f->entries[j].hash = gethash(f->entries[j].block);
+ }
+ for (uint32_t j = front; j <= rear; j++) {
+ bk_GraphNode *a = &(f->entries[j]);
+ if (a->alias == j) {
+ for (uint32_t k = j + 1; k <= rear; k++) {
+ bk_GraphNode *b = &(f->entries[k]);
+ if (b->alias == k && compareEntry(a, b)) { b->alias = j; }
+ }
+ }
+ }
+ // replace pointers with aliased
+ for (uint32_t j = 0; j < front; j++) {
+ replaceptr(f, f->entries[j].block);
+ }
+ rear = front - 1;
+ }
+}
+
+static size_t otfcc_bkblock_size(bk_Block *b) {
+ size_t size = 0;
+ for (uint32_t j = 0; j < b->length; j++)
+ switch (b->cells[j].t) {
+ case b8:
+ size += 1;
+ break;
+ case b16:
+ case p16:
+ case sp16:
+ size += 2;
+ break;
+ case b32:
+ case p32:
+ case sp32:
+ size += 4;
+ break;
+ default:
+ break;
+ }
+ return size;
+}
+
+static uint32_t getoffset(size_t *offsets, bk_Block *ref, bk_Block *target, uint8_t bits) {
+ size_t offref = offsets[ref->_index];
+ size_t offtgt = offsets[target->_index];
+ /*
+ if (offtgt < offref || (offtgt - offref) >> bits) {
+ fprintf(stderr, "[otfcc-fea] Warning : Unable to fit offset %d into %d bits.\n",
+ (int32_t)(offtgt - offref), bits);
+ }
+ */
+ return (uint32_t)(offtgt - offref);
+}
+static int64_t getoffset_untangle(size_t *offsets, bk_Block *ref, bk_Block *target) {
+ size_t offref = offsets[ref->_index];
+ size_t offtgt = offsets[target->_index];
+ return (int64_t)(offtgt - offref);
+}
+static void escalate_sppointers(bk_Block *b, bk_Graph *f, uint32_t *order, uint32_t depth) {
+ if (!b) return;
+ for (uint32_t j = 0; j < b->length; j++) {
+ bk_Cell *cell = &(b->cells[j]);
+ if (bk_cellIsPointer(cell) && cell->p && cell->t >= sp16) {
+ escalate_sppointers(cell->p, f, order, depth);
+ }
+ }
+ b->_depth = depth;
+ *order += 1;
+ f->entries[b->_index].order = *order;
+}
+static void dfs_attract_cells(bk_Block *b, bk_Graph *f, uint32_t *order, uint32_t depth) {
+ if (!b) return;
+ if (b->_visitstate != VISIT_WHITE) {
+ if (b->_depth < depth) { b->_depth = depth; }
+ return;
+ }
+ b->_visitstate = VISIT_GRAY;
+ for (uint32_t j = b->length; j-- > 0;) {
+ bk_Cell *cell = &(b->cells[j]);
+ if (bk_cellIsPointer(cell) && cell->p) { dfs_attract_cells(cell->p, f, order, depth + 1); }
+ }
+ *order += 1;
+ f->entries[b->_index].order = *order;
+ escalate_sppointers(b, f, order, depth);
+ b->_visitstate = VISIT_BLACK;
+}
+
+static void attract_bkgraph(bk_Graph *f) {
+ // Clear the visit state of all blocks
+ for (uint32_t j = 0; j < f->length; j++) {
+ f->entries[j].block->_visitstate = VISIT_WHITE;
+ f->entries[j].order = 0;
+ f->entries[j].block->_index = j;
+ f->entries[j].block->_depth = 0;
+ }
+ uint32_t order = 0;
+ dfs_attract_cells(f->entries[0].block, f, &order, 0);
+ qsort(f->entries, f->length, sizeof(bk_GraphNode), _by_order);
+ for (uint32_t j = 0; j < f->length; j++) {
+ f->entries[j].block->_index = j;
+ }
+}
+
+static bool try_untabgle_block(bk_Graph *f, bk_Block *b, size_t *offsets, uint16_t passes) {
+ bool didCopy = false;
+ for (uint32_t j = 0; j < b->length; j++) {
+ switch (b->cells[j].t) {
+ case p16:
+ case sp16:
+ if (b->cells[j].p) {
+ int64_t offset = getoffset_untangle(offsets, b, b->cells[j].p);
+ if (offset < 0 || offset > 0xFFFF) {
+ bk_GraphNode *e = _bkgraph_grow(f);
+ e->order = 0;
+ e->alias = 0;
+ e->block = bk_new_Block(bkcopy, b->cells[j].p, bkover);
+ b->cells[j].t = sp16;
+ b->cells[j].p = e->block;
+ didCopy = true;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ return didCopy;
+}
+
+static bool try_untangle(bk_Graph *f, uint16_t passes) {
+ size_t *offsets;
+ NEW(offsets, f->length + 1);
+ offsets[0] = 0;
+ for (uint32_t j = 0; j < f->length; j++) {
+ if (f->entries[j].block->_visitstate == VISIT_BLACK) {
+ offsets[j + 1] = offsets[j] + otfcc_bkblock_size(f->entries[j].block);
+ } else {
+ offsets[j + 1] = offsets[j];
+ }
+ }
+ uint32_t totalBlocks = f->length;
+ bool didUntangle = false;
+ for (uint32_t j = 0; j < totalBlocks; j++) {
+ if (f->entries[j].block->_visitstate == VISIT_BLACK) {
+ bool didCopy = try_untabgle_block(f, f->entries[j].block, offsets, passes);
+ didUntangle = didUntangle || didCopy;
+ }
+ }
+ FREE(offsets);
+ return didUntangle;
+}
+
+static void otfcc_build_bkblock(caryll_Buffer *buf, bk_Block *b, size_t *offsets) {
+ for (uint32_t j = 0; j < b->length; j++) {
+ switch (b->cells[j].t) {
+ case b8:
+ bufwrite8(buf, b->cells[j].z);
+ break;
+ case b16:
+ bufwrite16b(buf, b->cells[j].z);
+ break;
+ case b32:
+ bufwrite32b(buf, b->cells[j].z);
+ break;
+ case p16:
+ case sp16:
+ if (b->cells[j].p) {
+ bufwrite16b(buf, getoffset(offsets, b, b->cells[j].p, 16));
+ } else {
+ bufwrite16b(buf, 0);
+ }
+ break;
+ case p32:
+ case sp32:
+ if (b->cells[j].p) {
+ bufwrite32b(buf, getoffset(offsets, b, b->cells[j].p, 32));
+ } else {
+ bufwrite32b(buf, 0);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+caryll_Buffer *bk_build_Graph(bk_Graph *f) {
+ caryll_Buffer *buf = bufnew();
+ size_t *offsets;
+ NEW(offsets, f->length + 1);
+
+ offsets[0] = 0;
+ for (uint32_t j = 0; j < f->length; j++) {
+ if (f->entries[j].block->_visitstate == VISIT_BLACK) {
+ offsets[j + 1] = offsets[j] + otfcc_bkblock_size(f->entries[j].block);
+ } else {
+ offsets[j + 1] = offsets[j];
+ }
+ }
+ for (uint32_t j = 0; j < f->length; j++) {
+ if (f->entries[j].block->_visitstate == VISIT_BLACK) {
+ otfcc_build_bkblock(buf, f->entries[j].block, offsets);
+ }
+ }
+ FREE(offsets);
+ return buf;
+}
+
+size_t bk_estimateSizeOfGraph(bk_Graph *f) {
+ size_t *offsets;
+ NEW(offsets, f->length + 1);
+
+ offsets[0] = 0;
+ for (uint32_t j = 0; j < f->length; j++) {
+ if (f->entries[j].block->_visitstate == VISIT_BLACK) {
+ offsets[j + 1] = offsets[j] + otfcc_bkblock_size(f->entries[j].block);
+ } else {
+ offsets[j + 1] = offsets[j];
+ }
+ }
+ size_t estimatedSize = offsets[f->length];
+ FREE(offsets);
+ return estimatedSize;
+}
+
+void bk_untangleGraph(/*BORROW*/ bk_Graph *f) {
+ uint16_t passes = 0;
+ bool tangled = false;
+ attract_bkgraph(f);
+ do {
+ tangled = try_untangle(f, passes);
+ if (tangled) { attract_bkgraph(f); }
+ passes++;
+ } while (tangled && passes < 16);
+}
+
+caryll_Buffer *bk_build_Block(/*MOVE*/ bk_Block *root) {
+ bk_Graph *f = bk_newGraphFromRootBlock(root);
+ bk_minimizeGraph(f);
+ bk_untangleGraph(f);
+ caryll_Buffer *buf = bk_build_Graph(f);
+ bk_delete_Graph(f);
+ return buf;
+}
+caryll_Buffer *bk_build_Block_noMinimize(/*MOVE*/ bk_Block *root) {
+ bk_Graph *f = bk_newGraphFromRootBlock(root);
+ bk_untangleGraph(f);
+ caryll_Buffer *buf = bk_build_Graph(f);
+ bk_delete_Graph(f);
+ return buf;
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,35 @@
+#ifndef CARYLL_BK_BKGRAPH_H
+#define CARYLL_BK_BKGRAPH_H
+
+#include <stdint.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include "caryll/buffer.h"
+
+#include "bkblock.h"
+
+typedef struct {
+ uint32_t alias;
+ uint32_t order;
+ uint32_t height;
+ uint32_t hash;
+ bk_Block *block;
+} bk_GraphNode;
+
+typedef struct {
+ uint32_t length;
+ uint32_t free;
+ bk_GraphNode *entries;
+} bk_Graph;
+
+bk_Graph *bk_newGraphFromRootBlock(bk_Block *b);
+void bk_delete_Graph(/*MOVE*/ bk_Graph *f);
+void bk_minimizeGraph(/*BORROW*/ bk_Graph *f);
+void bk_untangleGraph(/*BORROW*/ bk_Graph *f);
+caryll_Buffer *bk_build_Graph(/*BORROW*/ bk_Graph *f);
+caryll_Buffer *bk_build_Block(/*MOVE*/ bk_Block *root);
+caryll_Buffer *bk_build_Block_noMinimize(/*MOVE*/ bk_Block *root);
+size_t bk_estimateSizeOfGraph(bk_Graph *f);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,532 @@
+#include "consolidate.h"
+
+#include "support/util.h"
+#include "table/all.h"
+
+#include "otl/gsub-single.h"
+#include "otl/gsub-multi.h"
+#include "otl/gsub-ligature.h"
+#include "otl/gsub-reverse.h"
+#include "otl/gpos-single.h"
+#include "otl/gpos-pair.h"
+#include "otl/gpos-cursive.h"
+#include "otl/chaining.h"
+#include "otl/mark.h"
+#include "otl/GDEF.h"
+
+// Consolidation
+// Replace name entries in json to ids and do some check
+static int by_stem_pos(const glyf_PostscriptStemDef *a, const glyf_PostscriptStemDef *b) {
+ if (a->position == b->position) {
+ return (int)a->map - (int)b->map;
+ } else if (a->position > b->position) {
+ return 1;
+ } else {
+ return -1;
+ }
+}
+static int by_mask_pointindex(const glyf_PostscriptHintMask *a, const glyf_PostscriptHintMask *b) {
+ return a->contoursBefore == b->contoursBefore ? a->pointsBefore - b->pointsBefore
+ : a->contoursBefore - b->contoursBefore;
+}
+
+static void consolidateGlyphContours(glyf_Glyph *g, const otfcc_Options *options) {
+ shapeid_t nContoursConsolidated = 0;
+ shapeid_t skip = 0;
+ for (shapeid_t j = 0; j < g->contours.length; j++) {
+ if (g->contours.items[j].length) {
+ g->contours.items[j - skip] = g->contours.items[j];
+ nContoursConsolidated += 1;
+ } else {
+ glyf_iContourList.disposeItem(&g->contours, j);
+ logWarning("[Consolidate] Removed empty contour #%d in glyph %s.\n", j, g->name);
+ skip += 1;
+ }
+ }
+ g->contours.length = nContoursConsolidated;
+}
+static void consolidateGlyphReferences(glyf_Glyph *g, otfcc_Font *font,
+ const otfcc_Options *options) {
+ shapeid_t nReferencesConsolidated = 0;
+ shapeid_t skip = 0;
+ for (shapeid_t j = 0; j < g->references.length; j++) {
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &g->references.items[j].glyph)) {
+ logWarning("[Consolidate] Ignored absent glyph component reference /%s within /%s.\n",
+ g->references.items[j].glyph.name, g->name);
+ glyf_iReferenceList.disposeItem(&(g->references), j);
+ skip += 1;
+ } else {
+ g->references.items[j - skip] = g->references.items[j];
+ nReferencesConsolidated += 1;
+ }
+ }
+ g->references.length = nReferencesConsolidated;
+}
+static void consolidateGlyphHints(glyf_Glyph *g, const otfcc_Options *options) {
+ // sort stems
+ if (g->stemH.length) {
+ for (shapeid_t j = 0; j < g->stemH.length; j++) {
+ g->stemH.items[j].map = j;
+ }
+ glyf_iStemDefList.sort(&g->stemH, by_stem_pos);
+ }
+ if (g->stemV.length) {
+ for (shapeid_t j = 0; j < g->stemV.length; j++) {
+ g->stemV.items[j].map = j;
+ }
+ glyf_iStemDefList.sort(&g->stemV, by_stem_pos);
+ }
+ shapeid_t *hmap;
+ NEW(hmap, g->stemH.length);
+ shapeid_t *vmap;
+ NEW(vmap, g->stemV.length);
+ for (shapeid_t j = 0; j < g->stemH.length; j++) {
+ hmap[g->stemH.items[j].map] = j;
+ }
+ for (shapeid_t j = 0; j < g->stemV.length; j++) {
+ vmap[g->stemV.items[j].map] = j;
+ }
+ // sort masks
+ if (g->hintMasks.length) {
+ glyf_iMaskList.sort(&g->hintMasks, by_mask_pointindex);
+ for (shapeid_t j = 0; j < g->hintMasks.length; j++) {
+ glyf_PostscriptHintMask oldmask = g->hintMasks.items[j]; // copy
+ for (shapeid_t k = 0; k < g->stemH.length; k++) {
+ g->hintMasks.items[j].maskH[k] = oldmask.maskH[hmap[k]];
+ }
+ for (shapeid_t k = 0; k < g->stemV.length; k++) {
+ g->hintMasks.items[j].maskV[k] = oldmask.maskV[vmap[k]];
+ }
+ }
+ }
+ if (g->contourMasks.length) {
+ glyf_iMaskList.sort(&g->contourMasks, by_mask_pointindex);
+ for (shapeid_t j = 0; j < g->contourMasks.length; j++) {
+ glyf_PostscriptHintMask oldmask = g->contourMasks.items[j]; // copy
+ for (shapeid_t k = 0; k < g->stemH.length; k++) {
+ g->contourMasks.items[j].maskH[k] = oldmask.maskH[hmap[k]];
+ }
+ for (shapeid_t k = 0; k < g->stemV.length; k++) {
+ g->contourMasks.items[j].maskV[k] = oldmask.maskV[vmap[k]];
+ }
+ }
+ }
+ FREE(hmap);
+ FREE(vmap);
+}
+static void consolidateFDSelect(fd_handle *h, table_CFF *cff, const otfcc_Options *options,
+ const sds gname) {
+ if (!cff || !cff->fdArray || !cff->fdArrayCount) return;
+ // Consolidate fdSelect
+ if (h->state == HANDLE_STATE_INDEX) {
+ if (h->index >= cff->fdArrayCount) { h->index = 0; }
+ Handle.consolidateTo(h, h->index, cff->fdArray[h->index]->fontName);
+ } else if (h->name) {
+ bool found = false;
+ for (tableid_t j = 0; j < cff->fdArrayCount; j++) {
+ if (strcmp(h->name, cff->fdArray[j]->fontName) == 0) {
+ found = true;
+ Handle.consolidateTo(h, j, cff->fdArray[j]->fontName);
+ break;
+ }
+ }
+ if (!found) {
+ logWarning("[Consolidate] CID Subfont %s is not defined. (in glyph /%s).\n", h->name,
+ gname);
+ Handle.dispose(h);
+ }
+ } else if (h->name) {
+ Handle.dispose(h);
+ }
+}
+static void consolidateGlyph(glyf_Glyph *g, otfcc_Font *font, const otfcc_Options *options) {
+ consolidateGlyphContours(g, options);
+ consolidateGlyphReferences(g, font, options);
+ consolidateGlyphHints(g, options);
+ consolidateFDSelect(&g->fdSelect, font->CFF_, options, g->name);
+}
+
+// Anchored reference consolidation
+bool consolidateAnchorRef(table_glyf *table, glyf_ComponentReference *gr,
+ glyf_ComponentReference *rr, const otfcc_Options *options);
+static bool getPointCoordinates(table_glyf *table, glyf_ComponentReference *gr, shapeid_t n,
+ shapeid_t *stated, VQ *x, VQ *y, const otfcc_Options *options) {
+ glyphid_t j = gr->glyph.index;
+ glyf_Glyph *g = table->items[j];
+ for (shapeid_t c = 0; c < g->contours.length; c++) {
+ for (shapeid_t pj = 0; pj < g->contours.items[c].length; pj++) {
+ if (*stated == n) {
+ glyf_Point *p = &(g->contours.items[c].items[pj]);
+ iVQ.replace(x, iVQ.pointLinearTfm(gr->x, gr->a, p->x, gr->b, p->y));
+ iVQ.replace(y, iVQ.pointLinearTfm(gr->y, gr->c, p->x, gr->d, p->y));
+ return true;
+ }
+ *stated += 1;
+ }
+ }
+ for (shapeid_t r = 0; r < g->references.length; r++) {
+ glyf_ComponentReference *rr = &(g->references.items[r]);
+
+ consolidateAnchorRef(table, gr, rr, options);
+
+ // composite affine transformations
+ glyf_ComponentReference ref = glyf_iComponentReference.empty();
+ ref.glyph = Handle.fromIndex(g->references.items[r].glyph.index);
+ ref.a = gr->a * rr->a + rr->b * gr->c;
+ ref.b = rr->a * gr->b + rr->b * gr->d;
+ ref.c = gr->a * rr->c + gr->c * rr->d;
+ ref.d = gr->b * rr->c + rr->d * gr->d;
+ iVQ.replace(&ref.x, iVQ.pointLinearTfm(rr->x, rr->a, gr->x, rr->b, gr->y));
+ iVQ.replace(&ref.y, iVQ.pointLinearTfm(rr->y, rr->c, gr->x, rr->d, gr->y));
+
+ bool success = getPointCoordinates(table, &ref, n, stated, x, y, options);
+ glyf_iComponentReference.dispose(&ref);
+ if (success) return true;
+ }
+ return false;
+}
+
+bool consolidateAnchorRef(table_glyf *table, glyf_ComponentReference *gr,
+ glyf_ComponentReference *rr, const otfcc_Options *options) {
+ if (rr->isAnchored == REF_ANCHOR_CONSOLIDATED || rr->isAnchored == REF_XY) return true;
+ if (rr->isAnchored == REF_ANCHOR_CONSOLIDATING_ANCHOR ||
+ rr->isAnchored == REF_ANCHOR_CONSOLIDATING_XY) {
+ logWarning(
+ "Found circular reference of out-of-range point reference in anchored reference.");
+ rr->isAnchored = REF_XY;
+ return false;
+ }
+ if (rr->isAnchored == REF_ANCHOR_ANCHOR) {
+ rr->isAnchored = REF_ANCHOR_CONSOLIDATING_ANCHOR;
+ } else {
+ rr->isAnchored = REF_ANCHOR_CONSOLIDATING_XY;
+ }
+ VQ innerX = iVQ.neutral(), outerX = iVQ.neutral();
+ VQ innerY = iVQ.neutral(), outerY = iVQ.neutral();
+ shapeid_t innerCounter = 0, outerCounter = 0;
+
+ glyf_ComponentReference rr1 = glyf_iComponentReference.empty();
+ rr1.glyph = Handle.fromIndex(rr->glyph.index);
+
+ bool s1 = getPointCoordinates(table, gr, rr->outer, &outerCounter, &outerX, &outerY, options);
+ bool s2 = getPointCoordinates(table, &rr1, rr->inner, &innerCounter, &innerX, &innerY, options);
+ if (!s1) { logWarning("Failed to access point %d in outer glyph.", rr->outer); }
+ if (!s2) {
+ logWarning("Failed to access point %d in reference to %s.", rr->outer, rr->glyph.name);
+ }
+
+ VQ rrx = iVQ.pointLinearTfm(outerX, -rr->a, innerX, -rr->b, innerY);
+ VQ rry = iVQ.pointLinearTfm(outerY, -rr->c, innerX, -rr->d, innerY);
+
+ if (rr->isAnchored == REF_ANCHOR_CONSOLIDATING_ANCHOR) {
+ iVQ.replace(&rr->x, rrx);
+ iVQ.replace(&rr->y, rry);
+ rr->isAnchored = REF_ANCHOR_CONSOLIDATED;
+ } else {
+ if (fabs(iVQ.getStill(rr->x) - iVQ.getStill(rrx)) > 0.5 &&
+ fabs(iVQ.getStill(rr->y) - iVQ.getStill(rry)) > 0.5) {
+ logWarning("Anchored reference to %s does not match its X/Y offset data.",
+ rr->glyph.name);
+ }
+ rr->isAnchored = REF_ANCHOR_CONSOLIDATED;
+ iVQ.dispose(&rrx), iVQ.dispose(&rry);
+ }
+ glyf_iComponentReference.dispose(&rr1);
+ iVQ.dispose(&innerX), iVQ.dispose(&innerY);
+ iVQ.dispose(&outerX), iVQ.dispose(&outerY);
+ return false;
+}
+
+static void consolidateGlyf(otfcc_Font *font, const otfcc_Options *options) {
+ if (!font->glyph_order || !font->glyf) return;
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ if (font->glyf->items[j]) {
+ consolidateGlyph(font->glyf->items[j], font, options);
+ } else {
+ font->glyf->items[j] = otfcc_newGlyf_glyph();
+ }
+ }
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ glyf_Glyph *g = font->glyf->items[j];
+ loggedStep("%s", g->name) {
+ glyf_ComponentReference gr = glyf_iComponentReference.empty();
+ gr.glyph = Handle.fromIndex(j);
+
+ for (shapeid_t r = 0; r < g->references.length; r++) {
+ glyf_ComponentReference *rr = &(g->references.items[r]);
+ consolidateAnchorRef(font->glyf, &gr, rr, options);
+ }
+ glyf_iComponentReference.dispose(&gr);
+ }
+ }
+}
+
+static void consolidateCmap(otfcc_Font *font, const otfcc_Options *options) {
+ if (font->glyph_order && font->cmap) {
+ cmap_Entry *item;
+ foreach_hash(item, font->cmap->unicodes) {
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &item->glyph)) {
+ logWarning("[Consolidate] Ignored mapping U+%04X to non-existent glyph /%s.\n",
+ item->unicode, item->glyph.name);
+ Handle.dispose(&item->glyph);
+ }
+ }
+ }
+ if (font->glyph_order && font->cmap) {
+ cmap_UVS_Entry *item;
+ foreach_hash(item, font->cmap->uvs) {
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &item->glyph)) {
+ logWarning("[Consolidate] Ignored UVS mapping [U+%04X U+%04X] to non-existent "
+ "glyph /%s.\n",
+ item->key.unicode, item->key.selector, item->glyph.name);
+ Handle.dispose(&item->glyph);
+ }
+ }
+ }
+}
+
+typedef bool (*otl_consolidation_function)(otfcc_Font *, table_OTL *, otl_Subtable *,
+ const otfcc_Options *);
+typedef void (*subtable_remover)(otl_Subtable *);
+#define LOOKUP_CONSOLIDATOR(llt, fn, fndel) \
+ __declare_otl_consolidation(llt, fn, (subtable_remover)fndel, font, table, lookup, options);
+
+static void __declare_otl_consolidation(otl_LookupType type, otl_consolidation_function fn,
+ subtable_remover fndel, otfcc_Font *font, table_OTL *table,
+ otl_Lookup *lookup, const otfcc_Options *options) {
+ if (!lookup || !lookup->subtables.length || lookup->type != type) return;
+ loggedStep("%s", lookup->name) {
+ for (tableid_t j = 0; j < lookup->subtables.length; j++) {
+ if (!lookup->subtables.items[j]) {
+ logWarning("[Consolidate] Ignored empty subtable %d of lookup %s.\n", j,
+ lookup->name);
+ continue;
+ }
+ bool subtableRemoved;
+ // loggedStep("Subtable %d", j) {
+ subtableRemoved = fn(font, table, lookup->subtables.items[j], options);
+ //}
+ if (subtableRemoved) {
+ fndel(lookup->subtables.items[j]);
+ lookup->subtables.items[j] = NULL;
+ logWarning("[Consolidate] Ignored empty subtable %d of lookup %s.\n", j,
+ lookup->name);
+ }
+ }
+ tableid_t k = 0;
+ for (tableid_t j = 0; j < lookup->subtables.length; j++) {
+ if (lookup->subtables.items[j]) {
+ lookup->subtables.items[k++] = lookup->subtables.items[j];
+ }
+ }
+ lookup->subtables.length = k;
+ if (!k) {
+ logWarning("[Consolidate] Lookup %s is empty and will be removed.\n", lookup->name);
+ }
+ }
+}
+
+static void otfcc_consolidate_lookup(otfcc_Font *font, table_OTL *table, otl_Lookup *lookup,
+ const otfcc_Options *options) {
+ LOOKUP_CONSOLIDATOR(otl_type_gsub_single, consolidate_gsub_single, iSubtable_gsub_single.free);
+ LOOKUP_CONSOLIDATOR(otl_type_gsub_multiple, consolidate_gsub_multi, iSubtable_gsub_multi.free);
+ LOOKUP_CONSOLIDATOR(otl_type_gsub_alternate, consolidate_gsub_alternative,
+ iSubtable_gsub_multi.free);
+ LOOKUP_CONSOLIDATOR(otl_type_gsub_ligature, consolidate_gsub_ligature,
+ iSubtable_gsub_ligature.free);
+ LOOKUP_CONSOLIDATOR(otl_type_gsub_chaining, consolidate_chaining, iSubtable_chaining.free);
+ LOOKUP_CONSOLIDATOR(otl_type_gsub_reverse, consolidate_gsub_reverse,
+ iSubtable_gsub_reverse.free);
+ LOOKUP_CONSOLIDATOR(otl_type_gpos_single, consolidate_gpos_single, iSubtable_gpos_single.free);
+ LOOKUP_CONSOLIDATOR(otl_type_gpos_pair, consolidate_gpos_pair, iSubtable_gpos_pair.free);
+ LOOKUP_CONSOLIDATOR(otl_type_gpos_cursive, consolidate_gpos_cursive,
+ iSubtable_gpos_cursive.free);
+ LOOKUP_CONSOLIDATOR(otl_type_gpos_chaining, consolidate_chaining, iSubtable_chaining.free);
+ LOOKUP_CONSOLIDATOR(otl_type_gpos_markToBase, consolidate_mark_to_single,
+ iSubtable_gpos_markToSingle.free);
+ LOOKUP_CONSOLIDATOR(otl_type_gpos_markToMark, consolidate_mark_to_single,
+ iSubtable_gpos_markToSingle.free);
+ LOOKUP_CONSOLIDATOR(otl_type_gpos_markToLigature, consolidate_mark_to_ligature,
+ iSubtable_gpos_markToLigature.free);
+}
+
+static bool lookupRefIsNotEmpty(const otl_LookupRef *rLut, void *env) {
+ return rLut && *rLut && (*rLut)->subtables.length > 0;
+}
+static bool featureRefIsNotEmpty(const otl_FeatureRef *rFeat, void *env) {
+ return rFeat && *rFeat && (*rFeat)->lookups.length > 0;
+}
+static bool lookupIsNotEmpty(const otl_LookupPtr *rLut, void *env) {
+ return rLut && *rLut && (*rLut)->subtables.length > 0;
+}
+static bool featureIsNotEmpty(const otl_FeaturePtr *rFeat, void *env) {
+ return rFeat && *rFeat && (*rFeat)->lookups.length > 0;
+}
+
+static void consolidateOTLTable(otfcc_Font *font, table_OTL *table, const otfcc_Options *options) {
+ if (!font->glyph_order || !table) return;
+ do {
+ tableid_t featN = table->features.length;
+ tableid_t lutN = table->lookups.length;
+
+ // Perform consolidation
+ for (tableid_t j = 0; j < table->lookups.length; j++) {
+ otfcc_consolidate_lookup(font, table, table->lookups.items[j], options);
+ }
+ // remove empty features
+ for (tableid_t j = 0; j < table->features.length; j++) {
+ otl_Feature *feature = table->features.items[j];
+ otl_iLookupRefList.filterEnv(&feature->lookups, lookupRefIsNotEmpty, NULL);
+ }
+ // remove empty lookups
+ for (tableid_t j = 0; j < table->languages.length; j++) {
+ otl_LanguageSystem *lang = table->languages.items[j];
+ otl_iFeatureRefList.filterEnv(&lang->features, featureRefIsNotEmpty, NULL);
+ }
+ otl_iLookupList.filterEnv(&table->lookups, lookupIsNotEmpty, NULL);
+ otl_iFeatureList.filterEnv(&table->features, featureIsNotEmpty, NULL);
+
+ tableid_t featN1 = table->features.length;
+ tableid_t lutN1 = table->lookups.length;
+ if (featN1 >= featN && lutN1 >= lutN) break;
+ } while (true);
+}
+
+static void consolidateOTL(otfcc_Font *font, const otfcc_Options *options) {
+ loggedStep("GSUB") {
+ consolidateOTLTable(font, font->GSUB, options);
+ }
+ loggedStep("GPOS") {
+ consolidateOTLTable(font, font->GPOS, options);
+ }
+ loggedStep("GDEF") {
+ consolidate_GDEF(font, font->GDEF, options);
+ }
+}
+
+static void consolidateCOLR(otfcc_Font *font, const otfcc_Options *options) {
+ if (!font || !font->COLR || !font->glyph_order) return;
+ table_COLR *consolidated = table_iCOLR.create();
+ foreach (colr_Mapping *mapping, *(font->COLR)) {
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &mapping->glyph)) {
+ logWarning("[Consolidate] Ignored missing glyph of /%s", mapping->glyph.name);
+ continue;
+ }
+ colr_Mapping m;
+ Handle.copy(&m.glyph, &mapping->glyph);
+ colr_iLayerList.init(&m.layers);
+ foreach (colr_Layer *layer, mapping->layers) {
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &layer->glyph)) {
+ logWarning("[Consolidate] Ignored missing glyph of /%s", layer->glyph.name);
+ continue;
+ }
+ colr_Layer layer1;
+ colr_iLayer.copy(&layer1, layer);
+ colr_iLayerList.push(&m.layers, layer1);
+ }
+ if (mapping->layers.length) {
+ table_iCOLR.push(consolidated, m);
+ } else {
+ logWarning("[Consolidate] COLR decomposition for /%s is empth", mapping->glyph.name);
+ colr_iMapping.dispose(&m);
+ }
+ }
+ table_iCOLR.free(font->COLR);
+ font->COLR = consolidated;
+}
+
+static int compareTSIEntry(const tsi_Entry *a, const tsi_Entry *b) {
+ if (a->type != b->type) return a->type - b->type;
+ return a->glyph.index - b->glyph.index;
+}
+
+static void consolidateTSI(otfcc_Font *font, table_TSI **_tsi, const otfcc_Options *options) {
+ table_TSI *tsi = *_tsi;
+ if (!font || !font->glyf || !tsi || !font->glyph_order) return;
+ table_TSI *consolidated = table_iTSI.create();
+ sds *gidEntries;
+ NEW_CLEAN_N(gidEntries, font->glyf->length);
+
+ foreach (tsi_Entry *entry, *tsi) {
+ if (entry->type == TSI_GLYPH) {
+ if (GlyphOrder.consolidateHandle(font->glyph_order, &entry->glyph)) {
+ if (gidEntries[entry->glyph.index]) sdsfree(gidEntries[entry->glyph.index]);
+ gidEntries[entry->glyph.index] = entry->content;
+ entry->content = NULL;
+ } else {
+ logWarning("[Consolidate] Ignored missing glyph of /%s", entry->glyph.name);
+ }
+ } else {
+ tsi_Entry e;
+ tsi_iEntry.copy(&e, entry);
+ table_iTSI.push(consolidated, e);
+ }
+ }
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ tsi_Entry e;
+ e.type = TSI_GLYPH;
+ e.glyph = Handle.fromIndex(j);
+ GlyphOrder.consolidateHandle(font->glyph_order, &e.glyph);
+ e.content = gidEntries[j] ? gidEntries[j] : sdsempty();
+ table_iTSI.push(consolidated, e);
+ }
+ table_iTSI.free(tsi);
+ FREE(gidEntries);
+ table_iTSI.sort(consolidated, compareTSIEntry);
+ *_tsi = consolidated;
+}
+
+void otfcc_consolidateFont(otfcc_Font *font, const otfcc_Options *options) {
+ // In case we don’t have a glyph order, make one.
+ if (font->glyf && !font->glyph_order) {
+ otfcc_GlyphOrder *go = GlyphOrder.create();
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ sds name;
+ sds glyfName = font->glyf->items[j]->name;
+ if (glyfName) {
+ name = sdsdup(glyfName);
+ } else {
+ name = sdscatprintf(sdsempty(), "$$gid%d", j);
+ font->glyf->items[j]->name = sdsdup(name);
+ }
+ if (!GlyphOrder.setByName(go, name, j)) {
+ logWarning("[Consolidate] Glyph name %s is already in use.", name);
+ uint32_t suffix = 2;
+ bool success = false;
+ do {
+ sds newname = sdscatfmt(sdsempty(), "%s_%u", name, suffix);
+ success = GlyphOrder.setByName(go, newname, j);
+ if (!success) {
+ sdsfree(newname);
+ suffix += 1;
+ } else {
+ logWarning("[Consolidate] Glyph %s is renamed into %s.", name, newname);
+ sdsfree(font->glyf->items[j]->name);
+ font->glyf->items[j]->name = sdsdup(newname);
+ }
+ } while (!success);
+ sdsfree(name);
+ }
+ }
+ font->glyph_order = go;
+ }
+ loggedStep("glyf") {
+ consolidateGlyf(font, options);
+ }
+ loggedStep("cmap") {
+ consolidateCmap(font, options);
+ }
+ if (font->glyf) consolidateOTL(font, options);
+ loggedStep("COLR") {
+ consolidateCOLR(font, options);
+ }
+ loggedStep("TSI_01") {
+ consolidateTSI(font, &font->TSI_01, options);
+ }
+ loggedStep("TSI_23") {
+ consolidateTSI(font, &font->TSI_23, options);
+ }
+ loggedStep("TSI5") {
+ fontop_consolidateClassDef(font, font->TSI5, options);
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,8 @@
+#ifndef CARYLL_CONSOLIDATE_H
+#define CARYLL_CONSOLIDATE_H
+
+#include "otfcc/font.h"
+
+extern void otfcc_consolidateFont(otfcc_Font *font, const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,67 @@
+#include "GDEF.h"
+
+typedef struct {
+ int gid;
+ sds name;
+ otl_CaretValueList carets;
+ UT_hash_handle hh;
+} GDEF_ligcaret_hash;
+static int by_gid(GDEF_ligcaret_hash *a, GDEF_ligcaret_hash *b) {
+ return a->gid - b->gid;
+}
+void consolidate_GDEF(otfcc_Font *font, table_GDEF *gdef, const otfcc_Options *options) {
+ if (!font || !font->glyph_order || !gdef) return;
+ if (gdef->glyphClassDef) {
+ fontop_consolidateClassDef(font, gdef->glyphClassDef, options);
+ otl_iClassDef.shrink(gdef->glyphClassDef);
+ if (!gdef->glyphClassDef->numGlyphs) {
+ otl_iClassDef.free(gdef->glyphClassDef);
+ gdef->glyphClassDef = NULL;
+ }
+ }
+ if (gdef->markAttachClassDef) {
+ fontop_consolidateClassDef(font, gdef->markAttachClassDef, options);
+ otl_iClassDef.shrink(gdef->markAttachClassDef);
+ if (!gdef->markAttachClassDef->numGlyphs) {
+ otl_iClassDef.free(gdef->markAttachClassDef);
+ gdef->markAttachClassDef = NULL;
+ }
+ }
+ if (gdef->ligCarets.length) {
+ GDEF_ligcaret_hash *h = NULL;
+ for (glyphid_t j = 0; j < gdef->ligCarets.length; j++) {
+ GDEF_ligcaret_hash *s;
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &gdef->ligCarets.items[j].glyph)) {
+ continue;
+ }
+ int gid = gdef->ligCarets.items[j].glyph.index;
+ sds gname = sdsdup(gdef->ligCarets.items[j].glyph.name);
+ if (gname) {
+ HASH_FIND_INT(h, &gid, s);
+ if (!s) {
+ NEW(s);
+ s->gid = gid;
+ s->name = gname;
+ otl_iCaretValueList.move(&s->carets, &gdef->ligCarets.items[j].carets);
+ HASH_ADD_INT(h, gid, s);
+ } else {
+ logWarning("[Consolidate] Detected caret value double-mapping about glyph %s",
+ gname);
+ }
+ }
+ }
+ HASH_SORT(h, by_gid);
+ otl_iLigCaretTable.clear(&gdef->ligCarets);
+ GDEF_ligcaret_hash *s, *tmp;
+ HASH_ITER(hh, h, s, tmp) {
+ otl_CaretValueRecord v = {
+ .glyph = Handle.fromConsolidated(s->gid, s->name),
+ };
+ otl_iCaretValueList.move(&v.carets, &s->carets);
+ otl_iLigCaretTable.push(&gdef->ligCarets, v);
+ sdsfree(s->name);
+ HASH_DEL(h, s);
+ FREE(s);
+ }
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,7 @@
+#ifndef CARYLL_FONTOPS_OTL_GDEF_H
+#define CARYLL_FONTOPS_OTL_GDEF_H
+#include "common.h"
+
+void consolidate_GDEF(otfcc_Font *font, table_GDEF *gdef, const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,55 @@
+#include "chaining.h"
+
+bool consolidate_chaining(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options) {
+ subtable_chaining *subtable = &(_subtable->chaining);
+ if (subtable->type) {
+ logWarning("[Consolidate] Ignoring non-canonical chaining subtable.");
+ return false;
+ }
+ otl_ChainingRule *rule = &(subtable->rule);
+ bool possible = true;
+ for (tableid_t j = 0; j < rule->matchCount; j++) {
+ fontop_consolidateCoverage(font, rule->match[j], options);
+ Coverage.shrink(rule->match[j], true);
+ possible = possible && (rule->match[j]->numGlyphs > 0);
+ }
+ if (rule->inputBegins > rule->matchCount) rule->inputBegins = rule->matchCount;
+ if (rule->inputEnds > rule->matchCount) rule->inputEnds = rule->matchCount;
+ for (tableid_t j = 0; j < rule->applyCount; j++) {
+ bool foundLookup = false;
+ lookup_handle *h = &(rule->apply[j].lookup);
+ if (h->name) {
+ for (tableid_t k = 0; k < table->lookups.length; k++) {
+ if (!table->lookups.items[k]) continue;
+ if (!table->lookups.items[k]->subtables.length) continue;
+ if (strcmp(table->lookups.items[k]->name, h->name) != 0) continue;
+ foundLookup = true;
+ Handle.consolidateTo(h, k, table->lookups.items[k]->name);
+ }
+ if (!foundLookup && rule->apply[j].lookup.name) {
+ logWarning("[Consolidate] Quoting an invalid lookup %s. This lookup application is "
+ "ignored.",
+ rule->apply[j].lookup.name);
+ Handle.dispose(&rule->apply[j].lookup);
+ }
+ } else if (h->state == HANDLE_STATE_INDEX) {
+ if (h->index >= table->lookups.length) {
+ logWarning("[Consolidate] Quoting an invalid lookup #%d.", h->index);
+ h->index = 0;
+ }
+ Handle.consolidateTo(h, h->index, table->lookups.items[h->index]->name);
+ }
+ }
+ // If a rule is designed to have no lookup application, it may be a ignoration
+ // otfcc will keep them.
+ if (rule->applyCount) {
+ tableid_t k = 0;
+ for (tableid_t j = 0; j < rule->applyCount; j++) {
+ if (rule->apply[j].lookup.name) { rule->apply[k++] = rule->apply[j]; }
+ }
+ rule->applyCount = k;
+ if (!rule->applyCount) { return true; }
+ }
+ return !possible;
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,7 @@
+#ifndef CARYLL_FONTOPS_OTL_CHAINING_H
+#define CARYLL_FONTOPS_OTL_CHAINING_H
+#include "common.h"
+
+bool consolidate_chaining(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable, const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,24 @@
+#include "common.h"
+
+void fontop_consolidateCoverage(otfcc_Font *font, otl_Coverage *coverage, const otfcc_Options *options) {
+ if (!coverage) return;
+ for (glyphid_t j = 0; j < coverage->numGlyphs; j++) {
+ glyph_handle *h = &(coverage->glyphs[j]);
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, h)) {
+ logWarning("[Consolidate] Ignored missing glyph /%s.\n", h->name);
+ Handle.dispose(h);
+ }
+ }
+}
+
+void fontop_consolidateClassDef(otfcc_Font *font, otl_ClassDef *cd, const otfcc_Options *options) {
+ if (!cd) return;
+ for (glyphid_t j = 0; j < cd->numGlyphs; j++) {
+ glyph_handle *h = &(cd->glyphs[j]);
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, h)) {
+ logWarning("[Consolidate] Ignored missing glyph /%s.\n", h->name);
+ Handle.dispose(h);
+ cd->classes[j] = 0;
+ }
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,10 @@
+#ifndef CARYLL_FONTOPS_OTL_COMMON_H
+#define CARYLL_FONTOPS_OTL_COMMON_H
+
+#include "otfcc/font.h"
+#include "table/otl/private.h"
+
+void fontop_consolidateCoverage(otfcc_Font *font, otl_Coverage *coverage, const otfcc_Options *options);
+void fontop_consolidateClassDef(otfcc_Font *font, otl_ClassDef *cd, const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,54 @@
+#include "gpos-cursive.h"
+
+typedef struct {
+ int fromid;
+ sds fromname;
+ otl_Anchor enter;
+ otl_Anchor exit;
+ UT_hash_handle hh;
+} gpos_cursive_hash;
+static int gpos_cursive_by_from_id(gpos_cursive_hash *a, gpos_cursive_hash *b) {
+ return a->fromid - b->fromid;
+}
+bool consolidate_gpos_cursive(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options) {
+ subtable_gpos_cursive *subtable = &(_subtable->gpos_cursive);
+ gpos_cursive_hash *h = NULL;
+ for (glyphid_t k = 0; k < subtable->length; k++) {
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &subtable->items[k].target)) {
+ logWarning("[Consolidate] Ignored missing glyph /%s.\n", subtable->items[k].target.name);
+ continue;
+ }
+
+ gpos_cursive_hash *s;
+ int fromid = subtable->items[k].target.index;
+ HASH_FIND_INT(h, &fromid, s);
+ if (s) {
+ logWarning("[Consolidate] Double-mapping a glyph in a cursive positioning /%s.\n",
+ subtable->items[k].target.name);
+ } else {
+ NEW(s);
+ s->fromid = subtable->items[k].target.index;
+ s->fromname = sdsdup(subtable->items[k].target.name);
+ s->enter = subtable->items[k].enter;
+ s->exit = subtable->items[k].exit;
+ HASH_ADD_INT(h, fromid, s);
+ }
+ }
+
+ HASH_SORT(h, gpos_cursive_by_from_id);
+ iSubtable_gpos_cursive.clear(subtable);
+
+ gpos_cursive_hash *s, *tmp;
+ HASH_ITER(hh, h, s, tmp) {
+ iSubtable_gpos_cursive.push(
+ subtable, ((otl_GposCursiveEntry){
+ .target = Handle.fromConsolidated(s->fromid, s->fromname), .enter = s->enter, .exit = s->exit,
+ }));
+ sdsfree(s->fromname);
+ HASH_DEL(h, s);
+ FREE(s);
+ }
+
+ return (subtable->length == 0);
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,8 @@
+#ifndef CARYLL_FONTOPS_OTL_GPOS_CURSIVE_H
+#define CARYLL_FONTOPS_OTL_GPOS_CURSIVE_H
+#include "common.h"
+
+bool consolidate_gpos_cursive(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,10 @@
+#include "gpos-pair.h"
+
+bool consolidate_gpos_pair(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable, const otfcc_Options *options) {
+ subtable_gpos_pair *subtable = &(_subtable->gpos_pair);
+ fontop_consolidateClassDef(font, subtable->first, options);
+ fontop_consolidateClassDef(font, subtable->second, options);
+ ClassDef.shrink(subtable->first);
+ ClassDef.shrink(subtable->second);
+ return (subtable->first->numGlyphs == 0);
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,7 @@
+#ifndef CARYLL_FONTOPS_OTL_GPOS_PAIR_H
+#define CARYLL_FONTOPS_OTL_GPOS_PAIR_H
+#include "common.h"
+
+bool consolidate_gpos_pair(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable, const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,53 @@
+#include "gpos-single.h"
+
+typedef struct {
+ int fromid;
+ sds fromname;
+ otl_PositionValue v;
+ UT_hash_handle hh;
+} gpos_single_hash;
+static int gpos_by_from_id(gpos_single_hash *a, gpos_single_hash *b) {
+ return a->fromid - b->fromid;
+}
+
+bool consolidate_gpos_single(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options) {
+ subtable_gpos_single *subtable = &(_subtable->gpos_single);
+ gpos_single_hash *h = NULL;
+ for (glyphid_t k = 0; k < subtable->length; k++) {
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &subtable->items[k].target)) {
+ logWarning("[Consolidate] Ignored missing glyph /%s.\n",
+ subtable->items[k].target.name);
+ continue;
+ }
+ gpos_single_hash *s;
+ int fromid = subtable->items[k].target.index;
+ HASH_FIND_INT(h, &fromid, s);
+ if (s) {
+ logWarning("[Consolidate] Detected glyph double-mapping about /%s.\n",
+ subtable->items[k].target.name);
+ } else {
+ NEW(s);
+ s->fromid = subtable->items[k].target.index;
+ s->fromname = sdsdup(subtable->items[k].target.name);
+ s->v = subtable->items[k].value;
+ HASH_ADD_INT(h, fromid, s);
+ }
+ }
+
+ HASH_SORT(h, gpos_by_from_id);
+ iSubtable_gpos_single.clear(subtable);
+
+ gpos_single_hash *s, *tmp;
+ HASH_ITER(hh, h, s, tmp) {
+ iSubtable_gpos_single.push(
+ subtable, ((otl_GposSingleEntry){
+ .target = Handle.fromConsolidated(s->fromid, s->fromname), .value = s->v,
+ }));
+ sdsfree(s->fromname);
+ HASH_DEL(h, s);
+ FREE(s);
+ }
+
+ return (subtable->length == 0);
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,8 @@
+#ifndef CARYLL_FONTOPS_OTL_GPOS_SINGLE_H
+#define CARYLL_FONTOPS_OTL_GPOS_SINGLE_H
+#include "common.h"
+
+bool consolidate_gpos_single(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,29 @@
+#include "gsub-ligature.h"
+
+bool consolidate_gsub_ligature(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options) {
+ subtable_gsub_ligature *subtable = &(_subtable->gsub_ligature);
+ subtable_gsub_ligature nt;
+ iSubtable_gsub_ligature.init(&nt);
+ for (glyphid_t k = 0; k < subtable->length; k++) {
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &subtable->items[k].to)) {
+ logWarning("[Consolidate] Ignored missing glyph /%s.\n", subtable->items[k].to.name);
+ continue;
+ }
+ fontop_consolidateCoverage(font, subtable->items[k].from, options);
+ Coverage.shrink(subtable->items[k].from, false);
+ if (!subtable->items[k].from->numGlyphs) {
+ logWarning("[Consolidate] Ignoring empty ligature substitution to "
+ "glyph /%s.\n",
+ subtable->items[k].to.name);
+ continue;
+ }
+ iSubtable_gsub_ligature.push(
+ &nt, ((otl_GsubLigatureEntry){
+ .from = subtable->items[k].from, .to = Handle.dup(subtable->items[k].to),
+ }));
+ subtable->items[k].from = NULL;
+ }
+ iSubtable_gsub_ligature.replace(subtable, nt);
+ return (subtable->length == 0);
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,8 @@
+#ifndef CARYLL_FONTOPS_OTL_GSUB_LIGATURE_H
+#define CARYLL_FONTOPS_OTL_GSUB_LIGATURE_H
+#include "common.h"
+
+bool consolidate_gsub_ligature(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,64 @@
+#include "gsub-multi.h"
+
+typedef struct {
+ int fromid;
+ sds fromname;
+ otl_Coverage *to;
+ UT_hash_handle hh;
+} gsub_multi_hash;
+static int by_from_id_multi(gsub_multi_hash *a, gsub_multi_hash *b) {
+ return a->fromid - b->fromid;
+}
+
+bool consolidate_gsub_multi(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options) {
+ subtable_gsub_multi *subtable = &(_subtable->gsub_multi);
+ gsub_multi_hash *h = NULL;
+
+ for (glyphid_t k = 0; k < subtable->length; k++) {
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &subtable->items[k].from)) {
+ logWarning("[Consolidate] Ignored missing glyph /%s.\n", subtable->items[k].from.name);
+ continue;
+ }
+ fontop_consolidateCoverage(font, subtable->items[k].to, options);
+ Coverage.shrink(subtable->items[k].to, false);
+ if (!subtable->items[k].to->numGlyphs) {
+ logWarning("[Consolidate] Ignoring empty one-to-many / alternative substitution for "
+ "glyph /%s.\n",
+ subtable->items[k].from.name);
+ continue;
+ }
+
+ gsub_multi_hash *s;
+ int fromid = subtable->items[k].from.index;
+ HASH_FIND_INT(h, &fromid, s);
+ if (!s) {
+ NEW(s);
+ s->fromid = subtable->items[k].from.index;
+ s->fromname = sdsdup(subtable->items[k].from.name);
+ s->to = subtable->items[k].to;
+ subtable->items[k].to = NULL; // Transfer ownership
+ HASH_ADD_INT(h, fromid, s);
+ }
+ }
+ HASH_SORT(h, by_from_id_multi);
+ iSubtable_gsub_multi.clear(subtable);
+ {
+ gsub_multi_hash *s, *tmp;
+ HASH_ITER(hh, h, s, tmp) {
+ iSubtable_gsub_multi.push(
+ subtable, ((otl_GsubMultiEntry){
+ .from = Handle.fromConsolidated(s->fromid, s->fromname), .to = s->to,
+ }));
+ sdsfree(s->fromname);
+ HASH_DEL(h, s);
+ FREE(s);
+ }
+ }
+ return (subtable->length == 0);
+}
+
+bool consolidate_gsub_alternative(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options) {
+ return consolidate_gsub_multi(font, table, _subtable, options);
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,10 @@
+#ifndef CARYLL_FONTOPS_OTL_GSUB_MULTI_H
+#define CARYLL_FONTOPS_OTL_GSUB_MULTI_H
+#include "common.h"
+
+bool consolidate_gsub_multi(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options);
+bool consolidate_gsub_alternative(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,57 @@
+#include "gsub-reverse.h"
+
+typedef struct {
+ int fromid;
+ sds fromname;
+ int toid;
+ sds toname;
+ UT_hash_handle hh;
+} gsub_single_map_hash;
+static int by_from_id(gsub_single_map_hash *a, gsub_single_map_hash *b) {
+ return a->fromid - b->fromid;
+}
+
+bool consolidate_gsub_reverse(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options) {
+ subtable_gsub_reverse *subtable = &(_subtable->gsub_reverse);
+ for (tableid_t j = 0; j < subtable->matchCount; j++) {
+ fontop_consolidateCoverage(font, subtable->match[j], options);
+ }
+ fontop_consolidateCoverage(font, subtable->to, options);
+ if (subtable->inputIndex >= subtable->matchCount) { subtable->inputIndex = subtable->matchCount - 1; }
+ gsub_single_map_hash *h = NULL;
+ otl_Coverage *from = subtable->match[subtable->inputIndex];
+ for (glyphid_t k = 0; k < from->numGlyphs && k < subtable->to->numGlyphs; k++) {
+ gsub_single_map_hash *s;
+ int fromid = from->glyphs[k].index;
+ HASH_FIND_INT(h, &fromid, s);
+ if (s) {
+ logWarning("[Consolidate] Double-mapping a glyph in a reverse substitution /%s.\n", from->glyphs[k].name);
+ } else {
+ NEW(s);
+ s->fromid = from->glyphs[k].index;
+ s->toid = subtable->to->glyphs[k].index;
+ s->fromname = from->glyphs[k].name;
+ s->toname = subtable->to->glyphs[k].name;
+ HASH_ADD_INT(h, fromid, s);
+ }
+ }
+ HASH_SORT(h, by_from_id);
+ if (HASH_COUNT(h) != from->numGlyphs || HASH_COUNT(h) != subtable->to->numGlyphs) {
+ logWarning("[Consolidate] In this reverse subsitution lookup, some mappings are ignored.\n");
+ }
+ from->numGlyphs = HASH_COUNT(h);
+ subtable->to->numGlyphs = HASH_COUNT(h);
+ {
+ gsub_single_map_hash *s, *tmp;
+ glyphid_t j = 0;
+ HASH_ITER(hh, h, s, tmp) {
+ from->glyphs[j] = Handle.fromConsolidated(s->fromid, s->fromname);
+ subtable->to->glyphs[j] = Handle.fromConsolidated(s->toid, s->toname);
+ j++;
+ HASH_DEL(h, s);
+ FREE(s);
+ }
+ }
+ return false;
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,8 @@
+#ifndef CARYLL_FONTOPS_OTL_GSUB_REVERSE_H
+#define CARYLL_FONTOPS_OTL_GSUB_REVERSE_H
+#include "common.h"
+
+bool consolidate_gsub_reverse(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,56 @@
+#include "gsub-single.h"
+
+typedef struct {
+ int fromid;
+ sds fromname;
+ int toid;
+ sds toname;
+ UT_hash_handle hh;
+} gsub_single_map_hash;
+static int by_from_id(gsub_single_map_hash *a, gsub_single_map_hash *b) {
+ return a->fromid - b->fromid;
+}
+bool consolidate_gsub_single(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options) {
+ subtable_gsub_single *subtable = &(_subtable->gsub_single);
+ gsub_single_map_hash *h = NULL;
+ for (size_t k = 0; k < subtable->length; k++) {
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &subtable->items[k].from)) {
+ logWarning("[Consolidate] Ignored missing glyph /%s.\n", subtable->items[k].from.name);
+ continue;
+ }
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &subtable->items[k].to)) {
+ logWarning("[Consolidate] Ignored missing glyph /%s.\n", subtable->items[k].to.name);
+ continue;
+ }
+ gsub_single_map_hash *s;
+ int fromid = subtable->items[k].from.index;
+ HASH_FIND_INT(h, &fromid, s);
+ if (s) {
+ logWarning("[Consolidate] Double-mapping a glyph in a single substitution /%s.\n",
+ subtable->items[k].from.name);
+ } else {
+ NEW(s);
+ s->fromid = subtable->items[k].from.index;
+ s->toid = subtable->items[k].to.index;
+ s->fromname = sdsdup(subtable->items[k].from.name);
+ s->toname = sdsdup(subtable->items[k].to.name);
+ HASH_ADD_INT(h, fromid, s);
+ }
+ }
+ HASH_SORT(h, by_from_id);
+ if (HASH_COUNT(h) != subtable->length) { logWarning("[Consolidate] In this lookup, some mappings are ignored.\n"); }
+
+ iSubtable_gsub_single.clear(subtable);
+ gsub_single_map_hash *s, *tmp;
+ HASH_ITER(hh, h, s, tmp) {
+ iSubtable_gsub_single.push(subtable,
+ ((otl_GsubSingleEntry){.from = Handle.fromConsolidated(s->fromid, s->fromname),
+ .to = Handle.fromConsolidated(s->toid, s->toname)}));
+ sdsfree(s->fromname);
+ sdsfree(s->toname);
+ HASH_DEL(h, s);
+ FREE(s);
+ }
+ return (subtable->length == 0);
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,8 @@
+#ifndef CARYLL_FONTOPS_OTL_GSUB_SINGLE_H
+#define CARYLL_FONTOPS_OTL_GSUB_SINGLE_H
+#include "common.h"
+
+bool consolidate_gsub_single(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,166 @@
+#include "mark.h"
+
+typedef struct {
+ int gid;
+ sds name;
+ glyphclass_t markClass;
+ otl_Anchor anchor;
+ UT_hash_handle hh;
+} mark_hash;
+static int mark_by_gid(mark_hash *a, mark_hash *b) {
+ return a->gid - b->gid;
+}
+typedef struct {
+ int gid;
+ sds name;
+ otl_Anchor *anchors;
+ UT_hash_handle hh;
+} base_hash;
+static int base_by_gid(base_hash *a, base_hash *b) {
+ return a->gid - b->gid;
+}
+typedef struct {
+ int gid;
+ sds name;
+ glyphid_t componentCount;
+ otl_Anchor **anchors;
+ UT_hash_handle hh;
+} lig_hash;
+static int lig_by_gid(lig_hash *a, lig_hash *b) {
+ return a->gid - b->gid;
+}
+
+static void consolidateMarkArray(otfcc_Font *font, table_OTL *table, const otfcc_Options *options,
+ otl_MarkArray *markArray, glyphclass_t classCount) {
+ mark_hash *hm = NULL;
+ for (glyphid_t k = 0; k < markArray->length; k++) {
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &markArray->items[k].glyph)) {
+ logWarning("[Consolidate] Ignored unknown glyph name %s.",
+ markArray->items[k].glyph.name);
+ continue;
+ }
+ mark_hash *s = NULL;
+ int gid = markArray->items[k].glyph.index;
+ HASH_FIND_INT(hm, &gid, s);
+ if (!s && markArray->items[k].anchor.present &&
+ markArray->items[k].markClass < classCount) {
+ NEW(s);
+ s->gid = markArray->items[k].glyph.index;
+ s->name = sdsdup(markArray->items[k].glyph.name);
+ s->markClass = markArray->items[k].markClass;
+ s->anchor = markArray->items[k].anchor;
+ HASH_ADD_INT(hm, gid, s);
+ } else {
+ logWarning("[Consolidate] Ignored invalid or double-mapping mark definition for /%s.",
+ markArray->items[k].glyph.name);
+ }
+ }
+ HASH_SORT(hm, mark_by_gid);
+ otl_iMarkArray.clear(markArray);
+ mark_hash *s, *tmp;
+ HASH_ITER(hh, hm, s, tmp) {
+ otl_iMarkArray.push(markArray, ((otl_MarkRecord){
+ .glyph = Handle.fromConsolidated(s->gid, s->name),
+ .markClass = s->markClass,
+ .anchor = s->anchor,
+ }));
+ sdsfree(s->name);
+ HASH_DEL(hm, s);
+ FREE(s);
+ }
+}
+
+static void consolidateBaseArray(otfcc_Font *font, table_OTL *table, const otfcc_Options *options,
+ otl_BaseArray *baseArray) {
+ // consolidate bases
+ base_hash *hm = NULL;
+ for (glyphid_t k = 0; k < baseArray->length; k++) {
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &baseArray->items[k].glyph)) {
+ logWarning("[Consolidate] Ignored unknown glyph name %s.",
+ baseArray->items[k].glyph.name);
+ continue;
+ }
+ base_hash *s = NULL;
+ int gid = baseArray->items[k].glyph.index;
+ HASH_FIND_INT(hm, &gid, s);
+ if (!s) {
+ NEW(s);
+ s->gid = baseArray->items[k].glyph.index;
+ s->name = sdsdup(baseArray->items[k].glyph.name);
+ s->anchors = baseArray->items[k].anchors;
+ baseArray->items[k].anchors = NULL; // Transfer ownership
+ HASH_ADD_INT(hm, gid, s);
+ } else {
+ logWarning("[Consolidate] Ignored anchor double-definition for /%s.",
+ baseArray->items[k].glyph.name);
+ }
+ }
+ HASH_SORT(hm, base_by_gid);
+ otl_iBaseArray.clear(baseArray);
+ base_hash *s, *tmp;
+ HASH_ITER(hh, hm, s, tmp) {
+ otl_iBaseArray.push(
+ baseArray, ((otl_BaseRecord){
+ .glyph = Handle.fromConsolidated(s->gid, s->name), .anchors = s->anchors,
+ }));
+ sdsfree(s->name);
+ HASH_DEL(hm, s);
+ FREE(s);
+ }
+}
+
+static void consolidateLigArray(otfcc_Font *font, table_OTL *table, const otfcc_Options *options,
+ otl_LigatureArray *ligArray) {
+ lig_hash *hm = NULL;
+ for (glyphid_t k = 0; k < ligArray->length; k++) {
+ if (!GlyphOrder.consolidateHandle(font->glyph_order, &ligArray->items[k].glyph)) {
+ logWarning("[Consolidate] Ignored unknown glyph name %s.",
+ ligArray->items[k].glyph.name);
+ continue;
+ }
+ lig_hash *s = NULL;
+ int gid = ligArray->items[k].glyph.index;
+ HASH_FIND_INT(hm, &gid, s);
+ if (!s) {
+ NEW(s);
+ s->gid = ligArray->items[k].glyph.index;
+ s->name = sdsdup(ligArray->items[k].glyph.name);
+ s->componentCount = ligArray->items[k].componentCount;
+ s->anchors = ligArray->items[k].anchors;
+ ligArray->items[k].anchors = NULL;
+ HASH_ADD_INT(hm, gid, s);
+ } else {
+ logWarning("[Consolidate] Ignored anchor double-definition for /%s.",
+ ligArray->items[k].glyph.name);
+ }
+ }
+ HASH_SORT(hm, lig_by_gid);
+ otl_iLigatureArray.clear(ligArray);
+ lig_hash *s, *tmp;
+ HASH_ITER(hh, hm, s, tmp) {
+ otl_iLigatureArray.push(ligArray, ((otl_LigatureBaseRecord){
+ .glyph = Handle.fromConsolidated(s->gid, s->name),
+ .componentCount = s->componentCount,
+ .anchors = s->anchors,
+ }));
+ sdsfree(s->name);
+ HASH_DEL(hm, s);
+ FREE(s);
+ }
+}
+
+bool consolidate_mark_to_single(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options) {
+ subtable_gpos_markToSingle *subtable = &(_subtable->gpos_markToSingle);
+ consolidateMarkArray(font, table, options, &subtable->markArray, subtable->classCount);
+ consolidateBaseArray(font, table, options, &subtable->baseArray);
+ return (subtable->markArray.length == 0) || (subtable->baseArray.length == 0);
+}
+
+bool consolidate_mark_to_ligature(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options) {
+ subtable_gpos_markToLigature *subtable = &(_subtable->gpos_markToLigature);
+ consolidateMarkArray(font, table, options, &subtable->markArray, subtable->classCount);
+ consolidateLigArray(font, table, options, &subtable->ligArray);
+ return (subtable->markArray.length == 0) || (subtable->ligArray.length == 0);
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,10 @@
+#ifndef CARYLL_FONTOPS_OTL_MARK_H
+#define CARYLL_FONTOPS_OTL_MARK_H
+#include "common.h"
+
+bool consolidate_mark_to_single(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options);
+bool consolidate_mark_to_ligature(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+ const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-font.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-font.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-font.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,168 @@
+#include "support/util.h"
+#include "otfcc/font.h"
+#include "table/all.h"
+#include "otfcc/sfnt-builder.h"
+#include "consolidate/consolidate.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+static void *createFontTable(otfcc_Font *font, const uint32_t tag) {
+ switch (tag) {
+ case OTFCC_CHR('n','a','m','e'):
+ return table_iName.create();
+ case OTFCC_CHR('G','S','U','B'):
+ case OTFCC_CHR('G','P','O','S'):
+ return table_iOTL.create();
+ default:
+ return NULL;
+ }
+}
+
+static void deleteFontTable(otfcc_Font *font, const uint32_t tag) {
+ switch (tag) {
+ case OTFCC_CHR('h','e','a','d'):
+ if (font->head) DELETE(table_iHead.free, font->head);
+ return;
+ case OTFCC_CHR('h','h','e','a'):
+ if (font->hhea) DELETE(table_iHhea.free, font->hhea);
+ return;
+ case OTFCC_CHR('m','a','x','p'):
+ if (font->maxp) DELETE(table_iMaxp.free, font->maxp);
+ return;
+ case OTFCC_CHR('O','S','_','2'):
+ case OTFCC_CHR('O','S','/','2'):
+ if (font->OS_2) DELETE(table_iOS_2.free, font->OS_2);
+ return;
+ case OTFCC_CHR('n','a','m','e'):
+ if (font->name) DELETE(table_iName.free, font->name);
+ return;
+ case OTFCC_CHR('m','e','t','a'):
+ if (font->meta) DELETE(table_iMeta.free, font->meta);
+ return;
+ case OTFCC_CHR('h','m','t','x'):
+ if (font->hmtx) DELETE(table_iHmtx.free, font->hmtx);
+ return;
+ case OTFCC_CHR('v','m','t','x'):
+ if (font->vmtx) DELETE(table_iVmtx.free, font->vmtx);
+ return;
+ case OTFCC_CHR('p','o','s','t'):
+ if (font->post) DELETE(iTable_post.free, font->post);
+ return;
+#if 0
+ case OTFCC_CHR('h','d','m','x'):
+ if (font->hdmx) DELETE(otfcc_deleteHdmx, font->hdmx);
+ return;
+#endif
+ case OTFCC_CHR('v','h','e','a'):
+ if (font->vhea) DELETE(table_iVhea.free, font->vhea);
+ return;
+ case OTFCC_CHR('f','p','g','m'):
+ if (font->fpgm) DELETE(table_iFpgm_prep.free, font->fpgm);
+ return;
+ case OTFCC_CHR('p','r','e','p'):
+ if (font->prep) DELETE(table_iFpgm_prep.free, font->prep);
+ return;
+ case OTFCC_CHR('c','v','t','_'):
+ case OTFCC_CHR('c','v','t',' '):
+ if (font->cvt_) DELETE(table_iCvt.free, font->cvt_);
+ return;
+ case OTFCC_CHR('g','a','s','p'):
+ if (font->gasp) DELETE(table_iGasp.free, font->gasp);
+ return;
+ case OTFCC_CHR('C','F','F','_'):
+ case OTFCC_CHR('C','F','F',' '):
+ if (font->CFF_) DELETE(table_iCFF.free, font->CFF_);
+ return;
+ case OTFCC_CHR('g','l','y','f'):
+ if (font->glyf) DELETE(table_iGlyf.free, font->glyf);
+ return;
+ case OTFCC_CHR('c','m','a','p'):
+ if (font->cmap) DELETE(table_iCmap.free, font->cmap);
+ return;
+ case OTFCC_CHR('L','T','S','H'):
+ if (font->LTSH) DELETE(table_iLTSH.free, font->LTSH);
+ return;
+ case OTFCC_CHR('G','S','U','B'):
+ if (font->GSUB) DELETE(table_iOTL.free, font->GSUB);
+ return;
+ case OTFCC_CHR('G','P','O','S'):
+ if (font->GPOS) DELETE(table_iOTL.free, font->GPOS);
+ return;
+ case OTFCC_CHR('G','D','E','F'):
+ if (font->GDEF) DELETE(table_iGDEF.free, font->GDEF);
+ return;
+ case OTFCC_CHR('B','A','S','E'):
+ if (font->BASE) DELETE(table_iBASE.free, font->BASE);
+ return;
+ case OTFCC_CHR('V','O','R','G'):
+ if (font->VORG) DELETE(table_iVORG.free, font->VORG);
+ return;
+ case OTFCC_CHR('C','P','A','L'):
+ if (font->CPAL) DELETE(table_iCPAL.free, font->CPAL);
+ return;
+ case OTFCC_CHR('C','O','L','R'):
+ if (font->COLR) DELETE(table_iCOLR.free, font->COLR);
+ return;
+ case OTFCC_CHR('S','V','G',' '):
+ case OTFCC_CHR('S','V','G','_'):
+ if (font->SVG_) DELETE(table_iSVG.free, font->SVG_);
+ return;
+ case OTFCC_CHR('T','S','I','0'):
+ case OTFCC_CHR('T','S','I','1'):
+ if (font->TSI_01) DELETE(table_iTSI.free, font->TSI_01);
+ return;
+ case OTFCC_CHR('T','S','I','2'):
+ case OTFCC_CHR('T','S','I','3'):
+ if (font->TSI_23) DELETE(table_iTSI.free, font->TSI_23);
+ return;
+ case OTFCC_CHR('T','S','I','5'):
+ if (font->TSI5) DELETE(otl_iClassDef.free, font->TSI5);
+ return;
+ }
+}
+
+static INLINE void initFont(otfcc_Font *font) {
+ memset(font, 0, sizeof(*font));
+}
+static INLINE void disposeFont(otfcc_Font *font) {
+ deleteFontTable(font, OTFCC_CHR('h','e','a','d'));
+ deleteFontTable(font, OTFCC_CHR('h','h','e','a'));
+ deleteFontTable(font, OTFCC_CHR('m','a','x','p'));
+ deleteFontTable(font, OTFCC_CHR('O','S','_','2'));
+ deleteFontTable(font, OTFCC_CHR('n','a','m','e'));
+ deleteFontTable(font, OTFCC_CHR('m','e','t','a'));
+ deleteFontTable(font, OTFCC_CHR('h','m','t','x'));
+ deleteFontTable(font, OTFCC_CHR('v','m','t','x'));
+ deleteFontTable(font, OTFCC_CHR('p','o','s','t'));
+ deleteFontTable(font, OTFCC_CHR('h','d','m','x'));
+ deleteFontTable(font, OTFCC_CHR('v','h','e','a'));
+ deleteFontTable(font, OTFCC_CHR('f','p','g','m'));
+ deleteFontTable(font, OTFCC_CHR('p','r','e','p'));
+ deleteFontTable(font, OTFCC_CHR('c','v','t','_'));
+ deleteFontTable(font, OTFCC_CHR('g','a','s','p'));
+ deleteFontTable(font, OTFCC_CHR('C','F','F','_'));
+ deleteFontTable(font, OTFCC_CHR('g','l','y','f'));
+ deleteFontTable(font, OTFCC_CHR('c','m','a','p'));
+ deleteFontTable(font, OTFCC_CHR('L','T','S','H'));
+ deleteFontTable(font, OTFCC_CHR('G','S','U','B'));
+ deleteFontTable(font, OTFCC_CHR('G','P','O','S'));
+ deleteFontTable(font, OTFCC_CHR('G','D','E','F'));
+ deleteFontTable(font, OTFCC_CHR('B','A','S','E'));
+ deleteFontTable(font, OTFCC_CHR('V','O','R','G'));
+ deleteFontTable(font, OTFCC_CHR('C','P','A','L'));
+ deleteFontTable(font, OTFCC_CHR('C','O','L','R'));
+ deleteFontTable(font, OTFCC_CHR('S','V','G','_'));
+ deleteFontTable(font, OTFCC_CHR('T','S','I','0'));
+ deleteFontTable(font, OTFCC_CHR('T','S','I','2'));
+ deleteFontTable(font, OTFCC_CHR('T','S','I','5'));
+
+ GlyphOrder.free(font->glyph_order);
+}
+caryll_standardRefTypeFn(otfcc_Font, initFont, disposeFont);
+
+caryll_ElementInterfaceOf(otfcc_Font) otfcc_iFont = {
+ caryll_standardRefTypeMethods(otfcc_Font),
+ .createTable = createFontTable,
+ .deleteTable = deleteFontTable,
+ .consolidate = otfcc_consolidateFont,
+};
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt-builder.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt-builder.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt-builder.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,115 @@
+#include "support/util.h"
+#include "otfcc/sfnt-builder.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+static uint32_t buf_checksum(caryll_Buffer *buffer) {
+ uint32_t actualLength = (uint32_t)buflen(buffer);
+ buflongalign(buffer);
+ uint32_t sum = 0;
+ {
+ uint32_t *start = (uint32_t *)buffer->data;
+ uint32_t *end = start + ((actualLength + 3) & ~3) / sizeof(uint32_t);
+ while (start < end) {
+ sum += otfcc_endian_convert32(*start++);
+ }
+ }
+ return sum;
+}
+
+static otfcc_SFNTTableEntry *createSegment(uint32_t tag, caryll_Buffer *buffer) {
+ otfcc_SFNTTableEntry *table;
+ NEW(table);
+ table->tag = tag;
+ table->length = (uint32_t)buflen(buffer);
+ buflongalign(buffer);
+ table->buffer = buffer;
+
+ uint32_t sum = 0;
+ {
+ uint32_t *start = (uint32_t *)buffer->data;
+ uint32_t *end = start + ((table->length + 3) & ~3) / sizeof(uint32_t);
+ while (start < end) {
+ sum += otfcc_endian_convert32(*start++);
+ }
+ }
+ table->checksum = sum;
+ return table;
+}
+
+otfcc_SFNTBuilder *otfcc_newSFNTBuilder(uint32_t header, const otfcc_Options *options) {
+ otfcc_SFNTBuilder *builder;
+ NEW(builder);
+ builder->count = 0;
+ builder->header = header;
+ builder->tables = NULL;
+ builder->options = options;
+ return builder;
+}
+
+void otfcc_deleteSFNTBuilder(otfcc_SFNTBuilder *builder) {
+ if (!builder) return;
+ otfcc_SFNTTableEntry *item, *tmp;
+ HASH_ITER(hh, builder->tables, item, tmp) {
+ HASH_DEL(builder->tables, item);
+ buffree(item->buffer);
+ FREE(item);
+ }
+ FREE(builder);
+}
+
+void otfcc_SFNTBuilder_pushTable(otfcc_SFNTBuilder *builder, uint32_t tag, caryll_Buffer *buffer) {
+ if (!builder || !buffer) return;
+ otfcc_SFNTTableEntry *item;
+ const otfcc_Options *options = builder->options;
+ HASH_FIND_INT(builder->tables, &tag, item);
+ if (!item) {
+ item = createSegment(tag, buffer);
+ HASH_ADD_INT(builder->tables, tag, item);
+ logProgress("OpenType table %c%c%c%c successfully built.\n", (tag >> 24) & 0xff,
+ (tag >> 16) & 0xff, (tag >> 8) & 0xff, tag & 0xff);
+ } else {
+ buffree(buffer);
+ }
+}
+
+static int byTag(otfcc_SFNTTableEntry *a, otfcc_SFNTTableEntry *b) {
+ return (a->tag - b->tag);
+}
+
+caryll_Buffer *otfcc_SFNTBuilder_serialize(otfcc_SFNTBuilder *builder) {
+ caryll_Buffer *buffer = bufnew();
+ if (!builder) return buffer;
+ uint16_t nTables = HASH_COUNT(builder->tables);
+ uint16_t searchRange = (nTables < 16 ? 8 : nTables < 32 ? 16 : nTables < 64 ? 32 : 64) * 16;
+ bufwrite32b(buffer, builder->header);
+ bufwrite16b(buffer, nTables);
+ bufwrite16b(buffer, searchRange);
+ bufwrite16b(buffer, (nTables < 16 ? 3 : nTables < 32 ? 4 : nTables < 64 ? 5 : 6));
+ bufwrite16b(buffer, nTables * 16 - searchRange);
+
+ otfcc_SFNTTableEntry *table;
+ size_t offset = 12 + nTables * 16;
+ size_t headOffset = offset;
+ HASH_SORT(builder->tables, byTag);
+ foreach_hash(table, builder->tables) {
+ // write table directory
+ bufwrite32b(buffer, table->tag);
+ bufwrite32b(buffer, table->checksum);
+ bufwrite32b(buffer, (uint32_t)offset);
+ bufwrite32b(buffer, table->length);
+ size_t cp = buffer->cursor;
+ bufseek(buffer, offset);
+ bufwrite_buf(buffer, table->buffer);
+ bufseek(buffer, cp);
+ // record where the [head] is
+ if (table->tag == OTFCC_CHR('h','e','a','d')) { headOffset = offset; }
+ offset += buflen(table->buffer);
+ }
+
+ // write head.checksumAdjust
+ uint32_t wholeChecksum = buf_checksum(buffer);
+ bufseek(buffer, headOffset + 8);
+ bufwrite32b(buffer, 0xB1B0AFBA - wholeChecksum);
+ return buffer;
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,90 @@
+#include "support/util.h"
+#include "otfcc/sfnt.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+static void otfcc_read_packets(otfcc_SplineFontContainer *font, FILE *file) {
+ for (uint32_t count = 0; count < font->count; count++) {
+ (void)fseek(file, font->offsets[count], SEEK_SET);
+
+ font->packets[count].sfnt_version = otfcc_get32u(file);
+ font->packets[count].numTables = otfcc_get16u(file);
+ font->packets[count].searchRange = otfcc_get16u(file);
+ font->packets[count].entrySelector = otfcc_get16u(file);
+ font->packets[count].rangeShift = otfcc_get16u(file);
+ NEW(font->packets[count].pieces, font->packets[count].numTables);
+
+ for (uint32_t i = 0; i < font->packets[count].numTables; i++) {
+ font->packets[count].pieces[i].tag = otfcc_get32u(file);
+ font->packets[count].pieces[i].checkSum = otfcc_get32u(file);
+ font->packets[count].pieces[i].offset = otfcc_get32u(file);
+ font->packets[count].pieces[i].length = otfcc_get32u(file);
+ NEW(font->packets[count].pieces[i].data, font->packets[count].pieces[i].length);
+ }
+
+ for (uint32_t i = 0; i < font->packets[0].numTables; i++) {
+ (void)fseek(file, font->packets[count].pieces[i].offset, SEEK_SET);
+ (void)fread(font->packets[count].pieces[i].data, font->packets[count].pieces[i].length,
+ 1, file);
+ }
+ }
+}
+
+otfcc_SplineFontContainer *otfcc_readSFNT(FILE *file) {
+ if (!file) return NULL;
+ otfcc_SplineFontContainer *font;
+ NEW(font);
+
+ font->type = otfcc_get32u(file);
+
+ switch (font->type) {
+ case OTFCC_CHR('O','T','T','O'):
+ case 0x00010000:
+ case OTFCC_CHR('t','r','u','e'):
+ case OTFCC_CHR('t','y','p','1'):
+ font->count = 1;
+ NEW(font->offsets, font->count);
+ NEW(font->packets, font->count);
+ font->offsets[0] = 0;
+ otfcc_read_packets(font, file);
+ break;
+
+ case OTFCC_CHR('t','t','c','f'):
+ (void)otfcc_get32u(file);
+ font->count = otfcc_get32u(file);
+ NEW(font->offsets, font->count);
+ NEW(font->packets, font->count);
+
+ for (uint32_t i = 0; i < font->count; i++) {
+ font->offsets[i] = otfcc_get32u(file);
+ }
+
+ otfcc_read_packets(font, file);
+ break;
+
+ default:
+ font->count = 0;
+ font->offsets = NULL;
+ font->packets = NULL;
+ break;
+ }
+
+ fclose(file);
+
+ return font;
+}
+
+void otfcc_deleteSFNT(otfcc_SplineFontContainer *font) {
+ if (!font) return;
+ if (font->count > 0) {
+ for (uint32_t count = 0; count < font->count; count++) {
+ for (int i = 0; i < font->packets[count].numTables; i++) {
+ FREE(font->packets[count].pieces[i].data);
+ }
+ FREE(font->packets[count].pieces);
+ }
+ FREE(font->packets);
+ }
+ FREE(font->offsets);
+ FREE(font);
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-reader/json-reader.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-reader/json-reader.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-reader/json-reader.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,181 @@
+#include "support/util.h"
+#include "otfcc/font.h"
+#include "table/all.h"
+
+static otfcc_font_subtype otfcc_decideFontSubtypeFromJson(const json_value *root) {
+ if (json_obj_get_type(root, "CFF_", json_object) != NULL) {
+ return FONTTYPE_CFF;
+ } else {
+ return FONTTYPE_TTF;
+ }
+}
+
+// The default glyph_order object is completed using a two-step construction
+enum { ORD_GLYPHORDER = 1, ORD_NOTDEF = 2, ORD_CMAP = 3, ORD_GLYF = 4 };
+
+// Register a name->(orderType, orderEntry) map.
+static void setOrderByName(otfcc_GlyphOrder *go, sds name, uint8_t orderType, uint32_t orderEntry) {
+ otfcc_GlyphOrderEntry *s = NULL;
+ HASH_FIND(hhName, go->byName, name, sdslen(name), s);
+ if (!s) {
+ NEW(s);
+ s->gid = -1;
+ s->name = name;
+ s->orderType = orderType;
+ s->orderEntry = orderEntry;
+ HASH_ADD(hhName, go->byName, name[0], sdslen(s->name), s);
+ } else if (s->orderType > orderType) {
+ s->orderType = orderType;
+ s->orderEntry = orderEntry;
+ }
+}
+
+static int _byOrder(otfcc_GlyphOrderEntry *a, otfcc_GlyphOrderEntry *b) {
+ if (a->orderType < b->orderType) return (-1);
+ if (a->orderType > b->orderType) return (1);
+ if (a->orderEntry < b->orderEntry) return (-1);
+ if (a->orderEntry > b->orderEntry) return (1);
+ return 0;
+}
+
+// Complete ClyphOrder
+static void orderGlyphs(otfcc_GlyphOrder *go) {
+ HASH_SRT(hhName, go->byName, _byOrder);
+ otfcc_GlyphOrderEntry *current, *temp;
+ glyphid_t gid = 0;
+ HASH_ITER(hhName, go->byName, current, temp) {
+ current->gid = gid;
+ HASH_ADD(hhID, go->byGID, gid, sizeof(glyphid_t), current);
+ gid += 1;
+ }
+}
+
+static void escalateGlyphOrderByName(otfcc_GlyphOrder *go, sds name, uint8_t orderType,
+ uint32_t orderEntry) {
+ otfcc_GlyphOrderEntry *s = NULL;
+ HASH_FIND(hhName, go->byName, name, sdslen(name), s);
+ if (s && s->orderType > orderType) {
+ s->orderType = orderType;
+ s->orderEntry = orderEntry;
+ }
+}
+
+static void placeOrderEntriesFromGlyf(json_value *table, otfcc_GlyphOrder *go) {
+ for (uint32_t j = 0; j < table->u.object.length; j++) {
+ sds gname =
+ sdsnewlen(table->u.object.values[j].name, table->u.object.values[j].name_length);
+ if (strcmp(gname, ".notdef") == 0) {
+ setOrderByName(go, gname, ORD_NOTDEF, 0);
+ } else if (strcmp(gname, ".null") == 0) {
+ setOrderByName(go, gname, ORD_NOTDEF, 1);
+ } else {
+ setOrderByName(go, gname, ORD_GLYF, j);
+ }
+ }
+}
+static void placeOrderEntriesFromCmap(json_value *table, otfcc_GlyphOrder *go) {
+ for (uint32_t j = 0; j < table->u.object.length; j++) {
+ sds unicodeStr =
+ sdsnewlen(table->u.object.values[j].name, table->u.object.values[j].name_length);
+ json_value *item = table->u.object.values[j].value;
+ int32_t unicode;
+ if (sdslen(unicodeStr) > 2 && unicodeStr[0] == 'U' && unicodeStr[1] == '+') {
+ unicode = strtol(unicodeStr + 2, NULL, 16);
+ } else {
+ unicode = atoi(unicodeStr);
+ }
+ sdsfree(unicodeStr);
+ if (item->type == json_string && unicode > 0 &&
+ unicode <= 0x10FFFF) { // a valid unicode codepoint
+ sds gname = sdsnewlen(item->u.string.ptr, item->u.string.length);
+ escalateGlyphOrderByName(go, gname, ORD_CMAP, unicode);
+ sdsfree(gname);
+ }
+ }
+}
+static void placeOrderEntriesFromSubtable(json_value *table, otfcc_GlyphOrder *go, bool zeroOnly) {
+ uint32_t uplimit = table->u.array.length;
+ if (uplimit >= 1 && zeroOnly) { uplimit = 1; }
+ for (uint32_t j = 0; j < uplimit; j++) {
+ json_value *item = table->u.array.values[j];
+ if (item->type == json_string) {
+ sds gname = sdsnewlen(item->u.string.ptr, item->u.string.length);
+ escalateGlyphOrderByName(go, gname, ORD_GLYPHORDER, j);
+ sdsfree(gname);
+ }
+ }
+}
+
+static otfcc_GlyphOrder *parseGlyphOrder(const json_value *root, const otfcc_Options *options) {
+ otfcc_GlyphOrder *go = GlyphOrder.create();
+ if (root->type != json_object) return go;
+ json_value *table;
+
+ if ((table = json_obj_get_type(root, "glyf", json_object))) {
+ placeOrderEntriesFromGlyf(table, go);
+ if ((table = json_obj_get_type(root, "cmap", json_object))) {
+ placeOrderEntriesFromCmap(table, go);
+ }
+ if ((table = json_obj_get_type(root, "glyph_order", json_array))) {
+ bool ignoreGlyphOrder = options->ignore_glyph_order;
+ if (ignoreGlyphOrder && !!json_obj_get_type(root, "SVG_", json_array)) {
+ logNotice("OpenType SVG table detected. Glyph order is preserved.");
+ ignoreGlyphOrder = false;
+ }
+ placeOrderEntriesFromSubtable(table, go, ignoreGlyphOrder);
+ }
+ }
+ orderGlyphs(go);
+ return go;
+}
+
+static otfcc_Font *readJson(void *_root, uint32_t index, const otfcc_Options *options) {
+ const json_value *root = (json_value *)_root;
+ otfcc_Font *font = otfcc_iFont.create();
+ if (!font) return NULL;
+ font->subtype = otfcc_decideFontSubtypeFromJson(root);
+ font->glyph_order = parseGlyphOrder(root, options);
+ font->glyf = otfcc_parseGlyf(root, font->glyph_order, options);
+ font->CFF_ = otfcc_parseCFF(root, options);
+ font->head = otfcc_parseHead(root, options);
+ font->hhea = otfcc_parseHhea(root, options);
+ font->OS_2 = otfcc_parseOS_2(root, options);
+ font->maxp = otfcc_parseMaxp(root, options);
+ font->post = otfcc_parsePost(root, options);
+ font->name = otfcc_parseName(root, options);
+ font->meta = otfcc_parseMeta(root, options);
+ font->cmap = otfcc_parseCmap(root, options);
+ if (!options->ignore_hints) {
+ font->fpgm = otfcc_parseFpgmPrep(root, options, "fpgm");
+ font->prep = otfcc_parseFpgmPrep(root, options, "prep");
+ font->cvt_ = otfcc_parseCvt(root, options, "cvt_");
+ font->gasp = otfcc_parseGasp(root, options);
+ }
+ font->VDMX = otfcc_parseVDMX(root, options);
+ font->vhea = otfcc_parseVhea(root, options);
+ if (font->glyf) {
+ font->GSUB = otfcc_parseOtl(root, options, "GSUB");
+ font->GPOS = otfcc_parseOtl(root, options, "GPOS");
+ font->GDEF = otfcc_parseGDEF(root, options);
+ }
+ font->BASE = otfcc_parseBASE(root, options);
+ font->CPAL = otfcc_parseCPAL(root, options);
+ font->COLR = otfcc_parseCOLR(root, options);
+ font->SVG_ = otfcc_parseSVG(root, options);
+
+ font->TSI_01 = otfcc_parseTSI(root, options, "TSI_01");
+ font->TSI_23 = otfcc_parseTSI(root, options, "TSI_23");
+ font->TSI5 = otfcc_parseTSI5(root, options);
+
+ return font;
+}
+static INLINE void freeReader(otfcc_IFontBuilder *self) {
+ free(self);
+}
+otfcc_IFontBuilder *otfcc_newJsonReader() {
+ otfcc_IFontBuilder *reader;
+ NEW(reader);
+ reader->read = readJson;
+ reader->free = freeReader;
+ return reader;
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,56 @@
+#include "support/util.h"
+#include "otfcc/font.h"
+#include "table/all.h"
+
+static void *serializeToJson(otfcc_Font *font, const otfcc_Options *options) {
+ json_value *root = json_object_new(48);
+ if (!root) return NULL;
+ otfcc_dumpFvar(font->fvar, root, options);
+ otfcc_dumpHead(font->head, root, options);
+ otfcc_dumpHhea(font->hhea, root, options);
+ otfcc_dumpMaxp(font->maxp, root, options);
+ otfcc_dumpVhea(font->vhea, root, options);
+ otfcc_dumpPost(font->post, root, options);
+ otfcc_dumpOS_2(font->OS_2, root, options);
+ otfcc_dumpName(font->name, root, options);
+ otfcc_dumpMeta(font->meta, root, options);
+ otfcc_dumpCmap(font->cmap, root, options);
+ otfcc_dumpCFF(font->CFF_, root, options);
+
+ GlyfIOContext ctx = {.locaIsLong = font->head->indexToLocFormat,
+ .numGlyphs = font->maxp->numGlyphs,
+ .nPhantomPoints = 4,
+ .hasVerticalMetrics = !!(font->vhea),
+ .exportFDSelect = font->CFF_ && font->CFF_->isCID,
+ .fvar = font->fvar};
+ otfcc_dumpGlyf(font->glyf, root, options, &ctx);
+ if (!options->ignore_hints) {
+ table_dumpTableFpgmPrep(font->fpgm, root, options, "fpgm");
+ table_dumpTableFpgmPrep(font->prep, root, options, "prep");
+ otfcc_dumpCvt(font->cvt_, root, options, "cvt_");
+ otfcc_dumpGasp(font->gasp, root, options);
+ }
+ otfcc_dumpVDMX(font->VDMX, root, options);
+ otfcc_dumpOtl(font->GSUB, root, options, "GSUB");
+ otfcc_dumpOtl(font->GPOS, root, options, "GPOS");
+ otfcc_dumpGDEF(font->GDEF, root, options);
+ otfcc_dumpBASE(font->BASE, root, options);
+
+ otfcc_dumpCPAL(font->CPAL, root, options);
+ otfcc_dumpCOLR(font->COLR, root, options);
+ otfcc_dumpSVG(font->SVG_, root, options);
+ otfcc_dumpTSI(font->TSI_01, root, options, "TSI_01");
+ otfcc_dumpTSI(font->TSI_23, root, options, "TSI_23");
+ otfcc_dumpTSI5(font->TSI5, root, options);
+ return root;
+}
+static void freeJsonWriter(otfcc_IFontSerializer *self) {
+ free(self);
+}
+otfcc_IFontSerializer *otfcc_newJsonWriter() {
+ otfcc_IFontSerializer *writer;
+ NEW(writer);
+ writer->serialize = serializeToJson;
+ writer->free = freeJsonWriter;
+ return writer;
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,126 @@
+#include "cff-charset.h"
+
+void cff_extract_Charset(uint8_t *data, int32_t offset, uint16_t nchars, cff_Charset *charsets) {
+ uint32_t i;
+ if (offset == cff_CHARSET_ISOADOBE)
+ charsets->t = cff_CHARSET_ISOADOBE;
+ else if (offset == cff_CHARSET_EXPERT)
+ charsets->t = cff_CHARSET_EXPERT;
+ else if (offset == cff_CHARSET_EXPERTSUBSET)
+ charsets->t = cff_CHARSET_EXPERTSUBSET;
+ else {
+ // NOTE: gid 1 will always be named as .notdef
+ switch (data[offset]) {
+ case 0:
+ charsets->t = cff_CHARSET_FORMAT0;
+ {
+ charsets->s = nchars - 1;
+ NEW(charsets->f0.glyph, nchars - 1);
+
+ for (i = 0; i < charsets->s; i++)
+ charsets->f0.glyph[i] = gu2(data, offset + 1 + i * 2);
+ }
+ break;
+ case 1:
+ charsets->t = cff_CHARSET_FORMAT1;
+ {
+ uint32_t size;
+ uint32_t glyphsEncodedSofar = 1;
+ for (i = 0; glyphsEncodedSofar < nchars; i++) {
+ glyphsEncodedSofar += 1 + gu1(data, offset + 3 + i * 3);
+ }
+
+ size = i;
+ charsets->s = size;
+ NEW(charsets->f1.range1, i + 1);
+ for (i = 0; i < size; i++) {
+ charsets->f1.range1[i].first = gu2(data, offset + 1 + i * 3);
+ charsets->f1.range1[i].nleft = gu1(data, offset + 3 + i * 3);
+ }
+ }
+ break;
+ case 2:
+ charsets->t = cff_CHARSET_FORMAT2;
+ {
+ uint32_t size;
+ uint32_t glyphsEncodedSofar = 1;
+ for (i = 0; glyphsEncodedSofar < nchars; i++) {
+ glyphsEncodedSofar += 1 + gu2(data, offset + 3 + i * 4);
+ }
+
+ size = i;
+ charsets->s = size;
+ NEW(charsets->f2.range2, i + 1);
+
+ for (i = 0; i < size; i++) {
+ charsets->f2.range2[i].first = gu2(data, offset + 1 + i * 4);
+ charsets->f2.range2[i].nleft = gu2(data, offset + 3 + i * 4);
+ }
+ }
+ break;
+ }
+ }
+}
+
+caryll_Buffer *cff_build_Charset(cff_Charset cset) {
+ switch (cset.t) {
+ case cff_CHARSET_ISOADOBE:
+ case cff_CHARSET_EXPERT:
+ case cff_CHARSET_EXPERTSUBSET: {
+ return bufnew();
+ }
+ case cff_CHARSET_FORMAT0: {
+ caryll_Buffer *blob = bufnew();
+ blob->size = 1 + cset.s * 2;
+ NEW(blob->data, blob->size);
+ blob->data[0] = 0;
+ for (uint32_t i = 0; i < cset.s; i++)
+ blob->data[1 + 2 * i] = cset.f0.glyph[i] / 256, blob->data[2 + 2 * i] = cset.f0.glyph[i] % 256;
+ blob->cursor = blob->size;
+ return blob;
+ }
+ case cff_CHARSET_FORMAT1: {
+ caryll_Buffer *blob = bufnew();
+ blob->size = 1 + cset.s * 3;
+ NEW(blob->data, blob->size);
+ blob->data[0] = 1;
+ for (uint32_t i = 0; i < cset.s; i++)
+ blob->data[1 + 3 * i] = cset.f1.range1[i].first / 256,
+ blob->data[2 + 3 * i] = cset.f1.range1[i].first % 256,
+ blob->data[3 + 3 * i] = cset.f1.range1[i].nleft;
+ return blob;
+ }
+ case cff_CHARSET_FORMAT2: {
+ caryll_Buffer *blob = bufnew();
+ blob->size = 1 + cset.s * 4;
+ NEW(blob->data, blob->size);
+ blob->data[0] = 2;
+ for (uint32_t i = 0; i < cset.s; i++)
+ blob->data[1 + 4 * i] = cset.f2.range2[i].first / 256,
+ blob->data[2 + 4 * i] = cset.f2.range2[i].first % 256,
+ blob->data[3 + 4 * i] = cset.f2.range2[i].nleft / 256,
+ blob->data[4 + 4 * i] = cset.f2.range2[i].nleft % 256;
+ blob->cursor = blob->size;
+ return blob;
+ }
+ }
+ return NULL;
+}
+
+void cff_close_Charset(cff_Charset cset) {
+ switch (cset.t) {
+ case cff_CHARSET_EXPERT:
+ case cff_CHARSET_EXPERTSUBSET:
+ case cff_CHARSET_ISOADOBE:
+ break;
+ case cff_CHARSET_FORMAT0:
+ if (cset.f0.glyph != NULL) FREE(cset.f0.glyph);
+ break;
+ case cff_CHARSET_FORMAT1:
+ if (cset.f1.range1 != NULL) FREE(cset.f1.range1);
+ break;
+ case cff_CHARSET_FORMAT2:
+ if (cset.f2.range2 != NULL) FREE(cset.f2.range2);
+ break;
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,62 @@
+#ifndef CARYLL_cff_CHARSET_H
+#define CARYLL_cff_CHARSET_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+#include "cff-util.h"
+#include "cff-value.h"
+
+enum {
+ cff_CHARSET_ISOADOBE = 0,
+ cff_CHARSET_UNSPECED = 0,
+ cff_CHARSET_EXPERT = 1,
+ cff_CHARSET_EXPERTSUBSET = 2,
+ cff_CHARSET_FORMAT0 = 3,
+ cff_CHARSET_FORMAT1 = 4,
+ cff_CHARSET_FORMAT2 = 5,
+};
+
+// CFF Charset Structures
+typedef struct {
+ uint8_t format;
+ uint16_t *glyph;
+} cff_CharsetFormat0;
+
+typedef struct {
+ uint16_t first;
+ uint8_t nleft;
+} cff_CharsetRangeFormat1;
+
+typedef struct {
+ uint8_t format;
+ cff_CharsetRangeFormat1 *range1;
+} cff_CharsetFormat1;
+
+typedef struct {
+ uint16_t first;
+ uint16_t nleft;
+} cff_CharsetRangeFormat2;
+
+typedef struct {
+ uint8_t format;
+ cff_CharsetRangeFormat2 *range2;
+} cff_CharsetFormat2;
+
+typedef struct {
+ uint32_t t;
+ uint32_t s; // size
+ union {
+ cff_CharsetFormat0 f0;
+ cff_CharsetFormat1 f1;
+ cff_CharsetFormat2 f2;
+ };
+} cff_Charset;
+
+void cff_close_Charset(cff_Charset cset);
+void cff_extract_Charset(uint8_t *data, int32_t offset, uint16_t nchars, cff_Charset *charsets);
+caryll_Buffer *cff_build_Charset(cff_Charset cset);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-codecs.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-codecs.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-codecs.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,316 @@
+/*
+ Codec of CFF file format and Type2 CharString.
+*/
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libcff.h"
+
+/*
+ Number in Type2
+ 1 32 -246 [-107, 107] b0 - 139
+ 2 247-250 [108, 1131] (b0 - 247) * 256 + b1 + 108
+ 2 251-254 [-1132, -108] -(b0 - 251) * 256 - b1 - 108
+ 3 28 (int16_t) [-32768, 32767] b1 << 8 | b2
+ 5 29 (int32_t) [-(2^31), (2^32 - 1)] b1 << 24 | b2 << 16 | b3 << 8 | b4
+ * 30 (double)
+*/
+
+caryll_Buffer *cff_encodeCffOperator(int32_t val) {
+ if (val > 256) {
+ return bufninit(2, val / 256, val % 256);
+ } else {
+ return bufninit(1, val);
+ }
+}
+
+caryll_Buffer *cff_encodeCffInteger(int32_t val) {
+ if (val >= -107 && val <= 107) {
+ return bufninit(1, val + 139);
+ } else if (val >= 108 && val <= 1131) {
+ val -= 108;
+ return bufninit(2, (val >> 8) + 247, val & 0xff);
+ } else if (val >= -1131 && val <= -108) {
+ val = -108 - val;
+ return bufninit(2, (val >> 8) + 251, val & 0xff);
+ } else if (val >= -32768 && val < 32768) {
+ return bufninit(3, 28, val >> 8, val & 0xff);
+ } else {
+ /* In dict data we have 4 byte ints, in type2 strings we don't */
+ return bufninit(5, 29, (val >> 24) & 0xff, (val >> 16) & 0xff, (val >> 8) & 0xff, val & 0xff);
+ }
+}
+
+// -2.25 -> 1e e2 a2 5f
+// 0.140541E-3 -> 1e 0a 14 05 41 c3 ff
+caryll_Buffer *cff_encodeCffFloat(double val) {
+ caryll_Buffer *blob = bufnew();
+ uint32_t i, j = 0;
+ uint8_t temp[32] = {0};
+
+ if (val == 0.0) {
+ blob->size = 2;
+ NEW(blob->data, blob->size);
+ blob->data[0] = 30;
+ blob->data[1] = 0x0f;
+ } else {
+ uint32_t niblen = 0;
+ uint8_t *array;
+ sprintf((char *)temp, "%.13g", val);
+
+ for (i = 0; i < strlen((char *)temp);) {
+ if (temp[i] == '.')
+ niblen++, i++;
+ else if (temp[i] >= '0' && temp[i] <= '9')
+ niblen++, i++;
+ else if (temp[i] == 'e' && temp[i + 1] == '-')
+ niblen++, i += 2;
+ else if (temp[i] == 'e' && temp[i + 1] == '+')
+ niblen++, i += 2;
+ else if (temp[i] == '-')
+ niblen++, i++;
+ }
+
+ blob->size = 2 + niblen / 2;
+ NEW(blob->data, blob->size);
+ blob->data[0] = 30;
+
+ if (niblen % 2 != 0) {
+ NEW(array, (niblen + 1));
+ array[niblen] = 0x0f;
+ } else {
+ NEW(array, (niblen + 2));
+ array[niblen + 1] = 0x0f;
+ array[niblen] = 0x0f;
+ }
+
+ for (i = 0; i < strlen((char *)temp);) {
+ if (temp[i] == '.')
+ array[j++] = 0x0a, i++;
+ else if (temp[i] >= '0' && temp[i] <= '9')
+ array[j++] = temp[i] - '0', i++;
+ else if (temp[i] == 'e' && temp[i + 1] == '-')
+ array[j++] = 0x0c, i += 2;
+ else if (temp[i] == 'e' && temp[i + 1] == '+')
+ array[j++] = 0x0b, i += 2;
+ else if (temp[i] == '-')
+ array[j++] = 0x0e, i++;
+ }
+
+ for (i = 1; i < blob->size; i++) {
+ blob->data[i] = array[(i - 1) * 2] * 16 + array[(i - 1) * 2 + 1];
+ }
+
+ FREE(array);
+ }
+
+ return blob;
+}
+
+uint32_t cff_decodeCS2Token(const uint8_t *start, cff_Value *val) {
+ uint32_t advance = 0;
+
+ if (*start <= 27) {
+ val->t = CS2_OPERATOR;
+
+ if (*start <= 11) {
+ val->i = *start;
+ advance = 1;
+ } else if (*start == 12) {
+ val->i = *start << 8 | *(start + 1);
+ advance = 2;
+ } else if (*start >= 13 && *start <= 18) {
+ val->i = *start;
+ advance = 1;
+ } else if (*start >= 19 && *start <= 20) {
+ val->i = *start;
+ advance = 1;
+ } else if (*start >= 21 && *start <= 27) {
+ val->i = *start;
+ advance = 1;
+ }
+ } else if (*start == 28) {
+ val->t = CS2_OPERAND;
+ val->i = (int16_t)(*(start + 1) << 8 | *(start + 2));
+ advance = 3;
+ } else if (*start >= 29 && *start <= 31) {
+ val->t = CS2_OPERATOR;
+ val->i = *start;
+ advance = 1;
+ } else if (*start >= 32 && *start <= 254) {
+ val->t = CS2_OPERAND;
+ if (*start >= 32 && *start <= 246) {
+ val->i = (int32_t)(*start - 139);
+ advance = 1;
+ } else if (*start >= 247 && *start <= 250) {
+ val->i = (int32_t)((*start - 247) * 256 + *(start + 1) + 108);
+ advance = 2;
+ } else if (*start >= 251 && *start <= 254) {
+ val->i = (int32_t)(-((*start - 251) * 256) - *(start + 1) - 108);
+ advance = 2;
+ }
+ } else if (*start == 255) {
+ val->t = CS2_FRACTION;
+ int16_t integerPart = start[1] << 8 | start[2];
+ uint16_t fractionPart = start[3] << 8 | start[4];
+ val->d = (double)(integerPart + fractionPart / 65536.0);
+ advance = 5;
+ }
+
+ if (val->t == CS2_OPERAND) val->d = (double)val->i, val->t = CS2_FRACTION;
+
+ return advance;
+}
+
+// decode integer
+static uint32_t cff_dec_i(const uint8_t *start, cff_Value *val) {
+ uint8_t b0 = *start, b1, b2, b3, b4;
+ uint32_t len = 0;
+
+ if (b0 >= 32 && b0 <= 246) {
+ val->i = b0 - 139;
+ len = 1;
+ } else if (b0 >= 247 && b0 <= 250) {
+ b1 = *(start + 1);
+ val->i = (b0 - 247) * 256 + b1 + 108;
+ len = 2;
+ } else if (b0 >= 251 && b0 <= 254) {
+ b1 = *(start + 1);
+ val->i = -(b0 - 251) * 256 - b1 - 108;
+ len = 2;
+ } else if (b0 == 28) {
+ b1 = *(start + 1);
+ b2 = *(start + 2);
+ val->i = (b1 << 8) | b2;
+ len = 3;
+ } else if (b0 == 29) {
+ b1 = *(start + 1);
+ b2 = *(start + 2);
+ b3 = *(start + 3);
+ b4 = *(start + 4);
+ val->i = b1 << 24 | b2 << 16 | b3 << 8 | b4;
+ len = 5;
+ }
+
+ val->t = cff_INTEGER;
+ return len;
+}
+
+static const int nibble_attr[15] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1};
+static const char *nibble_symb[15] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", "", "-"};
+
+// decode double
+static uint32_t cff_dec_r(const uint8_t *start, cff_Value *val) {
+ uint8_t restr[72] = {0};
+ size_t str_len = 0;
+ uint32_t len;
+ uint8_t a, b;
+
+ const uint8_t *nibst = start + 1;
+
+ while (1) {
+ a = *nibst / 16;
+ b = *nibst % 16;
+
+ if (a != 15)
+ str_len += nibble_attr[a];
+ else
+ break;
+
+ if (b != 15)
+ str_len += nibble_attr[b];
+ else
+ break;
+
+ nibst++;
+ }
+
+ len = (uint32_t)(nibst - start + 1);
+ nibst = start + 1;
+
+ while (1) {
+ a = *nibst / 16;
+ b = *nibst % 16;
+
+ if (a != 0x0f)
+ strcat((char *)restr, nibble_symb[a]);
+ else
+ break;
+
+ if (b != 0x0f)
+ strcat((char *)restr, nibble_symb[b]);
+ else
+ break;
+
+ nibst++;
+ }
+
+ val->d = atof((char *)restr);
+ val->t = cff_DOUBLE;
+
+ return len;
+}
+
+// decode operator
+static uint32_t cff_dec_o(const uint8_t *start, cff_Value *val) {
+ uint8_t b0 = *start, b1;
+ uint32_t len = 0;
+
+ if (b0 <= 21) {
+ if (b0 != 12) {
+ val->i = b0;
+ len = 1;
+ } else {
+ b1 = *(start + 1);
+ val->i = b0 * 256 + b1;
+ len = 2;
+ }
+ }
+
+ val->t = cff_OPERATOR;
+
+ return len;
+}
+
+// error in parsing, return a integer
+static uint32_t cff_dec_e(const uint8_t *start, cff_Value *val) {
+ printf("Undefined Byte in CFF: %d.\n", *start);
+ val->i = *start;
+ val->t = cff_INTEGER;
+ return 1;
+}
+
+static uint32_t (*_de_t2[256])(const uint8_t *, cff_Value *) = {
+ cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o,
+ cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o,
+ cff_dec_o, cff_dec_o, cff_dec_e, cff_dec_e, cff_dec_e, cff_dec_e, cff_dec_e, cff_dec_e, cff_dec_i, cff_dec_i,
+ cff_dec_r, cff_dec_e, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+ cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_e};
+
+uint32_t cff_decodeCffToken(const uint8_t *start, cff_Value *val) {
+ return _de_t2[*start](start, val);
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,122 @@
+#include "libcff.h"
+
+static INLINE void disposeDict(cff_Dict *dict) {
+ for (uint32_t j = 0; j < dict->count; j++) {
+ FREE(dict->ents[j].vals);
+ }
+ FREE(dict->ents);
+}
+
+caryll_standardRefTypeFn(cff_Dict, disposeDict);
+
+static cff_Dict *parseDict(const uint8_t *data, const uint32_t len) {
+ cff_Dict *dict;
+ NEW(dict);
+ uint32_t index = 0, advance;
+ cff_Value val, stack[48];
+ const uint8_t *temp = data;
+
+ while (temp < data + len) {
+ advance = cff_decodeCffToken(temp, &val);
+
+ switch (val.t) {
+ case cff_OPERATOR:
+ RESIZE(dict->ents, dict->count + 1);
+ dict->ents[dict->count].op = val.i;
+ dict->ents[dict->count].cnt = index;
+ NEW(dict->ents[dict->count].vals, index);
+ memcpy(dict->ents[dict->count].vals, stack, sizeof(cff_Value) * index);
+ dict->count++;
+ index = 0;
+ break;
+ case cff_INTEGER:
+ case cff_DOUBLE:
+ stack[index++] = val;
+ break;
+ }
+
+ temp += advance;
+ }
+
+ return dict;
+}
+
+static void parseToCallback(const uint8_t *data, const uint32_t len, void *context,
+ void (*callback)(uint32_t op, uint8_t top, cff_Value *stack, void *context)) {
+ uint8_t index = 0;
+ uint32_t advance;
+ cff_Value val, stack[256];
+ const uint8_t *temp = data;
+
+ while (temp < data + len) {
+ advance = cff_decodeCffToken(temp, &val);
+
+ switch (val.t) {
+ case cff_OPERATOR:
+ callback(val.i, index, stack, context);
+ index = 0;
+ break;
+
+ case cff_INTEGER:
+ case cff_DOUBLE:
+ stack[index++] = val;
+ break;
+ }
+
+ temp += advance;
+ }
+}
+
+typedef struct {
+ bool found;
+ cff_Value res;
+ uint32_t op;
+ uint32_t idx;
+} cff_get_key_context;
+
+static void callback_get_key(uint32_t op, uint8_t top, cff_Value *stack, void *_context) {
+ cff_get_key_context *context = (cff_get_key_context *)_context;
+ if (op == context->op && context->idx <= top) {
+ context->found = true;
+ context->res = stack[context->idx];
+ }
+}
+
+static cff_Value parseDictKey(const uint8_t *data, const uint32_t len, const uint32_t op, const uint32_t idx) {
+ cff_get_key_context context;
+ context.found = false;
+ context.idx = idx;
+ context.op = op;
+ context.res.t = 0;
+ context.res.i = -1;
+
+ parseToCallback(data, len, &context, callback_get_key);
+ return context.res;
+}
+
+static caryll_Buffer *buildDict(const cff_Dict *dict) {
+ caryll_Buffer *blob = bufnew();
+ for (uint32_t i = 0; i < dict->count; i++) {
+ for (uint32_t j = 0; j < dict->ents[i].cnt; j++) {
+ caryll_Buffer *blob_val;
+ if (dict->ents[i].vals[j].t == cff_INTEGER) {
+ blob_val = cff_encodeCffInteger(dict->ents[i].vals[j].i);
+ } else if (dict->ents[i].vals[j].t == cff_DOUBLE) {
+ blob_val = cff_encodeCffFloat(dict->ents[i].vals[j].d);
+ } else {
+ blob_val = cff_encodeCffInteger(0);
+ }
+ bufwrite_bufdel(blob, blob_val);
+ }
+ bufwrite_bufdel(blob, cff_encodeCffOperator(dict->ents[i].op));
+ }
+ return blob;
+}
+
+caryll_ElementInterfaceOf(cff_Dict) cff_iDict = {
+ caryll_standardRefTypeMethods(cff_Dict),
+ .parse = parseDict,
+ .parseToCallback = parseToCallback,
+ .parseDictKey = parseDictKey,
+ .build = buildDict,
+};
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,32 @@
+#ifndef CARYLL_cff_DICT_H
+#define CARYLL_cff_DICT_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+#include "cff-value.h"
+
+typedef struct {
+ uint32_t op;
+ uint32_t cnt;
+ cff_Value *vals;
+} cff_DictEntry;
+
+typedef struct {
+ uint32_t count;
+ cff_DictEntry *ents;
+} cff_Dict;
+
+extern caryll_ElementInterfaceOf(cff_Dict) {
+ caryll_RT(cff_Dict);
+ cff_Dict *(*parse)(const uint8_t *data, const uint32_t len);
+ void (*parseToCallback)(const uint8_t *data, const uint32_t len, void *context,
+ void (*callback)(uint32_t op, uint8_t top, cff_Value * stack, void *context));
+ cff_Value (*parseDictKey)(const uint8_t *data, const uint32_t len, const uint32_t op, const uint32_t idx);
+ caryll_Buffer *(*build)(const cff_Dict *dict);
+}
+cff_iDict;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,81 @@
+#include "cff-fdselect.h"
+
+void cff_close_FDSelect(cff_FDSelect fds) {
+ switch (fds.t) {
+ case cff_FDSELECT_FORMAT0:
+ if (fds.f0.fds != NULL) FREE(fds.f0.fds);
+ break;
+ case cff_FDSELECT_FORMAT3:
+ if (fds.f3.range3 != NULL) FREE(fds.f3.range3);
+ break;
+ case cff_FDSELECT_UNSPECED:
+ break;
+ }
+}
+
+caryll_Buffer *cff_build_FDSelect(cff_FDSelect fd) {
+ switch (fd.t) {
+ case cff_FDSELECT_UNSPECED: {
+ return bufnew();
+ }
+ case cff_FDSELECT_FORMAT0: {
+ caryll_Buffer *blob = bufnew();
+ blob->size = 1 + fd.s;
+ NEW(blob->data, blob->size);
+ for (uint16_t j = 0; j < fd.s; j++) {
+ blob->data[j] = fd.f0.fds[j];
+ }
+ return blob;
+ }
+ case cff_FDSELECT_FORMAT3: {
+ caryll_Buffer *blob = bufnew();
+ blob->size = 5 + fd.f3.nranges * 3;
+ NEW(blob->data, blob->size);
+ blob->data[0] = 3;
+ blob->data[1] = fd.f3.nranges / 256;
+ blob->data[2] = fd.f3.nranges % 256;
+ for (int i = 0; i < fd.f3.nranges; i++)
+ blob->data[3 + 3 * i] = fd.f3.range3[i].first / 256,
+ blob->data[4 + 3 * i] = fd.f3.range3[i].first % 256,
+ blob->data[5 + 3 * i] = fd.f3.range3[i].fd;
+ blob->data[blob->size - 2] = fd.f3.sentinel / 256;
+ blob->data[blob->size - 1] = fd.f3.sentinel % 256;
+ return blob;
+ }
+ default: { return NULL; }
+ }
+}
+
+void cff_extract_FDSelect(uint8_t *data, int32_t offset, uint16_t nchars, cff_FDSelect *fdselect) {
+ switch (data[offset]) {
+ case 0: {
+ fdselect->t = cff_FDSELECT_FORMAT0;
+ fdselect->f0.format = 0;
+ fdselect->s = nchars;
+ NEW(fdselect->f0.fds, nchars);
+
+ for (uint32_t i = 0; i < nchars; i++) {
+ fdselect->f0.fds[i] = gu1(data, offset + 1 + i);
+ }
+ break;
+ }
+ case 3: {
+ fdselect->t = cff_FDSELECT_FORMAT3;
+ fdselect->f3.format = 3;
+ fdselect->f3.nranges = gu2(data, offset + 1);
+ NEW(fdselect->f3.range3, fdselect->f3.nranges);
+
+ for (uint32_t i = 0; i < fdselect->f3.nranges; i++) {
+ fdselect->f3.range3[i].first = gu2(data, offset + 3 + i * 3);
+ fdselect->f3.range3[i].fd = gu1(data, offset + 5 + i * 3);
+ }
+
+ fdselect->f3.sentinel = gu2(data, offset + (fdselect->f3.nranges + 1) * 3);
+ break;
+ }
+ default: {
+ fdselect->t = cff_FDSELECT_UNSPECED;
+ break;
+ }
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,48 @@
+#ifndef CARYLL_cff_FDSELECT_H
+#define CARYLL_cff_FDSELECT_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+#include "cff-util.h"
+#include "cff-value.h"
+
+enum {
+ cff_FDSELECT_FORMAT0,
+ cff_FDSELECT_FORMAT3,
+ cff_FDSELECT_UNSPECED,
+};
+
+typedef struct {
+ uint8_t format;
+ uint8_t *fds;
+} cff_FDSelectFormat0;
+
+typedef struct {
+ uint16_t first;
+ uint8_t fd;
+} cff_FDSelectRangeFormat3;
+
+typedef struct {
+ uint8_t format;
+ uint16_t nranges;
+ cff_FDSelectRangeFormat3 *range3;
+ uint16_t sentinel;
+} cff_FDSelectFormat3;
+
+typedef struct {
+ uint32_t t;
+ uint32_t s;
+ union {
+ cff_FDSelectFormat0 f0;
+ cff_FDSelectFormat3 f3;
+ };
+} cff_FDSelect;
+
+void cff_close_FDSelect(cff_FDSelect fds);
+void cff_extract_FDSelect(uint8_t *data, int32_t offset, uint16_t nchars, cff_FDSelect *fdselect);
+caryll_Buffer *cff_build_FDSelect(cff_FDSelect fd);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,146 @@
+#include "cff-index.h"
+// INDEX util functions
+
+static INLINE void disposeCffIndex(cff_Index *in) {
+ if (in->offset) FREE(in->offset);
+ if (in->data) FREE(in->data);
+}
+
+caryll_standardRefTypeFn(cff_Index, disposeCffIndex);
+
+static uint32_t getIndexLength(const cff_Index *i) {
+ if (i->count != 0)
+ return 3 + (i->offset[i->count] - 1) + ((i->count + 1) * i->offSize);
+ else
+ return 3;
+}
+static void emptyIndex(cff_Index *i) {
+ cff_iIndex.dispose(i);
+ memset(i, 0, sizeof(*i));
+}
+
+static void extractIndex(uint8_t *data, uint32_t pos, cff_Index *in) {
+ in->count = gu2(data, pos);
+ in->offSize = gu1(data, pos + 2);
+
+ if (in->count > 0) {
+ NEW(in->offset, in->count + 1);
+
+ for (arity_t i = 0; i <= in->count; i++) {
+ switch (in->offSize) {
+ case 1:
+ in->offset[i] = gu1(data, pos + 3 + (i * in->offSize));
+ break;
+ case 2:
+ in->offset[i] = gu2(data, pos + 3 + (i * in->offSize));
+ break;
+ case 3:
+ in->offset[i] = gu3(data, pos + 3 + (i * in->offSize));
+ break;
+ case 4:
+ in->offset[i] = gu4(data, pos + 3 + (i * in->offSize));
+ break;
+ }
+ }
+
+ NEW(in->data, in->offset[in->count] - 1);
+ memcpy(in->data, data + pos + 3 + (in->count + 1) * in->offSize, in->offset[in->count] - 1);
+ } else {
+ in->offset = NULL;
+ in->data = NULL;
+ }
+}
+
+static cff_Index *newIndexByCallback(void *context, uint32_t length, caryll_Buffer *(*fn)(void *, uint32_t)) {
+ cff_Index *idx = cff_iIndex.create();
+ idx->count = length;
+ NEW(idx->offset, idx->count + 1);
+ idx->offset[0] = 1;
+ idx->data = NULL;
+
+ size_t used = 0;
+ size_t blank = 0;
+ for (arity_t i = 0; i < length; i++) {
+ caryll_Buffer *blob = fn(context, i);
+ if (blank < blob->size) {
+ used += blob->size;
+ blank = (used >> 1) & 0xFFFFFF;
+ RESIZE(idx->data, used + blank);
+ } else {
+ used += blob->size;
+ blank -= blob->size;
+ }
+ idx->offset[i + 1] = (uint32_t)(blob->size + idx->offset[i]);
+ memcpy(idx->data + idx->offset[i] - 1, blob->data, blob->size);
+ buffree(blob);
+ }
+ idx->offSize = 4;
+ return idx;
+}
+
+static caryll_Buffer *buildIndex(const cff_Index *index) {
+ caryll_Buffer *blob = bufnew();
+ if (!index->count) {
+ bufwrite8(blob, 0);
+ bufwrite8(blob, 0);
+ bufwrite8(blob, 0);
+ return blob;
+ }
+
+ uint32_t lastOffset = index->offset[index->count];
+ uint8_t offSize = 4;
+ if (lastOffset < 0x100) {
+ offSize = 1;
+ } else if (lastOffset < 0x10000) {
+ offSize = 2;
+ } else if (lastOffset < 0x1000000) {
+ offSize = 3;
+ } else {
+ offSize = 4;
+ }
+
+ if (index->count != 0)
+ blob->size = 3 + (index->offset[index->count] - 1) + ((index->count + 1) * offSize);
+ else
+ blob->size = 3;
+
+ NEW(blob->data, blob->size);
+ blob->data[0] = index->count / 256;
+ blob->data[1] = index->count % 256;
+ blob->data[2] = offSize;
+
+ if (index->count > 0) {
+ for (arity_t i = 0; i <= index->count; i++) {
+ switch (offSize) {
+ case 1:
+ blob->data[3 + i] = index->offset[i];
+ break;
+ case 2:
+ blob->data[3 + i * 2] = index->offset[i] / 256;
+ blob->data[4 + i * 2] = index->offset[i] % 256;
+ break;
+ case 3:
+ blob->data[3 + i * 3] = index->offset[i] / 65536;
+ blob->data[4 + i * 3] = (index->offset[i] % 65536) / 256;
+ blob->data[5 + i * 3] = (index->offset[i] % 65536) % 256;
+ break;
+ case 4:
+ blob->data[3 + i * 4] = (index->offset[i] / 65536) / 256;
+ blob->data[4 + i * 4] = (index->offset[i] / 65536) % 256;
+ blob->data[5 + i * 4] = (index->offset[i] % 65536) / 256;
+ blob->data[6 + i * 4] = (index->offset[i] % 65536) % 256;
+ break;
+ }
+ }
+
+ if (index->data != NULL)
+ memcpy(blob->data + 3 + ((index->count + 1) * offSize), index->data, index->offset[index->count] - 1);
+ }
+ blob->cursor = blob->size;
+ return blob;
+}
+
+caryll_ElementInterfaceOf(cff_Index) cff_iIndex = {
+ caryll_standardRefTypeMethods(cff_Index), .getLength = getIndexLength, .empty = emptyIndex, .parse = extractIndex,
+ .fromCallback = newIndexByCallback, .build = buildIndex,
+};
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,33 @@
+#ifndef CARYLL_cff_INDEX_H
+#define CARYLL_cff_INDEX_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+
+#include "cff-util.h"
+#include "cff-value.h"
+
+typedef enum { CFF_INDEX_16, CFF_INDEX_32 } cff_IndexCountType;
+
+typedef struct {
+ cff_IndexCountType countType;
+ arity_t count;
+ uint8_t offSize;
+ uint32_t *offset;
+ uint8_t *data;
+} cff_Index;
+
+extern caryll_ElementInterfaceOf(cff_Index) {
+ caryll_RT(cff_Index);
+ void (*empty)(cff_Index * i);
+ uint32_t (*getLength)(const cff_Index *i);
+ void (*parse)(uint8_t * data, uint32_t pos, cff_Index * in);
+ cff_Index *(*fromCallback)(void *context, uint32_t length, caryll_Buffer *(*fn)(void *, uint32_t));
+ caryll_Buffer *(*build)(const cff_Index *index);
+}
+cff_iIndex;
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-opmean.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-opmean.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-opmean.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,245 @@
+/*
+ operator to string.
+*/
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libcff.h"
+
+const char *op_cff_name(uint32_t op) {
+ switch (op) {
+ case op_version:
+ return "Version";
+ case op_Notice:
+ return "Notice";
+ case op_FullName:
+ return "FullName";
+ case op_FamilyName:
+ return "FamilyName";
+ case op_Weight:
+ return "Weight";
+ case op_FontBBox:
+ return "FontBBox";
+ case op_BlueValues:
+ return "BlueValues";
+ case op_OtherBlues:
+ return "OtherBlues";
+ case op_FamilyBlues:
+ return "FamilyBlues";
+ case op_FamilyOtherBlues:
+ return "FamilyOtherBlues";
+ case op_StdHW:
+ return "StdHW";
+ case op_StdVW:
+ return "StdVW";
+ case op_UniqueID:
+ return "UniqueID";
+ case op_XUID:
+ return "XUID";
+ case op_charset:
+ return "charset";
+ case op_Encoding:
+ return "Encoding";
+ case op_CharStrings:
+ return "CharStrings";
+ case op_Private:
+ return "Private";
+ case op_Subrs:
+ return "Subrs";
+ case op_defaultWidthX:
+ return "defaultWidthX";
+ case op_nominalWidthX:
+ return "nominalWidthX";
+ case op_Copyright:
+ return "Copyright";
+ case op_isFixedPitch:
+ return "isFixedPitch";
+ case op_ItalicAngle:
+ return "ItalicAngle";
+ case op_UnderlinePosition:
+ return "UnderlinePosition";
+ case op_UnderlineThickness:
+ return "UnderlineThickness";
+ case op_PaintType:
+ return "PaintType";
+ case op_CharstringType:
+ return "CharstringType";
+ case op_FontMatrix:
+ return "FontMatrix";
+ case op_StrokeWidth:
+ return "StrokeWidth";
+ case op_BlueScale:
+ return "BlueScale";
+ case op_BlueShift:
+ return "BlueShift";
+ case op_BlueFuzz:
+ return "BlueFuzz";
+ case op_StemSnapH:
+ return "StemSnapH";
+ case op_StemSnapV:
+ return "StemSnapV";
+ case op_ForceBold:
+ return "ForceBold";
+ case op_LanguageGroup:
+ return "LanguageGroup";
+ case op_ExpansionFactor:
+ return "ExpansionFactor";
+ case op_initialRandomSeed:
+ return "initialRandomSeed";
+ case op_SyntheicBase:
+ return "SyntheicBase";
+ case op_PostScript:
+ return "PostScript";
+ case op_BaseFontName:
+ return "BaseFontName";
+ case op_BaseFontBlend:
+ return "BaseFontBlend";
+ case op_ROS:
+ return "ROS";
+ case op_CIDFontVersion:
+ return "CIDFontVersion";
+ case op_CIDFontRevision:
+ return "CIDFontReversion";
+ case op_CIDFontType:
+ return "CIDFontType";
+ case op_CIDCount:
+ return "CIDCount";
+ case op_UIDBase:
+ return "UIDBase";
+ case op_FDArray:
+ return "FDArray";
+ case op_FDSelect:
+ return "FDSelect";
+ case op_FontName:
+ return "FontName";
+ default:
+ return "Unkown";
+ }
+}
+
+const char *op_cs2_name(uint32_t op) {
+ switch (op) {
+ case op_hstem:
+ return "hstem";
+ case op_vstem:
+ return "vstem";
+ case op_vmoveto:
+ return "vmoveto";
+ case op_rlineto:
+ return "rlineto";
+ case op_hlineto:
+ return "hlineto";
+ case op_vlineto:
+ return "vlineto";
+ case op_rrcurveto:
+ return "rrcurveto";
+ case op_callsubr:
+ return "callsubr";
+ case op_return:
+ return "return";
+ case op_endchar:
+ return "endchar";
+ case op_hstemhm:
+ return "hstemhm";
+ case op_hintmask:
+ return "hintmask";
+ case op_cntrmask:
+ return "cntrmask";
+ case op_rmoveto:
+ return "rmoveto";
+ case op_hmoveto:
+ return "hmoveto";
+ case op_vstemhm:
+ return "vstemhm";
+ case op_rcurveline:
+ return "rcurveline";
+ case op_rlinecurve:
+ return "rlinecurve";
+ case op_vvcurveto:
+ return "vvcurveto";
+ case op_hhcurveto:
+ return "hhcurveto";
+ case op_callgsubr:
+ return "callgsubr";
+ case op_vhcurveto:
+ return "vhcurveto";
+ case op_hvcurveto:
+ return "hvcurveto";
+ case op_and:
+ return "and";
+ case op_or:
+ return "or";
+ case op_not:
+ return "not";
+ case op_abs:
+ return "abs";
+ case op_add:
+ return "add";
+ case op_sub:
+ return "sub";
+ case op_div:
+ return "div";
+ case op_neg:
+ return "neg";
+ case op_eq:
+ return "eq";
+ case op_drop:
+ return "drop";
+ case op_put:
+ return "put";
+ case op_get:
+ return "get";
+ case op_ifelse:
+ return "ifelse";
+ case op_random:
+ return "random";
+ case op_mul:
+ return "mul";
+ case op_sqrt:
+ return "sqrt";
+ case op_dup:
+ return "dup";
+ case op_exch:
+ return "exch";
+ case op_index:
+ return "index";
+ case op_roll:
+ return "roll";
+ case op_hflex:
+ return "hflex";
+ case op_flex:
+ return "fles";
+ case op_hflex1:
+ return "hflex1";
+ case op_flex1:
+ return "flex1";
+ default:
+ return "Unknown";
+ }
+}
+
+uint8_t cff_getStandardArity(uint32_t op) {
+ switch (op) {
+ case op_rlineto:
+ case op_rmoveto:
+ return 2;
+ case op_hlineto:
+ case op_vlineto:
+ return 1;
+ case op_hhcurveto:
+ case op_vvcurveto:
+ case op_hvcurveto:
+ case op_vhcurveto:
+ return 4;
+ case op_rrcurveto:
+ return 6;
+ case op_hintmask:
+ case op_cntrmask:
+ return 0;
+ default:
+ return 2;
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-parser.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-parser.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-parser.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,847 @@
+/*
+ Parser/Linter of CFF font, notable references:
+ * Technical Note #5176: The Compact Font Format Specification
+ * Technical Note #5177: The Type 2 Charstring Format
+ * Adobe TinTin
+*/
+
+#include <math.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libcff.h"
+
+static void parse_encoding(cff_File *cff, int32_t offset, cff_Encoding *enc) {
+ uint8_t *data = cff->raw_data;
+
+ if (offset == cff_ENC_STANDARD)
+ enc->t = cff_ENC_STANDARD;
+ else if (offset == cff_ENC_EXPERT)
+ enc->t = cff_ENC_EXPERT;
+ else {
+ switch (data[offset]) {
+ case 0:
+ enc->t = cff_ENC_FORMAT0;
+ {
+ enc->f0.format = 0;
+ enc->f0.ncodes = data[offset + 1];
+ NEW(enc->f0.code, enc->f0.ncodes);
+
+ for (uint32_t i = 0; i < enc->f0.ncodes; i++)
+ enc->f0.code[i] = data[offset + 2 + i];
+ }
+ break;
+ case 1:
+ enc->t = cff_ENC_FORMAT1;
+ {
+ enc->f1.format = 1;
+ enc->f1.nranges = data[offset + 1];
+ NEW(enc->f1.range1, enc->f1.nranges);
+
+ for (uint32_t i = 0; i < enc->f1.nranges; i++)
+ enc->f1.range1[i].first = data[offset + 2 + i * 2],
+ enc->f1.range1[i].nleft = data[offset + 3 + i * 2];
+ }
+ break;
+ default:
+ enc->t = cff_ENC_FORMAT_SUPPLEMENT;
+ {
+ enc->ns.nsup = data[offset];
+ NEW(enc->ns.supplement, enc->ns.nsup);
+
+ for (uint32_t i = 0; i < enc->ns.nsup; i++)
+ enc->ns.supplement[i].code = data[offset + 1 + i * 3],
+ enc->ns.supplement[i].glyph = gu2(data, offset + 2 + i * 3);
+ }
+ break;
+ }
+ }
+}
+
+static void parse_cff_bytecode(cff_File *cff, const otfcc_Options *options) {
+ uint32_t pos;
+ int32_t offset;
+
+ /* Header */
+ cff->head.major = gu1(cff->raw_data, 0);
+ cff->head.minor = gu1(cff->raw_data, 1);
+ cff->head.hdrSize = gu1(cff->raw_data, 2);
+ cff->head.offSize = gu1(cff->raw_data, 3);
+
+ /* Name INDEX */
+ pos = cff->head.hdrSize;
+ cff_iIndex.parse(cff->raw_data, pos, &cff->name);
+
+ /* Top Dict INDEX */
+ pos = 4 + cff_iIndex.getLength(&cff->name);
+ cff_iIndex.parse(cff->raw_data, pos, &cff->top_dict);
+
+ /** LINT CFF FONTSET **/
+
+ if (cff->name.count != cff->top_dict.count)
+ logWarning("[libcff] Bad CFF font: (%d, name), (%d, top_dict).\n", cff->name.count,
+ cff->top_dict.count);
+
+ /* String INDEX */
+ pos = 4 + cff_iIndex.getLength(&cff->name) + cff_iIndex.getLength(&cff->top_dict);
+ cff_iIndex.parse(cff->raw_data, pos, &cff->string);
+
+ /* Global Subr INDEX */
+ pos = 4 + cff_iIndex.getLength(&cff->name) + cff_iIndex.getLength(&cff->top_dict) +
+ cff_iIndex.getLength(&cff->string);
+ cff_iIndex.parse(cff->raw_data, pos, &cff->global_subr);
+
+ if (cff->top_dict.data != NULL) {
+ int32_t offset;
+
+ // cff->topdict.dict = calloc(1, sizeof(cff_Dict));
+ // cff->topdict.dict = cff_extract_Dict(cff->top_dict.data, cff->top_dict.offset[1] -
+ // cff->top_dict.offset[0]);
+
+ /* CharStrings INDEX */
+ offset =
+ cff_iDict
+ .parseDictKey(cff->top_dict.data, cff->top_dict.offset[1] - cff->top_dict.offset[0],
+ op_CharStrings, 0)
+ .i;
+
+ if (offset != -1) {
+ cff_iIndex.parse(cff->raw_data, offset, &cff->char_strings);
+ cff->cnt_glyph = cff->char_strings.count;
+ } else {
+ cff_iIndex.empty(&cff->char_strings);
+ logWarning("[libcff] Bad CFF font: no any glyph data.\n");
+ }
+
+ /* Encodings */
+ offset =
+ cff_iDict
+ .parseDictKey(cff->top_dict.data, cff->top_dict.offset[1] - cff->top_dict.offset[0],
+ op_Encoding, 0)
+ .i;
+
+ if (offset != -1) {
+ parse_encoding(cff, offset, &cff->encodings);
+ } else {
+ cff->encodings.t = cff_ENC_UNSPECED;
+ }
+
+ /* Charsets */
+ offset = cff_iDict
+ .parseDictKey(cff->top_dict.data,
+ cff->top_dict.offset[1] - cff->top_dict.offset[0], op_charset, 0)
+ .i;
+
+ if (offset != -1) {
+ cff_extract_Charset(cff->raw_data, offset, cff->char_strings.count, &cff->charsets);
+ } else {
+ cff->charsets.t = cff_CHARSET_UNSPECED;
+ }
+
+ /* FDSelect */
+ offset =
+ cff_iDict
+ .parseDictKey(cff->top_dict.data, cff->top_dict.offset[1] - cff->top_dict.offset[0],
+ op_FDSelect, 0)
+ .i;
+
+ if (cff->char_strings.count && offset != -1) {
+ cff_extract_FDSelect(cff->raw_data, offset, cff->char_strings.count, &cff->fdselect);
+ } else {
+ cff->fdselect.t = cff_FDSELECT_UNSPECED;
+ }
+
+ /* Font Dict INDEX */
+ offset = cff_iDict
+ .parseDictKey(cff->top_dict.data,
+ cff->top_dict.offset[1] - cff->top_dict.offset[0], op_FDArray, 0)
+ .i;
+
+ if (offset != -1) {
+ cff_iIndex.parse(cff->raw_data, offset, &cff->font_dict);
+ } else {
+ cff_iIndex.empty(&cff->font_dict);
+ }
+ }
+
+ /* Private and Local Subr */
+ {
+ int32_t private_len = -1;
+ int32_t private_off = -1;
+
+ if (cff->top_dict.data != NULL) {
+ private_len =
+ cff_iDict
+ .parseDictKey(cff->top_dict.data,
+ cff->top_dict.offset[1] - cff->top_dict.offset[0], op_Private, 0)
+ .i;
+ private_off =
+ cff_iDict
+ .parseDictKey(cff->top_dict.data,
+ cff->top_dict.offset[1] - cff->top_dict.offset[0], op_Private, 1)
+ .i;
+ }
+
+ if (private_off != -1 && private_len != -1) {
+ offset =
+ cff_iDict.parseDictKey(cff->raw_data + private_off, private_len, op_Subrs, 0).i;
+
+ if (offset != -1)
+ cff_iIndex.parse(cff->raw_data, private_off + offset, &cff->local_subr);
+ else
+ cff_iIndex.empty(&cff->local_subr);
+ } else {
+ cff_iIndex.empty(&cff->local_subr);
+ }
+ }
+}
+
+cff_File *cff_openStream(uint8_t *data, uint32_t len, const otfcc_Options *options) {
+ cff_File *file;
+ NEW(file);
+
+ NEW(file->raw_data, len);
+ memcpy(file->raw_data, data, len);
+ file->raw_length = len;
+ file->cnt_glyph = 0;
+ parse_cff_bytecode(file, options);
+
+ return file;
+}
+
+void cff_close(cff_File *file) {
+ if (file != NULL) {
+ if (file->raw_data != NULL) FREE(file->raw_data);
+
+ cff_iIndex.dispose(&file->name);
+ cff_iIndex.dispose(&file->top_dict);
+ cff_iIndex.dispose(&file->string);
+ cff_iIndex.dispose(&file->global_subr);
+ cff_iIndex.dispose(&file->char_strings);
+ cff_iIndex.dispose(&file->font_dict);
+ cff_iIndex.dispose(&file->local_subr);
+
+ switch (file->encodings.t) {
+ case cff_ENC_STANDARD:
+ case cff_ENC_EXPERT:
+ case cff_ENC_UNSPECED:
+ break;
+ case cff_ENC_FORMAT0:
+ if (file->encodings.f0.code != NULL) FREE(file->encodings.f0.code);
+ break;
+ case cff_ENC_FORMAT1:
+ if (file->encodings.f1.range1 != NULL) FREE(file->encodings.f1.range1);
+ break;
+ case cff_ENC_FORMAT_SUPPLEMENT:
+ if (file->encodings.ns.supplement != NULL) FREE(file->encodings.ns.supplement);
+ break;
+ }
+
+ cff_close_Charset(file->charsets);
+ cff_close_FDSelect(file->fdselect);
+
+ FREE(file);
+ }
+}
+
+uint8_t cff_parseSubr(uint16_t idx, uint8_t *raw, cff_Index fdarray, cff_FDSelect select,
+ cff_Index *subr) {
+ uint8_t fd = 0;
+ int32_t off_private, len_private;
+ int32_t off_subr;
+
+ switch (select.t) {
+ case cff_FDSELECT_FORMAT0:
+ fd = select.f0.fds[idx];
+ break;
+ case cff_FDSELECT_FORMAT3:
+ for (int i = 0; i < select.f3.nranges - 1; i++)
+ if (idx >= select.f3.range3[i].first && idx < select.f3.range3[i + 1].first)
+ fd = select.f3.range3[i].fd;
+ if (idx >= select.f3.range3[select.f3.nranges - 1].first && idx < select.f3.sentinel)
+ fd = select.f3.range3[select.f3.nranges - 1].fd;
+ break;
+ case cff_FDSELECT_UNSPECED:
+ fd = 0;
+ break;
+ }
+
+ off_private = cff_iDict
+ .parseDictKey(fdarray.data + fdarray.offset[fd] - 1,
+ fdarray.offset[fd + 1] - fdarray.offset[fd], op_Private, 1)
+ .i;
+ len_private = cff_iDict
+ .parseDictKey(fdarray.data + fdarray.offset[fd] - 1,
+ fdarray.offset[fd + 1] - fdarray.offset[fd], op_Private, 0)
+ .i;
+
+ if (off_private != -1 && len_private != -1) {
+ off_subr = cff_iDict.parseDictKey(raw + off_private, len_private, op_Subrs, 0).i;
+
+ if (off_subr != -1) {
+ cff_iIndex.parse(raw, off_private + off_subr, subr);
+ } else {
+ cff_iIndex.empty(subr);
+ }
+ } else {
+ cff_iIndex.empty(subr);
+ }
+
+ return fd;
+}
+
+static inline uint16_t compute_subr_bias(uint16_t cnt) {
+ if (cnt < 1240)
+ return 107;
+ else if (cnt < 33900)
+ return 1131;
+ else
+ return 32768;
+}
+
+/*
+ CharString program:
+ w? {hs* vs* cm* hm* mt subpath}? {mt subpath}* endchar
+*/
+static void reverseStack(cff_Stack *stack, uint8_t left, uint8_t right) {
+ cff_Value *p1 = stack->stack + left;
+ cff_Value *p2 = stack->stack + right;
+ while (p1 < p2) {
+ cff_Value temp = *p1;
+ *p1 = *p2;
+ *p2 = temp;
+ p1++;
+ p2--;
+ }
+}
+static void callback_nopSetWidth(void *context, double width) {}
+static void callback_nopNewContour(void *context) {}
+static void callback_nopLineTo(void *context, double x1, double y1) {}
+static void callback_nopCurveTo(void *context, double x1, double y1, double x2, double y2,
+ double x3, double y3) {}
+static void callback_nopsetHint(void *context, bool isVertical, double position, double width) {}
+static void callback_nopsetMask(void *context, bool isContourMask, bool *mask) {
+ FREE(mask);
+}
+static double callback_nopgetrand(void *context) {
+ return 0;
+}
+#define CHECK_STACK_TOP(op, n) \
+ { \
+ if (stack->index < n) { \
+ logWarning("[libcff] Stack cannot provide enough parameters for %s (%04x). This " \
+ "operation is ignored.\n", \
+ #op, op); \
+ break; \
+ } \
+ }
+
+// CFF charastring parser
+void cff_parseOutline(uint8_t *data, uint32_t len, cff_Index gsubr, cff_Index lsubr,
+ cff_Stack *stack, void *outline, cff_IOutlineBuilder methods,
+ const otfcc_Options *options) {
+ uint16_t gsubr_bias = compute_subr_bias(gsubr.count);
+ uint16_t lsubr_bias = compute_subr_bias(lsubr.count);
+ uint8_t *start = data;
+ uint32_t advance, i, cnt_bezier;
+ cff_Value val;
+
+ void (*setWidth)(void *context, double width) = methods.setWidth;
+ void (*newContour)(void *context) = methods.newContour;
+ void (*lineTo)(void *context, double x1, double y1) = methods.lineTo;
+ void (*curveTo)(void *context, double x1, double y1, double x2, double y2, double x3,
+ double y3) = methods.curveTo;
+ void (*setHint)(void *context, bool isVertical, double position, double width) =
+ methods.setHint;
+ void (*setMask)(void *context, bool isContourMask, bool *mask) = methods.setMask;
+ double (*getrand)(void *context) = methods.getrand;
+
+ if (!setWidth) setWidth = callback_nopSetWidth;
+ if (!newContour) newContour = callback_nopNewContour;
+ if (!lineTo) lineTo = callback_nopLineTo;
+ if (!curveTo) curveTo = callback_nopCurveTo;
+ if (!setHint) setHint = callback_nopsetHint;
+ if (!setMask) setMask = callback_nopsetMask;
+ if (!getrand) getrand = callback_nopgetrand;
+
+ while (start < data + len) {
+ advance = cff_decodeCS2Token(start, &val);
+
+ switch (val.t) {
+ case CS2_OPERATOR:
+ switch (val.i) {
+ case op_hstem:
+ case op_vstem:
+ case op_hstemhm:
+ case op_vstemhm:
+ if (stack->index % 2) setWidth(outline, stack->stack[0].d);
+ stack->stem += stack->index >> 1;
+ double hintBase = 0;
+ for (uint16_t j = stack->index % 2; j < stack->index; j += 2) {
+ double pos = stack->stack[j].d;
+ double width = stack->stack[j + 1].d;
+ setHint(outline, (val.i == op_vstem || val.i == op_vstemhm),
+ pos + hintBase, width);
+ hintBase += pos + width;
+ }
+ stack->index = 0;
+ break;
+ case op_hintmask:
+ case op_cntrmask: {
+ if (stack->index % 2) setWidth(outline, stack->stack[0].d);
+ bool isVertical = stack->stem > 0;
+ stack->stem += stack->index >> 1;
+ double hintBase = 0;
+ for (uint16_t j = stack->index % 2; j < stack->index; j += 2) {
+ double pos = stack->stack[j].d;
+ double width = stack->stack[j + 1].d;
+ setHint(outline, isVertical, pos + hintBase, width);
+ hintBase += pos + width;
+ }
+ uint32_t maskLength = (stack->stem + 7) >> 3;
+ bool *mask;
+ NEW(mask, stack->stem + 7);
+ for (uint32_t byte = 0; byte < maskLength; byte++) {
+ uint8_t maskByte = start[advance + byte];
+ mask[(byte << 3) + 0] = maskByte >> 7 & 1;
+ mask[(byte << 3) + 1] = maskByte >> 6 & 1;
+ mask[(byte << 3) + 2] = maskByte >> 5 & 1;
+ mask[(byte << 3) + 3] = maskByte >> 4 & 1;
+ mask[(byte << 3) + 4] = maskByte >> 3 & 1;
+ mask[(byte << 3) + 5] = maskByte >> 2 & 1;
+ mask[(byte << 3) + 6] = maskByte >> 1 & 1;
+ mask[(byte << 3) + 7] = maskByte >> 0 & 1;
+ }
+ setMask(outline, (val.i == op_cntrmask), mask);
+ advance += maskLength;
+ stack->index = 0;
+ break;
+ }
+
+ case op_vmoveto: {
+ CHECK_STACK_TOP(op_vmoveto, 1);
+ if (stack->index > 1) setWidth(outline, stack->stack[stack->index - 2].d);
+ newContour(outline);
+ lineTo(outline, 0.0, stack->stack[stack->index - 1].d);
+ stack->index = 0;
+ break;
+ }
+ case op_rmoveto: {
+ CHECK_STACK_TOP(op_rmoveto, 2);
+ if (stack->index > 2) setWidth(outline, stack->stack[stack->index - 3].d);
+ newContour(outline);
+ lineTo(outline, stack->stack[stack->index - 2].d,
+ stack->stack[stack->index - 1].d);
+ stack->index = 0;
+ break;
+ }
+ case op_hmoveto: {
+ CHECK_STACK_TOP(op_hmoveto, 1);
+ if (stack->index > 1) setWidth(outline, stack->stack[stack->index - 2].d);
+ newContour(outline);
+ lineTo(outline, stack->stack[stack->index - 1].d, 0.0);
+ stack->index = 0;
+ break;
+ }
+ case op_endchar: {
+ if (stack->index > 0) setWidth(outline, stack->stack[stack->index - 1].d);
+ break;
+ }
+ case op_rlineto: {
+ for (i = 0; i < stack->index; i += 2)
+ lineTo(outline, stack->stack[i].d, stack->stack[i + 1].d);
+ stack->index = 0;
+ break;
+ }
+ case op_vlineto: {
+ if (stack->index % 2 == 1) {
+ lineTo(outline, 0.0, stack->stack[0].d);
+ for (i = 1; i < stack->index; i += 2) {
+ lineTo(outline, stack->stack[i].d, 0.0);
+ lineTo(outline, 0.0, stack->stack[i + 1].d);
+ }
+ } else {
+ for (i = 0; i < stack->index; i += 2) {
+ lineTo(outline, 0.0, stack->stack[i].d);
+ lineTo(outline, stack->stack[i + 1].d, 0.0);
+ }
+ }
+ stack->index = 0;
+ break;
+ }
+ case op_hlineto: {
+ if (stack->index % 2 == 1) {
+ lineTo(outline, stack->stack[0].d, 0.0);
+ for (i = 1; i < stack->index; i += 2) {
+ lineTo(outline, 0.0, stack->stack[i].d);
+ lineTo(outline, stack->stack[i + 1].d, 0.0);
+ }
+ } else {
+ for (i = 0; i < stack->index; i += 2) {
+ lineTo(outline, stack->stack[i].d, 0.0);
+ lineTo(outline, 0.0, stack->stack[i + 1].d);
+ }
+ }
+ stack->index = 0;
+ break;
+ }
+ case op_rrcurveto: {
+ for (i = 0; i < stack->index; i += 6)
+ curveTo(outline, stack->stack[i].d, stack->stack[i + 1].d,
+ stack->stack[i + 2].d, stack->stack[i + 3].d,
+ stack->stack[i + 4].d, stack->stack[i + 5].d);
+ stack->index = 0;
+ break;
+ }
+ case op_rcurveline: {
+ for (i = 0; i < stack->index - 2; i += 6)
+ curveTo(outline, stack->stack[i].d, stack->stack[i + 1].d,
+ stack->stack[i + 2].d, stack->stack[i + 3].d,
+ stack->stack[i + 4].d, stack->stack[i + 5].d);
+ lineTo(outline, stack->stack[stack->index - 2].d,
+ stack->stack[stack->index - 1].d);
+ stack->index = 0;
+ break;
+ }
+ case op_rlinecurve: {
+ for (i = 0; i < stack->index - 6; i += 2)
+ lineTo(outline, stack->stack[i].d, stack->stack[i + 1].d);
+ curveTo(outline, stack->stack[stack->index - 6].d,
+ stack->stack[stack->index - 5].d, stack->stack[stack->index - 4].d,
+ stack->stack[stack->index - 3].d, stack->stack[stack->index - 2].d,
+ stack->stack[stack->index - 1].d);
+ stack->index = 0;
+ break;
+ }
+ case op_vvcurveto: {
+ if (stack->index % 4 == 1) {
+ curveTo(outline, stack->stack[0].d, stack->stack[1].d,
+ stack->stack[2].d, stack->stack[3].d, 0.0, stack->stack[4].d);
+ for (i = 5; i < stack->index; i += 4)
+ curveTo(outline, 0.0, stack->stack[i].d, stack->stack[i + 1].d,
+ stack->stack[i + 2].d, 0.0, stack->stack[i + 3].d);
+ } else {
+ for (i = 0; i < stack->index; i += 4)
+ curveTo(outline, 0.0, stack->stack[i].d, stack->stack[i + 1].d,
+ stack->stack[i + 2].d, 0.0, stack->stack[i + 3].d);
+ }
+ stack->index = 0;
+ break;
+ }
+ case op_hhcurveto: {
+ if (stack->index % 4 == 1) {
+ curveTo(outline, stack->stack[1].d, stack->stack[0].d,
+ stack->stack[2].d, stack->stack[3].d, stack->stack[4].d, 0.0);
+ for (i = 5; i < stack->index; i += 4)
+ curveTo(outline, stack->stack[i].d, 0.0, stack->stack[i + 1].d,
+ stack->stack[i + 2].d, stack->stack[i + 3].d, 0.0);
+ } else {
+ for (i = 0; i < stack->index; i += 4)
+ curveTo(outline, stack->stack[i].d, 0.0, stack->stack[i + 1].d,
+ stack->stack[i + 2].d, stack->stack[i + 3].d, 0.0);
+ }
+ stack->index = 0;
+ break;
+ }
+ case op_vhcurveto: {
+ if (stack->index % 4 == 1)
+ cnt_bezier = (stack->index - 5) / 4;
+ else
+ cnt_bezier = (stack->index / 4);
+
+ for (i = 0; i < 4 * cnt_bezier; i += 4) {
+ if ((i / 4) % 2 == 0)
+ curveTo(outline, 0.0, stack->stack[i].d, stack->stack[i + 1].d,
+ stack->stack[i + 2].d, stack->stack[i + 3].d, 0.0);
+ else
+ curveTo(outline, stack->stack[i].d, 0.0, stack->stack[i + 1].d,
+ stack->stack[i + 2].d, 0.0, stack->stack[i + 3].d);
+ }
+ if (stack->index % 8 == 5) {
+ curveTo(
+ outline, 0.0, stack->stack[stack->index - 5].d,
+ stack->stack[stack->index - 4].d, stack->stack[stack->index - 3].d,
+ stack->stack[stack->index - 2].d, stack->stack[stack->index - 1].d);
+ }
+ if (stack->index % 8 == 1) {
+ curveTo(
+ outline, stack->stack[stack->index - 5].d, 0.0,
+ stack->stack[stack->index - 4].d, stack->stack[stack->index - 3].d,
+ stack->stack[stack->index - 1].d, stack->stack[stack->index - 2].d);
+ }
+ stack->index = 0;
+ break;
+ }
+ case op_hvcurveto: {
+ if (stack->index % 4 == 1)
+ cnt_bezier = (stack->index - 5) / 4;
+ else
+ cnt_bezier = (stack->index / 4);
+
+ for (i = 0; i < 4 * cnt_bezier; i += 4) {
+ if ((i / 4) % 2 == 0)
+ curveTo(outline, stack->stack[i].d, 0.0, stack->stack[i + 1].d,
+ stack->stack[i + 2].d, 0.0, stack->stack[i + 3].d);
+ else
+ curveTo(outline, 0.0, stack->stack[i].d, stack->stack[i + 1].d,
+ stack->stack[i + 2].d, stack->stack[i + 3].d, 0.0);
+ }
+
+ if (stack->index % 8 == 5) {
+ curveTo(
+ outline, stack->stack[stack->index - 5].d, 0.0,
+ stack->stack[stack->index - 4].d, stack->stack[stack->index - 3].d,
+ stack->stack[stack->index - 1].d, stack->stack[stack->index - 2].d);
+ }
+ if (stack->index % 8 == 1) {
+ curveTo(
+ outline, 0.0, stack->stack[stack->index - 5].d,
+ stack->stack[stack->index - 4].d, stack->stack[stack->index - 3].d,
+ stack->stack[stack->index - 2].d, stack->stack[stack->index - 1].d);
+ }
+ stack->index = 0;
+ break;
+ }
+ case op_hflex: {
+ CHECK_STACK_TOP(op_hflex, 7);
+ curveTo(outline, stack->stack[0].d, 0.0, stack->stack[1].d,
+ stack->stack[2].d, stack->stack[3].d, 0.0);
+ curveTo(outline, stack->stack[4].d, 0.0, stack->stack[5].d,
+ -stack->stack[2].d, stack->stack[6].d, 0.0);
+ stack->index = 0;
+ break;
+ }
+ case op_flex: {
+ CHECK_STACK_TOP(op_flex, 12);
+ curveTo(outline, stack->stack[0].d, stack->stack[1].d, stack->stack[2].d,
+ stack->stack[3].d, stack->stack[4].d, stack->stack[5].d);
+ curveTo(outline, stack->stack[6].d, stack->stack[7].d, stack->stack[8].d,
+ stack->stack[9].d, stack->stack[10].d, stack->stack[11].d);
+ stack->index = 0;
+ break;
+ }
+ case op_hflex1: {
+ CHECK_STACK_TOP(op_hflex1, 9);
+ curveTo(outline, stack->stack[0].d, stack->stack[1].d, stack->stack[2].d,
+ stack->stack[3].d, stack->stack[4].d, 0.0);
+ curveTo(outline, stack->stack[5].d, 0.0, stack->stack[6].d,
+ stack->stack[7].d, stack->stack[8].d,
+ -(stack->stack[1].d + stack->stack[3].d + stack->stack[7].d));
+ stack->index = 0;
+ break;
+ }
+ case op_flex1: {
+ CHECK_STACK_TOP(op_flex1, 11);
+ double dx = stack->stack[0].d + stack->stack[2].d + stack->stack[4].d +
+ stack->stack[6].d + stack->stack[8].d;
+ double dy = stack->stack[1].d + stack->stack[3].d + stack->stack[5].d +
+ stack->stack[7].d + stack->stack[9].d;
+ if (fabs(dx) > fabs(dy)) {
+ dx = stack->stack[10].d;
+ dy = -dy;
+ } else {
+ dx = -dx;
+ dy = stack->stack[10].d;
+ }
+ curveTo(outline, stack->stack[0].d, stack->stack[1].d, stack->stack[2].d,
+ stack->stack[3].d, stack->stack[4].d, stack->stack[5].d);
+ curveTo(outline, stack->stack[6].d, stack->stack[7].d, stack->stack[8].d,
+ stack->stack[9].d, dx, dy);
+ stack->index = 0;
+ break;
+ }
+ case op_and: {
+ CHECK_STACK_TOP(op_and, 2);
+ double num1 = stack->stack[stack->index - 1].d;
+ double num2 = stack->stack[stack->index - 2].d;
+ stack->stack[stack->index - 2].d = (num1 && num2) ? 1.0 : 0.0;
+ stack->index -= 1;
+ break;
+ }
+ case op_or: {
+ CHECK_STACK_TOP(op_or, 2);
+ double num1 = stack->stack[stack->index - 1].d;
+ double num2 = stack->stack[stack->index - 2].d;
+ stack->stack[stack->index - 2].d = (num1 || num2) ? 1.0 : 0.0;
+ stack->index -= 1;
+ break;
+ }
+ case op_not: {
+ CHECK_STACK_TOP(op_not, 1);
+ double num = stack->stack[stack->index - 1].d;
+ stack->stack[stack->index - 1].d = num ? 0.0 : 1.0;
+ break;
+ }
+ case op_abs: {
+ CHECK_STACK_TOP(op_abs, 1);
+ double num = stack->stack[stack->index - 1].d;
+ stack->stack[stack->index - 1].d = (num < 0.0) ? -num : num;
+ break;
+ }
+ case op_add: {
+ CHECK_STACK_TOP(op_add, 2);
+ double num1 = stack->stack[stack->index - 1].d;
+ double num2 = stack->stack[stack->index - 2].d;
+ stack->stack[stack->index - 2].d = num1 + num2;
+ stack->index -= 1;
+ break;
+ }
+ case op_sub: {
+ CHECK_STACK_TOP(op_sub, 2);
+ double num1 = stack->stack[stack->index - 2].d;
+ double num2 = stack->stack[stack->index - 1].d;
+ stack->stack[stack->index - 2].d = num1 - num2;
+ stack->index -= 1;
+ break;
+ }
+ case op_div: {
+ CHECK_STACK_TOP(op_div, 2);
+ double num1 = stack->stack[stack->index - 2].d;
+ double num2 = stack->stack[stack->index - 1].d;
+ stack->stack[stack->index - 2].d = num1 / num2;
+ stack->index -= 1;
+ break;
+ }
+ case op_neg: {
+ CHECK_STACK_TOP(op_neg, 1);
+ double num = stack->stack[stack->index - 1].d;
+ stack->stack[stack->index - 1].d = -num;
+ break;
+ }
+ case op_eq: {
+ CHECK_STACK_TOP(op_eq, 2);
+ double num1 = stack->stack[stack->index - 1].d;
+ double num2 = stack->stack[stack->index - 2].d;
+ stack->stack[stack->index - 2].d = (num1 == num2) ? 1.0 : 0.0;
+ stack->index -= 1;
+ break;
+ }
+ case op_drop: {
+ CHECK_STACK_TOP(op_drop, 1);
+ stack->index -= 1;
+ break;
+ }
+ case op_put: {
+ CHECK_STACK_TOP(op_put, 2);
+ double val = stack->stack[stack->index - 2].d;
+ int32_t i = (int32_t)stack->stack[stack->index - 1].d;
+ stack->transient[i % type2_transient_array].d = val;
+ stack->index -= 2;
+ break;
+ }
+ case op_get: {
+ CHECK_STACK_TOP(op_get, 1);
+ int32_t i = (int32_t)stack->stack[stack->index - 1].d;
+ stack->stack[stack->index - 1].d =
+ stack->transient[i % type2_transient_array].d;
+ break;
+ }
+ case op_ifelse: {
+ CHECK_STACK_TOP(op_ifelse, 4);
+ double v2 = stack->stack[stack->index - 1].d;
+ double v1 = stack->stack[stack->index - 2].d;
+ double s2 = stack->stack[stack->index - 3].d;
+ double s1 = stack->stack[stack->index - 4].d;
+ stack->stack[stack->index - 4].d = (v1 <= v2) ? s1 : s2;
+ stack->index -= 3;
+ break;
+ }
+ case op_random: {
+ // Chosen from a fair dice
+ // TODO: use a real randomizer
+ stack->stack[stack->index].t = cff_DOUBLE;
+ stack->stack[stack->index].d = getrand(outline);
+ stack->index += 1;
+ break;
+ }
+ case op_mul: {
+ CHECK_STACK_TOP(op_mul, 2);
+ double num1 = stack->stack[stack->index - 1].d;
+ double num2 = stack->stack[stack->index - 2].d;
+ stack->stack[stack->index - 2].d = num1 * num2;
+ stack->index -= 1;
+ break;
+ }
+ case op_sqrt: {
+ CHECK_STACK_TOP(op_sqrt, 1);
+ double num = stack->stack[stack->index - 1].d;
+ stack->stack[stack->index - 1].d = sqrt(num);
+ break;
+ }
+ case op_dup: {
+ CHECK_STACK_TOP(op_dup, 1);
+ stack->stack[stack->index] = stack->stack[stack->index - 1];
+ stack->index += 1;
+ break;
+ }
+ case op_exch: {
+ CHECK_STACK_TOP(op_exch, 2);
+ double num1 = stack->stack[stack->index - 1].d;
+ double num2 = stack->stack[stack->index - 2].d;
+ stack->stack[stack->index - 1].d = num2;
+ stack->stack[stack->index - 2].d = num1;
+ break;
+ }
+ case op_index: {
+ CHECK_STACK_TOP(op_index, 2);
+ uint8_t n = stack->index - 1;
+ uint8_t j = n - 1 - (uint8_t)(stack->stack[n].d) % n;
+ stack->stack[n] = stack->stack[j];
+ break;
+ }
+ case op_roll: {
+ CHECK_STACK_TOP(op_roll, 2);
+ int32_t j = stack->stack[stack->index - 1].d;
+ uint32_t n = stack->stack[stack->index - 2].d;
+ CHECK_STACK_TOP(op_roll, 2 + n);
+ j = -j % n;
+ if (j < 0) j += n;
+ if (!j) break;
+ uint8_t last = stack->index - 3;
+ uint8_t first = stack->index - 2 - n;
+
+ reverseStack(stack, first, last);
+ reverseStack(stack, last - j + 1, last);
+ reverseStack(stack, first, last - j);
+ stack->index -= 2;
+ break;
+ }
+ case op_return:
+ return;
+ case op_callsubr: {
+ CHECK_STACK_TOP(op_callsubr, 1);
+ uint32_t subr = (uint32_t)stack->stack[--(stack->index)].d;
+ cff_parseOutline(lsubr.data + lsubr.offset[lsubr_bias + subr] - 1,
+ lsubr.offset[lsubr_bias + subr + 1] -
+ lsubr.offset[lsubr_bias + subr],
+ gsubr, lsubr, stack, outline, methods, options);
+ break;
+ }
+ case op_callgsubr: {
+ CHECK_STACK_TOP(op_callgsubr, 1);
+ uint32_t subr = (uint32_t)stack->stack[--(stack->index)].d;
+ cff_parseOutline(gsubr.data + gsubr.offset[gsubr_bias + subr] - 1,
+ gsubr.offset[gsubr_bias + subr + 1] -
+ gsubr.offset[gsubr_bias + subr],
+ gsubr, lsubr, stack, outline, methods, options);
+ break;
+ }
+ default: {
+ logWarning("Warning: unknown operator %d occurs in Type 2 CharString. It "
+ "may caused by file corruption.",
+ val.i);
+ return;
+ }
+ }
+ break;
+ case CS2_OPERAND:
+ case CS2_FRACTION:
+ stack->stack[(stack->index)++] = val;
+ break;
+ }
+
+ start += advance;
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-string.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-string.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-string.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,411 @@
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libcff.h"
+
+static const char *const string_standard[391] = {
+ ".notdef",
+ "space",
+ "exclam",
+ "quotedbl",
+ "numbersign",
+ "dollar",
+ "percent",
+ "ampersand",
+ "quoteright",
+ "parenleft",
+ "parenright",
+ "asterisk",
+ "plus",
+ "comma",
+ "hyphen",
+ "period",
+ "slash",
+ "zero",
+ "one",
+ "two",
+ "three",
+ "four",
+ "five",
+ "six",
+ "seven",
+ "eight",
+ "nine",
+ "colon",
+ "semicolon",
+ "less",
+ "equal",
+ "greater",
+ "question",
+ "at",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "G",
+ "H",
+ "I",
+ "J",
+ "K",
+ "L",
+ "M",
+ "N",
+ "O",
+ "P",
+ "Q",
+ "R",
+ "S",
+ "T",
+ "U",
+ "V",
+ "W",
+ "X",
+ "Y",
+ "Z",
+ "bracketleft",
+ "backslash",
+ "bracketright",
+ "asciicircum",
+ "underscore",
+ "quoteleft",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "g",
+ "h",
+ "i",
+ "j",
+ "k",
+ "l",
+ "m",
+ "n",
+ "o",
+ "p",
+ "q",
+ "r",
+ "s",
+ "t",
+ "u",
+ "v",
+ "w",
+ "x",
+ "y",
+ "z",
+ "braceleft",
+ "bar",
+ "braceright",
+ "asciitilde",
+ "exclamdown",
+ "cent",
+ "sterling",
+ "fraction",
+ "yen",
+ "florin",
+ "section",
+ "currency",
+ "quotesingle",
+ "quotedblleft",
+ "guillemotleft",
+ "guilsinglleft",
+ "guilsinglright",
+ "fi",
+ "fl",
+ "endash",
+ "dagger",
+ "daggerdbl",
+ "periodcentered",
+ "paragraph",
+ "bullet",
+ "quotesinglbase",
+ "quotedblbase",
+ "quotedblright",
+ "guillemotright",
+ "ellipsis",
+ "perthousand",
+ "questiondown",
+ "grave",
+ "acute",
+ "circumflex",
+ "tilde",
+ "macron",
+ "breve",
+ "dotaccent",
+ "dieresis",
+ "ring",
+ "cedilla",
+ "hungarumlaut",
+ "ogonek",
+ "caron",
+ "emdash",
+ "AE",
+ "ordfeminine",
+ "Lslash",
+ "Oslash",
+ "OE",
+ "ordmasculine",
+ "ae",
+ "dotlessi",
+ "lslash",
+ "oslash",
+ "oe",
+ "germandbls",
+ "onesuperior",
+ "logicalnot",
+ "mu",
+ "trademark",
+ "Eth",
+ "onehalf",
+ "plusminus",
+ "Thorn",
+ "onequarter",
+ "divide",
+ "brokenbar",
+ "degree",
+ "thorn",
+ "threequarters",
+ "twosuperior",
+ "registered",
+ "minus",
+ "eth",
+ "multiply",
+ "threesuperior",
+ "copyright",
+ "Aacute",
+ "Acircumflex",
+ "Adieresis",
+ "Agrave",
+ "Aring",
+ "Atilde",
+ "Ccedilla",
+ "Eacute",
+ "Ecircumflex",
+ "Edieresis",
+ "Egrave",
+ "Iacute",
+ "Icircumflex",
+ "Idieresis",
+ "Igrave",
+ "Ntilde",
+ "Oacute",
+ "Ocircumflex",
+ "Odieresis",
+ "Ograve",
+ "Otilde",
+ "Scaron",
+ "Uacute",
+ "Ucircumflex",
+ "Udieresis",
+ "Ugrave",
+ "Yacute",
+ "Ydieresis",
+ "Zcaron",
+ "aacute",
+ "acircumflex",
+ "adieresis",
+ "agrave",
+ "aring",
+ "atilde",
+ "ccedilla",
+ "eacute",
+ "ecircumflex",
+ "edieresis",
+ "egrave",
+ "iacute",
+ "icircumflex",
+ "idieresis",
+ "igrave",
+ "ntilde",
+ "oacute",
+ "ocircumflex",
+ "odieresis",
+ "ograve",
+ "otilde",
+ "scaron",
+ "uacute",
+ "ucircumflex",
+ "udieresis",
+ "ugrave",
+ "yacute",
+ "ydieresis",
+ "zcaron",
+ "exclamsmall",
+ "Hungarumlautsmall",
+ "dollaroldstyle",
+ "dollarsuperior",
+ "ampersandsmall",
+ "Acutesmall",
+ "parenleftsuperior",
+ "parenrightsuperior",
+ "twodotenleader",
+ "onedotenleader",
+ "zerooldstyle",
+ "oneoldstyle",
+ "twooldstyle",
+ "threeoldstyle",
+ "fouroldstyle",
+ "fiveoldstyle",
+ "sixoldstyle",
+ "sevenoldstyle",
+ "eightoldstyle",
+ "nineoldstyle",
+ "commasuperior",
+ "threequartersemdash",
+ "periodsuperior",
+ "questionsmall",
+ "asuperior",
+ "bsuperior",
+ "centsuperior",
+ "dsuperior",
+ "esuperior",
+ "isuperior",
+ "lsuperior",
+ "msuperior",
+ "nsuperior",
+ "osuperior",
+ "rsuperior",
+ "ssuperior",
+ "tsuperior",
+ "ff",
+ "ffi",
+ "ffl",
+ "parenleftinferior",
+ "parenrightinferior",
+ "Circumflexsmall",
+ "hyphensuperior",
+ "Gravesmall",
+ "Asmall",
+ "Bsmall",
+ "Csmall",
+ "Dsmall",
+ "Esmall",
+ "Fsmall",
+ "Gsmall",
+ "Hsmall",
+ "Ismall",
+ "Jsmall",
+ "Ksmall",
+ "Lsmall",
+ "Msmall",
+ "Nsmall",
+ "Osmall",
+ "Psmall",
+ "Qsmall",
+ "Rsmall",
+ "Ssmall",
+ "Tsmall",
+ "Usmall",
+ "Vsmall",
+ "Wsmall",
+ "Xsmall",
+ "Ysmall",
+ "Zsmall",
+ "colonmonetary",
+ "onefitted",
+ "rupiah",
+ "Tildesmall",
+ "exclamdownsmall",
+ "centoldstyle",
+ "Lslashsmall",
+ "Scaronsmall",
+ "Zcaronsmall",
+ "Dieresissmall",
+ "Brevesmall",
+ "Caronsmall",
+ "Dotaccentsmall",
+ "Macronsmall",
+ "figuredash",
+ "hypheninferior",
+ "Ogoneksmall",
+ "Ringsmall",
+ "Cedillasmall",
+ "questiondownsmall",
+ "oneeighth",
+ "threeeighths",
+ "fiveeighths",
+ "seveneighths",
+ "onethird",
+ "twothirds",
+ "zerosuperior",
+ "foursuperior",
+ "fivesuperior",
+ "sixsuperior",
+ "sevensuperior",
+ "eightsuperior",
+ "ninesuperior",
+ "zeroinferior",
+ "oneinferior",
+ "twoinferior",
+ "threeinferior",
+ "fourinferior",
+ "fiveinferior",
+ "sixinferior",
+ "seveninferior",
+ "eightinferior",
+ "nineinferior",
+ "centinferior",
+ "dollarinferior",
+ "periodinferior",
+ "commainferior",
+ "Agravesmall",
+ "Aacutesmall",
+ "Acircumflexsmall",
+ "Atildesmall",
+ "Adieresissmall",
+ "Aringsmall",
+ "AEsmall",
+ "Ccedillasmall",
+ "Egravesmall",
+ "Eacutesmall",
+ "Ecircumflexsmall",
+ "Edieresissmall",
+ "Igravesmall",
+ "Iacutesmall",
+ "Icircumflexsmall",
+ "Idieresissmall",
+ "Ethsmall",
+ "Ntildesmall",
+ "Ogravesmall",
+ "Oacutesmall",
+ "Ocircumflexsmall",
+ "Otildesmall",
+ "Odieresissmall",
+ "OEsmall",
+ "Oslashsmall",
+ "Ugravesmall",
+ "Uacutesmall",
+ "Ucircumflexsmall",
+ "Udieresissmall",
+ "Yacutesmall",
+ "Thornsmall",
+ "Ydieresissmall",
+ "001.000",
+ "001.001",
+ "001.002",
+ "001.003",
+ "Black",
+ "Bold",
+ "Book",
+ "Light",
+ "Medium",
+ "Regular",
+ "Roman",
+ "Semibold",
+};
+
+sds sdsget_cff_sid(uint16_t idx, cff_Index str) {
+ if (idx <= 390) {
+ return sdsnew(string_standard[idx]);
+ } else if (str.count > 0 && idx - 391 < str.count) {
+ return sdsnewlen(str.data + str.offset[idx - 391] - 1,
+ str.offset[idx - 390] - str.offset[idx - 391]);
+ } else {
+ return NULL;
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-util.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-util.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-util.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,123 @@
+#ifndef CARYLL_cff_UTIL_H
+#define CARYLL_cff_UTIL_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+
+// clang-format off
+// CFF DICT Operators
+enum {
+ op_version = 0x00, op_Copyright = 0x0c00,
+ op_Notice = 0x01, op_isFixedPitch = 0x0c01,
+ op_FullName = 0x02, op_ItalicAngle = 0x0c02,
+ op_FamilyName = 0x03, op_UnderlinePosition = 0x0c03,
+ op_Weight = 0x04, op_UnderlineThickness = 0x0c04,
+ op_FontBBox = 0x05, op_PaintType = 0x0c05,
+ op_BlueValues = 0x06, op_CharstringType = 0x0c06,
+ op_OtherBlues = 0x07, op_FontMatrix = 0x0c07,
+ op_FamilyBlues = 0x08, op_StrokeWidth = 0x0c08,
+ op_FamilyOtherBlues = 0x09, op_BlueScale = 0x0c09,
+ op_StdHW = 0x0a, op_BlueShift = 0x0c0a,
+ op_StdVW = 0x0b, op_BlueFuzz = 0x0c0b,
+ /* 0x0c escape */ op_StemSnapH = 0x0c0c,
+ op_UniqueID = 0x0d, op_StemSnapV = 0x0c0d,
+ op_XUID = 0x0e, op_ForceBold = 0x0c0e,
+ op_charset = 0x0f, /* 0x0c0f Reserved */
+ op_Encoding = 0x10, /* 0x0c10 Reserved */
+ op_CharStrings = 0x11, op_LanguageGroup = 0x0c11,
+ op_Private = 0x12, op_ExpansionFactor = 0x0c12,
+ op_Subrs = 0x13, op_initialRandomSeed = 0x0c13,
+ op_defaultWidthX = 0x14, op_SyntheicBase = 0x0c14,
+ op_nominalWidthX = 0x15, op_PostScript = 0x0c15,
+ op_vsindex = 0x16, op_BaseFontName = 0x0c16,
+ op_blend = 0x17, op_BaseFontBlend = 0x0c17,
+ op_vstore = 0x18, /* 0x0c18 Reserved */
+ op_maxstack = 0x19, /* 0x0c19 Reserved */
+ /* 0x0c1a Reserved */
+ /* 0x0c1b Reserved */
+ /* 0x0c1c Reserved */
+ /* 0x0c1d Reserved */
+ op_ROS = 0x0c1e,
+ op_CIDFontVersion = 0x0c1f,
+ op_CIDFontRevision = 0x0c20,
+ op_CIDFontType = 0x0c21,
+ op_CIDCount = 0x0c22,
+ op_UIDBase = 0x0c23,
+ op_FDArray = 0x0c24,
+ op_FDSelect = 0x0c25,
+ op_FontName = 0x0c26,
+};
+
+// Type2 CharString Operators
+enum {
+ /* 0x00 Reserved */ /* 0x0c00 Reserved */
+ op_hstem = 0x01, /* 0x0c01 Reserved */
+ /* 0x02 Reserved */ /* 0x0c02 Reserved */
+ op_vstem = 0x03, op_and = 0x0c03,
+ op_vmoveto = 0x04, op_or = 0x0c04,
+ op_rlineto = 0x05, op_not = 0x0c05,
+ op_hlineto = 0x06, /* 0x0c06 Reserved */
+ op_vlineto = 0x07, /* 0x0c07 Reserved */
+ op_rrcurveto = 0x08, /* 0x0c08 Reserved */
+ /* 0x09 Reserved */ op_abs = 0x0c09,
+ op_callsubr = 0x0a, op_add = 0x0c0a,
+ op_return = 0x0b, op_sub = 0x0c0b,
+ /* 0x0c escape */ op_div = 0x0c0c,
+ /* 0x0d Reserved */ /* 0x0c0d Reserved */
+ op_endchar = 0x0e, op_neg = 0x0c0e,
+ op_cff2vsidx = 0x0f, op_eq = 0x0c0f,
+ op_cff2blend = 0x10, /* 0x0c10 Reserved */
+ /* 0x11 Reserved */ /* 0x0c11 Reserved */
+ op_hstemhm = 0x12, op_drop = 0x0c12,
+ op_hintmask = 0x13, /* 0x0c13 Reserved */
+ op_cntrmask = 0x14, op_put = 0x0c14,
+ op_rmoveto = 0x15, op_get = 0x0c15,
+ op_hmoveto = 0x16, op_ifelse = 0x0c16,
+ op_vstemhm = 0x17, op_random = 0x0c17,
+ op_rcurveline = 0x18, op_mul = 0x0c18,
+ op_rlinecurve = 0x19, /* 0x0c19 Reserved */
+ op_vvcurveto = 0x1a, op_sqrt = 0x0c1a,
+ op_hhcurveto = 0x1b, op_dup = 0x0c1b,
+ /* 0x1c short int */ op_exch = 0x0c1c,
+ op_callgsubr = 0x1d, op_index = 0x0c1d,
+ op_vhcurveto = 0x1e, op_roll = 0x0c1e,
+ op_hvcurveto = 0x1f, /* 0x0c1f Reserved */
+ /* 0x0c20 Reserved */
+ /* 0x0c21 Reserved */
+ op_hflex = 0x0c22,
+ op_flex = 0x0c23,
+ op_hflex1 = 0x0c24,
+ op_flex1 = 0x0c25,
+};
+// clang-format on
+
+// parser util functions
+static INLINE uint32_t gu1(uint8_t *s, uint32_t p) {
+ uint32_t b0 = *(s + p);
+ return b0;
+}
+
+static INLINE uint32_t gu2(uint8_t *s, uint32_t p) {
+ uint32_t b0 = *(s + p) << 8;
+ uint32_t b1 = *(s + p + 1);
+ return b0 | b1;
+}
+
+static INLINE uint32_t gu3(uint8_t *s, uint32_t p) {
+ uint32_t b0 = *(s + p) << 16;
+ uint32_t b1 = *(s + p + 1) << 8;
+ uint32_t b2 = *(s + p + 2);
+ return b0 | b1 | b2;
+}
+static INLINE uint32_t gu4(uint8_t *s, uint32_t p) {
+ uint32_t b0 = *(s + p) << 24;
+ uint32_t b1 = *(s + p + 1) << 16;
+ uint32_t b2 = *(s + p + 2) << 8;
+ uint32_t b3 = *(s + p + 3);
+ return b0 | b1 | b2 | b3;
+}
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,7 @@
+#include "cff-value.h"
+
+double cffnum(cff_Value val) {
+ if (val.t == cff_INTEGER) return val.i;
+ if (val.t == cff_DOUBLE) return val.d;
+ return 0;
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,29 @@
+#ifndef CARYLL_cff_VALUE_H
+#define CARYLL_cff_VALUE_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+
+typedef enum {
+ cff_OPERATOR = 1,
+ CS2_OPERATOR = 1,
+ cff_INTEGER = 2,
+ CS2_OPERAND = 2,
+ cff_DOUBLE = 3,
+ CS2_FRACTION = 3
+} cff_Value_Type;
+
+typedef struct {
+ cff_Value_Type t;
+ union {
+ int32_t i;
+ double d;
+ };
+} cff_Value;
+
+double cffnum(cff_Value v);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-writer.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-writer.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-writer.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,60 @@
+/*
+ Compiler of CFF, subset and full conversion
+ * note that there is no optimization in current implement
+*/
+
+#include <math.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libcff.h"
+
+caryll_Buffer *cff_buildHeader(void) {
+ return bufninit(4, 1, 0, 4, 4);
+}
+
+void cff_mergeCS2Operator(caryll_Buffer *blob, int32_t val) {
+ if (val >= 0x100) {
+ bufnwrite8(blob, 2, val >> 8, val & 0xff);
+ } else {
+ bufnwrite8(blob, 1, val & 0xff);
+ }
+}
+void cff_mergeCS2Int(caryll_Buffer *blob, int32_t val) {
+ if (val >= -1131 && val <= -108) {
+ bufnwrite8(blob, 2, (uint8_t)((-108 - val) / 256 + 251), (uint8_t)((-108 - val) % 256));
+ } else if (val >= -107 && val <= 107) {
+ bufnwrite8(blob, 1, (uint8_t)(val + 139));
+ } else if (val >= 108 && val <= 1131) {
+ bufnwrite8(blob, 2, (uint8_t)((val - 108) / 256 + 247), (uint8_t)((val - 108) % 256));
+ } else {
+ if (val >= -32768 && val <= 32767) {
+ bufnwrite8(blob, 3, 28, (uint8_t)(val >> 8), (uint8_t)((val << 8) >> 8));
+ } else {
+ cff_mergeCS2Int(blob, 0);
+ }
+ }
+}
+static void mergeCS2Real(caryll_Buffer *blob, double val) {
+ int16_t integerPart = floor(val);
+ uint16_t fractionPart = (val - integerPart) * 65536.0;
+ bufnwrite8(blob, 5, 0xFF, integerPart >> 8, integerPart & 0xFF, fractionPart >> 8, fractionPart & 0xFF);
+}
+void cff_mergeCS2Operand(caryll_Buffer *blob, double val) {
+ double intpart;
+ if (modf(val, &intpart) == 0.0) {
+ cff_mergeCS2Int(blob, (int32_t)intpart);
+ } else {
+ mergeCS2Real(blob, val);
+ }
+}
+void cff_mergeCS2Special(caryll_Buffer *blob, uint8_t val) {
+ bufwrite8(blob, val);
+}
+
+caryll_Buffer *cff_buildOffset(int32_t val) {
+ return bufninit(5, 29, (val >> 24) & 0xff, (val >> 16) & 0xff, (val >> 8) & 0xff, val & 0xff);
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,518 @@
+#include "charstring-il.h"
+#include "table/glyf.h"
+
+// Glyph building
+static void ensureThereIsSpace(cff_CharstringIL *il) {
+ if (il->free) return;
+ il->free = 0x100;
+ RESIZE(il->instr, il->length + il->free);
+}
+
+void il_push_operand(cff_CharstringIL *il, double x) {
+ ensureThereIsSpace(il);
+ il->instr[il->length].type = IL_ITEM_OPERAND;
+ il->instr[il->length].d = x;
+ il->instr[il->length].arity = 0;
+ il->length++;
+ il->free--;
+}
+static void il_push_VQ(cff_CharstringIL *il, VQ x) {
+ il_push_operand(il, iVQ.getStill(x));
+}
+void il_push_special(cff_CharstringIL *il, int32_t s) {
+ ensureThereIsSpace(il);
+ il->instr[il->length].type = IL_ITEM_SPECIAL;
+ il->instr[il->length].i = s;
+ il->instr[il->length].arity = 0;
+ il->length++;
+ il->free--;
+}
+void il_push_op(cff_CharstringIL *il, int32_t op) {
+ ensureThereIsSpace(il);
+ il->instr[il->length].type = IL_ITEM_OPERATOR;
+ il->instr[il->length].i = op;
+ il->instr[il->length].arity = cff_getStandardArity(op);
+ il->length++;
+ il->free--;
+}
+static void il_moveto(cff_CharstringIL *il, VQ dx, VQ dy) {
+ il_push_VQ(il, dx);
+ il_push_VQ(il, dy);
+ il_push_op(il, op_rmoveto);
+}
+static void il_lineto(cff_CharstringIL *il, VQ dx, VQ dy) {
+ il_push_VQ(il, dx);
+ il_push_VQ(il, dy);
+ il_push_op(il, op_rlineto);
+}
+static void il_curveto(cff_CharstringIL *il, VQ dx1, VQ dy1, VQ dx2, VQ dy2, VQ dx3, VQ dy3) {
+ il_push_VQ(il, dx1);
+ il_push_VQ(il, dy1);
+ il_push_VQ(il, dx2);
+ il_push_VQ(il, dy2);
+ il_push_VQ(il, dx3);
+ il_push_VQ(il, dy3);
+ il_push_op(il, op_rrcurveto);
+}
+
+static void _il_push_maskgroup(cff_CharstringIL *il, // il seq
+ glyf_MaskList *masks, // masks array
+ uint16_t contours, // contous drawn
+ uint16_t points, // points drawn
+ uint16_t nh, uint16_t nv, // quantity of stems
+ uint16_t *jm, // index of cur mask
+ int32_t op) { // mask operator
+ shapeid_t n = masks->length;
+ while (*jm < n && (masks->items[*jm].contoursBefore < contours ||
+ (masks->items[*jm].contoursBefore == contours &&
+ masks->items[*jm].pointsBefore <= points))) {
+ il_push_op(il, op);
+ uint8_t maskByte = 0;
+ uint8_t bits = 0;
+ for (uint16_t j = 0; j < nh; j++) {
+ maskByte = maskByte << 1 | (masks->items[*jm].maskH[j] & 1);
+ bits += 1;
+ if (bits == 8) {
+ il_push_special(il, maskByte);
+ bits = 0;
+ }
+ }
+ for (uint16_t j = 0; j < nv; j++) {
+ maskByte = maskByte << 1 | (masks->items[*jm].maskV[j] & 1);
+ bits += 1;
+ if (bits == 8) {
+ il_push_special(il, maskByte);
+ bits = 0;
+ }
+ }
+ if (bits) {
+ maskByte = maskByte << (8 - bits);
+ il_push_special(il, maskByte);
+ }
+ *jm += 1;
+ }
+}
+static void il_push_masks(cff_CharstringIL *il, glyf_Glyph *g, // meta
+ uint16_t contours, // contours sofar
+ uint16_t points, // points sofar
+ uint16_t *jh, // index of pushed cmasks
+ uint16_t *jm // index of pushed hmasks
+) {
+ if (!g->stemH.length && !g->stemV.length) return;
+ _il_push_maskgroup(il, &g->contourMasks, contours, points, //
+ g->stemH.length, g->stemV.length, jh, op_cntrmask);
+ _il_push_maskgroup(il, &g->hintMasks, contours, points, //
+ g->stemH.length, g->stemV.length, jm, op_hintmask);
+}
+
+static void _il_push_stemgroup(cff_CharstringIL *il, // il seq
+ glyf_StemDefList *stems, // stem array
+ bool hasmask, bool haswidth, int32_t ophm, int32_t oph) {
+ if (!stems || !stems->length) return;
+ pos_t ref = 0;
+ uint16_t nn = haswidth ? 1 : 0;
+ for (uint16_t j = 0; j < stems->length; j++) {
+ il_push_operand(il, stems->items[j].position - ref);
+ il_push_operand(il, stems->items[j].width);
+ ref = stems->items[j].position + stems->items[j].width;
+ nn++;
+ if (nn >= type2_argument_stack) {
+ if (hasmask) {
+ il_push_op(il, op_hstemhm);
+ } else {
+ il_push_op(il, op_hstem);
+ }
+ il->instr[il->length - 1].arity = nn;
+ nn = 0;
+ }
+ }
+ if (hasmask) {
+ il_push_op(il, ophm);
+ } else {
+ il_push_op(il, oph);
+ }
+ il->instr[il->length - 1].arity = nn;
+}
+static void il_push_stems(cff_CharstringIL *il, glyf_Glyph *g, bool hasmask, bool haswidth) {
+ _il_push_stemgroup(il, &g->stemH, hasmask, haswidth, op_hstemhm, op_hstem);
+ _il_push_stemgroup(il, &g->stemV, hasmask, haswidth, op_vstemhm, op_vstem);
+}
+cff_CharstringIL *cff_compileGlyphToIL(glyf_Glyph *g, uint16_t defaultWidth,
+ uint16_t nominalWidth) {
+ cff_CharstringIL *il;
+ NEW(il);
+ // Convert absolute positions to deltas
+ glyf_Contour *tempContours = NULL;
+ {
+ VQ x = iVQ.neutral();
+ VQ y = iVQ.neutral();
+ NEW(tempContours, g->contours.length);
+ for (uint16_t c = 0; c < g->contours.length; c++) {
+ glyf_Contour *contour = &(g->contours.items[c]);
+ glyf_Contour *newcontour = &(tempContours[c]);
+ glyf_iContour.init(newcontour);
+ for (shapeid_t j = 0; j < contour->length; j++) {
+ glyf_iContour.push(newcontour, glyf_iPoint.dup(contour->items[j]));
+ }
+
+ if (newcontour->length > 2 && !newcontour->items[newcontour->length - 1].onCurve) {
+ // Duplicate first point for proper CurveTo generation
+ glyf_iContour.push(newcontour, glyf_iPoint.dup(newcontour->items[0]));
+ }
+
+ for (shapeid_t j = 0; j < newcontour->length; j++) {
+ VQ dx = iVQ.minus(newcontour->items[j].x, x);
+ VQ dy = iVQ.minus(newcontour->items[j].y, y);
+ iVQ.copyReplace(&x, newcontour->items[j].x);
+ iVQ.copyReplace(&y, newcontour->items[j].y);
+ iVQ.replace(&newcontour->items[j].x, dx);
+ iVQ.replace(&newcontour->items[j].y, dy);
+ }
+ }
+ iVQ.dispose(&x);
+ iVQ.dispose(&y);
+ }
+
+ bool hasmask =
+ g->hintMasks.length || g->contourMasks.length; // we have hint masks or contour masks
+ const pos_t glyphADWConst = iVQ.getStill(g->advanceWidth);
+ bool haswidth = glyphADWConst != defaultWidth; // we have width operand here
+ // Write IL
+ if (haswidth) { il_push_operand(il, (int)(glyphADWConst) - (int)(nominalWidth)); }
+ il_push_stems(il, g, hasmask, haswidth);
+ // Write contour
+ shapeid_t contoursSofar = 0;
+ shapeid_t pointsSofar = 0;
+ shapeid_t jh = 0;
+ shapeid_t jm = 0;
+ if (hasmask) il_push_masks(il, g, contoursSofar, pointsSofar, &jh, &jm);
+ for (shapeid_t c = 0; c < g->contours.length; c++) {
+ glyf_Contour *contour = &(tempContours[c]);
+ shapeid_t n = contour->length;
+ if (n == 0) continue;
+ il_moveto(il, contour->items[0].x, contour->items[0].y);
+ pointsSofar++;
+ if (hasmask) il_push_masks(il, g, contoursSofar, pointsSofar, &jh, &jm);
+ // TODO: Generate BLENDs
+ for (shapeid_t j = 1; j < n; j++) {
+ if (contour->items[j].onCurve) { // A line-to
+ il_lineto(il, contour->items[j].x, contour->items[j].y);
+ pointsSofar += 1;
+ } else if (j < n - 2 // have enough points
+ && !contour->items[j + 1].onCurve // next is offcurve
+ && contour->items[j + 2].onCurve // and next is oncurve
+ ) { // means this is an bezier curve strand
+ il_curveto(il, contour->items[j].x,
+ contour->items[j].y, // dz1
+ contour->items[j + 1].x,
+ contour->items[j + 1].y, // dz2
+ contour->items[j + 2].x,
+ contour->items[j + 2].y); // dz3
+ pointsSofar += 3;
+ j += 2;
+ } else { // invalid offcurve, treat as oncurve
+ il_lineto(il, contour->items[j].x, contour->items[j].y);
+ pointsSofar++;
+ }
+ if (hasmask) il_push_masks(il, g, contoursSofar, pointsSofar, &jh, &jm);
+ }
+ contoursSofar += 1;
+ pointsSofar = 0;
+ }
+ il_push_op(il, op_endchar);
+ // delete temp contour array
+ for (shapeid_t c = 0; c < g->contours.length; c++) {
+ glyf_iContour.dispose(&tempContours[c]);
+ }
+ FREE(tempContours);
+ return il;
+}
+
+// Pattern-based peephole optimization
+static bool il_matchtype(cff_CharstringIL *il, uint32_t j, uint32_t k, cff_InstructionType t) {
+ if (k >= il->length) return false;
+ for (uint32_t m = j; m < k; m++) {
+ if (il->instr[m].type != t) return false;
+ }
+ return true;
+}
+static bool il_matchop(cff_CharstringIL *il, uint32_t j, int32_t op) {
+ if (il->instr[j].type != IL_ITEM_OPERATOR) return false;
+ if (il->instr[j].i != op) return false;
+ return true;
+}
+static uint8_t zroll(cff_CharstringIL *il, uint32_t j, int32_t op, int32_t op2, ...) {
+ uint8_t arity = cff_getStandardArity(op);
+ if (arity > 16 || j + arity >= il->length) return 0;
+ if ((j == 0 || // We are at the beginning of charstring
+ !il_matchtype(il, j - 1, j,
+ IL_ITEM_PHANTOM_OPERATOR)) // .. or we are right after a solid operator
+ && il_matchop(il, j + arity, op) // The next operator is <op>
+ && il_matchtype(il, j, j + arity, IL_ITEM_OPERAND) // And we have correct number of operands
+ ) {
+ va_list ap;
+ uint8_t check = true;
+ uint8_t resultArity = arity;
+ bool mask[16];
+ va_start(ap, op2);
+ for (uint32_t m = 0; m < arity; m++) {
+ int checkzero = va_arg(ap, int);
+ mask[m] = checkzero;
+ if (checkzero) {
+ resultArity -= 1;
+ check = check && il->instr[j + m].d == 0;
+ }
+ }
+ va_end(ap);
+ if (check) {
+ for (uint32_t m = 0; m < arity; m++) {
+ if (mask[m]) { il->instr[j + m].type = IL_ITEM_PHANTOM_OPERAND; }
+ }
+ il->instr[j + arity].i = op2;
+ il->instr[j + arity].arity = resultArity;
+ return arity;
+ } else {
+ return 0;
+ }
+ } else {
+ return 0;
+ }
+}
+static uint8_t opop_roll(cff_CharstringIL *il, uint32_t j, int32_t op1, int32_t arity, int32_t op2,
+ int32_t resultop) {
+ if (j + 1 + arity >= il->length) return 0;
+ cff_CharstringInstruction *current = &(il->instr[j]);
+ cff_CharstringInstruction *nextop = &(il->instr[j + 1 + arity]);
+ if (il_matchop(il, j, op1) // match this operator
+ && il_matchtype(il, j + 1, j + 1 + arity, IL_ITEM_OPERAND) // match operands
+ && il_matchop(il, j + 1 + arity, op2) // match next operator
+ && current->arity + nextop->arity <= type2_argument_stack // stack is not full
+ ) {
+ current->type = IL_ITEM_PHANTOM_OPERATOR;
+ nextop->i = resultop;
+ nextop->arity += current->arity;
+ return arity + 1;
+ } else {
+ return 0;
+ }
+}
+static uint8_t hvlineto_roll(cff_CharstringIL *il, uint32_t j) {
+ if (j + 3 >= il->length) return 0;
+ cff_CharstringInstruction *current = &(il->instr[j]);
+ // We will check whether operand <checkdelta> is zero
+ // ODD EVEN -- current arity
+ // hlineto X Y
+ // vlineto Y X
+ uint32_t checkdelta = ((bool)(current->arity & 1) ^ (bool)(current->i == op_vlineto) ? 1 : 2);
+ if ((il_matchop(il, j, op_hlineto) || il_matchop(il, j, op_vlineto)) // a hlineto/vlineto
+ && il_matchop(il, j + 3, op_rlineto) // followed by a lineto
+ && il_matchtype(il, j + 1, j + 3, IL_ITEM_OPERAND) // have enough operands
+ && il->instr[j + checkdelta].d == 0 // and it is a h/v
+ && current->arity + 1 <= type2_argument_stack // we have enough stack space
+ ) {
+ il->instr[j + checkdelta].type = IL_ITEM_PHANTOM_OPERAND;
+ il->instr[j].type = IL_ITEM_PHANTOM_OPERATOR;
+ il->instr[j + 3].i = current->i;
+ il->instr[j + 3].arity = current->arity + 1;
+ return 3;
+ } else {
+ return 0;
+ }
+}
+static uint8_t hvvhcurve_roll(cff_CharstringIL *il, uint32_t j) {
+ if (!il_matchop(il, j, op_hvcurveto) && !il_matchop(il, j, op_vhcurveto)) return 0;
+ cff_CharstringInstruction *current = &(il->instr[j]);
+ // Exit in case of array not long enough or we have already ended
+ if (j + 7 >= il->length || current->arity & 1) return 0;
+ bool hvcase = (bool)((current->arity >> 2) & 1) ^ (bool)(current->i == op_hvcurveto);
+ // We will check whether operand <checkdelta> is zero
+ // ODD EVEN -- current arity divided by 4
+ // hvcurveto X Y
+ // vhcurveto Y X
+ uint32_t checkdelta1 = hvcase ? 2 : 1;
+ uint32_t checkdelta2 = hvcase ? 5 : 6;
+ if (il_matchop(il, j + 7, op_rrcurveto) // followed by a curveto
+ && il_matchtype(il, j + 1, j + 7, IL_ITEM_OPERAND) // have enough operands
+ && il->instr[j + checkdelta1].d == 0 // and it is a h/v
+ ) {
+ if (il->instr[j + checkdelta2].d == 0 && current->arity + 4 <= type2_argument_stack) {
+ // The Standard case
+ il->instr[j + checkdelta1].type = IL_ITEM_PHANTOM_OPERAND;
+ il->instr[j + checkdelta2].type = IL_ITEM_PHANTOM_OPERAND;
+ il->instr[j].type = IL_ITEM_PHANTOM_OPERATOR;
+ il->instr[j + 7].i = current->i;
+ il->instr[j + 7].arity = current->arity + 4;
+ return 7;
+ } else if (current->arity + 5 <= type2_argument_stack) {
+ // The trailing case
+ il->instr[j + checkdelta1].type = IL_ITEM_PHANTOM_OPERAND;
+ il->instr[j].type = IL_ITEM_PHANTOM_OPERATOR;
+ il->instr[j + 7].i = current->i;
+ il->instr[j + 7].arity = current->arity + 5;
+ if (hvcase) {
+ // Swap the last two operands because hvcurveto's trailing operand is in y-x order
+ double t = il->instr[j + 5].d;
+ il->instr[j + 5].d = il->instr[j + 6].d;
+ il->instr[j + 6].d = t;
+ }
+ return 7;
+ } else {
+ return 0;
+ }
+ } else {
+ return 0;
+ }
+}
+static uint8_t hhvvcurve_roll(cff_CharstringIL *il, uint32_t j) {
+ if (!il_matchop(il, j, op_hhcurveto) && !il_matchop(il, j, op_vvcurveto)) return 0;
+ cff_CharstringInstruction *current = &(il->instr[j]);
+ // Exit in case of array not long enough or we have already ended
+ if (j + 7 >= il->length) return 0;
+ bool hh = current->i == op_hhcurveto;
+ uint32_t checkdelta1 = hh ? 2 : 1;
+ uint32_t checkdelta2 = hh ? 6 : 5;
+ if (il_matchop(il, j + 7, op_rrcurveto) // followed by a curveto
+ && il_matchtype(il, j + 1, j + 7, IL_ITEM_OPERAND) // have enough operands
+ && il->instr[j + checkdelta1].d == 0 // and it is a h/v
+ && il->instr[j + checkdelta2].d == 0 // and it is a h/v
+ && current->arity + 4 <= type2_argument_stack) {
+ il->instr[j + checkdelta1].type = IL_ITEM_PHANTOM_OPERAND;
+ il->instr[j + checkdelta2].type = IL_ITEM_PHANTOM_OPERAND;
+ il->instr[j].type = IL_ITEM_PHANTOM_OPERATOR;
+ il->instr[j + 7].i = current->i;
+ il->instr[j + 7].arity = current->arity + 4;
+ return 7;
+ } else {
+ return 0;
+ }
+}
+static uint32_t nextstop(cff_CharstringIL *il, uint32_t j) {
+ uint32_t delta = 0;
+ for (; j + delta < il->length && il->instr[j + delta].type == IL_ITEM_OPERAND; delta++)
+ ;
+ return delta;
+}
+#define ROLL_FALL(x) \
+ if ((r = (x))) return r;
+static uint8_t decideAdvance(cff_CharstringIL *il, uint32_t j, uint8_t optimizeLevel) {
+ uint8_t r = 0;
+ ROLL_FALL(zroll(il, j, op_rlineto, op_hlineto, 0, 1)); // rlineto -> hlineto
+ ROLL_FALL(zroll(il, j, op_rlineto, op_vlineto, 1, 0)); // rlineto -> vlineto
+ ROLL_FALL(zroll(il, j, op_rmoveto, op_hmoveto, 0, 1)); // rmoveto -> hmoveto
+ ROLL_FALL(zroll(il, j, op_rmoveto, op_vmoveto, 1, 0)); // rmoveto -> vmoveto
+ ROLL_FALL(zroll(il, j, op_rrcurveto, op_hvcurveto, 0, 1, 0, 0, 1, 0)); // rrcurveto->hvcurveto
+ ROLL_FALL(zroll(il, j, op_rrcurveto, op_vhcurveto, 1, 0, 0, 0, 0, 1)); // rrcurveto->vhcurveto
+ ROLL_FALL(zroll(il, j, op_rrcurveto, op_hhcurveto, 0, 1, 0, 0, 0, 1)); // rrcurveto->hhcurveto
+ ROLL_FALL(zroll(il, j, op_rrcurveto, op_vvcurveto, 1, 0, 0, 0, 1, 0)); // rrcurveto->vvcurveto
+ ROLL_FALL(opop_roll(il, j, op_rrcurveto, 6, op_rrcurveto, op_rrcurveto)); // rrcurveto roll
+ ROLL_FALL(opop_roll(il, j, op_rrcurveto, 2, op_rlineto, op_rcurveline)); // rcurveline roll
+ ROLL_FALL(opop_roll(il, j, op_rlineto, 6, op_rrcurveto, op_rlinecurve)); // rlinecurve roll
+ ROLL_FALL(opop_roll(il, j, op_rlineto, 2, op_rlineto, op_rlineto)); // rlineto roll
+ ROLL_FALL(opop_roll(il, j, op_hstemhm, 0, op_hintmask, op_hintmask)); // hintmask roll
+ ROLL_FALL(opop_roll(il, j, op_vstemhm, 0, op_hintmask, op_hintmask)); // hintmask roll
+ ROLL_FALL(opop_roll(il, j, op_hstemhm, 0, op_cntrmask, op_cntrmask)); // cntrmask roll
+ ROLL_FALL(opop_roll(il, j, op_vstemhm, 0, op_cntrmask, op_cntrmask)); // cntrmask roll
+ ROLL_FALL(hvlineto_roll(il, j)); // hlineto-vlineto roll
+ ROLL_FALL(hhvvcurve_roll(il, j)); // hhcurveto-vvcurveto roll
+ ROLL_FALL(hvvhcurve_roll(il, j)); // hvcurveto-vhcurveto roll
+ ROLL_FALL(nextstop(il, j)); // move to next stop for operand match
+ return 1; // nothing match
+}
+
+void cff_optimizeIL(cff_CharstringIL *il, const otfcc_Options *options) {
+ if (!options->cff_rollCharString) return;
+ uint32_t j = 0;
+ while (j < il->length) {
+ j += decideAdvance(il, j, options->cff_rollCharString);
+ }
+}
+
+// IL to buffer conversion
+caryll_Buffer *cff_build_IL(cff_CharstringIL *il) {
+ caryll_Buffer *blob = bufnew();
+
+ for (uint16_t j = 0; j < il->length; j++) {
+ switch (il->instr[j].type) {
+ case IL_ITEM_OPERAND: {
+ cff_mergeCS2Operand(blob, il->instr[j].d);
+ break;
+ }
+ case IL_ITEM_OPERATOR: {
+ cff_mergeCS2Operator(blob, il->instr[j].i);
+ break;
+ }
+ case IL_ITEM_SPECIAL: {
+ cff_mergeCS2Special(blob, il->instr[j].i);
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ return blob;
+}
+
+cff_CharstringIL *cff_shrinkIL(cff_CharstringIL *il) {
+ cff_CharstringIL *out;
+ NEW(out);
+ for (uint16_t j = 0; j < il->length; j++) {
+ switch (il->instr[j].type) {
+ case IL_ITEM_OPERAND: {
+ il_push_operand(out, il->instr[j].d);
+ break;
+ }
+ case IL_ITEM_OPERATOR: {
+ il_push_op(out, il->instr[j].i);
+ break;
+ }
+ case IL_ITEM_SPECIAL: {
+ il_push_special(out, il->instr[j].i);
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ return out;
+}
+
+void cff_ILmergeIL(cff_CharstringIL *self, cff_CharstringIL *il) {
+ for (uint16_t j = 0; j < il->length; j++) {
+ switch (il->instr[j].type) {
+ case IL_ITEM_OPERAND: {
+ il_push_operand(self, il->instr[j].d);
+ break;
+ }
+ case IL_ITEM_OPERATOR: {
+ il_push_op(self, il->instr[j].i);
+ break;
+ }
+ case IL_ITEM_SPECIAL: {
+ il_push_special(self, il->instr[j].i);
+ break;
+ }
+ default:
+ break;
+ }
+ }
+}
+
+bool instruction_eq(cff_CharstringInstruction *z1, cff_CharstringInstruction *z2) {
+ if (z1->type == z2->type) {
+ if (z1->type == IL_ITEM_OPERAND || z1->type == IL_ITEM_PHANTOM_OPERAND) {
+ return z1->d == z2->d;
+ } else {
+ return z1->i == z2->i;
+ }
+ } else {
+ return false;
+ }
+}
+
+bool cff_ilEqual(cff_CharstringIL *a, cff_CharstringIL *b) {
+ if (!a || !b) return false;
+ if (a->length != b->length) return false;
+ for (uint32_t j = 0; j < a->length; j++)
+ if (!instruction_eq(a->instr + j, b->instr + j)) { return false; }
+ return true;
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,44 @@
+#ifndef CARYLL_cff_CHARSTRING_IL
+#define CARYLL_cff_CHARSTRING_IL
+
+#include "libcff.h"
+#include "otfcc/table/glyf.h"
+
+typedef enum {
+ IL_ITEM_OPERAND,
+ IL_ITEM_OPERATOR,
+ IL_ITEM_SPECIAL,
+ IL_ITEM_PHANTOM_OPERATOR,
+ IL_ITEM_PHANTOM_OPERAND
+} cff_InstructionType;
+
+typedef struct {
+ cff_InstructionType type;
+ arity_t arity;
+ union {
+ double d; // for type == IL_ITEM_OPERAND, IL_ITEM_PHANTOM_OPERAND
+ int32_t i; // otherwise
+ };
+} cff_CharstringInstruction;
+
+typedef struct {
+ uint32_t length;
+ uint32_t free;
+ cff_CharstringInstruction *instr;
+} cff_CharstringIL;
+
+bool instruction_eq(cff_CharstringInstruction *z1, cff_CharstringInstruction *z2);
+
+// basic ops
+cff_CharstringIL *cff_compileGlyphToIL(glyf_Glyph *g, uint16_t defaultWidth, uint16_t nominalWidth);
+void cff_optimizeIL(cff_CharstringIL *il, const otfcc_Options *options);
+cff_CharstringIL *cff_shrinkIL(cff_CharstringIL *il);
+void cff_ILmergeIL(cff_CharstringIL *self, cff_CharstringIL *il);
+caryll_Buffer *cff_build_IL(cff_CharstringIL *il);
+bool cff_ilEqual(cff_CharstringIL *a, cff_CharstringIL *b);
+
+void il_push_operand(cff_CharstringIL *il, double x);
+void il_push_op(cff_CharstringIL *il, int32_t op);
+void il_push_special(cff_CharstringIL *il, int32_t s);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/libcff.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/libcff.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/libcff.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,164 @@
+#ifndef cff_DATA_TYPES
+#define cff_DATA_TYPES
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+
+#include "cff-util.h"
+#include "cff-value.h"
+#include "cff-index.h"
+#include "cff-dict.h"
+#include "cff-charset.h"
+#include "cff-fdselect.h"
+
+// Limits of Type2 CharSrting
+enum {
+ type2_argument_stack = 48,
+ type2_stem_hints = 96,
+ type2_subr_nesting = 10,
+ type2_charstring_len = 65535,
+ type2_max_subrs = 65300,
+ type2_transient_array = 32,
+};
+
+typedef struct {
+ uint8_t major;
+ uint8_t minor;
+ uint8_t hdrSize;
+ uint8_t offSize;
+} cff_Header;
+
+// CFF Encoding Structures
+typedef struct {
+ uint8_t format;
+ uint8_t ncodes;
+ uint8_t *code;
+} cff_EncodingFormat0;
+
+typedef struct {
+ uint8_t first;
+ uint8_t nleft;
+} cff_EncodingRangeFormat1;
+
+typedef struct {
+ uint8_t format;
+ uint8_t nranges;
+ cff_EncodingRangeFormat1 *range1;
+} cff_EncodingFormat1;
+
+typedef struct {
+ uint8_t code;
+ uint16_t glyph;
+} cff_EncodingSupplement;
+
+typedef struct {
+ uint8_t nsup;
+ cff_EncodingSupplement *supplement;
+} cff_EncodingNS;
+
+typedef struct {
+ uint32_t t;
+ union {
+ cff_EncodingFormat0 f0;
+ cff_EncodingFormat1 f1;
+ cff_EncodingNS ns;
+ };
+} cff_Encoding;
+
+// Predefined Encoding Types
+enum {
+ cff_FONT_COMMON,
+ cff_FONT_CID,
+ cff_FONT_MM,
+};
+
+enum {
+ cff_ENC_STANDARD,
+ cff_ENC_EXPERT,
+ cff_ENC_FORMAT0,
+ cff_ENC_FORMAT1,
+ cff_ENC_FORMAT_SUPPLEMENT,
+ cff_ENC_UNSPECED,
+};
+
+typedef struct {
+ cff_Value *stack;
+ cff_Value transient[32];
+ arity_t index;
+ arity_t max;
+ uint8_t stem;
+} cff_Stack;
+
+typedef struct {
+ uint8_t *raw_data;
+ uint32_t raw_length;
+ uint16_t cnt_glyph;
+
+ cff_Header head;
+ cff_Index name;
+ cff_Index top_dict;
+ cff_Index string;
+ cff_Index global_subr;
+
+ cff_Encoding encodings; // offset
+ cff_Charset charsets; // offset
+ cff_FDSelect fdselect; // offset
+ cff_Index char_strings; // offset
+ cff_Index font_dict; // offset
+ cff_Index local_subr; // offset
+} cff_File;
+
+// Outline builder method table
+typedef struct {
+ void (*setWidth)(void *context, double width);
+ void (*newContour)(void *context);
+ void (*lineTo)(void *context, double x1, double y1);
+ void (*curveTo)(void *context, double x1, double y1, double x2, double y2, double x3, double y3);
+ void (*setHint)(void *context, bool isVertical, double position, double width);
+ void (*setMask)(void *context, bool isContourMask, bool *mask);
+ double (*getrand)(void *context);
+} cff_IOutlineBuilder;
+
+/*
+ CFF -> Compact Font Format
+ CS2 -> Type2 CharString
+*/
+
+extern const char *op_cff_name(uint32_t op);
+extern const char *op_cs2_name(uint32_t op);
+uint8_t cff_getStandardArity(uint32_t op);
+
+sds sdsget_cff_sid(uint16_t idx, cff_Index str);
+
+extern uint32_t cff_decodeCffToken(const uint8_t *start, cff_Value *val);
+extern uint32_t cff_decodeCS2Token(const uint8_t *start, cff_Value *val);
+
+// number, number, float
+extern caryll_Buffer *cff_encodeCffOperator(int32_t val);
+extern caryll_Buffer *cff_encodeCffInteger(int32_t val);
+extern caryll_Buffer *cff_encodeCffFloat(double val);
+
+/*
+ Writer
+*/
+
+extern caryll_Buffer *cff_buildOffset(int32_t val);
+extern caryll_Buffer *cff_buildHeader(void);
+
+void cff_mergeCS2Int(caryll_Buffer *blob, int32_t val);
+void cff_mergeCS2Operator(caryll_Buffer *blob, int32_t val);
+void cff_mergeCS2Operand(caryll_Buffer *blob, double val);
+void cff_mergeCS2Special(caryll_Buffer *blob, uint8_t val);
+
+extern uint8_t cff_parseSubr(uint16_t idx, uint8_t *raw, cff_Index fdarray, cff_FDSelect select, cff_Index *subr);
+void cff_parseOutline(uint8_t *data, uint32_t len, cff_Index gsubr, cff_Index lsubr, cff_Stack *stack, void *outline,
+ cff_IOutlineBuilder methods, const otfcc_Options *options);
+
+// File
+extern cff_File *cff_openStream(uint8_t *data, uint32_t len, const otfcc_Options *options);
+extern void cff_close(cff_File *file);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,635 @@
+#include "subr.h"
+/**
+Type 2 CharString subroutinizer.
+This program uses SEQUITUR (Nevill-Manning algorithm) to construct a CFG from the input sequence of
+opcodes (in the minimum unit of a operator call. That is, operand* operator special*.)
+Kieffer-Yang optimization is unnecessary, given that in almost all payloads, there are no repeating
+subroutines.
+*/
+
+#ifdef DEBUG
+static int nodesCreated = 0;
+static int nodesRemoved = 0;
+static int rulesCreated = 0;
+static int rulesRemoved = 0;
+#endif
+
+static cff_SubrNode *cff_new_Node() {
+ cff_SubrNode *n;
+ NEW(n);
+ n->rule = NULL;
+ n->terminal = NULL;
+ n->guard = false;
+ n->hard = false;
+ n->prev = NULL;
+ n->next = NULL;
+#ifdef DEBUG
+ nodesCreated += 1;
+#endif
+ return n;
+}
+
+static cff_SubrRule *cff_new_Rule() {
+ cff_SubrRule *r;
+ NEW(r);
+ r->refcount = 0;
+ r->guard = cff_new_Node();
+ r->guard->prev = r->guard;
+ r->guard->next = r->guard;
+ r->guard->terminal = 0;
+ r->guard->guard = true;
+ r->guard->rule = r;
+ r->next = NULL;
+#ifdef DEBUG
+ rulesCreated += 1;
+#endif
+ return r;
+}
+
+static void initSubrGraph(cff_SubrGraph *g) {
+ g->root = cff_new_Rule();
+ g->last = g->root;
+ g->diagramIndex = NULL;
+ g->totalRules = 0;
+ g->totalCharStrings = 0;
+ g->doSubroutinize = false;
+}
+
+static void clean_Node(cff_SubrNode *x) {
+ if (x->rule) { x->rule->refcount -= 1; }
+ x->rule = NULL;
+ buffree(x->terminal);
+ x->terminal = NULL;
+}
+static void delete_Node(cff_SubrNode *x) {
+ if (!x) return;
+ clean_Node(x);
+#ifdef DEBUG
+ nodesRemoved += 1;
+#endif
+ FREE(x);
+}
+
+static void deleteFullRule(cff_SubrRule *r) {
+ if (r->guard) {
+ for (cff_SubrNode *e = r->guard->next; e != r->guard;) {
+ cff_SubrNode *next = e->next;
+ if (e->terminal) buffree(e->terminal);
+ FREE(e);
+#ifdef DEBUG
+ nodesRemoved += 1;
+#endif
+ e = next;
+ }
+ {
+ FREE(r->guard);
+#ifdef DEBUG
+ nodesRemoved += 1;
+#endif
+ }
+ }
+
+ FREE(r);
+#ifdef DEBUG
+ rulesRemoved += 1;
+#endif
+}
+
+static void disposeSubrGraph(cff_SubrGraph *g) {
+ {
+ cff_SubrRule *r = g->root;
+ while (r) {
+ cff_SubrRule *next = r->next;
+ deleteFullRule(r);
+ r = next;
+ }
+ }
+ cff_SubrDiagramIndex *s, *tmp;
+ HASH_ITER(hh, g->diagramIndex, s, tmp) {
+ HASH_DEL(g->diagramIndex, s);
+ FREE(s->key);
+ FREE(s);
+ }
+#ifdef DEBUG
+ fprintf(stderr, "ALLOC: %d >< %d nodes\n", nodesCreated, nodesRemoved);
+ fprintf(stderr, "ALLOC: %d >< %d rules\n", rulesCreated, rulesRemoved);
+#endif
+}
+
+caryll_standardRefType(cff_SubrGraph, cff_iSubrGraph, initSubrGraph, disposeSubrGraph);
+
+// Subroutinizer
+
+static void joinNodes(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrNode *n);
+
+static uint8_t *getSingletHashKey(cff_SubrNode *n, size_t *len) {
+ size_t l1;
+ if (n->rule) {
+ l1 = sizeof(n->rule->uniqueIndex);
+ } else {
+ l1 = buflen(n->terminal) * sizeof(uint8_t);
+ }
+
+ *len = 3 + l1 + 1;
+ uint8_t *key;
+ NEW(key, *len);
+ key[0] = '1';
+ key[1] = (n->rule ? '1' : '0');
+ key[2] = '0';
+ key[*len - 1] = 0;
+
+ if (n->rule) {
+ memcpy(key + 3, &(n->rule->uniqueIndex), l1);
+ } else {
+ memcpy(key + 3, n->terminal->data, l1);
+ }
+ return key;
+}
+
+static uint8_t *getDoubletHashKey(cff_SubrNode *n, size_t *len) {
+ size_t l1, l2;
+ if (n->rule) {
+ l1 = sizeof(n->rule->uniqueIndex);
+ } else {
+ l1 = buflen(n->terminal) * sizeof(uint8_t);
+ }
+ if (n->next->rule) {
+ l2 = sizeof(n->next->rule->uniqueIndex);
+ } else {
+ l2 = buflen(n->next->terminal) * sizeof(uint8_t);
+ }
+ *len = 3 + l1 + l2 + 1;
+ uint8_t *key;
+ NEW(key, *len);
+ key[0] = '2';
+ key[1] = (n->rule ? '1' : '0');
+ key[2] = (n->next->rule ? '1' : '0');
+ key[*len - 1] = 0;
+ if (n->rule) {
+ memcpy(key + 3, &(n->rule->uniqueIndex), l1);
+ } else {
+ memcpy(key + 3, n->terminal->data, l1);
+ }
+ if (n->next->rule) {
+ memcpy(key + 3 + l1, &(n->next->rule->uniqueIndex), l2);
+ } else {
+ memcpy(key + 3 + l1, n->next->terminal->data, l2);
+ }
+ return key;
+}
+
+static cff_SubrNode *lastNodeOf(cff_SubrRule *r) {
+ return r->guard->prev;
+}
+
+static cff_SubrNode *copyNode(cff_SubrNode *n) {
+ cff_SubrNode *m = cff_new_Node();
+ if (n->rule) {
+ m->rule = n->rule;
+ m->rule->refcount += 1;
+ } else {
+ m->terminal = bufnew();
+ bufwrite_buf(m->terminal, n->terminal);
+ }
+ m->last = n->last;
+ return m;
+}
+
+// checkNode: check whether node N is shrinkable
+static bool checkDoubletMatch(cff_SubrGraph *g, cff_SubrNode *n);
+
+static void unlinkNode(cff_SubrGraph *g, cff_SubrNode *a) {
+ if (a->hard || a->guard) return;
+ size_t len;
+ uint8_t *key = getDoubletHashKey(a, &len);
+ cff_SubrDiagramIndex *di = NULL;
+ HASH_FIND(hh, g->diagramIndex, key, len, di);
+ if (di && di->start == a) {
+ HASH_DEL(g->diagramIndex, di);
+ FREE(di->key);
+ FREE(di);
+ }
+ FREE(key);
+ key = getSingletHashKey(a, &len);
+ di = NULL;
+ HASH_FIND(hh, g->diagramIndex, key, len, di);
+ if (di && di->start == a) {
+ HASH_DEL(g->diagramIndex, di);
+ FREE(di->key);
+ FREE(di);
+ }
+ FREE(key);
+ return;
+}
+
+static void addDoublet(cff_SubrGraph *g, cff_SubrNode *n) {
+ if (!n || !n->next || n->guard || n->hard || n->next->hard || n->next->guard) return;
+ size_t len;
+ uint8_t *key = getDoubletHashKey(n, &len);
+ cff_SubrDiagramIndex *di = NULL;
+ HASH_FIND(hh, g->diagramIndex, key, len, di);
+ if (!di) {
+ NEW(di);
+ di->arity = 2;
+ di->key = key;
+ di->start = n;
+ HASH_ADD_KEYPTR(hh, g->diagramIndex, key, len, di);
+ } else {
+ di->start = n;
+ FREE(key);
+ }
+}
+static void addSinglet(cff_SubrGraph *g, cff_SubrNode *n) {
+ if (!n || n->guard || n->hard) return;
+ size_t len;
+ uint8_t *key = getSingletHashKey(n, &len);
+ cff_SubrDiagramIndex *di = NULL;
+ HASH_FIND(hh, g->diagramIndex, key, len, di);
+ if (!di) {
+ NEW(di);
+ di->arity = 1;
+ di->key = key;
+ di->start = n;
+ HASH_ADD_KEYPTR(hh, g->diagramIndex, key, len, di);
+ } else {
+ di->start = n;
+ FREE(key);
+ }
+}
+
+static bool identNode(cff_SubrNode *m, cff_SubrNode *n) {
+ if (m->rule)
+ return (m->rule == n->rule);
+ else if (n->rule)
+ return false;
+ else
+ return (m->terminal->size == n->terminal->size &&
+ strncmp((char *)m->terminal->data, (char *)n->terminal->data, m->terminal->size) == 0);
+}
+static void joinNodes(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrNode *n) {
+ if (m->next) {
+ unlinkNode(g, m);
+ if (n->prev && n->next && identNode(n->prev, n) && identNode(n, n->next)) { addDoublet(g, n); }
+ if (m->prev && m->next && identNode(m->prev, m) && identNode(m, m->next)) { addDoublet(g, m->prev); }
+ }
+ m->next = n;
+ n->prev = m;
+}
+static void xInsertNodeAfter(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrNode *n) {
+ joinNodes(g, n, m->next);
+ joinNodes(g, m, n);
+}
+static void removeNodeFromGraph(cff_SubrGraph *g, cff_SubrNode *a) {
+ joinNodes(g, a->prev, a->next);
+ if (!a->guard) {
+ unlinkNode(g, a);
+ delete_Node(a);
+ }
+}
+
+static void expandCall(cff_SubrGraph *g, cff_SubrNode *a) {
+ cff_SubrNode *aprev = a->prev;
+ cff_SubrNode *anext = a->next;
+ cff_SubrRule *r = a->rule;
+ cff_SubrNode *r1 = r->guard->next;
+ cff_SubrNode *r2 = r->guard->prev;
+
+ // We should move out [a, a'] from g's diagramIndex
+ unlinkNode(g, a);
+
+ joinNodes(g, aprev, r1);
+ joinNodes(g, r2, anext);
+ addDoublet(g, r2);
+ // make this rule a stub.
+ r->guard->prev = r->guard->next = r->guard;
+ r->refcount -= 1;
+ // remove call node
+ delete_Node(a);
+}
+
+static void substituteDoubletWithRule(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrRule *r) {
+ cff_SubrNode *prev = m->prev;
+ removeNodeFromGraph(g, prev->next);
+ removeNodeFromGraph(g, prev->next);
+ cff_SubrNode *invoke = cff_new_Node();
+ invoke->rule = r;
+ invoke->rule->refcount += 1;
+ xInsertNodeAfter(g, prev, invoke);
+ addDoublet(g, prev);
+ addDoublet(g, invoke);
+ addSinglet(g, invoke);
+
+ if (!checkDoubletMatch(g, prev)) { checkDoubletMatch(g, prev->next); }
+}
+static void substituteSingletWithRule(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrRule *r) {
+ cff_SubrNode *prev = m->prev;
+ removeNodeFromGraph(g, prev->next);
+ cff_SubrNode *invoke = cff_new_Node();
+ invoke->rule = r;
+ invoke->rule->refcount += 1;
+ xInsertNodeAfter(g, prev, invoke);
+ addDoublet(g, prev);
+ addDoublet(g, invoke);
+ addSinglet(g, invoke);
+}
+
+static void processMatchDoublet(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrNode *n) {
+ cff_SubrRule *rule = NULL;
+ if (m->prev->guard && m->next->next->guard) {
+ // The match [m, m'] is a rule's full content
+ rule = m->prev->rule;
+ substituteDoubletWithRule(g, n, rule);
+ } else {
+ rule = cff_new_Rule();
+ rule->uniqueIndex = g->totalRules;
+ g->totalRules += 1;
+ g->last->next = rule;
+ g->last = rule;
+ xInsertNodeAfter(g, lastNodeOf(rule), copyNode(m));
+ xInsertNodeAfter(g, lastNodeOf(rule), copyNode(m->next));
+ substituteDoubletWithRule(g, m, rule);
+ substituteDoubletWithRule(g, n, rule);
+ addDoublet(g, rule->guard->next);
+ addSinglet(g, rule->guard->next);
+ addSinglet(g, rule->guard->next->next);
+ }
+
+ if (rule->guard->next->rule && rule->guard->next->rule->refcount == 1) {
+ // The rule is shrinkable.
+ expandCall(g, rule->guard->next);
+ }
+}
+static void processMatchSinglet(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrNode *n) {
+ cff_SubrRule *rule = NULL;
+ if (m->prev->guard && m->next->guard) {
+ // The match [m] is a rule's full content
+ rule = m->prev->rule;
+ substituteSingletWithRule(g, n, rule);
+ } else {
+ // Create a new rule
+ rule = cff_new_Rule();
+ rule->uniqueIndex = g->totalRules;
+ g->totalRules += 1;
+ g->last->next = rule;
+ g->last = rule;
+ xInsertNodeAfter(g, lastNodeOf(rule), copyNode(m));
+ substituteSingletWithRule(g, m, rule);
+ substituteSingletWithRule(g, n, rule);
+ addSinglet(g, rule->guard->next);
+ }
+}
+
+static bool checkDoubletMatch(cff_SubrGraph *g, cff_SubrNode *n) {
+ if (n->guard || n->next->guard || n->hard || n->next->hard) return false;
+ // printf("test "), printNode(n, false), printNode(n->next, true);
+ size_t len;
+ uint8_t *key = getDoubletHashKey(n, &len);
+ cff_SubrDiagramIndex *di = NULL;
+ HASH_FIND(hh, g->diagramIndex, key, len, di);
+ if (!di) {
+ NEW(di);
+ di->arity = 2;
+ di->key = key;
+ di->start = n;
+ HASH_ADD_KEYPTR(hh, g->diagramIndex, key, len, di);
+ return false;
+ } else if (di->arity == 2 && di->start != n && !di->start->guard && !di->start->next->guard) {
+ FREE(key);
+ processMatchDoublet(g, di->start, n);
+ return true;
+ } else {
+ FREE(key);
+ return true;
+ }
+}
+
+static bool checkSingletMatch(cff_SubrGraph *g, cff_SubrNode *n) {
+ if (n->guard || n->hard) return false;
+ size_t len;
+ uint8_t *key = getSingletHashKey(n, &len);
+ cff_SubrDiagramIndex *di = NULL;
+ HASH_FIND(hh, g->diagramIndex, key, len, di);
+ if (!di) {
+ NEW(di);
+ di->arity = 1;
+ di->key = key;
+ di->start = n;
+ HASH_ADD_KEYPTR(hh, g->diagramIndex, key, len, di);
+ return false;
+ } else if (di->arity == 1 && di->start != n && !di->start->guard) {
+ FREE(key);
+ processMatchSinglet(g, di->start, n);
+ return true;
+ } else {
+ FREE(key);
+ return false;
+ }
+}
+
+static void appendNodeToGraph(cff_SubrGraph *g, cff_SubrNode *n) {
+ cff_SubrNode *last = lastNodeOf(g->root);
+ xInsertNodeAfter(g, last, n);
+ if (g->doSubroutinize) {
+ if (!checkDoubletMatch(g, last)) {
+ if (buflen(n->terminal) > 15) checkSingletMatch(g, n);
+ }
+ }
+}
+
+void cff_insertILToGraph(cff_SubrGraph *g, cff_CharstringIL *il) {
+ caryll_Buffer *blob = bufnew();
+ bool flush = false;
+ bool last = false;
+ for (uint32_t j = 0; j < il->length; j++) {
+ switch (il->instr[j].type) {
+ case IL_ITEM_OPERAND: {
+ if (flush) {
+ cff_SubrNode *n = cff_new_Node();
+ n->rule = NULL;
+ n->terminal = blob;
+ n->last = last;
+ appendNodeToGraph(g, n);
+ blob = bufnew();
+ flush = false;
+ }
+ cff_mergeCS2Operand(blob, il->instr[j].d);
+ break;
+ }
+
+ case IL_ITEM_OPERATOR: {
+ cff_mergeCS2Operator(blob, il->instr[j].i);
+ if (il->instr[j].i == op_endchar) { last = true; }
+ flush = true;
+ break;
+ }
+ case IL_ITEM_SPECIAL: {
+ cff_mergeCS2Special(blob, il->instr[j].i);
+ flush = true;
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ if (blob->size) {
+ cff_SubrNode *n = cff_new_Node();
+ n->rule = NULL;
+ n->last = last;
+ n->terminal = blob;
+ appendNodeToGraph(g, n);
+ }
+ {
+ blob = bufnew();
+ cff_SubrNode *n = cff_new_Node();
+ n->rule = NULL;
+ n->terminal = blob;
+ n->hard = true;
+ appendNodeToGraph(g, n);
+ g->totalCharStrings += 1;
+ }
+}
+
+static void cff_statHeight(cff_SubrRule *r, uint32_t height) {
+ if (height > r->height) r->height = height;
+ // Stat the heights bottom-up.
+ uint32_t effectiveLength = 0;
+ for (cff_SubrNode *e = r->guard->next; e != r->guard; e = e->next) {
+ if (e->rule) {
+ cff_statHeight(e->rule, height + 1);
+ effectiveLength += 4;
+ } else {
+ effectiveLength += e->terminal->size;
+ }
+ }
+ r->effectiveLength = effectiveLength;
+}
+
+static void numberASubroutine(cff_SubrRule *r, uint32_t *current) {
+ if (r->numbered) return;
+ if (r->height >= type2_subr_nesting) return;
+ if ((r->effectiveLength - 4) * (r->refcount - 1) - 4 <= 0) return;
+ r->number = *current;
+ (*current)++;
+ r->numbered = true;
+ for (cff_SubrNode *e = r->guard->next; e != r->guard; e = e->next) {
+ if (e->rule) { numberASubroutine(e->rule, current); }
+ }
+}
+static uint32_t cff_numberSubroutines(cff_SubrGraph *g) {
+ uint32_t current = 0;
+ for (cff_SubrNode *e = g->root->guard->next; e != g->root->guard; e = e->next) {
+ if (e->rule) numberASubroutine(e->rule, ¤t);
+ }
+ return current;
+}
+
+static inline int32_t subroutineBias(int32_t cnt) {
+ if (cnt < 1240)
+ return 107;
+ else if (cnt < 33900)
+ return 1131;
+ else
+ return 32768;
+}
+
+static bool endsWithEndChar(cff_SubrRule *rule) {
+ cff_SubrNode *node = lastNodeOf(rule);
+ if (node->terminal) {
+ return node->last;
+ } else {
+ return endsWithEndChar(node->rule);
+ }
+}
+
+static void serializeNodeToBuffer(cff_SubrNode *node, caryll_Buffer *buf, caryll_Buffer *gsubrs, uint32_t maxGSubrs,
+ caryll_Buffer *lsubrs, uint32_t maxLSubrs) {
+ if (node->rule) {
+ if (node->rule->numbered && node->rule->number < maxLSubrs + maxGSubrs &&
+ node->rule->height < type2_subr_nesting) {
+ // A call.
+ caryll_Buffer *target;
+ if (node->rule->number < maxLSubrs) {
+ int32_t stacknum = node->rule->number - subroutineBias(maxLSubrs);
+ target = lsubrs + node->rule->number;
+ cff_mergeCS2Int(buf, stacknum);
+ cff_mergeCS2Operator(buf, op_callsubr);
+ } else {
+ int32_t stacknum = node->rule->number - maxLSubrs - subroutineBias(maxGSubrs);
+ target = gsubrs + (node->rule->number - maxLSubrs);
+ cff_mergeCS2Int(buf, stacknum);
+ cff_mergeCS2Operator(buf, op_callgsubr);
+ }
+ cff_SubrRule *r = node->rule;
+ if (!r->printed) {
+ r->printed = true;
+ for (cff_SubrNode *e = r->guard->next; e != r->guard; e = e->next) {
+ serializeNodeToBuffer(e, target, gsubrs, maxGSubrs, lsubrs, maxLSubrs);
+ }
+ if (!endsWithEndChar(r)) { cff_mergeCS2Operator(target, op_return); }
+ }
+ } else {
+ // A call, but invalid
+ // Inline its code.
+ cff_SubrRule *r = node->rule;
+ for (cff_SubrNode *e = r->guard->next; e != r->guard; e = e->next) {
+ serializeNodeToBuffer(e, buf, gsubrs, maxGSubrs, lsubrs, maxLSubrs);
+ }
+ }
+ } else {
+ bufwrite_buf(buf, node->terminal);
+ }
+}
+
+static caryll_Buffer *from_array(void *_context, uint32_t j) {
+ caryll_Buffer *context = (caryll_Buffer *)_context;
+ caryll_Buffer *blob = bufnew();
+ bufwrite_buf(blob, context + j);
+ return blob;
+}
+void cff_ilGraphToBuffers(cff_SubrGraph *g, caryll_Buffer **s, caryll_Buffer **gs, caryll_Buffer **ls,
+ const otfcc_Options *options) {
+ cff_statHeight(g->root, 0);
+ uint32_t maxSubroutines = cff_numberSubroutines(g);
+ logProgress("[libcff] Total %d subroutines extracted.", maxSubroutines);
+ uint32_t maxLSubrs = maxSubroutines;
+ uint32_t maxGSubrs = 0;
+ {
+ // balance
+ if (maxLSubrs > type2_max_subrs) {
+ maxLSubrs = type2_max_subrs;
+ maxGSubrs = maxSubroutines - maxLSubrs;
+ }
+ if (maxGSubrs > type2_max_subrs) { maxGSubrs = type2_max_subrs; }
+ uint32_t total = maxLSubrs + maxGSubrs;
+ maxLSubrs = total / 2;
+ maxGSubrs = total - maxLSubrs;
+ }
+ caryll_Buffer *charStrings, *gsubrs, *lsubrs;
+ NEW(charStrings, g->totalCharStrings + 1);
+ NEW(lsubrs, maxLSubrs + 1);
+ NEW(gsubrs, maxGSubrs + 1);
+ uint32_t j = 0;
+ cff_SubrRule *r = g->root;
+ for (cff_SubrNode *e = r->guard->next; e != r->guard; e = e->next) {
+ serializeNodeToBuffer(e, charStrings + j, gsubrs, maxGSubrs, lsubrs, maxLSubrs);
+ if (!e->rule && e->terminal && e->hard) { j++; }
+ }
+
+ cff_Index *is = cff_iIndex.fromCallback(charStrings, g->totalCharStrings, from_array);
+ cff_Index *igs = cff_iIndex.fromCallback(gsubrs, maxGSubrs, from_array);
+ cff_Index *ils = cff_iIndex.fromCallback(lsubrs, maxLSubrs, from_array);
+
+ for (uint32_t j = 0; j < g->totalCharStrings; j++) {
+ FREE((charStrings + j)->data);
+ }
+ for (uint32_t j = 0; j < maxGSubrs; j++) {
+ FREE((gsubrs + j)->data);
+ }
+ for (uint32_t j = 0; j < maxLSubrs; j++) {
+ FREE((lsubrs + j)->data);
+ }
+ FREE(charStrings), FREE(gsubrs), FREE(lsubrs);
+
+ *s = cff_iIndex.build(is), *gs = cff_iIndex.build(igs), *ls = cff_iIndex.build(ils);
+ cff_iIndex.free(is), cff_iIndex.free(igs), cff_iIndex.free(ils);
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,55 @@
+#ifndef CARYLL_cff_SUBR_H
+#define CARYLL_cff_SUBR_H
+
+#include "libcff.h"
+#include "charstring-il.h"
+
+typedef struct __cff_SubrRule cff_SubrRule;
+typedef struct __cff_SubrNode cff_SubrNode;
+
+struct __cff_SubrNode {
+ cff_SubrNode *prev;
+ cff_SubrRule *rule;
+ OWNING cff_SubrNode *next;
+ OWNING caryll_Buffer *terminal;
+ bool hard;
+ bool guard;
+ bool last;
+};
+
+struct __cff_SubrRule {
+ bool printed;
+ bool numbered;
+ uint32_t number;
+ uint32_t height;
+ uint32_t uniqueIndex;
+ uint16_t cffIndex;
+ uint32_t refcount;
+ uint32_t effectiveLength;
+ OWNING cff_SubrNode *guard;
+ OWNING cff_SubrRule *next;
+};
+
+typedef struct {
+ uint8_t arity;
+ uint8_t *key;
+ cff_SubrNode *start;
+ UT_hash_handle hh;
+} cff_SubrDiagramIndex;
+
+typedef struct {
+ OWNING cff_SubrRule *root;
+ cff_SubrRule *last;
+ cff_SubrDiagramIndex *diagramIndex;
+ uint32_t totalRules;
+ uint32_t totalCharStrings;
+ bool doSubroutinize;
+} cff_SubrGraph;
+
+extern caryll_RefElementInterface(cff_SubrGraph) cff_iSubrGraph;
+
+void cff_insertILToGraph(cff_SubrGraph *g, cff_CharstringIL *il);
+void cff_ilGraphToBuffers(cff_SubrGraph *g, caryll_Buffer **s, caryll_Buffer **gs, caryll_Buffer **ls,
+ const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/logger/logger.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/logger/logger.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/logger/logger.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,171 @@
+#include "support/util.h"
+#include "otfcc/logger.h"
+
+typedef struct Logger {
+ otfcc_ILogger vtable;
+ void *target;
+ uint16_t level;
+ uint16_t lastLoggedLevel;
+ uint16_t levelCap;
+ sds *indents;
+ uint8_t verbosityLimit;
+} Logger;
+
+const char *otfcc_LoggerTypeNames[3] = {"[ERROR]", "[WARNING]", "[NOTE]"};
+
+static void loggerIndent(otfcc_ILogger *_self, const char *segment) {
+ ((otfcc_ILogger *)_self)->indentSDS(_self, sdsnew(segment));
+}
+static void loggerIndentSDS(otfcc_ILogger *_self, MOVE sds segment) {
+ Logger *self = (Logger *)_self;
+ uint8_t newLevel = self->level + 1;
+ if (newLevel > self->levelCap) {
+ self->levelCap += self->levelCap / 2 + 1;
+ RESIZE(self->indents, self->levelCap);
+ }
+ self->level++;
+ self->indents[self->level - 1] = segment;
+}
+
+static void loggerDedent(otfcc_ILogger *_self) {
+ Logger *self = (Logger *)_self;
+ if (!self->level) return;
+ sdsfree(self->indents[self->level - 1]);
+ self->level -= 1;
+ if (self->level < self->lastLoggedLevel) { self->lastLoggedLevel = self->level; }
+}
+static void loggerFinish(otfcc_ILogger *self) {
+ self->logSDS(self, log_vl_progress + ((Logger *)self)->level, log_type_progress, sdsnew("Finish"));
+ self->dedent(self);
+}
+static void loggerStart(otfcc_ILogger *self, const char *segment) {
+ self->indentSDS(self, sdsnew(segment));
+ self->logSDS(self, log_vl_progress + ((Logger *)self)->level, log_type_progress, sdsnew("Begin"));
+}
+static void loggerStartSDS(otfcc_ILogger *self, MOVE sds segment) {
+ self->indentSDS(self, segment);
+ self->logSDS(self, log_vl_progress + ((Logger *)self)->level, log_type_progress, sdsnew("Begin"));
+}
+static void loggerLog(otfcc_ILogger *self, uint8_t verbosity, otfcc_LoggerType type, const char *data) {
+ self->logSDS(self, verbosity, type, sdsnew(data));
+}
+
+static void loggerLogSDS(otfcc_ILogger *_self, uint8_t verbosity, otfcc_LoggerType type, MOVE sds data) {
+ Logger *self = (Logger *)_self;
+ sds demand = sdsempty();
+ for (uint16_t level = 0; level < self->level; level++) {
+ if (level < self->lastLoggedLevel - 1) {
+ for (size_t j = 0; j < sdslen(self->indents[level]); j++) {
+ demand = sdscat(demand, " ");
+ }
+ if (level < self->lastLoggedLevel - 2) {
+ demand = sdscat(demand, " | ");
+ } else {
+ demand = sdscat(demand, " |-");
+ }
+ } else {
+ demand = sdscatfmt(demand, "%S : ", self->indents[level]);
+ }
+ }
+ if (type < 3) {
+ demand = sdscatfmt(demand, "%s %S", otfcc_LoggerTypeNames[type], data);
+ } else {
+ demand = sdscatfmt(demand, "%S", data);
+ }
+ sdsfree(data);
+ if (verbosity <= self->verbosityLimit) {
+ _self->getTarget(_self)->push(self->target, demand);
+ self->lastLoggedLevel = self->level;
+ } else {
+ sdsfree(demand);
+ }
+}
+
+static otfcc_ILoggerTarget *loggerGetTarget(otfcc_ILogger *_self) {
+ Logger *self = (Logger *)_self;
+ return (otfcc_ILoggerTarget *)self->target;
+}
+
+static void loggerSetVerbosity(otfcc_ILogger *_self, uint8_t verbosity) {
+ Logger *self = (Logger *)_self;
+ self->verbosityLimit = verbosity;
+}
+
+static INLINE void loggerDispose(otfcc_ILogger *_self) {
+ Logger *self = (Logger *)_self;
+ if (!self) return;
+ otfcc_ILoggerTarget *target = _self->getTarget(_self);
+ target->dispose(target);
+ for (uint16_t level = 0; level < self->level; level++) {
+ sdsfree(self->indents[level]);
+ }
+ FREE(self->indents);
+ FREE(self);
+}
+
+const otfcc_ILogger VTABLE_LOGGER = {.dispose = loggerDispose,
+ .indent = loggerIndent,
+ .indentSDS = loggerIndentSDS,
+ .start = loggerStart,
+ .startSDS = loggerStartSDS,
+ .log = loggerLog,
+ .logSDS = loggerLogSDS,
+ .dedent = loggerDedent,
+ .finish = loggerFinish,
+ .getTarget = loggerGetTarget,
+ .setVerbosity = loggerSetVerbosity};
+
+otfcc_ILogger *otfcc_newLogger(otfcc_ILoggerTarget *target) {
+ Logger *logger;
+ NEW(logger);
+ logger->target = target;
+ logger->vtable = VTABLE_LOGGER;
+ return (otfcc_ILogger *)logger;
+}
+
+// STDERR logger target
+
+typedef struct StderrTarget { otfcc_ILoggerTarget vtable; } StderrTarget;
+
+static void stderrTargetDispose(otfcc_ILoggerTarget *_self) {
+ StderrTarget *self = (StderrTarget *)_self;
+ if (!self) return;
+ FREE(self);
+}
+
+static void stderrTargetPush(otfcc_ILoggerTarget *_self, MOVE sds data) {
+ fprintf(stderr, "%s", data);
+ if (data[sdslen(data) - 1] != '\n') fprintf(stderr, "\n");
+ sdsfree(data);
+}
+
+const otfcc_ILoggerTarget VTABLE_STDERR_TARGET = {.dispose = stderrTargetDispose, .push = stderrTargetPush};
+
+otfcc_ILoggerTarget *otfcc_newStdErrTarget() {
+ StderrTarget *target;
+ NEW(target);
+ target->vtable = VTABLE_STDERR_TARGET;
+ return (otfcc_ILoggerTarget *)target;
+}
+
+// Empty logger target
+
+typedef struct EmptyTarget { otfcc_ILoggerTarget vtable; } EmptyTarget;
+static void emptyTargetDispose(otfcc_ILoggerTarget *_self) {
+ StderrTarget *self = (StderrTarget *)_self;
+ if (!self) return;
+ FREE(self);
+}
+
+static void emptyTargetPush(otfcc_ILoggerTarget *_self, MOVE sds data) {
+ sdsfree(data);
+}
+
+const otfcc_ILoggerTarget VTABLE_EMPTY_TARGET = {.dispose = emptyTargetDispose, .push = emptyTargetPush};
+
+otfcc_ILoggerTarget *otfcc_newEmptyTarget() {
+ StderrTarget *target;
+ NEW(target);
+ target->vtable = VTABLE_EMPTY_TARGET;
+ return (otfcc_ILoggerTarget *)target;
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/otf-reader.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/otf-reader.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/otf-reader.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,91 @@
+#include "support/util.h"
+#include "otfcc/font.h"
+#include "table/all.h"
+
+#include "unconsolidate.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+static otfcc_font_subtype decideFontSubtypeOTF(otfcc_SplineFontContainer *sfnt, uint32_t index) {
+ otfcc_Packet packet = sfnt->packets[index];
+ FOR_TABLE_SILENT(OTFCC_CHR('C','F','F',' '), table) {
+ return FONTTYPE_CFF;
+ }
+ return FONTTYPE_TTF;
+}
+
+static otfcc_Font *readOtf(void *_sfnt, uint32_t index, const otfcc_Options *options) {
+ otfcc_SplineFontContainer *sfnt = (otfcc_SplineFontContainer *)_sfnt;
+ if (sfnt->count - 1 < index) {
+ return NULL;
+ } else {
+ otfcc_Font *font = otfcc_iFont.create();
+ otfcc_Packet packet = sfnt->packets[index];
+ font->subtype = decideFontSubtypeOTF(sfnt, index);
+ font->fvar = otfcc_readFvar(packet, options);
+ font->head = otfcc_readHead(packet, options);
+ font->maxp = otfcc_readMaxp(packet, options);
+ font->name = otfcc_readName(packet, options);
+ font->meta = otfcc_readMeta(packet, options);
+ font->OS_2 = otfcc_readOS_2(packet, options);
+ font->post = otfcc_readPost(packet, options);
+ font->hhea = otfcc_readHhea(packet, options);
+ font->cmap = otfcc_readCmap(packet, options);
+ if (font->subtype == FONTTYPE_TTF) {
+ font->hmtx = otfcc_readHmtx(packet, options, font->hhea, font->maxp);
+ font->vhea = otfcc_readVhea(packet, options);
+ if (font->vhea) font->vmtx = otfcc_readVmtx(packet, options, font->vhea, font->maxp);
+ font->fpgm = otfcc_readFpgmPrep(packet, options, OTFCC_CHR('f','p','g','m'));
+ font->prep = otfcc_readFpgmPrep(packet, options, OTFCC_CHR('p','r','e','p'));
+ font->cvt_ = otfcc_readCvt(packet, options, OTFCC_CHR('c','v','t',' '));
+ font->gasp = otfcc_readGasp(packet, options);
+ font->VDMX = otfcc_readVDMX(packet, options);
+ font->LTSH = otfcc_readLTSH(packet, options);
+
+ GlyfIOContext ctx = {.locaIsLong = font->head->indexToLocFormat,
+ .numGlyphs = font->maxp->numGlyphs,
+ .nPhantomPoints = 4, // Since MS rasterizer v1.7,
+ // it would always add 4 phantom points
+ .fvar = font->fvar};
+ font->glyf = otfcc_readGlyf(packet, options, &ctx);
+ } else {
+ table_CFFAndGlyf cffpr = otfcc_readCFFAndGlyfTables(packet, options, font->head);
+ font->CFF_ = cffpr.meta;
+ font->glyf = cffpr.glyphs;
+ font->vhea = otfcc_readVhea(packet, options);
+ if (font->vhea) {
+ font->vmtx = otfcc_readVmtx(packet, options, font->vhea, font->maxp);
+ font->VORG = otfcc_readVORG(packet, options);
+ }
+ }
+ if (font->glyf) {
+ font->GSUB = otfcc_readOtl(packet, options, OTFCC_CHR('G','S','U','B'), font->glyf->length);
+ font->GPOS = otfcc_readOtl(packet, options, OTFCC_CHR('G','P','O','S'), font->glyf->length);
+ font->GDEF = otfcc_readGDEF(packet, options);
+ }
+ font->BASE = otfcc_readBASE(packet, options);
+
+ // Color font
+ font->CPAL = otfcc_readCPAL(packet, options);
+ font->COLR = otfcc_readCOLR(packet, options);
+ font->SVG_ = otfcc_readSVG(packet, options);
+
+ // VTT TSI entries
+ font->TSI_01 = otfcc_readTSI(packet, options, OTFCC_CHR('T','S','I','0'), OTFCC_CHR('T','S','I','1'));
+ font->TSI_23 = otfcc_readTSI(packet, options, OTFCC_CHR('T','S','I','2'), OTFCC_CHR('T','S','I','3'));
+ font->TSI5 = otfcc_readTSI5(packet, options);
+
+ otfcc_unconsolidateFont(font, options);
+ return font;
+ }
+}
+static INLINE void freeReader(otfcc_IFontBuilder *self) {
+ free(self);
+}
+otfcc_IFontBuilder *otfcc_newOTFReader() {
+ otfcc_IFontBuilder *reader;
+ NEW(reader);
+ reader->read = readOtf;
+ reader->free = freeReader;
+ return reader;
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,399 @@
+#include "unconsolidate.h"
+#include "support/util.h"
+#include "support/aglfn/aglfn.h"
+#include "support/sha1/sha1.h"
+
+typedef struct {
+ uint8_t hash[SHA1_BLOCK_SIZE];
+} GlyphHash;
+static void hashVQS(caryll_Buffer *buf, vq_Segment s) {
+ bufwrite8(buf, s.type);
+ switch (s.type) {
+ case VQ_STILL:
+ bufwrite32b(buf, otfcc_to_fixed(s.val.still));
+ break;
+ case VQ_DELTA:
+ bufwrite32b(buf, otfcc_to_fixed(s.val.delta.quantity));
+ bufwrite32b(buf, (uint32_t)s.val.delta.region->dimensions);
+ for (size_t j = 0; j < s.val.delta.region->dimensions; j++) {
+ const vq_AxisSpan *span = &s.val.delta.region->spans[j];
+ bufwrite32b(buf, otfcc_to_f2dot14(span->start));
+ bufwrite32b(buf, otfcc_to_f2dot14(span->peak));
+ bufwrite32b(buf, otfcc_to_f2dot14(span->end));
+ }
+ }
+}
+
+static void hashVQ(caryll_Buffer *buf, VQ x) {
+ bufwrite32b(buf, otfcc_to_fixed(x.kernel));
+ bufwrite32b(buf, (uint32_t)x.shift.length);
+ for (size_t j = 0; j < x.shift.length; j++) {
+ hashVQS(buf, x.shift.items[j]);
+ }
+}
+
+static GlyphHash nameGlyphByHash(glyf_Glyph *g, table_glyf *glyf) {
+ caryll_Buffer *buf = bufnew();
+ bufwrite8(buf, 'H');
+ hashVQ(buf, g->advanceWidth);
+ bufwrite8(buf, 'h');
+ hashVQ(buf, g->horizontalOrigin);
+ bufwrite8(buf, 'V');
+ hashVQ(buf, g->advanceHeight);
+ bufwrite8(buf, 'v');
+ hashVQ(buf, g->verticalOrigin);
+ // contours
+ bufwrite8(buf, 'C');
+ bufwrite8(buf, '(');
+ for (shapeid_t j = 0; j < g->contours.length; j++) {
+ bufwrite8(buf, '(');
+ glyf_Contour *c = &g->contours.items[j];
+ for (shapeid_t k = 0; k < c->length; k++) {
+ hashVQ(buf, c->items[k].x);
+ hashVQ(buf, c->items[k].y);
+ bufwrite8(buf, c->items[k].onCurve ? 1 : 0);
+ }
+ bufwrite8(buf, ')');
+ }
+ bufwrite8(buf, ')');
+ // references
+ bufwrite8(buf, 'R');
+ bufwrite8(buf, '(');
+ for (shapeid_t j = 0; j < g->references.length; j++) {
+ glyf_ComponentReference *r = &g->references.items[j];
+ GlyphHash h = nameGlyphByHash(glyf->items[r->glyph.index], glyf);
+ bufwrite_bytes(buf, SHA1_BLOCK_SIZE, h.hash);
+ hashVQ(buf, r->x);
+ hashVQ(buf, r->y);
+ bufwrite32b(buf, otfcc_to_f2dot14(r->a));
+ bufwrite32b(buf, otfcc_to_f2dot14(r->b));
+ bufwrite32b(buf, otfcc_to_f2dot14(r->c));
+ bufwrite32b(buf, otfcc_to_f2dot14(r->d));
+ }
+ bufwrite8(buf, ')');
+ // stemH, stemV
+ bufwrite8(buf, 's'), bufwrite8(buf, 'H');
+ bufwrite8(buf, '(');
+ for (shapeid_t j = 0; j < g->stemH.length; j++) {
+ bufwrite32b(buf, otfcc_to_fixed(g->stemH.items[j].position));
+ bufwrite32b(buf, otfcc_to_fixed(g->stemH.items[j].width));
+ }
+ bufwrite8(buf, ')');
+ bufwrite8(buf, 's'), bufwrite8(buf, 'V');
+ bufwrite8(buf, '(');
+ for (shapeid_t j = 0; j < g->stemV.length; j++) {
+ bufwrite32b(buf, otfcc_to_fixed(g->stemV.items[j].position));
+ bufwrite32b(buf, otfcc_to_fixed(g->stemV.items[j].width));
+ }
+ bufwrite8(buf, ')');
+ // hintmask, contourmask
+ bufwrite8(buf, 'm'), bufwrite8(buf, 'H');
+ bufwrite8(buf, '(');
+ for (shapeid_t j = 0; j < g->hintMasks.length; j++) {
+ bufwrite16b(buf, g->hintMasks.items[j].contoursBefore);
+ bufwrite16b(buf, g->hintMasks.items[j].pointsBefore);
+ for (shapeid_t k = 0; k < g->stemH.length; k++) {
+ bufwrite8(buf, g->hintMasks.items[j].maskH[k]);
+ }
+ for (shapeid_t k = 0; k < g->stemV.length; k++) {
+ bufwrite8(buf, g->hintMasks.items[j].maskV[k]);
+ }
+ }
+ bufwrite8(buf, ')');
+ bufwrite8(buf, 'm'), bufwrite8(buf, 'C');
+ bufwrite8(buf, '(');
+ for (shapeid_t j = 0; j < g->contourMasks.length; j++) {
+ bufwrite16b(buf, g->contourMasks.items[j].contoursBefore);
+ bufwrite16b(buf, g->contourMasks.items[j].pointsBefore);
+ for (shapeid_t k = 0; k < g->stemH.length; k++) {
+ bufwrite8(buf, g->contourMasks.items[j].maskH[k]);
+ }
+ for (shapeid_t k = 0; k < g->stemV.length; k++) {
+ bufwrite8(buf, g->contourMasks.items[j].maskV[k]);
+ }
+ }
+ bufwrite8(buf, ')');
+ // instructions
+ bufwrite8(buf, 'I');
+ bufwrite32b(buf, g->instructionsLength);
+ bufwrite_bytes(buf, g->instructionsLength, g->instructions);
+ // Generate SHA1
+ SHA1_CTX ctx;
+ uint8_t hash[SHA1_BLOCK_SIZE];
+ sha1_init(&ctx);
+ sha1_update(&ctx, buf->data, buflen(buf));
+ sha1_final(&ctx, hash);
+ GlyphHash h;
+ for (uint16_t j = 0; j < SHA1_BLOCK_SIZE; j++) {
+ h.hash[j] = hash[j];
+ }
+ buffree(buf);
+ return h;
+}
+
+// Unconsolidation: Remove redundent data and de-couple internal data
+// It does these things:
+// 1. Merge hmtx data into glyf
+// 2. Replace all glyph IDs into glyph names. Note all glyph references with
+// same name whare one unique string entity stored in font->glyph_order.
+// (Separate?)
+static otfcc_GlyphOrder *createGlyphOrder(otfcc_Font *font, const otfcc_Options *options) {
+ otfcc_GlyphOrder *glyph_order = GlyphOrder.create();
+
+ glyphid_t numGlyphs = font->glyf->length;
+ sds prefix;
+ if (options->glyph_name_prefix) {
+ prefix = sdsnew(options->glyph_name_prefix);
+ } else {
+ prefix = sdsempty();
+ }
+
+ // pass 1: Map to existing glyph names
+ for (glyphid_t j = 0; j < numGlyphs; j++) {
+ glyf_Glyph *g = font->glyf->items[j];
+ if (options->name_glyphs_by_hash) { // name by hash
+ GlyphHash h = nameGlyphByHash(g, font->glyf);
+ sds gname = sdsempty();
+ for (uint16_t j = 0; j < SHA1_BLOCK_SIZE; j++) {
+ if (!(j % 4) && (j / 4)) {
+ gname = sdscatprintf(gname, "-%02X", h.hash[j]);
+ } else {
+ gname = sdscatprintf(gname, "%02X", h.hash[j]);
+ }
+ }
+ if (GlyphOrder.lookupName(glyph_order, gname)) {
+ // found duplicate glyph
+ glyphid_t n = 2;
+ bool stillIn = false;
+ do {
+ if (stillIn) n += 1;
+ sds newname = sdscatprintf(sdsempty(), "%s-%s%d", gname, prefix, n);
+ stillIn = GlyphOrder.lookupName(glyph_order, newname);
+ sdsfree(newname);
+ } while (stillIn);
+ sds newname = sdscatprintf(sdsempty(), "%s-%s%d", gname, prefix, n);
+ sds sharedName = GlyphOrder.setByGID(glyph_order, j, newname);
+ if (g->name) sdsfree(g->name);
+ g->name = sdsdup(sharedName);
+ sdsfree(gname);
+ } else {
+ sds sharedName = GlyphOrder.setByGID(glyph_order, j, gname);
+ if (g->name) sdsfree(g->name);
+ g->name = sdsdup(sharedName);
+ }
+ } else if (options->ignore_glyph_order || options->name_glyphs_by_gid) {
+ // ignore built-in names
+ // pass
+ } else if (g->name) {
+ sds gname = sdscatprintf(sdsempty(), "%s%s", prefix, g->name);
+ sds sharedName = GlyphOrder.setByGID(glyph_order, j, gname);
+ if (g->name) sdsfree(g->name);
+ g->name = sdsdup(sharedName);
+ }
+ }
+
+ // pass 2: Map to `post` names
+ if (font->post != NULL && font->post->post_name_map != NULL && !options->ignore_glyph_order &&
+ !options->name_glyphs_by_gid) {
+ otfcc_GlyphOrderEntry *s, *tmp;
+ HASH_ITER(hhID, font->post->post_name_map->byGID, s, tmp) {
+ sds gname = sdscatprintf(sdsempty(), "%s%s", prefix, s->name);
+ GlyphOrder.setByGID(glyph_order, s->gid, gname);
+ }
+ }
+
+ // pass 3: Map to AGLFN & Unicode
+ if (font->cmap && !options->name_glyphs_by_gid) {
+ otfcc_GlyphOrder *aglfn = GlyphOrder.create();
+ aglfn_setupNames(aglfn);
+
+ cmap_Entry *s;
+ foreach_hash(s, font->cmap->unicodes) if (s->glyph.index > 0) {
+ sds name = NULL;
+ if (s->unicode > 0 && s->unicode < 0xFFFF) {
+ GlyphOrder.nameAField_Shared(aglfn, s->unicode, &name);
+ }
+ if (name == NULL) {
+ name = sdscatprintf(sdsempty(), "%suni%04X", prefix, s->unicode);
+ } else {
+ name = sdscatprintf(sdsempty(), "%s%s", prefix, name);
+ }
+ GlyphOrder.setByGID(glyph_order, s->glyph.index, name);
+ }
+
+ GlyphOrder.free(aglfn);
+ }
+
+ // pass 4 : Map to GID
+ for (glyphid_t j = 0; j < numGlyphs; j++) {
+ sds name;
+ if (j > 1) {
+ name = sdscatfmt(sdsempty(), "%sglyph%u", prefix, j);
+ } else if (j == 1) {
+ // GID 1 may often be ".null"
+ if (font->glyf->items[1] && !font->glyf->items[1]->contours.length &&
+ !font->glyf->items[1]->references.length) {
+ name = sdscatfmt(sdsempty(), "%s.null", prefix);
+ } else {
+ name = sdscatfmt(sdsempty(), "%sglyph%u", prefix, j);
+ }
+ } else {
+ name = sdscatfmt(sdsempty(), "%s.notdef", prefix);
+ }
+ GlyphOrder.setByGID(glyph_order, j, name);
+ }
+
+ sdsfree(prefix);
+ return glyph_order;
+}
+
+static void nameGlyphs(otfcc_Font *font, otfcc_GlyphOrder *gord) {
+ if (!gord) return;
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ glyf_Glyph *g = font->glyf->items[j];
+ sds glyphName = NULL;
+ GlyphOrder.nameAField_Shared(gord, j, &glyphName);
+ if (g->name) sdsfree(g->name);
+ g->name = sdsdup(glyphName);
+ }
+}
+
+static void unconsolidate_chaining(otfcc_Font *font, otl_Lookup *lookup, table_OTL *table) {
+ tableid_t totalRules = 0;
+ for (tableid_t j = 0; j < lookup->subtables.length; j++) {
+ if (!lookup->subtables.items[j]) continue;
+ if (lookup->subtables.items[j]->chaining.type == otl_chaining_poly) {
+ totalRules += lookup->subtables.items[j]->chaining.rulesCount;
+ } else if (lookup->subtables.items[j]->chaining.type == otl_chaining_canonical) {
+ totalRules += 1;
+ }
+ }
+ otl_SubtableList newsts;
+ otl_iSubtableList.init(&newsts);
+ for (tableid_t j = 0; j < lookup->subtables.length; j++) {
+ if (!lookup->subtables.items[j]) continue;
+ if (lookup->subtables.items[j]->chaining.type == otl_chaining_poly) {
+ for (tableid_t k = 0; k < lookup->subtables.items[j]->chaining.rulesCount; k++) {
+ otl_Subtable *st;
+ NEW(st);
+ st->chaining.type = otl_chaining_canonical;
+ // transfer ownership of rule
+ st->chaining.rule = *(lookup->subtables.items[j]->chaining.rules[k]);
+ FREE(lookup->subtables.items[j]->chaining.rules[k]);
+ otl_iSubtableList.push(&newsts, st);
+ }
+ FREE(lookup->subtables.items[j]->chaining.rules);
+ FREE(lookup->subtables.items[j]);
+ } else if (lookup->subtables.items[j]->chaining.type == otl_chaining_canonical) {
+ otl_Subtable *st;
+ NEW(st);
+ st->chaining.type = otl_chaining_canonical;
+ st->chaining.rule = lookup->subtables.items[j]->chaining.rule;
+ otl_iSubtableList.push(&newsts, st);
+ lookup->subtables.items[j] = NULL;
+ }
+ }
+ otl_iSubtableList.disposeDependent(&lookup->subtables, lookup);
+ lookup->subtables = newsts;
+}
+
+static void expandChain(otfcc_Font *font, otl_Lookup *lookup, table_OTL *table) {
+ switch (lookup->type) {
+ case otl_type_gsub_chaining:
+ case otl_type_gpos_chaining:
+ unconsolidate_chaining(font, lookup, table);
+ break;
+ default:
+ break;
+ }
+}
+
+static void expandChainingLookups(otfcc_Font *font) {
+ if (font->GSUB) {
+ for (uint32_t j = 0; j < font->GSUB->lookups.length; j++) {
+ otl_Lookup *lookup = font->GSUB->lookups.items[j];
+ expandChain(font, lookup, font->GSUB);
+ }
+ }
+ if (font->GPOS) {
+ for (uint32_t j = 0; j < font->GPOS->lookups.length; j++) {
+ otl_Lookup *lookup = font->GPOS->lookups.items[j];
+ expandChain(font, lookup, font->GPOS);
+ }
+ }
+}
+
+static void mergeHmtx(otfcc_Font *font) {
+ // Merge hmtx table into glyf.
+ if (!(font->hhea && font->hmtx && font->glyf)) return;
+ uint32_t count_a = font->hhea->numberOfMetrics;
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ glyf_Glyph *g = font->glyf->items[j];
+ const pos_t adw = font->hmtx->metrics[(j < count_a ? j : count_a - 1)].advanceWidth;
+ const pos_t lsb =
+ j < count_a ? font->hmtx->metrics[j].lsb : font->hmtx->leftSideBearing[j - count_a];
+
+ iVQ.inplacePlus(&g->advanceWidth, iVQ.createStill(adw));
+ iVQ.inplacePlus(&g->horizontalOrigin, iVQ.createStill(-lsb + g->stat.xMin));
+ }
+ table_iHmtx.free(font->hmtx);
+ font->hmtx = NULL;
+}
+
+static void mergeVmtx(otfcc_Font *font) {
+ // Merge vmtx table into glyf.
+ if (!(font->vhea && font->vmtx && font->glyf)) return;
+ uint32_t count_a = font->vhea->numOfLongVerMetrics;
+
+ pos_t *vorgs = NULL;
+
+ if (font->VORG) {
+ NEW_CLEAN_N(vorgs, font->glyf->length);
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ vorgs[j] = font->VORG->defaultVerticalOrigin;
+ }
+ for (glyphid_t j = 0; j < font->VORG->numVertOriginYMetrics; j++) {
+ if (!(font->VORG->entries[j].gid < font->glyf->length)) continue;
+ vorgs[font->VORG->entries[j].gid] = font->VORG->entries[j].verticalOrigin;
+ }
+ table_iVORG.free(font->VORG);
+ font->VORG = NULL;
+ }
+
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ glyf_Glyph *g = font->glyf->items[j];
+ const pos_t adh = font->vmtx->metrics[(j < count_a ? j : count_a - 1)].advanceHeight;
+ const pos_t tsb =
+ j < count_a ? font->vmtx->metrics[j].tsb : font->vmtx->topSideBearing[j - count_a];
+
+ iVQ.inplacePlus(&g->advanceHeight, iVQ.createStill(adh));
+ iVQ.inplacePlus(&g->verticalOrigin, iVQ.createStill(vorgs ? vorgs[j] : tsb + g->stat.yMax));
+ }
+
+ if (vorgs) FREE(vorgs);
+ table_iVmtx.free(font->vmtx);
+ font->vmtx = NULL;
+}
+
+static void mergeLTSH(otfcc_Font *font) {
+ if (font->glyf && font->LTSH) {
+ for (glyphid_t j = 0; j < font->glyf->length && j < font->LTSH->numGlyphs; j++) {
+ font->glyf->items[j]->yPel = font->LTSH->yPels[j];
+ }
+ }
+}
+
+void otfcc_unconsolidateFont(otfcc_Font *font, const otfcc_Options *options) {
+ // Merge metrics
+ mergeHmtx(font);
+ mergeVmtx(font);
+ mergeLTSH(font);
+ // expand chaining lookups
+ expandChainingLookups(font);
+ // Name glyphs
+ if (font->glyf) {
+ otfcc_GlyphOrder *gord = createGlyphOrder(font, options);
+ nameGlyphs(font, gord);
+ GlyphOrder.free(gord);
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,9 @@
+#ifndef CARYLL_OTF_READER_UNCONSOLIDATE_H
+#define CARYLL_OTF_READER_UNCONSOLIDATE_H
+
+#include "otfcc/font.h"
+#include "table/all.h"
+
+void otfcc_unconsolidateFont(otfcc_Font *font, const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/otf-writer.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/otf-writer.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/otf-writer.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,106 @@
+#include "support/util.h"
+#include "otfcc/font.h"
+#include "table/all.h"
+#include "otfcc/sfnt-builder.h"
+#include "stat.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+static void *serializeToOTF(otfcc_Font *font, const otfcc_Options *options) {
+ // do stat before serialize
+ otfcc_statFont(font, options);
+
+ otfcc_SFNTBuilder *builder =
+ otfcc_newSFNTBuilder(font->subtype == FONTTYPE_CFF ? OTFCC_CHR('O','T','T','O') : 0x00010000, options);
+ // Outline data
+ if (font->subtype == FONTTYPE_TTF) {
+ table_GlyfAndLocaBuffers pair = otfcc_buildGlyf(font->glyf, font->head, options);
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('g','l','y','f'), pair.glyf);
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('l','o','c','a'), pair.loca);
+ } else {
+ table_CFFAndGlyf r = {font->CFF_, font->glyf};
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('C','F','F',' '), otfcc_buildCFF(r, options));
+ }
+
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('h','e','a','d'), otfcc_buildHead(font->head, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('h','h','e','a'), otfcc_buildHhea(font->hhea, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('O','S','/','2'), otfcc_buildOS_2(font->OS_2, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('m','a','x','p'), otfcc_buildMaxp(font->maxp, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('n','a','m','e'), otfcc_buildName(font->name, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('m','e','t','a'), otfcc_buildMeta(font->meta, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('p','o','s','t'),
+ otfcc_buildPost(font->post, font->glyph_order, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('c','m','a','p'), otfcc_buildCmap(font->cmap, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('g','a','s','p'), otfcc_buildGasp(font->gasp, options));
+
+ if (font->subtype == FONTTYPE_TTF) {
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('f','p','g','m'), otfcc_buildFpgmPrep(font->fpgm, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('p','r','e','p'), otfcc_buildFpgmPrep(font->prep, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('c','v','t',' '), otfcc_buildCvt(font->cvt_, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('L','T','S','H'), otfcc_buildLTSH(font->LTSH, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('V','D','M','X'), otfcc_buildVDMX(font->VDMX, options));
+ }
+
+ if (font->hhea && font->maxp && font->hmtx) {
+ uint16_t hmtx_counta = font->hhea->numberOfMetrics;
+ uint16_t hmtx_countk = font->maxp->numGlyphs - font->hhea->numberOfMetrics;
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('h','m','t','x'),
+ otfcc_buildHmtx(font->hmtx, hmtx_counta, hmtx_countk, options));
+ }
+
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('v','h','e','a'), otfcc_buildVhea(font->vhea, options));
+ if (font->vhea && font->maxp && font->vmtx) {
+ uint16_t vmtx_counta = font->vhea->numOfLongVerMetrics;
+ uint16_t vmtx_countk = font->maxp->numGlyphs - font->vhea->numOfLongVerMetrics;
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('v','m','t','x'),
+ otfcc_buildVmtx(font->vmtx, vmtx_counta, vmtx_countk, options));
+ }
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('V','O','R','G'), otfcc_buildVORG(font->VORG, options));
+
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('G','S','U','B'), otfcc_buildOtl(font->GSUB, options, "GSUB"));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('G','P','O','S'), otfcc_buildOtl(font->GPOS, options, "GPOS"));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('G','D','E','F'), otfcc_buildGDEF(font->GDEF, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('B','A','S','E'), otfcc_buildBASE(font->BASE, options));
+
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('C','P','A','L'), otfcc_buildCPAL(font->CPAL, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('C','O','L','R'), otfcc_buildCOLR(font->COLR, options));
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('S','V','G',' '), otfcc_buildSVG(font->SVG_, options));
+
+ {
+ tsi_BuildTarget target = otfcc_buildTSI(font->TSI_01, options);
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('T','S','I','0'), target.indexPart);
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('T','S','I','1'), target.textPart);
+ }
+ {
+ tsi_BuildTarget target = otfcc_buildTSI(font->TSI_23, options);
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('T','S','I','2'), target.indexPart);
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('T','S','I','3'), target.textPart);
+ }
+ if (font->glyf) {
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('T','S','I','5'),
+ otfcc_buildTSI5(font->TSI5, options, font->glyf->length));
+ }
+
+ if (options->dummy_DSIG) {
+ caryll_Buffer *dsig = bufnew();
+ bufwrite32b(dsig, 0x00000001);
+ bufwrite16b(dsig, 0);
+ bufwrite16b(dsig, 0);
+ otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('D','S','I','G'), dsig);
+ }
+
+ caryll_Buffer *otf = otfcc_SFNTBuilder_serialize(builder);
+ otfcc_deleteSFNTBuilder(builder);
+ otfcc_unstatFont(font, options);
+ return otf;
+}
+static void freeFontWriter(otfcc_IFontSerializer *self) {
+ free(self);
+}
+otfcc_IFontSerializer *otfcc_newOTFWriter() {
+ otfcc_IFontSerializer *writer;
+ NEW(writer);
+ writer->serialize = serializeToOTF;
+ writer->free = freeFontWriter;
+ return writer;
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,706 @@
+#include "stat.h"
+
+#include <time.h>
+#include <float.h>
+#include "support/util.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+// Stating
+// Calculate necessary values for SFNT
+
+typedef enum { stat_not_started = 0, stat_doing = 1, stat_completed = 2 } stat_status;
+
+static glyf_GlyphStat stat_single_glyph(table_glyf *table, glyf_ComponentReference *gr,
+ stat_status *stated, uint8_t depth, glyphid_t topj,
+ const otfcc_Options *options) {
+ glyf_GlyphStat stat = {0, 0, 0, 0, 0, 0, 0, 0, 0};
+ glyphid_t j = gr->glyph.index;
+ if (depth >= 0xFF) return stat;
+ if (stated[j] == stat_doing) {
+ // We have a circular reference
+ logWarning("[Stat] Circular glyph reference found in gid %d to gid %d. The reference will "
+ "be dropped.\n",
+ topj, j);
+ stated[j] = stat_completed;
+ return stat;
+ }
+
+ glyf_Glyph *g = table->items[j];
+ stated[j] = stat_doing;
+ pos_t xmin = POS_MAX;
+ pos_t xmax = -POS_MAX;
+ pos_t ymin = POS_MAX;
+ pos_t ymax = -POS_MAX;
+ uint16_t nestDepth = 0;
+ uint16_t nPoints = 0;
+ uint16_t nCompositePoints = 0;
+ uint16_t nCompositeContours = 0;
+ // Stat xmin, xmax, ymin, ymax
+ for (shapeid_t c = 0; c < g->contours.length; c++) {
+ for (shapeid_t pj = 0; pj < g->contours.items[c].length; pj++) {
+ // Stat point coordinates USING the matrix transformation
+ glyf_Point *p = &(g->contours.items[c].items[pj]);
+ pos_t x = round(iVQ.getStill(gr->x) + gr->a * iVQ.getStill(p->x) +
+ gr->b * iVQ.getStill(p->y));
+ pos_t y = round(iVQ.getStill(gr->y) + gr->c * iVQ.getStill(p->x) +
+ gr->d * iVQ.getStill(p->y));
+ if (x < xmin) xmin = x;
+ if (x > xmax) xmax = x;
+ if (y < ymin) ymin = y;
+ if (y > ymax) ymax = y;
+ nPoints += 1;
+ }
+ }
+ nCompositePoints = nPoints;
+ nCompositeContours = g->contours.length;
+ for (shapeid_t r = 0; r < g->references.length; r++) {
+ glyf_ComponentReference ref;
+ glyf_iComponentReference.init(&ref);
+ glyf_ComponentReference *rr = &(g->references.items[r]);
+ // composite affine transformations
+ Handle.replace(&ref.glyph, Handle.fromIndex(g->references.items[r].glyph.index));
+ ref.a = gr->a * rr->a + rr->b * gr->c;
+ ref.b = rr->a * gr->b + rr->b * gr->d;
+ ref.c = gr->a * rr->c + gr->c * rr->d;
+ ref.d = gr->b * rr->c + rr->d * gr->d;
+ iVQ.replace(&ref.x, iVQ.createStill(iVQ.getStill(rr->x) + rr->a * iVQ.getStill(gr->x) +
+ rr->b * iVQ.getStill(gr->y)));
+ iVQ.replace(&ref.y, iVQ.createStill(iVQ.getStill(rr->y) + rr->c * iVQ.getStill(gr->x) +
+ rr->d * iVQ.getStill(gr->y)));
+
+ glyf_GlyphStat thatstat = stat_single_glyph(table, &ref, stated, depth + 1, topj, options);
+ if (thatstat.xMin < xmin) xmin = thatstat.xMin;
+ if (thatstat.xMax > xmax) xmax = thatstat.xMax;
+ if (thatstat.yMin < ymin) ymin = thatstat.yMin;
+ if (thatstat.yMax > ymax) ymax = thatstat.yMax;
+ if (thatstat.nestDepth + 1 > nestDepth) nestDepth = thatstat.nestDepth + 1;
+ nCompositePoints += thatstat.nCompositePoints;
+ nCompositeContours += thatstat.nCompositeContours;
+ }
+ // deal with space glyphs
+ if (xmin > xmax) xmin = xmax = 0;
+ if (ymin > ymax) ymin = ymax = 0;
+
+ // write back
+ stat.xMin = xmin;
+ stat.xMax = xmax;
+ stat.yMin = ymin;
+ stat.yMax = ymax;
+ stat.nestDepth = nestDepth;
+ stat.nPoints = nPoints;
+ stat.nContours = g->contours.length;
+ stat.nCompositePoints = nCompositePoints;
+ stat.nCompositeContours = nCompositeContours;
+ stated[j] = stat_completed;
+ return stat;
+}
+
+static void statGlyf(otfcc_Font *font, const otfcc_Options *options) {
+ stat_status *stated;
+ NEW(stated, font->glyf->length);
+ pos_t xmin = 0xFFFFFFFF;
+ pos_t xmax = -0xFFFFFFFF;
+ pos_t ymin = 0xFFFFFFFF;
+ pos_t ymax = -0xFFFFFFFF;
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ glyf_ComponentReference gr;
+ gr.glyph = Handle.fromIndex(j);
+ gr.x = iVQ.createStill(0);
+ gr.y = iVQ.createStill(0);
+ gr.a = 1;
+ gr.b = 0;
+ gr.c = 0;
+ gr.d = 1;
+ glyf_GlyphStat thatstat = font->glyf->items[j]->stat =
+ stat_single_glyph(font->glyf, &gr, stated, 0, j, options);
+ if (thatstat.xMin < xmin) xmin = thatstat.xMin;
+ if (thatstat.xMax > xmax) xmax = thatstat.xMax;
+ if (thatstat.yMin < ymin) ymin = thatstat.yMin;
+ if (thatstat.yMax > ymax) ymax = thatstat.yMax;
+ }
+ font->head->xMin = xmin;
+ font->head->xMax = xmax;
+ font->head->yMin = ymin;
+ font->head->yMax = ymax;
+ FREE(stated);
+}
+
+static void statMaxp(otfcc_Font *font) {
+ uint16_t nestDepth = 0;
+ uint16_t nPoints = 0;
+ uint16_t nContours = 0;
+ uint16_t nComponents = 0;
+ uint16_t nCompositePoints = 0;
+ uint16_t nCompositeContours = 0;
+ uint16_t instSize = 0;
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ glyf_Glyph *g = font->glyf->items[j];
+ if (g->contours.length > 0) {
+ if (g->stat.nPoints > nPoints) nPoints = g->stat.nPoints;
+ if (g->stat.nContours > nContours) nContours = g->stat.nContours;
+ } else if (g->references.length > 0) {
+ if (g->stat.nCompositePoints > nCompositePoints)
+ nCompositePoints = g->stat.nCompositePoints;
+ if (g->stat.nCompositeContours > nCompositeContours)
+ nCompositeContours = g->stat.nCompositeContours;
+ if (g->stat.nestDepth > nestDepth) nestDepth = g->stat.nestDepth;
+ if (g->references.length > nComponents) nComponents = g->references.length;
+ }
+ if (g->instructionsLength > instSize) instSize = g->instructionsLength;
+ }
+ font->maxp->maxPoints = nPoints;
+ font->maxp->maxContours = nContours;
+ font->maxp->maxCompositePoints = nCompositePoints;
+ font->maxp->maxCompositeContours = nCompositeContours;
+ font->maxp->maxComponentDepth = nestDepth;
+ font->maxp->maxComponentElements = nComponents;
+ font->maxp->maxSizeOfInstructions = instSize;
+}
+
+static void statHmtx(otfcc_Font *font, const otfcc_Options *options) {
+ if (!font->glyf) return;
+ table_hmtx *hmtx;
+ NEW(hmtx);
+ glyphid_t count_a = font->glyf->length;
+ glyphid_t count_k = 0;
+ bool lsbAtX_0 = true;
+ if (font->subtype == FONTTYPE_CFF) {
+ // pass
+ } else {
+ while (count_a > 2 && iVQ.getStill(font->glyf->items[count_a - 1]->advanceWidth) ==
+ iVQ.getStill(font->glyf->items[count_a - 2]->advanceWidth)) {
+ count_a--;
+ }
+ count_k = font->glyf->length - count_a;
+ }
+ NEW(hmtx->metrics, count_a);
+ NEW(hmtx->leftSideBearing, count_k);
+
+ pos_t minLSB = 0x7FFF;
+ pos_t minRSB = 0x7FFF;
+ pos_t maxExtent = -0x8000;
+ length_t maxWidth = 0;
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ glyf_Glyph *g = font->glyf->items[j];
+ if (iVQ.isZero(g->horizontalOrigin, 1.0 / 1000.0)) {
+ iVQ.replace(&g->horizontalOrigin, iVQ.neutral());
+ } else {
+ lsbAtX_0 = false;
+ }
+ const pos_t hori = iVQ.getStill(g->horizontalOrigin);
+ const pos_t advw = iVQ.getStill(g->advanceWidth);
+ const pos_t lsb = (g->stat.xMin) - hori;
+ const pos_t rsb = advw + hori - (g->stat.xMax);
+
+ if (j < count_a) {
+ hmtx->metrics[j].advanceWidth = advw;
+ hmtx->metrics[j].lsb = lsb;
+ } else {
+ hmtx->leftSideBearing[j - count_a] = lsb;
+ }
+
+ if (advw > maxWidth) maxWidth = advw;
+ if (lsb < minLSB) minLSB = lsb;
+ if (rsb < minRSB) minRSB = rsb;
+ if (g->stat.xMax - hori > maxExtent) { maxExtent = g->stat.xMax - hori; }
+ }
+ font->hhea->numberOfMetrics = count_a;
+ font->hhea->minLeftSideBearing = minLSB;
+ font->hhea->minRightSideBearing = minRSB;
+ font->hhea->xMaxExtent = maxExtent;
+ font->hhea->advanceWidthMax = maxWidth;
+ font->hmtx = hmtx;
+ // set bit 1 in head.flags
+ font->head->flags = (font->head->flags & (~0x2)) | (lsbAtX_0 ? 0x2 : 0);
+}
+static void statVmtx(otfcc_Font *font, const otfcc_Options *options) {
+ if (!font->glyf) return;
+ table_vmtx *vmtx;
+ NEW(vmtx);
+ glyphid_t count_a = font->glyf->length;
+ glyphid_t count_k = 0;
+ if (font->subtype == FONTTYPE_CFF && !options->cff_short_vmtx) {
+ // pass
+ } else {
+ while (count_a > 2 && iVQ.getStill(font->glyf->items[count_a - 1]->advanceHeight) ==
+ iVQ.getStill(font->glyf->items[count_a - 2]->advanceHeight)) {
+ count_a--;
+ }
+ count_k = font->glyf->length - count_a;
+ }
+ NEW(vmtx->metrics, count_a);
+ NEW(vmtx->topSideBearing, count_k);
+
+ pos_t minTSB = 0x7FFF;
+ pos_t minBSB = 0x7FFF;
+ pos_t maxExtent = -0x8000;
+ length_t maxHeight = 0;
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ glyf_Glyph *g = font->glyf->items[j];
+ const pos_t vori = iVQ.getStill(g->verticalOrigin);
+ const pos_t advh = iVQ.getStill(g->advanceHeight);
+ const pos_t tsb = (vori) - (g->stat.yMax);
+ const pos_t bsb = (g->stat.yMin) - (vori) + (advh);
+ if (j < count_a) {
+ vmtx->metrics[j].advanceHeight = advh;
+ vmtx->metrics[j].tsb = tsb;
+ } else {
+ vmtx->topSideBearing[j - count_a] = tsb;
+ }
+ if (advh > maxHeight) maxHeight = advh;
+ if (tsb < minTSB) minTSB = tsb;
+ if (bsb < minBSB) minBSB = bsb;
+ if (vori - g->stat.yMin > maxExtent) { maxExtent = vori - g->stat.yMin; }
+ }
+ font->vhea->numOfLongVerMetrics = count_a;
+ font->vhea->minTop = minTSB;
+ font->vhea->minBottom = minBSB;
+ font->vhea->yMaxExtent = maxExtent;
+ font->vhea->advanceHeightMax = maxHeight;
+ font->vmtx = vmtx;
+}
+static void statOS_2UnicodeRanges(otfcc_Font *font, const otfcc_Options *options) {
+ cmap_Entry *item;
+ // Stat for OS/2.ulUnicodeRange.
+ uint32_t u1 = 0;
+ uint32_t u2 = 0;
+ uint32_t u3 = 0;
+ uint32_t u4 = 0;
+ int32_t minUnicode = 0xFFFF;
+ int32_t maxUnicode = 0;
+ foreach_hash(item, font->cmap->unicodes) {
+ int u = item->unicode;
+ // Stat for minimium and maximium unicode
+ if (u < minUnicode) minUnicode = u;
+ if (u > maxUnicode) maxUnicode = u;
+ // Reference: https://www.microsoft.com/typography/otspec/os2.htm#ur
+ if ((u >= 0x0000 && u <= 0x007F)) { u1 |= (1 << 0); }
+ if ((u >= 0x0080 && u <= 0x00FF)) { u1 |= (1 << 1); }
+ if ((u >= 0x0100 && u <= 0x017F)) { u1 |= (1 << 2); }
+ if ((u >= 0x0180 && u <= 0x024F)) { u1 |= (1 << 3); }
+ if ((u >= 0x0250 && u <= 0x02AF) || (u >= 0x1D00 && u <= 0x1D7F) ||
+ (u >= 0x1D80 && u <= 0x1DBF)) {
+ u1 |= (1 << 4);
+ }
+ if ((u >= 0x02B0 && u <= 0x02FF) || (u >= 0xA700 && u <= 0xA71F)) { u1 |= (1 << 5); }
+ if ((u >= 0x0300 && u <= 0x036F) || (u >= 0x1DC0 && u <= 0x1DFF)) { u1 |= (1 << 6); }
+ if ((u >= 0x0370 && u <= 0x03FF)) { u1 |= (1 << 7); }
+ if ((u >= 0x2C80 && u <= 0x2CFF)) { u1 |= (1 << 8); }
+ if ((u >= 0x0400 && u <= 0x04FF) || (u >= 0x0500 && u <= 0x052F) ||
+ (u >= 0x2DE0 && u <= 0x2DFF) || (u >= 0xA640 && u <= 0xA69F)) {
+ u1 |= (1 << 9);
+ }
+ if ((u >= 0x0530 && u <= 0x058F)) { u1 |= (1 << 10); }
+ if ((u >= 0x0590 && u <= 0x05FF)) { u1 |= (1 << 11); }
+ if ((u >= 0xA500 && u <= 0xA63F)) { u1 |= (1 << 12); }
+ if ((u >= 0x0600 && u <= 0x06FF) || (u >= 0x0750 && u <= 0x077F)) { u1 |= (1 << 13); }
+ if ((u >= 0x07C0 && u <= 0x07FF)) { u1 |= (1 << 14); }
+ if ((u >= 0x0900 && u <= 0x097F)) { u1 |= (1 << 15); }
+ if ((u >= 0x0980 && u <= 0x09FF)) { u1 |= (1 << 16); }
+ if ((u >= 0x0A00 && u <= 0x0A7F)) { u1 |= (1 << 17); }
+ if ((u >= 0x0A80 && u <= 0x0AFF)) { u1 |= (1 << 18); }
+ if ((u >= 0x0B00 && u <= 0x0B7F)) { u1 |= (1 << 19); }
+ if ((u >= 0x0B80 && u <= 0x0BFF)) { u1 |= (1 << 20); }
+ if ((u >= 0x0C00 && u <= 0x0C7F)) { u1 |= (1 << 21); }
+ if ((u >= 0x0C80 && u <= 0x0CFF)) { u1 |= (1 << 22); }
+ if ((u >= 0x0D00 && u <= 0x0D7F)) { u1 |= (1 << 23); }
+ if ((u >= 0x0E00 && u <= 0x0E7F)) { u1 |= (1 << 24); }
+ if ((u >= 0x0E80 && u <= 0x0EFF)) { u1 |= (1 << 25); }
+ if ((u >= 0x10A0 && u <= 0x10FF) || (u >= 0x2D00 && u <= 0x2D2F)) { u1 |= (1 << 26); }
+ if ((u >= 0x1B00 && u <= 0x1B7F)) { u1 |= (1 << 27); }
+ if ((u >= 0x1100 && u <= 0x11FF)) { u1 |= (1 << 28); }
+ if ((u >= 0x1E00 && u <= 0x1EFF) || (u >= 0x2C60 && u <= 0x2C7F) ||
+ (u >= 0xA720 && u <= 0xA7FF)) {
+ u1 |= (1 << 29);
+ }
+ if ((u >= 0x1F00 && u <= 0x1FFF)) { u1 |= (1 << 30); }
+ if ((u >= 0x2000 && u <= 0x206F) || (u >= 0x2E00 && u <= 0x2E7F)) { u1 |= (1 << 31); }
+ if ((u >= 0x2070 && u <= 0x209F)) { u2 |= (1 << 0); }
+ if ((u >= 0x20A0 && u <= 0x20CF)) { u2 |= (1 << 1); }
+ if ((u >= 0x20D0 && u <= 0x20FF)) { u2 |= (1 << 2); }
+ if ((u >= 0x2100 && u <= 0x214F)) { u2 |= (1 << 3); }
+ if ((u >= 0x2150 && u <= 0x218F)) { u2 |= (1 << 4); }
+ if ((u >= 0x2190 && u <= 0x21FF) || (u >= 0x27F0 && u <= 0x27FF) ||
+ (u >= 0x2900 && u <= 0x297F) || (u >= 0x2B00 && u <= 0x2BFF)) {
+ u2 |= (1 << 5);
+ }
+ if ((u >= 0x2200 && u <= 0x22FF) || (u >= 0x2A00 && u <= 0x2AFF) ||
+ (u >= 0x27C0 && u <= 0x27EF) || (u >= 0x2980 && u <= 0x29FF)) {
+ u2 |= (1 << 6);
+ }
+ if ((u >= 0x2300 && u <= 0x23FF)) { u2 |= (1 << 7); }
+ if ((u >= 0x2400 && u <= 0x243F)) { u2 |= (1 << 8); }
+ if ((u >= 0x2440 && u <= 0x245F)) { u2 |= (1 << 9); }
+ if ((u >= 0x2460 && u <= 0x24FF)) { u2 |= (1 << 10); }
+ if ((u >= 0x2500 && u <= 0x257F)) { u2 |= (1 << 11); }
+ if ((u >= 0x2580 && u <= 0x259F)) { u2 |= (1 << 12); }
+ if ((u >= 0x25A0 && u <= 0x25FF)) { u2 |= (1 << 13); }
+ if ((u >= 0x2600 && u <= 0x26FF)) { u2 |= (1 << 14); }
+ if ((u >= 0x2700 && u <= 0x27BF)) { u2 |= (1 << 15); }
+ if ((u >= 0x3000 && u <= 0x303F)) { u2 |= (1 << 16); }
+ if ((u >= 0x3040 && u <= 0x309F)) { u2 |= (1 << 17); }
+ if ((u >= 0x30A0 && u <= 0x30FF) || (u >= 0x31F0 && u <= 0x31FF)) { u2 |= (1 << 18); }
+ if ((u >= 0x3100 && u <= 0x312F) || (u >= 0x31A0 && u <= 0x31BF)) { u2 |= (1 << 19); }
+ if ((u >= 0x3130 && u <= 0x318F)) { u2 |= (1 << 20); }
+ if ((u >= 0xA840 && u <= 0xA87F)) { u2 |= (1 << 21); }
+ if ((u >= 0x3200 && u <= 0x32FF)) { u2 |= (1 << 22); }
+ if ((u >= 0x3300 && u <= 0x33FF)) { u2 |= (1 << 23); }
+ if ((u >= 0xAC00 && u <= 0xD7AF)) { u2 |= (1 << 24); }
+ if ((u >= 0xD800 && u <= 0xDFFF) || u > 0xFFFF) { u2 |= (1 << 25); }
+ if ((u >= 0x10900 && u <= 0x1091F)) { u2 |= (1 << 26); }
+ if ((u >= 0x4E00 && u <= 0x9FFF) || (u >= 0x2E80 && u <= 0x2EFF) ||
+ (u >= 0x2F00 && u <= 0x2FDF) || (u >= 0x2FF0 && u <= 0x2FFF) ||
+ (u >= 0x3400 && u <= 0x4DBF) || (u >= 0x20000 && u <= 0x2F7FF) ||
+ (u >= 0x3190 && u <= 0x319F)) {
+ u2 |= (1 << 27);
+ }
+ if ((u >= 0xE000 && u <= 0xF8FF)) { u2 |= (1 << 28); }
+ if ((u >= 0x31C0 && u <= 0x31EF) || (u >= 0xF900 && u <= 0xFAFF) ||
+ (u >= 0x2F800 && u <= 0x2FA1F)) {
+ u2 |= (1 << 29);
+ }
+ if ((u >= 0xFB00 && u <= 0xFB4F)) { u2 |= (1 << 30); }
+ if ((u >= 0xFB50 && u <= 0xFDFF)) { u2 |= (1 << 31); }
+ if ((u >= 0xFE20 && u <= 0xFE2F)) { u3 |= (1 << 0); }
+ if ((u >= 0xFE10 && u <= 0xFE1F) || (u >= 0xFE30 && u <= 0xFE4F)) { u3 |= (1 << 1); }
+ if ((u >= 0xFE50 && u <= 0xFE6F)) { u3 |= (1 << 2); }
+ if ((u >= 0xFE70 && u <= 0xFEFF)) { u3 |= (1 << 3); }
+ if ((u >= 0xFF00 && u <= 0xFFEF)) { u3 |= (1 << 4); }
+ if ((u >= 0xFFF0 && u <= 0xFFFF)) { u3 |= (1 << 5); }
+ if ((u >= 0x0F00 && u <= 0x0FFF)) { u3 |= (1 << 6); }
+ if ((u >= 0x0700 && u <= 0x074F)) { u3 |= (1 << 7); }
+ if ((u >= 0x0780 && u <= 0x07BF)) { u3 |= (1 << 8); }
+ if ((u >= 0x0D80 && u <= 0x0DFF)) { u3 |= (1 << 9); }
+ if ((u >= 0x1000 && u <= 0x109F)) { u3 |= (1 << 10); }
+ if ((u >= 0x1200 && u <= 0x137F) || (u >= 0x1380 && u <= 0x139F) ||
+ (u >= 0x2D80 && u <= 0x2DDF)) {
+ u3 |= (1 << 11);
+ }
+ if ((u >= 0x13A0 && u <= 0x13FF)) { u3 |= (1 << 12); }
+ if ((u >= 0x1400 && u <= 0x167F)) { u3 |= (1 << 13); }
+ if ((u >= 0x1680 && u <= 0x169F)) { u3 |= (1 << 14); }
+ if ((u >= 0x16A0 && u <= 0x16FF)) { u3 |= (1 << 15); }
+ if ((u >= 0x1780 && u <= 0x17FF) || (u >= 0x19E0 && u <= 0x19FF)) { u3 |= (1 << 16); }
+ if ((u >= 0x1800 && u <= 0x18AF)) { u3 |= (1 << 17); }
+ if ((u >= 0x2800 && u <= 0x28FF)) { u3 |= (1 << 18); }
+ if ((u >= 0xA000 && u <= 0xA48F) || (u >= 0xA490 && u <= 0xA4CF)) { u3 |= (1 << 19); }
+ if ((u >= 0x1700 && u <= 0x171F) || (u >= 0x1720 && u <= 0x173F) ||
+ (u >= 0x1740 && u <= 0x175F) || (u >= 0x1760 && u <= 0x177F)) {
+ u3 |= (1 << 20);
+ }
+ if ((u >= 0x10300 && u <= 0x1032F)) { u3 |= (1 << 21); }
+ if ((u >= 0x10330 && u <= 0x1034F)) { u3 |= (1 << 22); }
+ if ((u >= 0x10400 && u <= 0x1044F)) { u3 |= (1 << 23); }
+ if ((u >= 0x1D000 && u <= 0x1D0FF) || (u >= 0x1D100 && u <= 0x1D1FF) ||
+ (u >= 0x1D200 && u <= 0x1D24F)) {
+ u3 |= (1 << 24);
+ }
+ if ((u >= 0x1D400 && u <= 0x1D7FF)) { u3 |= (1 << 25); }
+ if ((u >= 0xFF000 && u <= 0xFFFFD) || (u >= 0x100000 && u <= 0x10FFFD)) { u3 |= (1 << 26); }
+ if ((u >= 0xFE00 && u <= 0xFE0F) || (u >= 0xE0100 && u <= 0xE01EF)) { u3 |= (1 << 27); }
+ if ((u >= 0xE0000 && u <= 0xE007F)) { u3 |= (1 << 28); }
+ if ((u >= 0x1900 && u <= 0x194F)) { u3 |= (1 << 29); }
+ if ((u >= 0x1950 && u <= 0x197F)) { u3 |= (1 << 30); }
+ if ((u >= 0x1980 && u <= 0x19DF)) { u3 |= (1 << 31); }
+ if ((u >= 0x1A00 && u <= 0x1A1F)) { u4 |= (1 << 0); }
+ if ((u >= 0x2C00 && u <= 0x2C5F)) { u4 |= (1 << 1); }
+ if ((u >= 0x2D30 && u <= 0x2D7F)) { u4 |= (1 << 2); }
+ if ((u >= 0x4DC0 && u <= 0x4DFF)) { u4 |= (1 << 3); }
+ if ((u >= 0xA800 && u <= 0xA82F)) { u4 |= (1 << 4); }
+ if ((u >= 0x10000 && u <= 0x1007F) || (u >= 0x10080 && u <= 0x100FF) ||
+ (u >= 0x10100 && u <= 0x1013F)) {
+ u4 |= (1 << 5);
+ }
+ if ((u >= 0x10140 && u <= 0x1018F)) { u4 |= (1 << 6); }
+ if ((u >= 0x10380 && u <= 0x1039F)) { u4 |= (1 << 7); }
+ if ((u >= 0x103A0 && u <= 0x103DF)) { u4 |= (1 << 8); }
+ if ((u >= 0x10450 && u <= 0x1047F)) { u4 |= (1 << 9); }
+ if ((u >= 0x10480 && u <= 0x104AF)) { u4 |= (1 << 10); }
+ if ((u >= 0x10800 && u <= 0x1083F)) { u4 |= (1 << 11); }
+ if ((u >= 0x10A00 && u <= 0x10A5F)) { u4 |= (1 << 12); }
+ if ((u >= 0x1D300 && u <= 0x1D35F)) { u4 |= (1 << 13); }
+ if ((u >= 0x12000 && u <= 0x123FF) || (u >= 0x12400 && u <= 0x1247F)) { u4 |= (1 << 14); }
+ if ((u >= 0x1D360 && u <= 0x1D37F)) { u4 |= (1 << 15); }
+ if ((u >= 0x1B80 && u <= 0x1BBF)) { u4 |= (1 << 16); }
+ if ((u >= 0x1C00 && u <= 0x1C4F)) { u4 |= (1 << 17); }
+ if ((u >= 0x1C50 && u <= 0x1C7F)) { u4 |= (1 << 18); }
+ if ((u >= 0xA880 && u <= 0xA8DF)) { u4 |= (1 << 19); }
+ if ((u >= 0xA900 && u <= 0xA92F)) { u4 |= (1 << 20); }
+ if ((u >= 0xA930 && u <= 0xA95F)) { u4 |= (1 << 21); }
+ if ((u >= 0xAA00 && u <= 0xAA5F)) { u4 |= (1 << 22); }
+ if ((u >= 0x10190 && u <= 0x101CF)) { u4 |= (1 << 23); }
+ if ((u >= 0x101D0 && u <= 0x101FF)) { u4 |= (1 << 24); }
+ if ((u >= 0x102A0 && u <= 0x102DF) || (u >= 0x10280 && u <= 0x1029F) ||
+ (u >= 0x10920 && u <= 0x1093F)) {
+ u4 |= (1 << 25);
+ }
+ if ((u >= 0x1F030 && u <= 0x1F09F) || (u >= 0x1F000 && u <= 0x1F02F)) { u4 |= (1 << 26); }
+ }
+ if (!options->keep_unicode_ranges) {
+ font->OS_2->ulUnicodeRange1 = u1;
+ font->OS_2->ulUnicodeRange2 = u2;
+ font->OS_2->ulUnicodeRange3 = u3;
+ font->OS_2->ulUnicodeRange4 = u4;
+ }
+ if (minUnicode < 0x10000) {
+ font->OS_2->usFirstCharIndex = minUnicode;
+ } else {
+ font->OS_2->usFirstCharIndex = 0xFFFF;
+ }
+ if (maxUnicode < 0x10000) {
+ font->OS_2->usLastCharIndex = maxUnicode;
+ } else {
+ font->OS_2->usLastCharIndex = 0xFFFF;
+ }
+}
+static void statOS_2AverageWidth(otfcc_Font *font, const otfcc_Options *options) {
+ if (options->keep_average_char_width) return;
+ uint32_t totalWidth = 0;
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ const pos_t adw = iVQ.getStill(font->glyf->items[j]->advanceWidth);
+ if (adw > 0) { totalWidth += adw; }
+ }
+ font->OS_2->xAvgCharWidth = totalWidth / font->glyf->length;
+}
+static uint16_t statMaxContextOTL(const table_OTL *table) {
+ uint16_t maxc = 1;
+ foreach (otl_Lookup **lookup_, table->lookups) {
+ otl_Lookup *lookup = *lookup_;
+ switch (lookup->type) {
+ case otl_type_gpos_pair:
+ case otl_type_gpos_markToBase:
+ case otl_type_gpos_markToLigature:
+ case otl_type_gpos_markToMark:
+ if (maxc < 2) maxc = 2;
+ break;
+ case otl_type_gsub_ligature:
+ foreach (otl_Subtable **subtable_, lookup->subtables) {
+ subtable_gsub_ligature *subtable = (subtable_gsub_ligature *)*subtable_;
+ foreach (otl_GsubLigatureEntry *entry, *subtable) {
+ if (maxc < entry->from->numGlyphs) { maxc = entry->from->numGlyphs; }
+ };
+ }
+ break;
+ case otl_type_gsub_chaining:
+ case otl_type_gpos_chaining:
+ foreach (otl_Subtable **subtable_, lookup->subtables) {
+ subtable_chaining *subtable = (subtable_chaining *)*subtable_;
+ if (maxc < subtable->rule.matchCount) maxc = subtable->rule.matchCount;
+ }
+ break;
+ case otl_type_gsub_reverse:
+ foreach (otl_Subtable **subtable_, lookup->subtables) {
+ subtable_gsub_reverse *subtable = (subtable_gsub_reverse *)*subtable_;
+ if (maxc < subtable->matchCount) maxc = subtable->matchCount;
+ }
+ break;
+ default:;
+ }
+ }
+ return maxc;
+}
+static void statMaxContext(otfcc_Font *font, const otfcc_Options *options) {
+ uint16_t maxc = 1;
+ if (font->GSUB) {
+ uint16_t maxc_gsub = statMaxContextOTL(font->GSUB);
+ if (maxc_gsub > maxc) maxc = maxc_gsub;
+ }
+ if (font->GPOS) {
+ uint16_t maxc_gpos = statMaxContextOTL(font->GPOS);
+ if (maxc_gpos > maxc) maxc = maxc_gpos;
+ }
+ font->OS_2->usMaxContext = maxc;
+}
+static void statOS_2(otfcc_Font *font, const otfcc_Options *options) {
+ statOS_2UnicodeRanges(font, options);
+ statOS_2AverageWidth(font, options);
+ statMaxContext(font, options);
+}
+
+#define MAX_STAT_METRIC 4096
+static void statCFFWidths(otfcc_Font *font) {
+ if (!font->glyf || !font->CFF_) return;
+ // Stat the most frequent character width
+ uint32_t *frequency;
+ NEW(frequency, MAX_STAT_METRIC);
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ uint16_t intWidth = (uint16_t)iVQ.getStill(font->glyf->items[j]->advanceWidth);
+ if (intWidth < MAX_STAT_METRIC) { frequency[intWidth] += 1; }
+ }
+ uint16_t maxfreq = 0;
+ uint16_t maxj = 0;
+ for (uint16_t j = 0; j < MAX_STAT_METRIC; j++) {
+ if (frequency[j] > maxfreq) {
+ maxfreq = frequency[j];
+ maxj = j;
+ }
+ }
+ // stat nominalWidthX
+ uint16_t nn = 0;
+ uint32_t nnsum = 0;
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ const pos_t adw = iVQ.getStill(font->glyf->items[j]->advanceWidth);
+ if (adw != maxj) { nn += 1, nnsum += adw; }
+ }
+ int16_t nominalWidthX = 0;
+ if (nn > 0) nominalWidthX = nnsum / nn;
+ if (font->CFF_->privateDict) {
+ font->CFF_->privateDict->defaultWidthX = maxj;
+ if (nn != 0) { font->CFF_->privateDict->nominalWidthX = nominalWidthX; }
+ }
+ if (font->CFF_->fdArray) {
+ for (tableid_t j = 0; j < font->CFF_->fdArrayCount; j++) {
+ font->CFF_->fdArray[j]->privateDict->defaultWidthX = maxj;
+ font->CFF_->fdArray[j]->privateDict->nominalWidthX = nominalWidthX;
+ }
+ }
+ FREE(frequency);
+}
+
+static void statVORG(otfcc_Font *font) {
+ if (!font->glyf || !font->CFF_ || !font->vhea || !font->vmtx) return;
+ uint32_t *frequency;
+ NEW(frequency, MAX_STAT_METRIC);
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ const pos_t vori = iVQ.getStill(font->glyf->items[j]->verticalOrigin);
+ if (vori >= 0 && vori < MAX_STAT_METRIC) { frequency[(uint16_t)(vori)] += 1; }
+ }
+ // stat VORG.defaultVerticalOrigin
+ uint32_t maxfreq = 0;
+ glyphid_t maxj = 0;
+ for (glyphid_t j = 0; j < MAX_STAT_METRIC; j++) {
+ if (frequency[j] > maxfreq) {
+ maxfreq = frequency[j];
+ maxj = j;
+ }
+ }
+
+ table_VORG *vorg;
+ NEW(vorg);
+ vorg->defaultVerticalOrigin = maxj;
+
+ glyphid_t nVertOrigs = 0;
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ const pos_t vori = iVQ.getStill(font->glyf->items[j]->verticalOrigin);
+ if (vori != maxj) { nVertOrigs += 1; }
+ }
+ vorg->numVertOriginYMetrics = nVertOrigs;
+ NEW(vorg->entries, nVertOrigs);
+
+ glyphid_t jj = 0;
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ const pos_t vori = iVQ.getStill(font->glyf->items[j]->verticalOrigin);
+ if (vori != maxj) {
+ vorg->entries[jj].gid = j;
+ vorg->entries[jj].verticalOrigin = vori;
+ jj += 1;
+ }
+ }
+ FREE(frequency);
+ font->VORG = vorg;
+}
+
+static void statLTSH(otfcc_Font *font) {
+ if (!font->glyf) return;
+ bool needLTSH = false;
+ for (glyphid_t j = 0; j < font->glyf->length; j++)
+ if (font->glyf->items[j]->yPel > 1) { needLTSH = true; }
+ if (!needLTSH) return;
+
+ table_LTSH *ltsh;
+ NEW(ltsh);
+ ltsh->numGlyphs = font->glyf->length;
+ NEW(ltsh->yPels, ltsh->numGlyphs);
+ for (glyphid_t j = 0; j < font->glyf->length; j++) {
+ ltsh->yPels[j] = font->glyf->items[j]->yPel;
+ }
+ font->LTSH = ltsh;
+}
+
+void otfcc_statFont(otfcc_Font *font, const otfcc_Options *options) {
+ if (font->glyf && font->head) {
+ statGlyf(font, options);
+ if (!options->keep_modified_time) {
+ font->head->modified = 2082844800 + (int64_t)time(NULL);
+ }
+ }
+ if (font->head && font->CFF_) {
+ table_CFF *cff = font->CFF_;
+ if (cff->fontBBoxBottom > font->head->yMin) cff->fontBBoxBottom = font->head->yMin;
+ if (cff->fontBBoxTop < font->head->yMax) cff->fontBBoxTop = font->head->yMax;
+ if (cff->fontBBoxLeft < font->head->xMin) cff->fontBBoxLeft = font->head->xMin;
+ if (cff->fontBBoxRight < font->head->xMax) cff->fontBBoxRight = font->head->xMax;
+ if (font->glyf && cff->isCID) { cff->cidCount = (uint32_t)font->glyf->length; }
+ if (cff->isCID) {
+ if (cff->fontMatrix) {
+ iVQ.dispose(&cff->fontMatrix->x);
+ iVQ.dispose(&cff->fontMatrix->y);
+ FREE(cff->fontMatrix);
+ cff->fontMatrix = NULL;
+ }
+ for (tableid_t j = 0; j < cff->fdArrayCount; j++) {
+ table_CFF *fd = cff->fdArray[j];
+ if (fd->fontMatrix) {
+ iVQ.dispose(&fd->fontMatrix->x);
+ iVQ.dispose(&fd->fontMatrix->y);
+ FREE(fd->fontMatrix);
+ fd->fontMatrix = NULL;
+ }
+ if (font->head->unitsPerEm == 1000) {
+ fd->fontMatrix = NULL;
+ } else {
+ NEW(fd->fontMatrix);
+ fd->fontMatrix->a = 1.0 / font->head->unitsPerEm;
+ fd->fontMatrix->b = 0.0;
+ fd->fontMatrix->c = 0.0;
+ fd->fontMatrix->d = 1.0 / font->head->unitsPerEm;
+ fd->fontMatrix->x = iVQ.neutral();
+ fd->fontMatrix->y = iVQ.neutral();
+ }
+ }
+ } else {
+ if (font->head->unitsPerEm == 1000) {
+ cff->fontMatrix = NULL;
+ } else {
+ NEW(cff->fontMatrix);
+ cff->fontMatrix->a = 1.0 / font->head->unitsPerEm;
+ cff->fontMatrix->b = 0.0;
+ cff->fontMatrix->c = 0.0;
+ cff->fontMatrix->d = 1.0 / font->head->unitsPerEm;
+ cff->fontMatrix->x = iVQ.neutral();
+ cff->fontMatrix->y = iVQ.neutral();
+ }
+ }
+
+ statCFFWidths(font);
+ }
+ if (font->glyf && font->maxp) { font->maxp->numGlyphs = (uint16_t)font->glyf->length; }
+ if (font->glyf && font->post) { font->post->maxMemType42 = (uint32_t)font->glyf->length; }
+ if (font->glyf && font->maxp && font->maxp->version == 0x10000) {
+ statMaxp(font);
+ if (font->fpgm && font->fpgm->length > font->maxp->maxSizeOfInstructions) {
+ font->maxp->maxSizeOfInstructions = font->fpgm->length;
+ }
+ if (font->prep && font->prep->length > font->maxp->maxSizeOfInstructions) {
+ font->maxp->maxSizeOfInstructions = font->prep->length;
+ }
+ }
+ if (font->OS_2 && font->cmap && font->glyf) statOS_2(font, options);
+ if (font->subtype == FONTTYPE_TTF) {
+ if (font->maxp) font->maxp->version = 0x00010000;
+ } else {
+ if (font->maxp) font->maxp->version = 0x00005000;
+ }
+ if (font->glyf && font->hhea) { statHmtx(font, options); }
+ if (font->glyf && font->vhea) { statVmtx(font, options), statVORG(font); }
+ statLTSH(font);
+}
+
+void otfcc_unstatFont(otfcc_Font *font, const otfcc_Options *options) {
+ otfcc_iFont.deleteTable(font, OTFCC_CHR('h','d','m','x'));
+ otfcc_iFont.deleteTable(font, OTFCC_CHR('h','m','t','x'));
+ otfcc_iFont.deleteTable(font, OTFCC_CHR('V','O','R','G'));
+ otfcc_iFont.deleteTable(font, OTFCC_CHR('v','m','t','x'));
+ otfcc_iFont.deleteTable(font, OTFCC_CHR('L','T','S','H'));
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,9 @@
+#ifndef CARYLL_OTF_WRITER_STAT_H
+#define CARYLL_OTF_WRITER_STAT_H
+
+#include "otfcc/font.h"
+#include "table/all.h"
+
+void otfcc_statFont(otfcc_Font *font, const otfcc_Options *options);
+void otfcc_unstatFont(otfcc_Font *font, const otfcc_Options *options);
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,592 @@
+#include "aglfn.h"
+#define GlyphOrder otfcc_pkgGlyphOrder
+
+// This table contains standard AGLFN 1.7 glyph names, mapped to Unicode.
+void aglfn_setupNames(otfcc_GlyphOrder *map) {
+ GlyphOrder.setByGID(map, 0x0041, sdsnew("A"));
+ GlyphOrder.setByGID(map, 0x00C6, sdsnew("AE"));
+ GlyphOrder.setByGID(map, 0x01FC, sdsnew("AEacute"));
+ GlyphOrder.setByGID(map, 0x00C1, sdsnew("Aacute"));
+ GlyphOrder.setByGID(map, 0x0102, sdsnew("Abreve"));
+ GlyphOrder.setByGID(map, 0x00C2, sdsnew("Acircumflex"));
+ GlyphOrder.setByGID(map, 0x00C4, sdsnew("Adieresis"));
+ GlyphOrder.setByGID(map, 0x00C0, sdsnew("Agrave"));
+ GlyphOrder.setByGID(map, 0x0391, sdsnew("Alpha"));
+ GlyphOrder.setByGID(map, 0x0386, sdsnew("Alphatonos"));
+ GlyphOrder.setByGID(map, 0x0100, sdsnew("Amacron"));
+ GlyphOrder.setByGID(map, 0x0104, sdsnew("Aogonek"));
+ GlyphOrder.setByGID(map, 0x00C5, sdsnew("Aring"));
+ GlyphOrder.setByGID(map, 0x01FA, sdsnew("Aringacute"));
+ GlyphOrder.setByGID(map, 0x00C3, sdsnew("Atilde"));
+ GlyphOrder.setByGID(map, 0x0042, sdsnew("B"));
+ GlyphOrder.setByGID(map, 0x0392, sdsnew("Beta"));
+ GlyphOrder.setByGID(map, 0x0043, sdsnew("C"));
+ GlyphOrder.setByGID(map, 0x0106, sdsnew("Cacute"));
+ GlyphOrder.setByGID(map, 0x010C, sdsnew("Ccaron"));
+ GlyphOrder.setByGID(map, 0x00C7, sdsnew("Ccedilla"));
+ GlyphOrder.setByGID(map, 0x0108, sdsnew("Ccircumflex"));
+ GlyphOrder.setByGID(map, 0x010A, sdsnew("Cdotaccent"));
+ GlyphOrder.setByGID(map, 0x03A7, sdsnew("Chi"));
+ GlyphOrder.setByGID(map, 0x0044, sdsnew("D"));
+ GlyphOrder.setByGID(map, 0x010E, sdsnew("Dcaron"));
+ GlyphOrder.setByGID(map, 0x0110, sdsnew("Dcroat"));
+ GlyphOrder.setByGID(map, 0x2206, sdsnew("Delta"));
+ GlyphOrder.setByGID(map, 0x0045, sdsnew("E"));
+ GlyphOrder.setByGID(map, 0x00C9, sdsnew("Eacute"));
+ GlyphOrder.setByGID(map, 0x0114, sdsnew("Ebreve"));
+ GlyphOrder.setByGID(map, 0x011A, sdsnew("Ecaron"));
+ GlyphOrder.setByGID(map, 0x00CA, sdsnew("Ecircumflex"));
+ GlyphOrder.setByGID(map, 0x00CB, sdsnew("Edieresis"));
+ GlyphOrder.setByGID(map, 0x0116, sdsnew("Edotaccent"));
+ GlyphOrder.setByGID(map, 0x00C8, sdsnew("Egrave"));
+ GlyphOrder.setByGID(map, 0x0112, sdsnew("Emacron"));
+ GlyphOrder.setByGID(map, 0x014A, sdsnew("Eng"));
+ GlyphOrder.setByGID(map, 0x0118, sdsnew("Eogonek"));
+ GlyphOrder.setByGID(map, 0x0395, sdsnew("Epsilon"));
+ GlyphOrder.setByGID(map, 0x0388, sdsnew("Epsilontonos"));
+ GlyphOrder.setByGID(map, 0x0397, sdsnew("Eta"));
+ GlyphOrder.setByGID(map, 0x0389, sdsnew("Etatonos"));
+ GlyphOrder.setByGID(map, 0x00D0, sdsnew("Eth"));
+ GlyphOrder.setByGID(map, 0x20AC, sdsnew("Euro"));
+ GlyphOrder.setByGID(map, 0x0046, sdsnew("F"));
+ GlyphOrder.setByGID(map, 0x0047, sdsnew("G"));
+ GlyphOrder.setByGID(map, 0x0393, sdsnew("Gamma"));
+ GlyphOrder.setByGID(map, 0x011E, sdsnew("Gbreve"));
+ GlyphOrder.setByGID(map, 0x01E6, sdsnew("Gcaron"));
+ GlyphOrder.setByGID(map, 0x011C, sdsnew("Gcircumflex"));
+ GlyphOrder.setByGID(map, 0x0120, sdsnew("Gdotaccent"));
+ GlyphOrder.setByGID(map, 0x0048, sdsnew("H"));
+ GlyphOrder.setByGID(map, 0x25CF, sdsnew("H18533"));
+ GlyphOrder.setByGID(map, 0x25AA, sdsnew("H18543"));
+ GlyphOrder.setByGID(map, 0x25AB, sdsnew("H18551"));
+ GlyphOrder.setByGID(map, 0x25A1, sdsnew("H22073"));
+ GlyphOrder.setByGID(map, 0x0126, sdsnew("Hbar"));
+ GlyphOrder.setByGID(map, 0x0124, sdsnew("Hcircumflex"));
+ GlyphOrder.setByGID(map, 0x0049, sdsnew("I"));
+ GlyphOrder.setByGID(map, 0x0132, sdsnew("IJ"));
+ GlyphOrder.setByGID(map, 0x00CD, sdsnew("Iacute"));
+ GlyphOrder.setByGID(map, 0x012C, sdsnew("Ibreve"));
+ GlyphOrder.setByGID(map, 0x00CE, sdsnew("Icircumflex"));
+ GlyphOrder.setByGID(map, 0x00CF, sdsnew("Idieresis"));
+ GlyphOrder.setByGID(map, 0x0130, sdsnew("Idotaccent"));
+ GlyphOrder.setByGID(map, 0x2111, sdsnew("Ifraktur"));
+ GlyphOrder.setByGID(map, 0x00CC, sdsnew("Igrave"));
+ GlyphOrder.setByGID(map, 0x012A, sdsnew("Imacron"));
+ GlyphOrder.setByGID(map, 0x012E, sdsnew("Iogonek"));
+ GlyphOrder.setByGID(map, 0x0399, sdsnew("Iota"));
+ GlyphOrder.setByGID(map, 0x03AA, sdsnew("Iotadieresis"));
+ GlyphOrder.setByGID(map, 0x038A, sdsnew("Iotatonos"));
+ GlyphOrder.setByGID(map, 0x0128, sdsnew("Itilde"));
+ GlyphOrder.setByGID(map, 0x004A, sdsnew("J"));
+ GlyphOrder.setByGID(map, 0x0134, sdsnew("Jcircumflex"));
+ GlyphOrder.setByGID(map, 0x004B, sdsnew("K"));
+ GlyphOrder.setByGID(map, 0x039A, sdsnew("Kappa"));
+ GlyphOrder.setByGID(map, 0x004C, sdsnew("L"));
+ GlyphOrder.setByGID(map, 0x0139, sdsnew("Lacute"));
+ GlyphOrder.setByGID(map, 0x039B, sdsnew("Lambda"));
+ GlyphOrder.setByGID(map, 0x013D, sdsnew("Lcaron"));
+ GlyphOrder.setByGID(map, 0x013F, sdsnew("Ldot"));
+ GlyphOrder.setByGID(map, 0x0141, sdsnew("Lslash"));
+ GlyphOrder.setByGID(map, 0x004D, sdsnew("M"));
+ GlyphOrder.setByGID(map, 0x039C, sdsnew("Mu"));
+ GlyphOrder.setByGID(map, 0x004E, sdsnew("N"));
+ GlyphOrder.setByGID(map, 0x0143, sdsnew("Nacute"));
+ GlyphOrder.setByGID(map, 0x0147, sdsnew("Ncaron"));
+ GlyphOrder.setByGID(map, 0x00D1, sdsnew("Ntilde"));
+ GlyphOrder.setByGID(map, 0x039D, sdsnew("Nu"));
+ GlyphOrder.setByGID(map, 0x004F, sdsnew("O"));
+ GlyphOrder.setByGID(map, 0x0152, sdsnew("OE"));
+ GlyphOrder.setByGID(map, 0x00D3, sdsnew("Oacute"));
+ GlyphOrder.setByGID(map, 0x014E, sdsnew("Obreve"));
+ GlyphOrder.setByGID(map, 0x00D4, sdsnew("Ocircumflex"));
+ GlyphOrder.setByGID(map, 0x00D6, sdsnew("Odieresis"));
+ GlyphOrder.setByGID(map, 0x00D2, sdsnew("Ograve"));
+ GlyphOrder.setByGID(map, 0x01A0, sdsnew("Ohorn"));
+ GlyphOrder.setByGID(map, 0x0150, sdsnew("Ohungarumlaut"));
+ GlyphOrder.setByGID(map, 0x014C, sdsnew("Omacron"));
+ GlyphOrder.setByGID(map, 0x2126, sdsnew("Omega"));
+ GlyphOrder.setByGID(map, 0x038F, sdsnew("Omegatonos"));
+ GlyphOrder.setByGID(map, 0x039F, sdsnew("Omicron"));
+ GlyphOrder.setByGID(map, 0x038C, sdsnew("Omicrontonos"));
+ GlyphOrder.setByGID(map, 0x00D8, sdsnew("Oslash"));
+ GlyphOrder.setByGID(map, 0x01FE, sdsnew("Oslashacute"));
+ GlyphOrder.setByGID(map, 0x00D5, sdsnew("Otilde"));
+ GlyphOrder.setByGID(map, 0x0050, sdsnew("P"));
+ GlyphOrder.setByGID(map, 0x03A6, sdsnew("Phi"));
+ GlyphOrder.setByGID(map, 0x03A0, sdsnew("Pi"));
+ GlyphOrder.setByGID(map, 0x03A8, sdsnew("Psi"));
+ GlyphOrder.setByGID(map, 0x0051, sdsnew("Q"));
+ GlyphOrder.setByGID(map, 0x0052, sdsnew("R"));
+ GlyphOrder.setByGID(map, 0x0154, sdsnew("Racute"));
+ GlyphOrder.setByGID(map, 0x0158, sdsnew("Rcaron"));
+ GlyphOrder.setByGID(map, 0x211C, sdsnew("Rfraktur"));
+ GlyphOrder.setByGID(map, 0x03A1, sdsnew("Rho"));
+ GlyphOrder.setByGID(map, 0x0053, sdsnew("S"));
+ GlyphOrder.setByGID(map, 0x250C, sdsnew("SF010000"));
+ GlyphOrder.setByGID(map, 0x2514, sdsnew("SF020000"));
+ GlyphOrder.setByGID(map, 0x2510, sdsnew("SF030000"));
+ GlyphOrder.setByGID(map, 0x2518, sdsnew("SF040000"));
+ GlyphOrder.setByGID(map, 0x253C, sdsnew("SF050000"));
+ GlyphOrder.setByGID(map, 0x252C, sdsnew("SF060000"));
+ GlyphOrder.setByGID(map, 0x2534, sdsnew("SF070000"));
+ GlyphOrder.setByGID(map, 0x251C, sdsnew("SF080000"));
+ GlyphOrder.setByGID(map, 0x2524, sdsnew("SF090000"));
+ GlyphOrder.setByGID(map, 0x2500, sdsnew("SF100000"));
+ GlyphOrder.setByGID(map, 0x2502, sdsnew("SF110000"));
+ GlyphOrder.setByGID(map, 0x2561, sdsnew("SF190000"));
+ GlyphOrder.setByGID(map, 0x2562, sdsnew("SF200000"));
+ GlyphOrder.setByGID(map, 0x2556, sdsnew("SF210000"));
+ GlyphOrder.setByGID(map, 0x2555, sdsnew("SF220000"));
+ GlyphOrder.setByGID(map, 0x2563, sdsnew("SF230000"));
+ GlyphOrder.setByGID(map, 0x2551, sdsnew("SF240000"));
+ GlyphOrder.setByGID(map, 0x2557, sdsnew("SF250000"));
+ GlyphOrder.setByGID(map, 0x255D, sdsnew("SF260000"));
+ GlyphOrder.setByGID(map, 0x255C, sdsnew("SF270000"));
+ GlyphOrder.setByGID(map, 0x255B, sdsnew("SF280000"));
+ GlyphOrder.setByGID(map, 0x255E, sdsnew("SF360000"));
+ GlyphOrder.setByGID(map, 0x255F, sdsnew("SF370000"));
+ GlyphOrder.setByGID(map, 0x255A, sdsnew("SF380000"));
+ GlyphOrder.setByGID(map, 0x2554, sdsnew("SF390000"));
+ GlyphOrder.setByGID(map, 0x2569, sdsnew("SF400000"));
+ GlyphOrder.setByGID(map, 0x2566, sdsnew("SF410000"));
+ GlyphOrder.setByGID(map, 0x2560, sdsnew("SF420000"));
+ GlyphOrder.setByGID(map, 0x2550, sdsnew("SF430000"));
+ GlyphOrder.setByGID(map, 0x256C, sdsnew("SF440000"));
+ GlyphOrder.setByGID(map, 0x2567, sdsnew("SF450000"));
+ GlyphOrder.setByGID(map, 0x2568, sdsnew("SF460000"));
+ GlyphOrder.setByGID(map, 0x2564, sdsnew("SF470000"));
+ GlyphOrder.setByGID(map, 0x2565, sdsnew("SF480000"));
+ GlyphOrder.setByGID(map, 0x2559, sdsnew("SF490000"));
+ GlyphOrder.setByGID(map, 0x2558, sdsnew("SF500000"));
+ GlyphOrder.setByGID(map, 0x2552, sdsnew("SF510000"));
+ GlyphOrder.setByGID(map, 0x2553, sdsnew("SF520000"));
+ GlyphOrder.setByGID(map, 0x256B, sdsnew("SF530000"));
+ GlyphOrder.setByGID(map, 0x256A, sdsnew("SF540000"));
+ GlyphOrder.setByGID(map, 0x015A, sdsnew("Sacute"));
+ GlyphOrder.setByGID(map, 0x0160, sdsnew("Scaron"));
+ GlyphOrder.setByGID(map, 0x015E, sdsnew("Scedilla"));
+ GlyphOrder.setByGID(map, 0x015C, sdsnew("Scircumflex"));
+ GlyphOrder.setByGID(map, 0x03A3, sdsnew("Sigma"));
+ GlyphOrder.setByGID(map, 0x0054, sdsnew("T"));
+ GlyphOrder.setByGID(map, 0x03A4, sdsnew("Tau"));
+ GlyphOrder.setByGID(map, 0x0166, sdsnew("Tbar"));
+ GlyphOrder.setByGID(map, 0x0164, sdsnew("Tcaron"));
+ GlyphOrder.setByGID(map, 0x0398, sdsnew("Theta"));
+ GlyphOrder.setByGID(map, 0x00DE, sdsnew("Thorn"));
+ GlyphOrder.setByGID(map, 0x0055, sdsnew("U"));
+ GlyphOrder.setByGID(map, 0x00DA, sdsnew("Uacute"));
+ GlyphOrder.setByGID(map, 0x016C, sdsnew("Ubreve"));
+ GlyphOrder.setByGID(map, 0x00DB, sdsnew("Ucircumflex"));
+ GlyphOrder.setByGID(map, 0x00DC, sdsnew("Udieresis"));
+ GlyphOrder.setByGID(map, 0x00D9, sdsnew("Ugrave"));
+ GlyphOrder.setByGID(map, 0x01AF, sdsnew("Uhorn"));
+ GlyphOrder.setByGID(map, 0x0170, sdsnew("Uhungarumlaut"));
+ GlyphOrder.setByGID(map, 0x016A, sdsnew("Umacron"));
+ GlyphOrder.setByGID(map, 0x0172, sdsnew("Uogonek"));
+ GlyphOrder.setByGID(map, 0x03A5, sdsnew("Upsilon"));
+ GlyphOrder.setByGID(map, 0x03D2, sdsnew("Upsilon1"));
+ GlyphOrder.setByGID(map, 0x03AB, sdsnew("Upsilondieresis"));
+ GlyphOrder.setByGID(map, 0x038E, sdsnew("Upsilontonos"));
+ GlyphOrder.setByGID(map, 0x016E, sdsnew("Uring"));
+ GlyphOrder.setByGID(map, 0x0168, sdsnew("Utilde"));
+ GlyphOrder.setByGID(map, 0x0056, sdsnew("V"));
+ GlyphOrder.setByGID(map, 0x0057, sdsnew("W"));
+ GlyphOrder.setByGID(map, 0x1E82, sdsnew("Wacute"));
+ GlyphOrder.setByGID(map, 0x0174, sdsnew("Wcircumflex"));
+ GlyphOrder.setByGID(map, 0x1E84, sdsnew("Wdieresis"));
+ GlyphOrder.setByGID(map, 0x1E80, sdsnew("Wgrave"));
+ GlyphOrder.setByGID(map, 0x0058, sdsnew("X"));
+ GlyphOrder.setByGID(map, 0x039E, sdsnew("Xi"));
+ GlyphOrder.setByGID(map, 0x0059, sdsnew("Y"));
+ GlyphOrder.setByGID(map, 0x00DD, sdsnew("Yacute"));
+ GlyphOrder.setByGID(map, 0x0176, sdsnew("Ycircumflex"));
+ GlyphOrder.setByGID(map, 0x0178, sdsnew("Ydieresis"));
+ GlyphOrder.setByGID(map, 0x1EF2, sdsnew("Ygrave"));
+ GlyphOrder.setByGID(map, 0x005A, sdsnew("Z"));
+ GlyphOrder.setByGID(map, 0x0179, sdsnew("Zacute"));
+ GlyphOrder.setByGID(map, 0x017D, sdsnew("Zcaron"));
+ GlyphOrder.setByGID(map, 0x017B, sdsnew("Zdotaccent"));
+ GlyphOrder.setByGID(map, 0x0396, sdsnew("Zeta"));
+ GlyphOrder.setByGID(map, 0x0061, sdsnew("a"));
+ GlyphOrder.setByGID(map, 0x00E1, sdsnew("aacute"));
+ GlyphOrder.setByGID(map, 0x0103, sdsnew("abreve"));
+ GlyphOrder.setByGID(map, 0x00E2, sdsnew("acircumflex"));
+ GlyphOrder.setByGID(map, 0x00B4, sdsnew("acute"));
+ GlyphOrder.setByGID(map, 0x0301, sdsnew("acutecomb"));
+ GlyphOrder.setByGID(map, 0x00E4, sdsnew("adieresis"));
+ GlyphOrder.setByGID(map, 0x00E6, sdsnew("ae"));
+ GlyphOrder.setByGID(map, 0x01FD, sdsnew("aeacute"));
+ GlyphOrder.setByGID(map, 0x00E0, sdsnew("agrave"));
+ GlyphOrder.setByGID(map, 0x2135, sdsnew("aleph"));
+ GlyphOrder.setByGID(map, 0x03B1, sdsnew("alpha"));
+ GlyphOrder.setByGID(map, 0x03AC, sdsnew("alphatonos"));
+ GlyphOrder.setByGID(map, 0x0101, sdsnew("amacron"));
+ GlyphOrder.setByGID(map, 0x0026, sdsnew("ampersand"));
+ GlyphOrder.setByGID(map, 0x2220, sdsnew("angle"));
+ GlyphOrder.setByGID(map, 0x2329, sdsnew("angleleft"));
+ GlyphOrder.setByGID(map, 0x232A, sdsnew("angleright"));
+ GlyphOrder.setByGID(map, 0x0387, sdsnew("anoteleia"));
+ GlyphOrder.setByGID(map, 0x0105, sdsnew("aogonek"));
+ GlyphOrder.setByGID(map, 0x2248, sdsnew("approxequal"));
+ GlyphOrder.setByGID(map, 0x00E5, sdsnew("aring"));
+ GlyphOrder.setByGID(map, 0x01FB, sdsnew("aringacute"));
+ GlyphOrder.setByGID(map, 0x2194, sdsnew("arrowboth"));
+ GlyphOrder.setByGID(map, 0x21D4, sdsnew("arrowdblboth"));
+ GlyphOrder.setByGID(map, 0x21D3, sdsnew("arrowdbldown"));
+ GlyphOrder.setByGID(map, 0x21D0, sdsnew("arrowdblleft"));
+ GlyphOrder.setByGID(map, 0x21D2, sdsnew("arrowdblright"));
+ GlyphOrder.setByGID(map, 0x21D1, sdsnew("arrowdblup"));
+ GlyphOrder.setByGID(map, 0x2193, sdsnew("arrowdown"));
+ GlyphOrder.setByGID(map, 0x2190, sdsnew("arrowleft"));
+ GlyphOrder.setByGID(map, 0x2192, sdsnew("arrowright"));
+ GlyphOrder.setByGID(map, 0x2191, sdsnew("arrowup"));
+ GlyphOrder.setByGID(map, 0x2195, sdsnew("arrowupdn"));
+ GlyphOrder.setByGID(map, 0x21A8, sdsnew("arrowupdnbse"));
+ GlyphOrder.setByGID(map, 0x005E, sdsnew("asciicircum"));
+ GlyphOrder.setByGID(map, 0x007E, sdsnew("asciitilde"));
+ GlyphOrder.setByGID(map, 0x002A, sdsnew("asterisk"));
+ GlyphOrder.setByGID(map, 0x2217, sdsnew("asteriskmath"));
+ GlyphOrder.setByGID(map, 0x0040, sdsnew("at"));
+ GlyphOrder.setByGID(map, 0x00E3, sdsnew("atilde"));
+ GlyphOrder.setByGID(map, 0x0062, sdsnew("b"));
+ GlyphOrder.setByGID(map, 0x005C, sdsnew("backslash"));
+ GlyphOrder.setByGID(map, 0x007C, sdsnew("bar"));
+ GlyphOrder.setByGID(map, 0x03B2, sdsnew("beta"));
+ GlyphOrder.setByGID(map, 0x2588, sdsnew("block"));
+ GlyphOrder.setByGID(map, 0x007B, sdsnew("braceleft"));
+ GlyphOrder.setByGID(map, 0x007D, sdsnew("braceright"));
+ GlyphOrder.setByGID(map, 0x005B, sdsnew("bracketleft"));
+ GlyphOrder.setByGID(map, 0x005D, sdsnew("bracketright"));
+ GlyphOrder.setByGID(map, 0x02D8, sdsnew("breve"));
+ GlyphOrder.setByGID(map, 0x00A6, sdsnew("brokenbar"));
+ GlyphOrder.setByGID(map, 0x2022, sdsnew("bullet"));
+ GlyphOrder.setByGID(map, 0x0063, sdsnew("c"));
+ GlyphOrder.setByGID(map, 0x0107, sdsnew("cacute"));
+ GlyphOrder.setByGID(map, 0x02C7, sdsnew("caron"));
+ GlyphOrder.setByGID(map, 0x21B5, sdsnew("carriagereturn"));
+ GlyphOrder.setByGID(map, 0x010D, sdsnew("ccaron"));
+ GlyphOrder.setByGID(map, 0x00E7, sdsnew("ccedilla"));
+ GlyphOrder.setByGID(map, 0x0109, sdsnew("ccircumflex"));
+ GlyphOrder.setByGID(map, 0x010B, sdsnew("cdotaccent"));
+ GlyphOrder.setByGID(map, 0x00B8, sdsnew("cedilla"));
+ GlyphOrder.setByGID(map, 0x00A2, sdsnew("cent"));
+ GlyphOrder.setByGID(map, 0x03C7, sdsnew("chi"));
+ GlyphOrder.setByGID(map, 0x25CB, sdsnew("circle"));
+ GlyphOrder.setByGID(map, 0x2297, sdsnew("circlemultiply"));
+ GlyphOrder.setByGID(map, 0x2295, sdsnew("circleplus"));
+ GlyphOrder.setByGID(map, 0x02C6, sdsnew("circumflex"));
+ GlyphOrder.setByGID(map, 0x2663, sdsnew("club"));
+ GlyphOrder.setByGID(map, 0x003A, sdsnew("colon"));
+ GlyphOrder.setByGID(map, 0x20A1, sdsnew("colonmonetary"));
+ GlyphOrder.setByGID(map, 0x002C, sdsnew("comma"));
+ GlyphOrder.setByGID(map, 0x2245, sdsnew("congruent"));
+ GlyphOrder.setByGID(map, 0x00A9, sdsnew("copyright"));
+ GlyphOrder.setByGID(map, 0x00A4, sdsnew("currency"));
+ GlyphOrder.setByGID(map, 0x0064, sdsnew("d"));
+ GlyphOrder.setByGID(map, 0x2020, sdsnew("dagger"));
+ GlyphOrder.setByGID(map, 0x2021, sdsnew("daggerdbl"));
+ GlyphOrder.setByGID(map, 0x010F, sdsnew("dcaron"));
+ GlyphOrder.setByGID(map, 0x0111, sdsnew("dcroat"));
+ GlyphOrder.setByGID(map, 0x00B0, sdsnew("degree"));
+ GlyphOrder.setByGID(map, 0x03B4, sdsnew("delta"));
+ GlyphOrder.setByGID(map, 0x2666, sdsnew("diamond"));
+ GlyphOrder.setByGID(map, 0x00A8, sdsnew("dieresis"));
+ GlyphOrder.setByGID(map, 0x0385, sdsnew("dieresistonos"));
+ GlyphOrder.setByGID(map, 0x00F7, sdsnew("divide"));
+ GlyphOrder.setByGID(map, 0x2593, sdsnew("dkshade"));
+ GlyphOrder.setByGID(map, 0x2584, sdsnew("dnblock"));
+ GlyphOrder.setByGID(map, 0x0024, sdsnew("dollar"));
+ GlyphOrder.setByGID(map, 0x20AB, sdsnew("dong"));
+ GlyphOrder.setByGID(map, 0x02D9, sdsnew("dotaccent"));
+ GlyphOrder.setByGID(map, 0x0323, sdsnew("dotbelowcomb"));
+ GlyphOrder.setByGID(map, 0x0131, sdsnew("dotlessi"));
+ GlyphOrder.setByGID(map, 0x22C5, sdsnew("dotmath"));
+ GlyphOrder.setByGID(map, 0x0065, sdsnew("e"));
+ GlyphOrder.setByGID(map, 0x00E9, sdsnew("eacute"));
+ GlyphOrder.setByGID(map, 0x0115, sdsnew("ebreve"));
+ GlyphOrder.setByGID(map, 0x011B, sdsnew("ecaron"));
+ GlyphOrder.setByGID(map, 0x00EA, sdsnew("ecircumflex"));
+ GlyphOrder.setByGID(map, 0x00EB, sdsnew("edieresis"));
+ GlyphOrder.setByGID(map, 0x0117, sdsnew("edotaccent"));
+ GlyphOrder.setByGID(map, 0x00E8, sdsnew("egrave"));
+ GlyphOrder.setByGID(map, 0x0038, sdsnew("eight"));
+ GlyphOrder.setByGID(map, 0x2208, sdsnew("element"));
+ GlyphOrder.setByGID(map, 0x2026, sdsnew("ellipsis"));
+ GlyphOrder.setByGID(map, 0x0113, sdsnew("emacron"));
+ GlyphOrder.setByGID(map, 0x2014, sdsnew("emdash"));
+ GlyphOrder.setByGID(map, 0x2205, sdsnew("emptyset"));
+ GlyphOrder.setByGID(map, 0x2013, sdsnew("endash"));
+ GlyphOrder.setByGID(map, 0x014B, sdsnew("eng"));
+ GlyphOrder.setByGID(map, 0x0119, sdsnew("eogonek"));
+ GlyphOrder.setByGID(map, 0x03B5, sdsnew("epsilon"));
+ GlyphOrder.setByGID(map, 0x03AD, sdsnew("epsilontonos"));
+ GlyphOrder.setByGID(map, 0x003D, sdsnew("equal"));
+ GlyphOrder.setByGID(map, 0x2261, sdsnew("equivalence"));
+ GlyphOrder.setByGID(map, 0x212E, sdsnew("estimated"));
+ GlyphOrder.setByGID(map, 0x03B7, sdsnew("eta"));
+ GlyphOrder.setByGID(map, 0x03AE, sdsnew("etatonos"));
+ GlyphOrder.setByGID(map, 0x00F0, sdsnew("eth"));
+ GlyphOrder.setByGID(map, 0x0021, sdsnew("exclam"));
+ GlyphOrder.setByGID(map, 0x203C, sdsnew("exclamdbl"));
+ GlyphOrder.setByGID(map, 0x00A1, sdsnew("exclamdown"));
+ GlyphOrder.setByGID(map, 0x2203, sdsnew("existential"));
+ GlyphOrder.setByGID(map, 0x0066, sdsnew("f"));
+ GlyphOrder.setByGID(map, 0x2640, sdsnew("female"));
+ GlyphOrder.setByGID(map, 0x2012, sdsnew("figuredash"));
+ GlyphOrder.setByGID(map, 0x25A0, sdsnew("filledbox"));
+ GlyphOrder.setByGID(map, 0x25AC, sdsnew("filledrect"));
+ GlyphOrder.setByGID(map, 0x0035, sdsnew("five"));
+ GlyphOrder.setByGID(map, 0x215D, sdsnew("fiveeighths"));
+ GlyphOrder.setByGID(map, 0x0192, sdsnew("florin"));
+ GlyphOrder.setByGID(map, 0x0034, sdsnew("four"));
+ GlyphOrder.setByGID(map, 0x2044, sdsnew("fraction"));
+ GlyphOrder.setByGID(map, 0x20A3, sdsnew("franc"));
+ GlyphOrder.setByGID(map, 0x0067, sdsnew("g"));
+ GlyphOrder.setByGID(map, 0x03B3, sdsnew("gamma"));
+ GlyphOrder.setByGID(map, 0x011F, sdsnew("gbreve"));
+ GlyphOrder.setByGID(map, 0x01E7, sdsnew("gcaron"));
+ GlyphOrder.setByGID(map, 0x011D, sdsnew("gcircumflex"));
+ GlyphOrder.setByGID(map, 0x0121, sdsnew("gdotaccent"));
+ GlyphOrder.setByGID(map, 0x00DF, sdsnew("germandbls"));
+ GlyphOrder.setByGID(map, 0x2207, sdsnew("gradient"));
+ GlyphOrder.setByGID(map, 0x0060, sdsnew("grave"));
+ GlyphOrder.setByGID(map, 0x0300, sdsnew("gravecomb"));
+ GlyphOrder.setByGID(map, 0x003E, sdsnew("greater"));
+ GlyphOrder.setByGID(map, 0x2265, sdsnew("greaterequal"));
+ GlyphOrder.setByGID(map, 0x00AB, sdsnew("guillemotleft"));
+ GlyphOrder.setByGID(map, 0x00BB, sdsnew("guillemotright"));
+ GlyphOrder.setByGID(map, 0x2039, sdsnew("guilsinglleft"));
+ GlyphOrder.setByGID(map, 0x203A, sdsnew("guilsinglright"));
+ GlyphOrder.setByGID(map, 0x0068, sdsnew("h"));
+ GlyphOrder.setByGID(map, 0x0127, sdsnew("hbar"));
+ GlyphOrder.setByGID(map, 0x0125, sdsnew("hcircumflex"));
+ GlyphOrder.setByGID(map, 0x2665, sdsnew("heart"));
+ GlyphOrder.setByGID(map, 0x0309, sdsnew("hookabovecomb"));
+ GlyphOrder.setByGID(map, 0x2302, sdsnew("house"));
+ GlyphOrder.setByGID(map, 0x02DD, sdsnew("hungarumlaut"));
+ GlyphOrder.setByGID(map, 0x002D, sdsnew("hyphen"));
+ GlyphOrder.setByGID(map, 0x0069, sdsnew("i"));
+ GlyphOrder.setByGID(map, 0x00ED, sdsnew("iacute"));
+ GlyphOrder.setByGID(map, 0x012D, sdsnew("ibreve"));
+ GlyphOrder.setByGID(map, 0x00EE, sdsnew("icircumflex"));
+ GlyphOrder.setByGID(map, 0x00EF, sdsnew("idieresis"));
+ GlyphOrder.setByGID(map, 0x00EC, sdsnew("igrave"));
+ GlyphOrder.setByGID(map, 0x0133, sdsnew("ij"));
+ GlyphOrder.setByGID(map, 0x012B, sdsnew("imacron"));
+ GlyphOrder.setByGID(map, 0x221E, sdsnew("infinity"));
+ GlyphOrder.setByGID(map, 0x222B, sdsnew("integral"));
+ GlyphOrder.setByGID(map, 0x2321, sdsnew("integralbt"));
+ GlyphOrder.setByGID(map, 0x2320, sdsnew("integraltp"));
+ GlyphOrder.setByGID(map, 0x2229, sdsnew("intersection"));
+ GlyphOrder.setByGID(map, 0x25D8, sdsnew("invbullet"));
+ GlyphOrder.setByGID(map, 0x25D9, sdsnew("invcircle"));
+ GlyphOrder.setByGID(map, 0x263B, sdsnew("invsmileface"));
+ GlyphOrder.setByGID(map, 0x012F, sdsnew("iogonek"));
+ GlyphOrder.setByGID(map, 0x03B9, sdsnew("iota"));
+ GlyphOrder.setByGID(map, 0x03CA, sdsnew("iotadieresis"));
+ GlyphOrder.setByGID(map, 0x0390, sdsnew("iotadieresistonos"));
+ GlyphOrder.setByGID(map, 0x03AF, sdsnew("iotatonos"));
+ GlyphOrder.setByGID(map, 0x0129, sdsnew("itilde"));
+ GlyphOrder.setByGID(map, 0x006A, sdsnew("j"));
+ GlyphOrder.setByGID(map, 0x0135, sdsnew("jcircumflex"));
+ GlyphOrder.setByGID(map, 0x006B, sdsnew("k"));
+ GlyphOrder.setByGID(map, 0x03BA, sdsnew("kappa"));
+ GlyphOrder.setByGID(map, 0x0138, sdsnew("kgreenlandic"));
+ GlyphOrder.setByGID(map, 0x006C, sdsnew("l"));
+ GlyphOrder.setByGID(map, 0x013A, sdsnew("lacute"));
+ GlyphOrder.setByGID(map, 0x03BB, sdsnew("lambda"));
+ GlyphOrder.setByGID(map, 0x013E, sdsnew("lcaron"));
+ GlyphOrder.setByGID(map, 0x0140, sdsnew("ldot"));
+ GlyphOrder.setByGID(map, 0x003C, sdsnew("less"));
+ GlyphOrder.setByGID(map, 0x2264, sdsnew("lessequal"));
+ GlyphOrder.setByGID(map, 0x258C, sdsnew("lfblock"));
+ GlyphOrder.setByGID(map, 0x20A4, sdsnew("lira"));
+ GlyphOrder.setByGID(map, 0x2227, sdsnew("logicaland"));
+ GlyphOrder.setByGID(map, 0x00AC, sdsnew("logicalnot"));
+ GlyphOrder.setByGID(map, 0x2228, sdsnew("logicalor"));
+ GlyphOrder.setByGID(map, 0x017F, sdsnew("longs"));
+ GlyphOrder.setByGID(map, 0x25CA, sdsnew("lozenge"));
+ GlyphOrder.setByGID(map, 0x0142, sdsnew("lslash"));
+ GlyphOrder.setByGID(map, 0x2591, sdsnew("ltshade"));
+ GlyphOrder.setByGID(map, 0x006D, sdsnew("m"));
+ GlyphOrder.setByGID(map, 0x00AF, sdsnew("macron"));
+ GlyphOrder.setByGID(map, 0x2642, sdsnew("male"));
+ GlyphOrder.setByGID(map, 0x2212, sdsnew("minus"));
+ GlyphOrder.setByGID(map, 0x2032, sdsnew("minute"));
+ GlyphOrder.setByGID(map, 0x00B5, sdsnew("mu"));
+ GlyphOrder.setByGID(map, 0x00D7, sdsnew("multiply"));
+ GlyphOrder.setByGID(map, 0x266A, sdsnew("musicalnote"));
+ GlyphOrder.setByGID(map, 0x266B, sdsnew("musicalnotedbl"));
+ GlyphOrder.setByGID(map, 0x006E, sdsnew("n"));
+ GlyphOrder.setByGID(map, 0x0144, sdsnew("nacute"));
+ GlyphOrder.setByGID(map, 0x0149, sdsnew("napostrophe"));
+ GlyphOrder.setByGID(map, 0x0148, sdsnew("ncaron"));
+ GlyphOrder.setByGID(map, 0x0039, sdsnew("nine"));
+ GlyphOrder.setByGID(map, 0x2209, sdsnew("notelement"));
+ GlyphOrder.setByGID(map, 0x2260, sdsnew("notequal"));
+ GlyphOrder.setByGID(map, 0x2284, sdsnew("notsubset"));
+ GlyphOrder.setByGID(map, 0x00F1, sdsnew("ntilde"));
+ GlyphOrder.setByGID(map, 0x03BD, sdsnew("nu"));
+ GlyphOrder.setByGID(map, 0x0023, sdsnew("numbersign"));
+ GlyphOrder.setByGID(map, 0x006F, sdsnew("o"));
+ GlyphOrder.setByGID(map, 0x00F3, sdsnew("oacute"));
+ GlyphOrder.setByGID(map, 0x014F, sdsnew("obreve"));
+ GlyphOrder.setByGID(map, 0x00F4, sdsnew("ocircumflex"));
+ GlyphOrder.setByGID(map, 0x00F6, sdsnew("odieresis"));
+ GlyphOrder.setByGID(map, 0x0153, sdsnew("oe"));
+ GlyphOrder.setByGID(map, 0x02DB, sdsnew("ogonek"));
+ GlyphOrder.setByGID(map, 0x00F2, sdsnew("ograve"));
+ GlyphOrder.setByGID(map, 0x01A1, sdsnew("ohorn"));
+ GlyphOrder.setByGID(map, 0x0151, sdsnew("ohungarumlaut"));
+ GlyphOrder.setByGID(map, 0x014D, sdsnew("omacron"));
+ GlyphOrder.setByGID(map, 0x03C9, sdsnew("omega"));
+ GlyphOrder.setByGID(map, 0x03D6, sdsnew("omega1"));
+ GlyphOrder.setByGID(map, 0x03CE, sdsnew("omegatonos"));
+ GlyphOrder.setByGID(map, 0x03BF, sdsnew("omicron"));
+ GlyphOrder.setByGID(map, 0x03CC, sdsnew("omicrontonos"));
+ GlyphOrder.setByGID(map, 0x0031, sdsnew("one"));
+ GlyphOrder.setByGID(map, 0x2024, sdsnew("onedotenleader"));
+ GlyphOrder.setByGID(map, 0x215B, sdsnew("oneeighth"));
+ GlyphOrder.setByGID(map, 0x00BD, sdsnew("onehalf"));
+ GlyphOrder.setByGID(map, 0x00BC, sdsnew("onequarter"));
+ GlyphOrder.setByGID(map, 0x2153, sdsnew("onethird"));
+ GlyphOrder.setByGID(map, 0x25E6, sdsnew("openbullet"));
+ GlyphOrder.setByGID(map, 0x00AA, sdsnew("ordfeminine"));
+ GlyphOrder.setByGID(map, 0x00BA, sdsnew("ordmasculine"));
+ GlyphOrder.setByGID(map, 0x221F, sdsnew("orthogonal"));
+ GlyphOrder.setByGID(map, 0x00F8, sdsnew("oslash"));
+ GlyphOrder.setByGID(map, 0x01FF, sdsnew("oslashacute"));
+ GlyphOrder.setByGID(map, 0x00F5, sdsnew("otilde"));
+ GlyphOrder.setByGID(map, 0x0070, sdsnew("p"));
+ GlyphOrder.setByGID(map, 0x00B6, sdsnew("paragraph"));
+ GlyphOrder.setByGID(map, 0x0028, sdsnew("parenleft"));
+ GlyphOrder.setByGID(map, 0x0029, sdsnew("parenright"));
+ GlyphOrder.setByGID(map, 0x2202, sdsnew("partialdiff"));
+ GlyphOrder.setByGID(map, 0x0025, sdsnew("percent"));
+ GlyphOrder.setByGID(map, 0x002E, sdsnew("period"));
+ GlyphOrder.setByGID(map, 0x00B7, sdsnew("periodcentered"));
+ GlyphOrder.setByGID(map, 0x22A5, sdsnew("perpendicular"));
+ GlyphOrder.setByGID(map, 0x2030, sdsnew("perthousand"));
+ GlyphOrder.setByGID(map, 0x20A7, sdsnew("peseta"));
+ GlyphOrder.setByGID(map, 0x03C6, sdsnew("phi"));
+ GlyphOrder.setByGID(map, 0x03D5, sdsnew("phi1"));
+ GlyphOrder.setByGID(map, 0x03C0, sdsnew("pi"));
+ GlyphOrder.setByGID(map, 0x002B, sdsnew("plus"));
+ GlyphOrder.setByGID(map, 0x00B1, sdsnew("plusminus"));
+ GlyphOrder.setByGID(map, 0x211E, sdsnew("prescription"));
+ GlyphOrder.setByGID(map, 0x220F, sdsnew("product"));
+ GlyphOrder.setByGID(map, 0x2282, sdsnew("propersubset"));
+ GlyphOrder.setByGID(map, 0x2283, sdsnew("propersuperset"));
+ GlyphOrder.setByGID(map, 0x221D, sdsnew("proportional"));
+ GlyphOrder.setByGID(map, 0x03C8, sdsnew("psi"));
+ GlyphOrder.setByGID(map, 0x0071, sdsnew("q"));
+ GlyphOrder.setByGID(map, 0x003F, sdsnew("question"));
+ GlyphOrder.setByGID(map, 0x00BF, sdsnew("questiondown"));
+ GlyphOrder.setByGID(map, 0x0022, sdsnew("quotedbl"));
+ GlyphOrder.setByGID(map, 0x201E, sdsnew("quotedblbase"));
+ GlyphOrder.setByGID(map, 0x201C, sdsnew("quotedblleft"));
+ GlyphOrder.setByGID(map, 0x201D, sdsnew("quotedblright"));
+ GlyphOrder.setByGID(map, 0x2018, sdsnew("quoteleft"));
+ GlyphOrder.setByGID(map, 0x201B, sdsnew("quotereversed"));
+ GlyphOrder.setByGID(map, 0x2019, sdsnew("quoteright"));
+ GlyphOrder.setByGID(map, 0x201A, sdsnew("quotesinglbase"));
+ GlyphOrder.setByGID(map, 0x0027, sdsnew("quotesingle"));
+ GlyphOrder.setByGID(map, 0x0072, sdsnew("r"));
+ GlyphOrder.setByGID(map, 0x0155, sdsnew("racute"));
+ GlyphOrder.setByGID(map, 0x221A, sdsnew("radical"));
+ GlyphOrder.setByGID(map, 0x0159, sdsnew("rcaron"));
+ GlyphOrder.setByGID(map, 0x2286, sdsnew("reflexsubset"));
+ GlyphOrder.setByGID(map, 0x2287, sdsnew("reflexsuperset"));
+ GlyphOrder.setByGID(map, 0x00AE, sdsnew("registered"));
+ GlyphOrder.setByGID(map, 0x2310, sdsnew("revlogicalnot"));
+ GlyphOrder.setByGID(map, 0x03C1, sdsnew("rho"));
+ GlyphOrder.setByGID(map, 0x02DA, sdsnew("ring"));
+ GlyphOrder.setByGID(map, 0x2590, sdsnew("rtblock"));
+ GlyphOrder.setByGID(map, 0x0073, sdsnew("s"));
+ GlyphOrder.setByGID(map, 0x015B, sdsnew("sacute"));
+ GlyphOrder.setByGID(map, 0x0161, sdsnew("scaron"));
+ GlyphOrder.setByGID(map, 0x015F, sdsnew("scedilla"));
+ GlyphOrder.setByGID(map, 0x015D, sdsnew("scircumflex"));
+ GlyphOrder.setByGID(map, 0x2033, sdsnew("second"));
+ GlyphOrder.setByGID(map, 0x00A7, sdsnew("section"));
+ GlyphOrder.setByGID(map, 0x003B, sdsnew("semicolon"));
+ GlyphOrder.setByGID(map, 0x0037, sdsnew("seven"));
+ GlyphOrder.setByGID(map, 0x215E, sdsnew("seveneighths"));
+ GlyphOrder.setByGID(map, 0x2592, sdsnew("shade"));
+ GlyphOrder.setByGID(map, 0x03C3, sdsnew("sigma"));
+ GlyphOrder.setByGID(map, 0x03C2, sdsnew("sigma1"));
+ GlyphOrder.setByGID(map, 0x223C, sdsnew("similar"));
+ GlyphOrder.setByGID(map, 0x0036, sdsnew("six"));
+ GlyphOrder.setByGID(map, 0x002F, sdsnew("slash"));
+ GlyphOrder.setByGID(map, 0x263A, sdsnew("smileface"));
+ GlyphOrder.setByGID(map, 0x0020, sdsnew("space"));
+ GlyphOrder.setByGID(map, 0x2660, sdsnew("spade"));
+ GlyphOrder.setByGID(map, 0x00A3, sdsnew("sterling"));
+ GlyphOrder.setByGID(map, 0x220B, sdsnew("suchthat"));
+ GlyphOrder.setByGID(map, 0x2211, sdsnew("summation"));
+ GlyphOrder.setByGID(map, 0x263C, sdsnew("sun"));
+ GlyphOrder.setByGID(map, 0x0074, sdsnew("t"));
+ GlyphOrder.setByGID(map, 0x03C4, sdsnew("tau"));
+ GlyphOrder.setByGID(map, 0x0167, sdsnew("tbar"));
+ GlyphOrder.setByGID(map, 0x0165, sdsnew("tcaron"));
+ GlyphOrder.setByGID(map, 0x2234, sdsnew("therefore"));
+ GlyphOrder.setByGID(map, 0x03B8, sdsnew("theta"));
+ GlyphOrder.setByGID(map, 0x03D1, sdsnew("theta1"));
+ GlyphOrder.setByGID(map, 0x00FE, sdsnew("thorn"));
+ GlyphOrder.setByGID(map, 0x0033, sdsnew("three"));
+ GlyphOrder.setByGID(map, 0x215C, sdsnew("threeeighths"));
+ GlyphOrder.setByGID(map, 0x00BE, sdsnew("threequarters"));
+ GlyphOrder.setByGID(map, 0x02DC, sdsnew("tilde"));
+ GlyphOrder.setByGID(map, 0x0303, sdsnew("tildecomb"));
+ GlyphOrder.setByGID(map, 0x0384, sdsnew("tonos"));
+ GlyphOrder.setByGID(map, 0x2122, sdsnew("trademark"));
+ GlyphOrder.setByGID(map, 0x25BC, sdsnew("triagdn"));
+ GlyphOrder.setByGID(map, 0x25C4, sdsnew("triaglf"));
+ GlyphOrder.setByGID(map, 0x25BA, sdsnew("triagrt"));
+ GlyphOrder.setByGID(map, 0x25B2, sdsnew("triagup"));
+ GlyphOrder.setByGID(map, 0x0032, sdsnew("two"));
+ GlyphOrder.setByGID(map, 0x2025, sdsnew("twodotenleader"));
+ GlyphOrder.setByGID(map, 0x2154, sdsnew("twothirds"));
+ GlyphOrder.setByGID(map, 0x0075, sdsnew("u"));
+ GlyphOrder.setByGID(map, 0x00FA, sdsnew("uacute"));
+ GlyphOrder.setByGID(map, 0x016D, sdsnew("ubreve"));
+ GlyphOrder.setByGID(map, 0x00FB, sdsnew("ucircumflex"));
+ GlyphOrder.setByGID(map, 0x00FC, sdsnew("udieresis"));
+ GlyphOrder.setByGID(map, 0x00F9, sdsnew("ugrave"));
+ GlyphOrder.setByGID(map, 0x01B0, sdsnew("uhorn"));
+ GlyphOrder.setByGID(map, 0x0171, sdsnew("uhungarumlaut"));
+ GlyphOrder.setByGID(map, 0x016B, sdsnew("umacron"));
+ GlyphOrder.setByGID(map, 0x005F, sdsnew("underscore"));
+ GlyphOrder.setByGID(map, 0x2017, sdsnew("underscoredbl"));
+ GlyphOrder.setByGID(map, 0x222A, sdsnew("union"));
+ GlyphOrder.setByGID(map, 0x2200, sdsnew("universal"));
+ GlyphOrder.setByGID(map, 0x0173, sdsnew("uogonek"));
+ GlyphOrder.setByGID(map, 0x2580, sdsnew("upblock"));
+ GlyphOrder.setByGID(map, 0x03C5, sdsnew("upsilon"));
+ GlyphOrder.setByGID(map, 0x03CB, sdsnew("upsilondieresis"));
+ GlyphOrder.setByGID(map, 0x03B0, sdsnew("upsilondieresistonos"));
+ GlyphOrder.setByGID(map, 0x03CD, sdsnew("upsilontonos"));
+ GlyphOrder.setByGID(map, 0x016F, sdsnew("uring"));
+ GlyphOrder.setByGID(map, 0x0169, sdsnew("utilde"));
+ GlyphOrder.setByGID(map, 0x0076, sdsnew("v"));
+ GlyphOrder.setByGID(map, 0x0077, sdsnew("w"));
+ GlyphOrder.setByGID(map, 0x1E83, sdsnew("wacute"));
+ GlyphOrder.setByGID(map, 0x0175, sdsnew("wcircumflex"));
+ GlyphOrder.setByGID(map, 0x1E85, sdsnew("wdieresis"));
+ GlyphOrder.setByGID(map, 0x2118, sdsnew("weierstrass"));
+ GlyphOrder.setByGID(map, 0x1E81, sdsnew("wgrave"));
+ GlyphOrder.setByGID(map, 0x0078, sdsnew("x"));
+ GlyphOrder.setByGID(map, 0x03BE, sdsnew("xi"));
+ GlyphOrder.setByGID(map, 0x0079, sdsnew("y"));
+ GlyphOrder.setByGID(map, 0x00FD, sdsnew("yacute"));
+ GlyphOrder.setByGID(map, 0x0177, sdsnew("ycircumflex"));
+ GlyphOrder.setByGID(map, 0x00FF, sdsnew("ydieresis"));
+ GlyphOrder.setByGID(map, 0x00A5, sdsnew("yen"));
+ GlyphOrder.setByGID(map, 0x1EF3, sdsnew("ygrave"));
+ GlyphOrder.setByGID(map, 0x007A, sdsnew("z"));
+ GlyphOrder.setByGID(map, 0x017A, sdsnew("zacute"));
+ GlyphOrder.setByGID(map, 0x017E, sdsnew("zcaron"));
+ GlyphOrder.setByGID(map, 0x017C, sdsnew("zdotaccent"));
+ GlyphOrder.setByGID(map, 0x0030, sdsnew("zero"));
+ GlyphOrder.setByGID(map, 0x03B6, sdsnew("zeta"));
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,6 @@
+#ifndef CARYLL_SUPPORT_AGLFN_H
+#define CARYLL_SUPPORT_AGLFN_H
+#include "otfcc/glyph-order.h"
+
+void aglfn_setupNames(otfcc_GlyphOrder *map);
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aliases.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aliases.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aliases.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,60 @@
+#ifndef CARYLL_SUPPORT_ALIASES_H
+#define CARYLL_SUPPORT_ALIASES_H
+
+#include <stdint.h>
+
+#define loggedStep(...) \
+ for (bool ___loggedstep_v = (options->logger->startSDS(options->logger, \
+ sdscatprintf(sdsempty(), __VA_ARGS__)), \
+ true); \
+ ___loggedstep_v; ___loggedstep_v = false, options->logger->finish(options->logger))
+#define logError(...) \
+ options->logger->logSDS(options->logger, log_vl_critical, log_type_error, \
+ sdscatprintf(sdsempty(), __VA_ARGS__));
+#define logWarning(...) \
+ options->logger->logSDS(options->logger, log_vl_important, log_type_warning, \
+ sdscatprintf(sdsempty(), __VA_ARGS__));
+#define logNotice(...) \
+ options->logger->logSDS(options->logger, log_vl_notice, log_type_info, \
+ sdscatprintf(sdsempty(), __VA_ARGS__));
+#define logProgress(...) \
+ options->logger->logSDS(options->logger, log_vl_progress, log_type_progress, \
+ sdscatprintf(sdsempty(), __VA_ARGS__));
+
+#define FOR_TABLE_SILENT(name, table) \
+ for (int __fortable_keep = 1, __fortable_count = 0, __notfound = 1; \
+ __notfound && __fortable_keep && __fortable_count < packet.numTables; \
+ __fortable_keep = !__fortable_keep, __fortable_count++) \
+ for (otfcc_PacketPiece table = (packet.pieces)[__fortable_count]; __fortable_keep; \
+ __fortable_keep = !__fortable_keep) \
+ if (table.tag == (name)) \
+ for (int __fortable_k2 = 1; __fortable_k2; __fortable_k2 = 0, __notfound = 0)
+
+#define FOR_TABLE(name, table) FOR_TABLE_SILENT(name, table)
+
+#define foreach_index(item, index, vector) \
+ for (size_t index = 0, keep = 1; keep && index < (vector).length; keep = !keep, index++) \
+ for (item = (vector).items + index; keep; keep = !keep)
+#define foreach(item, vector) foreach_index(item, __caryll_index, vector)
+#define foreach_hash(id, range) for (id = (range); id != NULL; id = id->hh.next)
+
+typedef uint8_t *font_file_pointer;
+
+// alias "package" otfcc_pHandle to Handle
+#include "otfcc/handle.h"
+#define Handle otfcc_iHandle
+typedef otfcc_GlyphHandle glyph_handle;
+typedef otfcc_FDHandle fd_handle;
+typedef otfcc_LookupHandle lookup_handle;
+
+// alias "package" otfcc_pkgGlyphOrder to GlyphOrder
+#include "otfcc/glyph-order.h"
+#define GlyphOrder otfcc_pkgGlyphOrder
+
+#include "otfcc/table/otl/classdef.h"
+#define ClassDef otl_iClassDef
+
+#include "otfcc/table/otl/coverage.h"
+#define Coverage otl_iCoverage
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,89 @@
+#include "base64.h"
+#include "../otfcc-alloc.h"
+
+static const uint8_t base64_table[64] =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+uint8_t *base64_encode(const uint8_t *src, size_t len, size_t *out_len) {
+ uint8_t *out, *pos;
+ const uint8_t *end, *in;
+ size_t olen;
+
+ olen = (len + 3 - 1) / 3 * 4; /* 3-byte blocks to 4-byte */
+ olen++; /* nul termination */
+ out = __caryll_malloc(sizeof(uint8_t) * olen);
+ if (out == NULL) return NULL;
+
+ end = src + len;
+ in = src;
+ pos = out;
+ while (end - in >= 3) {
+ *pos++ = base64_table[in[0] >> 2];
+ *pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)];
+ *pos++ = base64_table[((in[1] & 0x0f) << 2) | (in[2] >> 6)];
+ *pos++ = base64_table[in[2] & 0x3f];
+ in += 3;
+ }
+
+ if (end - in) {
+ *pos++ = base64_table[in[0] >> 2];
+ if (end - in == 1) {
+ *pos++ = base64_table[(in[0] & 0x03) << 4];
+ *pos++ = '=';
+ } else {
+ *pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)];
+ *pos++ = base64_table[(in[1] & 0x0f) << 2];
+ }
+ *pos++ = '=';
+ }
+
+ *pos = '\0';
+ if (out_len) *out_len = pos - out;
+ return out;
+}
+
+uint8_t *base64_decode(const uint8_t *src, size_t len, size_t *out_len) {
+ uint8_t dtable[256], *out, *pos, in[4], block[4], tmp;
+ size_t i, count;
+
+ memset(dtable, 0x80, 256);
+ for (i = 0; i < sizeof(base64_table); i++)
+ dtable[base64_table[i]] = i;
+ dtable['='] = 0;
+
+ count = 0;
+ for (i = 0; i < len; i++) {
+ if (dtable[src[i]] != 0x80) count++;
+ }
+
+ if (count % 4) return NULL;
+
+ pos = out = __caryll_malloc(sizeof(uint8_t) * count);
+ if (out == NULL) return NULL;
+
+ count = 0;
+ for (i = 0; i < len; i++) {
+ tmp = dtable[src[i]];
+ if (tmp == 0x80) continue;
+
+ in[count] = src[i];
+ block[count] = tmp;
+ count++;
+ if (count == 4) {
+ *pos++ = (block[0] << 2) | (block[1] >> 4);
+ *pos++ = (block[1] << 4) | (block[2] >> 2);
+ *pos++ = (block[2] << 6) | block[3];
+ count = 0;
+ }
+ }
+
+ if (pos > out) {
+ if (in[2] == '=')
+ pos -= 2;
+ else if (in[3] == '=')
+ pos--;
+ }
+
+ *out_len = pos - out;
+ return out;
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,10 @@
+#ifndef CARYLL_SUPPORT_BASE64_H
+#define CARYLL_SUPPORT_BASE64_H
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+uint8_t *base64_encode(const uint8_t *src, size_t len, size_t *out_len);
+uint8_t *base64_decode(const uint8_t *src, size_t len, size_t *out_len);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/bin-io.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/bin-io.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/bin-io.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,171 @@
+#ifndef CARYLL_SUPPORT_BIN_IO_H
+#define CARYLL_SUPPORT_BIN_IO_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef INLINE
+#ifdef _MSC_VER
+#define INLINE __forceinline /* use __forceinline (VC++ specific) */
+#else
+#define INLINE inline /* use standard inline */
+#endif
+#endif
+
+static INLINE bool otfcc_check_endian(void) {
+ union {
+ uint8_t i1[2];
+ uint16_t i2;
+ } check_union = {.i2 = 1}; // if you don't have a new VC, upgrade it
+
+ return (check_union.i1[0] == 1);
+}
+
+static INLINE uint16_t otfcc_endian_convert16(uint16_t i) {
+ if (otfcc_check_endian()) {
+ union {
+ uint8_t i1[2];
+ uint16_t i2;
+ } src, des;
+
+ src.i2 = i;
+
+ des.i1[0] = src.i1[1];
+ des.i1[1] = src.i1[0];
+
+ return des.i2;
+ } else {
+ return i;
+ }
+}
+
+static INLINE uint32_t otfcc_endian_convert32(uint32_t i) {
+ if (otfcc_check_endian()) {
+ union {
+ uint8_t i1[4];
+ uint32_t i4;
+ } src, des;
+
+ src.i4 = i;
+
+ des.i1[0] = src.i1[3];
+ des.i1[1] = src.i1[2];
+ des.i1[2] = src.i1[1];
+ des.i1[3] = src.i1[0];
+
+ return des.i4;
+ } else {
+ return i;
+ }
+}
+
+static INLINE uint64_t otfcc_endian_convert64(uint64_t i) {
+ if (otfcc_check_endian()) {
+ union {
+ uint8_t i1[8];
+ uint64_t i8;
+ } src, des;
+
+ src.i8 = i;
+
+ des.i1[0] = src.i1[7];
+ des.i1[1] = src.i1[6];
+ des.i1[2] = src.i1[5];
+ des.i1[3] = src.i1[4];
+ des.i1[4] = src.i1[3];
+ des.i1[5] = src.i1[2];
+ des.i1[6] = src.i1[1];
+ des.i1[7] = src.i1[0];
+
+ return des.i8;
+ } else {
+ return i;
+ }
+}
+
+static INLINE uint16_t otfcc_get16u(FILE *file) {
+ uint16_t tmp;
+ size_t sizeRead = fread(&tmp, 2, 1, file);
+ if (!sizeRead) {
+ fprintf(stderr, "File corruption of terminated unexpectedly.\n");
+ exit(EXIT_FAILURE);
+ }
+ return otfcc_endian_convert16(tmp);
+}
+
+static INLINE uint32_t otfcc_get32u(FILE *file) {
+ uint32_t tmp;
+ size_t sizeRead = fread(&tmp, 4, 1, file);
+ if (!sizeRead) {
+ fprintf(stderr, "File corruption of terminated unexpectedly.\n");
+ exit(EXIT_FAILURE);
+ }
+ return otfcc_endian_convert32(tmp);
+}
+
+static INLINE uint64_t otfcc_get64u(FILE *file) {
+ uint64_t tmp;
+ size_t sizeRead = fread(&tmp, 8, 1, file);
+ if (!sizeRead) {
+ fprintf(stderr, "File corruption of terminated unexpectedly.\n");
+ exit(EXIT_FAILURE);
+ }
+ return otfcc_endian_convert64(tmp);
+}
+
+// data reader
+static INLINE uint8_t read_8u(const uint8_t *src) {
+ return src[0];
+}
+static INLINE uint16_t read_16u(const uint8_t *src) {
+ uint16_t b0 = ((uint16_t)src[0]) << 8;
+ uint16_t b1 = ((uint16_t)src[1]);
+ return (b0 | b1);
+}
+static INLINE uint32_t read_24u(const uint8_t *src) {
+ uint32_t b0 = ((uint32_t)src[0]) << 16;
+ uint32_t b1 = ((uint32_t)src[1]) << 8;
+ uint32_t b2 = ((uint32_t)src[2]);
+ return (b0 | b1 | b2);
+}
+static INLINE uint32_t read_32u(const uint8_t *src) {
+ uint32_t b0 = ((uint32_t)src[0]) << 24;
+ uint32_t b1 = ((uint32_t)src[1]) << 16;
+ uint32_t b2 = ((uint32_t)src[2]) << 8;
+ uint32_t b3 = ((uint32_t)src[3]);
+ return (b0 | b1 | b2 | b3);
+}
+static INLINE uint64_t read_64u(const uint8_t *src) {
+ uint64_t b0 = ((uint64_t)src[0]) << 56;
+ uint64_t b1 = ((uint64_t)src[1]) << 48;
+ uint64_t b2 = ((uint64_t)src[2]) << 40;
+ uint64_t b3 = ((uint64_t)src[3]) << 32;
+ uint64_t b4 = ((uint64_t)src[4]) << 24;
+ uint64_t b5 = ((uint64_t)src[5]) << 16;
+ uint64_t b6 = ((uint64_t)src[6]) << 8;
+ uint64_t b7 = ((uint64_t)src[7]);
+ return (b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7);
+}
+static INLINE int8_t read_8s(const uint8_t *src) {
+ return (int8_t)read_8u(src);
+}
+static INLINE int16_t read_16s(const uint8_t *src) {
+ return (int16_t)read_16u(src);
+}
+static INLINE int32_t read_32s(const uint8_t *src) {
+ return (int32_t)read_32u(src);
+}
+static INLINE int64_t read_64s(const uint8_t *src) {
+ return (int64_t)read_64u(src);
+}
+
+static INLINE uint16_t be16(uint16_t x) {
+ return ((x & 0xff) << 8) | ((x & 0xFF00) >> 8);
+}
+static INLINE uint32_t be32(uint32_t x) {
+ return ((x & 0x000000ff) << 24) | ((x & 0x0000FF00) << 8) | ((x & 0x00FF0000) >> 8) |
+ ((x & 0xFF000000) >> 24);
+}
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/buffer/buffer.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/buffer/buffer.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/buffer/buffer.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,231 @@
+#include "caryll/buffer.h"
+#include "support/otfcc-alloc.h"
+
+caryll_Buffer *bufnew() {
+ caryll_Buffer *buf;
+ NEW(buf);
+ buf->size = buf->free = 0;
+ return buf;
+}
+void buffree(caryll_Buffer *buf) {
+ if (!buf) return;
+ if (buf->data) FREE(buf->data);
+ FREE(buf);
+}
+size_t buflen(caryll_Buffer *buf) {
+ return buf->size;
+}
+size_t bufpos(caryll_Buffer *buf) {
+ return buf->cursor;
+}
+void bufseek(caryll_Buffer *buf, size_t pos) {
+ buf->cursor = pos;
+}
+void bufclear(caryll_Buffer *buf) {
+ buf->cursor = 0;
+ buf->free = buf->size + buf->free;
+ buf->size = 0;
+}
+
+static void bufbeforewrite(caryll_Buffer *buf, size_t towrite) {
+ size_t currentSize = buf->size;
+ size_t allocated = buf->size + buf->free;
+ size_t required = buf->cursor + towrite;
+ if (required < currentSize) {
+ // Completely overlap.
+ return;
+ } else if (required <= allocated) {
+ // Within range without reallocation
+ buf->size = required;
+ buf->free = allocated - buf->size;
+ } else {
+ // Needs realloc
+ buf->size = required;
+ buf->free = required; // Double growth
+ if (buf->free > 0x1000000) { buf->free = 0x1000000; }
+ RESIZE(buf->data, buf->size + buf->free);
+ }
+}
+void bufwrite8(caryll_Buffer *buf, uint8_t byte) {
+ bufbeforewrite(buf, 1);
+ buf->data[buf->cursor++] = byte;
+}
+void bufwrite16l(caryll_Buffer *buf, uint16_t x) {
+ bufbeforewrite(buf, 2);
+ buf->data[buf->cursor++] = x & 0xFF;
+ buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+}
+void bufwrite16b(caryll_Buffer *buf, uint16_t x) {
+ bufbeforewrite(buf, 2);
+ buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+ buf->data[buf->cursor++] = x & 0xFF;
+}
+void bufwrite24l(caryll_Buffer *buf, uint32_t x) {
+ bufbeforewrite(buf, 3);
+ buf->data[buf->cursor++] = x & 0xFF;
+ buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 16) & 0xFF;
+}
+void bufwrite24b(caryll_Buffer *buf, uint32_t x) {
+ bufbeforewrite(buf, 3);
+ buf->data[buf->cursor++] = (x >> 16) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+ buf->data[buf->cursor++] = x & 0xFF;
+}
+void bufwrite32l(caryll_Buffer *buf, uint32_t x) {
+ bufbeforewrite(buf, 4);
+ buf->data[buf->cursor++] = x & 0xFF;
+ buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 16) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 24) & 0xFF;
+}
+void bufwrite32b(caryll_Buffer *buf, uint32_t x) {
+ bufbeforewrite(buf, 4);
+ buf->data[buf->cursor++] = (x >> 24) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 16) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+ buf->data[buf->cursor++] = x & 0xFF;
+}
+void bufwrite64l(caryll_Buffer *buf, uint64_t x) {
+ bufbeforewrite(buf, 8);
+ buf->data[buf->cursor++] = x & 0xFF;
+ buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 16) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 24) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 32) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 40) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 48) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 56) & 0xFF;
+}
+void bufwrite64b(caryll_Buffer *buf, uint64_t x) {
+ bufbeforewrite(buf, 8);
+ buf->data[buf->cursor++] = (x >> 56) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 48) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 40) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 32) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 24) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 16) & 0xFF;
+ buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+ buf->data[buf->cursor++] = x & 0xFF;
+}
+
+caryll_Buffer *bufninit(uint32_t n, ...) {
+ caryll_Buffer *buf = bufnew();
+ bufbeforewrite(buf, n);
+ va_list ap;
+ va_start(ap, n);
+ for (uint16_t j = 0; j < n; j++) {
+ bufwrite8(buf, (uint8_t)va_arg(ap, int));
+ }
+ va_end(ap);
+ return buf;
+}
+void bufnwrite8(caryll_Buffer *buf, uint32_t n, ...) {
+ bufbeforewrite(buf, n);
+ va_list ap;
+ va_start(ap, n);
+ for (uint16_t j = 0; j < n; j++) {
+ bufwrite8(buf, (uint8_t)va_arg(ap, int));
+ }
+ va_end(ap);
+}
+
+void bufwrite_sds(caryll_Buffer *buf, sds str) {
+ if (!str) return;
+ size_t len = sdslen(str);
+ if (!len) return;
+ bufbeforewrite(buf, len);
+ memcpy(buf->data + buf->cursor, str, len);
+ buf->cursor += len;
+}
+void bufwrite_str(caryll_Buffer *buf, const char *str) {
+ if (!str) return;
+ size_t len = strlen(str);
+ if (!len) return;
+ bufbeforewrite(buf, len);
+ memcpy(buf->data + buf->cursor, str, len);
+ buf->cursor += len;
+}
+void bufwrite_bytes(caryll_Buffer *buf, size_t len, const uint8_t *str) {
+ if (!str) return;
+ if (!len) return;
+ bufbeforewrite(buf, len);
+ memcpy(buf->data + buf->cursor, str, len);
+ buf->cursor += len;
+}
+void bufwrite_buf(caryll_Buffer *buf, caryll_Buffer *that) {
+ if (!that || !that->data) return;
+ size_t len = buflen(that);
+ bufbeforewrite(buf, len);
+ memcpy(buf->data + buf->cursor, that->data, len);
+ buf->cursor += len;
+}
+void bufwrite_bufdel(caryll_Buffer *buf, caryll_Buffer *that) {
+ if (!that) return;
+ if (!that->data) {
+ buffree(that);
+ return;
+ }
+ size_t len = buflen(that);
+ bufbeforewrite(buf, len);
+ memcpy(buf->data + buf->cursor, that->data, len);
+ buffree(that);
+ buf->cursor += len;
+}
+
+void buflongalign(caryll_Buffer *buf) {
+ size_t cp = buf->cursor;
+ bufseek(buf, buflen(buf));
+ if (buflen(buf) % 4 == 1) {
+ bufwrite8(buf, 0);
+ bufwrite8(buf, 0);
+ bufwrite8(buf, 0);
+ } else if (buflen(buf) % 4 == 2) {
+ bufwrite8(buf, 0);
+ bufwrite8(buf, 0);
+ } else if (buflen(buf) % 4 == 3) {
+ bufwrite8(buf, 0);
+ }
+ bufseek(buf, cp);
+}
+
+// bufpingpong16b writes a buffer and an offset towards it.
+// [ ^ ] + ###### that
+// ^cp ^offset
+// |
+// V
+// [ @^ ###### ] , and the value of [@] equals to the former
+// offset.
+// ^cp ^offset
+// Common in writing OpenType features.
+void bufping16b(caryll_Buffer *buf, size_t *offset, size_t *cp) {
+ bufwrite16b(buf, *offset);
+ *cp = buf->cursor;
+ bufseek(buf, *offset);
+}
+void bufping16bd(caryll_Buffer *buf, size_t *offset, size_t *shift, size_t *cp) {
+ bufwrite16b(buf, *offset - *shift);
+ *cp = buf->cursor;
+ bufseek(buf, *offset);
+}
+void bufpong(caryll_Buffer *buf, size_t *offset, size_t *cp) {
+ *offset = buf->cursor;
+ bufseek(buf, *cp);
+}
+void bufpingpong16b(caryll_Buffer *buf, caryll_Buffer *that, size_t *offset, size_t *cp) {
+ bufwrite16b(buf, *offset);
+ *cp = buf->cursor;
+ bufseek(buf, *offset);
+ bufwrite_bufdel(buf, that);
+ *offset = buf->cursor;
+ bufseek(buf, *cp);
+}
+
+void bufprint(caryll_Buffer *buf) {
+ for (size_t j = 0; j < buf->size; j++) {
+ if (j % 16) fprintf(stderr, " ");
+ fprintf(stderr, "%02X", buf->data[j]);
+ if (j % 16 == 15) fprintf(stderr, "\n");
+ }
+ fprintf(stderr, "\n");
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/element-impl.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/element-impl.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/element-impl.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,275 @@
+#ifndef CARYLL_SUPPORT_ELEMENT_IMPL_H
+#define CARYLL_SUPPORT_ELEMENT_IMPL_H
+
+#include "caryll/element.h"
+#include "otfcc-alloc.h"
+
+#ifndef __CARYLL_INLINE__
+#ifdef _MSC_VER
+#define __CARYLL_INLINE__ __forceinline /* use __forceinline (VC++ specific) */
+#else
+#define __CARYLL_INLINE__ inline /* use standard inline */
+#endif
+#endif
+
+#define __NARG__(...) __NARG_I_(__VA_ARGS__, __RSEQ_N())
+#define __NARG_I_(...) __ARG_N(__VA_ARGS__)
+#define __ARG_N(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, \
+ _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, \
+ _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, \
+ _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, N, ...) \
+ N
+#define __RSEQ_N() \
+ 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, \
+ 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, \
+ 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
+
+// general definition for any function name
+#define __CARYLL_VFUNC__2(name, n) name##n
+#define __CARYLL_VFUNC__1(name, n) __CARYLL_VFUNC__2(name, n)
+#define __CARYLLVFUNC(func, ...) __CARYLL_VFUNC__1(func, __NARG__(__VA_ARGS__))(__VA_ARGS__)
+
+#define caryll_trivialInit(T) \
+ static __CARYLL_INLINE__ void T##_init(MODIFY T *x) { \
+ memset(x, 0, sizeof(T)); \
+ }
+#define caryll_nonTrivialInit(T, __fn_init) \
+ static __CARYLL_INLINE__ void T##_init(MODIFY T *x) { \
+ (__fn_init)(x); \
+ }
+#define caryll_trivialEmpty(T) \
+ static __CARYLL_INLINE__ T T##_empty() { \
+ T x; \
+ T##_init(&x); \
+ return x; \
+ }
+#define caryll_trivialCreate(T) \
+ static __CARYLL_INLINE__ T *T##_create() { \
+ T *x = (T *)malloc(sizeof(T)); \
+ T##_init(x); \
+ return x; \
+ }
+#define caryll_trivialCopy(T) \
+ static __CARYLL_INLINE__ void T##_copy(MODIFY T *dst, const T *src) { \
+ memcpy(dst, src, sizeof(T)); \
+ }
+#define caryll_nonTrivialCopy(T, __fn_copy) \
+ static __CARYLL_INLINE__ void T##_copy(MODIFY T *dst, const T *src) { \
+ (__fn_copy)(dst, src); \
+ }
+#define caryll_trivialMove(T) \
+ static __CARYLL_INLINE__ void T##_move(MODIFY T *dst, T *src) { \
+ memcpy(dst, src, sizeof(T)); \
+ T##_init(src); \
+ }
+#define caryll_nonTrivialMove(T, __fn_move) \
+ static __CARYLL_INLINE__ void T##_move(MODIFY T *dst, T *src) { \
+ (__fn_move)(dst, src); \
+ T##_init(src); \
+ }
+#define caryll_trivialDispose(T) \
+ static __CARYLL_INLINE__ void T##_dispose(MODIFY T *x) { \
+ /* trivial */ \
+ }
+#define caryll_nonTrivialDispose(T, __fn_dispose) \
+ static __CARYLL_INLINE__ void T##_dispose(MODIFY T *x) { \
+ (__fn_dispose)(x); \
+ }
+#define caryll_trivialFree(T) \
+ static __CARYLL_INLINE__ void T##_free(MOVE T *x) { \
+ if (!x) return; \
+ T##_dispose(x); \
+ __caryll_free(x); \
+ }
+#define caryll_trivialDup(T) \
+ static __CARYLL_INLINE__ T T##_dup(const T src) { \
+ T dst; \
+ T##_copy(&dst, &src); \
+ return dst; \
+ }
+#define caryll_trivialReplace(T) \
+ static __CARYLL_INLINE__ void T##_replace(MODIFY T *dst, MOVE const T src) { \
+ T##_dispose(dst); \
+ memcpy(dst, &src, sizeof(T)); \
+ } \
+ static __CARYLL_INLINE__ void T##_copyReplace(MODIFY T *dst, const T src) { \
+ T##_dispose(dst); \
+ T##_copy(dst, &src); \
+ }
+
+#define caryll_standardTypeFn1(T) \
+ caryll_trivialInit(T); \
+ caryll_trivialCopy(T); \
+ caryll_trivialDispose(T); \
+ caryll_trivialMove(T); \
+ caryll_trivialReplace(T);
+#define caryll_standardTypeFn2(T, __fn_dispose) \
+ caryll_trivialInit(T); \
+ caryll_trivialCopy(T); \
+ caryll_nonTrivialDispose(T, __fn_dispose); \
+ caryll_trivialMove(T); \
+ caryll_trivialReplace(T);
+#define caryll_standardTypeFn3(T, __fn_init, __fn_dispose) \
+ caryll_nonTrivialInit(T, __fn_init); \
+ caryll_trivialCopy(T); \
+ caryll_nonTrivialDispose(T, __fn_dispose); \
+ caryll_trivialMove(T); \
+ caryll_trivialReplace(T);
+#define caryll_standardTypeFn4(T, __fn_init, __fn_copy, __fn_dispose) \
+ caryll_nonTrivialInit(T, __fn_init); \
+ caryll_nonTrivialCopy(T, __fn_copy); \
+ caryll_nonTrivialDispose(T, __fn_dispose); \
+ caryll_trivialMove(T); \
+ caryll_trivialReplace(T);
+#define caryll_standardTypeFn5(T, __fn_init, __fn_copy, __fn_dispose, __fn_move) \
+ caryll_nonTrivialInit(T, __fn_init); \
+ caryll_nonTrivialCopy(T, __fn_copy); \
+ caryll_nonTrivialDispose(T, __fn_dispose); \
+ caryll_nonTrivialMove(T, __fn_move); \
+ caryll_trivialReplace(T);
+
+#define caryll_standardTypeMethods(T) \
+ .init = T##_init, .copy = T##_copy, .dispose = T##_dispose, .move = T##_move, \
+ .replace = T##_replace, .copyReplace = T##_copyReplace
+#define caryll_standardRefTypeMethods(T) \
+ caryll_standardTypeMethods(T), .create = T##_create, .free = T##_free
+#define caryll_standardValTypeMethods(T) \
+ caryll_standardTypeMethods(T), .empty = T##_empty, .dup = T##_dup
+
+#define caryll_standardTypeFn(...) __CARYLLVFUNC(caryll_standardTypeFn, __VA_ARGS__)
+
+#ifdef __GNUC__
+
+// GCC requires adding ## before __VA_ARGS__.
+// Make it happy.
+
+#define caryll_standardRefTypeFn(T, ...) \
+ caryll_standardTypeFn(T, ##__VA_ARGS__); \
+ caryll_trivialCreate(T); \
+ caryll_trivialFree(T);
+#define caryll_standardValTypeFn(T, ...) \
+ caryll_standardTypeFn(T, ##__VA_ARGS__); \
+ caryll_trivialEmpty(T); \
+ caryll_trivialDup(T);
+
+#define caryll_standardType(T, __name, ...) \
+ caryll_standardTypeFn(T, ##__VA_ARGS__); \
+ caryll_ElementInterfaceOf(T) __name = {caryll_standardTypeMethods(T)};
+#define caryll_standardRefType(T, __name, ...) \
+ caryll_standardRefTypeFn(T, ##__VA_ARGS__); \
+ caryll_ElementInterfaceOf(T) __name = {caryll_standardRefTypeMethods(T)};
+#define caryll_standardValType(T, __name, ...) \
+ caryll_standardValTypeFn(T, ##__VA_ARGS__); \
+ caryll_ElementInterfaceOf(T) __name = {caryll_standardValTypeMethods(T)};
+
+#else
+
+#define caryll_standardRefTypeFn(T, ...) \
+ caryll_standardTypeFn(T, __VA_ARGS__); \
+ caryll_trivialCreate(T); \
+ caryll_trivialFree(T);
+#define caryll_standardValTypeFn(T, ...) \
+ caryll_standardTypeFn(T, __VA_ARGS__); \
+ caryll_trivialEmpty(T); \
+ caryll_trivialDup(T);
+
+#define caryll_standardType(T, __name, ...) \
+ caryll_standardTypeFn(T, __VA_ARGS__); \
+ caryll_ElementInterfaceOf(T) __name = {caryll_standardTypeMethods(T)};
+#define caryll_standardRefType(T, __name, ...) \
+ caryll_standardRefTypeFn(T, __VA_ARGS__); \
+ caryll_ElementInterfaceOf(T) __name = {caryll_standardRefTypeMethods(T)};
+#define caryll_standardValType(T, __name, ...) \
+ caryll_standardValTypeFn(T, __VA_ARGS__); \
+ caryll_ElementInterfaceOf(T) __name = {caryll_standardValTypeMethods(T)};
+
+#endif
+
+//// Traits
+
+// Show
+#define caryll_ShowFns(T, _fn_Show) \
+ static __CARYLL_INLINE__ void T##_show(const T a) { \
+ return (_fn_Show)(a); \
+ }
+#define caryll_ShowAssigns(T) .show = T##_show
+
+// Ord
+#define caryll_OrdFns(T, _fnCompare) \
+ static __CARYLL_INLINE__ int T##_compare(const T a, const T b) { \
+ return (_fnCompare)(a, b); \
+ } \
+ static __CARYLL_INLINE__ int T##_compareRef(const T *a, const T *b) { \
+ return (_fnCompare)(*a, *b); \
+ }
+#define caryll_OrdEqFns(T, _fnCompare) \
+ caryll_OrdFns(T, _fnCompare); \
+ static __CARYLL_INLINE__ bool T##_equal(const T a, const T b) { \
+ return !(_fnCompare)(a, b); \
+ }
+#define caryll_OrdEqAssigns(T) \
+ .compare = T##_compare, .compareRef = T##_compareRef, .equal = T##_equal
+
+// Monoid
+#define caryll_MonoidFns(T, _fn_neutral, _fn_inplacePlus) \
+ static __CARYLL_INLINE__ T T##_neutral() { \
+ return (_fn_neutral)(); \
+ } \
+ static __CARYLL_INLINE__ void T##_inplacePlus(MODIFY T *a, const T b) { \
+ (_fn_inplacePlus)(a, b); \
+ } \
+ static __CARYLL_INLINE__ T T##_plus(const T a, const T b) { \
+ T result = (_fn_neutral)(); \
+ (_fn_inplacePlus)(&result, a); \
+ (_fn_inplacePlus)(&result, b); \
+ return result; \
+ }
+#define caryll_MonoidAssigns(T) \
+ .neutral = T##_neutral, .inplacePlus = T##_inplacePlus, .plus = T##_plus
+
+// Group
+#define caryll_GroupFns(T, _fn_inplaceNegate) \
+ static __CARYLL_INLINE__ void T##_inplaceNegate(MODIFY T *a) { \
+ (_fn_inplaceNegate)(a); \
+ } \
+ static __CARYLL_INLINE__ T T##_negate(const T a) { \
+ T result; \
+ T##_copy(&result, &a); \
+ T##_inplaceNegate(&result); \
+ return result; \
+ } \
+ static __CARYLL_INLINE__ void T##_inplaceMinus(MODIFY T *a, const T b) { \
+ T tb = T##_negate(b); \
+ (T##_inplacePlus)(a, tb); \
+ T##_dispose(&tb); \
+ } \
+ static __CARYLL_INLINE__ T T##_minus(const T a, const T b) { \
+ T result = (T##_neutral)(); \
+ (T##_inplacePlus)(&result, a); \
+ (T##_inplaceMinus)(&result, b); \
+ return result; \
+ }
+#define caryll_GroupAssigns(T) \
+ .inplaceNegate = T##_inplaceNegate, .negate = T##_negate, .inplaceMinus = T##_inplaceMinus, \
+ .minus = T##_minus
+
+// Module
+#define caryll_ModuleFns(T, TS, _fn_inplaceScale) \
+ static __CARYLL_INLINE__ void T##_inplaceScale(MODIFY T *a, TS b) { \
+ (_fn_inplaceScale)(a, b); \
+ } \
+ static __CARYLL_INLINE__ T T##_scale(const T a, TS b) { \
+ T result; \
+ T##_copy(&result, &a); \
+ T##_inplaceScale(&result, b); \
+ return result; \
+ } \
+ static __CARYLL_INLINE__ void T##_inplacePlusScale(MODIFY T *a, TS b, const T c) { \
+ T x = T##_scale(c, b); \
+ T##_inplacePlus(a, x); \
+ T##_dispose(&x); \
+ }
+#define caryll_ModuleAssigns(T) \
+ .inplaceScale = T##_inplaceScale, .scale = T##_scale, .inplacePlusScale = T##_inplacePlusScale
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/glyph-order.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/glyph-order.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/glyph-order.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,117 @@
+#include "util.h"
+#include "otfcc/glyph-order.h"
+
+static INLINE void initGlyphOrder(otfcc_GlyphOrder *go) {
+ go->byGID = NULL;
+ go->byName = NULL;
+}
+static INLINE void disposeGlyphOrder(otfcc_GlyphOrder *go) {
+ otfcc_GlyphOrderEntry *current, *temp;
+ HASH_ITER(hhID, go->byGID, current, temp) {
+ if (current->name) sdsfree(current->name);
+ HASH_DELETE(hhID, go->byGID, current);
+ HASH_DELETE(hhName, go->byName, current);
+ FREE(current);
+ }
+}
+caryll_standardRefTypeFn(otfcc_GlyphOrder, initGlyphOrder, disposeGlyphOrder);
+
+// Register a gid->name map
+static sds otfcc_setGlyphOrderByGID(otfcc_GlyphOrder *go, glyphid_t gid, sds name) {
+ otfcc_GlyphOrderEntry *s = NULL;
+ HASH_FIND(hhID, go->byGID, &gid, sizeof(glyphid_t), s);
+ if (s) {
+ // gid is already in the order table.
+ // reject this naming suggestion.
+ sdsfree(name);
+ return s->name;
+ } else {
+ otfcc_GlyphOrderEntry *t = NULL;
+ HASH_FIND(hhName, go->byName, name, sdslen(name), t);
+ if (t) {
+ // The name is already in-use.
+ sdsfree(name);
+ name = sdscatprintf(sdsempty(), "$$gid%d", gid);
+ }
+ NEW(s);
+ s->gid = gid;
+ s->name = name;
+ HASH_ADD(hhID, go->byGID, gid, sizeof(glyphid_t), s);
+ HASH_ADD(hhName, go->byName, name[0], sdslen(s->name), s);
+ }
+ return name;
+}
+
+// Register a name->gid map
+static bool otfcc_setGlyphOrderByName(otfcc_GlyphOrder *go, sds name, glyphid_t gid) {
+ otfcc_GlyphOrderEntry *s = NULL;
+ HASH_FIND(hhName, go->byName, name, sdslen(name), s);
+ if (s) {
+ // name is already mapped to a glyph
+ // reject this naming suggestion
+ return false;
+ } else {
+ NEW(s);
+ s->gid = gid;
+ s->name = name;
+ HASH_ADD(hhID, go->byGID, gid, sizeof(glyphid_t), s);
+ HASH_ADD(hhName, go->byName, name[0], sdslen(s->name), s);
+ return true;
+ }
+}
+
+static bool otfcc_gordNameAFieldShared(otfcc_GlyphOrder *go, glyphid_t gid, sds *field) {
+ otfcc_GlyphOrderEntry *t;
+ HASH_FIND(hhID, go->byGID, &gid, sizeof(glyphid_t), t);
+ if (t != NULL) {
+ *field = t->name;
+ return true;
+ } else {
+ *field = NULL;
+ return false;
+ }
+}
+
+static bool otfcc_gordConsolidateHandle(otfcc_GlyphOrder *go, glyph_handle *h) {
+ if (h->state == HANDLE_STATE_CONSOLIDATED) {
+ otfcc_GlyphOrderEntry *t;
+ HASH_FIND(hhName, go->byName, h->name, sdslen(h->name), t);
+ if (t) {
+ Handle.consolidateTo(h, t->gid, t->name);
+ return true;
+ }
+ HASH_FIND(hhName, go->byGID, &(h->index), sizeof(glyphid_t), t);
+ if (t) {
+ Handle.consolidateTo(h, t->gid, t->name);
+ return true;
+ }
+ } else if (h->state == HANDLE_STATE_NAME) {
+ otfcc_GlyphOrderEntry *t;
+ HASH_FIND(hhName, go->byName, h->name, sdslen(h->name), t);
+ if (t) {
+ Handle.consolidateTo(h, t->gid, t->name);
+ return true;
+ }
+ } else if (h->state == HANDLE_STATE_INDEX) {
+ sds name = NULL;
+ otfcc_gordNameAFieldShared(go, h->index, &name);
+ if (name) {
+ Handle.consolidateTo(h, h->index, name);
+ return true;
+ }
+ }
+ return false;
+}
+
+static bool gordLookupName(otfcc_GlyphOrder *go, sds name) {
+ otfcc_GlyphOrderEntry *t;
+ HASH_FIND(hhName, go->byName, name, sdslen(name), t);
+ if (t) return true;
+ return false;
+}
+
+const struct otfcc_GlyphOrderPackage otfcc_pkgGlyphOrder = {
+ caryll_standardRefTypeMethods(otfcc_GlyphOrder), .setByGID = otfcc_setGlyphOrderByGID,
+ .setByName = otfcc_setGlyphOrderByName, .nameAField_Shared = otfcc_gordNameAFieldShared,
+ .consolidateHandle = otfcc_gordConsolidateHandle, .lookupName = gordLookupName,
+};
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/handle.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/handle.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/handle.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,63 @@
+#include "otfcc/handle.h"
+#include "element-impl.h"
+#include "support/otfcc-alloc.h"
+
+// default constructors
+static INLINE void initHandle(otfcc_Handle *h) {
+ h->state = HANDLE_STATE_EMPTY;
+ h->index = 0;
+ h->name = NULL;
+}
+static INLINE void disposeHandle(struct otfcc_Handle *h) {
+ if (h->name) {
+ sdsfree(h->name);
+ h->name = NULL;
+ }
+ h->index = 0;
+ h->state = HANDLE_STATE_EMPTY;
+}
+static void copyHandle(otfcc_Handle *dst, const otfcc_Handle *src) {
+ dst->state = src->state;
+ dst->index = src->index;
+ if (src->name) {
+ dst->name = sdsdup(src->name);
+ } else {
+ dst->name = NULL;
+ }
+}
+
+caryll_standardValTypeFn(otfcc_Handle, initHandle, copyHandle, disposeHandle);
+
+// custom constructors
+static struct otfcc_Handle handle_fromIndex(glyphid_t id) {
+ struct otfcc_Handle h = {HANDLE_STATE_INDEX, id, NULL};
+ return h;
+}
+static struct otfcc_Handle handle_fromName(MOVE sds s) {
+ struct otfcc_Handle h = {HANDLE_STATE_EMPTY, 0, NULL};
+ if (s) {
+ h.state = HANDLE_STATE_NAME;
+ h.name = s;
+ }
+ return h;
+}
+static struct otfcc_Handle handle_fromConsolidated(glyphid_t id, sds s) {
+ struct otfcc_Handle h = {HANDLE_STATE_CONSOLIDATED, id, sdsdup(s)};
+ return h;
+}
+
+// consolidation
+static void handle_consolidateTo(struct otfcc_Handle *h, glyphid_t id, sds name) {
+ otfcc_iHandle.dispose(h);
+ h->state = HANDLE_STATE_CONSOLIDATED;
+ h->index = id;
+ h->name = sdsdup(name);
+}
+
+const struct otfcc_HandlePackage otfcc_iHandle = {
+ caryll_standardValTypeMethods(otfcc_Handle), // VT
+ .fromIndex = handle_fromIndex, // custom constructor, from index
+ .fromName = handle_fromName, // custom constructor, from name
+ .fromConsolidated = handle_fromConsolidated, // custom constructor, from consolidated
+ .consolidateTo = handle_consolidateTo,
+};
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-funcs.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-funcs.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-funcs.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,203 @@
+#ifndef CARYLL_SUPPORT_JSON_FUNCS_H
+#define CARYLL_SUPPORT_JSON_FUNCS_H
+
+#include <stdint.h>
+#include <math.h>
+
+#include "dep/json-builder.h"
+#include "dep/json.h"
+#include "dep/sds.h"
+
+#include "caryll/ownership.h"
+#include "otfcc/primitives.h"
+#include "otfcc/vf/vq.h"
+#include "otfcc/table/fvar.h"
+
+#ifndef INLINE
+#ifdef _MSC_VER
+#define INLINE __forceinline /* use __forceinline (VC++ specific) */
+#else
+#define INLINE inline /* use standard inline */
+#endif
+#endif
+
+static INLINE json_value *preserialize(MOVE json_value *x);
+
+static INLINE json_value *json_obj_get(const json_value *obj, const char *key) {
+ if (!obj || obj->type != json_object) return NULL;
+ for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+ char *ck = obj->u.object.values[_k].name;
+ if (strcmp(ck, key) == 0) return obj->u.object.values[_k].value;
+ }
+ return NULL;
+}
+static INLINE json_value *json_obj_get_type(const json_value *obj, const char *key,
+ const json_type type) {
+ json_value *v = json_obj_get(obj, key);
+ if (v && v->type == type) return v;
+ return NULL;
+}
+static INLINE sds json_obj_getsds(const json_value *obj, const char *key) {
+ json_value *v = json_obj_get_type(obj, key, json_string);
+ if (!v)
+ return NULL;
+ else
+ return sdsnewlen(v->u.string.ptr, v->u.string.length);
+}
+static INLINE char *json_obj_getstr_share(const json_value *obj, const char *key) {
+ json_value *v = json_obj_get_type(obj, key, json_string);
+ if (!v)
+ return NULL;
+ else
+ return v->u.string.ptr;
+}
+
+static INLINE json_value *json_object_push_tag(json_value *a, uint32_t tag, json_value *b) {
+ char tags[4] = {(tag & 0xff000000) >> 24, (tag & 0xff0000) >> 16, (tag & 0xff00) >> 8,
+ (tag & 0xff)};
+ return json_object_push_length(a, 4, tags, b);
+}
+
+// Coordinates, VV and VQ
+static INLINE double json_numof(const json_value *cv) {
+ if (cv && cv->type == json_integer) return cv->u.integer;
+ if (cv && cv->type == json_double) return cv->u.dbl;
+ return 0;
+}
+static INLINE json_value *json_new_position(pos_t z) {
+ if (round(z) == z) {
+ return json_integer_new(z);
+ } else {
+ return json_double_new(z);
+ }
+}
+json_value *json_new_VQRegion_Explicit(const vq_Region *rs, const table_fvar *fvar);
+json_value *json_new_VQRegion(const vq_Region *rs, const table_fvar *fvar);
+json_value *json_new_VQ(const VQ z, const table_fvar *fvar);
+json_value *json_new_VV(const VV x, const table_fvar *fvar);
+json_value *json_new_VVp(const VV *x, const table_fvar *fvar);
+VQ json_vqOf(const json_value *cv, const table_fvar *fvar);
+
+static INLINE double json_obj_getnum(const json_value *obj, const char *key) {
+ if (!obj || obj->type != json_object) return 0.0;
+ for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+ char *ck = obj->u.object.values[_k].name;
+ json_value *cv = obj->u.object.values[_k].value;
+ if (strcmp(ck, key) == 0) {
+ if (cv && cv->type == json_integer) return cv->u.integer;
+ if (cv && cv->type == json_double) return cv->u.dbl;
+ }
+ }
+ return 0.0;
+}
+static INLINE int32_t json_obj_getint(const json_value *obj, const char *key) {
+ if (!obj || obj->type != json_object) return 0;
+ for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+ char *ck = obj->u.object.values[_k].name;
+ json_value *cv = obj->u.object.values[_k].value;
+ if (strcmp(ck, key) == 0) {
+ if (cv && cv->type == json_integer) return (int32_t)cv->u.integer;
+ if (cv && cv->type == json_double) return cv->u.dbl;
+ }
+ }
+ return 0;
+}
+static INLINE double json_obj_getnum_fallback(const json_value *obj, const char *key,
+ double fallback) {
+ if (!obj || obj->type != json_object) return fallback;
+ for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+ char *ck = obj->u.object.values[_k].name;
+ json_value *cv = obj->u.object.values[_k].value;
+ if (strcmp(ck, key) == 0) {
+ if (cv && cv->type == json_integer) return cv->u.integer;
+ if (cv && cv->type == json_double) return cv->u.dbl;
+ }
+ }
+ return fallback;
+}
+static INLINE int32_t json_obj_getint_fallback(const json_value *obj, const char *key,
+ int32_t fallback) {
+ if (!obj || obj->type != json_object) return fallback;
+ for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+ char *ck = obj->u.object.values[_k].name;
+ json_value *cv = obj->u.object.values[_k].value;
+ if (strcmp(ck, key) == 0) {
+ if (cv && cv->type == json_integer) return (int32_t)cv->u.integer;
+ if (cv && cv->type == json_double) return cv->u.dbl;
+ }
+ }
+ return fallback;
+}
+static INLINE bool json_boolof(const json_value *cv) {
+ if (cv && cv->type == json_boolean) return cv->u.boolean;
+ return false;
+}
+static INLINE bool json_obj_getbool(const json_value *obj, const char *key) {
+ if (!obj || obj->type != json_object) return false;
+ for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+ char *ck = obj->u.object.values[_k].name;
+ json_value *cv = obj->u.object.values[_k].value;
+ if (strcmp(ck, key) == 0) {
+ if (cv && cv->type == json_boolean) return cv->u.boolean;
+ }
+ }
+ return false;
+}
+static INLINE bool json_obj_getbool_fallback(const json_value *obj, const char *key,
+ bool fallback) {
+ if (!obj || obj->type != json_object) return fallback;
+ for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+ char *ck = obj->u.object.values[_k].name;
+ json_value *cv = obj->u.object.values[_k].value;
+ if (strcmp(ck, key) == 0) {
+ if (cv && cv->type == json_boolean) return cv->u.boolean;
+ }
+ }
+ return fallback;
+}
+
+static INLINE json_value *json_from_sds(const sds str) {
+ return json_string_new_length((uint32_t)sdslen(str), str);
+}
+
+// flags reader and writer
+static INLINE json_value *otfcc_dump_flags(int flags, const char *labels[]) {
+ json_value *v = json_object_new(0);
+ for (uint16_t j = 0; labels[j]; j++)
+ if (flags & (1 << j)) { json_object_push(v, labels[j], json_boolean_new(true)); }
+ return v;
+}
+static INLINE uint32_t otfcc_parse_flags(const json_value *v, const char *labels[]) {
+ if (!v) return 0;
+ if (v->type == json_integer) {
+ return (uint32_t)v->u.integer;
+ } else if (v->type == json_double) {
+ return (uint32_t)v->u.dbl;
+ } else if (v->type == json_object) {
+ uint32_t flags = 0;
+ for (uint16_t j = 0; labels[j]; j++) {
+ if (json_obj_getbool(v, labels[j])) { flags |= (1 << j); }
+ }
+ return flags;
+ } else {
+ return 0;
+ }
+}
+
+static INLINE json_value *preserialize(MOVE json_value *x) {
+#ifdef CARYLL_USE_PRE_SERIALIZED
+ json_serialize_opts opts = {.mode = json_serialize_mode_packed};
+ size_t preserialize_len = json_measure_ex(x, opts);
+ char *buf = (char *)malloc(preserialize_len);
+ json_serialize_ex(buf, x, opts);
+ json_builder_free(x);
+
+ json_value *xx = json_string_new_nocopy((uint32_t)(preserialize_len - 1), buf);
+ xx->type = json_pre_serialized;
+ return xx;
+#else
+ return x;
+#endif
+}
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,86 @@
+#include "json-ident.h"
+#include "support/otfcc-alloc.h"
+
+#ifdef _MSC_VER
+#include "winfns.h"
+#endif
+
+static bool compare_json_arrays(const json_value *a, const json_value *b) {
+ for (uint16_t j = 0; j < a->u.array.length; j++) {
+ if (!json_ident(a->u.array.values[j], b->u.array.values[j])) { return false; }
+ }
+ return true;
+}
+
+typedef struct {
+ char *key;
+ json_value *val;
+ bool check;
+ UT_hash_handle hh;
+} json_obj_entry;
+static bool compare_json_objects(const json_value *a, const json_value *b) {
+ json_obj_entry *h = NULL;
+ for (uint32_t j = 0; j < a->u.object.length; j++) {
+ char *k = a->u.object.values[j].name;
+ json_obj_entry *e = NULL;
+ HASH_FIND_STR(h, k, e);
+ if (!e) {
+ NEW(e);
+ e->key = strdup(k);
+ e->val = a->u.object.values[j].value;
+ e->check = false;
+ HASH_ADD_STR(h, key, e);
+ }
+ }
+ bool allcheck = true;
+ for (uint32_t j = 0; j < b->u.object.length; j++) {
+ char *k = b->u.object.values[j].name;
+ json_obj_entry *e = NULL;
+ HASH_FIND_STR(h, k, e);
+ if (!e) {
+ allcheck = false;
+ break;
+ } else {
+ bool check = json_ident(e->val, b->u.object.values[j].value);
+ if (!check) {
+ allcheck = false;
+ break;
+ } else {
+ e->check = true;
+ }
+ }
+ }
+ json_obj_entry *e, *tmp;
+ HASH_ITER(hh, h, e, tmp) {
+ allcheck = allcheck && e->check;
+ HASH_DEL(h, e);
+ FREE(e->key);
+ FREE(e);
+ }
+ return allcheck;
+}
+
+bool json_ident(const json_value *a, const json_value *b) {
+ if (!a && !b) return true;
+ if (!a || !b) return false;
+ if (a->type != b->type) return false;
+ switch (a->type) {
+ case json_none:
+ case json_null:
+ return true;
+ case json_integer:
+ return a->u.integer == b->u.integer;
+ case json_double:
+ return a->u.dbl == b->u.dbl;
+ case json_boolean:
+ return a->u.boolean == b->u.boolean;
+ case json_string:
+ return a->u.string.length == b->u.string.length && strcmp(a->u.string.ptr, b->u.string.ptr) == 0;
+ case json_array:
+ return a->u.array.length == b->u.array.length && compare_json_arrays(a, b);
+ case json_object:
+ return a->u.object.length == b->u.object.length && compare_json_objects(a, b);
+ default:
+ return false;
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,12 @@
+#ifndef CARYLL_SUPPORT_JSON_IDENT_H
+#define CARYLL_SUPPORT_JSON_IDENT_H
+
+#include "dep/json.h"
+#include "dep/uthash.h"
+#include <inttypes.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+bool json_ident(const json_value *a, const json_value *b);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/options.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/options.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/options.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,38 @@
+#include "otfcc/options.h"
+#include "support/otfcc-alloc.h"
+
+otfcc_Options *otfcc_newOptions() {
+ otfcc_Options *options;
+ NEW(options);
+ return options;
+}
+void otfcc_deleteOptions(otfcc_Options *options) {
+ if (options) {
+ FREE(options->glyph_name_prefix);
+ if (options->logger) options->logger->dispose(options->logger);
+ }
+ FREE(options);
+}
+void otfcc_Options_optimizeTo(otfcc_Options *options, uint8_t level) {
+ options->cff_rollCharString = false;
+ options->short_post = false;
+ options->ignore_glyph_order = false;
+ options->cff_short_vmtx = false;
+ options->merge_features = false;
+ options->force_cid = false;
+ options->cff_doSubroutinize = false;
+
+ if (level >= 1) {
+ options->cff_rollCharString = true;
+ options->cff_short_vmtx = true;
+ }
+ if (level >= 2) {
+ options->short_post = true;
+ options->cff_doSubroutinize = true;
+ options->merge_features = true;
+ }
+ if (level >= 3) {
+ options->ignore_glyph_order = true;
+ options->force_cid = true;
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/otfcc-alloc.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/otfcc-alloc.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/otfcc-alloc.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,83 @@
+#ifndef CARYLL_SUPPORT_OTFCC_ALLOC_H
+#define CARYLL_SUPPORT_OTFCC_ALLOC_H
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef INLINE
+#ifdef _MSC_VER
+#define INLINE __forceinline /* use __forceinline (VC++ specific) */
+#else
+#define INLINE inline /* use standard inline */
+#endif
+#endif
+
+// Allocators
+// Change this if you prefer other allocators
+#define __caryll_malloc malloc
+#define __caryll_calloc calloc
+#define __caryll_realloc realloc
+#define __caryll_free free
+
+static INLINE void *__caryll_allocate_dirty(size_t n, unsigned long line) {
+ if (!n) return NULL;
+ void *p = __caryll_malloc(n);
+ if (!p) {
+ fprintf(stderr, "[%ld]Out of memory(%ld bytes)\n", line, (unsigned long)n);
+ exit(EXIT_FAILURE);
+ }
+ return p;
+}
+static INLINE void *__caryll_allocate_clean(size_t n, unsigned long line) {
+ if (!n) return NULL;
+ void *p = __caryll_calloc(n, 1);
+ if (!p) {
+ fprintf(stderr, "[%ld]Out of memory(%ld bytes)\n", line, (unsigned long)n);
+ exit(EXIT_FAILURE);
+ }
+ return p;
+}
+static INLINE void *__caryll_reallocate(void *ptr, size_t n, unsigned long line) {
+ if (!n) {
+ __caryll_free(ptr);
+ return NULL;
+ }
+ if (!ptr) {
+ return __caryll_allocate_clean(n, line);
+ } else {
+ void *p = __caryll_realloc(ptr, n);
+ if (!p) {
+ fprintf(stderr, "[%ld]Out of memory(%ld bytes)\n", line, (unsigned long)n);
+ exit(EXIT_FAILURE);
+ }
+ return p;
+ }
+}
+#ifdef __cplusplus
+#define NEW_CLEAN_S(ptr, size) ptr = __caryll_allocate_clean((size), __LINE__)
+#define NEW_CLEAN_1(ptr) \
+ ptr = (decltype(ptr))__caryll_allocate_clean(sizeof(decltype(*ptr)), __LINE__)
+#define NEW_CLEAN_N(ptr, n) \
+ ptr = (decltype(ptr))__caryll_allocate_clean(sizeof(decltype(*ptr)) * (n), __LINE__)
+#define NEW_DIRTY(ptr) \
+ ptr = (decltype(ptr))__caryll_allocate_dirty(sizeof(decltype(*ptr)), __LINE__)
+#define NEW_DIRTY_N(ptr, n) \
+ ptr = (decltype(ptr))__caryll_allocate_dirty(sizeof(decltype(*ptr)) * (n), __LINE__)
+#define FREE(ptr) (__caryll_free(ptr), ptr = nullptr)
+#define DELETE(fn, ptr) (fn(ptr), ptr = nullptr)
+#define RESIZE(ptr, n) ptr = (decltype(ptr))__caryll_reallocate(ptr, sizeof(*ptr) * (n), __LINE__)
+#else
+#define NEW_CLEAN_S(ptr, size) ptr = __caryll_allocate_clean((size), __LINE__)
+#define NEW_CLEAN_1(ptr) ptr = __caryll_allocate_clean(sizeof(*ptr), __LINE__)
+#define NEW_CLEAN_N(ptr, n) ptr = __caryll_allocate_clean(sizeof(*ptr) * (n), __LINE__)
+#define NEW_DIRTY(ptr) ptr = __caryll_allocate_dirty(sizeof(*ptr), __LINE__)
+#define NEW_DIRTY_N(ptr, n) ptr = __caryll_allocate_dirty(sizeof(*ptr) * (n), __LINE__)
+#define FREE(ptr) (__caryll_free(ptr), ptr = NULL)
+#define DELETE(fn, ptr) (fn(ptr), ptr = NULL)
+#define RESIZE(ptr, n) ptr = __caryll_reallocate(ptr, sizeof(*ptr) * (n), __LINE__)
+#endif
+
+#define __GET_MACRO_OTFCC_ALLOC_2(_1, _2, NAME, ...) NAME
+#define NEW(...) __GET_MACRO_OTFCC_ALLOC_2(__VA_ARGS__, NEW_CLEAN_N, NEW_CLEAN_1)(__VA_ARGS__)
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/primitives.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/primitives.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/primitives.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,66 @@
+#include "otfcc/primitives.h"
+#include "bin-io.h"
+#include <math.h>
+
+// f2dot14 type
+double otfcc_from_f2dot14(const f2dot14 x) {
+ return x / 16384.0;
+}
+int16_t otfcc_to_f2dot14(const double x) {
+ return round(x * 16384.0);
+}
+
+// F16.16 (fixed) type
+double otfcc_from_fixed(const f16dot16 x) {
+ return x / 65536.0;
+}
+f16dot16 otfcc_to_fixed(const double x) {
+ return round(x * 65536.0);
+}
+
+// F16.16 arith
+// Clamp: remove too-large values
+static INLINE f16dot16 clamp(int64_t value) {
+ int64_t tmp = value;
+ if (tmp < (int64_t)f16dot16_negativeIntinity) tmp = (int64_t)f16dot16_negativeIntinity;
+ if (tmp > (int64_t)f16dot16_infinity) tmp = (int64_t)f16dot16_infinity;
+ return (f16dot16)tmp;
+}
+
+f16dot16 otfcc_f1616_add(f16dot16 a, f16dot16 b) {
+ return a + b;
+}
+f16dot16 otfcc_f1616_minus(f16dot16 a, f16dot16 b) {
+ return a - b;
+}
+
+f16dot16 otfcc_f1616_multiply(f16dot16 a, f16dot16 b) {
+ int64_t tmp = (int64_t)a * (int64_t)b + f16dot16_k;
+ f16dot16 product = clamp(tmp >> f16dot16_precision);
+ return product;
+}
+
+static INLINE f16dot16 divide(int64_t a, int32_t b) {
+ if (b == 0) {
+ if (a < 0)
+ return f16dot16_negativeIntinity;
+ else
+ return f16dot16_infinity;
+ }
+
+ if ((a < 0 != b < 0)) {
+ a -= b / 2;
+ } else {
+ a += b / 2;
+ }
+
+ return (f16dot16)(clamp(a / b));
+}
+
+f16dot16 otfcc_f1616_muldiv(f16dot16 a, f16dot16 b, f16dot16 c) {
+ int64_t tmp = (int64_t)a * (int64_t)b + f16dot16_k;
+ return divide(tmp, c);
+}
+f16dot16 otfcc_f1616_divide(f16dot16 a, f16dot16 b) {
+ return divide((int64_t)a << f16dot16_precision, b);
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,144 @@
+/*********************************************************************
+* Filename: sha1.c
+* Author: Brad Conte (brad AT bradconte.com)
+* Copyright:
+* Disclaimer: This code is presented "as is" without any guarantees.
+* Details: Implementation of the SHA1 hashing algorithm.
+ Algorithm specification can be found here:
+ * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf
+ This implementation uses little endian byte order.
+*********************************************************************/
+
+/*************************** HEADER FILES ***************************/
+#include <stdlib.h>
+#include <memory.h>
+#include "sha1.h"
+
+/****************************** MACROS ******************************/
+#define ROTLEFT(a, b) ((a << b) | (a >> (32 - b)))
+
+/*********************** FUNCTION DEFINITIONS ***********************/
+static void sha1_transform(SHA1_CTX *ctx, const BYTE data[]) {
+ WORD a, b, c, d, e, i, j, t, m[80];
+
+ for (i = 0, j = 0; i < 16; ++i, j += 4)
+ m[i] = (data[j] << 24) + (data[j + 1] << 16) + (data[j + 2] << 8) + (data[j + 3]);
+ for (; i < 80; ++i) {
+ m[i] = (m[i - 3] ^ m[i - 8] ^ m[i - 14] ^ m[i - 16]);
+ m[i] = (m[i] << 1) | (m[i] >> 31);
+ }
+
+ a = ctx->state[0];
+ b = ctx->state[1];
+ c = ctx->state[2];
+ d = ctx->state[3];
+ e = ctx->state[4];
+
+ for (i = 0; i < 20; ++i) {
+ t = ROTLEFT(a, 5) + ((b & c) ^ (~b & d)) + e + ctx->k[0] + m[i];
+ e = d;
+ d = c;
+ c = ROTLEFT(b, 30);
+ b = a;
+ a = t;
+ }
+ for (; i < 40; ++i) {
+ t = ROTLEFT(a, 5) + (b ^ c ^ d) + e + ctx->k[1] + m[i];
+ e = d;
+ d = c;
+ c = ROTLEFT(b, 30);
+ b = a;
+ a = t;
+ }
+ for (; i < 60; ++i) {
+ t = ROTLEFT(a, 5) + ((b & c) ^ (b & d) ^ (c & d)) + e + ctx->k[2] + m[i];
+ e = d;
+ d = c;
+ c = ROTLEFT(b, 30);
+ b = a;
+ a = t;
+ }
+ for (; i < 80; ++i) {
+ t = ROTLEFT(a, 5) + (b ^ c ^ d) + e + ctx->k[3] + m[i];
+ e = d;
+ d = c;
+ c = ROTLEFT(b, 30);
+ b = a;
+ a = t;
+ }
+
+ ctx->state[0] += a;
+ ctx->state[1] += b;
+ ctx->state[2] += c;
+ ctx->state[3] += d;
+ ctx->state[4] += e;
+}
+
+void sha1_init(SHA1_CTX *ctx) {
+ ctx->datalen = 0;
+ ctx->bitlen = 0;
+ ctx->state[0] = 0x67452301;
+ ctx->state[1] = 0xEFCDAB89;
+ ctx->state[2] = 0x98BADCFE;
+ ctx->state[3] = 0x10325476;
+ ctx->state[4] = 0xc3d2e1f0;
+ ctx->k[0] = 0x5a827999;
+ ctx->k[1] = 0x6ed9eba1;
+ ctx->k[2] = 0x8f1bbcdc;
+ ctx->k[3] = 0xca62c1d6;
+}
+
+void sha1_update(SHA1_CTX *ctx, const BYTE data[], size_t len) {
+ size_t i;
+
+ for (i = 0; i < len; ++i) {
+ ctx->data[ctx->datalen] = data[i];
+ ctx->datalen++;
+ if (ctx->datalen == 64) {
+ sha1_transform(ctx, ctx->data);
+ ctx->bitlen += 512;
+ ctx->datalen = 0;
+ }
+ }
+}
+
+void sha1_final(SHA1_CTX *ctx, BYTE hash[]) {
+ WORD i;
+
+ i = ctx->datalen;
+
+ // Pad whatever data is left in the buffer.
+ if (ctx->datalen < 56) {
+ ctx->data[i++] = 0x80;
+ while (i < 56)
+ ctx->data[i++] = 0x00;
+ } else {
+ ctx->data[i++] = 0x80;
+ while (i < 64)
+ ctx->data[i++] = 0x00;
+ sha1_transform(ctx, ctx->data);
+ memset(ctx->data, 0, 56);
+ }
+
+ // Append to the padding the total message's length in bits and transform.
+ ctx->bitlen += ctx->datalen * 8;
+ ctx->data[63] = ctx->bitlen;
+ ctx->data[62] = ctx->bitlen >> 8;
+ ctx->data[61] = ctx->bitlen >> 16;
+ ctx->data[60] = ctx->bitlen >> 24;
+ ctx->data[59] = ctx->bitlen >> 32;
+ ctx->data[58] = ctx->bitlen >> 40;
+ ctx->data[57] = ctx->bitlen >> 48;
+ ctx->data[56] = ctx->bitlen >> 56;
+ sha1_transform(ctx, ctx->data);
+
+ // Since this implementation uses little endian byte ordering and MD uses big endian,
+ // reverse all the bytes when copying the final state to the output hash.
+ for (i = 0; i < 4; ++i) {
+ hash[i] = (ctx->state[0] >> (24 - i * 8)) & 0x000000ff;
+ hash[i + 4] = (ctx->state[1] >> (24 - i * 8)) & 0x000000ff;
+ hash[i + 8] = (ctx->state[2] >> (24 - i * 8)) & 0x000000ff;
+ hash[i + 12] = (ctx->state[3] >> (24 - i * 8)) & 0x000000ff;
+ hash[i + 16] = (ctx->state[4] >> (24 - i * 8)) & 0x000000ff;
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,35 @@
+/*********************************************************************
+* Filename: sha1.h
+* Author: Brad Conte (brad AT bradconte.com)
+* Copyright:
+* Disclaimer: This code is presented "as is" without any guarantees.
+* Details: Defines the API for the corresponding SHA1 implementation.
+*********************************************************************/
+
+#ifndef SHA1_H
+#define SHA1_H
+
+/*************************** HEADER FILES ***************************/
+#include <stddef.h>
+
+/****************************** MACROS ******************************/
+#define SHA1_BLOCK_SIZE 20 // SHA1 outputs a 20 byte digest
+
+/**************************** DATA TYPES ****************************/
+typedef unsigned char BYTE; // 8-bit byte
+typedef unsigned int WORD; // 32-bit word, change to "long" for 16-bit machines
+
+typedef struct {
+ BYTE data[64];
+ WORD datalen;
+ unsigned long long bitlen;
+ WORD state[5];
+ WORD k[4];
+} SHA1_CTX;
+
+/*********************** FUNCTION DECLARATIONS **********************/
+void sha1_init(SHA1_CTX *ctx);
+void sha1_update(SHA1_CTX *ctx, const BYTE data[], size_t len);
+void sha1_final(SHA1_CTX *ctx, BYTE hash[]);
+
+#endif // SHA1_H
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/tag.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/tag.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/tag.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,36 @@
+#ifndef CARYLL_SUPPORT_TAG_H
+#define CARYLL_SUPPORT_TAG_H
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifndef INLINE
+#ifdef _MSC_VER
+#define INLINE __forceinline /* use __forceinline (VC++ specific) */
+#else
+#define INLINE inline /* use standard inline */
+#endif
+#endif
+
+// Tag handler
+static INLINE void tag2str(uint32_t tag, char tags[4]) {
+ tags[0] = (tag >> 24) & 0xFF;
+ tags[1] = (tag >> 16) & 0xFF;
+ tags[2] = (tag >> 8) & 0xFF;
+ tags[3] = tag & 0xFF;
+}
+
+static INLINE uint32_t str2tag(const char *tags) {
+ if (!tags) return 0;
+ uint32_t tag = 0;
+ uint8_t len = 0;
+ while (*tags && len < 4) {
+ tag = (tag << 8) | (*tags), tags++, len++;
+ }
+ while (len < 4) {
+ tag = (tag << 8) | ' ', len++;
+ }
+ return tag;
+}
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,701 @@
+/* Copyright (C) 2001-2012 by George Williams */
+/* Copyright (C) 2016 by Belleve Invis */
+
+/*
+ * 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 "ttinstr.h"
+#include <ctype.h>
+
+enum ttf_instructions {
+ ttf_npushb = 0x40,
+ ttf_npushw = 0x41,
+ ttf_pushb = 0xb0,
+ ttf_pushw = 0xb8,
+ ttf_aa = 0x7f,
+ ttf_abs = 0x64,
+ ttf_add = 0x60,
+ ttf_alignpts = 0x27,
+ ttf_alignrp = 0x3c,
+ ttf_and = 0x5a,
+ ttf_call = 0x2b,
+ ttf_ceiling = 0x67,
+ ttf_cindex = 0x25,
+ ttf_clear = 0x22,
+ ttf_debug = 0x4f,
+ ttf_deltac1 = 0x73,
+ ttf_deltac2 = 0x74,
+ ttf_deltac3 = 0x75,
+ ttf_deltap1 = 0x5d,
+ ttf_deltap2 = 0x71,
+ ttf_deltap3 = 0x72,
+ ttf_depth = 0x24,
+ ttf_div = 0x62,
+ ttf_dup = 0x20,
+ ttf_eif = 0x59,
+ ttf_else = 0x1b,
+ ttf_endf = 0x2d,
+ ttf_eq = 0x54,
+ ttf_even = 0x57,
+ ttf_fdef = 0x2c,
+ ttf_flipoff = 0x4e,
+ ttf_flipon = 0x4d,
+ ttf_flippt = 0x80,
+ ttf_fliprgoff = 0x82,
+ ttf_fliprgon = 0x81,
+ ttf_floor = 0x66,
+ ttf_gc = 0x46,
+ ttf_getinfo = 0x88,
+ ttf_gfv = 0x0d,
+ ttf_gpv = 0x0c,
+ ttf_gt = 0x52,
+ ttf_gteq = 0x53,
+ ttf_idef = 0x89,
+ ttf_if = 0x58,
+ ttf_instctrl = 0x8e,
+ ttf_ip = 0x39,
+ ttf_isect = 0x0f,
+ ttf_iup = 0x30,
+ ttf_jmpr = 0x1c,
+ ttf_jrof = 0x79,
+ ttf_jrot = 0x78,
+ ttf_loopcall = 0x2a,
+ ttf_lt = 0x50,
+ ttf_lteq = 0x51,
+ ttf_max = 0x8b,
+ ttf_md = 0x49,
+ ttf_mdap = 0x2e,
+ ttf_mdrp = 0xc0,
+ ttf_miap = 0x3e,
+ ttf_min = 0x8c,
+ ttf_mindex = 0x26,
+ ttf_mirp = 0xe0,
+ ttf_mppem = 0x4b,
+ ttf_mps = 0x4c,
+ ttf_msirp = 0x3a,
+ ttf_mul = 0x63,
+ ttf_neg = 0x65,
+ ttf_neq = 0x55,
+ ttf_not = 0x5c,
+ ttf_nround = 0x6c,
+ ttf_odd = 0x56,
+ ttf_or = 0x5b,
+ ttf_pop = 0x21,
+ ttf_rcvt = 0x45,
+ ttf_rdtg = 0x7d,
+ ttf_roff = 0x7a,
+ ttf_roll = 0x8a,
+ ttf_round = 0x68,
+ ttf_rs = 0x43,
+ ttf_rtdg = 0x3d,
+ ttf_rtg = 0x18,
+ ttf_rthg = 0x19,
+ ttf_rutg = 0x7c,
+ ttf_s45round = 0x77,
+ ttf_sangw = 0x7e,
+ ttf_scanctrl = 0x85,
+ ttf_scantype = 0x8d,
+ ttf_scfs = 0x48,
+ ttf_scvtci = 0x1d,
+ ttf_sdb = 0x5e,
+ ttf_sdpvtl = 0x86,
+ ttf_sds = 0x5f,
+ ttf_sfvfs = 0x0b,
+ ttf_sfvtca = 0x04,
+ ttf_sfvtl = 0x08,
+ ttf_sfvtpv = 0x0e,
+ ttf_shc = 0x34,
+ ttf_shp = 0x32,
+ ttf_shpix = 0x38,
+ ttf_shz = 0x36,
+ ttf_sloop = 0x17,
+ ttf_smd = 0x1a,
+ ttf_spvfs = 0x0a,
+ ttf_spvtca = 0x02,
+ ttf_spvtl = 0x06,
+ ttf_sround = 0x76,
+ ttf_srp0 = 0x10,
+ ttf_srp1 = 0x11,
+ ttf_srp2 = 0x12,
+ ttf_ssw = 0x1f,
+ ttf_sswci = 0x1e,
+ ttf_sub = 0x61,
+ ttf_svtca = 0x00,
+ ttf_swap = 0x23,
+ ttf_szp0 = 0x13,
+ ttf_szp1 = 0x14,
+ ttf_szp2 = 0x15,
+ ttf_szps = 0x16,
+ ttf_utp = 0x29,
+ ttf_wcvtf = 0x70,
+ ttf_wcvtp = 0x44,
+ ttf_ws = 0x42,
+ ttf_getvariation = 0x91
+};
+enum byte_types { bt_instr, bt_cnt, bt_byte, bt_wordhi, bt_wordlo, bt_impliedreturn };
+
+struct instrdata {
+ uint8_t *instrs;
+ uint32_t instr_cnt;
+ uint8_t *bts;
+};
+
+const char *ff_ttf_instrnames[] = {"SVTCA[y-axis]",
+ "SVTCA[x-axis]",
+ "SPVTCA[y-axis]",
+ "SPVTCA[x-axis]",
+ "SFVTCA[y-axis]",
+ "SFVTCA[x-axis]",
+ "SPVTL[parallel]",
+ "SPVTL[orthog]",
+ "SFVTL[parallel]",
+ "SFVTL[orthog]",
+ "SPVFS",
+ "SFVFS",
+ "GPV",
+ "GFV",
+ "SFVTPV",
+ "ISECT",
+ "SRP0",
+ "SRP1",
+ "SRP2",
+ "SZP0",
+ "SZP1",
+ "SZP2",
+ "SZPS",
+ "SLOOP",
+ "RTG",
+ "RTHG",
+ "SMD",
+ "ELSE",
+ "JMPR",
+ "SCVTCI",
+ "SSWCI",
+ "SSW",
+ "DUP",
+ "POP",
+ "CLEAR",
+ "SWAP",
+ "DEPTH",
+ "CINDEX",
+ "MINDEX",
+ "ALIGNPTS",
+ "Unknown28",
+ "UTP",
+ "LOOPCALL",
+ "CALL",
+ "FDEF",
+ "ENDF",
+ "MDAP[no-rnd]",
+ "MDAP[rnd]",
+ "IUP[y]",
+ "IUP[x]",
+ "SHP[rp2]",
+ "SHP[rp1]",
+ "SHC[rp2]",
+ "SHC[rp1]",
+ "SHZ[rp2]",
+ "SHZ[rp1]",
+ "SHPIX",
+ "IP",
+ "MSIRP[no-rp0]",
+ "MSIRP[rp0]",
+ "ALIGNRP",
+ "RTDG",
+ "MIAP[no-rnd]",
+ "MIAP[rnd]",
+ "NPUSHB",
+ "NPUSHW",
+ "WS",
+ "RS",
+ "WCVTP",
+ "RCVT",
+ "GC[cur]",
+ "GC[orig]",
+ "SCFS",
+ "MD[grid]",
+ "MD[orig]",
+ "MPPEM",
+ "MPS",
+ "FLIPON",
+ "FLIPOFF",
+ "DEBUG",
+ "LT",
+ "LTEQ",
+ "GT",
+ "GTEQ",
+ "EQ",
+ "NEQ",
+ "ODD",
+ "EVEN",
+ "IF",
+ "EIF",
+ "AND",
+ "OR",
+ "NOT",
+ "DELTAP1",
+ "SDB",
+ "SDS",
+ "ADD",
+ "SUB",
+ "DIV",
+ "MUL",
+ "ABS",
+ "NEG",
+ "FLOOR",
+ "CEILING",
+ "ROUND[Grey]",
+ "ROUND[Black]",
+ "ROUND[White]",
+ "ROUND[Undef4]",
+ "NROUND[Grey]",
+ "NROUND[Black]",
+ "NROUND[White]",
+ "NROUND[Undef4]",
+ "WCVTF",
+ "DELTAP2",
+ "DELTAP3",
+ "DELTAC1",
+ "DELTAC2",
+ "DELTAC3",
+ "SROUND",
+ "S45ROUND",
+ "JROT",
+ "JROF",
+ "ROFF",
+ "Unknown7B",
+ "RUTG",
+ "RDTG",
+ "SANGW",
+ "AA",
+ "FLIPPT",
+ "FLIPRGON",
+ "FLIPRGOFF",
+ "Unknown83",
+ "Unknown84",
+ "SCANCTRL",
+ "SDPVTL[parallel]",
+ "SDPVTL[orthog]",
+ "GETINFO",
+ "IDEF",
+ "ROLL",
+ "MAX",
+ "MIN",
+ "SCANTYPE",
+ "INSTCTRL",
+ "Unknown8F",
+ "Unknown90",
+ "GETVARIATION",
+ "Unknown92",
+ "Unknown93",
+ "Unknown94",
+ "Unknown95",
+ "Unknown96",
+ "Unknown97",
+ "Unknown98",
+ "Unknown99",
+ "Unknown9A",
+ "Unknown9B",
+ "Unknown9C",
+ "Unknown9D",
+ "Unknown9E",
+ "Unknown9F",
+ "UnknownA0",
+ "UnknownA1",
+ "UnknownA2",
+ "UnknownA3",
+ "UnknownA4",
+ "UnknownA5",
+ "UnknownA6",
+ "UnknownA7",
+ "UnknownA8",
+ "UnknownA9",
+ "UnknownAA",
+ "UnknownAB",
+ "UnknownAC",
+ "UnknownAD",
+ "UnknownAE",
+ "UnknownAF",
+ "PUSHB_1",
+ "PUSHB_2",
+ "PUSHB_3",
+ "PUSHB_4",
+ "PUSHB_5",
+ "PUSHB_6",
+ "PUSHB_7",
+ "PUSHB_8",
+ "PUSHW_1",
+ "PUSHW_2",
+ "PUSHW_3",
+ "PUSHW_4",
+ "PUSHW_5",
+ "PUSHW_6",
+ "PUSHW_7",
+ "PUSHW_8",
+ "MDRP[grey]",
+ "MDRP[black]",
+ "MDRP[white]",
+ "MDRP03",
+ "MDRP[rnd,grey]",
+ "MDRP[rnd,black]",
+ "MDRP[rnd,white]",
+ "MDRP07",
+ "MDRP[min,grey]",
+ "MDRP[min,black]",
+ "MDRP[min,white]",
+ "MDRP0b",
+ "MDRP[min,rnd,grey]",
+ "MDRP[min,rnd,black]",
+ "MDRP[min,rnd,white]",
+ "MDRP0f",
+ "MDRP[rp0,grey]",
+ "MDRP[rp0,black]",
+ "MDRP[rp0,white]",
+ "MDRP13",
+ "MDRP[rp0,rnd,grey]",
+ "MDRP[rp0,rnd,black]",
+ "MDRP[rp0,rnd,white]",
+ "MDRP17",
+ "MDRP[rp0,min,grey]",
+ "MDRP[rp0,min,black]",
+ "MDRP[rp0,min,white]",
+ "MDRP1b",
+ "MDRP[rp0,min,rnd,grey]",
+ "MDRP[rp0,min,rnd,black]",
+ "MDRP[rp0,min,rnd,white]",
+ "MDRP1f",
+ "MIRP[grey]",
+ "MIRP[black]",
+ "MIRP[white]",
+ "MIRP03",
+ "MIRP[rnd,grey]",
+ "MIRP[rnd,black]",
+ "MIRP[rnd,white]",
+ "MIRP07",
+ "MIRP[min,grey]",
+ "MIRP[min,black]",
+ "MIRP[min,white]",
+ "MIRP0b",
+ "MIRP[min,rnd,grey]",
+ "MIRP[min,rnd,black]",
+ "MIRP[min,rnd,white]",
+ "MIRP0f",
+ "MIRP[rp0,grey]",
+ "MIRP[rp0,black]",
+ "MIRP[rp0,white]",
+ "MIRP13",
+ "MIRP[rp0,rnd,grey]",
+ "MIRP[rp0,rnd,black]",
+ "MIRP[rp0,rnd,white]",
+ "MIRP17",
+ "MIRP[rp0,min,grey]",
+ "MIRP[rp0,min,black]",
+ "MIRP[rp0,min,white]",
+ "MIRP1b",
+ "MIRP[rp0,min,rnd,grey]",
+ "MIRP[rp0,min,rnd,black]",
+ "MIRP[rp0,min,rnd,white]",
+ "MIRP1f"};
+
+static int strnmatch(const char *str1, const char *str2, int n) {
+ int ch1, ch2;
+ for (; n-- > 0;) {
+ ch1 = *str1++;
+ ch2 = *str2++;
+ ch1 = tolower(ch1);
+ ch2 = tolower(ch2);
+ if (ch1 != ch2 || ch1 == '\0') return (ch1 - ch2);
+ }
+ return (0);
+}
+
+static uint8_t *parse_instrs(char *text, int *len, void *context,
+ void (*IVError)(void *context, const char *, int)) {
+ short numberstack[256];
+ int npos = 0, nread, i;
+ int push_left = 0, push_size = 0;
+ char *pt;
+ char *end, *bend, *brack;
+ int icnt = 0, imax = (int)(strlen(text)), val;
+ uint8_t *instrs;
+ NEW(instrs, imax);
+
+ for (pt = text; *pt; ++pt) {
+ npos = 0;
+ while (npos < 256) {
+ while (*pt == ' ' || *pt == '\t')
+ ++pt;
+ if (isdigit(*pt) || *pt == '-') {
+ val = strtol(pt, &end, 0);
+ if (val > 32767 || val < -32768) {
+ IVError(context, "A value must be between [-32768,32767]", (int)(pt - text));
+ return (NULL);
+ }
+ pt = end;
+ numberstack[npos++] = val;
+ } else
+ break;
+ }
+ while (*pt == ' ' || *pt == '\t')
+ ++pt;
+ if (npos == 0 && (*pt == '\r' || *pt == '\n' || *pt == '\0')) continue;
+ nread = 0;
+ if (push_left == -1) {
+ /* we need a push count */
+ if (npos == 0)
+ IVError(context, "Expected a number for a push count", (int)(pt - text));
+ else if (numberstack[0] > 255 || numberstack[0] <= 0) {
+ IVError(context, "The push count must be a number between 0 and 255",
+ (int)(pt - text));
+ return (NULL);
+ } else {
+ nread = 1;
+ instrs[icnt++] = numberstack[0];
+ push_left = numberstack[0];
+ }
+ }
+ if (push_left != 0 && push_left < npos - nread &&
+ (*pt == '\r' || *pt == '\n' || *pt == '\0')) {
+ IVError(context, "More pushes specified than needed", (int)(pt - text));
+ return (NULL);
+ }
+ while (push_left > 0 && nread < npos) {
+ if (push_size == 2) {
+ instrs[icnt++] = numberstack[nread] >> 8;
+ instrs[icnt++] = numberstack[nread++] & 0xff;
+ } else if (numberstack[0] > 255 || numberstack[0] < 0) {
+ IVError(context, "A value to be pushed by a byte push must be between 0 and 255",
+ (int)(pt - text));
+ return (NULL);
+ } else
+ instrs[icnt++] = numberstack[nread++];
+ --push_left;
+ }
+ if (nread < npos && push_left == 0 && (*pt == '\r' || *pt == '\n' || *pt == '\0')) {
+ IVError(context, "Unexpected number", (int)(pt - text));
+ return (NULL);
+ }
+ if (*pt == '\r' || *pt == '\n' || *pt == '\0') continue;
+ if (push_left > 0) {
+ IVError(context, "Missing pushes", (int)(pt - text));
+ return (NULL);
+ }
+ while (nread < npos) {
+ i = nread;
+ if (numberstack[nread] >= 0 && numberstack[nread] <= 255) {
+ while (i < npos && numberstack[i] >= 0 && numberstack[i] <= 255)
+ ++i;
+ if (i - nread <= 8)
+ instrs[icnt++] = ttf_pushb + (i - nread) - 1;
+ else {
+ instrs[icnt++] = ttf_npushb;
+ instrs[icnt++] = i - nread;
+ }
+ while (nread < i)
+ instrs[icnt++] = numberstack[nread++];
+ } else {
+ while (i < npos && (numberstack[i] < 0 || numberstack[i] > 255))
+ ++i;
+ if (i - nread <= 8)
+ instrs[icnt++] = ttf_pushw + (i - nread) - 1;
+ else {
+ instrs[icnt++] = ttf_npushw;
+ instrs[icnt++] = i - nread;
+ }
+ while (nread < i) {
+ instrs[icnt++] = numberstack[nread] >> 8;
+ instrs[icnt++] = numberstack[nread++] & 0xff;
+ }
+ }
+ }
+ brack = NULL;
+ for (end = pt; *end != '\r' && *end != '\n' && *end != ' ' && *end != '\0'; ++end)
+ if (*end == '[' || *end == '_') brack = end;
+ for (i = 0; i < 256; ++i)
+ if (strnmatch(pt, ff_ttf_instrnames[i], (int)(end - pt)) == 0 &&
+ sizeof(char) * (end - pt) == strlen(ff_ttf_instrnames[i]))
+ break;
+ if (i == 256 && brack != NULL) {
+ for (i = 0; i < 256; ++i)
+ if (strnmatch(pt, ff_ttf_instrnames[i], (int)(brack - pt + 1)) == 0) break;
+ val = strtol(brack + 1, &bend, 2); /* Stuff in brackets should be in binary */
+ while (*bend == ' ' || *bend == '\t')
+ ++bend;
+ if (*bend != ']') {
+ IVError(context,
+ "Missing right bracket in command (or bad binary value in bracket)",
+ (int)(pt - text));
+ return (NULL);
+ }
+ if (val >= 32) {
+ IVError(context, "Bracketted value is too large", (int)(pt - text));
+ return (NULL);
+ }
+ i += val;
+ }
+ pt = end;
+ instrs[icnt++] = i;
+ if (i == ttf_npushb || i == ttf_npushw || (i >= ttf_pushb && i <= ttf_pushw + 7)) {
+ push_size = (i == ttf_npushb || (i >= ttf_pushb && i <= ttf_pushb + 7)) ? 1 : 2;
+ if (i == ttf_npushb || i == ttf_npushw)
+ push_left = -1;
+ else if (i >= ttf_pushb && i <= ttf_pushb + 7)
+ push_left = i - ttf_pushb + 1;
+ else
+ push_left = i - ttf_pushw + 1;
+ }
+ if (*pt == '\0') break;
+ }
+ *len = icnt;
+ RESIZE(instrs, icnt == 0 ? 1 : icnt);
+ return instrs; /* some versions of realloc abort on 0 */
+}
+
+static int instr_typify(struct instrdata *id) {
+ int i, len = id->instr_cnt, cnt, j, lh;
+ uint8_t *instrs = id->instrs;
+ uint8_t *bts;
+
+ if (id->bts == NULL) NEW(id->bts, len + 1);
+ bts = id->bts;
+ for (i = lh = 0; i < len; ++i) {
+ bts[i] = bt_instr;
+ ++lh;
+ if (instrs[i] == ttf_npushb) {
+ /* NPUSHB */
+ bts[++i] = bt_cnt;
+ cnt = instrs[i];
+ for (j = 0; j < cnt; ++j)
+ bts[++i] = bt_byte;
+ lh += 1 + cnt;
+ } else if (instrs[i] == ttf_npushw) {
+ /* NPUSHW */
+ bts[++i] = bt_cnt;
+ ++lh;
+ cnt = instrs[i];
+ for (j = 0; j < cnt; ++j) {
+ bts[++i] = bt_wordhi;
+ bts[++i] = bt_wordlo;
+ }
+ lh += 1 + cnt;
+ } else if ((instrs[i] & 0xf8) == 0xb0) {
+ /* PUSHB[n] */
+ cnt = (instrs[i] & 7) + 1;
+ for (j = 0; j < cnt; ++j)
+ bts[++i] = bt_byte;
+ lh += cnt;
+ } else if ((instrs[i] & 0xf8) == 0xb8) {
+ /* PUSHW[n] */
+ cnt = (instrs[i] & 7) + 1;
+ for (j = 0; j < cnt; ++j) {
+ bts[++i] = bt_wordhi;
+ bts[++i] = bt_wordlo;
+ }
+ lh += cnt;
+ }
+ }
+ bts[i] = bt_impliedreturn;
+ return (lh);
+}
+
+json_value *dump_ttinstr(uint8_t *instructions, uint32_t length, const otfcc_Options *options) {
+ if (options->instr_as_bytes) {
+ size_t len = 0;
+ uint8_t *buf = base64_encode(instructions, length, &len);
+ return json_string_new_length((uint32_t)len, (char *)buf);
+ FREE(buf);
+ } else {
+ struct instrdata id;
+
+ memset(&id, 0, sizeof(id));
+ id.instr_cnt = length;
+ id.instrs = instructions;
+ instr_typify(&id);
+ json_value *ret = json_array_new(id.instr_cnt);
+ for (uint32_t i = 0; i < id.instr_cnt; ++i) {
+ if (id.bts[i] == bt_wordhi) {
+ json_array_push(
+ ret, json_integer_new((int16_t)((id.instrs[i] << 8) | id.instrs[i + 1])));
+ ++i;
+ } else if (id.bts[i] == bt_cnt || id.bts[i] == bt_byte) {
+ json_array_push(ret, json_integer_new(id.instrs[i]));
+ } else {
+ json_array_push(ret, json_string_new(ff_ttf_instrnames[id.instrs[i]]));
+ }
+ }
+ FREE(id.bts);
+ return preserialize(ret);
+ }
+}
+
+void parse_ttinstr(json_value *col, void *context, void (*Make)(void *, uint8_t *, uint32_t),
+ void (*Wrong)(void *, const char *, int)) {
+ if (!col) {
+ Make(context, NULL, 0);
+ } else if (col->type == json_string) {
+ size_t instrlen;
+ uint8_t *instructions =
+ base64_decode((uint8_t *)col->u.string.ptr, col->u.string.length, &instrlen);
+ Make(context, instructions, (uint32_t)instrlen);
+ } else if (col->type == json_array) {
+ size_t istrlen = 0;
+ for (uint32_t j = 0; j < col->u.array.length; j++) {
+ json_value *record = col->u.array.values[j];
+ if (record->type == json_string) {
+ istrlen += record->u.string.length + 1;
+ } else if (record->type == json_integer) {
+ istrlen += 1 + 20;
+ } else {
+ Make(context, NULL, 0);
+ return;
+ }
+ }
+ sds instrString = sdsnewlen(NULL, istrlen + 1);
+ char *head = instrString;
+ for (uint32_t j = 0; j < col->u.array.length; j++) {
+ json_value *record = col->u.array.values[j];
+ if (record->type == json_string) {
+ memcpy(head, record->u.string.ptr, sizeof(char) * record->u.string.length);
+ head += record->u.string.length;
+ } else if (record->type == json_integer) {
+ int n = snprintf(head, 20, "%d", (int)record->u.integer);
+ head += n;
+ }
+ *head = '\n';
+ head++;
+ }
+ int instrLength = 0;
+ uint8_t *instructions = parse_instrs(instrString, &instrLength, context, Wrong);
+ sdsfree(instrString);
+ if (instructions && instrLength) {
+ Make(context, instructions, instrLength);
+ } else {
+ Make(context, NULL, 0);
+ }
+ } else {
+ Make(context, NULL, 0);
+ }
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,38 @@
+/* Copyright (C) 2001-2012 by George Williams */
+/* Copyright (C) 2016 by Belleve Invis */
+
+/*
+ * 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 CARYLL_SUPPORT_TTINSTR_H
+#define CARYLL_SUPPORT_TTINSTR_H
+#include "../util.h"
+
+void parse_ttinstr(json_value *col, void *context, void (*Make)(void *, uint8_t *, uint32_t),
+ void (*Wrong)(void *, const char *, int));
+json_value *dump_ttinstr(uint8_t *instructions, uint32_t length, const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,291 @@
+#include "unicodeconv.h"
+
+// Brought from libXML2.
+sds utf16le_to_utf8(const uint8_t *inbyte, int inlenb) {
+ uint8_t *inb;
+ uint16_t *in ;
+ uint16_t *inend;
+ uint32_t c, d, inlen;
+ int bits;
+
+ if(inlenb<0) {
+ fprintf(stderr,"! error utf16le_to_utf8: inlenb negative.\n");
+ return NULL;
+ }
+ inb = malloc(inlenb);
+ if(inb==NULL && inlenb>0){
+ fprintf(stderr,"! error utf16le_to_utf8: allocating inb failed.\n");
+ exit(1);
+ }
+ memcpy(inb, inbyte, (size_t)(inlenb));
+
+ in = (uint16_t *)inb;
+
+ if ((inlenb % 2) == 1) (inlenb)--;
+ inlen = inlenb / 2;
+ inend = in + inlen;
+ // pass 1: calculate bytes used for output
+ uint32_t bytesNeeded = 0;
+ while (in < inend) {
+ c = *in++;
+ if ((c & 0xFC00) == 0xD800) { // surrogates
+ if (in >= inend) { // (in > inend) shouldn't happens
+ break;
+ }
+ d = *in++;
+ if ((d & 0xFC00) == 0xDC00) {
+ c &= 0x03FF;
+ c <<= 10;
+ c |= d & 0x03FF;
+ c += 0x10000;
+ }
+ }
+ if (c < 0x80) {
+ bytesNeeded += 1;
+ } else if (c < 0x800) {
+ bytesNeeded += 2;
+ } else if (c < 0x10000) {
+ bytesNeeded += 3;
+ } else {
+ bytesNeeded += 4;
+ }
+ }
+ in = (uint16_t *)inb;
+ sds out = sdsnewlen(NULL, bytesNeeded);
+ sds out0 = out;
+
+ while (in < inend) {
+ c = *in++;
+ if ((c & 0xFC00) == 0xD800) {
+ if (in >= inend) { break; }
+ d = *in++;
+ if ((d & 0xFC00) == 0xDC00) {
+ c &= 0x03FF;
+ c <<= 10;
+ c |= d & 0x03FF;
+ c += 0x10000;
+ }
+ }
+
+ if (c < 0x80) {
+ *out++ = c;
+ bits = -6;
+ } else if (c < 0x800) {
+ *out++ = ((c >> 6) & 0x1F) | 0xC0;
+ bits = 0;
+ } else if (c < 0x10000) {
+ *out++ = ((c >> 12) & 0x0F) | 0xE0;
+ bits = 6;
+ } else {
+ *out++ = ((c >> 18) & 0x07) | 0xF0;
+ bits = 12;
+ }
+
+ for (; bits >= 0; bits -= 6) {
+ *out++ = ((c >> bits) & 0x3F) | 0x80;
+ }
+ }
+ if (inb) {
+ free(inb);
+ }
+ return out0;
+}
+
+sds utf16be_to_utf8(const uint8_t *inbyte, int inlenb) {
+ uint8_t *inb;
+ uint16_t *in ; //= (uint16_t *)inb;
+ uint16_t *inend;
+ uint32_t c, d, inlen;
+ uint8_t *tmp;
+ int bits;
+
+ if(inlenb<0) {
+ fprintf(stderr,"! error utf16be_to_utf8: inlenb negative.\n");
+ return NULL;
+ }
+ inb = malloc(inlenb);
+ if(inb==NULL && inlenb>0){
+ fprintf(stderr,"! error utf16be_to_utf8: allocating inb failed.\n");
+ exit(1);
+ }
+ memcpy(inb, inbyte, (size_t)(inlenb));
+
+ in = (uint16_t *)inb;
+
+ if ((inlenb % 2) == 1) (inlenb)--;
+ inlen = inlenb / 2;
+ inend = in + inlen;
+ uint32_t bytesNeeded = 0;
+ while (in < inend) {
+ {
+ tmp = (uint8_t *)in;
+ c = *tmp++;
+ c = c << 8;
+ c = c | (uint32_t)*tmp;
+ in++;
+ }
+ if ((c & 0xFC00) == 0xD800) {
+ if (in >= inend) { break; }
+ {
+ tmp = (uint8_t *)in;
+ d = *tmp++;
+ d = d << 8;
+ d = d | (uint32_t)*tmp;
+ in++;
+ }
+ if ((d & 0xFC00) == 0xDC00) {
+ c &= 0x03FF;
+ c <<= 10;
+ c |= d & 0x03FF;
+ c += 0x10000;
+ }
+ }
+ if (c < 0x80) {
+ bytesNeeded += 1;
+ } else if (c < 0x800) {
+ bytesNeeded += 2;
+ } else if (c < 0x10000) {
+ bytesNeeded += 3;
+ } else {
+ bytesNeeded += 4;
+ }
+ }
+ in = (uint16_t *)inb;
+ sds out = sdsnewlen(NULL, bytesNeeded);
+ sds out0 = out;
+
+ while (in < inend) {
+ {
+ tmp = (uint8_t *)in;
+ c = *tmp++;
+ c = c << 8;
+ c = c | (uint32_t)*tmp;
+ in++;
+ }
+ if ((c & 0xFC00) == 0xD800) {
+ if (in >= inend) { break; }
+ {
+ tmp = (uint8_t *)in;
+ d = *tmp++;
+ d = d << 8;
+ d = d | (uint32_t)*tmp;
+ in++;
+ }
+ if ((d & 0xFC00) == 0xDC00) {
+ c &= 0x03FF;
+ c <<= 10;
+ c |= d & 0x03FF;
+ c += 0x10000;
+ }
+ }
+
+ if (c < 0x80) {
+ *out++ = c;
+ bits = -6;
+ } else if (c < 0x800) {
+ *out++ = ((c >> 6) & 0x1F) | 0xC0;
+ bits = 0;
+ } else if (c < 0x10000) {
+ *out++ = ((c >> 12) & 0x0F) | 0xE0;
+ bits = 6;
+ } else {
+ *out++ = ((c >> 18) & 0x07) | 0xF0;
+ bits = 12;
+ }
+
+ for (; bits >= 0; bits -= 6) {
+ *out++ = ((c >> bits) & 0x3F) | 0x80;
+ }
+ }
+ if (inb) {
+ free(inb);
+ }
+ return out0;
+}
+
+uint8_t *utf8toutf16be(sds _in, size_t *out_bytes) {
+ if (!_in) {
+ *out_bytes = 0;
+ return NULL;
+ }
+ sds in = _in;
+ size_t inlen = sdslen(in);
+ char *inend = in + inlen;
+
+ uint32_t wordsNeeded = 0;
+ uint8_t trailing = 0;
+ uint32_t c = 0;
+ while (in < inend) {
+ uint8_t d = *in++;
+ if (d < 0x80) {
+ c = d;
+ trailing = 0;
+ } else if (d < 0xC0) {
+ break; // trailing byte in leading position
+ } else if (d < 0xE0) {
+ c = d & 0x1F;
+ trailing = 1;
+ } else if (d < 0xF0) {
+ c = d & 0x0F;
+ trailing = 2;
+ } else if (d < 0xF8) {
+ c = d & 0x07;
+ trailing = 3;
+ } else {
+ break;
+ }
+ if (inend - in < trailing) { break; }
+ for (; trailing; trailing--) {
+ if ((in >= inend) || (((d = *in++) & 0xC0) != 0x80)) break;
+ c <<= 6;
+ c |= d & 0x3F;
+ }
+ if (c < 0x10000) {
+ wordsNeeded += 1;
+ } else if (c < 0x110000) {
+ wordsNeeded += 2;
+ }
+ }
+ uint8_t *_out = malloc(2 * wordsNeeded * sizeof(uint8_t));
+ uint8_t *out = _out;
+ in = _in;
+ while (in < inend) {
+ uint8_t d = *in++;
+ if (d < 0x80) {
+ c = d;
+ trailing = 0;
+ } else if (d < 0xC0) {
+ break; // trailing byte in leading position
+ } else if (d < 0xE0) {
+ c = d & 0x1F;
+ trailing = 1;
+ } else if (d < 0xF0) {
+ c = d & 0x0F;
+ trailing = 2;
+ } else if (d < 0xF8) {
+ c = d & 0x07;
+ trailing = 3;
+ } else {
+ break;
+ }
+ if (inend - in < trailing) { break; }
+ for (; trailing; trailing--) {
+ if ((in >= inend) || (((d = *in++) & 0xC0) != 0x80)) break;
+ c <<= 6;
+ c |= d & 0x3F;
+ }
+ if (c < 0x10000) {
+ *(out++) = (c >> 8) & 0xFF;
+ *(out++) = c & 0xFF;
+ } else if (c < 0x110000) {
+ uint16_t tmp1 = 0xD800 | (c >> 10);
+ *(out++) = (tmp1 >> 8) & 0xFF;
+ *(out++) = tmp1 & 0xFF;
+ uint16_t tmp2 = 0xDC00 | (c & 0x03FF);
+ *(out++) = (tmp2 >> 8) & 0xFF;
+ *(out++) = tmp2 & 0xFF;
+ }
+ }
+ *out_bytes = wordsNeeded * 2;
+ return _out;
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,11 @@
+#ifndef CARYLL_SUPPORT_UNICODECONV_H
+#define CARYLL_SUPPORT_UNICODECONV_H
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdlib.h>
+#include "dep/sds.h"
+sds utf16le_to_utf8(const uint8_t *inb, int inlenb);
+sds utf16be_to_utf8(const uint8_t *inb, int inlenb);
+uint8_t *utf8toutf16be(sds _in, size_t *out_bytes);
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/util.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/util.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/util.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,41 @@
+#ifndef CARYLL_SUPPORT_UTIL_H
+#define CARYLL_SUPPORT_UTIL_H
+
+#ifndef __STDC_FORMAT_MACROS
+#define __STDC_FORMAT_MACROS
+#endif
+
+#include <inttypes.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include "dep/json-builder.h"
+#include "dep/json.h"
+#include "dep/sds.h"
+#include "dep/uthash.h"
+
+#include "caryll/ownership.h"
+#include "caryll/buffer.h"
+
+#include "otfcc/handle.h"
+#include "otfcc/primitives.h"
+#include "otfcc/options.h"
+
+#include "aliases.h"
+#include "otfcc-alloc.h"
+#include "element-impl.h"
+#include "vector-impl.h"
+
+#include "base64/base64.h"
+#include "json/json-ident.h"
+#include "json/json-funcs.h"
+#include "bin-io.h"
+#include "tag.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/vector-impl.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/vector-impl.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/vector-impl.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,190 @@
+#ifndef CARYLL_SUPPORT_VECTOR_IMPL_H
+#define CARYLL_SUPPORT_VECTOR_IMPL_H
+
+#include "caryll/vector.h"
+#include "element-impl.h"
+
+#ifndef __CARYLL_INLINE__
+#ifdef _MSC_VER
+#define __CARYLL_INLINE__ __forceinline /* use __forceinline (VC++ specific) */
+#else
+#define __CARYLL_INLINE__ inline /* use standard inline */
+#endif
+#endif
+
+#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
+#define __CARYLL_MAY_UNUSED__ __attribute__((__unused__))
+#elif (__clang_major__ > 2)
+#define __CARYLL_MAY_UNUSED__ __attribute__((__unused__))
+#else
+#define __CARYLL_MAY_UNUSED__
+#endif
+
+#define __CARYLL_VECTOR_INITIAL_SIZE 2
+
+#define caryll_VectorImplFreeIndependent(__TV, __T, __ti) \
+ static __CARYLL_INLINE__ void __TV##_dispose(__TV *arr) { \
+ if (!arr) return; \
+ if ((__ti).dispose) { \
+ for (size_t j = arr->length; j--;) { \
+ (__ti).dispose(&arr->items[j]); \
+ } \
+ } \
+ __caryll_free(arr->items); \
+ arr->items = NULL; \
+ arr->length = 0; \
+ arr->capacity = 0; \
+ }
+
+#define caryll_VectorImplFreeDependent(__TV, __T, __TX, fn) \
+ static __CARYLL_INLINE__ void __TV##_disposeDependent(__TV *arr, const __TX *enclosure) { \
+ if (!arr) return; \
+ for (size_t j = arr->length; j--;) { \
+ fn(&arr->items[j], enclosure); \
+ } \
+ __caryll_free(arr->items); \
+ arr->items = NULL; \
+ arr->length = 0; \
+ arr->capacity = 0; \
+ }
+
+#define caryll_VectorImplFunctionsCommon(__TV, __T, __ti) \
+ static __CARYLL_INLINE__ void __TV##_init(MODIFY __TV *arr) { \
+ arr->length = 0; \
+ arr->capacity = 0; \
+ arr->items = NULL; \
+ } \
+ caryll_trivialCreate(__TV); \
+ caryll_trivialFree(__TV); \
+ static __CARYLL_INLINE__ void __TV##_growTo(MODIFY __TV *arr, size_t target) { \
+ if (target <= arr->capacity) return; \
+ if (arr->capacity < __CARYLL_VECTOR_INITIAL_SIZE) \
+ arr->capacity = __CARYLL_VECTOR_INITIAL_SIZE; \
+ while (arr->capacity < target) { \
+ arr->capacity += arr->capacity / 2; \
+ } \
+ if (arr->items) { \
+ arr->items = __caryll_realloc(arr->items, arr->capacity * sizeof(__T)); \
+ } else { \
+ arr->items = __caryll_calloc(arr->capacity, sizeof(__T)); \
+ } \
+ } \
+ static __CARYLL_INLINE__ void __TV##_growToN(MODIFY __TV *arr, size_t target) { \
+ if (target <= arr->capacity) return; \
+ if (arr->capacity < __CARYLL_VECTOR_INITIAL_SIZE) \
+ arr->capacity = __CARYLL_VECTOR_INITIAL_SIZE; \
+ if (arr->capacity < target) { arr->capacity = target + 1; } \
+ if (arr->items) { \
+ arr->items = __caryll_realloc(arr->items, arr->capacity * sizeof(__T)); \
+ } else { \
+ arr->items = __caryll_calloc(arr->capacity, sizeof(__T)); \
+ } \
+ } \
+ static __CARYLL_INLINE__ void __TV##_resizeTo(MODIFY __TV *arr, size_t target) { \
+ arr->capacity = target; \
+ if (arr->items) { \
+ arr->items = __caryll_realloc(arr->items, arr->capacity * sizeof(__T)); \
+ } else { \
+ arr->items = __caryll_calloc(arr->capacity, sizeof(__T)); \
+ } \
+ } \
+ static __CARYLL_INLINE__ void __TV##_shrinkToFit(MODIFY __TV *arr) { \
+ __TV##_resizeTo(arr, arr->length); \
+ } \
+ static __CARYLL_INLINE__ void __TV##_grow(MODIFY __TV *arr) { \
+ __TV##_growTo(arr, arr->length + 1); \
+ } \
+ static __CARYLL_INLINE__ void __TV##_push(MODIFY __TV *arr, MOVE __T elem) { \
+ __TV##_grow(arr); \
+ (arr)->items[(arr)->length++] = (elem); \
+ } \
+ static __CARYLL_INLINE__ __T __TV##_pop(MODIFY __TV *arr) { \
+ __T t = arr->items[arr->length - 1]; \
+ arr->length -= 1; \
+ return t; \
+ } \
+ static __CARYLL_INLINE__ void __TV##_fill(MODIFY __TV *arr, size_t n) { \
+ while (arr->length < n) { \
+ __T x; \
+ if ((__ti).init) { \
+ (__ti).init(&x); \
+ } else { \
+ memset(&x, 0, sizeof(x)); \
+ } \
+ __TV##_push(arr, x); \
+ } \
+ } \
+ static __CARYLL_INLINE__ void __TV##_initN(MODIFY __TV *arr, size_t n) { \
+ __TV##_init(arr); \
+ __TV##_growToN(arr, n); \
+ __TV##_fill(arr, n); \
+ } \
+ static __CARYLL_INLINE__ void __TV##_initCapN(MODIFY __TV *arr, size_t n) { \
+ __TV##_init(arr); \
+ __TV##_growToN(arr, n); \
+ } \
+ static __CARYLL_INLINE__ __TV *__TV##_createN(size_t n) { \
+ __TV *t = __caryll_malloc(sizeof(__TV)); \
+ __TV##_initN(t, n); \
+ return t; \
+ } \
+ static __CARYLL_INLINE__ void __TV##_move(MODIFY __TV *dst, MOVE __TV *src) { \
+ *dst = *src; \
+ __TV##_init(src); \
+ } \
+ static __CARYLL_INLINE__ void __TV##_copy(MODIFY __TV *dst, const __TV *src) { \
+ __TV##_init(dst); \
+ __TV##_growTo(dst, src->length); \
+ dst->length = src->length; \
+ if ((__ti).copy) { \
+ for (size_t j = 0; j < src->length; j++) { \
+ (__ti).copy(&dst->items[j], (const __T *)&src->items[j]); \
+ } \
+ } else { \
+ for (size_t j = 0; j < src->length; j++) { \
+ dst->items[j] = src->items[j]; \
+ } \
+ } \
+ } \
+ static __CARYLL_INLINE__ void __TV##_sort(MODIFY __TV *arr, \
+ int (*fn)(const __T *a, const __T *b)) { \
+ qsort(arr->items, arr->length, sizeof(arr->items[0]), \
+ (int (*)(const void *, const void *))fn); \
+ } \
+ static __CARYLL_INLINE__ void __TV##_filterEnv( \
+ MODIFY __TV *arr, bool (*fn)(const __T *a, void *env), void *env) { \
+ size_t j = 0; \
+ for (size_t k = 0; k < arr->length; k++) { \
+ if (fn(&arr->items[k], env)) { \
+ if (j != k) arr->items[j] = arr->items[k]; \
+ j++; \
+ } else { \
+ (__ti).dispose ? (__ti).dispose(&((arr)->items[k])) : (void)0; \
+ } \
+ }; \
+ arr->length = j; \
+ } \
+ static __CARYLL_INLINE__ void __TV##_disposeItem(MODIFY __TV *arr, size_t n) { \
+ (__ti).dispose ? (__ti).dispose(&((arr)->items[n])) : (void)0; \
+ } \
+ caryll_trivialReplace(__TV);
+
+#define caryll_VectorImplFunctions(__TV, __T, __ti) \
+ caryll_VectorImplFreeIndependent(__TV, __T, __ti); \
+ caryll_VectorImplFunctionsCommon(__TV, __T, __ti);
+
+#define caryll_VectorImplAssignments(__TV, __T, __ti) \
+ .init = __TV##_init, .copy = __TV##_copy, .dispose = __TV##_dispose, .create = __TV##_create, \
+ .createN = __TV##_createN, .free = __TV##_free, .initN = __TV##_initN, \
+ .initCapN = __TV##_initCapN, .clear = __TV##_dispose, .replace = __TV##_replace, \
+ .copyReplace = __TV##_copyReplace, .push = __TV##_push, .pop = __TV##_pop, \
+ .fill = __TV##_fill, .sort = __TV##_sort, .disposeItem = __TV##_disposeItem, \
+ .filterEnv = __TV##_filterEnv, .move = __TV##_move, .shrinkToFit = __TV##_shrinkToFit
+
+#define caryll_standardVectorImpl(__TV, __T, __ti, __name) \
+ caryll_VectorImplFunctions(__TV, __T, __ti); \
+ caryll_VectorInterfaceTypeName(__TV) __name = { \
+ caryll_VectorImplAssignments(__TV, __T, __ti), \
+ };
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,330 @@
+#include "BASE.h"
+
+#include "otl/private.h"
+
+
+static void deleteBaseAxis(MOVE otl_BaseAxis *axis) {
+ if (!axis) return;
+ if (axis->entries) {
+ for (tableid_t j = 0; j < axis->scriptCount; j++) {
+ if (axis->entries[j].baseValues) FREE(axis->entries[j].baseValues);
+ }
+ FREE(axis->entries);
+ }
+}
+
+static INLINE void disposeBASE(MOVE table_BASE *base) {
+ deleteBaseAxis(base->horizontal);
+ deleteBaseAxis(base->vertical);
+}
+
+caryll_standardRefType(table_BASE, table_iBASE, disposeBASE);
+
+static int16_t readBaseValue(font_file_pointer data, uint32_t tableLength, uint16_t offset) {
+ checkLength(offset + 4);
+ return read_16s(data + offset + 2);
+FAIL:
+ return 0;
+}
+
+static void readBaseScript(const font_file_pointer data, uint32_t tableLength, uint16_t offset,
+ otl_BaseScriptEntry *entry, uint32_t *baseTagList, uint16_t nBaseTags) {
+ entry->baseValuesCount = 0;
+ entry->baseValues = NULL;
+ entry->defaultBaselineTag = 0;
+ checkLength(offset + 2); // care about base values only now
+ uint16_t baseValuesOffset = read_16u(data + offset);
+ if (baseValuesOffset) {
+ baseValuesOffset += offset;
+ checkLength(baseValuesOffset + 4);
+ uint16_t defaultIndex = read_16u(data + baseValuesOffset) % nBaseTags;
+ entry->defaultBaselineTag = baseTagList[defaultIndex];
+ entry->baseValuesCount = read_16u(data + baseValuesOffset + 2);
+ if (entry->baseValuesCount != nBaseTags) goto FAIL;
+ checkLength(baseValuesOffset + 4 + 2 * entry->baseValuesCount);
+ NEW(entry->baseValues, entry->baseValuesCount);
+ for (tableid_t j = 0; j < entry->baseValuesCount; j++) {
+ entry->baseValues[j].tag = baseTagList[j];
+ uint16_t _valOffset = read_16u(data + baseValuesOffset + 4 + 2 * j);
+ if (_valOffset) {
+ entry->baseValues[j].coordinate =
+ readBaseValue(data, tableLength, baseValuesOffset + _valOffset);
+ } else {
+ entry->baseValues[j].coordinate = 0;
+ }
+ }
+ return;
+ }
+FAIL:
+ entry->baseValuesCount = 0;
+ if (entry->baseValues) FREE(entry->baseValues);
+ entry->baseValues = NULL;
+ entry->defaultBaselineTag = 0;
+ return;
+}
+
+static otl_BaseAxis *readAxis(font_file_pointer data, uint32_t tableLength, uint16_t offset) {
+ otl_BaseAxis *axis = NULL;
+ uint32_t *baseTagList = NULL;
+ checkLength(offset + 4);
+
+ // Read BaseTagList
+ uint16_t baseTagListOffset = offset + read_16u(data + offset);
+ if (baseTagListOffset <= offset) goto FAIL;
+ checkLength(baseTagListOffset + 2);
+ uint16_t nBaseTags = read_16u(data + baseTagListOffset);
+ if (!nBaseTags) goto FAIL;
+ checkLength(baseTagListOffset + 2 + 4 * nBaseTags);
+ NEW(baseTagList, nBaseTags);
+ for (uint16_t j = 0; j < nBaseTags; j++) {
+ baseTagList[j] = read_32u(data + baseTagListOffset + 2 + j * 4);
+ }
+
+ uint16_t baseScriptListOffset = offset + read_16u(data + offset + 2);
+ if (baseScriptListOffset <= offset) goto FAIL;
+ checkLength(baseScriptListOffset + 2);
+ tableid_t nBaseScripts = read_16u(data + baseScriptListOffset);
+ checkLength(baseScriptListOffset + 2 + 6 * nBaseScripts);
+ NEW(axis);
+ axis->scriptCount = nBaseScripts;
+ NEW(axis->entries, nBaseScripts);
+ for (tableid_t j = 0; j < nBaseScripts; j++) {
+ axis->entries[j].tag = read_32u(data + baseScriptListOffset + 2 + 6 * j);
+ uint16_t baseScriptOffset = read_16u(data + baseScriptListOffset + 2 + 6 * j + 4);
+ if (baseScriptOffset) {
+ readBaseScript(data, tableLength, baseScriptListOffset + baseScriptOffset,
+ &(axis->entries[j]), baseTagList, nBaseTags);
+ } else {
+ axis->entries[j].baseValuesCount = 0;
+ axis->entries[j].baseValues = NULL;
+ axis->entries[j].defaultBaselineTag = 0;
+ }
+ }
+ return axis;
+
+FAIL:
+ if (baseTagList) FREE(baseTagList);
+ DELETE(deleteBaseAxis, axis);
+ return axis;
+}
+
+table_BASE *otfcc_readBASE(const otfcc_Packet packet, const otfcc_Options *options) {
+ table_BASE *base = NULL;
+ FOR_TABLE(OTFCC_CHR('B','A','S','E'), table) {
+ font_file_pointer data = table.data;
+ uint32_t tableLength = table.length;
+ checkLength(8);
+ NEW(base);
+ uint16_t offsetH = read_16u(data + 4);
+ if (offsetH) base->horizontal = readAxis(data, tableLength, offsetH);
+ uint16_t offsetV = read_16u(data + 6);
+ if (offsetV) base->vertical = readAxis(data, tableLength, offsetV);
+ return base;
+ FAIL:
+ logWarning("Table 'BASE' Corrupted");
+ DELETE(table_iBASE.free, base);
+ }
+ return base;
+}
+
+static json_value *axisToJson(const otl_BaseAxis *axis) {
+ json_value *_axis = json_object_new(axis->scriptCount);
+ for (tableid_t j = 0; j < axis->scriptCount; j++) {
+ if (!axis->entries[j].tag) continue;
+ json_value *_entry = json_object_new(3);
+ if (axis->entries[j].defaultBaselineTag) {
+ char tag[4];
+ tag2str(axis->entries[j].defaultBaselineTag, tag);
+ json_object_push(_entry, "defaultBaseline", json_string_new_length(4, tag));
+ }
+ json_value *_values = json_object_new(axis->entries[j].baseValuesCount);
+ for (tableid_t k = 0; k < axis->entries[j].baseValuesCount; k++) {
+ if (axis->entries[j].baseValues[k].tag) {
+
+ json_object_push_tag(_values, axis->entries[j].baseValues[k].tag,
+ json_new_position(axis->entries[j].baseValues[k].coordinate));
+ }
+ }
+ json_object_push(_entry, "baselines", _values);
+ json_object_push_tag(_axis, axis->entries[j].tag, _entry);
+ }
+ return _axis;
+}
+
+void otfcc_dumpBASE(const table_BASE *base, json_value *root, const otfcc_Options *options) {
+ if (!base) return;
+ loggedStep("BASE") {
+ json_value *_base = json_object_new(2);
+ if (base->horizontal) json_object_push(_base, "horizontal", axisToJson(base->horizontal));
+ if (base->vertical) json_object_push(_base, "vertical", axisToJson(base->vertical));
+ json_object_push(root, "BASE", _base);
+ }
+}
+
+static void baseScriptFromJson(const json_value *_sr, otl_BaseScriptEntry *entry) {
+ entry->defaultBaselineTag = str2tag(json_obj_getstr_share(_sr, "defaultBaseline"));
+ json_value *_basevalues = json_obj_get_type(_sr, "baselines", json_object);
+ if (!_basevalues) {
+ entry->baseValuesCount = 0;
+ entry->baseValues = NULL;
+ } else {
+ entry->baseValuesCount = _basevalues->u.object.length;
+ NEW(entry->baseValues, entry->baseValuesCount);
+ for (tableid_t j = 0; j < entry->baseValuesCount; j++) {
+ entry->baseValues[j].tag = str2tag(_basevalues->u.object.values[j].name);
+ entry->baseValues[j].coordinate = json_numof(_basevalues->u.object.values[j].value);
+ }
+ }
+}
+
+static int by_script_tag(const void *a, const void *b) {
+ return ((const otl_BaseScriptEntry *)a)->tag - ((const otl_BaseScriptEntry *)b)->tag;
+}
+
+static otl_BaseAxis *axisFromJson(const json_value *_axis) {
+ if (!_axis) return NULL;
+ otl_BaseAxis *axis;
+ NEW(axis);
+ axis->scriptCount = _axis->u.object.length;
+ NEW(axis->entries, axis->scriptCount);
+ tableid_t jj = 0;
+ for (tableid_t j = 0; j < axis->scriptCount; j++) {
+ if (_axis->u.object.values[j].value &&
+ _axis->u.object.values[j].value->type == json_object) {
+ axis->entries[jj].tag = str2tag(_axis->u.object.values[j].name);
+ baseScriptFromJson(_axis->u.object.values[j].value, &(axis->entries[jj]));
+ jj++;
+ }
+ }
+ axis->scriptCount = jj;
+ qsort(axis->entries, axis->scriptCount, sizeof(otl_BaseScriptEntry), by_script_tag);
+ return axis;
+}
+
+table_BASE *otfcc_parseBASE(const json_value *root, const otfcc_Options *options) {
+ table_BASE *base = NULL;
+ json_value *table = NULL;
+ if ((table = json_obj_get_type(root, "BASE", json_object))) {
+ loggedStep("BASE") {
+ NEW(base);
+ base->horizontal = axisFromJson(json_obj_get_type(table, "horizontal", json_object));
+ base->vertical = axisFromJson(json_obj_get_type(table, "vertical", json_object));
+ }
+ }
+ return base;
+}
+
+static int by_tag(const void *a, const void *b) {
+ return *((const uint32_t *)a) - *((const uint32_t *)b);
+}
+
+static bk_Block *axisToBk(const otl_BaseAxis *axis) {
+ if (!axis) return NULL;
+ struct {
+ tableid_t size;
+ uint32_t *items;
+ } taglist;
+ taglist.size = 0;
+ taglist.items = NULL;
+
+ for (tableid_t j = 0; j < axis->scriptCount; j++) {
+ otl_BaseScriptEntry *entry = &(axis->entries[j]);
+ if (entry->defaultBaselineTag) {
+ bool found = false;
+ for (tableid_t jk = 0; jk < taglist.size; jk++) {
+ if (taglist.items[jk] == entry->defaultBaselineTag) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ taglist.size += 1;
+ RESIZE(taglist.items, taglist.size);
+ taglist.items[taglist.size - 1] = entry->defaultBaselineTag;
+ }
+ }
+ for (tableid_t k = 0; k < entry->baseValuesCount; k++) {
+ uint32_t tag = entry->baseValues[k].tag;
+ bool found = false;
+ for (tableid_t jk = 0; jk < taglist.size; jk++) {
+ if (taglist.items[jk] == tag) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ taglist.size += 1;
+ RESIZE(taglist.items, taglist.size);
+ taglist.items[taglist.size - 1] = tag;
+ }
+ }
+ }
+ qsort(taglist.items, taglist.size, sizeof(uint32_t), by_tag);
+ bk_Block *baseTagList = bk_new_Block(b16, taglist.size, bkover);
+ for (tableid_t j = 0; j < taglist.size; j++) {
+ bk_push(baseTagList, b32, taglist.items[j], bkover);
+ }
+
+ bk_Block *baseScriptList = bk_new_Block(b16, axis->scriptCount, bkover);
+ for (tableid_t j = 0; j < axis->scriptCount; j++) {
+ otl_BaseScriptEntry *entry = &(axis->entries[j]);
+ bk_Block *baseValues = bk_new_Block(bkover);
+ {
+ tableid_t defaultIndex = 0;
+ for (tableid_t m = 0; m < taglist.size; m++) {
+ if (taglist.items[m] == entry->defaultBaselineTag) {
+ defaultIndex = m;
+ break;
+ }
+ }
+ bk_push(baseValues, b16, defaultIndex, bkover);
+ }
+ bk_push(baseValues, b16, taglist.size, bkover);
+ for (size_t m = 0; m < taglist.size; m++) {
+ bool found = false;
+ tableid_t foundIndex = 0;
+ for (tableid_t k = 0; k < entry->baseValuesCount; k++) {
+ if (entry->baseValues[k].tag == taglist.items[m]) {
+ found = true, foundIndex = k;
+ break;
+ }
+ }
+ if (found) {
+ bk_push(baseValues, // base value
+ p16,
+ bk_new_Block(
+ b16, 1, // format
+ b16, (int16_t)entry->baseValues[foundIndex].coordinate, // coordinate
+ bkover),
+ bkover);
+ } else {
+ bk_push(baseValues, // assign a zero value
+ p16,
+ bk_new_Block(b16, 1, // format
+ b16, 0, // coordinate
+ bkover),
+ bkover);
+ }
+ }
+ bk_Block *scriptRecord = bk_new_Block(p16, baseValues, // BaseValues
+ p16, NULL, // DefaultMinMax
+ b16, 0, // BaseLangSysCount
+ bkover);
+ bk_push(baseScriptList, b32, entry->tag, // BaseScriptTag
+ p16, scriptRecord, // BaseScript
+ bkover);
+ }
+ FREE(taglist.items);
+ return bk_new_Block(p16, baseTagList, // BaseTagList
+ p16, baseScriptList, // BaseScriptList
+ bkover);
+}
+
+caryll_Buffer *otfcc_buildBASE(const table_BASE *base, const otfcc_Options *options) {
+ if (!base) return NULL;
+ bk_Block *root = bk_new_Block(b32, 0x10000, // Version
+ p16, axisToBk(base->horizontal), // HorizAxis
+ p16, axisToBk(base->vertical), // VertAxis
+ bkover);
+ return bk_build_Block(root);
+}
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.h (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.h 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,11 @@
+#ifndef CARYLL_TABLE_BASE_H
+#define CARYLL_TABLE_BASE_H
+
+#include "otfcc/table/BASE.h"
+
+table_BASE *otfcc_readBASE(const otfcc_Packet packet, const otfcc_Options *options);
+void otfcc_dumpBASE(const table_BASE *base, json_value *root, const otfcc_Options *options);
+table_BASE *otfcc_parseBASE(const json_value *root, const otfcc_Options *options);
+caryll_Buffer *otfcc_buildBASE(const table_BASE *base, const otfcc_Options *options);
+
+#endif
Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CFF.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CFF.c (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CFF.c 2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,1411 @@
+#include "CFF.h"
+
+#include "support/util.h"
+#include "libcff/libcff.h"
+#include "libcff/charstring-il.h"
+#include "libcff/subr.h"
+
+
+const double DEFAULT_BLUE_SCALE = 0.039625;
+const double DEFAULT_BLUE_SHIFT = 7;
+const double DEFAULT_BLUE_FUZZ = 1;
+const double DEFAULT_EXPANSION_FACTOR = 0.06;
+
+static cff_PrivateDict *otfcc_newCff_private() {
+ cff_PrivateDict *pd = NULL;
+ NEW(pd);
+ pd->blueFuzz = DEFAULT_BLUE_FUZZ;
+ pd->blueScale = DEFAULT_BLUE_SCALE;
+ pd->blueShift = DEFAULT_BLUE_SHIFT;
+ pd->expansionFactor = DEFAULT_EXPANSION_FACTOR;
+ return pd;
+}
+
+static INLINE void initFD(table_CFF *fd) {
+ memset(fd, 0, sizeof(*fd));
+ fd->underlinePosition = -100;
+ fd->underlineThickness = 50;
+}
+static void otfcc_delete_privatedict(cff_PrivateDict *priv) {
+ if (!priv) return;
+ FREE(priv->blueValues);
+ FREE(priv->otherBlues);
+ FREE(priv->familyBlues);
+
+ FREE(priv->familyOtherBlues);
+ FREE(priv->stemSnapH);
+ FREE(priv->stemSnapV);
+ FREE(priv);
+}
+static INLINE void disposeFontMatrix(cff_FontMatrix *fm) {
+ if (!fm) return;
+ iVQ.dispose(&fm->x);
+ iVQ.dispose(&fm->y);
+}
+static INLINE void disposeFD(table_CFF *fd) {
+ sdsfree(fd->version);
+ sdsfree(fd->notice);
+ sdsfree(fd->copyright);
+ sdsfree(fd->fullName);
+ sdsfree(fd->familyName);
+ sdsfree(fd->weight);
+
+ sdsfree(fd->fontName);
+ sdsfree(fd->cidRegistry);
+ sdsfree(fd->cidOrdering);
+ disposeFontMatrix(fd->fontMatrix);
+ FREE(fd->fontMatrix);
+ otfcc_delete_privatedict(fd->privateDict);
+ if (fd->fdArray) {
+ for (tableid_t j = 0; j < fd->fdArrayCount; j++) {
+ table_iCFF.free(fd->fdArray[j]);
+ }
+ FREE(fd->fdArray);
+ }
+}
+
+caryll_standardRefType(table_CFF, table_iCFF, initFD, disposeFD);
+
+typedef struct {
+ int32_t fdArrayIndex;
+ table_CFF *meta;
+ table_glyf *glyphs;
+ cff_File *cffFile;
+ uint64_t seed;
+} cff_extract_context;
+static void callback_extract_private(uint32_t op, uint8_t top, cff_Value *stack, void *_context) {
+ cff_extract_context *context = (cff_extract_context *)_context;
+ table_CFF *meta = context->meta;
+ if (context->fdArrayIndex >= 0 && context->fdArrayIndex < meta->fdArrayCount) {
+ meta = meta->fdArray[context->fdArrayIndex];
+ }
+ cff_PrivateDict *pd = meta->privateDict;
+ switch (op) {
+ // DELTAs
+ case op_BlueValues: {
+ pd->blueValuesCount = top;
+ NEW(pd->blueValues, pd->blueValuesCount);
+ for (arity_t j = 0; j < pd->blueValuesCount; j++) {
+ pd->blueValues[j] = cffnum(stack[j]);
+ }
+ break;
+ }
+ case op_OtherBlues: {
+ pd->otherBluesCount = top;
+ NEW(pd->otherBlues, pd->otherBluesCount);
+ for (arity_t j = 0; j < pd->otherBluesCount; j++) {
+ pd->otherBlues[j] = cffnum(stack[j]);
+ }
+ break;
+ }
+ case op_FamilyBlues: {
+ pd->familyBluesCount = top;
+ NEW(pd->familyBlues, pd->familyBluesCount);
+ for (arity_t j = 0; j < pd->familyBluesCount; j++) {
+ pd->familyBlues[j] = cffnum(stack[j]);
+ }
+ break;
+ }
+ case op_FamilyOtherBlues: {
+ pd->familyOtherBluesCount = top;
+ NEW(pd->familyOtherBlues, pd->familyOtherBluesCount);
+ for (arity_t j = 0; j < pd->familyOtherBluesCount; j++) {
+ pd->familyOtherBlues[j] = cffnum(stack[j]);
+ }
+ break;
+ }
+ case op_StemSnapH: {
+ pd->stemSnapHCount = top;
+ NEW(pd->stemSnapH, pd->stemSnapHCount);
+ for (arity_t j = 0; j < pd->stemSnapHCount; j++) {
+ pd->stemSnapH[j] = cffnum(stack[j]);
+ }
+ break;
+ }
+ case op_StemSnapV: {
+ pd->stemSnapVCount = top;
+ NEW(pd->stemSnapV, pd->stemSnapVCount);
+ for (arity_t j = 0; j < pd->stemSnapVCount; j++) {
+ pd->stemSnapV[j] = cffnum(stack[j]);
+ }
+ break;
+ }
+ // Numbers
+ case op_BlueScale:
+ if (top) { pd->blueScale = cffnum(stack[top - 1]); }
+ break;
+ case op_BlueShift:
+ if (top) { pd->blueShift = cffnum(stack[top - 1]); }
+ break;
+ case op_BlueFuzz:
+ if (top) { pd->blueFuzz = cffnum(stack[top - 1]); }
+ break;
+ case op_StdHW:
+ if (top) { pd->stdHW = cffnum(stack[top - 1]); }
+ break;
+ case op_StdVW:
+ if (top) { pd->stdVW = cffnum(stack[top - 1]); }
+ break;
+ case op_ForceBold:
+ if (top) { pd->forceBold = cffnum(stack[top - 1]); }
+ break;
+ case op_LanguageGroup:
+ if (top) { pd->languageGroup = cffnum(stack[top - 1]); }
+ break;
+ case op_ExpansionFactor:
+ if (top) { pd->expansionFactor = cffnum(stack[top - 1]); }
+ break;
+ case op_initialRandomSeed:
+ if (top) { pd->initialRandomSeed = cffnum(stack[top - 1]); }
+ break;
+ case op_defaultWidthX:
+ if (top) { pd->defaultWidthX = cffnum(stack[top - 1]); }
+ break;
+ case op_nominalWidthX:
+ if (top) { pd->nominalWidthX = cffnum(stack[top - 1]); }
+ break;
+ }
+}
+
+static void callback_extract_fd(uint32_t op, uint8_t top, cff_Value *stack, void *_context) {
+ cff_extract_context *context = (cff_extract_context *)_context;
+ cff_File *file = context->cffFile;
+ table_CFF *meta = context->meta;
+ if (context->fdArrayIndex >= 0 && context->fdArrayIndex < meta->fdArrayCount) {
+ meta = meta->fdArray[context->fdArrayIndex];
+ }
+ switch (op) {
+ case op_version:
+ if (top) { meta->version = sdsget_cff_sid(stack[top - 1].i, file->string); }
+ break;
+ case op_Notice:
+ if (top) { meta->notice = sdsget_cff_sid(stack[top - 1].i, file->string); }
+ break;
+ case op_Copyright:
+ if (top) { meta->copyright = sdsget_cff_sid(stack[top - 1].i, file->string); }
+ break;
+ case op_FontName:
+ if (top) { meta->fontName = sdsget_cff_sid(stack[top - 1].i, file->string); }
+ break;
+ case op_FullName:
+ if (top) { meta->fullName = sdsget_cff_sid(stack[top - 1].i, file->string); }
+ break;
+ case op_FamilyName:
+ if (top) { meta->familyName = sdsget_cff_sid(stack[top - 1].i, file->string); }
+ break;
+ case op_Weight:
+ if (top) { meta->weight = sdsget_cff_sid(stack[top - 1].i, file->string); }
+ break;
+ case op_FontBBox:
+ if (top >= 4) {
+ meta->fontBBoxLeft = cffnum(stack[top - 4]);
+ meta->fontBBoxBottom = cffnum(stack[top - 3]);
+ meta->fontBBoxRight = cffnum(stack[top - 2]);
+ meta->fontBBoxTop = cffnum(stack[top - 1]);
+ }
+ break;
+ case op_FontMatrix:
+ if (top >= 6) {
+ NEW(meta->fontMatrix);
+ meta->fontMatrix->a = cffnum(stack[top - 6]);
+ meta->fontMatrix->b = cffnum(stack[top - 5]);
+ meta->fontMatrix->c = cffnum(stack[top - 4]);
+ meta->fontMatrix->d = cffnum(stack[top - 3]);
+ meta->fontMatrix->x = iVQ.createStill(cffnum(stack[top - 2]));
+ meta->fontMatrix->y = iVQ.createStill(cffnum(stack[top - 1]));
+ }
+ break;
+ case op_isFixedPitch:
+ if (top) { meta->isFixedPitch = (bool)cffnum(stack[top - 1]); }
+ break;
+ case op_ItalicAngle:
+ if (top) { meta->italicAngle = cffnum(stack[top - 1]); }
+ break;
+ case op_UnderlinePosition:
+ if (top) { meta->underlinePosition = cffnum(stack[top - 1]); }
+ break;
+ case op_UnderlineThickness:
+ if (top) { meta->underlineThickness = cffnum(stack[top - 1]); }
+ break;
+ case op_StrokeWidth:
+ if (top) { meta->strokeWidth = cffnum(stack[top - 1]); }
+ break;
+
+ // Private
+ case op_Private:
+ if (top >= 2) {
+ uint32_t privateLength = cffnum(stack[top - 2]);
+ uint32_t privateOffset = cffnum(stack[top - 1]);
+ meta->privateDict = otfcc_newCff_private();
+ cff_iDict.parseToCallback(file->raw_data + privateOffset, privateLength, context,
+ callback_extract_private);
+ }
+ break;
+ // CID
+ case op_ROS:
+ if (top >= 3) {
+ meta->isCID = true;
+ meta->cidRegistry = sdsget_cff_sid(stack[top - 3].i, file->string);
+ meta->cidOrdering = sdsget_cff_sid(stack[top - 2].i, file->string);
+ meta->cidSupplement = cffnum(stack[top - 1]);
+ }
+ break;
+ }
+}
+
+typedef struct {
+ glyf_Glyph *g;
+ shapeid_t jContour;
+ shapeid_t jPoint;
+ double defaultWidthX;
+ double nominalWidthX;
+ uint8_t definedHStems;
+ uint8_t definedVStems;
+ uint8_t definedHintMasks;
+ uint8_t definedContourMasks;
+ uint64_t randx;
+} outline_builder_context;
+
+static void callback_draw_setwidth(void *_context, double width) {
+ outline_builder_context *context = (outline_builder_context *)_context;
+ iVQ.replace(&context->g->advanceWidth, iVQ.createStill(width + context->nominalWidthX));
+}
+static void callback_draw_next_contour(void *_context) {
+ outline_builder_context *context = (outline_builder_context *)_context;
+ glyf_Contour c;
+ glyf_iContour.init(&c);
+ glyf_iContourList.push(&context->g->contours, c);
+ context->jContour = context->g->contours.length;
+ context->jPoint = 0;
+}
+static void callback_draw_lineto(void *_context, double x1, double y1) {
+ outline_builder_context *context = (outline_builder_context *)_context;
+ if (context->jContour) {
+ glyf_Contour *contour = &context->g->contours.items[context->jContour - 1];
+ glyf_Point z;
+ glyf_iPoint.init(&z);
+ z.onCurve = true;
+ iVQ.copyReplace(&z.x, iVQ.createStill(x1));
+ iVQ.copyReplace(&z.y, iVQ.createStill(y1));
+ glyf_iContour.push(contour, z);
+ context->jPoint += 1;
+ }
+}
+static void callback_draw_curveto(void *_context, double x1, double y1, double x2, double y2,
+ double x3, double y3) {
+ outline_builder_context *context = (outline_builder_context *)_context;
+ if (context->jContour) {
+ glyf_Contour *contour = &context->g->contours.items[context->jContour - 1];
+ {
+ glyf_Point z;
+ glyf_iPoint.init(&z);
+ z.onCurve = false;
+ iVQ.copyReplace(&z.x, iVQ.createStill(x1));
+ iVQ.copyReplace(&z.y, iVQ.createStill(y1));
+ glyf_iContour.push(contour, z);
+ }
+ {
+ glyf_Point z;
+ glyf_iPoint.init(&z);
+ z.onCurve = false;
+ iVQ.copyReplace(&z.x, iVQ.createStill(x2));
+ iVQ.copyReplace(&z.y, iVQ.createStill(y2));
+ glyf_iContour.push(contour, z);
+ }
+ {
+ glyf_Point z;
+ glyf_iPoint.init(&z);
+ z.onCurve = true;
+ iVQ.copyReplace(&z.x, iVQ.createStill(x3));
+ iVQ.copyReplace(&z.y, iVQ.createStill(y3));
+ glyf_iContour.push(contour, z);
+ }
+ context->jPoint += 3;
+ }
+}
+static void callback_draw_sethint(void *_context, bool isVertical, double position, double width) {
+ outline_builder_context *context = (outline_builder_context *)_context;
+ glyf_iStemDefList.push((isVertical ? &context->g->stemV : &context->g->stemH), //
+ ((glyf_PostscriptStemDef){
+ .position = position,
+ .width = width,
+ }));
+}
+static void callback_draw_setmask(void *_context, bool isContourMask, bool *maskArray) {
+ outline_builder_context *context = (outline_builder_context *)_context;
+ glyf_MaskList *maskList = isContourMask ? &context->g->contourMasks : &context->g->hintMasks;
+ glyf_PostscriptHintMask mask;
+
+ if (context->jContour) {
+ mask.contoursBefore = context->jContour - 1;
+ } else {
+ mask.contoursBefore = 0;
+ }
+ mask.pointsBefore = context->jPoint;
+
+ for (shapeid_t j = 0; j < 0x100; j++) {
+ mask.maskH[j] = j < context->g->stemH.length ? maskArray[j] : 0;
+ mask.maskV[j] = j < context->g->stemV.length ? maskArray[j + context->g->stemH.length] : 0;
+ }
+
+ FREE(maskArray);
+ if (maskList->length > 0 &&
+ maskList->items[maskList->length - 1].contoursBefore == mask.contoursBefore &&
+ maskList->items[maskList->length - 1].pointsBefore == mask.pointsBefore) {
+ // two masks are stacking together
+ // simply replace maskH and maskV
+ for (shapeid_t j = 0; j < 0x100; j++) {
+ maskList->items[maskList->length - 1].maskH[j] = mask.maskH[j];
+ maskList->items[maskList->length - 1].maskV[j] = mask.maskV[j];
+ }
+ } else {
+ glyf_iMaskList.push(maskList, mask);
+ if (isContourMask) {
+ context->definedContourMasks += 1;
+ } else {
+ context->definedHintMasks += 1;
+ }
+ }
+}
+
+static double callback_draw_getrand(void *_context) {
+ // xorshift64* PRNG to double53
+ outline_builder_context *context = (outline_builder_context *)_context;
+ uint64_t x = context->randx;
+ x ^= x >> 12;
+ x ^= x << 25;
+ x ^= x >> 27;
+ context->randx = x;
+ union {
+ uint64_t u;
+ double d;
+ } a;
+ a.u = x * UINT64_C(2685821657736338717);
+ a.u = (a.u >> 12) | UINT64_C(0x3FF0000000000000);
+ double q = (a.u & 2048) ? (1.0 - (2.2204460492503131E-16 / 2.0)) : 1.0;
+ return a.d - q;
+}
+
+static cff_IOutlineBuilder drawPass = {.setWidth = callback_draw_setwidth,
+ .newContour = callback_draw_next_contour,
+ .lineTo = callback_draw_lineto,
+ .curveTo = callback_draw_curveto,
+ .setHint = callback_draw_sethint,
+ .setMask = callback_draw_setmask,
+ .getrand = callback_draw_getrand};
+
+static void buildOutline(glyphid_t i, cff_extract_context *context, const otfcc_Options *options) {
+ cff_File *f = context->cffFile;
+ glyf_Glyph *g = otfcc_newGlyf_glyph();
+ context->glyphs->items[i] = g;
+ uint64_t seed = context->seed;
+
+ cff_Index localSubrs;
+ cff_iIndex.init(&localSubrs);
+
+ cff_Stack stack;
+ stack.max = 0x10000;
+ NEW(stack.stack, stack.max);
+ stack.index = 0;
+ stack.stem = 0;
+
+ outline_builder_context bc = {g, 0, 0, 0.0, 0.0, 0, 0, 0, 0, 0};
+
+ // Determine used FD index and subroutine list
+ uint8_t fd = 0;
+ if (f->fdselect.t != cff_FDSELECT_UNSPECED)
+ fd = cff_parseSubr(i, f->raw_data, f->font_dict, f->fdselect, &localSubrs);
+ else
+ fd = cff_parseSubr(i, f->raw_data, f->top_dict, f->fdselect, &localSubrs);
+
+ g->fdSelect = Handle.fromIndex(fd);
+
+ // Decide default and nominal width
+ if (context->meta->fdArray && fd < context->meta->fdArrayCount &&
+ context->meta->fdArray[fd]->privateDict) {
+ bc.defaultWidthX = context->meta->fdArray[fd]->privateDict->defaultWidthX;
+ bc.nominalWidthX = context->meta->fdArray[fd]->privateDict->nominalWidthX;
+ } else if (context->meta->privateDict) {
+ bc.defaultWidthX = context->meta->privateDict->defaultWidthX;
+ bc.nominalWidthX = context->meta->privateDict->nominalWidthX;
+ }
+ iVQ.replace(&g->advanceWidth, iVQ.createStill(bc.defaultWidthX));
+
+ // Get charstring
+ uint8_t *charStringPtr = f->char_strings.data + f->char_strings.offset[i] - 1;
+ uint32_t charStringLength = f->char_strings.offset[i + 1] - f->char_strings.offset[i];
+
+ // Draw points
+ stack.index = 0;
+ stack.stem = 0;
+ bc.jContour = 0;
+ bc.jPoint = 0;
+ bc.randx = seed;
+
+ cff_parseOutline(charStringPtr, charStringLength, f->global_subr, localSubrs, &stack, &bc,
+ drawPass, options);
+
+ // Turn deltas into absolute coordinates
+ VQ cx = iVQ.neutral(), cy = iVQ.neutral();
+ for (shapeid_t j = 0; j < g->contours.length; j++) {
+ glyf_Contour *contour = &g->contours.items[j];
+ for (shapeid_t k = 0; k < contour->length; k++) {
+ glyf_Point *z = &contour->items[k];
+ iVQ.inplacePlus(&cx, z->x);
+ iVQ.inplacePlus(&cy, z->y);
+ iVQ.copyReplace(&z->x, cx);
+ iVQ.copyReplace(&z->y, cy);
+ }
+ if (!iVQ.compare(contour->items[0].x, contour->items[contour->length - 1].x) &&
+ !iVQ.compare(contour->items[0].y, contour->items[contour->length - 1].y) &&
+ (contour->items[0].onCurve && contour->items[contour->length - 1].onCurve)) {
+ // We found a duplicate knot at the beginning and end of a curve
+ // mainly due to curveto. We can remove that. This is unnecessary.
+ glyf_iContour.pop(contour);
+ }
+ glyf_iContour.shrinkToFit(contour);
+ }
+ glyf_iContourList.shrinkToFit(&g->contours);
+ iVQ.dispose(&cx), iVQ.dispose(&cy);
+
+ cff_iIndex.dispose(&localSubrs);
+ FREE(stack.stack);
+ context->seed = bc.randx;
+}
+
+static sds formCIDString(cffsid_t cid) {
+ return sdscatprintf(sdsnew("CID"), "%d", cid);
+}
+
+static void nameGlyphsAccordingToCFF(cff_extract_context *context) {
+ cff_File *cffFile = context->cffFile;
+ table_glyf *glyphs = context->glyphs;
+ cff_Charset *charset = &cffFile->charsets;
+ if (context->meta->isCID) {
+ switch (charset->t) {
+ case cff_CHARSET_FORMAT0: {
+ for (glyphid_t j = 0; j < charset->s; j++) {
+ cffsid_t sid = charset->f0.glyph[j];
+ sds glyphname = sdsget_cff_sid(sid, cffFile->string);
+ if (glyphname) {
+ glyphs->items[j + 1]->name = glyphname;
+ glyphs->items[j + 1]->cid = sid;
+ }
+ }
+ break;
+ }
+ case cff_CHARSET_FORMAT1: {
+ uint32_t glyphsNamedSofar = 1;
+ for (glyphid_t j = 0; j < charset->s; j++) {
+ cffsid_t first = charset->f1.range1[j].first;
+ for (glyphid_t k = 0; k <= charset->f1.range1[j].nleft; k++) {
+ cffsid_t sid = first + k;
+ sds glyphname = formCIDString(sid);
+ if (glyphsNamedSofar < glyphs->length && glyphname) {
+ glyphs->items[glyphsNamedSofar]->name = glyphname;
+ glyphs->items[glyphsNamedSofar]->cid = sid;
+ }
+ glyphsNamedSofar++;
+ }
+ }
+ break;
+ }
+ case cff_CHARSET_FORMAT2: {
+ uint32_t glyphsNamedSofar = 1;
+ for (glyphid_t j = 0; j < charset->s; j++) {
+ cffsid_t first = charset->f2.range2[j].first;
+ for (glyphid_t k = 0; k <= charset->f2.range2[j].nleft; k++) {
+ cffsid_t sid = first + k;
+ sds glyphname = formCIDString(sid);
+ if (glyphsNamedSofar < glyphs->length && glyphname) {
+ glyphs->items[glyphsNamedSofar]->name = glyphname;
+ glyphs->items[glyphsNamedSofar]->cid = sid;
+ }
+ glyphsNamedSofar++;
+ }
+ }
+ break;
+ }
+ }
+ } else {
+ switch (charset->t) {
+ case cff_CHARSET_FORMAT0: {
+ for (glyphid_t j = 0; j < charset->s; j++) {
+ cffsid_t sid = charset->f0.glyph[j];
+ sds glyphname = sdsget_cff_sid(sid, cffFile->string);
+ if (glyphname) { glyphs->items[j + 1]->name = glyphname; }
+ }
+ break;
+ }
+ case cff_CHARSET_FORMAT1: {
+ uint32_t glyphsNamedSofar = 1;
+ for (glyphid_t j = 0; j < charset->s; j++) {
+ glyphid_t first = charset->f1.range1[j].first;
+ for (glyphid_t k = 0; k <= charset->f1.range1[j].nleft; k++) {
+ cffsid_t sid = first + k;
+ sds glyphname = sdsget_cff_sid(sid, cffFile->string);
+ if (glyphsNamedSofar < glyphs->length && glyphname) {
+ glyphs->items[glyphsNamedSofar]->name = glyphname;
+ }
+ glyphsNamedSofar++;
+ }
+ }
+ break;
+ }
+ case cff_CHARSET_FORMAT2: {
+ uint32_t glyphsNamedSofar = 1;
+ for (glyphid_t j = 0; j < charset->s; j++) {
+ glyphid_t first = charset->f2.range2[j].first;
+ for (glyphid_t k = 0; k <= charset->f2.range2[j].nleft; k++) {
+ cffsid_t sid = first + k;
+ sds glyphname = sdsget_cff_sid(sid, cffFile->string);
+ if (glyphsNamedSofar < glyphs->length && glyphname) {
+ glyphs->items[glyphsNamedSofar]->name = glyphname;
+ }
+ glyphsNamedSofar++;
+ }
+ }
+ break;
+ }
+ }
+ }
+}
+
+static double qround(const double x) {
+ return otfcc_from_fixed(otfcc_to_fixed(x));
+}
+static void applyCffMatrix(table_CFF *CFF_, table_glyf *glyf, const table_head *head) {
+ for (glyphid_t jj = 0; jj < glyf->length; jj++) {
+ glyf_Glyph *g = glyf->items[jj];
+ table_CFF *fd = CFF_;
+ if (fd->fdArray && g->fdSelect.index < fd->fdArrayCount) {
+ fd = fd->fdArray[g->fdSelect.index];
+ }
+ if (fd->fontMatrix) {
+ scale_t a = qround(head->unitsPerEm * fd->fontMatrix->a);
+ scale_t b = qround(head->unitsPerEm * fd->fontMatrix->b);
+ scale_t c = qround(head->unitsPerEm * fd->fontMatrix->c);
+ scale_t d = qround(head->unitsPerEm * fd->fontMatrix->d);
+ VQ x = iVQ.scale(fd->fontMatrix->x, head->unitsPerEm);
+ x.kernel = qround(x.kernel);
+ VQ y = iVQ.scale(fd->fontMatrix->y, head->unitsPerEm);
+ y.kernel = qround(y.kernel);
+ for (shapeid_t j = 0; j < g->contours.length; j++) {
+ glyf_Contour *contour = &g->contours.items[j];
+ for (shapeid_t k = 0; k < contour->length; k++) {
+ VQ zx = iVQ.dup(contour->items[k].x);
+ VQ zy = iVQ.dup(contour->items[k].y);
+ iVQ.replace(&contour->items[k].x, iVQ.pointLinearTfm(x, a, zx, b, zy));
+ iVQ.replace(&contour->items[k].y, iVQ.pointLinearTfm(y, c, zx, d, zy));
+ iVQ.dispose(&zx), iVQ.dispose(&zy);
+ }
+ }
+ iVQ.dispose(&x), iVQ.dispose(&y);
+ }
+ }
+}
+
+table_CFFAndGlyf otfcc_readCFFAndGlyfTables(const otfcc_Packet packet, const otfcc_Options *options,
+ const table_head *head) {
+ table_CFFAndGlyf ret;
+ ret.meta = NULL;
+ ret.glyphs = NULL;
+
+ cff_extract_context context;
+ context.fdArrayIndex = -1;
+ context.meta = NULL;
+ context.glyphs = NULL;
+ context.cffFile = NULL;
+ FOR_TABLE(OTFCC_CHR('C','F','F',' '), table) {
+ font_file_pointer data = table.data;
+ uint32_t length = table.length;
+ cff_File *cffFile = cff_openStream(data, length, options);
+ context.cffFile = cffFile;
+ context.meta = table_iCFF.create();
+
+ // Extract data in TOP DICT
+ cff_iDict.parseToCallback(cffFile->top_dict.data,
+ cffFile->top_dict.offset[1] - cffFile->top_dict.offset[0],
+ &context, callback_extract_fd);
+
+ if (!context.meta->fontName) {
+ context.meta->fontName = sdsget_cff_sid(391, cffFile->name);
+ }
+
+ // We have FDArray
+ if (cffFile->font_dict.count) {
+ context.meta->fdArrayCount = cffFile->font_dict.count;
+ NEW(context.meta->fdArray, context.meta->fdArrayCount);
+ for (tableid_t j = 0; j < context.meta->fdArrayCount; j++) {
+ context.meta->fdArray[j] = table_iCFF.create();
+ context.fdArrayIndex = j;
+ cff_iDict.parseToCallback(
+ cffFile->font_dict.data + cffFile->font_dict.offset[j] - 1,
+ cffFile->font_dict.offset[j + 1] - cffFile->font_dict.offset[j], &context,
+ callback_extract_fd);
+ if (!context.meta->fdArray[j]->fontName) {
+ context.meta->fdArray[j]->fontName = sdscatprintf(sdsempty(), "_Subfont%d", j);
+ }
+ }
+ }
+ ret.meta = context.meta;
+
+ // Extract data of outlines
+ context.seed = 0x1234567887654321;
+ if (context.meta->privateDict) {
+ context.seed =
+ (uint64_t)context.meta->privateDict->initialRandomSeed ^ 0x1234567887654321;
+ }
+ table_glyf *glyphs = table_iGlyf.createN(cffFile->char_strings.count);
+ context.glyphs = glyphs;
+ for (glyphid_t j = 0; j < glyphs->length; j++) {
+ buildOutline(j, &context, options);
+ }
+
+ applyCffMatrix(context.meta, context.glyphs, head);
+
+ // Name glyphs according charset
+ nameGlyphsAccordingToCFF(&context);
+
+ ret.glyphs = context.glyphs;
+ cff_close(cffFile);
+ }
+ return ret;
+}
+
+static void pdDeltaToJson(json_value *target, const char *field, arity_t count, double *values) {
+ if (!count || !values) return;
+ json_value *a = json_array_new(count);
+ for (arity_t j = 0; j < count; j++) {
+ json_array_push(a, json_double_new(values[j]));
+ }
+ json_object_push(target, field, a);
+}
+
+static json_value *pdToJson(const cff_PrivateDict *pd) {
+ json_value *_pd = json_object_new(24);
+ pdDeltaToJson(_pd, "blueValues", pd->blueValuesCount, pd->blueValues);
+ pdDeltaToJson(_pd, "otherBlues", pd->otherBluesCount, pd->otherBlues);
+ pdDeltaToJson(_pd, "familyBlues", pd->familyBluesCount, pd->familyBlues);
+ pdDeltaToJson(_pd, "familyOtherBlues", pd->familyOtherBluesCount, pd->familyOtherBlues);
+ pdDeltaToJson(_pd, "stemSnapH", pd->stemSnapHCount, pd->stemSnapH);
+ pdDeltaToJson(_pd, "stemSnapV", pd->stemSnapVCount, pd->stemSnapV);
+ if (pd->blueScale != DEFAULT_BLUE_SCALE)
+ json_object_push(_pd, "blueScale", json_double_new(pd->blueScale));
+ if (pd->blueShift != DEFAULT_BLUE_SHIFT)
+ json_object_push(_pd, "blueShift", json_double_new(pd->blueShift));
+ if (pd->blueFuzz != DEFAULT_BLUE_FUZZ)
+ json_object_push(_pd, "blueFuzz", json_double_new(pd->blueFuzz));
+ if (pd->stdHW) json_object_push(_pd, "stdHW", json_double_new(pd->stdHW));
+ if (pd->stdVW) json_object_push(_pd, "stdVW", json_double_new(pd->stdVW));
+ if (pd->forceBold) json_object_push(_pd, "forceBold", json_boolean_new(pd->forceBold));
+ if (pd->languageGroup)
+ json_object_push(_pd, "languageGroup", json_double_new(pd->languageGroup));
+ if (pd->expansionFactor != DEFAULT_EXPANSION_FACTOR)
+ json_object_push(_pd, "expansionFactor", json_double_new(pd->expansionFactor));
+ if (pd->initialRandomSeed)
+ json_object_push(_pd, "initialRandomSeed", json_double_new(pd->initialRandomSeed));
+ if (pd->defaultWidthX)
+ json_object_push(_pd, "defaultWidthX", json_double_new(pd->defaultWidthX));
+ if (pd->nominalWidthX)
+ json_object_push(_pd, "nominalWidthX", json_double_new(pd->nominalWidthX));
+ return _pd;
+}
+static json_value *fdToJson(const table_CFF *table) {
+ json_value *_CFF_ = json_object_new(24);
+
+ if (table->isCID) json_object_push(_CFF_, "isCID", json_boolean_new(table->isCID));
+
+ if (table->version) json_object_push(_CFF_, "version", json_from_sds(table->version));
+ if (table->notice) json_object_push(_CFF_, "notice", json_from_sds(table->notice));
+ if (table->copyright) json_object_push(_CFF_, "copyright", json_from_sds(table->copyright));
+ if (table->fontName) json_object_push(_CFF_, "fontName", json_from_sds(table->fontName));
+ if (table->fullName) json_object_push(_CFF_, "fullName", json_from_sds(table->fullName));
+ if (table->familyName) json_object_push(_CFF_, "familyName", json_from_sds(table->familyName));
+ if (table->weight) json_object_push(_CFF_, "weight", json_from_sds(table->weight));
+
+ if (table->isFixedPitch)
+ json_object_push(_CFF_, "isFixedPitch", json_boolean_new(table->isFixedPitch));
+ if (table->italicAngle)
+ json_object_push(_CFF_, "italicAngle", json_double_new(table->italicAngle));
+ if (table->underlinePosition != -100)
+ json_object_push(_CFF_, "underlinePosition", json_double_new(table->underlinePosition));
+ if (table->underlineThickness != 50)
+ json_object_push(_CFF_, "underlineThickness", json_double_new(table->underlineThickness));
+ if (table->strokeWidth)
+ json_object_push(_CFF_, "strokeWidth", json_double_new(table->strokeWidth));
+ if (table->fontBBoxLeft)
+ json_object_push(_CFF_, "fontBBoxLeft", json_double_new(table->fontBBoxLeft));
+ if (table->fontBBoxBottom)
+ json_object_push(_CFF_, "fontBBoxBottom", json_double_new(table->fontBBoxBottom));
+ if (table->fontBBoxRight)
+ json_object_push(_CFF_, "fontBBoxRight", json_double_new(table->fontBBoxRight));
+ if (table->fontBBoxTop)
+ json_object_push(_CFF_, "fontBBoxTop", json_double_new(table->fontBBoxTop));
+
+ if (table->fontMatrix) {
+ json_value *_fontMatrix = json_object_new(6);
+ json_object_push(_fontMatrix, "a", json_double_new(table->fontMatrix->a));
+ json_object_push(_fontMatrix, "b", json_double_new(table->fontMatrix->b));
+ json_object_push(_fontMatrix, "c", json_double_new(table->fontMatrix->c));
+ json_object_push(_fontMatrix, "d", json_double_new(table->fontMatrix->d));
+ json_object_push(_fontMatrix, "x", json_new_VQ(table->fontMatrix->x, NULL));
+ json_object_push(_fontMatrix, "y", json_new_VQ(table->fontMatrix->y, NULL));
+ json_object_push(_CFF_, "fontMatrix", _fontMatrix);
+ }
+ if (table->privateDict) { json_object_push(_CFF_, "privates", pdToJson(table->privateDict)); }
+
+ if (table->cidRegistry && table->cidOrdering) {
+ json_object_push(_CFF_, "cidRegistry", json_from_sds(table->cidRegistry));
+ json_object_push(_CFF_, "cidOrdering", json_from_sds(table->cidOrdering));
+ json_object_push(_CFF_, "cidSupplement", json_integer_new(table->cidSupplement));
+ }
+ if (table->fdArray) {
+ json_value *_fdArray = json_object_new(table->fdArrayCount);
+ for (tableid_t j = 0; j < table->fdArrayCount; j++) {
+ sds name = table->fdArray[j]->fontName;
+ table->fdArray[j]->fontName = NULL;
+ json_object_push(_fdArray, name, fdToJson(table->fdArray[j]));
+ table->fdArray[j]->fontName = name;
+ }
+ json_object_push(_CFF_, "fdArray", _fdArray);
+ }
+ return _CFF_;
+}
+
+void otfcc_dumpCFF(const table_CFF *table, json_value *root, const otfcc_Options *options) {
+ if (!table) return;
+ loggedStep("CFF") {
+ json_object_push(root, "CFF_", fdToJson(table));
+ }
+}
+
+static void pdDeltaFromJson(json_value *dump, arity_t *count, double **array) {
+ if (!dump || dump->type != json_array) return;
+ *count = dump->u.array.length;
+ NEW(*array, *count);
+ for (arity_t j = 0; j < *count; j++) {
+ (*array)[j] = json_numof(dump->u.array.values[j]);
+ }
+}
+static cff_PrivateDict *pdFromJson(json_value *dump) {
+ if (!dump || dump->type != json_object) return NULL;
+ cff_PrivateDict *pd = otfcc_newCff_private();
+ pdDeltaFromJson(json_obj_get(dump, "blueValues"), &(pd->blueValuesCount), &(pd->blueValues));
+ pdDeltaFromJson(json_obj_get(dump, "otherBlues"), &(pd->otherBluesCount), &(pd->otherBlues));
+ pdDeltaFromJson(json_obj_get(dump, "familyBlues"), &(pd->familyBluesCount), &(pd->familyBlues));
@@ Diff output truncated at 1234567 characters. @@
More information about the tex-live-commits
mailing list.