summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Watts <Robin.Watts@artifex.com>2020-04-24 14:13:39 +0100
committerRobin Watts <Robin.Watts@artifex.com>2020-06-02 19:27:16 +0100
commitf7b7e4107163a0efe9861069449e3d037b1eba61 (patch)
treec2053d6a55ca9f16f0ff52293da94132075e2df7
parent13e814d6159d96a7305603dcfc95aa09fd1bb67a (diff)
Tesseract based OCR devices.ghostpdl-9.52-test-base-5
pdfocr8/24/32, ocr and hocr devices. Use OCRLanguage to set languages to use ("eng" by default).
-rw-r--r--Makefile.in17
-rw-r--r--base/endianness.h17
-rw-r--r--base/gsiorom.c37
-rw-r--r--base/gxiodev.h7
-rw-r--r--base/leptonica.mak644
-rw-r--r--base/lib.mak22
-rw-r--r--base/msvccmd.mak1
-rw-r--r--base/ocr.mak46
-rw-r--r--base/tess_version.h30
-rw-r--r--base/tesseract.mak1178
-rw-r--r--base/tessocr.cpp443
-rw-r--r--base/tessocr.h45
-rw-r--r--base/unix-gcc.mak1
-rw-r--r--base/winlib.mak7
-rw-r--r--configure.ac157
-rw-r--r--devices/devs.mak49
-rw-r--r--devices/gdevocr.c266
-rw-r--r--devices/gdevpdfimg.c150
-rw-r--r--devices/gdevpdfimg.h104
-rw-r--r--devices/gdevpdfocr.c727
-rw-r--r--psi/msvc.mak18
-rw-r--r--windows/ghostscript.vcxproj656
-rw-r--r--windows/ghostscript.vcxproj.filters2013
23 files changed, 6549 insertions, 86 deletions
diff --git a/Makefile.in b/Makefile.in
index b8647b27a..8fc446d69 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -508,7 +508,7 @@ AUXEXTRALIBS=@AUXEXTRALIBS@ @AUX_SHARED_ZLIB@
# All reasonable platforms require -lm, but Rhapsody and perhaps one or
# two others fold libm into libc and don't require any additional library.
-STDLIBS=@PTHREAD_LIBS@ -lm
+STDLIBS=@PTHREAD_LIBS@ -lm @TESSERACT_LIBS@
# Define the include switch(es) for the X11 header files.
# This can be null if handled in some other way (e.g., the files are
@@ -667,7 +667,7 @@ DEVICE_DEVS12=
DEVICE_DEVS13=
DEVICE_DEVS14=
DEVICE_DEVS15=
-DEVICE_DEVS16=
+DEVICE_DEVS16=@OCR_DEVS@
DEVICE_DEVS17=
DEVICE_DEVS18=
DEVICE_DEVS19=
@@ -720,6 +720,16 @@ LD_SET_DT_SONAME=@SET_DT_SONAME@
MAKEDIRS=@ORDER_ONLY@ directories
MAKEDIRSTOP=
+OCR_VERSION=@OCR_VERSION@
+LEPTONICADIR=@LEPTONICADIR@
+TESSAVX=@TESS_AVX@
+TESSAVX2=@TESS_AVX2@
+TESSFMA=@TESS_FMA@
+TESSSSE41=@TESS_SSE4_1@
+TESSNEON=@TESS_NEON@
+TESSCXXFLAGS=@TESS_CXXFLAGS@
+TESSERACTDIR=@TESSERACTDIR@
+
# ---------------- End of platform-specific section ---------------- #
INSTALL_CONTRIB=@INSTALL_CONTRIB@
@@ -754,6 +764,9 @@ include $(GLSRCDIR)/ldf_jb2.mak
include $(GLSRCDIR)/lwf_jp2.mak
include $(GLSRCDIR)/openjpeg.mak
include $(GLSRCDIR)/cal.mak
+@LEPTONICAINCLUDE@
+@TESSERACTINCLUDE@
+include $(GLSRCDIR)/ocr.mak
include $(GLSRCDIR)/jpegxr.mak
include $(GLSRCDIR)/expat.mak
diff --git a/base/endianness.h b/base/endianness.h
new file mode 100644
index 000000000..a609e622a
--- /dev/null
+++ b/base/endianness.h
@@ -0,0 +1,17 @@
+#ifndef LEPTONICA_ENDIANNESS_H
+#define LEPTONICA_ENDIANNESS_H
+
+#include "arch.h"
+
+#if ARCH_IS_BIG_ENDIAN
+#define L_BIG_ENDIAN
+#endif
+
+#ifdef L_BIG_ENDIAN
+#else
+# ifndef L_LITTLE_ENDIAN
+# define L_LITTLE_ENDIAN
+# endif
+#endif
+
+#endif
diff --git a/base/gsiorom.c b/base/gsiorom.c
index d51746d7c..767a35cf2 100644
--- a/base/gsiorom.c
+++ b/base/gsiorom.c
@@ -412,3 +412,40 @@ romfs_enumerate_next(gs_memory_t * mem, file_enum *pfen, char *ptr, uint maxlen)
romfs_enumerate_close(mem, pfen);
return ~(uint)0;
}
+
+int
+romfs_file_len(gs_memory_t * mem, const char *fname)
+{
+ extern const uint32_t *gs_romfs[];
+ extern const time_t gs_romfs_buildtime;
+ const uint32_t *node_scan = gs_romfs[0], *node = NULL;
+ uint32_t filelen, blocks;
+ int i;
+ char *filename;
+ uint namelen = strlen(fname);
+
+ /* a build time of zero indicates we have the "dummy" romfs
+ * used when COMPILE_INITS==0 - returning a specific error here
+ * gives us a quick way to check for that.
+ */
+ if (gs_romfs_buildtime == (time_t)0) {
+ return_error(gs_error_unregistered);
+ }
+
+ /* scan the inodes to find the requested file */
+ for (i=0; node_scan != 0; i++, node_scan = gs_romfs[i]) {
+ filelen = get_u32_big_endian(node_scan) & 0x7fffffff; /* ignore compression bit */
+ blocks = (filelen+ROMFS_BLOCKSIZE-1)/ ROMFS_BLOCKSIZE;
+ filename = (char *)(&(node_scan[1+(2*blocks)]));
+ if ((namelen == strlen(filename)) &&
+ (strncmp(filename, fname, namelen) == 0)) {
+ node = node_scan;
+ break;
+ }
+ }
+ /* inode points to the file (or NULL if not found */
+ if (node == NULL)
+ return_error(gs_error_undefinedfilename);
+
+ return (int)filelen;
+}
diff --git a/base/gxiodev.h b/base/gxiodev.h
index 953348ba3..704ab9acd 100644
--- a/base/gxiodev.h
+++ b/base/gxiodev.h
@@ -205,4 +205,11 @@ gs_iodev_init(gs_memory_t * mem);
void
gs_iodev_finit(gs_memory_t * mem);
+/* Backdoor into romfs for reading file length.
+ * Required because C++ and C seem to differ on sizeof(stat).
+ */
+int
+romfs_file_len(gs_memory_t * mem, const char *name);
+
+
#endif /* gxiodev_INCLUDED */
diff --git a/base/leptonica.mak b/base/leptonica.mak
new file mode 100644
index 000000000..0929e376c
--- /dev/null
+++ b/base/leptonica.mak
@@ -0,0 +1,644 @@
+LEPTINCLUDES=\
+ $(I_)$(LEPTONICADIR)/src$(_I)\
+ $(I_)$(GLSRCDIR)$(_I)\
+ $(I_)$(GLGENDIR)$(_I)
+
+LEPTCFLAGS_LOCAL=\
+ -DLEPTONICA_INTERCEPT_MALLOC=1\
+ -DHAVE_LIBJPEG=0\
+ -DHAVE_LIBTIFF=0\
+ -DHAVE_LIBPNG=0\
+ -DHAVE_LIBZ=0\
+ -DHAVE_LIBGIF=0\
+ -DHAVE_LIBUNGIF=0\
+ -DHAVE_LIBWEBP=0\
+ -DHAVE_LIBWEBP_ANIM=0\
+ -DHAVE_LIBJP2K=0
+
+LEPTCC = $(CC) $(CCFLAGS) $(LEPTINCLUDES) $(LEPTCFLAGS_LOCAL)
+LEPTOBJ = $(GLOBJDIR)$(D)leptonica_
+LEPTO_ = $(O_)$(LEPTOBJ)
+
+LEPTDEPS=\
+ $(arch_h)\
+ $(GLSRCDIR)/leptonica.mak\
+ $(MAKEDIRS)
+
+$(LEPTOBJ)adaptmap.$(OBJ) : $(LEPTONICADIR)/src/adaptmap.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)adaptmap.$(OBJ) $(C_) $(LEPTONICADIR)/src/adaptmap.c
+
+$(LEPTOBJ)affine.$(OBJ) : $(LEPTONICADIR)/src/affine.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)affine.$(OBJ) $(C_) $(LEPTONICADIR)/src/affine.c
+
+$(LEPTOBJ)affinecompose.$(OBJ) : $(LEPTONICADIR)/src/affinecompose.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)affinecompose.$(OBJ) $(C_) $(LEPTONICADIR)/src/affinecompose.c
+
+$(LEPTOBJ)arrayaccess.$(OBJ) : $(LEPTONICADIR)/src/arrayaccess.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)arrayaccess.$(OBJ) $(C_) $(LEPTONICADIR)/src/arrayaccess.c
+
+$(LEPTOBJ)baseline.$(OBJ) : $(LEPTONICADIR)/src/baseline.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)baseline.$(OBJ) $(C_) $(LEPTONICADIR)/src/baseline.c
+
+$(LEPTOBJ)bbuffer.$(OBJ) : $(LEPTONICADIR)/src/bbuffer.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bbuffer.$(OBJ) $(C_) $(LEPTONICADIR)/src/bbuffer.c
+
+$(LEPTOBJ)bilateral.$(OBJ) : $(LEPTONICADIR)/src/bilateral.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bilateral.$(OBJ) $(C_) $(LEPTONICADIR)/src/bilateral.c
+
+$(LEPTOBJ)bilinear.$(OBJ) : $(LEPTONICADIR)/src/bilinear.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bilinear.$(OBJ) $(C_) $(LEPTONICADIR)/src/bilinear.c
+
+$(LEPTOBJ)binexpand.$(OBJ) : $(LEPTONICADIR)/src/binexpand.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)binexpand.$(OBJ) $(C_) $(LEPTONICADIR)/src/binexpand.c
+
+$(LEPTOBJ)binreduce.$(OBJ) : $(LEPTONICADIR)/src/binreduce.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)binreduce.$(OBJ) $(C_) $(LEPTONICADIR)/src/binreduce.c
+
+$(LEPTOBJ)blend.$(OBJ) : $(LEPTONICADIR)/src/blend.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)blend.$(OBJ) $(C_) $(LEPTONICADIR)/src/blend.c
+
+$(LEPTOBJ)bmf.$(OBJ) : $(LEPTONICADIR)/src/bmf.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bmf.$(OBJ) $(C_) $(LEPTONICADIR)/src/bmf.c
+
+$(LEPTOBJ)bmpio.$(OBJ) : $(LEPTONICADIR)/src/bmpio.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bmpio.$(OBJ) $(C_) $(LEPTONICADIR)/src/bmpio.c
+
+$(LEPTOBJ)bmpiostub.$(OBJ) : $(LEPTONICADIR)/src/bmpiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bmpiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/bmpiostub.c
+
+$(LEPTOBJ)bootnumgen1.$(OBJ) : $(LEPTONICADIR)/src/bootnumgen1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bootnumgen1.$(OBJ) $(C_) $(LEPTONICADIR)/src/bootnumgen1.c
+
+$(LEPTOBJ)bootnumgen2.$(OBJ) : $(LEPTONICADIR)/src/bootnumgen2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bootnumgen2.$(OBJ) $(C_) $(LEPTONICADIR)/src/bootnumgen2.c
+
+$(LEPTOBJ)bootnumgen3.$(OBJ) : $(LEPTONICADIR)/src/bootnumgen3.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bootnumgen3.$(OBJ) $(C_) $(LEPTONICADIR)/src/bootnumgen3.c
+
+$(LEPTOBJ)bootnumgen4.$(OBJ) : $(LEPTONICADIR)/src/bootnumgen4.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bootnumgen4.$(OBJ) $(C_) $(LEPTONICADIR)/src/bootnumgen4.c
+
+$(LEPTOBJ)boxbasic.$(OBJ) : $(LEPTONICADIR)/src/boxbasic.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)boxbasic.$(OBJ) $(C_) $(LEPTONICADIR)/src/boxbasic.c
+
+$(LEPTOBJ)boxfunc1.$(OBJ) : $(LEPTONICADIR)/src/boxfunc1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)boxfunc1.$(OBJ) $(C_) $(LEPTONICADIR)/src/boxfunc1.c
+
+$(LEPTOBJ)boxfunc2.$(OBJ) : $(LEPTONICADIR)/src/boxfunc2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)boxfunc2.$(OBJ) $(C_) $(LEPTONICADIR)/src/boxfunc2.c
+
+$(LEPTOBJ)boxfunc3.$(OBJ) : $(LEPTONICADIR)/src/boxfunc3.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)boxfunc3.$(OBJ) $(C_) $(LEPTONICADIR)/src/boxfunc3.c
+
+$(LEPTOBJ)boxfunc4.$(OBJ) : $(LEPTONICADIR)/src/boxfunc4.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)boxfunc4.$(OBJ) $(C_) $(LEPTONICADIR)/src/boxfunc4.c
+
+$(LEPTOBJ)boxfunc5.$(OBJ) : $(LEPTONICADIR)/src/boxfunc5.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)boxfunc5.$(OBJ) $(C_) $(LEPTONICADIR)/src/boxfunc5.c
+
+$(LEPTOBJ)bytearray.$(OBJ) : $(LEPTONICADIR)/src/bytearray.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)bytearray.$(OBJ) $(C_) $(LEPTONICADIR)/src/bytearray.c
+
+$(LEPTOBJ)ccbord.$(OBJ) : $(LEPTONICADIR)/src/ccbord.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)ccbord.$(OBJ) $(C_) $(LEPTONICADIR)/src/ccbord.c
+
+$(LEPTOBJ)classapp.$(OBJ) : $(LEPTONICADIR)/src/classapp.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)classapp.$(OBJ) $(C_) $(LEPTONICADIR)/src/classapp.c
+
+$(LEPTOBJ)colorcontent.$(OBJ) : $(LEPTONICADIR)/src/colorcontent.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colorcontent.$(OBJ) $(C_) $(LEPTONICADIR)/src/colorcontent.c
+
+$(LEPTOBJ)colorinfo.$(OBJ) : $(LEPTONICADIR)/src/colorinfo.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colorinfo.$(OBJ) $(C_) $(LEPTONICADIR)/src/colorinfo.c
+
+$(LEPTOBJ)coloring.$(OBJ) : $(LEPTONICADIR)/src/coloring.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)coloring.$(OBJ) $(C_) $(LEPTONICADIR)/src/coloring.c
+
+$(LEPTOBJ)colormap.$(OBJ) : $(LEPTONICADIR)/src/colormap.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colormap.$(OBJ) $(C_) $(LEPTONICADIR)/src/colormap.c
+
+$(LEPTOBJ)colormorph.$(OBJ) : $(LEPTONICADIR)/src/colormorph.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colormorph.$(OBJ) $(C_) $(LEPTONICADIR)/src/colormorph.c
+
+$(LEPTOBJ)colorquant1.$(OBJ) : $(LEPTONICADIR)/src/colorquant1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colorquant1.$(OBJ) $(C_) $(LEPTONICADIR)/src/colorquant1.c
+
+$(LEPTOBJ)colorquant2.$(OBJ) : $(LEPTONICADIR)/src/colorquant2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colorquant2.$(OBJ) $(C_) $(LEPTONICADIR)/src/colorquant2.c
+
+$(LEPTOBJ)colorseg.$(OBJ) : $(LEPTONICADIR)/src/colorseg.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colorseg.$(OBJ) $(C_) $(LEPTONICADIR)/src/colorseg.c
+
+$(LEPTOBJ)colorspace.$(OBJ) : $(LEPTONICADIR)/src/colorspace.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)colorspace.$(OBJ) $(C_) $(LEPTONICADIR)/src/colorspace.c
+
+$(LEPTOBJ)compare.$(OBJ) : $(LEPTONICADIR)/src/compare.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)compare.$(OBJ) $(C_) $(LEPTONICADIR)/src/compare.c
+
+$(LEPTOBJ)conncomp.$(OBJ) : $(LEPTONICADIR)/src/conncomp.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)conncomp.$(OBJ) $(C_) $(LEPTONICADIR)/src/conncomp.c
+
+$(LEPTOBJ)convertfiles.$(OBJ) : $(LEPTONICADIR)/src/convertfiles.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)convertfiles.$(OBJ) $(C_) $(LEPTONICADIR)/src/convertfiles.c
+
+$(LEPTOBJ)convolve.$(OBJ) : $(LEPTONICADIR)/src/convolve.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)convolve.$(OBJ) $(C_) $(LEPTONICADIR)/src/convolve.c
+
+$(LEPTOBJ)correlscore.$(OBJ) : $(LEPTONICADIR)/src/correlscore.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)correlscore.$(OBJ) $(C_) $(LEPTONICADIR)/src/correlscore.c
+
+$(LEPTOBJ)dewarp1.$(OBJ) : $(LEPTONICADIR)/src/dewarp1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dewarp1.$(OBJ) $(C_) $(LEPTONICADIR)/src/dewarp1.c
+
+$(LEPTOBJ)dewarp2.$(OBJ) : $(LEPTONICADIR)/src/dewarp2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dewarp2.$(OBJ) $(C_) $(LEPTONICADIR)/src/dewarp2.c
+
+$(LEPTOBJ)dewarp3.$(OBJ) : $(LEPTONICADIR)/src/dewarp3.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dewarp3.$(OBJ) $(C_) $(LEPTONICADIR)/src/dewarp3.c
+
+$(LEPTOBJ)dewarp4.$(OBJ) : $(LEPTONICADIR)/src/dewarp4.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dewarp4.$(OBJ) $(C_) $(LEPTONICADIR)/src/dewarp4.c
+
+$(LEPTOBJ)dnabasic.$(OBJ) : $(LEPTONICADIR)/src/dnabasic.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dnabasic.$(OBJ) $(C_) $(LEPTONICADIR)/src/dnabasic.c
+
+$(LEPTOBJ)dnafunc1.$(OBJ) : $(LEPTONICADIR)/src/dnafunc1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dnafunc1.$(OBJ) $(C_) $(LEPTONICADIR)/src/dnafunc1.c
+
+$(LEPTOBJ)dnahash.$(OBJ) : $(LEPTONICADIR)/src/dnahash.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dnahash.$(OBJ) $(C_) $(LEPTONICADIR)/src/dnahash.c
+
+$(LEPTOBJ)dwacomb.2.$(OBJ) : $(LEPTONICADIR)/src/dwacomb.2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dwacomb.2.$(OBJ) $(C_) $(LEPTONICADIR)/src/dwacomb.2.c
+
+$(LEPTOBJ)dwacomblow.2.$(OBJ) : $(LEPTONICADIR)/src/dwacomblow.2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)dwacomblow.2.$(OBJ) $(C_) $(LEPTONICADIR)/src/dwacomblow.2.c
+
+$(LEPTOBJ)edge.$(OBJ) : $(LEPTONICADIR)/src/edge.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)edge.$(OBJ) $(C_) $(LEPTONICADIR)/src/edge.c
+
+$(LEPTOBJ)encoding.$(OBJ) : $(LEPTONICADIR)/src/encoding.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)encoding.$(OBJ) $(C_) $(LEPTONICADIR)/src/encoding.c
+
+$(LEPTOBJ)enhance.$(OBJ) : $(LEPTONICADIR)/src/enhance.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)enhance.$(OBJ) $(C_) $(LEPTONICADIR)/src/enhance.c
+
+$(LEPTOBJ)fhmtauto.$(OBJ) : $(LEPTONICADIR)/src/fhmtauto.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fhmtauto.$(OBJ) $(C_) $(LEPTONICADIR)/src/fhmtauto.c
+
+$(LEPTOBJ)fhmtgenlow.1.$(OBJ) : $(LEPTONICADIR)/src/fhmtgenlow.1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fhmtgenlow.1.$(OBJ) $(C_) $(LEPTONICADIR)/src/fhmtgenlow.1.c
+
+$(LEPTOBJ)fmorphauto.$(OBJ) : $(LEPTONICADIR)/src/fmorphauto.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fmorphauto.$(OBJ) $(C_) $(LEPTONICADIR)/src/fmorphauto.c
+
+$(LEPTOBJ)fmorphgen.1.$(OBJ) : $(LEPTONICADIR)/src/fmorphgen.1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fmorphgen.1.$(OBJ) $(C_) $(LEPTONICADIR)/src/fmorphgen.1.c
+
+$(LEPTOBJ)fmorphgenlow.1.$(OBJ) : $(LEPTONICADIR)/src/fmorphgenlow.1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fmorphgenlow.1.$(OBJ) $(C_) $(LEPTONICADIR)/src/fmorphgenlow.1.c
+
+$(LEPTOBJ)fpix1.$(OBJ) : $(LEPTONICADIR)/src/fpix1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fpix1.$(OBJ) $(C_) $(LEPTONICADIR)/src/fpix1.c
+
+$(LEPTOBJ)fpix2.$(OBJ) : $(LEPTONICADIR)/src/fpix2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)fpix2.$(OBJ) $(C_) $(LEPTONICADIR)/src/fpix2.c
+
+$(LEPTOBJ)gifiostub.$(OBJ) : $(LEPTONICADIR)/src/gifiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)gifiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/gifiostub.c
+
+$(LEPTOBJ)gplot.$(OBJ) : $(LEPTONICADIR)/src/gplot.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)gplot.$(OBJ) $(C_) $(LEPTONICADIR)/src/gplot.c
+
+$(LEPTOBJ)graphics.$(OBJ) : $(LEPTONICADIR)/src/graphics.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)graphics.$(OBJ) $(C_) $(LEPTONICADIR)/src/graphics.c
+
+$(LEPTOBJ)graymorph.$(OBJ) : $(LEPTONICADIR)/src/graymorph.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)graymorph.$(OBJ) $(C_) $(LEPTONICADIR)/src/graymorph.c
+
+$(LEPTOBJ)grayquant.$(OBJ) : $(LEPTONICADIR)/src/grayquant.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)grayquant.$(OBJ) $(C_) $(LEPTONICADIR)/src/grayquant.c
+
+$(LEPTOBJ)heap.$(OBJ) : $(LEPTONICADIR)/src/heap.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)heap.$(OBJ) $(C_) $(LEPTONICADIR)/src/heap.c
+
+$(LEPTOBJ)jbclass.$(OBJ) : $(LEPTONICADIR)/src/jbclass.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)jbclass.$(OBJ) $(C_) $(LEPTONICADIR)/src/jbclass.c
+
+$(LEPTOBJ)jp2kheader.$(OBJ) : $(LEPTONICADIR)/src/jp2kheader.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)jp2kheader.$(OBJ) $(C_) $(LEPTONICADIR)/src/jp2kheader.c
+
+$(LEPTOBJ)jp2kheaderstub.$(OBJ) : $(LEPTONICADIR)/src/jp2kheaderstub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)jp2kheaderstub.$(OBJ) $(C_) $(LEPTONICADIR)/src/jp2kheaderstub.c
+
+$(LEPTOBJ)jp2kiostub.$(OBJ) : $(LEPTONICADIR)/src/jp2kiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)jp2kiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/jp2kiostub.c
+
+$(LEPTOBJ)jpegiostub.$(OBJ) : $(LEPTONICADIR)/src/jpegiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)jpegiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/jpegiostub.c
+
+$(LEPTOBJ)kernel.$(OBJ) : $(LEPTONICADIR)/src/kernel.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)kernel.$(OBJ) $(C_) $(LEPTONICADIR)/src/kernel.c
+
+$(LEPTOBJ)libversions.$(OBJ) : $(LEPTONICADIR)/src/libversions.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)libversions.$(OBJ) $(C_) $(LEPTONICADIR)/src/libversions.c
+
+$(LEPTOBJ)list.$(OBJ) : $(LEPTONICADIR)/src/list.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)list.$(OBJ) $(C_) $(LEPTONICADIR)/src/list.c
+
+$(LEPTOBJ)map.$(OBJ) : $(LEPTONICADIR)/src/map.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)map.$(OBJ) $(C_) $(LEPTONICADIR)/src/map.c
+
+$(LEPTOBJ)morph.$(OBJ) : $(LEPTONICADIR)/src/morph.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)morph.$(OBJ) $(C_) $(LEPTONICADIR)/src/morph.c
+
+$(LEPTOBJ)morphapp.$(OBJ) : $(LEPTONICADIR)/src/morphapp.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)morphapp.$(OBJ) $(C_) $(LEPTONICADIR)/src/morphapp.c
+
+$(LEPTOBJ)morphdwa.$(OBJ) : $(LEPTONICADIR)/src/morphdwa.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)morphdwa.$(OBJ) $(C_) $(LEPTONICADIR)/src/morphdwa.c
+
+$(LEPTOBJ)morphseq.$(OBJ) : $(LEPTONICADIR)/src/morphseq.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)morphseq.$(OBJ) $(C_) $(LEPTONICADIR)/src/morphseq.c
+
+$(LEPTOBJ)numabasic.$(OBJ) : $(LEPTONICADIR)/src/numabasic.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)numabasic.$(OBJ) $(C_) $(LEPTONICADIR)/src/numabasic.c
+
+$(LEPTOBJ)numafunc1.$(OBJ) : $(LEPTONICADIR)/src/numafunc1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)numafunc1.$(OBJ) $(C_) $(LEPTONICADIR)/src/numafunc1.c
+
+$(LEPTOBJ)numafunc2.$(OBJ) : $(LEPTONICADIR)/src/numafunc2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)numafunc2.$(OBJ) $(C_) $(LEPTONICADIR)/src/numafunc2.c
+
+$(LEPTOBJ)pageseg.$(OBJ) : $(LEPTONICADIR)/src/pageseg.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pageseg.$(OBJ) $(C_) $(LEPTONICADIR)/src/pageseg.c
+
+$(LEPTOBJ)paintcmap.$(OBJ) : $(LEPTONICADIR)/src/paintcmap.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)paintcmap.$(OBJ) $(C_) $(LEPTONICADIR)/src/paintcmap.c
+
+$(LEPTOBJ)partify.$(OBJ) : $(LEPTONICADIR)/src/partify.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)partify.$(OBJ) $(C_) $(LEPTONICADIR)/src/partify.c
+
+$(LEPTOBJ)partition.$(OBJ) : $(LEPTONICADIR)/src/partition.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)partition.$(OBJ) $(C_) $(LEPTONICADIR)/src/partition.c
+
+$(LEPTOBJ)pdfio1.$(OBJ) : $(LEPTONICADIR)/src/pdfio1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pdfio1.$(OBJ) $(C_) $(LEPTONICADIR)/src/pdfio1.c
+
+$(LEPTOBJ)pdfio1stub.$(OBJ) : $(LEPTONICADIR)/src/pdfio1stub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pdfio1stub.$(OBJ) $(C_) $(LEPTONICADIR)/src/pdfio1stub.c
+
+$(LEPTOBJ)pdfio2.$(OBJ) : $(LEPTONICADIR)/src/pdfio2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pdfio2.$(OBJ) $(C_) $(LEPTONICADIR)/src/pdfio2.c
+
+$(LEPTOBJ)pdfio2stub.$(OBJ) : $(LEPTONICADIR)/src/pdfio2stub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pdfio2stub.$(OBJ) $(C_) $(LEPTONICADIR)/src/pdfio2stub.c
+
+$(LEPTOBJ)pix1.$(OBJ) : $(LEPTONICADIR)/src/pix1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pix1.$(OBJ) $(C_) $(LEPTONICADIR)/src/pix1.c
+
+$(LEPTOBJ)pix2.$(OBJ) : $(LEPTONICADIR)/src/pix2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pix2.$(OBJ) $(C_) $(LEPTONICADIR)/src/pix2.c
+
+$(LEPTOBJ)pix3.$(OBJ) : $(LEPTONICADIR)/src/pix3.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pix3.$(OBJ) $(C_) $(LEPTONICADIR)/src/pix3.c
+
+$(LEPTOBJ)pix4.$(OBJ) : $(LEPTONICADIR)/src/pix4.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pix4.$(OBJ) $(C_) $(LEPTONICADIR)/src/pix4.c
+
+$(LEPTOBJ)pix5.$(OBJ) : $(LEPTONICADIR)/src/pix5.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pix5.$(OBJ) $(C_) $(LEPTONICADIR)/src/pix5.c
+
+$(LEPTOBJ)pixabasic.$(OBJ) : $(LEPTONICADIR)/src/pixabasic.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixabasic.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixabasic.c
+
+$(LEPTOBJ)pixacc.$(OBJ) : $(LEPTONICADIR)/src/pixacc.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixacc.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixacc.c
+
+$(LEPTOBJ)pixafunc1.$(OBJ) : $(LEPTONICADIR)/src/pixafunc1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixafunc1.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixafunc1.c
+
+$(LEPTOBJ)pixafunc2.$(OBJ) : $(LEPTONICADIR)/src/pixafunc2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixafunc2.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixafunc2.c
+
+$(LEPTOBJ)pixalloc.$(OBJ) : $(LEPTONICADIR)/src/pixalloc.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixalloc.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixalloc.c
+
+$(LEPTOBJ)pixarith.$(OBJ) : $(LEPTONICADIR)/src/pixarith.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixarith.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixarith.c
+
+$(LEPTOBJ)pixcomp.$(OBJ) : $(LEPTONICADIR)/src/pixcomp.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixcomp.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixcomp.c
+
+$(LEPTOBJ)pixconv.$(OBJ) : $(LEPTONICADIR)/src/pixconv.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixconv.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixconv.c
+
+$(LEPTOBJ)pixlabel.$(OBJ) : $(LEPTONICADIR)/src/pixlabel.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixlabel.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixlabel.c
+
+$(LEPTOBJ)pixtiling.$(OBJ) : $(LEPTONICADIR)/src/pixtiling.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pixtiling.$(OBJ) $(C_) $(LEPTONICADIR)/src/pixtiling.c
+
+$(LEPTOBJ)pngiostub.$(OBJ) : $(LEPTONICADIR)/src/pngiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pngiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/pngiostub.c
+
+$(LEPTOBJ)pnmio.$(OBJ) : $(LEPTONICADIR)/src/pnmio.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pnmio.$(OBJ) $(C_) $(LEPTONICADIR)/src/pnmio.c
+
+$(LEPTOBJ)pnmiostub.$(OBJ) : $(LEPTONICADIR)/src/pnmiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)pnmiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/pnmiostub.c
+
+$(LEPTOBJ)projective.$(OBJ) : $(LEPTONICADIR)/src/projective.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)projective.$(OBJ) $(C_) $(LEPTONICADIR)/src/projective.c
+
+$(LEPTOBJ)psio1.$(OBJ) : $(LEPTONICADIR)/src/psio1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)psio1.$(OBJ) $(C_) $(LEPTONICADIR)/src/psio1.c
+
+$(LEPTOBJ)psio1stub.$(OBJ) : $(LEPTONICADIR)/src/psio1stub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)psio1stub.$(OBJ) $(C_) $(LEPTONICADIR)/src/psio1stub.c
+
+$(LEPTOBJ)psio2.$(OBJ) : $(LEPTONICADIR)/src/psio2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)psio2.$(OBJ) $(C_) $(LEPTONICADIR)/src/psio2.c
+
+$(LEPTOBJ)psio2stub.$(OBJ) : $(LEPTONICADIR)/src/psio2stub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)psio2stub.$(OBJ) $(C_) $(LEPTONICADIR)/src/psio2stub.c
+
+$(LEPTOBJ)ptabasic.$(OBJ) : $(LEPTONICADIR)/src/ptabasic.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)ptabasic.$(OBJ) $(C_) $(LEPTONICADIR)/src/ptabasic.c
+
+$(LEPTOBJ)ptafunc1.$(OBJ) : $(LEPTONICADIR)/src/ptafunc1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)ptafunc1.$(OBJ) $(C_) $(LEPTONICADIR)/src/ptafunc1.c
+
+$(LEPTOBJ)ptafunc2.$(OBJ) : $(LEPTONICADIR)/src/ptafunc2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)ptafunc2.$(OBJ) $(C_) $(LEPTONICADIR)/src/ptafunc2.c
+
+$(LEPTOBJ)ptra.$(OBJ) : $(LEPTONICADIR)/src/ptra.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)ptra.$(OBJ) $(C_) $(LEPTONICADIR)/src/ptra.c
+
+$(LEPTOBJ)quadtree.$(OBJ) : $(LEPTONICADIR)/src/quadtree.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)quadtree.$(OBJ) $(C_) $(LEPTONICADIR)/src/quadtree.c
+
+$(LEPTOBJ)queue.$(OBJ) : $(LEPTONICADIR)/src/queue.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)queue.$(OBJ) $(C_) $(LEPTONICADIR)/src/queue.c
+
+$(LEPTOBJ)rank.$(OBJ) : $(LEPTONICADIR)/src/rank.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rank.$(OBJ) $(C_) $(LEPTONICADIR)/src/rank.c
+
+$(LEPTOBJ)rbtree.$(OBJ) : $(LEPTONICADIR)/src/rbtree.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rbtree.$(OBJ) $(C_) $(LEPTONICADIR)/src/rbtree.c
+
+$(LEPTOBJ)readfile.$(OBJ) : $(LEPTONICADIR)/src/readfile.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)readfile.$(OBJ) $(C_) $(LEPTONICADIR)/src/readfile.c
+
+$(LEPTOBJ)regutils.$(OBJ) : $(LEPTONICADIR)/src/regutils.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)regutils.$(OBJ) $(C_) $(LEPTONICADIR)/src/regutils.c
+
+$(LEPTOBJ)rop.$(OBJ) : $(LEPTONICADIR)/src/rop.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rop.$(OBJ) $(C_) $(LEPTONICADIR)/src/rop.c
+
+$(LEPTOBJ)roplow.$(OBJ) : $(LEPTONICADIR)/src/roplow.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)roplow.$(OBJ) $(C_) $(LEPTONICADIR)/src/roplow.c
+
+$(LEPTOBJ)rotate.$(OBJ) : $(LEPTONICADIR)/src/rotate.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rotate.$(OBJ) $(C_) $(LEPTONICADIR)/src/rotate.c
+
+$(LEPTOBJ)rotateam.$(OBJ) : $(LEPTONICADIR)/src/rotateam.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rotateam.$(OBJ) $(C_) $(LEPTONICADIR)/src/rotateam.c
+
+$(LEPTOBJ)rotateorth.$(OBJ) : $(LEPTONICADIR)/src/rotateorth.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rotateorth.$(OBJ) $(C_) $(LEPTONICADIR)/src/rotateorth.c
+
+$(LEPTOBJ)rotateshear.$(OBJ) : $(LEPTONICADIR)/src/rotateshear.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)rotateshear.$(OBJ) $(C_) $(LEPTONICADIR)/src/rotateshear.c
+
+$(LEPTOBJ)runlength.$(OBJ) : $(LEPTONICADIR)/src/runlength.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)runlength.$(OBJ) $(C_) $(LEPTONICADIR)/src/runlength.c
+
+$(LEPTOBJ)sarray1.$(OBJ) : $(LEPTONICADIR)/src/sarray1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)sarray1.$(OBJ) $(C_) $(LEPTONICADIR)/src/sarray1.c
+
+$(LEPTOBJ)sarray2.$(OBJ) : $(LEPTONICADIR)/src/sarray2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)sarray2.$(OBJ) $(C_) $(LEPTONICADIR)/src/sarray2.c
+
+$(LEPTOBJ)scale1.$(OBJ) : $(LEPTONICADIR)/src/scale1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)scale1.$(OBJ) $(C_) $(LEPTONICADIR)/src/scale1.c
+
+$(LEPTOBJ)scale2.$(OBJ) : $(LEPTONICADIR)/src/scale2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)scale2.$(OBJ) $(C_) $(LEPTONICADIR)/src/scale2.c
+
+$(LEPTOBJ)seedfill.$(OBJ) : $(LEPTONICADIR)/src/seedfill.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)seedfill.$(OBJ) $(C_) $(LEPTONICADIR)/src/seedfill.c
+
+$(LEPTOBJ)sel1.$(OBJ) : $(LEPTONICADIR)/src/sel1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)sel1.$(OBJ) $(C_) $(LEPTONICADIR)/src/sel1.c
+
+$(LEPTOBJ)sel2.$(OBJ) : $(LEPTONICADIR)/src/sel2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)sel2.$(OBJ) $(C_) $(LEPTONICADIR)/src/sel2.c
+
+$(LEPTOBJ)selgen.$(OBJ) : $(LEPTONICADIR)/src/selgen.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)selgen.$(OBJ) $(C_) $(LEPTONICADIR)/src/selgen.c
+
+$(LEPTOBJ)shear.$(OBJ) : $(LEPTONICADIR)/src/shear.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)shear.$(OBJ) $(C_) $(LEPTONICADIR)/src/shear.c
+
+$(LEPTOBJ)skew.$(OBJ) : $(LEPTONICADIR)/src/skew.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)skew.$(OBJ) $(C_) $(LEPTONICADIR)/src/skew.c
+
+$(LEPTOBJ)spixio.$(OBJ) : $(LEPTONICADIR)/src/spixio.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)spixio.$(OBJ) $(C_) $(LEPTONICADIR)/src/spixio.c
+
+$(LEPTOBJ)stack.$(OBJ) : $(LEPTONICADIR)/src/stack.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)stack.$(OBJ) $(C_) $(LEPTONICADIR)/src/stack.c
+
+$(LEPTOBJ)stringcode.$(OBJ) : $(LEPTONICADIR)/src/stringcode.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)stringcode.$(OBJ) $(C_) $(LEPTONICADIR)/src/stringcode.c
+
+$(LEPTOBJ)strokes.$(OBJ) : $(LEPTONICADIR)/src/strokes.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)strokes.$(OBJ) $(C_) $(LEPTONICADIR)/src/strokes.c
+
+$(LEPTOBJ)sudoku.$(OBJ) : $(LEPTONICADIR)/src/sudoku.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)sudoku.$(OBJ) $(C_) $(LEPTONICADIR)/src/sudoku.c
+
+$(LEPTOBJ)textops.$(OBJ) : $(LEPTONICADIR)/src/textops.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)textops.$(OBJ) $(C_) $(LEPTONICADIR)/src/textops.c
+
+$(LEPTOBJ)tiffiostub.$(OBJ) : $(LEPTONICADIR)/src/tiffiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)tiffiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/tiffiostub.c
+
+$(LEPTOBJ)utils1.$(OBJ) : $(LEPTONICADIR)/src/utils1.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)utils1.$(OBJ) $(C_) $(LEPTONICADIR)/src/utils1.c
+
+$(LEPTOBJ)utils2.$(OBJ) : $(LEPTONICADIR)/src/utils2.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)utils2.$(OBJ) $(C_) $(LEPTONICADIR)/src/utils2.c
+
+$(LEPTOBJ)warper.$(OBJ) : $(LEPTONICADIR)/src/warper.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)warper.$(OBJ) $(C_) $(LEPTONICADIR)/src/warper.c
+
+$(LEPTOBJ)webpiostub.$(OBJ) : $(LEPTONICADIR)/src/webpiostub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)webpiostub.$(OBJ) $(C_) $(LEPTONICADIR)/src/webpiostub.c
+
+$(LEPTOBJ)writefile.$(OBJ) : $(LEPTONICADIR)/src/writefile.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)writefile.$(OBJ) $(C_) $(LEPTONICADIR)/src/writefile.c
+
+$(LEPTOBJ)zlibmem.$(OBJ) : $(LEPTONICADIR)/src/zlibmem.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)zlibmem.$(OBJ) $(C_) $(LEPTONICADIR)/src/zlibmem.c
+
+$(LEPTOBJ)zlibmemstub.$(OBJ) : $(LEPTONICADIR)/src/zlibmemstub.c $(LEPTDEPS)
+ $(LEPTCC) $(LEPTO_)zlibmemstub.$(OBJ) $(C_) $(LEPTONICADIR)/src/zlibmemstub.c
+
+LEPTONICA_OBJS=\
+ $(LEPTOBJ)adaptmap.$(OBJ)\
+ $(LEPTOBJ)affine.$(OBJ)\
+ $(LEPTOBJ)affinecompose.$(OBJ)\
+ $(LEPTOBJ)arrayaccess.$(OBJ)\
+ $(LEPTOBJ)baseline.$(OBJ)\
+ $(LEPTOBJ)bbuffer.$(OBJ)\
+ $(LEPTOBJ)bilateral.$(OBJ)\
+ $(LEPTOBJ)bilinear.$(OBJ)\
+ $(LEPTOBJ)binexpand.$(OBJ)\
+ $(LEPTOBJ)binreduce.$(OBJ)\
+ $(LEPTOBJ)blend.$(OBJ)\
+ $(LEPTOBJ)bmf.$(OBJ)\
+ $(LEPTOBJ)bmpio.$(OBJ)\
+ $(LEPTOBJ)bmpiostub.$(OBJ)\
+ $(LEPTOBJ)bootnumgen1.$(OBJ)\
+ $(LEPTOBJ)bootnumgen2.$(OBJ)\
+ $(LEPTOBJ)bootnumgen3.$(OBJ)\
+ $(LEPTOBJ)bootnumgen4.$(OBJ)\
+ $(LEPTOBJ)boxbasic.$(OBJ)\
+ $(LEPTOBJ)boxfunc1.$(OBJ)\
+ $(LEPTOBJ)boxfunc2.$(OBJ)\
+ $(LEPTOBJ)boxfunc3.$(OBJ)\
+ $(LEPTOBJ)boxfunc4.$(OBJ)\
+ $(LEPTOBJ)boxfunc5.$(OBJ)\
+ $(LEPTOBJ)bytearray.$(OBJ)\
+ $(LEPTOBJ)ccbord.$(OBJ)\
+ $(LEPTOBJ)classapp.$(OBJ)\
+ $(LEPTOBJ)colorcontent.$(OBJ)\
+ $(LEPTOBJ)colorinfo.$(OBJ)\
+ $(LEPTOBJ)coloring.$(OBJ)\
+ $(LEPTOBJ)colormap.$(OBJ)\
+ $(LEPTOBJ)colormorph.$(OBJ)\
+ $(LEPTOBJ)colorquant1.$(OBJ)\
+ $(LEPTOBJ)colorquant2.$(OBJ)\
+ $(LEPTOBJ)colorseg.$(OBJ)\
+ $(LEPTOBJ)colorspace.$(OBJ)\
+ $(LEPTOBJ)compare.$(OBJ)\
+ $(LEPTOBJ)conncomp.$(OBJ)\
+ $(LEPTOBJ)convertfiles.$(OBJ)\
+ $(LEPTOBJ)convolve.$(OBJ)\
+ $(LEPTOBJ)correlscore.$(OBJ)\
+ $(LEPTOBJ)dewarp1.$(OBJ)\
+ $(LEPTOBJ)dewarp2.$(OBJ)\
+ $(LEPTOBJ)dewarp3.$(OBJ)\
+ $(LEPTOBJ)dewarp4.$(OBJ)\
+ $(LEPTOBJ)dnabasic.$(OBJ)\
+ $(LEPTOBJ)dnafunc1.$(OBJ)\
+ $(LEPTOBJ)dnahash.$(OBJ)\
+ $(LEPTOBJ)dwacomb.2.$(OBJ)\
+ $(LEPTOBJ)dwacomblow.2.$(OBJ)\
+ $(LEPTOBJ)edge.$(OBJ)\
+ $(LEPTOBJ)encoding.$(OBJ)\
+ $(LEPTOBJ)enhance.$(OBJ)\
+ $(LEPTOBJ)fhmtauto.$(OBJ)\
+ $(LEPTOBJ)fhmtgenlow.1.$(OBJ)\
+ $(LEPTOBJ)fmorphauto.$(OBJ)\
+ $(LEPTOBJ)fmorphgen.1.$(OBJ)\
+ $(LEPTOBJ)fmorphgenlow.1.$(OBJ)\
+ $(LEPTOBJ)fpix1.$(OBJ)\
+ $(LEPTOBJ)fpix2.$(OBJ)\
+ $(LEPTOBJ)gifiostub.$(OBJ)\
+ $(LEPTOBJ)gplot.$(OBJ)\
+ $(LEPTOBJ)graphics.$(OBJ)\
+ $(LEPTOBJ)graymorph.$(OBJ)\
+ $(LEPTOBJ)grayquant.$(OBJ)\
+ $(LEPTOBJ)heap.$(OBJ)\
+ $(LEPTOBJ)jbclass.$(OBJ)\
+ $(LEPTOBJ)jp2kheader.$(OBJ)\
+ $(LEPTOBJ)jp2kheaderstub.$(OBJ)\
+ $(LEPTOBJ)jp2kiostub.$(OBJ)\
+ $(LEPTOBJ)jpegiostub.$(OBJ)\
+ $(LEPTOBJ)kernel.$(OBJ)\
+ $(LEPTOBJ)libversions.$(OBJ)\
+ $(LEPTOBJ)list.$(OBJ)\
+ $(LEPTOBJ)map.$(OBJ)\
+ $(LEPTOBJ)morph.$(OBJ)\
+ $(LEPTOBJ)morphapp.$(OBJ)\
+ $(LEPTOBJ)morphdwa.$(OBJ)\
+ $(LEPTOBJ)morphseq.$(OBJ)\
+ $(LEPTOBJ)numabasic.$(OBJ)\
+ $(LEPTOBJ)numafunc1.$(OBJ)\
+ $(LEPTOBJ)numafunc2.$(OBJ)\
+ $(LEPTOBJ)pageseg.$(OBJ)\
+ $(LEPTOBJ)paintcmap.$(OBJ)\
+ $(LEPTOBJ)partify.$(OBJ)\
+ $(LEPTOBJ)partition.$(OBJ)\
+ $(LEPTOBJ)pdfio1.$(OBJ)\
+ $(LEPTOBJ)pdfio1stub.$(OBJ)\
+ $(LEPTOBJ)pdfio2.$(OBJ)\
+ $(LEPTOBJ)pdfio2stub.$(OBJ)\
+ $(LEPTOBJ)pix1.$(OBJ)\
+ $(LEPTOBJ)pix2.$(OBJ)\
+ $(LEPTOBJ)pix3.$(OBJ)\
+ $(LEPTOBJ)pix4.$(OBJ)\
+ $(LEPTOBJ)pix5.$(OBJ)\
+ $(LEPTOBJ)pixabasic.$(OBJ)\
+ $(LEPTOBJ)pixacc.$(OBJ)\
+ $(LEPTOBJ)pixafunc1.$(OBJ)\
+ $(LEPTOBJ)pixafunc2.$(OBJ)\
+ $(LEPTOBJ)pixalloc.$(OBJ)\
+ $(LEPTOBJ)pixarith.$(OBJ)\
+ $(LEPTOBJ)pixcomp.$(OBJ)\
+ $(LEPTOBJ)pixconv.$(OBJ)\
+ $(LEPTOBJ)pixlabel.$(OBJ)\
+ $(LEPTOBJ)pixtiling.$(OBJ)\
+ $(LEPTOBJ)pngiostub.$(OBJ)\
+ $(LEPTOBJ)pnmio.$(OBJ)\
+ $(LEPTOBJ)pnmiostub.$(OBJ)\
+ $(LEPTOBJ)projective.$(OBJ)\
+ $(LEPTOBJ)psio1.$(OBJ)\
+ $(LEPTOBJ)psio1stub.$(OBJ)\
+ $(LEPTOBJ)psio2.$(OBJ)\
+ $(LEPTOBJ)psio2stub.$(OBJ)\
+ $(LEPTOBJ)ptabasic.$(OBJ)\
+ $(LEPTOBJ)ptafunc1.$(OBJ)\
+ $(LEPTOBJ)ptafunc2.$(OBJ)\
+ $(LEPTOBJ)ptra.$(OBJ)\
+ $(LEPTOBJ)quadtree.$(OBJ)\
+ $(LEPTOBJ)queue.$(OBJ)\
+ $(LEPTOBJ)rank.$(OBJ)\
+ $(LEPTOBJ)rbtree.$(OBJ)\
+ $(LEPTOBJ)readfile.$(OBJ)\
+ $(LEPTOBJ)regutils.$(OBJ)\
+ $(LEPTOBJ)rop.$(OBJ)\
+ $(LEPTOBJ)roplow.$(OBJ)\
+ $(LEPTOBJ)rotate.$(OBJ)\
+ $(LEPTOBJ)rotateam.$(OBJ)\
+ $(LEPTOBJ)rotateorth.$(OBJ)\
+ $(LEPTOBJ)rotateshear.$(OBJ)\
+ $(LEPTOBJ)runlength.$(OBJ)\
+ $(LEPTOBJ)sarray1.$(OBJ)\
+ $(LEPTOBJ)sarray2.$(OBJ)\
+ $(LEPTOBJ)scale1.$(OBJ)\
+ $(LEPTOBJ)scale2.$(OBJ)\
+ $(LEPTOBJ)seedfill.$(OBJ)\
+ $(LEPTOBJ)sel1.$(OBJ)\
+ $(LEPTOBJ)sel2.$(OBJ)\
+ $(LEPTOBJ)selgen.$(OBJ)\
+ $(LEPTOBJ)shear.$(OBJ)\
+ $(LEPTOBJ)skew.$(OBJ)\
+ $(LEPTOBJ)spixio.$(OBJ)\
+ $(LEPTOBJ)stack.$(OBJ)\
+ $(LEPTOBJ)stringcode.$(OBJ)\
+ $(LEPTOBJ)sudoku.$(OBJ)\
+ $(LEPTOBJ)textops.$(OBJ)\
+ $(LEPTOBJ)tiffiostub.$(OBJ)\
+ $(LEPTOBJ)utils1.$(OBJ)\
+ $(LEPTOBJ)utils2.$(OBJ)\
+ $(LEPTOBJ)warper.$(OBJ)\
+ $(LEPTOBJ)webpiostub.$(OBJ)\
+ $(LEPTOBJ)writefile.$(OBJ)\
+ $(LEPTOBJ)zlibmem.$(OBJ)\
+ $(LEPTOBJ)zlibmemstub.$(OBJ)
+
+# $(LEPTOBJ)strokes.$(OBJ)\
diff --git a/base/lib.mak b/base/lib.mak
index 6e34ab9c9..d837b4249 100644
--- a/base/lib.mak
+++ b/base/lib.mak
@@ -3336,12 +3336,12 @@ $(GLD)romfs0.dev : $(LIB_MAK) $(ECHOGS_XE) $(LIB_MAK) $(MAKEDIRS)
$(GLGEN)gsromfs1_.c : $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)gsromfs1_.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(PS_ROMFS_ARGS) $(PS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(PS_ROMFS_ARGS) $(PS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)gsromfs1_1.c : $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)gsromfs1_1.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(UFST_ROMFS_ARGS) $(PS_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(UFST_ROMFS_ARGS) $(PS_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)gsromfs1.c : $(GLGEN)gsromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(CP_) $(GLGEN)gsromfs1_$(UFST_BRIDGE).c $(GLGEN)gsromfs1.c
@@ -3351,13 +3351,13 @@ $(GLGEN)pclromfs1_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs1_.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(PCLXL_FONT_ROMFS_ARGS) $(PCLXL_ROMFS_ARGS) $(PJL_ROMFS_ARGS) \
- $(PJL_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(PJL_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)pclromfs1_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs1_1.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(UFST_ROMFS_ARGS) $(PCLXL_ROMFS_ARGS) $(PJL_ROMFS_ARGS) \
- $(GL_ROMFS_ARGS)
+ $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)pclromfs1.c : $(GLGEN)pclromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(CP_) $(GLGEN)pclromfs1_$(UFST_BRIDGE).c $(GLGEN)pclromfs1.c
@@ -3370,7 +3370,7 @@ $(GLGEN)pclromfs0_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(GLGEN)pclromfs0_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pclromfs0_1.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(GL_ROMFS_ARGS)
+ $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)pclromfs0.c : $(GLGEN)pclromfs0_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(CP_) $(GLGEN)pclromfs0_$(UFST_BRIDGE).c $(GLGEN)pclromfs0.c
@@ -3379,12 +3379,12 @@ $(GLGEN)pclromfs0.c : $(GLGEN)pclromfs0_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(GLGEN)xpsromfs1_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs1_.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(XPS_ROMFS_ARGS) $(XPS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(XPS_ROMFS_ARGS) $(XPS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)xpsromfs1_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs1_1.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(XPS_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(XPS_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)xpsromfs1.c : $(GLGEN)xpsromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(CP_) $(GLGEN)xpsromfs1_$(UFST_BRIDGE).c $(GLGEN)xpsromfs1.c
@@ -3392,12 +3392,12 @@ $(GLGEN)xpsromfs1.c : $(GLGEN)xpsromfs1_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(GLGEN)xpsromfs0_.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs0_.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(GL_ROMFS_ARGS)
+ $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)xpsromfs0_1.c : $(MKROMFS_XE) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)xpsromfs0_1.c \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
- $(GL_ROMFS_ARGS)
+ $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
$(GLGEN)xpsromfs0.c : $(GLGEN)xpsromfs0_$(UFST_BRIDGE).c $(LIB_MAK) $(MAKEDIRS)
$(CP_) $(GLGEN)xpsromfs0_$(UFST_BRIDGE).c $(GLGEN)xpsromfs0.c
@@ -3423,7 +3423,7 @@ $(GLGEN)pdlromfs1_.c: $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(PCLXL_ROMFS_ARGS) $(PCLXL_FONT_ROMFS_ARGS) $(PJL_ROMFS_ARGS) \
$(XPS_ROMFS_ARGS) $(XPS_FONT_ROMFS_ARGS) \
- $(PS_ROMFS_ARGS) $(PS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(PS_ROMFS_ARGS) $(PS_FONT_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
# COMPILE_INITS + UFST variant
$(GLGEN)pdlromfs1_1c0.c : $(GLGEN)pdlromfs1_1.c
@@ -3442,7 +3442,7 @@ $(GLGEN)pdlromfs1_1.c: $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(LIB_MAK) $(MAKEDIRS)
$(EXP)$(MKROMFS_XE) -o $(GLGEN)pdlromfs1_1.c -s 4 \
$(MKROMFS_FLAGS) -X .svn -X CVS -P $(GLSRCDIR)$(D)..$(D) iccprofiles$(D)* \
$(UFST_ROMFS_ARGS) $(PCLXL_ROMFS_ARGS) $(PJL_ROMFS_ARGS) $(XPS_ROMFS_ARGS) \
- $(PS_ROMFS_ARGS) $(GL_ROMFS_ARGS)
+ $(PS_ROMFS_ARGS) $(GL_ROMFS_ARGS) $(TESS_ROMFS_ARGS)
# Rules to fold COMPILE_INITS +/- UFST into 1 set of targets
$(GLGEN)pdlromfs1c0.c : $(GLGEN)pdlromfs1_$(UFST_BRIDGE)c0.c
diff --git a/base/msvccmd.mak b/base/msvccmd.mak
index 579982c94..7d5980e81 100644
--- a/base/msvccmd.mak
+++ b/base/msvccmd.mak
@@ -234,6 +234,7 @@ GENOPT=$(CP) $(CD) $(CT) $(CS) $(WARNOPT) $(VC8WARN) /nologo $(CMT)
CCFLAGS=$(PLATOPT) $(FPFLAGS) $(CPFLAGS) $(CFLAGS) $(XCFLAGS) $(MSINCFLAGS) $(SBRFLAGS)
CC=$(COMP) /c $(CCFLAGS) $(COMPILE_FULL_OPTIMIZED) @$(GLGENDIR)\ccf32.tr
+CXX=$(CXX) /c $(CCFLAGS) $(COMPILE_FULL_OPTIMIZED) @$(GLGENDIR)\ccf32.tr
CPP=$(COMPCPP) /c $(CCFLAGS) @$(GLGENDIR)\ccf32.tr
!if $(MAKEDLL)
WX=$(COMPILE_FOR_DLL)
diff --git a/base/ocr.mak b/base/ocr.mak
new file mode 100644
index 000000000..9d58d0083
--- /dev/null
+++ b/base/ocr.mak
@@ -0,0 +1,46 @@
+# Copyright (C) 2001-2020 Artifex Software, Inc.
+# All Rights Reserved.
+#
+# This software is provided AS-IS with no warranty, either express or
+# implied.
+#
+# This software is distributed under license and may not be copied,
+# modified or distributed except as expressly authorized under the terms
+# of the license contained in the file LICENSE in this distribution.
+#
+# Refer to licensing information at http://www.artifex.com or contact
+# Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+# CA 94945, U.S.A., +1(415)492-9861, for further information.
+#
+# makefile for OCR code.
+# Users of this makefile must define the following:
+# LEPTONICALIBDIR - the leptonica source directory
+# TESSERACTLIBDIR - the tesseract source directory
+# OCR_VERSION - which OCR implementation are we using.
+
+# Define the name of this makefile.
+LIBOCR_MAK=$(GLSRC)ocr.mak $(TOP_MAKEFILES)
+
+$(GLGEN)libocr.dev : $(LIBOCR_MAK) $(ECHOGS_XE)$(MAKEDIRS)\
+ $(GLGEN)libocr_$(OCR_VERSION).dev
+ $(CP_) $(GLGEN)libocr_$(OCR_VERSION).dev $(GLGEN)libocr.dev
+
+# Tesseract veneer.
+$(GLGEN)tessocr.$(OBJ) : $(GLSRC)tessocr.cpp $(GLSRC)tessocr.h $(LIBOCR_MAK) \
+ $(gsmemory_h) $(gxiodev_h) $(stream_h) $(TESSDEPS)
+ $(GLCC) $(D_)LEPTONICA_INTERCEPT_MALLOC=1$(_D) $(TESSINCLUDES) $(I_)$(LEPTONICADIR)$(D)src$(_I) $(GLO_)tessocr.$(OBJ) $(C_) $(GLSRC)tessocr.cpp
+
+# 0 = No version.
+
+# 1 = Tesseract/Leptonica
+$(GLGEN)libocr_1.dev : $(LIBOCR_MAK) $(ECHOGS_XE) $(MAKEDIRS) \
+ $(GLGEN)tessocr.$(OBJ) $(LEPTONICA_OBJS) $(TESSERACT_OBJS_1) \
+ $(TESSERACT_OBJS_2) $(TESSERACT_OBJS_3) $(TESSERACT_OBJS_4) \
+ $(TESSERACT_LEGACY)
+ $(SETMOD) $(GLGEN)libocr_1 $(GLGEN)tessocr.$(OBJ)
+ $(ADDMOD) $(GLGEN)libocr_1 $(LEPTONICA_OBJS)
+ $(ADDMOD) $(GLGEN)libocr_1 $(TESSERACT_OBJS_1)
+ $(ADDMOD) $(GLGEN)libocr_1 $(TESSERACT_OBJS_2)
+ $(ADDMOD) $(GLGEN)libocr_1 $(TESSERACT_OBJS_3)
+ $(ADDMOD) $(GLGEN)libocr_1 $(TESSERACT_OBJS_4)
+ $(ADDMOD) $(GLGEN)libocr_1 $(TESSERACT_LEGACY)
diff --git a/base/tess_version.h b/base/tess_version.h
new file mode 100644
index 000000000..53ce94072
--- /dev/null
+++ b/base/tess_version.h
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////
+// File: version.h
+// Description: Version information
+//
+// (C) Copyright 2018, Google Inc.
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+///////////////////////////////////////////////////////////////////////
+
+#ifndef TESSERACT_API_VERSION_H_
+#define TESSERACT_API_VERSION_H_
+
+#define TESSERACT_MAJOR_VERSION 4
+#define TESSERACT_MINOR_VERSION 1
+#define TESSERACT_MICRO_VERSION 1
+#define TESSERACT_VERSION \
+ (TESSERACT_MAJOR_VERSION << 16 | \
+ TESSERACT_MINOR_VERSION << 8 | \
+ TESSERACT_MICRO_VERSION)
+#define TESSERACT_VERSION_STR "4.1.1-3-ge6cc2"
+
+#endif // TESSERACT_API_VERSION_H_
diff --git a/base/tesseract.mak b/base/tesseract.mak
new file mode 100644
index 000000000..015cf6e16
--- /dev/null
+++ b/base/tesseract.mak
@@ -0,0 +1,1178 @@
+TESSINCLUDES=\
+ $(I_)$(TESSERACTDIR)$(_I)\
+ $(I_)$(TESSERACTDIR)/include$(_I)\
+ $(I_)$(TESSERACTDIR)/src/api$(_I)\
+ $(I_)$(TESSERACTDIR)/src/arch$(_I)\
+ $(I_)$(TESSERACTDIR)/src/ccmain$(_I)\
+ $(I_)$(TESSERACTDIR)/src/ccstruct$(_I)\
+ $(I_)$(TESSERACTDIR)/src/ccutil$(_I)\
+ $(I_)$(TESSERACTDIR)/src/classify$(_I)\
+ $(I_)$(TESSERACTDIR)/src/cutil$(_I)\
+ $(I_)$(TESSERACTDIR)/src/dict$(_I)\
+ $(I_)$(TESSERACTDIR)/src/lstm$(_I)\
+ $(I_)$(TESSERACTDIR)/src/opencl$(_I)\
+ $(I_)$(TESSERACTDIR)/src/textord$(_I)\
+ $(I_)$(TESSERACTDIR)/src/training$(_I)\
+ $(I_)$(TESSERACTDIR)/src/viewer$(_I)\
+ $(I_)$(TESSERACTDIR)/src/wordrec$(_I)\
+ $(I_)$(LEPTONICADIR)/src$(_I)\
+ $(I_)$(GLSRCDIR)$(_I)\
+ $(I_)$(GLGENDIR)$(_I)
+
+# If we wanted to disable the legacy mode in tesseract, which is supposedly
+# unused, we'd:
+# add -DDISABLED_LEGACY_ENGINE to TESSCXX
+# empty TESSERACT_LEGACY
+
+TESSCXX = $(CXX) $(TESSINCLUDES) $(TESSCXXFLAGS) $(CCFLAGS) -DTESSERACT_IMAGEDATA_AS_PIX -DTESSERACT_DISABLE_DEBUG_FONTS -DGRAPHICS_DISABLED -DDISABLED_LEGACY_ENGINE
+TESSOBJ = $(GLOBJDIR)$(D)tesseract_
+TESSO_ = $(O_)$(TESSOBJ)
+
+TESSDEPS=\
+ $(arch_h)\
+ $(GLSRCDIR)/tesseract.mak\
+ $(GLGENDIR)/tesseract/version.h\
+ $(TESSERACTDIR)/include/tesseract/apitypes.h\
+ $(TESSERACTDIR)/include/tesseract/baseapi.h\
+ $(TESSERACTDIR)/include/tesseract/capi.h\
+ $(TESSERACTDIR)/include/tesseract/genericvector.h\
+ $(TESSERACTDIR)/include/tesseract/helpers.h\
+ $(TESSERACTDIR)/include/tesseract/ltrresultiterator.h\
+ $(TESSERACTDIR)/include/tesseract/ocrclass.h\
+ $(TESSERACTDIR)/include/tesseract/osdetect.h\
+ $(TESSERACTDIR)/include/tesseract/pageiterator.h\
+ $(TESSERACTDIR)/include/tesseract/platform.h\
+ $(TESSERACTDIR)/include/tesseract/publictypes.h\
+ $(TESSERACTDIR)/include/tesseract/renderer.h\
+ $(TESSERACTDIR)/include/tesseract/resultiterator.h\
+ $(TESSERACTDIR)/include/tesseract/serialis.h\
+ $(TESSERACTDIR)/include/tesseract/strngs.h\
+ $(TESSERACTDIR)/include/tesseract/thresholder.h\
+ $(TESSERACTDIR)/include/tesseract/unichar.h\
+ $(TESSERACTDIR)/src/arch/dotproduct.h\
+ $(TESSERACTDIR)/src/arch/intsimdmatrix.h\
+ $(TESSERACTDIR)/src/arch/simddetect.h\
+ $(TESSERACTDIR)/src/ccmain/control.h\
+ $(TESSERACTDIR)/src/ccmain/docqual.h\
+ $(TESSERACTDIR)/src/ccmain/equationdetect.h\
+ $(TESSERACTDIR)/src/ccmain/fixspace.h\
+ $(TESSERACTDIR)/src/ccmain/mutableiterator.h\
+ $(TESSERACTDIR)/src/ccmain/output.h\
+ $(TESSERACTDIR)/src/ccmain/paragraphs.h\
+ $(TESSERACTDIR)/src/ccmain/paragraphs_internal.h\
+ $(TESSERACTDIR)/src/ccmain/paramsd.h\
+ $(TESSERACTDIR)/src/ccmain/pgedit.h\
+ $(TESSERACTDIR)/src/ccmain/reject.h\
+ $(TESSERACTDIR)/src/ccmain/tesseractclass.h\
+ $(TESSERACTDIR)/src/ccmain/tessvars.h\
+ $(TESSERACTDIR)/src/ccmain/werdit.h\
+ $(TESSERACTDIR)/src/ccstruct/blamer.h\
+ $(TESSERACTDIR)/src/ccstruct/blobbox.h\
+ $(TESSERACTDIR)/src/ccstruct/blobs.h\
+ $(TESSERACTDIR)/src/ccstruct/blread.h\
+ $(TESSERACTDIR)/src/ccstruct/boxread.h\
+ $(TESSERACTDIR)/src/ccstruct/boxword.h\
+ $(TESSERACTDIR)/src/ccstruct/ccstruct.h\
+ $(TESSERACTDIR)/src/ccstruct/coutln.h\
+ $(TESSERACTDIR)/src/ccstruct/detlinefit.h\
+ $(TESSERACTDIR)/src/ccstruct/dppoint.h\
+ $(TESSERACTDIR)/src/ccstruct/fontinfo.h\
+ $(TESSERACTDIR)/src/ccstruct/imagedata.h\
+ $(TESSERACTDIR)/src/ccstruct/linlsq.h\
+ $(TESSERACTDIR)/src/ccstruct/matrix.h\
+ $(TESSERACTDIR)/src/ccstruct/mod128.h\
+ $(TESSERACTDIR)/src/ccstruct/normalis.h\
+ $(TESSERACTDIR)/src/ccstruct/ocrblock.h\
+ $(TESSERACTDIR)/src/ccstruct/ocrpara.h\
+ $(TESSERACTDIR)/src/ccstruct/ocrrow.h\
+ $(TESSERACTDIR)/src/ccstruct/otsuthr.h\
+ $(TESSERACTDIR)/src/ccstruct/pageres.h\
+ $(TESSERACTDIR)/src/ccstruct/params_training_featdef.h\
+ $(TESSERACTDIR)/src/ccstruct/pdblock.h\
+ $(TESSERACTDIR)/src/ccstruct/points.h\
+ $(TESSERACTDIR)/src/ccstruct/polyaprx.h\
+ $(TESSERACTDIR)/src/ccstruct/polyblk.h\
+ $(TESSERACTDIR)/src/ccstruct/quadlsq.h\
+ $(TESSERACTDIR)/src/ccstruct/quadratc.h\
+ $(TESSERACTDIR)/src/ccstruct/quspline.h\
+ $(TESSERACTDIR)/src/ccstruct/ratngs.h\
+ $(TESSERACTDIR)/src/ccstruct/rect.h\
+ $(TESSERACTDIR)/src/ccstruct/rejctmap.h\
+ $(TESSERACTDIR)/src/ccstruct/seam.h\
+ $(TESSERACTDIR)/src/ccstruct/split.h\
+ $(TESSERACTDIR)/src/ccstruct/statistc.h\
+ $(TESSERACTDIR)/src/ccstruct/stepblob.h\
+ $(TESSERACTDIR)/src/ccstruct/werd.h\
+ $(TESSERACTDIR)/src/ccutil/ambigs.h\
+ $(TESSERACTDIR)/src/ccutil/bits16.h\
+ $(TESSERACTDIR)/src/ccutil/bitvector.h\
+ $(TESSERACTDIR)/src/ccutil/ccutil.h\
+ $(TESSERACTDIR)/src/ccutil/clst.h\
+ $(TESSERACTDIR)/src/ccutil/doubleptr.h\
+ $(TESSERACTDIR)/src/ccutil/elst.h\
+ $(TESSERACTDIR)/src/ccutil/elst2.h\
+ $(TESSERACTDIR)/src/ccutil/errcode.h\
+ $(TESSERACTDIR)/src/ccutil/fileerr.h\
+ $(TESSERACTDIR)/src/ccutil/genericheap.h\
+ $(TESSERACTDIR)/src/ccutil/globaloc.h\
+ $(TESSERACTDIR)/src/ccutil/host.h\
+ $(TESSERACTDIR)/src/ccutil/indexmapbidi.h\
+ $(TESSERACTDIR)/src/ccutil/kdpair.h\
+ $(TESSERACTDIR)/src/ccutil/lsterr.h\
+ $(TESSERACTDIR)/src/ccutil/object_cache.h\
+ $(TESSERACTDIR)/src/ccutil/params.h\
+ $(TESSERACTDIR)/src/ccutil/qrsequence.h\
+ $(TESSERACTDIR)/src/ccutil/scanutils.h\
+ $(TESSERACTDIR)/src/ccutil/sorthelper.h\
+ $(TESSERACTDIR)/src/ccutil/tessdatamanager.h\
+ $(TESSERACTDIR)/src/ccutil/tprintf.h\
+ $(TESSERACTDIR)/src/ccutil/unicharcompress.h\
+ $(TESSERACTDIR)/src/ccutil/unicharmap.h\
+ $(TESSERACTDIR)/src/ccutil/unicharset.h\
+ $(TESSERACTDIR)/src/ccutil/unicity_table.h\
+ $(TESSERACTDIR)/src/ccutil/unicodes.h\
+ $(TESSERACTDIR)/src/ccutil/universalambigs.h\
+ $(TESSERACTDIR)/src/classify/adaptive.h\
+ $(TESSERACTDIR)/src/classify/blobclass.h\
+ $(TESSERACTDIR)/src/classify/classify.h\
+ $(TESSERACTDIR)/src/classify/cluster.h\
+ $(TESSERACTDIR)/src/classify/clusttool.h\
+ $(TESSERACTDIR)/src/classify/featdefs.h\
+ $(TESSERACTDIR)/src/classify/float2int.h\
+ $(TESSERACTDIR)/src/classify/fpoint.h\
+ $(TESSERACTDIR)/src/classify/intfeaturespace.h\
+ $(TESSERACTDIR)/src/classify/intfx.h\
+ $(TESSERACTDIR)/src/classify/intmatcher.h\
+ $(TESSERACTDIR)/src/classify/intproto.h\
+ $(TESSERACTDIR)/src/classify/kdtree.h\
+ $(TESSERACTDIR)/src/classify/mf.h\
+ $(TESSERACTDIR)/src/classify/mfdefs.h\
+ $(TESSERACTDIR)/src/classify/mfoutline.h\
+ $(TESSERACTDIR)/src/classify/mfx.h\
+ $(TESSERACTDIR)/src/classify/normfeat.h\
+ $(TESSERACTDIR)/src/classify/normmatch.h\
+ $(TESSERACTDIR)/src/classify/ocrfeatures.h\
+ $(TESSERACTDIR)/src/classify/outfeat.h\
+ $(TESSERACTDIR)/src/classify/picofeat.h\
+ $(TESSERACTDIR)/src/classify/protos.h\
+ $(TESSERACTDIR)/src/classify/shapeclassifier.h\
+ $(TESSERACTDIR)/src/classify/shapetable.h\
+ $(TESSERACTDIR)/src/classify/tessclassifier.h\
+ $(TESSERACTDIR)/src/classify/trainingsample.h\
+ $(TESSERACTDIR)/src/cutil/bitvec.h\
+ $(TESSERACTDIR)/src/cutil/callcpp.h\
+ $(TESSERACTDIR)/src/cutil/emalloc.h\
+ $(TESSERACTDIR)/src/cutil/oldlist.h\
+ $(TESSERACTDIR)/src/dict/dawg.h\
+ $(TESSERACTDIR)/src/dict/dawg_cache.h\
+ $(TESSERACTDIR)/src/dict/dict.h\
+ $(TESSERACTDIR)/src/dict/matchdefs.h\
+ $(TESSERACTDIR)/src/dict/stopper.h\
+ $(TESSERACTDIR)/src/dict/trie.h\
+ $(TESSERACTDIR)/src/lstm/convolve.h\
+ $(TESSERACTDIR)/src/lstm/fullyconnected.h\
+ $(TESSERACTDIR)/src/lstm/functions.h\
+ $(TESSERACTDIR)/src/lstm/input.h\
+ $(TESSERACTDIR)/src/lstm/lstm.h\
+ $(TESSERACTDIR)/src/lstm/lstmrecognizer.h\
+ $(TESSERACTDIR)/src/lstm/maxpool.h\
+ $(TESSERACTDIR)/src/lstm/network.h\
+ $(TESSERACTDIR)/src/lstm/networkio.h\
+ $(TESSERACTDIR)/src/lstm/networkscratch.h\
+ $(TESSERACTDIR)/src/lstm/parallel.h\
+ $(TESSERACTDIR)/src/lstm/plumbing.h\
+ $(TESSERACTDIR)/src/lstm/recodebeam.h\
+ $(TESSERACTDIR)/src/lstm/reconfig.h\
+ $(TESSERACTDIR)/src/lstm/reversed.h\
+ $(TESSERACTDIR)/src/lstm/series.h\
+ $(TESSERACTDIR)/src/lstm/static_shape.h\
+ $(TESSERACTDIR)/src/lstm/stridemap.h\
+ $(TESSERACTDIR)/src/lstm/tfnetwork.h\
+ $(TESSERACTDIR)/src/lstm/weightmatrix.h\
+ $(TESSERACTDIR)/src/opencl/oclkernels.h\
+ $(TESSERACTDIR)/src/opencl/openclwrapper.h\
+ $(TESSERACTDIR)/src/textord/alignedblob.h\
+ $(TESSERACTDIR)/src/textord/baselinedetect.h\
+ $(TESSERACTDIR)/src/textord/bbgrid.h\
+ $(TESSERACTDIR)/src/textord/blkocc.h\
+ $(TESSERACTDIR)/src/textord/blobgrid.h\
+ $(TESSERACTDIR)/src/textord/ccnontextdetect.h\
+ $(TESSERACTDIR)/src/textord/cjkpitch.h\
+ $(TESSERACTDIR)/src/textord/colfind.h\
+ $(TESSERACTDIR)/src/textord/colpartition.h\
+ $(TESSERACTDIR)/src/textord/colpartitiongrid.h\
+ $(TESSERACTDIR)/src/textord/colpartitionset.h\
+ $(TESSERACTDIR)/src/textord/devanagari_processing.h\
+ $(TESSERACTDIR)/src/textord/drawtord.h\
+ $(TESSERACTDIR)/src/textord/edgblob.h\
+ $(TESSERACTDIR)/src/textord/edgloop.h\
+ $(TESSERACTDIR)/src/textord/equationdetectbase.h\
+ $(TESSERACTDIR)/src/textord/fpchop.h\
+ $(TESSERACTDIR)/src/textord/gap_map.h\
+ $(TESSERACTDIR)/src/textord/imagefind.h\
+ $(TESSERACTDIR)/src/textord/linefind.h\
+ $(TESSERACTDIR)/src/textord/makerow.h\
+ $(TESSERACTDIR)/src/textord/oldbasel.h\
+ $(TESSERACTDIR)/src/textord/pithsync.h\
+ $(TESSERACTDIR)/src/textord/pitsync1.h\
+ $(TESSERACTDIR)/src/textord/scanedg.h\
+ $(TESSERACTDIR)/src/textord/sortflts.h\
+ $(TESSERACTDIR)/src/textord/strokewidth.h\
+ $(TESSERACTDIR)/src/textord/tabfind.h\
+ $(TESSERACTDIR)/src/textord/tablefind.h\
+ $(TESSERACTDIR)/src/textord/tablerecog.h\
+ $(TESSERACTDIR)/src/textord/tabvector.h\
+ $(TESSERACTDIR)/src/textord/textlineprojection.h\
+ $(TESSERACTDIR)/src/textord/textord.h\
+ $(TESSERACTDIR)/src/textord/topitch.h\
+ $(TESSERACTDIR)/src/textord/tordmain.h\
+ $(TESSERACTDIR)/src/textord/tovars.h\
+ $(TESSERACTDIR)/src/textord/underlin.h\
+ $(TESSERACTDIR)/src/textord/wordseg.h\
+ $(TESSERACTDIR)/src/textord/workingpartset.h\
+ $(TESSERACTDIR)/src/viewer/scrollview.h\
+ $(TESSERACTDIR)/src/viewer/svmnode.h\
+ $(TESSERACTDIR)/src/viewer/svutil.h\
+ $(TESSERACTDIR)/src/wordrec/associate.h\
+ $(TESSERACTDIR)/src/wordrec/chop.h\
+ $(TESSERACTDIR)/src/wordrec/drawfx.h\
+ $(TESSERACTDIR)/src/wordrec/findseam.h\
+ $(TESSERACTDIR)/src/wordrec/language_model.h\
+ $(TESSERACTDIR)/src/wordrec/lm_consistency.h\
+ $(TESSERACTDIR)/src/wordrec/lm_pain_points.h\
+ $(TESSERACTDIR)/src/wordrec/lm_state.h\
+ $(TESSERACTDIR)/src/wordrec/measure.h\
+ $(TESSERACTDIR)/src/wordrec/outlines.h\
+ $(TESSERACTDIR)/src/wordrec/params_model.h\
+ $(TESSERACTDIR)/src/wordrec/plotedges.h\
+ $(TESSERACTDIR)/src/wordrec/render.h\
+ $(TESSERACTDIR)/src/wordrec/wordrec.h\
+ $(MAKEDIRS)
+
+$(GLGENDIR)/tesseract/version.h : $(ECHOGS_XE) $(GLSRCDIR)/tesseract.mak
+ -mkdir $(GLGENDIR)$(D)tesseract
+ $(ECHOGS_XE) -w $(GLGENDIR)/tesseract/version.h -x 23 define TESSERACT_VERSION_STR -x 2022 5.0.0-beta-gs -x 22
+
+
+$(TESSOBJ)api_baseapi.$(OBJ) : $(TESSERACTDIR)/src/api/baseapi.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_baseapi.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/baseapi.cpp
+
+$(TESSOBJ)api_altorenderer.$(OBJ) : $(TESSERACTDIR)/src/api/altorenderer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_altorenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/altorenderer.cpp
+
+$(TESSOBJ)api_capi.$(OBJ) : $(TESSERACTDIR)/src/api/capi.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_capi.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/capi.cpp
+
+$(TESSOBJ)api_hocrrenderer.$(OBJ) : $(TESSERACTDIR)/src/api/hocrrenderer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_hocrrenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/hocrrenderer.cpp
+
+$(TESSOBJ)api_lstmboxrenderer.$(OBJ) : $(TESSERACTDIR)/src/api/lstmboxrenderer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_lstmboxrenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/lstmboxrenderer.cpp
+
+$(TESSOBJ)api_pdfrenderer.$(OBJ) : $(TESSERACTDIR)/src/api/pdfrenderer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_pdfrenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/pdfrenderer.cpp
+
+$(TESSOBJ)api_renderer.$(OBJ) : $(TESSERACTDIR)/src/api/renderer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_renderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/renderer.cpp
+
+$(TESSOBJ)api_wordstrboxrenderer.$(OBJ) : $(TESSERACTDIR)/src/api/wordstrboxrenderer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)api_wordstrboxrenderer.$(OBJ) $(C_) $(TESSERACTDIR)/src/api/wordstrboxrenderer.cpp
+
+$(TESSOBJ)arch_intsimdmatrix.$(OBJ) : $(TESSERACTDIR)/src/arch/intsimdmatrix.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)arch_intsimdmatrix.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/intsimdmatrix.cpp
+
+$(TESSOBJ)arch_simddetect.$(OBJ) : $(TESSERACTDIR)/src/arch/simddetect.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)arch_simddetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/simddetect.cpp
+
+$(TESSOBJ)ccmain_applybox.$(OBJ) : $(TESSERACTDIR)/src/ccmain/applybox.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_applybox.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/applybox.cpp
+
+$(TESSOBJ)ccmain_control.$(OBJ) : $(TESSERACTDIR)/src/ccmain/control.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_control.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/control.cpp
+
+$(TESSOBJ)ccmain_docqual.$(OBJ) : $(TESSERACTDIR)/src/ccmain/docqual.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_docqual.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/docqual.cpp
+
+$(TESSOBJ)ccmain_equationdetect.$(OBJ) : $(TESSERACTDIR)/src/ccmain/equationdetect.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_equationdetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/equationdetect.cpp
+
+$(TESSOBJ)ccmain_linerec.$(OBJ) : $(TESSERACTDIR)/src/ccmain/linerec.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_linerec.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/linerec.cpp
+
+$(TESSOBJ)ccmain_ltrresultiterator.$(OBJ) : $(TESSERACTDIR)/src/ccmain/ltrresultiterator.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_ltrresultiterator.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/ltrresultiterator.cpp
+
+$(TESSOBJ)ccmain_mutableiterator.$(OBJ) : $(TESSERACTDIR)/src/ccmain/mutableiterator.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_mutableiterator.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/mutableiterator.cpp
+
+$(TESSOBJ)ccmain_output.$(OBJ) : $(TESSERACTDIR)/src/ccmain/output.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_output.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/output.cpp
+
+$(TESSOBJ)ccmain_osdetect.$(OBJ) : $(TESSERACTDIR)/src/ccmain/osdetect.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_osdetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/osdetect.cpp
+
+$(TESSOBJ)ccmain_pageiterator.$(OBJ) : $(TESSERACTDIR)/src/ccmain/pageiterator.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_pageiterator.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/pageiterator.cpp
+
+$(TESSOBJ)ccmain_pagesegmain.$(OBJ) : $(TESSERACTDIR)/src/ccmain/pagesegmain.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_pagesegmain.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/pagesegmain.cpp
+
+$(TESSOBJ)ccmain_pagewalk.$(OBJ) : $(TESSERACTDIR)/src/ccmain/pagewalk.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_pagewalk.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/pagewalk.cpp
+
+$(TESSOBJ)ccmain_paragraphs.$(OBJ) : $(TESSERACTDIR)/src/ccmain/paragraphs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_paragraphs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/paragraphs.cpp
+
+$(TESSOBJ)ccmain_paramsd.$(OBJ) : $(TESSERACTDIR)/src/ccmain/paramsd.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_paramsd.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/paramsd.cpp
+
+$(TESSOBJ)ccmain_par_control.$(OBJ) : $(TESSERACTDIR)/src/ccmain/par_control.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_par_control.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/par_control.cpp
+
+$(TESSOBJ)ccmain_pgedit.$(OBJ) : $(TESSERACTDIR)/src/ccmain/pgedit.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_pgedit.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/pgedit.cpp
+
+$(TESSOBJ)ccmain_reject.$(OBJ) : $(TESSERACTDIR)/src/ccmain/reject.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_reject.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/reject.cpp
+
+$(TESSOBJ)ccmain_resultiterator.$(OBJ) : $(TESSERACTDIR)/src/ccmain/resultiterator.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_resultiterator.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/resultiterator.cpp
+
+$(TESSOBJ)ccmain_superscript.$(OBJ) : $(TESSERACTDIR)/src/ccmain/superscript.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_superscript.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/superscript.cpp
+
+$(TESSOBJ)ccmain_tessbox.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tessbox.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_tessbox.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tessbox.cpp
+
+$(TESSOBJ)ccmain_tessedit.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tessedit.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_tessedit.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tessedit.cpp
+
+$(TESSOBJ)ccmain_tesseractclass.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tesseractclass.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_tesseractclass.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tesseractclass.cpp
+
+$(TESSOBJ)ccmain_tessvars.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tessvars.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_tessvars.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tessvars.cpp
+
+$(TESSOBJ)ccmain_tfacepp.$(OBJ) : $(TESSERACTDIR)/src/ccmain/tfacepp.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_tfacepp.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/tfacepp.cpp
+
+$(TESSOBJ)ccmain_thresholder.$(OBJ) : $(TESSERACTDIR)/src/ccmain/thresholder.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_thresholder.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/thresholder.cpp
+
+$(TESSOBJ)ccmain_werdit.$(OBJ) : $(TESSERACTDIR)/src/ccmain/werdit.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_werdit.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/werdit.cpp
+
+$(TESSOBJ)ccmain_adaptions.$(OBJ) : $(TESSERACTDIR)/src/ccmain/adaptions.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_adaptions.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/adaptions.cpp
+
+$(TESSOBJ)ccmain_fixspace.$(OBJ) : $(TESSERACTDIR)/src/ccmain/fixspace.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_fixspace.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/fixspace.cpp
+
+$(TESSOBJ)ccmain_fixxht.$(OBJ) : $(TESSERACTDIR)/src/ccmain/fixxht.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_fixxht.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/fixxht.cpp
+
+$(TESSOBJ)ccmain_recogtraining.$(OBJ) : $(TESSERACTDIR)/src/ccmain/recogtraining.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccmain_recogtraining.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccmain/recogtraining.cpp
+
+$(TESSOBJ)ccstruct_blamer.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/blamer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_blamer.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/blamer.cpp
+
+$(TESSOBJ)ccstruct_blobbox.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/blobbox.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_blobbox.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/blobbox.cpp
+
+$(TESSOBJ)ccstruct_blobs.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/blobs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_blobs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/blobs.cpp
+
+$(TESSOBJ)ccstruct_blread.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/blread.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_blread.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/blread.cpp
+
+$(TESSOBJ)ccstruct_boxread.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/boxread.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_boxread.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/boxread.cpp
+
+$(TESSOBJ)ccstruct_boxword.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/boxword.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_boxword.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/boxword.cpp
+
+$(TESSOBJ)ccstruct_ccstruct.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ccstruct.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_ccstruct.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ccstruct.cpp
+
+$(TESSOBJ)ccstruct_coutln.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/coutln.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_coutln.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/coutln.cpp
+
+$(TESSOBJ)ccstruct_detlinefit.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/detlinefit.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_detlinefit.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/detlinefit.cpp
+
+$(TESSOBJ)ccstruct_dppoint.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/dppoint.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_dppoint.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/dppoint.cpp
+
+$(TESSOBJ)ccstruct_imagedata.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/imagedata.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_imagedata.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/imagedata.cpp
+
+$(TESSOBJ)ccstruct_linlsq.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/linlsq.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_linlsq.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/linlsq.cpp
+
+$(TESSOBJ)ccstruct_matrix.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/matrix.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_matrix.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/matrix.cpp
+
+$(TESSOBJ)ccstruct_mod128.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/mod128.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_mod128.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/mod128.cpp
+
+$(TESSOBJ)ccstruct_normalis.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/normalis.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_normalis.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/normalis.cpp
+
+$(TESSOBJ)ccstruct_ocrblock.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ocrblock.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_ocrblock.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ocrblock.cpp
+
+$(TESSOBJ)ccstruct_ocrpara.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ocrpara.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_ocrpara.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ocrpara.cpp
+
+$(TESSOBJ)ccstruct_ocrrow.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ocrrow.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_ocrrow.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ocrrow.cpp
+
+$(TESSOBJ)ccstruct_otsuthr.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/otsuthr.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_otsuthr.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/otsuthr.cpp
+
+$(TESSOBJ)ccstruct_pageres.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/pageres.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_pageres.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/pageres.cpp
+
+$(TESSOBJ)ccstruct_pdblock.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/pdblock.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_pdblock.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/pdblock.cpp
+
+$(TESSOBJ)ccstruct_points.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/points.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_points.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/points.cpp
+
+$(TESSOBJ)ccstruct_polyaprx.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/polyaprx.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_polyaprx.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/polyaprx.cpp
+
+$(TESSOBJ)ccstruct_polyblk.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/polyblk.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_polyblk.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/polyblk.cpp
+
+$(TESSOBJ)ccstruct_quadlsq.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/quadlsq.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_quadlsq.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/quadlsq.cpp
+
+$(TESSOBJ)ccstruct_quspline.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/quspline.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_quspline.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/quspline.cpp
+
+$(TESSOBJ)ccstruct_ratngs.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/ratngs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_ratngs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/ratngs.cpp
+
+$(TESSOBJ)ccstruct_rect.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/rect.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_rect.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/rect.cpp
+
+$(TESSOBJ)ccstruct_rejctmap.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/rejctmap.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_rejctmap.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/rejctmap.cpp
+
+$(TESSOBJ)ccstruct_seam.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/seam.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_seam.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/seam.cpp
+
+$(TESSOBJ)ccstruct_split.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/split.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_split.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/split.cpp
+
+$(TESSOBJ)ccstruct_statistc.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/statistc.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_statistc.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/statistc.cpp
+
+$(TESSOBJ)ccstruct_stepblob.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/stepblob.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_stepblob.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/stepblob.cpp
+
+$(TESSOBJ)ccstruct_werd.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/werd.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_werd.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/werd.cpp
+
+$(TESSOBJ)ccstruct_fontinfo.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/fontinfo.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_fontinfo.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/fontinfo.cpp
+
+$(TESSOBJ)ccstruct_params_training_featdef.$(OBJ) : $(TESSERACTDIR)/src/ccstruct/params_training_featdef.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccstruct_params_training_featdef.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccstruct/params_training_featdef.cpp
+
+$(TESSOBJ)classify_adaptive.$(OBJ) : $(TESSERACTDIR)/src/classify/adaptive.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_adaptive.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/adaptive.cpp
+
+$(TESSOBJ)classify_adaptmatch.$(OBJ) : $(TESSERACTDIR)/src/classify/adaptmatch.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_adaptmatch.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/adaptmatch.cpp
+
+$(TESSOBJ)classify_blobclass.$(OBJ) : $(TESSERACTDIR)/src/classify/blobclass.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_blobclass.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/blobclass.cpp
+
+$(TESSOBJ)classify_classify.$(OBJ) : $(TESSERACTDIR)/src/classify/classify.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_classify.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/classify.cpp
+
+$(TESSOBJ)classify_cluster.$(OBJ) : $(TESSERACTDIR)/src/classify/cluster.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_cluster.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/cluster.cpp
+
+$(TESSOBJ)classify_clusttool.$(OBJ) : $(TESSERACTDIR)/src/classify/clusttool.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_clusttool.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/clusttool.cpp
+
+$(TESSOBJ)classify_cutoffs.$(OBJ) : $(TESSERACTDIR)/src/classify/cutoffs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_cutoffs.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/cutoffs.cpp
+
+$(TESSOBJ)classify_float2int.$(OBJ) : $(TESSERACTDIR)/src/classify/float2int.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_float2int.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/float2int.cpp
+
+$(TESSOBJ)classify_featdefs.$(OBJ) : $(TESSERACTDIR)/src/classify/featdefs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_featdefs.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/featdefs.cpp
+
+$(TESSOBJ)classify_fpoint.$(OBJ) : $(TESSERACTDIR)/src/classify/fpoint.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_fpoint.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/fpoint.cpp
+
+$(TESSOBJ)classify_intfeaturespace.$(OBJ) : $(TESSERACTDIR)/src/classify/intfeaturespace.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_intfeaturespace.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/intfeaturespace.cpp
+
+$(TESSOBJ)classify_intfx.$(OBJ) : $(TESSERACTDIR)/src/classify/intfx.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_intfx.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/intfx.cpp
+
+$(TESSOBJ)classify_intmatcher.$(OBJ) : $(TESSERACTDIR)/src/classify/intmatcher.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_intmatcher.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/intmatcher.cpp
+
+$(TESSOBJ)classify_intproto.$(OBJ) : $(TESSERACTDIR)/src/classify/intproto.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_intproto.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/intproto.cpp
+
+$(TESSOBJ)classify_kdtree.$(OBJ) : $(TESSERACTDIR)/src/classify/kdtree.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_kdtree.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/kdtree.cpp
+
+$(TESSOBJ)classify_mf.$(OBJ) : $(TESSERACTDIR)/src/classify/mf.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_mf.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/mf.cpp
+
+$(TESSOBJ)classify_mfdefs.$(OBJ) : $(TESSERACTDIR)/src/classify/mfdefs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_mfdefs.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/mfdefs.cpp
+
+$(TESSOBJ)classify_mfoutline.$(OBJ) : $(TESSERACTDIR)/src/classify/mfoutline.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_mfoutline.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/mfoutline.cpp
+
+$(TESSOBJ)classify_mfx.$(OBJ) : $(TESSERACTDIR)/src/classify/mfx.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_mfx.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/mfx.cpp
+
+$(TESSOBJ)classify_normfeat.$(OBJ) : $(TESSERACTDIR)/src/classify/normfeat.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_normfeat.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/normfeat.cpp
+
+$(TESSOBJ)classify_normmatch.$(OBJ) : $(TESSERACTDIR)/src/classify/normmatch.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_normmatch.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/normmatch.cpp
+
+$(TESSOBJ)classify_ocrfeatures.$(OBJ) : $(TESSERACTDIR)/src/classify/ocrfeatures.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_ocrfeatures.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/ocrfeatures.cpp
+
+$(TESSOBJ)classify_outfeat.$(OBJ) : $(TESSERACTDIR)/src/classify/outfeat.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_outfeat.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/outfeat.cpp
+
+$(TESSOBJ)classify_picofeat.$(OBJ) : $(TESSERACTDIR)/src/classify/picofeat.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_picofeat.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/picofeat.cpp
+
+$(TESSOBJ)classify_protos.$(OBJ) : $(TESSERACTDIR)/src/classify/protos.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_protos.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/protos.cpp
+
+$(TESSOBJ)classify_shapeclassifier.$(OBJ) : $(TESSERACTDIR)/src/classify/shapeclassifier.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_shapeclassifier.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/shapeclassifier.cpp
+
+$(TESSOBJ)classify_shapetable.$(OBJ) : $(TESSERACTDIR)/src/classify/shapetable.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_shapetable.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/shapetable.cpp
+
+$(TESSOBJ)classify_tessclassifier.$(OBJ) : $(TESSERACTDIR)/src/classify/tessclassifier.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_tessclassifier.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/tessclassifier.cpp
+
+$(TESSOBJ)classify_trainingsample.$(OBJ) : $(TESSERACTDIR)/src/classify/trainingsample.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)classify_trainingsample.$(OBJ) $(C_) $(TESSERACTDIR)/src/classify/trainingsample.cpp
+
+$(TESSOBJ)cutil_callcpp.$(OBJ) : $(TESSERACTDIR)/src/cutil/callcpp.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)cutil_callcpp.$(OBJ) $(C_) $(TESSERACTDIR)/src/cutil/callcpp.cpp
+
+$(TESSOBJ)cutil_cutil_class.$(OBJ) : $(TESSERACTDIR)/src/cutil/cutil_class.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)cutil_cutil_class.$(OBJ) $(C_) $(TESSERACTDIR)/src/cutil/cutil_class.cpp
+
+$(TESSOBJ)cutil_emalloc.$(OBJ) : $(TESSERACTDIR)/src/cutil/emalloc.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)cutil_emalloc.$(OBJ) $(C_) $(TESSERACTDIR)/src/cutil/emalloc.cpp
+
+$(TESSOBJ)cutil_oldlist.$(OBJ) : $(TESSERACTDIR)/src/cutil/oldlist.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)cutil_oldlist.$(OBJ) $(C_) $(TESSERACTDIR)/src/cutil/oldlist.cpp
+
+$(TESSOBJ)dict_context.$(OBJ) : $(TESSERACTDIR)/src/dict/context.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_context.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/context.cpp
+
+$(TESSOBJ)dict_dawg.$(OBJ) : $(TESSERACTDIR)/src/dict/dawg.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_dawg.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/dawg.cpp
+
+$(TESSOBJ)dict_dawg_cache.$(OBJ) : $(TESSERACTDIR)/src/dict/dawg_cache.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_dawg_cache.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/dawg_cache.cpp
+
+$(TESSOBJ)dict_dict.$(OBJ) : $(TESSERACTDIR)/src/dict/dict.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_dict.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/dict.cpp
+
+$(TESSOBJ)dict_permdawg.$(OBJ) : $(TESSERACTDIR)/src/dict/permdawg.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_permdawg.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/permdawg.cpp
+
+$(TESSOBJ)dict_stopper.$(OBJ) : $(TESSERACTDIR)/src/dict/stopper.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_stopper.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/stopper.cpp
+
+$(TESSOBJ)dict_trie.$(OBJ) : $(TESSERACTDIR)/src/dict/trie.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_trie.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/trie.cpp
+
+$(TESSOBJ)dict_hyphen.$(OBJ) : $(TESSERACTDIR)/src/dict/hyphen.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)dict_hyphen.$(OBJ) $(C_) $(TESSERACTDIR)/src/dict/hyphen.cpp
+
+$(TESSOBJ)textord_alignedblob.$(OBJ) : $(TESSERACTDIR)/src/textord/alignedblob.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_alignedblob.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/alignedblob.cpp
+
+$(TESSOBJ)textord_baselinedetect.$(OBJ) : $(TESSERACTDIR)/src/textord/baselinedetect.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_baselinedetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/baselinedetect.cpp
+
+$(TESSOBJ)textord_bbgrid.$(OBJ) : $(TESSERACTDIR)/src/textord/bbgrid.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_bbgrid.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/bbgrid.cpp
+
+$(TESSOBJ)textord_blkocc.$(OBJ) : $(TESSERACTDIR)/src/textord/blkocc.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_blkocc.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/blkocc.cpp
+
+$(TESSOBJ)textord_blobgrid.$(OBJ) : $(TESSERACTDIR)/src/textord/blobgrid.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_blobgrid.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/blobgrid.cpp
+
+$(TESSOBJ)textord_ccnontextdetect.$(OBJ) : $(TESSERACTDIR)/src/textord/ccnontextdetect.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_ccnontextdetect.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/ccnontextdetect.cpp
+
+$(TESSOBJ)textord_cjkpitch.$(OBJ) : $(TESSERACTDIR)/src/textord/cjkpitch.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_cjkpitch.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/cjkpitch.cpp
+
+$(TESSOBJ)textord_colfind.$(OBJ) : $(TESSERACTDIR)/src/textord/colfind.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_colfind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/colfind.cpp
+
+$(TESSOBJ)textord_colpartition.$(OBJ) : $(TESSERACTDIR)/src/textord/colpartition.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_colpartition.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/colpartition.cpp
+
+$(TESSOBJ)textord_colpartitionset.$(OBJ) : $(TESSERACTDIR)/src/textord/colpartitionset.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_colpartitionset.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/colpartitionset.cpp
+
+$(TESSOBJ)textord_colpartitiongrid.$(OBJ) : $(TESSERACTDIR)/src/textord/colpartitiongrid.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_colpartitiongrid.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/colpartitiongrid.cpp
+
+$(TESSOBJ)textord_devanagari_processing.$(OBJ) : $(TESSERACTDIR)/src/textord/devanagari_processing.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_devanagari_processing.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/devanagari_processing.cpp
+
+$(TESSOBJ)textord_drawtord.$(OBJ) : $(TESSERACTDIR)/src/textord/drawtord.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_drawtord.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/drawtord.cpp
+
+$(TESSOBJ)textord_edgblob.$(OBJ) : $(TESSERACTDIR)/src/textord/edgblob.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_edgblob.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/edgblob.cpp
+
+$(TESSOBJ)textord_edgloop.$(OBJ) : $(TESSERACTDIR)/src/textord/edgloop.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_edgloop.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/edgloop.cpp
+
+$(TESSOBJ)textord_fpchop.$(OBJ) : $(TESSERACTDIR)/src/textord/fpchop.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_fpchop.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/fpchop.cpp
+
+$(TESSOBJ)textord_gap_map.$(OBJ) : $(TESSERACTDIR)/src/textord/gap_map.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_gap_map.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/gap_map.cpp
+
+$(TESSOBJ)textord_imagefind.$(OBJ) : $(TESSERACTDIR)/src/textord/imagefind.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_imagefind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/imagefind.cpp
+
+$(TESSOBJ)textord_linefind.$(OBJ) : $(TESSERACTDIR)/src/textord/linefind.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_linefind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/linefind.cpp
+
+$(TESSOBJ)textord_makerow.$(OBJ) : $(TESSERACTDIR)/src/textord/makerow.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_makerow.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/makerow.cpp
+
+$(TESSOBJ)textord_oldbasel.$(OBJ) : $(TESSERACTDIR)/src/textord/oldbasel.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_oldbasel.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/oldbasel.cpp
+
+$(TESSOBJ)textord_pithsync.$(OBJ) : $(TESSERACTDIR)/src/textord/pithsync.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_pithsync.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/pithsync.cpp
+
+$(TESSOBJ)textord_pitsync1.$(OBJ) : $(TESSERACTDIR)/src/textord/pitsync1.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_pitsync1.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/pitsync1.cpp
+
+$(TESSOBJ)textord_scanedg.$(OBJ) : $(TESSERACTDIR)/src/textord/scanedg.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_scanedg.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/scanedg.cpp
+
+$(TESSOBJ)textord_sortflts.$(OBJ) : $(TESSERACTDIR)/src/textord/sortflts.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_sortflts.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/sortflts.cpp
+
+$(TESSOBJ)textord_strokewidth.$(OBJ) : $(TESSERACTDIR)/src/textord/strokewidth.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_strokewidth.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/strokewidth.cpp
+
+$(TESSOBJ)textord_tabfind.$(OBJ) : $(TESSERACTDIR)/src/textord/tabfind.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tabfind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tabfind.cpp
+
+$(TESSOBJ)textord_tablefind.$(OBJ) : $(TESSERACTDIR)/src/textord/tablefind.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tablefind.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tablefind.cpp
+
+$(TESSOBJ)textord_tabvector.$(OBJ) : $(TESSERACTDIR)/src/textord/tabvector.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tabvector.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tabvector.cpp
+
+$(TESSOBJ)textord_tablerecog.$(OBJ) : $(TESSERACTDIR)/src/textord/tablerecog.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tablerecog.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tablerecog.cpp
+
+$(TESSOBJ)textord_textlineprojection.$(OBJ) : $(TESSERACTDIR)/src/textord/textlineprojection.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_textlineprojection.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/textlineprojection.cpp
+
+$(TESSOBJ)textord_textord.$(OBJ) : $(TESSERACTDIR)/src/textord/textord.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_textord.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/textord.cpp
+
+$(TESSOBJ)textord_topitch.$(OBJ) : $(TESSERACTDIR)/src/textord/topitch.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_topitch.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/topitch.cpp
+
+$(TESSOBJ)textord_tordmain.$(OBJ) : $(TESSERACTDIR)/src/textord/tordmain.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tordmain.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tordmain.cpp
+
+$(TESSOBJ)textord_tospace.$(OBJ) : $(TESSERACTDIR)/src/textord/tospace.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tospace.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tospace.cpp
+
+$(TESSOBJ)textord_tovars.$(OBJ) : $(TESSERACTDIR)/src/textord/tovars.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_tovars.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/tovars.cpp
+
+$(TESSOBJ)textord_underlin.$(OBJ) : $(TESSERACTDIR)/src/textord/underlin.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_underlin.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/underlin.cpp
+
+$(TESSOBJ)textord_wordseg.$(OBJ) : $(TESSERACTDIR)/src/textord/wordseg.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_wordseg.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/wordseg.cpp
+
+$(TESSOBJ)textord_workingpartset.$(OBJ) : $(TESSERACTDIR)/src/textord/workingpartset.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_workingpartset.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/workingpartset.cpp
+
+$(TESSOBJ)textord_equationdetectbase.$(OBJ) : $(TESSERACTDIR)/src/textord/equationdetectbase.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)textord_equationdetectbase.$(OBJ) $(C_) $(TESSERACTDIR)/src/textord/equationdetectbase.cpp
+
+$(TESSOBJ)viewer_scrollview.$(OBJ) : $(TESSERACTDIR)/src/viewer/scrollview.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)viewer_scrollview.$(OBJ) $(C_) $(TESSERACTDIR)/src/viewer/scrollview.cpp
+
+$(TESSOBJ)viewer_svmnode.$(OBJ) : $(TESSERACTDIR)/src/viewer/svmnode.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)viewer_svmnode.$(OBJ) $(C_) $(TESSERACTDIR)/src/viewer/svmnode.cpp
+
+$(TESSOBJ)viewer_svutil.$(OBJ) : $(TESSERACTDIR)/src/viewer/svutil.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)viewer_svutil.$(OBJ) $(C_) $(TESSERACTDIR)/src/viewer/svutil.cpp
+
+$(TESSOBJ)wordrec_chop.$(OBJ) : $(TESSERACTDIR)/src/wordrec/chop.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_chop.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/chop.cpp
+
+$(TESSOBJ)wordrec_chopper.$(OBJ) : $(TESSERACTDIR)/src/wordrec/chopper.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_chopper.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/chopper.cpp
+
+$(TESSOBJ)wordrec_findseam.$(OBJ) : $(TESSERACTDIR)/src/wordrec/findseam.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_findseam.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/findseam.cpp
+
+$(TESSOBJ)wordrec_gradechop.$(OBJ) : $(TESSERACTDIR)/src/wordrec/gradechop.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_gradechop.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/gradechop.cpp
+
+$(TESSOBJ)wordrec_tface.$(OBJ) : $(TESSERACTDIR)/src/wordrec/tface.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_tface.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/tface.cpp
+
+$(TESSOBJ)wordrec_wordrec.$(OBJ) : $(TESSERACTDIR)/src/wordrec/wordrec.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_wordrec.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/wordrec.cpp
+
+$(TESSOBJ)wordrec_associate.$(OBJ) : $(TESSERACTDIR)/src/wordrec/associate.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_associate.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/associate.cpp
+
+$(TESSOBJ)wordrec_drawfx.$(OBJ) : $(TESSERACTDIR)/src/wordrec/drawfx.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_drawfx.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/drawfx.cpp
+
+$(TESSOBJ)wordrec_language_model.$(OBJ) : $(TESSERACTDIR)/src/wordrec/language_model.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_language_model.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/language_model.cpp
+
+$(TESSOBJ)wordrec_lm_consistency.$(OBJ) : $(TESSERACTDIR)/src/wordrec/lm_consistency.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_lm_consistency.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/lm_consistency.cpp
+
+$(TESSOBJ)wordrec_lm_pain_points.$(OBJ) : $(TESSERACTDIR)/src/wordrec/lm_pain_points.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_lm_pain_points.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/lm_pain_points.cpp
+
+$(TESSOBJ)wordrec_lm_state.$(OBJ) : $(TESSERACTDIR)/src/wordrec/lm_state.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_lm_state.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/lm_state.cpp
+
+$(TESSOBJ)wordrec_outlines.$(OBJ) : $(TESSERACTDIR)/src/wordrec/outlines.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_outlines.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/outlines.cpp
+
+$(TESSOBJ)wordrec_pieces.$(OBJ) : $(TESSERACTDIR)/src/wordrec/pieces.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_pieces.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/pieces.cpp
+
+$(TESSOBJ)wordrec_params_model.$(OBJ) : $(TESSERACTDIR)/src/wordrec/params_model.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_params_model.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/params_model.cpp
+
+$(TESSOBJ)wordrec_plotedges.$(OBJ) : $(TESSERACTDIR)/src/wordrec/plotedges.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_plotedges.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/plotedges.cpp
+
+$(TESSOBJ)wordrec_render.$(OBJ) : $(TESSERACTDIR)/src/wordrec/render.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_render.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/render.cpp
+
+$(TESSOBJ)wordrec_segsearch.$(OBJ) : $(TESSERACTDIR)/src/wordrec/segsearch.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_segsearch.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/segsearch.cpp
+
+$(TESSOBJ)wordrec_wordclass.$(OBJ) : $(TESSERACTDIR)/src/wordrec/wordclass.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)wordrec_wordclass.$(OBJ) $(C_) $(TESSERACTDIR)/src/wordrec/wordclass.cpp
+
+$(TESSOBJ)ccutil_ambigs.$(OBJ) : $(TESSERACTDIR)/src/ccutil/ambigs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_ambigs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/ambigs.cpp
+
+$(TESSOBJ)ccutil_ccutil.$(OBJ) : $(TESSERACTDIR)/src/ccutil/ccutil.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_ccutil.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/ccutil.cpp
+
+$(TESSOBJ)ccutil_clst.$(OBJ) : $(TESSERACTDIR)/src/ccutil/clst.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_clst.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/clst.cpp
+
+$(TESSOBJ)ccutil_elst2.$(OBJ) : $(TESSERACTDIR)/src/ccutil/elst2.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_elst2.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/elst2.cpp
+
+$(TESSOBJ)ccutil_elst.$(OBJ) : $(TESSERACTDIR)/src/ccutil/elst.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_elst.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/elst.cpp
+
+$(TESSOBJ)ccutil_errcode.$(OBJ) : $(TESSERACTDIR)/src/ccutil/errcode.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_errcode.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/errcode.cpp
+
+$(TESSOBJ)ccutil_globaloc.$(OBJ) : $(TESSERACTDIR)/src/ccutil/globaloc.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_globaloc.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/globaloc.cpp
+
+$(TESSOBJ)ccutil_mainblk.$(OBJ) : $(TESSERACTDIR)/src/ccutil/mainblk.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_mainblk.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/mainblk.cpp
+
+$(TESSOBJ)ccutil_serialis.$(OBJ) : $(TESSERACTDIR)/src/ccutil/serialis.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_serialis.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/serialis.cpp
+
+$(TESSOBJ)ccutil_strngs.$(OBJ) : $(TESSERACTDIR)/src/ccutil/strngs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_strngs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/strngs.cpp
+
+$(TESSOBJ)ccutil_scanutils.$(OBJ) : $(TESSERACTDIR)/src/ccutil/scanutils.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_scanutils.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/scanutils.cpp
+
+$(TESSOBJ)ccutil_tessdatamanager.$(OBJ) : $(TESSERACTDIR)/src/ccutil/tessdatamanager.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_tessdatamanager.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/tessdatamanager.cpp
+
+$(TESSOBJ)ccutil_tprintf.$(OBJ) : $(TESSERACTDIR)/src/ccutil/tprintf.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_tprintf.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/tprintf.cpp
+
+$(TESSOBJ)ccutil_unichar.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unichar.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_unichar.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unichar.cpp
+
+$(TESSOBJ)ccutil_unicharcompress.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unicharcompress.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_unicharcompress.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unicharcompress.cpp
+
+$(TESSOBJ)ccutil_unicharmap.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unicharmap.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_unicharmap.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unicharmap.cpp
+
+$(TESSOBJ)ccutil_unicharset.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unicharset.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_unicharset.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unicharset.cpp
+
+$(TESSOBJ)ccutil_unicodes.$(OBJ) : $(TESSERACTDIR)/src/ccutil/unicodes.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_unicodes.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/unicodes.cpp
+
+$(TESSOBJ)ccutil_params.$(OBJ) : $(TESSERACTDIR)/src/ccutil/params.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_params.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/params.cpp
+
+$(TESSOBJ)ccutil_bitvector.$(OBJ) : $(TESSERACTDIR)/src/ccutil/bitvector.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_bitvector.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/bitvector.cpp
+
+$(TESSOBJ)ccutil_indexmapbidi.$(OBJ) : $(TESSERACTDIR)/src/ccutil/indexmapbidi.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_indexmapbidi.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/indexmapbidi.cpp
+
+$(TESSOBJ)ccutil_universalambigs.$(OBJ) : $(TESSERACTDIR)/src/ccutil/universalambigs.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)ccutil_universalambigs.$(OBJ) $(C_) $(TESSERACTDIR)/src/ccutil/universalambigs.cpp
+
+$(TESSOBJ)lstm_convolve.$(OBJ) : $(TESSERACTDIR)/src/lstm/convolve.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_convolve.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/convolve.cpp
+
+$(TESSOBJ)lstm_fullyconnected.$(OBJ) : $(TESSERACTDIR)/src/lstm/fullyconnected.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_fullyconnected.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/fullyconnected.cpp
+
+$(TESSOBJ)lstm_functions.$(OBJ) : $(TESSERACTDIR)/src/lstm/functions.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_functions.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/functions.cpp
+
+$(TESSOBJ)lstm_input.$(OBJ) : $(TESSERACTDIR)/src/lstm/input.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_input.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/input.cpp
+
+$(TESSOBJ)lstm_lstm.$(OBJ) : $(TESSERACTDIR)/src/lstm/lstm.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_lstm.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/lstm.cpp
+
+$(TESSOBJ)lstm_lstmrecognizer.$(OBJ) : $(TESSERACTDIR)/src/lstm/lstmrecognizer.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_lstmrecognizer.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/lstmrecognizer.cpp
+
+$(TESSOBJ)lstm_maxpool.$(OBJ) : $(TESSERACTDIR)/src/lstm/maxpool.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_maxpool.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/maxpool.cpp
+
+$(TESSOBJ)lstm_network.$(OBJ) : $(TESSERACTDIR)/src/lstm/network.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_network.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/network.cpp
+
+$(TESSOBJ)lstm_networkio.$(OBJ) : $(TESSERACTDIR)/src/lstm/networkio.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_networkio.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/networkio.cpp
+
+$(TESSOBJ)lstm_parallel.$(OBJ) : $(TESSERACTDIR)/src/lstm/parallel.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_parallel.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/parallel.cpp
+
+$(TESSOBJ)lstm_plumbing.$(OBJ) : $(TESSERACTDIR)/src/lstm/plumbing.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_plumbing.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/plumbing.cpp
+
+$(TESSOBJ)lstm_recodebeam.$(OBJ) : $(TESSERACTDIR)/src/lstm/recodebeam.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_recodebeam.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/recodebeam.cpp
+
+$(TESSOBJ)lstm_reconfig.$(OBJ) : $(TESSERACTDIR)/src/lstm/reconfig.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_reconfig.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/reconfig.cpp
+
+$(TESSOBJ)lstm_reversed.$(OBJ) : $(TESSERACTDIR)/src/lstm/reversed.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_reversed.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/reversed.cpp
+
+$(TESSOBJ)lstm_series.$(OBJ) : $(TESSERACTDIR)/src/lstm/series.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_series.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/series.cpp
+
+$(TESSOBJ)lstm_stridemap.$(OBJ) : $(TESSERACTDIR)/src/lstm/stridemap.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_stridemap.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/stridemap.cpp
+
+$(TESSOBJ)lstm_tfnetwork.$(OBJ) : $(TESSERACTDIR)/src/lstm/tfnetwork.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_tfnetwork.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/tfnetwork.cpp
+
+$(TESSOBJ)lstm_weightmatrix.$(OBJ) : $(TESSERACTDIR)/src/lstm/weightmatrix.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)lstm_weightmatrix.$(OBJ) $(C_) $(TESSERACTDIR)/src/lstm/weightmatrix.cpp
+
+$(TESSOBJ)arch_dotproduct.$(OBJ) : $(TESSERACTDIR)/src/arch/dotproduct.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSO_)arch_dotproduct.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/dotproduct.cpp
+
+$(TESSOBJ)arch_dotproductavx.$(OBJ): $(TESSERACTDIR)/src/arch/dotproductavx.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSAVX) $(TESSO_)arch_dotproductavx.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/dotproductavx.cpp
+
+$(TESSOBJ)arch_dotproductfma.$(OBJ): $(TESSERACTDIR)/src/arch/dotproductfma.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSFMA) $(TESSO_)arch_dotproductfma.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/dotproductfma.cpp
+
+$(TESSOBJ)arch_dotproductsse.$(OBJ): $(TESSERACTDIR)/src/arch/dotproductsse.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSSSE41) $(TESSO_)arch_dotproductsse.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/dotproductsse.cpp
+
+$(TESSOBJ)arch_intsimdmatrixavx2.$(OBJ): $(TESSERACTDIR)/src/arch/intsimdmatrixavx2.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSAVX2) $(TESSO_)arch_intsimdmatrixavx2.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/intsimdmatrixavx2.cpp
+
+$(TESSOBJ)arch_intsimdmatrixsse.$(OBJ): $(TESSERACTDIR)/src/arch/intsimdmatrixsse.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSSSE41) $(TESSO_)arch_intsimdmatrixsse.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/intsimdmatrixsse.cpp
+
+$(TESSOBJ)arch_intsimdmatrixneon.$(OBJ): $(TESSERACTDIR)/src/arch/intsimdmatrixneon.cpp $(TESSDEPS)
+ $(TESSCXX) $(TESSNEON) $(TESSO_)arch_intsimdmatrixneon.$(OBJ) $(C_) $(TESSERACTDIR)/src/arch/intsimdmatrixneon.cpp
+
+# Targets needed for lstm engine
+TESSERACT_OBJS_1=\
+ $(TESSOBJ)api_altorenderer.$(OBJ)\
+ $(TESSOBJ)api_baseapi.$(OBJ)\
+ $(TESSOBJ)api_capi.$(OBJ)\
+ $(TESSOBJ)api_hocrrenderer.$(OBJ)\
+ $(TESSOBJ)api_lstmboxrenderer.$(OBJ)\
+ $(TESSOBJ)api_pdfrenderer.$(OBJ)\
+ $(TESSOBJ)api_renderer.$(OBJ)\
+ $(TESSOBJ)api_wordstrboxrenderer.$(OBJ)\
+ $(TESSOBJ)arch_intsimdmatrix.$(OBJ)\
+ $(TESSOBJ)arch_simddetect.$(OBJ)\
+ $(TESSOBJ)ccmain_applybox.$(OBJ)\
+ $(TESSOBJ)ccmain_control.$(OBJ)\
+ $(TESSOBJ)ccmain_linerec.$(OBJ)\
+ $(TESSOBJ)ccmain_ltrresultiterator.$(OBJ)\
+ $(TESSOBJ)ccmain_mutableiterator.$(OBJ)\
+ $(TESSOBJ)ccmain_output.$(OBJ)\
+ $(TESSOBJ)ccmain_pageiterator.$(OBJ)\
+ $(TESSOBJ)ccmain_pagesegmain.$(OBJ)\
+ $(TESSOBJ)ccmain_pagewalk.$(OBJ)\
+ $(TESSOBJ)ccmain_paragraphs.$(OBJ)\
+ $(TESSOBJ)ccmain_paramsd.$(OBJ)\
+ $(TESSOBJ)ccmain_pgedit.$(OBJ)\
+ $(TESSOBJ)ccmain_reject.$(OBJ)\
+ $(TESSOBJ)ccmain_resultiterator.$(OBJ)\
+ $(TESSOBJ)ccmain_tessedit.$(OBJ)\
+ $(TESSOBJ)ccmain_tesseractclass.$(OBJ)\
+ $(TESSOBJ)ccmain_tessvars.$(OBJ)\
+ $(TESSOBJ)ccmain_thresholder.$(OBJ)\
+ $(TESSOBJ)ccmain_werdit.$(OBJ)\
+
+
+TESSERACT_OBJS_2 = \
+ $(TESSOBJ)ccstruct_blamer.$(OBJ)\
+ $(TESSOBJ)ccstruct_blobbox.$(OBJ)\
+ $(TESSOBJ)ccstruct_blobs.$(OBJ)\
+ $(TESSOBJ)ccstruct_blread.$(OBJ)\
+ $(TESSOBJ)ccstruct_boxread.$(OBJ)\
+ $(TESSOBJ)ccstruct_boxword.$(OBJ)\
+ $(TESSOBJ)ccstruct_ccstruct.$(OBJ)\
+ $(TESSOBJ)ccstruct_coutln.$(OBJ)\
+ $(TESSOBJ)ccstruct_detlinefit.$(OBJ)\
+ $(TESSOBJ)ccstruct_dppoint.$(OBJ)\
+ $(TESSOBJ)ccstruct_imagedata.$(OBJ)\
+ $(TESSOBJ)ccstruct_linlsq.$(OBJ)\
+ $(TESSOBJ)ccstruct_matrix.$(OBJ)\
+ $(TESSOBJ)ccstruct_mod128.$(OBJ)\
+ $(TESSOBJ)ccstruct_normalis.$(OBJ)\
+ $(TESSOBJ)ccstruct_ocrblock.$(OBJ)\
+ $(TESSOBJ)ccstruct_ocrpara.$(OBJ)\
+ $(TESSOBJ)ccstruct_ocrrow.$(OBJ)\
+ $(TESSOBJ)ccstruct_otsuthr.$(OBJ)\
+ $(TESSOBJ)ccstruct_pageres.$(OBJ)\
+ $(TESSOBJ)ccstruct_pdblock.$(OBJ)\
+ $(TESSOBJ)ccstruct_points.$(OBJ)\
+ $(TESSOBJ)ccstruct_polyaprx.$(OBJ)\
+ $(TESSOBJ)ccstruct_polyblk.$(OBJ)\
+ $(TESSOBJ)ccstruct_quadlsq.$(OBJ)\
+ $(TESSOBJ)ccstruct_quspline.$(OBJ)\
+ $(TESSOBJ)ccstruct_ratngs.$(OBJ)\
+ $(TESSOBJ)ccstruct_rect.$(OBJ)\
+ $(TESSOBJ)ccstruct_rejctmap.$(OBJ)\
+ $(TESSOBJ)ccstruct_seam.$(OBJ)\
+ $(TESSOBJ)ccstruct_split.$(OBJ)\
+ $(TESSOBJ)ccstruct_statistc.$(OBJ)\
+ $(TESSOBJ)ccstruct_stepblob.$(OBJ)\
+ $(TESSOBJ)ccstruct_werd.$(OBJ)
+
+TESSERACT_OBJS_3=\
+ $(TESSOBJ)classify_classify.$(OBJ)\
+ $(TESSOBJ)cutil_callcpp.$(OBJ)\
+ $(TESSOBJ)dict_context.$(OBJ)\
+ $(TESSOBJ)dict_dawg.$(OBJ)\
+ $(TESSOBJ)dict_dawg_cache.$(OBJ)\
+ $(TESSOBJ)dict_dict.$(OBJ)\
+ $(TESSOBJ)dict_permdawg.$(OBJ)\
+ $(TESSOBJ)dict_stopper.$(OBJ)\
+ $(TESSOBJ)dict_trie.$(OBJ)\
+ $(TESSOBJ)textord_alignedblob.$(OBJ)\
+ $(TESSOBJ)textord_baselinedetect.$(OBJ)\
+ $(TESSOBJ)textord_bbgrid.$(OBJ)\
+ $(TESSOBJ)textord_blkocc.$(OBJ)\
+ $(TESSOBJ)textord_blobgrid.$(OBJ)\
+ $(TESSOBJ)textord_ccnontextdetect.$(OBJ)\
+ $(TESSOBJ)textord_cjkpitch.$(OBJ)\
+ $(TESSOBJ)textord_colfind.$(OBJ)\
+ $(TESSOBJ)textord_colpartition.$(OBJ)\
+ $(TESSOBJ)textord_colpartitionset.$(OBJ)\
+ $(TESSOBJ)textord_colpartitiongrid.$(OBJ)\
+ $(TESSOBJ)textord_devanagari_processing.$(OBJ)\
+ $(TESSOBJ)textord_drawtord.$(OBJ)\
+ $(TESSOBJ)textord_edgblob.$(OBJ)\
+ $(TESSOBJ)textord_edgloop.$(OBJ)\
+ $(TESSOBJ)textord_fpchop.$(OBJ)\
+ $(TESSOBJ)textord_gap_map.$(OBJ)\
+ $(TESSOBJ)textord_imagefind.$(OBJ)\
+ $(TESSOBJ)textord_linefind.$(OBJ)\
+ $(TESSOBJ)textord_makerow.$(OBJ)\
+ $(TESSOBJ)textord_oldbasel.$(OBJ)\
+ $(TESSOBJ)textord_pithsync.$(OBJ)\
+ $(TESSOBJ)textord_pitsync1.$(OBJ)\
+ $(TESSOBJ)textord_scanedg.$(OBJ)\
+ $(TESSOBJ)textord_sortflts.$(OBJ)\
+ $(TESSOBJ)textord_strokewidth.$(OBJ)\
+ $(TESSOBJ)textord_tabfind.$(OBJ)\
+ $(TESSOBJ)textord_tablefind.$(OBJ)\
+ $(TESSOBJ)textord_tabvector.$(OBJ)\
+ $(TESSOBJ)textord_tablerecog.$(OBJ)\
+ $(TESSOBJ)textord_textlineprojection.$(OBJ)\
+ $(TESSOBJ)textord_textord.$(OBJ)\
+ $(TESSOBJ)textord_topitch.$(OBJ)\
+ $(TESSOBJ)textord_tordmain.$(OBJ)\
+ $(TESSOBJ)textord_tospace.$(OBJ)\
+ $(TESSOBJ)textord_tovars.$(OBJ)\
+ $(TESSOBJ)textord_underlin.$(OBJ)\
+ $(TESSOBJ)textord_wordseg.$(OBJ)\
+ $(TESSOBJ)textord_workingpartset.$(OBJ)\
+
+TESSERACT_OBJS_4=\
+ $(TESSOBJ)viewer_scrollview.$(OBJ)\
+ $(TESSOBJ)viewer_svmnode.$(OBJ)\
+ $(TESSOBJ)viewer_svutil.$(OBJ)\
+ $(TESSOBJ)wordrec_tface.$(OBJ)\
+ $(TESSOBJ)wordrec_wordrec.$(OBJ)\
+ $(TESSOBJ)ccutil_ccutil.$(OBJ)\
+ $(TESSOBJ)ccutil_clst.$(OBJ)\
+ $(TESSOBJ)ccutil_elst2.$(OBJ)\
+ $(TESSOBJ)ccutil_elst.$(OBJ)\
+ $(TESSOBJ)ccutil_errcode.$(OBJ)\
+ $(TESSOBJ)ccutil_globaloc.$(OBJ)\
+ $(TESSOBJ)ccutil_mainblk.$(OBJ)\
+ $(TESSOBJ)ccutil_serialis.$(OBJ)\
+ $(TESSOBJ)ccutil_strngs.$(OBJ)\
+ $(TESSOBJ)ccutil_scanutils.$(OBJ)\
+ $(TESSOBJ)ccutil_tessdatamanager.$(OBJ)\
+ $(TESSOBJ)ccutil_tprintf.$(OBJ)\
+ $(TESSOBJ)ccutil_unichar.$(OBJ)\
+ $(TESSOBJ)ccutil_unicharcompress.$(OBJ)\
+ $(TESSOBJ)ccutil_unicharmap.$(OBJ)\
+ $(TESSOBJ)ccutil_unicharset.$(OBJ)\
+ $(TESSOBJ)ccutil_unicodes.$(OBJ)\
+ $(TESSOBJ)ccutil_params.$(OBJ)\
+ $(TESSOBJ)lstm_convolve.$(OBJ)\
+ $(TESSOBJ)lstm_fullyconnected.$(OBJ)\
+ $(TESSOBJ)lstm_functions.$(OBJ)\
+ $(TESSOBJ)lstm_input.$(OBJ)\
+ $(TESSOBJ)lstm_lstm.$(OBJ)\
+ $(TESSOBJ)lstm_lstmrecognizer.$(OBJ)\
+ $(TESSOBJ)lstm_maxpool.$(OBJ)\
+ $(TESSOBJ)lstm_network.$(OBJ)\
+ $(TESSOBJ)lstm_networkio.$(OBJ)\
+ $(TESSOBJ)lstm_parallel.$(OBJ)\
+ $(TESSOBJ)lstm_plumbing.$(OBJ)\
+ $(TESSOBJ)lstm_recodebeam.$(OBJ)\
+ $(TESSOBJ)lstm_reconfig.$(OBJ)\
+ $(TESSOBJ)lstm_reversed.$(OBJ)\
+ $(TESSOBJ)lstm_series.$(OBJ)\
+ $(TESSOBJ)lstm_stridemap.$(OBJ)\
+ $(TESSOBJ)lstm_tfnetwork.$(OBJ)\
+ $(TESSOBJ)lstm_weightmatrix.$(OBJ)\
+ $(TESSOBJ)arch_dotproduct.$(OBJ)\
+ $(TESSOBJ)arch_dotproductavx.$(OBJ)\
+ $(TESSOBJ)arch_intsimdmatrixavx2.$(OBJ)\
+ $(TESSOBJ)arch_dotproductfma.$(OBJ)\
+ $(TESSOBJ)arch_dotproductsse.$(OBJ)\
+ $(TESSOBJ)arch_intsimdmatrixsse.$(OBJ)\
+ $(TESSOBJ)arch_intsimdmatrixneon.$(OBJ)
+
+# Targets needed for TESSERACT_LEGACY
+TESSERACT_LEGACY_OBJS=\
+ $(TESSOBJ)ccmain_adaptions.$(OBJ)\
+ $(TESSOBJ)ccmain_docqual.$(OBJ)\
+ $(TESSOBJ)ccmain_equationdetect.$(OBJ)\
+ $(TESSOBJ)ccmain_fixspace.$(OBJ)\
+ $(TESSOBJ)ccmain_fixxht.$(OBJ)\
+ $(TESSOBJ)ccmain_osdetect.$(OBJ)\
+ $(TESSOBJ)ccmain_par_control.$(OBJ)\
+ $(TESSOBJ)ccmain_recogtraining.$(OBJ)\
+ $(TESSOBJ)ccmain_superscript.$(OBJ)\
+ $(TESSOBJ)ccmain_tessbox.$(OBJ)\
+ $(TESSOBJ)ccmain_tfacepp.$(OBJ)\
+ $(TESSOBJ)ccstruct_fontinfo.$(OBJ)\
+ $(TESSOBJ)ccstruct_params_training_featdef.$(OBJ)\
+ $(TESSOBJ)ccutil_ambigs.$(OBJ)\
+ $(TESSOBJ)ccutil_bitvector.$(OBJ)\
+ $(TESSOBJ)ccutil_indexmapbidi.$(OBJ)\
+ $(TESSOBJ)ccutil_universalambigs.$(OBJ)\
+ $(TESSOBJ)classify_adaptive.$(OBJ)\
+ $(TESSOBJ)classify_adaptmatch.$(OBJ)\
+ $(TESSOBJ)classify_blobclass.$(OBJ)\
+ $(TESSOBJ)classify_cluster.$(OBJ)\
+ $(TESSOBJ)classify_clusttool.$(OBJ)\
+ $(TESSOBJ)classify_cutoffs.$(OBJ)\
+ $(TESSOBJ)classify_featdefs.$(OBJ)\
+ $(TESSOBJ)classify_float2int.$(OBJ)\
+ $(TESSOBJ)classify_fpoint.$(OBJ)\
+ $(TESSOBJ)classify_intfeaturespace.$(OBJ)\
+ $(TESSOBJ)classify_intfx.$(OBJ)\
+ $(TESSOBJ)classify_intmatcher.$(OBJ)\
+ $(TESSOBJ)classify_intproto.$(OBJ)\
+ $(TESSOBJ)classify_kdtree.$(OBJ)\
+ $(TESSOBJ)classify_mf.$(OBJ)\
+ $(TESSOBJ)classify_mfdefs.$(OBJ)\
+ $(TESSOBJ)classify_mfoutline.$(OBJ)\
+ $(TESSOBJ)classify_mfx.$(OBJ)\
+ $(TESSOBJ)classify_normfeat.$(OBJ)\
+ $(TESSOBJ)classify_normmatch.$(OBJ)\
+ $(TESSOBJ)classify_ocrfeatures.$(OBJ)\
+ $(TESSOBJ)classify_outfeat.$(OBJ)\
+ $(TESSOBJ)classify_picofeat.$(OBJ)\
+ $(TESSOBJ)classify_protos.$(OBJ)\
+ $(TESSOBJ)classify_shapeclassifier.$(OBJ)\
+ $(TESSOBJ)classify_shapetable.$(OBJ)\
+ $(TESSOBJ)classify_tessclassifier.$(OBJ)\
+ $(TESSOBJ)classify_trainingsample.$(OBJ)\
+ $(TESSOBJ)cutil_emalloc.$(OBJ)\
+ $(TESSOBJ)cutil_oldlist.$(OBJ)\
+ $(TESSOBJ)dict_hyphen.$(OBJ)\
+ $(TESSOBJ)textord_equationdetectbase.$(OBJ)\
+ $(TESSOBJ)wordrec_associate.$(OBJ)\
+ $(TESSOBJ)wordrec_chop.$(OBJ)\
+ $(TESSOBJ)wordrec_chopper.$(OBJ)\
+ $(TESSOBJ)wordrec_drawfx.$(OBJ)\
+ $(TESSOBJ)wordrec_findseam.$(OBJ)\
+ $(TESSOBJ)wordrec_gradechop.$(OBJ)\
+ $(TESSOBJ)wordrec_language_model.$(OBJ)\
+ $(TESSOBJ)wordrec_lm_consistency.$(OBJ)\
+ $(TESSOBJ)wordrec_lm_pain_points.$(OBJ)\
+ $(TESSOBJ)wordrec_lm_state.$(OBJ)\
+ $(TESSOBJ)wordrec_outlines.$(OBJ)\
+ $(TESSOBJ)wordrec_params_model.$(OBJ)\
+ $(TESSOBJ)wordrec_pieces.$(OBJ)\
+ $(TESSOBJ)wordrec_plotedges.$(OBJ)\
+ $(TESSOBJ)wordrec_render.$(OBJ)\
+ $(TESSOBJ)wordrec_segsearch.$(OBJ)\
+ $(TESSOBJ)wordrec_wordclass.$(OBJ)
+
+
+#TESSERACT_LEGACY=$(TESSERACT_LEGACY_OBJS)
+TESSERACT_LEGACY=
+
+TESS_ROMFS_ARGS=\
+ -c -d Resource/ -P .$(D)Resource$(D) Tesseract$(D)*
diff --git a/base/tessocr.cpp b/base/tessocr.cpp
new file mode 100644
index 000000000..54881cb47
--- /dev/null
+++ b/base/tessocr.cpp
@@ -0,0 +1,443 @@
+#include "tesseract/baseapi.h"
+#include "tesseract/genericvector.h"
+#include "tesseract/serialis.h"
+
+extern "C"
+{
+
+#include "allheaders.h"
+#include "stdpre.h"
+#include "tessocr.h"
+#include "gserrors.h"
+#include "gp.h"
+#include "gssprintf.h"
+#include "gxiodev.h"
+#include "stream.h"
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#undef DEBUG_ALLOCS
+#ifdef DEBUG_ALLOCS
+#undef printf
+static int event = 0;
+#endif
+
+void *leptonica_malloc(size_t blocksize)
+{
+ void *ret = malloc(blocksize);
+#ifdef DEBUG_ALLOCS
+ printf("%d LEPTONICA_MALLOC %d -> %p\n", event++, (int)blocksize, ret);
+ fflush(stdout);
+#endif
+ return ret;
+}
+
+void *leptonica_calloc(size_t numelm, size_t elemsize)
+{
+ void *ret = calloc(numelm, elemsize);
+#ifdef DEBUG_ALLOCS
+ printf("%d LEPTONICA_CALLOC %d,%d -> %p\n", event++, (int)numelm, (int)elemsize, ret);
+ fflush(stdout);
+#endif
+ return ret;
+}
+
+void *leptonica_realloc(void *ptr, size_t blocksize)
+{
+ void *ret = realloc(ptr, blocksize);
+#ifdef DEBUG_ALLOCS
+ printf("%d LEPTONICA_REALLOC %p,%d -> %p\n", event++, ptr, (int)blocksize, ret);
+ fflush(stdout);
+#endif
+ return ret;
+}
+
+void leptonica_free(void *ptr)
+{
+#ifdef DEBUG_ALLOCS
+ printf("%d LEPTONICA_FREE %p\n", event++, ptr);
+ fflush(stdout);
+#endif
+ free(ptr);
+}
+
+/* Convert from gs format bitmaps to leptonica format bitmaps. */
+static int convert2pix(l_uint32 *data, int w, int h, int raster)
+{
+ int x;
+ int w4 = ((w+3)>>2)-1;
+ int extra = raster - w >= 4;
+ l_uint32 mask = ~(0xFFFFFFFF<<((w&3)*8));
+
+ for (; h > 0; h--) {
+ l_uint32 v;
+ for (x = w4; x > 0; x--) {
+ v = *data;
+ *data++ = (v>>24) | ((v & 0xff0000)>>8) | ((v & 0xff00)<<8) | (v<<24);
+ }
+ v = *data;
+ *data++ = (v>>24) | ((v & 0xff0000)>>8) | ((v & 0xff00)<<8) | (v<<24) | mask;
+ if (extra)
+ *data++ = 0xFFFFFFFF;
+ }
+
+ return w + extra*4;
+}
+
+static gs_memory_t *leptonica_mem;
+
+static void *my_leptonica_malloc(size_t size)
+{
+ void *ret = gs_alloc_bytes(leptonica_mem, size, "leptonica_malloc");
+#ifdef DEBUG_ALLOCS
+ printf("%d MY_LEPTONICA_MALLOC(%p) %d -> %p\n", event++, leptonica_mem, (int)size, ret);
+ fflush(stdout);
+#endif
+ return ret;
+}
+
+static void my_leptonica_free(void *ptr)
+{
+#ifdef DEBUG_ALLOCS
+ printf("%d MY_LEPTONICA_FREE(%p) %p\n", event++, leptonica_mem, ptr);
+ fflush(stdout);
+#endif
+ gs_free_object(leptonica_mem, ptr, "leptonica_free");
+}
+
+static bool
+load_file(const char* filename, GenericVector<char>* data) {
+ bool result = false;
+ gp_file *fp = gp_fopen(leptonica_mem, filename, "rb");
+ if (fp == NULL)
+ return false;
+
+ gp_fseek(fp, 0, SEEK_END);
+ int size = (int)gp_ftell(fp);
+ gp_fseek(fp, 0, SEEK_SET);
+ // Trying to open a directory on Linux sets size to LONG_MAX. Catch it here.
+ if (size > 0 && size < LONG_MAX) {
+ // reserve an extra byte in case caller wants to append a '\0' character
+ data->reserve(size + 1);
+ data->resize_no_init(size);
+ result = static_cast<long>(gp_fread(&(*data)[0], 1, size, fp)) == size;
+ }
+ gp_fclose(fp);
+ return result;
+}
+
+static bool
+tess_file_reader(const char *fname, GenericVector<char> *out)
+{
+ const char *file = fname;
+ const char *s;
+ char text[PATH_MAX];
+ int code = 0;
+ stream *ps;
+ gx_io_device *iodev;
+
+ for (s = fname; *s; s++)
+ if (*s == '\\' || *s == '/')
+ file = s+1;
+
+ /* FIXME: Try loading 'file' from gs specific paths */
+ iodev = gs_findiodevice(leptonica_mem, (const byte *)"%rom", 4);
+ gs_snprintf(text, sizeof(text), "Resource/Tesseract/%s", file);
+ if (iodev) {
+ long size;
+ long i;
+ byte *copy;
+ /* We cannot call iodev->procs.file_status here to get the
+ * length, because C and C++ differ in their definition of
+ * stat on linux. */
+ size = (long)romfs_file_len(leptonica_mem, text);
+ if (size < 0)
+ return false;
+ out->reserve(size + 1);
+ out->resize_no_init(size);
+ code = iodev->procs.open_file(iodev, text, strlen(text), "rb", &ps, leptonica_mem);
+ if (code < 0)
+ return false;
+ copy = (byte *)&(*out)[0];
+ i = 0;
+ while (i < size) {
+ long a, n = size - i;
+ s_process_read_buf(ps);
+ a = sbufavailable(ps);
+ if (n > a)
+ n = a;
+ memcpy(copy+i, sbufptr(ps), a);
+ i += a;
+ sbufskip(ps, a);
+ }
+ sclose(ps);
+ gs_free_object(leptonica_mem, ps, "stream(tess_file_reader)");
+ return true;
+ }
+
+ /* Fall back to gp_file access, first under Resource/Tesseract */
+ if (load_file(text, out))
+ return true;
+
+ /* Then under TESSDATA */
+ return load_file(fname, out);
+}
+
+int
+ocr_init_api(gs_memory_t *mem, const char *language, void **state)
+{
+ tesseract::TessBaseAPI *api;
+
+ leptonica_mem = mem->non_gc_memory;
+ setPixMemoryManager(my_leptonica_malloc, my_leptonica_free);
+ api = new tesseract::TessBaseAPI();
+
+ *state = NULL;
+
+ if (api == NULL) {
+ leptonica_mem = NULL;
+ setPixMemoryManager(malloc, free);
+ return_error(gs_error_VMerror);
+ }
+
+ // Initialize tesseract-ocr with English, without specifying tessdata path
+ if (api->Init(NULL, 0, /* data, data_size */
+ language,
+ tesseract::OcrEngineMode::OEM_DEFAULT,
+ NULL, 0, /* configs, configs_size */
+ NULL, NULL, /* vars_vec */
+ false, /* set_only_non_debug_params */
+ &tess_file_reader)) {
+ delete api;
+ leptonica_mem = NULL;
+ setPixMemoryManager(malloc, free);
+ return_error(gs_error_unknownerror);
+ }
+
+ *state = (void *)api;
+
+ return 0;
+}
+
+void
+ocr_fin_api(gs_memory_t *mem, void *api_)
+{
+ tesseract::TessBaseAPI *api = (tesseract::TessBaseAPI *)api_;
+
+ if (api == NULL)
+ return;
+
+ api->End();
+ delete api;
+ leptonica_mem = NULL;
+ setPixMemoryManager(malloc, free);
+}
+
+static Pix *
+ocr_set_image(tesseract::TessBaseAPI *api,
+ int w, int h, void *data, int xres, int yres)
+{
+ Pix *image = pixCreateHeader(w, h, 8);
+
+ if (image == NULL)
+ return NULL;
+ pixSetData(image, (l_uint32 *)data);
+ pixSetPadBits(image, 1);
+ pixSetXRes(image, xres);
+ pixSetYRes(image, yres);
+ api->SetImage(image);
+ //pixWrite("test.pnm", image, IFF_PNM);
+
+ return image;
+}
+
+static void
+ocr_clear_image(Pix *image)
+{
+ pixSetData(image, NULL);
+ pixDestroy(&image);
+}
+
+static int
+do_ocr_image(gs_memory_t *mem,
+ int w, int h, int bpp, int raster,
+ int xres, int yres, void *data, int restore,
+ int hocr, int pagecount,
+ const char *language,
+ char **out)
+{
+ char *outText;
+ tesseract::TessBaseAPI *api;
+ int code;
+ Pix *image;
+
+ *out = NULL;
+
+ if (language == NULL || *language == 0)
+ language = "eng";
+ code = ocr_init_api(mem, language, (void **)&api);
+ if (code < 0)
+ return code;
+
+ if (bpp == 8)
+ w = convert2pix((l_uint32 *)data, w, h, raster);
+
+ image = ocr_set_image(api, w, h, data, xres, yres);
+ if (image == NULL) {
+ if (restore && bpp == 8)
+ convert2pix((l_uint32 *)data, w, h, raster);
+ ocr_fin_api(mem, api);
+ return_error(gs_error_VMerror);
+ }
+
+ // Get OCR result
+ //pixWrite("test.pnm", image, IFF_PNM);
+ if (hocr) {
+ api->SetVariable("hocr_font_info", "true");
+ api->SetVariable("hocr_char_boxes", "true");
+ outText = api->GetHOCRText(pagecount);
+ }
+ else
+ outText = api->GetUTF8Text();
+
+ ocr_clear_image(image);
+
+ /* Convert the image back. */
+ if (restore && bpp == 8)
+ w = convert2pix((l_uint32 *)data, w, h, raster);
+
+ // Copy the results into a gs controlled block.
+ if (outText)
+ {
+ size_t len = strlen(outText)+1;
+ *out = (char *)(void *)gs_alloc_bytes(mem, len, "ocr_to_utf8");
+ if (*out)
+ memcpy(*out, outText, len);
+ }
+
+ delete [] outText;
+
+ // Destroy used object and release memory
+ ocr_fin_api(mem, api);
+
+ return 0;
+}
+
+int ocr_image_to_hocr(gs_memory_t *mem,
+ int w, int h, int bpp, int raster,
+ int xres, int yres, void *data, int restore,
+ int pagecount, const char *language, char **out)
+{
+ return do_ocr_image(mem, w, h, bpp, raster, xres, yres, data,
+ restore, 1, pagecount, language, out);
+}
+
+int ocr_image_to_utf8(gs_memory_t *mem,
+ int w, int h, int bpp, int raster,
+ int xres, int yres, void *data, int restore,
+ const char *language, char **out)
+{
+ return do_ocr_image(mem, w, h, bpp, raster, xres, yres, data,
+ restore, 0, 0, language, out);
+}
+
+int
+ocr_recognise(void *api_, int w, int h, void *data,
+ int xres, int yres,
+ int (*callback)(void *, const char *, const int *, const int *, const int *, int),
+ void *arg)
+{
+ tesseract::TessBaseAPI *api = (tesseract::TessBaseAPI *)api_;
+ Pix *image;
+ int code;
+ int word_bbox[4];
+ int char_bbox[4];
+ int line_bbox[4];
+ bool bold, italic, underlined, monospace, serif, smallcaps;
+ int pointsize, font_id;
+ const char* font_name;
+
+ if (api == NULL)
+ return 0;
+
+ image = ocr_set_image(api, w, h, data, xres, yres);
+ if (image == NULL)
+ return_error(gs_error_VMerror);
+
+ code = api->Recognize(NULL);
+ if (code >= 0) {
+ /* Bingo! */
+ tesseract::ResultIterator *res_it = api->GetIterator();
+
+ while (!res_it->Empty(tesseract::RIL_BLOCK)) {
+ if (res_it->Empty(tesseract::RIL_WORD)) {
+ res_it->Next(tesseract::RIL_WORD);
+ continue;
+ }
+
+ res_it->BoundingBox(tesseract::RIL_TEXTLINE,
+ line_bbox, line_bbox+1,
+ line_bbox+2, line_bbox+3);
+ res_it->BoundingBox(tesseract::RIL_WORD,
+ word_bbox, word_bbox+1,
+ word_bbox+2, word_bbox+3);
+ font_name = res_it->WordFontAttributes(&bold,
+ &italic,
+ &underlined,
+ &monospace,
+ &serif,
+ &smallcaps,
+ &pointsize,
+ &font_id);
+ do {
+ const char *graph = res_it->GetUTF8Text(tesseract::RIL_SYMBOL);
+ if (graph && graph[0] != 0) {
+ res_it->BoundingBox(tesseract::RIL_SYMBOL,
+ char_bbox, char_bbox+1,
+ char_bbox+2, char_bbox+3);
+ code = callback(arg, graph, line_bbox, word_bbox, char_bbox, pointsize);
+ if (code < 0)
+ {
+ delete res_it;
+ return code;
+ }
+ }
+ res_it->Next(tesseract::RIL_SYMBOL);
+ } while (!res_it->Empty(tesseract::RIL_BLOCK) &&
+ !res_it->IsAtBeginningOf(tesseract::RIL_WORD));
+ }
+ delete res_it;
+ code = code;
+ }
+
+ ocr_clear_image(image);
+
+ return code;
+}
+
+};
+
+/* Currently tesseract is the only C++ lib we have.
+ * We may need to revisit this if this changes.
+ */
+void *operator new(size_t size)
+{
+ return leptonica_malloc(size);
+}
+
+void operator_delete(void *ptr)
+{
+ leptonica_free(ptr);
+}
+
+void *operator new[](size_t size)
+{
+ return leptonica_malloc(size);
+}
+
+void operator delete[](void *ptr)
+{
+ leptonica_free(ptr);
+}
diff --git a/base/tessocr.h b/base/tessocr.h
new file mode 100644
index 000000000..c5e7967b9
--- /dev/null
+++ b/base/tessocr.h
@@ -0,0 +1,45 @@
+/* Copyright (C) 2020 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied,
+ modified or distributed except as expressly authorized under the terms
+ of the license contained in the file LICENSE in this distribution.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+
+/* Simple veneer for tesseract */
+
+#ifndef tessocr_h_INCLUDED
+# define tessocr_h_INCLUDED
+
+#include "gsmemory.h"
+
+int ocr_image_to_utf8(gs_memory_t *mem,
+ int w, int h, int bpp, int raster,
+ int xres, int yres,
+ void *data, int restore_data,
+ const char *language, char **out);
+
+int ocr_image_to_hocr(gs_memory_t *mem,
+ int w, int h, int bpp, int raster,
+ int xres, int yres, void *data, int restore,
+ int pagecount, const char *language, char **out);
+
+int ocr_init_api(gs_memory_t *mem, const char *language, void **state);
+
+void ocr_fin_api(gs_memory_t *mem, void *api_);
+
+int ocr_recognise(void *api_, int w, int h, void *data,
+ int xres, int yres,
+ int (*callback)(void *, const char *, const int *, const int *, const int *, int),
+ void *arg);
+
+#endif
+
diff --git a/base/unix-gcc.mak b/base/unix-gcc.mak
index ed01bfc3f..39685d2ae 100644
--- a/base/unix-gcc.mak
+++ b/base/unix-gcc.mak
@@ -667,6 +667,7 @@ include $(GLSRCDIR)/ldf_jb2.mak
include $(GLSRCDIR)/lwf_jp2.mak
include $(GLSRCDIR)/openjpeg.mak
include $(GLSRCDIR)/cal.mak
+include $(GLSRCDIR)/ocr.mak
include $(GLSRCDIR)/jpegxr.mak
include $(GLSRCDIR)/expat.mak
diff --git a/base/winlib.mak b/base/winlib.mak
index d9f23100d..c6ea4bc7b 100644
--- a/base/winlib.mak
+++ b/base/winlib.mak
@@ -135,6 +135,12 @@ BEGINFILES=$(GLGENDIR)\ccf32.tr\
#!include $(COMMONDIR)/pcdefs.mak
#!include $(COMMONDIR)/generic.mak
!include $(GLSRCDIR)\gs.mak
+
+!if "$(OCR_VERSION)"=="1"
+!include $(GLSRCDIR)\leptonica.mak
+!include $(GLSRCDIR)\tesseract.mak
+!endif
+
!include $(GLSRCDIR)\lib.mak
!include $(GLSRCDIR)\freetype.mak
!if "$(UFST_BRIDGE)"=="1"
@@ -150,6 +156,7 @@ BEGINFILES=$(GLGENDIR)\ccf32.tr\
!include $(GLSRCDIR)\lwf_jp2.mak
!include $(GLSRCDIR)\openjpeg.mak
!include $(GLSRCDIR)\cal.mak
+!include $(GLSRCDIR)\ocr.mak
!include $(GLSRCDIR)\expat.mak
!include $(GLSRCDIR)\jpegxr.mak
diff --git a/configure.ac b/configure.ac
index 5a005ff16..d99b371ab 100644
--- a/configure.ac
+++ b/configure.ac
@@ -818,6 +818,163 @@ AC_SUBST(SYNC)
AC_SUBST(PTHREAD_LIBS)
AC_SUBST(RECURSIVE_MUTEXATTR)
+dnl Tesseract/Leptonica detection
+TESSERACTDIR=tesseract
+LEPTONICADIR=leptonica
+OCR_VERSION=0
+LEPTONICAINCLUDE=
+TESSERACTINCLUDE=
+TESSERACT_LIBS=
+OCR_DEVS=
+
+AC_ARG_WITH([tesseract], AC_HELP_STRING([--without-tesseract],
+ [do not try to use the Tesseract library for OCR]))
+
+if test x$with_tesseract != xno; then
+ AC_MSG_CHECKING([for local Tesseract library source])
+ if test -d $srcdir/tesseract && test -d $srcdir/leptonica; then
+ AC_MSG_RESULT([yes])
+ AC_LANG_PUSH(C++)
+ AC_TRY_COMPILE([],
+ [return 0;],
+ [HAVE_CXX_COMPILER=yes],
+ [HAVE_CXX_COMPILER=no])
+ if test x$HAVE_CXX_COMPILER != xyes; then
+ AC_MSG_WARN([Disabling tesseract as no working C++ compiler])
+ else
+ dnl --------------------------------------------------
+ dnl check for sse4.1, avx, avx2 or fma
+ dnl --------------------------------------------------
+ AC_MSG_CHECKING([sse4.1 support])
+ save_cxxflags=$CXXFLAGS
+ TESS_CXXFLAGS=""
+ CXXFLAGS="$CXXFLAGS -msse4.1"
+
+ TESS_SSE4_1=""
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include <emmintrin.h>
+ #include <smmintrin.h>],
+ [__m128i input1;
+ unsigned char buf1[[128]];
+ input1 = _mm_loadu_si128((const __m128i *)buf1);
+ input1 = _mm_hadd_epi32(input1, input1);
+ return(0);
+ ])],
+ [TESS_SSE4_1="-msse4.1"],
+ [TESS_SSE4_1=""])
+
+ if test "x$TESS_SSE4_1" != x; then
+ AC_MSG_RESULT(yes)
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_SSE4_1"
+ else
+ AC_MSG_RESULT(no)
+ fi
+
+ AC_MSG_CHECKING([avx support])
+ CXXFLAGS="$save_cxxflags -mavx"
+
+ TESS_AVX=""
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include <immintrin.h>],
+ [__m256d input1 = _mm256_setzero_pd();
+ input1 = _mm256_hadd_pd(input1, input1);
+ return(0);])],
+ [TESS_AVX="-mavx"],
+ [TESS_AVX=""])
+
+ if test "x$TESS_AVX" != x; then
+ AC_MSG_RESULT(yes)
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_AVX"
+ else
+ AC_MSG_RESULT(no)
+ fi
+
+ AC_MSG_CHECKING([avx2 support])
+ CXXFLAGS="$save_cxxflags -mavx2"
+
+ TESS_AVX2=""
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include <immintrin.h>],
+ [__m256i input1;
+ unsigned char buf1[[256]];
+ input1 = _mm256_loadu_si256((const __m256i *)buf1);
+ input1 = _mm256_adds_epu8(input1, input1);
+ return(0);])],
+ [TESS_AVX2="-mavx2"],
+ [TESS_AVX2=""])
+
+ if test "x$TESS_AVX2" != x; then
+ AC_MSG_RESULT(yes)
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_AVX2"
+ else
+ AC_MSG_RESULT(no)
+ fi
+
+ AC_MSG_CHECKING([fma support])
+ CXXFLAGS="$save_cxxflags -mfma"
+
+ TESS_FMA=""
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include <immintrin.h>],
+ [__m256d input1 = _mm256_setzero_pd();
+ input1 = _mm256_fmadd_pd(input1, input1, input1);
+ return(0);])],
+ [TESS_FMA="-mfma"],
+ [TESS_FMA=""])
+
+ if test "x$TESS_FMA" != x; then
+ AC_MSG_RESULT(yes)
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_FMA"
+ else
+ AC_MSG_RESULT(no)
+ fi
+
+ AC_MSG_CHECKING([neon support])
+ CXXFLAGS="$save_cxxflags -mfpu=neon -mcpu=cortex-a53"
+
+ TESS_NEON=""
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include "arm_neon.h"],
+ [int32x4_t round = vdupq_n_s32(10);
+ return(0);])],
+ [TESS_NEON="-mfpu=neon -mcpu=cortex-a53 -D__ARM_NEON__"],
+ [TESS_NEON=""])
+
+ if test "x$TESS_NEON" != x; then
+ AC_MSG_RESULT(yes)
+ TESS_CXXFLAGS="$TESS_CXXFLAGS -DHAVE_NEON"
+ else
+ AC_MSG_RESULT(no)
+ fi
+
+ CXXFLAGS="$save_cxxflags"
+
+ OCR_VERSION=1
+ OCR_DEVS="\$(DD)ocr.dev \$(DD)hocr.dev \$(DD)pdfocr8.dev \$(DD)pdfocr24.dev \$(DD)pdfocr32.dev"
+ LEPTONICAINCLUDE="include base/leptonica.mak"
+ TESSERACTINCLUDE="include base/tesseract.mak"
+ TESSERACT_LIBS="-lstdc++"
+ fi
+ AC_LANG_POP()
+ else
+ AC_MSG_RESULT([no])
+ fi
+fi
+
+AC_SUBST(TESSERACT_LIBS)
+AC_SUBST(LEPTONICAINCLUDE)
+AC_SUBST(TESSERACTINCLUDE)
+AC_SUBST(LEPTONICADIR)
+AC_SUBST(TESSERACTDIR)
+AC_SUBST(OCR_DEVS)
+AC_SUBST(OCR_VERSION)
+AC_SUBST(TESS_AVX)
+AC_SUBST(TESS_AVX2)
+AC_SUBST(TESS_FMA)
+AC_SUBST(TESS_SSE4_1)
+AC_SUBST(TESS_NEON)
+AC_SUBST(TESS_CXXFLAGS)
+
dnl Tests for iconv (Needed for OpenPrinting Vector, "opvp" output device)
AC_ARG_WITH(libiconv,
[AC_HELP_STRING([--with-libiconv=@<:@no/gnu/native@:>@],
diff --git a/devices/devs.mak b/devices/devs.mak
index fe736800a..9ae6c87f4 100644
--- a/devices/devs.mak
+++ b/devices/devs.mak
@@ -1455,6 +1455,28 @@ $(DD)pamcmyk32.dev : $(pxm_) $(GLD)page.dev $(GDEV) \
$(DD)pam.dev : $(pxm_) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)pam $(pxm_)
+### --------------- OCR device --------------- ###
+
+ocr_=$(DEVOBJ)gdevocr.$(OBJ)
+libocr_dev=$(DEVOBJ)libocr.dev
+ocr_i_=-include $(DEVOBJ)libocr
+
+$(DEVOBJ)gdevocr.$(OBJ) : $(DEVSRC)gdevocr.c\
+ $(gdevprn_h) $(gdevpccm_h) $(gscdefs_h) $(ocr__h) $(DEVS_MAK) $(MAKEDIRS)
+ $(CC_) $(I_)$(DEVI_) $(II)$(PI_)$(_I) $(PCF_) $(GLF_) $(DEVO_)gdevocr.$(OBJ) $(C_) $(DEVSRC)gdevocr.c
+
+$(DD)ocr.dev : $(libocr_dev) $(ocr_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+ $(SETPDEV2) $(DD)ocr $(ocr_)
+ $(ADDMOD) $(DD)ocr $(ocr_i_)
+
+### --------------- OCR device --------------- ###
+
+$(DD)hocr.dev : $(libocr_dev) $(hocr_) $(GLD)page.dev $(GDEV) \
+ $(DEVS_MAK) $(MAKEDIRS)
+ $(SETPDEV2) $(DD)hocr $(hocr_)
+ $(ADDMOD) $(DD)hocr $(hocr_i_)
+
### --------------- Portable Network Graphics file format --------------- ###
### Requires libpng 0.81 and zlib 0.95 (or more recent versions). ###
### See png.mak and zlib.mak for more details. ###
@@ -1915,6 +1937,9 @@ $(DEVOBJ)gdevcmykog.$(OBJ) : $(DEVSRC)gdevcmykog.c $(GDEV) \
$(DEVCC) $(DEVO_)gdevcmykog.$(OBJ) $(C_) $(DEVSRC)gdevcmykog.c
### -------- PDF as an image downscaled device --------------------- ###
+
+gdevpdfimg_h=$(DEVSRC)gdevpdfimg.h
+
$(DD)pdfimage8.dev : $(DEVOBJ)gdevpdfimg.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
$(SETPDEV2) $(DD)pdfimage8 $(DEVOBJ)gdevpdfimg.$(OBJ)
$(ADDMOD) $(DD)pdfimage8 -include $(GLD)page
@@ -1932,11 +1957,31 @@ $(DD)PCLm.dev : $(DEVOBJ)gdevpdfimg.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(
$(ADDMOD) $(DD)PCLm -include $(GLD)page
$(DEVOBJ)gdevpdfimg.$(OBJ) : $(DEVSRC)gdevpdfimg.c $(AK) $(gdevkrnlsclass_h) \
- $(DEVS_MAK) $(MAKEDIRS) $(arch_h) $(stdint__h) $(gdevprn_h) $(gxdownscale_h) \
+ $(DEVS_MAK) $(arch_h) $(stdint__h) $(gdevprn_h) $(gxdownscale_h) \
$(stream_h) $(spprint_h) $(time__h) $(smd5_h) $(sstring_h) $(strimpl_h) \
- $(slzwx_h) $(szlibx_h) $(jpeglib__h) $(sdct_h) $(srlx_h) $(gsicc_cache_h) $(sjpeg_h)
+ $(slzwx_h) $(szlibx_h) $(jpeglib__h) $(sdct_h) $(srlx_h) $(gsicc_cache_h) $(sjpeg_h) $(gdevpdfimg_h) $(MAKEDIRS)
$(DEVCC) $(DEVO_)gdevpdfimg.$(OBJ) $(C_) $(DEVSRC)gdevpdfimg.c
+### -------- PDF image with OCRd text overlay --------------------- ###
+
+$(DD)pdfocr8.dev : $(DEVOBJ)gdevpdfocr.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+ $(SETPDEV2) $(DD)pdfocr8 $(DEVOBJ)gdevpdfocr.$(OBJ)
+ $(ADDMOD) $(DD)pdfocr8 -include $(GLD)page
+
+$(DD)pdfocr24.dev : $(DEVOBJ)gdevpdfocr.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+ $(SETPDEV2) $(DD)pdfocr24 $(DEVOBJ)gdevpdfocr.$(OBJ)
+ $(ADDMOD) $(DD)pdfocr24 -include $(GLD)page
+
+$(DD)pdfocr32.dev : $(DEVOBJ)gdevpdfocr.$(OBJ) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
+ $(SETPDEV2) $(DD)pdfocr32 $(DEVOBJ)gdevpdfocr.$(OBJ)
+ $(ADDMOD) $(DD)pdfocr32 -include $(GLD)page
+
+$(DEVOBJ)gdevpdfocr.$(OBJ) : $(DEVSRC)gdevpdfocr.c $(AK) $(gdevkrnlsclass_h) \
+ $(DEVS_MAK) $(MAKEDIRS) $(arch_h) $(stdint__h) $(gdevprn_h) $(gxdownscale_h) \
+ $(stream_h) $(spprint_h) $(time__h) $(smd5_h) $(sstring_h) $(strimpl_h) \
+ $(slzwx_h) $(szlibx_h) $(jpeglib__h) $(sdct_h) $(srlx_h) $(gsicc_cache_h) $(sjpeg_h) $(gdevpdfimg_h)
+ $(DEVCC) $(DEVO_)gdevpdfocr.$(OBJ) $(C_) $(DEVSRC)gdevpdfocr.c
+
### -------- URF device --------------------- ###
urf=$(DEVOBJ)gdevurf.$(OBJ)
$(DD)urfgray.dev : $(urf) $(GLD)page.dev $(GDEV) $(DEVS_MAK) $(MAKEDIRS)
diff --git a/devices/gdevocr.c b/devices/gdevocr.c
new file mode 100644
index 000000000..d3bd45a1f
--- /dev/null
+++ b/devices/gdevocr.c
@@ -0,0 +1,266 @@
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied,
+ modified or distributed except as expressly authorized under the terms
+ of the license contained in the file LICENSE in this distribution.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+
+#include "gdevprn.h"
+#include "gdevmem.h"
+#include "gdevpccm.h"
+#include "gscdefs.h"
+#include "gxgetbit.h"
+#include "tessocr.h"
+#include "gxdownscale.h"
+
+/* ------ The device descriptors ------ */
+
+/*
+ * Default X and Y resolution.
+ */
+#define X_DPI 72
+#define Y_DPI 72
+
+static dev_proc_print_page(ocr_print_page);
+static dev_proc_print_page(hocr_print_page);
+static dev_proc_get_params(ocr_get_params);
+static dev_proc_put_params(ocr_put_params);
+static dev_proc_open_device(hocr_open);
+static dev_proc_close_device(hocr_close);
+
+typedef struct gx_device_ocr_s gx_device_ocr;
+struct gx_device_ocr_s {
+ gx_device_common;
+ gx_prn_device_common;
+ gx_downscaler_params downscale;
+ char language[1024];
+ int page_count;
+};
+
+/* 8-bit gray bitmap -> UTF8 OCRd text */
+
+static const gx_device_procs ocr_procs =
+prn_color_params_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
+ gx_default_gray_map_rgb_color,
+ gx_default_gray_map_color_rgb,
+ ocr_get_params, ocr_put_params);
+const gx_device_ocr gs_ocr_device =
+{
+ prn_device_body(gx_device_ocr, ocr_procs, "ocr",
+ DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
+ X_DPI, Y_DPI,
+ 0, 0, 0, 0, /* margins */
+ 1, 8, 255, 0, 256, 0, ocr_print_page),
+ GX_DOWNSCALER_PARAMS_DEFAULTS
+};
+
+/* 8-bit gray bitmap -> HTML OCRd text */
+
+static const gx_device_procs hocr_procs =
+prn_color_params_procs(hocr_open, gdev_prn_bg_output_page, hocr_close,
+ gx_default_gray_map_rgb_color,
+ gx_default_gray_map_color_rgb,
+ ocr_get_params, ocr_put_params);
+const gx_device_ocr gs_hocr_device =
+{
+ prn_device_body(gx_device_ocr, hocr_procs, "hocr",
+ DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
+ X_DPI, Y_DPI,
+ 0, 0, 0, 0, /* margins */
+ 1, 8, 255, 0, 256, 0, hocr_print_page),
+ GX_DOWNSCALER_PARAMS_DEFAULTS
+};
+
+/* ------ Private definitions ------ */
+
+#define HOCR_HEADER "<html>\n <body>\n"
+#define HOCR_TRAILER " </body>\n</html>\n"
+
+static int
+hocr_open(gx_device *pdev)
+{
+ gx_device_ocr *dev = (gx_device_ocr *)pdev;
+
+ dev->page_count = 0;
+
+ return gdev_prn_open(pdev);
+}
+
+static int
+hocr_close(gx_device *pdev)
+{
+ gx_device_ocr *dev = (gx_device_ocr *)pdev;
+ gx_device_printer * const ppdev = (gx_device_printer *)pdev;
+
+ if (dev->page_count > 0 && dev->file != NULL) {
+ gp_fwrite(HOCR_TRAILER, 1, sizeof(HOCR_TRAILER)-1, dev->file);
+ }
+
+ return gdev_prn_close(pdev);
+}
+
+static int
+ocr_get_params(gx_device * dev, gs_param_list * plist)
+{
+ gx_device_ocr *pdev = (gx_device_ocr *)dev;
+ int code, ecode = 0;
+ gs_param_string langstr;
+
+ if (pdev->language[0]) {
+ langstr.data = (const byte *)pdev->language;
+ langstr.size = strlen(pdev->language);
+ langstr.persistent = false;
+ } else {
+ langstr.data = (const byte *)"eng";
+ langstr.size = 3;
+ langstr.persistent = false;
+ }
+ if ((code = param_write_string(plist, "OCRLanguage", &langstr)) < 0)
+ ecode = code;
+
+ if ((code = gx_downscaler_write_params(plist, &pdev->downscale,
+ GX_DOWNSCALER_PARAMS_MFS)) < 0)
+ ecode = code;
+
+ code = gdev_prn_get_params(dev, plist);
+ if (code < 0)
+ ecode = code;
+
+ return ecode;
+}
+
+static int
+ocr_put_params(gx_device *dev, gs_param_list *plist)
+{
+ gx_device_ocr *pdev = (gx_device_ocr *)dev;
+ int code, ecode = 0;
+ gs_param_string langstr;
+ const char *param_name;
+ size_t len;
+
+ switch (code = param_read_string(plist, (param_name = "OCRLanguage"), &langstr)) {
+ case 0:
+ len = langstr.size;
+ if (len >= sizeof(pdev->language))
+ len = sizeof(pdev->language)-1;
+ memcpy(pdev->language, langstr.data, len);
+ pdev->language[len] = 0;
+ break;
+ case 1:
+ break;
+ default:
+ ecode = code;
+ param_signal_error(plist, param_name, ecode);
+ }
+
+ code = gx_downscaler_read_params(plist, &pdev->downscale,
+ GX_DOWNSCALER_PARAMS_MFS);
+ if (code < 0)
+ {
+ ecode = code;
+ param_signal_error(plist, param_name, ecode);
+ }
+
+ code = gdev_prn_put_params(dev, plist);
+ if (code < 0)
+ ecode = code;
+
+ return ecode;
+}
+
+/* OCR a page and write it out. */
+static int
+do_ocr_print_page(gx_device_ocr * pdev, gp_file * file, int hocr)
+{
+ gs_memory_t *mem = pdev->memory;
+ int row;
+ byte *data = NULL;
+ char *out;
+ int factor = pdev->downscale.downscale_factor;
+ int height = gx_downscaler_scale(pdev->height, factor);
+ int width = gx_downscaler_scale(pdev->width, factor);
+ int raster = bitmap_raster(width*8);
+ gx_downscaler_t ds;
+ int code;
+
+ code = gx_downscaler_init(&ds,
+ (gx_device *)pdev,
+ 8, /* src_bpc */
+ 8, /* dst_bpc */
+ 1, /* num_comps */
+ factor,
+ 9, /* mfs */
+ NULL, 0); /* adjust_width_proc, width */
+ if (code < 0)
+ return code;
+
+ data = gs_alloc_bytes(pdev->memory,
+ raster * height,
+ "do_ocr_print_page");
+ if (data == NULL) {
+ gx_downscaler_fin(&ds);
+ code = gs_error_VMerror;
+ goto done;
+ }
+
+ for (row = 0; row < height && code >= 0; row++) {
+ code = gx_downscaler_getbits(&ds, data + row * raster, row);
+ }
+ gx_downscaler_fin(&ds);
+ if (code < 0)
+ goto done;
+
+ if (hocr)
+ code = ocr_image_to_hocr(pdev->memory,
+ width, height,
+ 8, raster,
+ (int)pdev->HWResolution[0],
+ (int)pdev->HWResolution[1],
+ data, 0, pdev->page_count,
+ "eng", &out);
+ else
+ code = ocr_image_to_utf8(pdev->memory,
+ width, height,
+ 8, raster,
+ (int)pdev->HWResolution[0],
+ (int)pdev->HWResolution[1],
+ data, 0, "eng", &out);
+ if (code < 0)
+ goto done;
+ if (out)
+ {
+ if (hocr && pdev->page_count == 0) {
+ gp_fwrite(HOCR_HEADER, 1, sizeof(HOCR_HEADER)-1, file);
+ }
+ gp_fwrite(out, 1, strlen(out), file);
+ gs_free_object(pdev->memory, out, "ocr_image_to_utf8");
+ }
+
+ done:
+ if (data)
+ gs_free_object(pdev->memory, data, "do_ocr_print_page");
+ pdev->page_count++;
+
+ return code;
+}
+
+static int
+ocr_print_page(gx_device_printer * pdev, gp_file * file)
+{
+ return do_ocr_print_page((gx_device_ocr *)pdev, file, 0);
+}
+
+static int
+hocr_print_page(gx_device_printer * pdev, gp_file * file)
+{
+ return do_ocr_print_page((gx_device_ocr *)pdev, file, 1);
+}
diff --git a/devices/gdevpdfimg.c b/devices/gdevpdfimg.c
index 0272c0566..a17ca90be 100644
--- a/devices/gdevpdfimg.c
+++ b/devices/gdevpdfimg.c
@@ -30,6 +30,8 @@
#include "gsicc_cache.h"
#include "sjpeg.h"
+#include "gdevpdfimg.h"
+
#define COMPRESSION_NONE 1 /* dump mode */
#define COMPRESSION_LZW 2 /* Lempel-Ziv & Welch */
#define COMPRESSION_FLATE 3
@@ -48,58 +50,9 @@ static struct compression_string {
{ 0, NULL }
};
-int pdf_image_open(gx_device *pdev);
int PCLm_open(gx_device *pdev);
-int pdf_image_close(gx_device * pdev);
int PCLm_close(gx_device * pdev);
-int pdf_image_put_params_downscale(gx_device * dev, gs_param_list * plist);
-int pdf_image_put_params_downscale_cmyk(gx_device * dev, gs_param_list * plist);
-int pdf_image_put_params_downscale_cmyk_ets(gx_device * dev, gs_param_list * plist);
-int pdf_image_get_params_downscale(gx_device * dev, gs_param_list * plist);
-int pdf_image_get_params_downscale_cmyk(gx_device * dev, gs_param_list * plist);
-int pdf_image_get_params_downscale_cmyk_ets(gx_device * dev, gs_param_list * plist);
-
-typedef struct pdfimage_page_s {
- int ImageObjectNumber;
- gs_offset_t ImageOffset;int LengthObjectNumber;
- gs_offset_t LengthOffset;
- int PageStreamObjectNumber;
- gs_offset_t PageStreamOffset;
- int PageDictObjectNumber;
- gs_offset_t PageDictOffset;
- void *next;
-} pdfimage_page;
-
-typedef struct PCLm_temp_file_s {
- char file_name[gp_file_name_sizeof];
- gp_file *file;
- stream *strm;
- stream *save;
- byte *strm_buf;
-} PCLm_temp_file_t;
-
-typedef struct gx_device_pdf_image_s {
- gx_device_common;
- gx_prn_device_common;
- unsigned char Compression;
- gx_downscaler_params downscale;
- int StripHeight;
- float QFactor;
- int JPEGQ;
- gsicc_link_t *icclink;
- stream *strm;
- byte *strm_buf;
- int NumPages;
- gs_offset_t RootOffset;
- gs_offset_t PagesOffset;
- gs_offset_t xrefOffset;
- pdfimage_page *Pages;
- PCLm_temp_file_t xref_stream;
- PCLm_temp_file_t temp_stream;
- int NextObject;
-} gx_device_pdf_image;
-
-static dev_proc_print_page(pdf_image_print_page);
+
/* ------ The pdfimage8 device ------ */
@@ -291,11 +244,11 @@ static int gdev_pdf_image_begin_page(gx_device_pdf_image *pdf_dev,
}
pdf_dev->strm_buf = gs_alloc_bytes(pdf_dev->memory->non_gc_memory, pdf_dev->width * (pdf_dev->color_info.depth / 8),
"pdfimage_open_temp_stream(strm_buf)");
- if (pdf_dev->strm_buf == 0) {
+ if (pdf_dev->strm_buf == NULL) {
pdf_dev->strm->file = NULL; /* Don't close underlying file when we free the stream */
gs_free_object(pdf_dev->memory->non_gc_memory, pdf_dev->strm,
"pdfimage_open_temp_stream(strm)");
- pdf_dev->strm = 0;
+ pdf_dev->strm = NULL;
gs_free_object(pdf_dev->memory->non_gc_memory, page, "pdfimage create new page");
return_error(gs_error_VMerror);
}
@@ -303,6 +256,20 @@ static int gdev_pdf_image_begin_page(gx_device_pdf_image *pdf_dev,
stream_puts(pdf_dev->strm, "%PDF-1.3\n");
stream_puts(pdf_dev->strm, "%\307\354\217\242\n");
+
+ if (pdf_dev->ocr.file_init) {
+ code = pdf_dev->ocr.file_init(pdf_dev);
+ if (code < 0) {
+ gs_free_object(pdf_dev->memory->non_gc_memory, pdf_dev->strm_buf, "pdfimage_open_temp_stream(strm_buf)");
+ pdf_dev->strm->file = NULL; /* Don't close underlying file when we free the stream */
+ gs_free_object(pdf_dev->memory->non_gc_memory, pdf_dev->strm,
+ "pdfimage_open_temp_stream(strm)");
+ pdf_dev->strm = NULL;
+ gs_free_object(pdf_dev->memory->non_gc_memory, page, "pdfimage create new page");
+ return code;
+ }
+ }
+
pdfimage_write_args_comment(pdf_dev, pdf_dev->strm);
pdf_dev->Pages = page;
} else {
@@ -311,7 +278,7 @@ static int gdev_pdf_image_begin_page(gx_device_pdf_image *pdf_dev,
current = current->next;
current->next = page;
}
- page->ImageObjectNumber = (pdf_dev->NumPages * 4) + 3;
+ page->ImageObjectNumber = (pdf_dev->NumPages * 4) + 3 + pdf_dev->ocr.file_objects;
page->LengthObjectNumber = page->ImageObjectNumber + 1;
page->PageStreamObjectNumber = page->LengthObjectNumber + 1;
page->PageDictObjectNumber = page->PageStreamObjectNumber + 1;
@@ -450,18 +417,19 @@ encode(gx_device *pdev, stream **s, const stream_template *t, gs_memory_t *mem)
static int
pdf_image_downscale_and_print_page(gx_device_printer *dev, int factor,
- int mfs, int bpc, int num_comps,
- int trap_w, int trap_h, const int *trap_order,
- int ets)
+ int mfs, int bpc, int num_comps,
+ int trap_w, int trap_h,
+ const int *trap_order,
+ int ets)
{
gx_device_pdf_image *const pdf_dev = (gx_device_pdf_image *)dev;
int code = 0;
byte *data = NULL;
int size = gdev_mem_bytes_per_scan_line((gx_device *)dev);
- int max_size =size;
+ int max_size = size;
int row;
- int height = dev->height/factor;
- int width = dev->width/factor;
+ int height = gx_downscaler_scale(dev->height, factor);
+ int width = gx_downscaler_scale(dev->width, factor);
gx_downscaler_t ds;
gs_offset_t stream_pos = 0;
pdfimage_page *page = pdf_dev->Pages;
@@ -502,6 +470,16 @@ pdf_image_downscale_and_print_page(gx_device_printer *dev, int factor,
return_error(gs_error_VMerror);
}
+ if (pdf_dev->ocr.begin_page) {
+ code = pdf_dev->ocr.begin_page(pdf_dev, width, height, num_comps*8);
+ if (code < 0)
+ {
+ gs_free_object(dev->memory, data, "pdf_image_print_page(data)");
+ gx_downscaler_fin(&ds);
+ return code;
+ }
+ }
+
pprintd1(pdf_dev->strm, "%d 0 obj\n", page->ImageObjectNumber);
pprintd1(pdf_dev->strm, "<<\n/Length %d 0 R\n", page->LengthObjectNumber);
stream_puts(pdf_dev->strm, "/Subtype /Image\n");
@@ -558,13 +536,15 @@ pdf_image_downscale_and_print_page(gx_device_printer *dev, int factor,
code = gx_downscaler_getbits(&ds, data, row);
if (code < 0)
break;
+ if (pdf_dev->ocr.line)
+ pdf_dev->ocr.line(pdf_dev, data);
stream_write(pdf_dev->strm, data, width * num_comps);
}
if (code < 0) {
gs_free_object(dev->memory, data, "pdf_image_print_page(data)");
gx_downscaler_fin(&ds);
- return code;;
+ return code;
}
switch(pdf_dev->Compression) {
@@ -588,9 +568,26 @@ pdf_image_downscale_and_print_page(gx_device_printer *dev, int factor,
page->PageStreamOffset = stell(pdf_dev->strm);
pprintd1(pdf_dev->strm, "%d 0 obj\n", page->PageStreamObjectNumber);
- gs_sprintf(Buffer, "%f 0 0 %f 0 0 cm\n/Im1 Do", (width / (pdf_dev->HWResolution[0] / 72)) * factor, (height / (pdf_dev->HWResolution[1] / 72)) * factor);
- pprintd1(pdf_dev->strm, "<<\n/Length %d\n>>\nstream\n", strlen(Buffer));
- stream_puts(pdf_dev->strm, Buffer);
+ stream_puts(pdf_dev->strm, "<<\n/Filter/FlateDecode/Length \n>>\nstream\n");
+ stream_pos = stell(pdf_dev->strm);
+ encode((gx_device *)pdf_dev, &pdf_dev->strm, &s_zlibE_template, pdf_dev->memory->non_gc_memory);
+ if (pdf_dev->ocr.end_page)
+ stream_puts(pdf_dev->strm, "q\n");
+ pprintd2(pdf_dev->strm, "%d 0 0 %d 0 0 cm\n/Im1 Do",
+ (int)((width / (pdf_dev->HWResolution[0] / 72)) * factor),
+ (int)((height / (pdf_dev->HWResolution[1] / 72)) * factor));
+ if (pdf_dev->ocr.end_page) {
+ stream_puts(pdf_dev->strm, "\nQ");
+ pdf_dev->ocr.end_page(pdf_dev);
+ }
+ s_close_filters(&pdf_dev->strm, s);
+ {
+ gs_offset_t pos = stell(pdf_dev->strm);
+ gs_offset_t len = pos - stream_pos;
+ sseek(pdf_dev->strm, stream_pos - 21);
+ pprintd1(pdf_dev->strm, "%d", (int)len);
+ sseek(pdf_dev->strm, pos);
+ }
stream_puts(pdf_dev->strm, "\nendstream\nendobj\n");
page->PageDictOffset = stell(pdf_dev->strm);
@@ -599,8 +596,10 @@ pdf_image_downscale_and_print_page(gx_device_printer *dev, int factor,
stream_puts(pdf_dev->strm, "/Type /Page\n/Parent 2 0 R\n");
gs_sprintf(Buffer, "/MediaBox [0 0 %f %f]\n", ((double)pdf_dev->width / pdf_dev->HWResolution[0]) * 72, ((double)pdf_dev->height / pdf_dev->HWResolution[1]) * 72);
stream_puts(pdf_dev->strm, Buffer);
- pprintd1(pdf_dev->strm, "/Resources <<\n/XObject <<\n/Im1 %d 0 R\n>>\n>>\n>>\n", page->ImageObjectNumber);
- stream_puts(pdf_dev->strm, "endobj\n");
+ pprintd1(pdf_dev->strm, "/Resources <<\n/XObject <<\n/Im1 %d 0 R\n>>\n", page->ImageObjectNumber);
+ if (pdf_dev->ocr.file_init)
+ stream_puts(pdf_dev->strm, "/Font <<\n/Ft0 3 0 R\n>>\n");
+ stream_puts(pdf_dev->strm, ">>\n>>\nendobj\n");
gx_downscaler_fin(&ds);
gs_free_object(dev->memory, data, "pdf_image_print_page(data)");
@@ -761,9 +760,16 @@ static int pdf_image_finish_file(gx_device_pdf_image *pdf_dev, int PCLm)
if (PCLm)
pprintd1(pdf_dev->strm, "xref\n0 %d\n0000000000 65536 f \n", pdf_dev->NextObject);
else
- pprintd1(pdf_dev->strm, "xref\n0 %d\n0000000000 65536 f \n", (pdf_dev->NumPages * 4) + 3);
+ pprintd1(pdf_dev->strm, "xref\n0 %d\n0000000000 65536 f \n", (pdf_dev->NumPages * 4) + 3 + pdf_dev->ocr.file_objects);
write_xref_entry(pdf_dev->strm, pdf_dev->RootOffset);
write_xref_entry(pdf_dev->strm, pdf_dev->PagesOffset);
+ if (pdf_dev->ocr.file_objects) {
+ int i;
+
+ for (i = 0; i < OCR_MAX_FILE_OBJECTS; i++)
+ if (pdf_dev->ocr.file_object_offset[i])
+ write_xref_entry(pdf_dev->strm, pdf_dev->ocr.file_object_offset[i]);
+ }
if (!PCLm) {
page = pdf_dev->Pages;
@@ -774,7 +780,7 @@ static int pdf_image_finish_file(gx_device_pdf_image *pdf_dev, int PCLm)
write_xref_entry(pdf_dev->strm, page->PageDictOffset);
page = page->next;
}
- pprintd1(pdf_dev->strm, "trailer\n<<\n/Size %d\n/Root 1 0 R\n/ID [", (pdf_dev->NumPages * 4) + 3);
+ pprintd1(pdf_dev->strm, "trailer\n<<\n/Size %d\n/Root 1 0 R\n/ID [", (pdf_dev->NumPages * 4) + 3 + pdf_dev->ocr.file_objects);
pdf_compute_fileID(pdf_dev, fileID, CreationDate, Title, Producer);
write_fileID(pdf_dev->strm, (const byte *)&fileID, 16);
write_fileID(pdf_dev->strm, (const byte *)&fileID, 16);
@@ -844,7 +850,7 @@ static int pdf_image_finish_file(gx_device_pdf_image *pdf_dev, int PCLm)
return 0;
}
-static int
+int
pdf_image_print_page(gx_device_printer * pdev, gp_file * file)
{
gx_device_pdf_image *const pdf_dev = (gx_device_pdf_image *)pdev;
@@ -908,6 +914,7 @@ pdf_image_open(gx_device *pdev)
}
if (ppdev->OpenOutputFile)
code = gdev_prn_open_printer_seekable(pdev, 1, true);
+
return code;
}
@@ -1209,6 +1216,7 @@ PCLm_open(gx_device *pdev)
while(pdev->child)
pdev = pdev->child;
+ memset(&ppdev->ocr, 0, sizeof(ppdev->ocr));
ppdev->file = NULL;
ppdev->Pages = NULL;
ppdev->NumPages = 0;
@@ -1386,7 +1394,7 @@ PCLm_downscale_and_print_page(gx_device_printer *dev, int factor,
pprintd1(pdf_dev->strm, "%d 0 obj\n", page->PageDictObjectNumber);
pprintd1(pdf_dev->strm, "<<\n/Contents %d 0 R\n", page->PageStreamObjectNumber);
stream_puts(pdf_dev->strm, "/Type /Page\n/Parent 2 0 R\n");
- gs_sprintf(Buffer, "/MediaBox [0 0 %f %f]\n", ((double)pdf_dev->width / pdf_dev->HWResolution[0]) * 72, ((double)pdf_dev->height / pdf_dev->HWResolution[1]) * 72);
+ gs_sprintf(Buffer, "/MediaBox [0 0 %.3f %.3f]\n", ((double)pdf_dev->width / pdf_dev->HWResolution[0]) * 72, ((double)pdf_dev->height / pdf_dev->HWResolution[1]) * 72);
stream_puts(pdf_dev->strm, Buffer);
stream_puts(pdf_dev->strm, "/Resources <<\n/XObject <<\n");
@@ -1405,9 +1413,9 @@ PCLm_downscale_and_print_page(gx_device_printer *dev, int factor,
double adjusted;
adjusted = height - (row * pdf_dev->StripHeight);
adjusted = adjusted / (pdf_dev->HWResolution[1] / (factor * 72));
- gs_sprintf(Buffer, "%f 0 0 %f 0 0 cm\n/Im%d Do Q\n", (width / (pdf_dev->HWResolution[0] / 72)) * factor, adjusted, row);
+ gs_sprintf(Buffer, "%.3f 0 0 %.3f 0 0 cm\n/Im%d Do Q\n", (width / (pdf_dev->HWResolution[0] / 72)) * factor, adjusted, row);
} else
- gs_sprintf(Buffer, "%f 0 0 %f 0 %f cm\n/Im%d Do Q\n", (width / (pdf_dev->HWResolution[0] / 72)) * factor, StripDecrement, ((height / (pdf_dev->HWResolution[1] / 72)) * factor) - (StripDecrement * (row + 1)), row);
+ gs_sprintf(Buffer, "%.3f 0 0 %.3f 0 %f cm\n/Im%d Do Q\n", (width / (pdf_dev->HWResolution[0] / 72)) * factor, StripDecrement, ((height / (pdf_dev->HWResolution[1] / 72)) * factor) - (StripDecrement * (row + 1)), row);
stream_puts(pdf_dev->temp_stream.strm, Buffer);
pprintd2(pdf_dev->strm, "/Im%d %d 0 R\n", row, page->ImageObjectNumber + (row * 2));
}
diff --git a/devices/gdevpdfimg.h b/devices/gdevpdfimg.h
new file mode 100644
index 000000000..819ee020c
--- /dev/null
+++ b/devices/gdevpdfimg.h
@@ -0,0 +1,104 @@
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied,
+ modified or distributed except as expressly authorized under the terms
+ of the license contained in the file LICENSE in this distribution.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+#ifndef gdevpdfimg_h_INCLUDED
+#define gdevpdfimg_h_INCLUDED
+
+#include "gdevprn.h"
+
+typedef struct pdfimage_page_s {
+ int ImageObjectNumber;
+ gs_offset_t ImageOffset;
+ int LengthObjectNumber;
+ gs_offset_t LengthOffset;
+ int PageStreamObjectNumber;
+ gs_offset_t PageStreamOffset;
+ int PageDictObjectNumber;
+ gs_offset_t PageDictOffset;
+ void *next;
+} pdfimage_page;
+
+typedef struct PCLm_temp_file_s {
+ char file_name[gp_file_name_sizeof];
+ gp_file *file;
+ stream *strm;
+ stream *save;
+ byte *strm_buf;
+} PCLm_temp_file_t;
+
+#define OCR_MAX_FILE_OBJECTS 8
+
+typedef struct gx_device_pdf_image_s {
+ gx_device_common;
+ gx_prn_device_common;
+ unsigned char Compression;
+ gx_downscaler_params downscale;
+ int StripHeight;
+ float QFactor;
+ int JPEGQ;
+ gsicc_link_t *icclink;
+ stream *strm;
+ byte *strm_buf;
+ int NumPages;
+ gs_offset_t RootOffset;
+ gs_offset_t PagesOffset;
+ gs_offset_t xrefOffset;
+ pdfimage_page *Pages;
+ PCLm_temp_file_t xref_stream;
+ PCLm_temp_file_t temp_stream;
+ int NextObject;
+
+ /* OCR data */
+ struct {
+ char language[1024];
+ void *state;
+
+ /* Number of "file level" objects - i.e. the number of objects
+ * required to define the font. */
+ int file_objects;
+ gs_offset_t file_object_offset[OCR_MAX_FILE_OBJECTS];
+ int w;
+ int h;
+ int y;
+ int xres;
+ int yres;
+ float cur_x;
+ float cur_y;
+ float cur_size;
+ float cur_scale;
+ float wordbox[4];
+ int *word_chars;
+ int word_len;
+ int word_max;
+ void *data;
+ /* Write the font definition. */
+ int (*file_init)(struct gx_device_pdf_image_s *dev);
+ int (*begin_page)(struct gx_device_pdf_image_s *dev, int w, int h, int bpp);
+ void (*line)(struct gx_device_pdf_image_s *dev, void *row);
+ int (*end_page)(struct gx_device_pdf_image_s *dev);
+ } ocr;
+} gx_device_pdf_image;
+
+int pdf_image_open(gx_device *pdev);
+int pdf_image_close(gx_device * pdev);
+int pdf_image_put_params_downscale(gx_device * dev, gs_param_list * plist);
+int pdf_image_put_params_downscale_cmyk(gx_device * dev, gs_param_list * plist);
+int pdf_image_put_params_downscale_cmyk_ets(gx_device * dev, gs_param_list * plist);
+int pdf_image_get_params_downscale(gx_device * dev, gs_param_list * plist);
+int pdf_image_get_params_downscale_cmyk(gx_device * dev, gs_param_list * plist);
+int pdf_image_get_params_downscale_cmyk_ets(gx_device * dev, gs_param_list * plist);
+dev_proc_print_page(pdf_image_print_page);
+
+#endif
diff --git a/devices/gdevpdfocr.c b/devices/gdevpdfocr.c
new file mode 100644
index 000000000..95d358b18
--- /dev/null
+++ b/devices/gdevpdfocr.c
@@ -0,0 +1,727 @@
+/* Copyright (C) 2001-2020 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied,
+ modified or distributed except as expressly authorized under the terms
+ of the license contained in the file LICENSE in this distribution.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+#include "stdint_.h"
+#include "gdevprn.h"
+#include "gxdownscale.h"
+#include "gdevkrnlsclass.h" /* 'standard' built in subclasses, currently First/Last Page and obejct filter */
+#include "stream.h"
+#include "spprint.h"
+#include "time_.h"
+#include "smd5.h"
+#include "sstring.h"
+#include "strimpl.h"
+#include "slzwx.h"
+#include "szlibx.h"
+#include "sdct.h"
+#include "srlx.h"
+#include "gsicc_cache.h"
+#include "sjpeg.h"
+
+#include "gdevpdfimg.h"
+
+#define COMPRESSION_NONE 1 /* dump mode */
+#define COMPRESSION_LZW 2 /* Lempel-Ziv & Welch */
+#define COMPRESSION_FLATE 3
+#define COMPRESSION_JPEG 4
+#define COMPRESSION_RLE 5
+
+static struct compression_string {
+ unsigned char id;
+ const char *str;
+} compression_strings [] = {
+ { COMPRESSION_NONE, "None" },
+ { COMPRESSION_LZW, "LZW" }, /* Not supported in PCLm */
+ { COMPRESSION_FLATE, "Flate" },
+ { COMPRESSION_JPEG, "JPEG" },
+ { COMPRESSION_RLE, "RLE" },
+ { 0, NULL }
+};
+
+int pdf_ocr_open(gx_device *pdev);
+int pdf_ocr_close(gx_device *pdev);
+
+
+static int
+pdfocr_put_some_params(gx_device * dev, gs_param_list * plist)
+{
+ gx_device_pdf_image *const pdf_dev = (gx_device_pdf_image *)dev;
+ int ecode = 0;
+ int code;
+ gs_param_string langstr;
+ const char *param_name;
+ size_t len;
+
+ switch (code = param_read_string(plist, (param_name = "OCRLanguage"), &langstr)) {
+ case 0:
+ len = langstr.size;
+ if (len >= sizeof(pdf_dev->ocr.language))
+ len = sizeof(pdf_dev->ocr.language)-1;
+ memcpy(pdf_dev->ocr.language, langstr.data, len);
+ pdf_dev->ocr.language[len] = 0;
+ break;
+ case 1:
+ break;
+ default:
+ ecode = code;
+ param_signal_error(plist, param_name, ecode);
+ }
+
+ return code;
+}
+
+static int
+pdfocr_put_params_downscale_cmyk(gx_device * dev, gs_param_list * plist)
+{
+ int code = pdfocr_put_some_params(dev, plist);
+ if (code < 0)
+ return code;
+ return pdf_image_put_params_downscale_cmyk(dev, plist);
+}
+
+static int
+pdfocr_put_params_downscale(gx_device * dev, gs_param_list * plist)
+{
+ int code = pdfocr_put_some_params(dev, plist);
+ if (code < 0)
+ return code;
+ return pdf_image_put_params_downscale(dev, plist);
+}
+
+static int
+pdfocr_get_some_params(gx_device * dev, gs_param_list * plist)
+{
+ gx_device_pdf_image *const pdf_dev = (gx_device_pdf_image *)dev;
+ int code = 0;
+ int ecode = 0;
+ gs_param_string langstr;
+
+ if (pdf_dev->ocr.language[0]) {
+ langstr.data = (const byte *)pdf_dev->ocr.language;
+ langstr.size = strlen(pdf_dev->ocr.language);
+ langstr.persistent = false;
+ } else {
+ langstr.data = (const byte *)"eng";
+ langstr.size = 3;
+ langstr.persistent = false;
+ }
+ if ((code = param_write_string(plist, "OCRLanguage", &langstr)) < 0)
+ ecode = code;
+
+ return ecode;
+}
+
+static int
+pdfocr_get_params_downscale_cmyk(gx_device * dev, gs_param_list * plist)
+{
+ int code = pdfocr_get_some_params(dev, plist);
+ if (code < 0)
+ return code;
+
+ return pdf_image_get_params_downscale_cmyk(dev, plist);
+}
+
+static int
+pdfocr_get_params_downscale(gx_device * dev, gs_param_list * plist)
+{
+ int code = pdfocr_get_some_params(dev, plist);
+ if (code < 0)
+ return code;
+
+ return pdf_image_get_params_downscale(dev, plist);
+}
+
+/* ------ The pdfocr8 device ------ */
+
+static const gx_device_procs pdfocr8_procs =
+prn_color_params_procs(pdf_ocr_open,
+ gdev_prn_output_page_seekable,
+ pdf_ocr_close,
+ gx_default_gray_map_rgb_color,
+ gx_default_gray_map_color_rgb,
+ pdfocr_get_params_downscale,
+ pdfocr_put_params_downscale);
+
+const gx_device_pdf_image gs_pdfocr8_device = {
+ prn_device_body(gx_device_pdf_image,
+ pdfocr8_procs,
+ "pdfocr8",
+ DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
+ 600, 600, /* 600 dpi by default */
+ 0, 0, 0, 0, /* Margins */
+ 1, /* num components */
+ 8, /* bits per sample */
+ 255, 0, 256, 0,
+ pdf_image_print_page),
+ 3,
+ GX_DOWNSCALER_PARAMS_DEFAULTS,
+ 0, /* StripHeight */
+ 0.0, /* QFactor */
+ 0 /* JPEGQ */
+};
+
+/* ------ The pdfocr24 device ------ */
+
+static const gx_device_procs pdfocr24_procs =
+prn_color_params_procs(pdf_ocr_open,
+ gdev_prn_output_page_seekable,
+ pdf_ocr_close,
+ gx_default_rgb_map_rgb_color,
+ gx_default_rgb_map_color_rgb,
+ pdfocr_get_params_downscale,
+ pdfocr_put_params_downscale);
+
+const gx_device_pdf_image gs_pdfocr24_device = {
+ prn_device_body(gx_device_pdf_image,
+ pdfocr24_procs,
+ "pdfocr24",
+ DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
+ 600, 600, /* 600 dpi by default */
+ 0, 0, 0, 0, /* Margins */
+ 3, /* num components */
+ 24, /* bits per sample */
+ 255, 255, 256, 256,
+ pdf_image_print_page),
+ 3,
+ GX_DOWNSCALER_PARAMS_DEFAULTS,
+ 0, /* StripHeight */
+ 0.0, /* QFactor */
+ 0 /* JPEGQ */
+};
+
+/* ------ The pdfocr32 device ------ */
+
+static const gx_device_procs pdfocr32_procs = {
+ pdf_ocr_open, NULL, NULL, gdev_prn_output_page_seekable, pdf_ocr_close,
+ NULL, cmyk_8bit_map_color_cmyk, NULL, NULL, NULL, NULL, NULL, NULL,
+ pdfocr_get_params_downscale_cmyk, pdfocr_put_params_downscale_cmyk,
+ cmyk_8bit_map_cmyk_color, NULL, NULL, NULL, gx_page_device_get_page_device
+};
+
+const gx_device_pdf_image gs_pdfocr32_device = {
+ prn_device_body(gx_device_pdf_image,
+ pdfocr32_procs,
+ "pdfocr32",
+ DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
+ 600, 600, /* 600 dpi by default */
+ 0, 0, 0, 0, /* Margins */
+ 4, /* num components */
+ 32, /* bits per sample */
+ 255, 255, 256, 256,
+ pdf_image_print_page),
+ 3,
+ GX_DOWNSCALER_PARAMS_DEFAULTS,
+ 0, /* StripHeight */
+ 0.0, /* QFactor */
+ 0 /* JPEGQ */
+};
+
+/* Funky font */
+static const char funky_font[] =
+"3 0 obj\n<</BaseFont/GlyphLessFont/DescendantFonts[4 0 R]"
+"/Encoding/Identity-H/Subtype/Type0/ToUnicode 6 0 R/Type /Font"
+">>\nendobj\n";
+
+static const char funky_font2[] =
+"4 0 obj\n<</BaseFont/GlyphLessFont"
+"/CIDToGIDMap 5 0 R\n/CIDSystemInfo<<\n"
+"/Ordering (Identity)/Registry (Adobe)/Supplement 0>>"
+"/FontDescriptor 7 0 R/Subtype /CIDFontType2/Type/Font"
+"/DW 500>>\nendobj\n";
+
+static const char funky_font3[] =
+"5 0 obj\n<</Length 210/Filter/FlateDecode"
+">>stream\n";
+
+static const char funky_font3a[] = {
+0x78, 0x9c, 0xec, 0xc2, 0x01, 0x09, 0x00, 0x00,
+0x00, 0x02, 0xa0, 0xfa, 0x7f, 0xba, 0x21, 0x89,
+0xa6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x7b, 0x03, 0x00, 0x00, 0xff, 0xff, 0xec,
+0xc2, 0x01, 0x0d, 0x00, 0x00, 0x00, 0xc2, 0x20,
+0xdf, 0xbf, 0xb4, 0x45, 0x18, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00,
+0x00, 0xff, 0xff, 0xec, 0xc2, 0x01, 0x0d, 0x00,
+0x00, 0x00, 0xc2, 0x20, 0xdf, 0xbf, 0xb4, 0x45,
+0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xeb, 0x00, 0x00, 0x00, 0xff, 0xff, 0xed,
+0xc2, 0x01, 0x0d, 0x00, 0x00, 0x00, 0xc2, 0x20,
+0xdf, 0xbf, 0xb4, 0x45, 0x18, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x00, 0xff,
+0x00, 0x10
+};
+
+static const char funky_font3b[] =
+"endstream\nendobj\n";
+
+static const char funky_font4[] =
+"6 0 obj\n<</Length 353>>\nstream\n"
+"/CIDInit /ProcSet findresource begin\n"
+"12 dict begin\n"
+"begincmap\n"
+"/CIDSystemInfo\n"
+"<<\n"
+" /Registry (Adobe)\n"
+" /Ordering (UCS)\n"
+" /Supplement 0\n"
+">> def\n"
+"/CMapName /Adobe-Identify-UCS def\n"
+"/CMapType 2 def\n"
+"1 begincodespacerange\n"
+"<0000> <FFFF>\n"
+"endcodespacerange\n"
+"1 beginbfrange\n"
+"<0000> <FFFF> <0000>\n"
+"endbfrange\n"
+"endcmap\n"
+"CMapName currentdict /CMap defineresource pop\n"
+"end\n"
+"end\n"
+"endstream\n"
+"endobj\n";
+
+static const char funky_font5[] =
+"7 0 obj\n"
+"<</Ascent 1000/CapHeight 1000/Descent -1/Flags 5"
+"/FontBBox[0 0 500 1000]/FontFile2 8 0 R/FontName/GlyphLessFont"
+"/ItalicAngle 0/StemV 80/Type/FontDescriptor>>\nendobj\n";
+
+static const char funky_font6[] =
+"8 0 obj\n<</Length 572/Length1 572>>\nstream\n";
+
+static const char funky_font6a[] =
+{
+0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x80,
+0x00, 0x03, 0x00, 0x20, 0x4f, 0x53, 0x2f, 0x32,
+0x56, 0xde, 0xc8, 0x94, 0x00, 0x00, 0x01, 0x28,
+0x00, 0x00, 0x00, 0x60, 0x63, 0x6d, 0x61, 0x70,
+0x00, 0x0a, 0x00, 0x34, 0x00, 0x00, 0x01, 0x90,
+0x00, 0x00, 0x00, 0x1e, 0x67, 0x6c, 0x79, 0x66,
+0x15, 0x22, 0x41, 0x24, 0x00, 0x00, 0x01, 0xb8,
+0x00, 0x00, 0x00, 0x18, 0x68, 0x65, 0x61, 0x64,
+0x0b, 0x78, 0xf1, 0x65, 0x00, 0x00, 0x00, 0xac,
+0x00, 0x00, 0x00, 0x36, 0x68, 0x68, 0x65, 0x61,
+0x0c, 0x02, 0x04, 0x02, 0x00, 0x00, 0x00, 0xe4,
+0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78,
+0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x88,
+0x00, 0x00, 0x00, 0x08, 0x6c, 0x6f, 0x63, 0x61,
+0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb0,
+0x00, 0x00, 0x00, 0x06, 0x6d, 0x61, 0x78, 0x70,
+0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x01, 0x08,
+0x00, 0x00, 0x00, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+0xf2, 0xeb, 0x16, 0xda, 0x00, 0x00, 0x01, 0xd0,
+0x00, 0x00, 0x00, 0x4b, 0x70, 0x6f, 0x73, 0x74,
+0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x1c,
+0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x01, 0x00, 0x00, 0xb0, 0x94, 0x71, 0x10,
+0x5f, 0x0f, 0x3c, 0xf5, 0x04, 0x07, 0x08, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xcf, 0x9a, 0xfc, 0x6e,
+0x00, 0x00, 0x00, 0x00, 0xd4, 0xc3, 0xa7, 0xf2,
+0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00,
+0x00, 0x00, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x08, 0x00, 0xff, 0xff, 0x00, 0x00, 0x04, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04,
+0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x03, 0x00, 0x00, 0x01, 0x90, 0x00, 0x05,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x05, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4f, 0x4f, 0x47, 0x00, 0x40,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x80, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x14, 0x00, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x14, 0x00, 0x06, 0x00, 0x0a,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
+0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x31, 0x21,
+0x11, 0x21, 0x04, 0x00, 0xfc, 0x00, 0x08, 0x00,
+0x00, 0x00, 0x00, 0x03, 0x00, 0x2a, 0x00, 0x00,
+0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x16,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x05, 0x00, 0x0b, 0x00, 0x16, 0x00, 0x03,
+0x00, 0x01, 0x04, 0x09, 0x00, 0x05, 0x00, 0x16,
+0x00, 0x00, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72,
+0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e,
+0x00, 0x20, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x30,
+0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20,
+0x31, 0x2e, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00
+};
+
+static const char funky_font6b[] =
+"endstream\nendobj\n";
+
+static int
+ocr_file_init(gx_device_pdf_image *dev)
+{
+ const char *language = dev->ocr.language;
+ if (language == NULL || language[0] == 0)
+ language = "eng";
+
+ dev->ocr.file_object_offset[dev->ocr.file_objects++] = stell(dev->strm);
+ stream_write(dev->strm, funky_font, sizeof(funky_font)-1);
+ dev->ocr.file_object_offset[dev->ocr.file_objects++] = stell(dev->strm);
+ stream_write(dev->strm, funky_font2, sizeof(funky_font2)-1);
+ dev->ocr.file_object_offset[dev->ocr.file_objects++] = stell(dev->strm);
+ stream_write(dev->strm, funky_font3, sizeof(funky_font3)-1);
+ stream_write(dev->strm, funky_font3a, sizeof(funky_font3a));
+ stream_write(dev->strm, funky_font3b, sizeof(funky_font3b)-1);
+ dev->ocr.file_object_offset[dev->ocr.file_objects++] = stell(dev->strm);
+ stream_write(dev->strm, funky_font4, sizeof(funky_font4)-1);
+ dev->ocr.file_object_offset[dev->ocr.file_objects++] = stell(dev->strm);
+ stream_write(dev->strm, funky_font5, sizeof(funky_font5)-1);
+ dev->ocr.file_object_offset[dev->ocr.file_objects++] = stell(dev->strm);
+ stream_write(dev->strm, funky_font6, sizeof(funky_font6)-1);
+ stream_write(dev->strm, funky_font6a, sizeof(funky_font6a));
+ stream_write(dev->strm, funky_font6b, sizeof(funky_font6b)-1);
+
+ return ocr_init_api(dev->memory, language, &dev->ocr.state);
+}
+
+static void
+ocr_line8(gx_device_pdf_image *dev, void *row)
+{
+ int w = dev->ocr.w;
+ int raster = (w+3)&~3;
+ char *in = (char *)row;
+ char *out = ((char *)dev->ocr.data) + raster * dev->ocr.y++;
+ int i;
+
+#if ARCH_IS_BIG_ENDIAN
+ memcpy(out, in, dev->ocr.w);
+#else
+ for (i = 0; i < w; i++)
+ out[i^3] = in[i];
+#endif
+}
+
+static void
+ocr_line24(gx_device_pdf_image *dev, void *row)
+{
+ int w = dev->ocr.w;
+ int raster = (w+3)&~3;
+ char *in = (char *)row;
+ char *out = ((char *)dev->ocr.data) + raster * dev->ocr.y++;
+ int i;
+
+#if ARCH_IS_BIG_ENDIAN
+ for (i = 0; i < w; i++) {
+ int v = *in++;
+ v += 2* *in++;
+ v += *in++;
+ out[i] = v>>2;
+ }
+#else
+ for (i = 0; i < w; i++) {
+ int v = *in++;
+ v += 2* *in++;
+ v += *in++;
+ out[i^3] = v>>2;
+ }
+#endif
+}
+
+static void
+ocr_line32(gx_device_pdf_image *dev, void *row)
+{
+ int w = dev->ocr.w;
+ int raster = (w+3)&~3;
+ char *in = (char *)row;
+ char *out = ((char *)dev->ocr.data) + raster * dev->ocr.y++;
+ int i;
+
+#if ARCH_IS_BIG_ENDIAN
+ for (i = 0; i < w; i++) {
+ int v = 255 - *in++;
+ v -= *in++;
+ v -= *in++;
+ v -= *in++;
+ if (v < 0) v = 0;
+ out[i] = v;
+ }
+#else
+ for (i = 0; i < w; i++) {
+ int v = 255 - *in++;
+ v -= *in++;
+ v -= *in++;
+ v -= *in++;
+ if (v < 0) v = 0;
+ out[i^3] = v;
+ }
+#endif
+}
+
+static int
+ocr_begin_page(gx_device_pdf_image *dev, int w, int h, int bpp)
+{
+ int raster = (w+3)&~3;
+
+ dev->ocr.data = gs_alloc_bytes(dev->memory, raster * h, "ocr_begin_page");
+ if (dev->ocr.data == NULL)
+ return_error(gs_error_VMerror);
+ dev->ocr.w = w;
+ dev->ocr.h = h;
+ dev->ocr.y = 0;
+
+ if (bpp == 32)
+ dev->ocr.line = ocr_line32;
+ else if (bpp == 24)
+ dev->ocr.line = ocr_line24;
+ else
+ dev->ocr.line = ocr_line8;
+
+ return 0;
+}
+
+static void
+flush_word(gx_device_pdf_image *dev)
+{
+ char buffer[1024];
+ float size, scale;
+ float *bbox = dev->ocr.wordbox;
+ int i, len;
+
+ len = dev->ocr.word_len;
+ if (len == 0)
+ return;
+
+ size = bbox[3]-bbox[1];
+ if (dev->ocr.cur_size != size) {
+ gs_sprintf(buffer, "/Ft0 %.3f Tf", size);
+ stream_puts(dev->strm, buffer);
+ dev->ocr.cur_size = size;
+ }
+ scale = (bbox[2]-bbox[0]) / size / len * 200;
+ if (dev->ocr.cur_scale != scale) {
+ gs_sprintf(buffer, " %.3f Tz", scale);
+ stream_puts(dev->strm, buffer);
+ dev->ocr.cur_scale = scale;
+ }
+ gs_sprintf(buffer, " 1 0 0 1 %.3f %.3f Tm[<", bbox[0], bbox[1]);
+ stream_puts(dev->strm, buffer);
+ for (i = 0; i < len; i++) {
+ gs_sprintf(buffer, "%04x", dev->ocr.word_chars[i]);
+ stream_puts(dev->strm, buffer);
+ }
+ stream_puts(dev->strm, ">]TJ\n");
+
+ dev->ocr.word_len = 0;
+}
+
+static int
+ocr_callback(void *arg, const char *rune_,
+ const int *line_bbox, const int *word_bbox,
+ const int *char_bbox, int pointsize)
+{
+ gx_device_pdf_image *ppdev = (gx_device_pdf_image *)arg;
+ int unicode;
+ const unsigned char *rune = (const unsigned char *)rune_;
+ float bbox[4];
+ int factor = ppdev->downscale.downscale_factor;
+ float scale = 72000000.0f / gx_downscaler_scale(1000000, factor);
+
+ if (rune[0] >= 0xF8)
+ return 0; /* Illegal */
+ if (rune[0] < 0x80)
+ unicode = rune[0];
+ else {
+ unicode = rune[1] & 0x7f;
+ if (rune[0] < 0xd0)
+ unicode |= ((rune[0] & 0x1f) << 6);
+ else {
+ unicode = (unicode<<6) | (rune[2] & 0x7f);
+ if (rune[0] < 0xf0)
+ unicode |= ((rune[0] & 0x0f) << 12);
+ else
+ unicode |= ((rune[0] & 0x07) << 18) | (unicode<<6) | (rune[3] & 0x7f);
+ }
+ }
+
+#if 0
+ // First attempt; match char bboxes exactly. This is bad, as the
+ // bboxes given back from tesseract are 'untrustworthy' to say the
+ // least (they overlap one another in strange ways). Trying to
+ // match those causes the font height to change repeatedly, and
+ // gives output that's hard to identify words in.
+ bbox[0] = char_bbox[0] * 72.0 / ppdev->ocr.xres;
+ bbox[1] = (ppdev->ocr.h-1 - char_bbox[3]) * 72.0 / ppdev->ocr.yres;
+ bbox[2] = char_bbox[2] * 72.0 / ppdev->ocr.xres;
+ bbox[3] = (ppdev->ocr.h-1 - char_bbox[1]) * 72.0 / ppdev->ocr.yres;
+
+ size = bbox[3]-bbox[1];
+ if (ppdev->ocr.cur_size != size) {
+ gs_sprintf(buffer, "/Ft0 %f Tf ", size);
+ stream_puts(ppdev->strm, buffer);
+ ppdev->ocr.cur_size = size;
+ }
+ scale = (bbox[2]-bbox[0]) / size * 200;
+ if (ppdev->ocr.cur_scale != scale) {
+ gs_sprintf(buffer, " %f Tz ", scale);
+ stream_puts(ppdev->strm, buffer);
+ ppdev->ocr.cur_scale = scale;
+ }
+ gs_sprintf(buffer, "1 0 0 1 %f %f Tm ", bbox[0], bbox[1]);
+ stream_puts(ppdev->strm, buffer);
+ gs_sprintf(buffer, "<%04x>Tj\n", unicode);
+ stream_puts(ppdev->strm, buffer);
+#else
+ bbox[0] = word_bbox[0] * scale / ppdev->ocr.xres;
+ bbox[1] = (ppdev->ocr.h-1 - line_bbox[3]) * scale / ppdev->ocr.yres;
+ bbox[2] = word_bbox[2] * scale / ppdev->ocr.xres;
+ bbox[3] = (ppdev->ocr.h-1 - line_bbox[1]) * scale / ppdev->ocr.yres;
+
+ /* If the word bbox differs, flush the word. */
+ if (bbox[0] != ppdev->ocr.wordbox[0] ||
+ bbox[1] != ppdev->ocr.wordbox[1] ||
+ bbox[2] != ppdev->ocr.wordbox[2] ||
+ bbox[3] != ppdev->ocr.wordbox[3]) {
+ flush_word(ppdev);
+ ppdev->ocr.wordbox[0] = bbox[0];
+ ppdev->ocr.wordbox[1] = bbox[1];
+ ppdev->ocr.wordbox[2] = bbox[2];
+ ppdev->ocr.wordbox[3] = bbox[3];
+ }
+
+ /* Add the char to the current word. */
+ if (ppdev->ocr.word_len == ppdev->ocr.word_max) {
+ int *newblock;
+ int newmax = ppdev->ocr.word_max * 2;
+ if (newmax == 0)
+ newmax = 16;
+ newblock = (int *)gs_alloc_bytes(ppdev->memory, sizeof(int)*newmax,
+ "ocr_callback(word)");
+ if (newblock == NULL)
+ return_error(gs_error_VMerror);
+ if (ppdev->ocr.word_len > 0)
+ memcpy(newblock, ppdev->ocr.word_chars,
+ sizeof(int) * ppdev->ocr.word_len);
+ gs_free_object(ppdev->memory, ppdev->ocr.word_chars,
+ "ocr_callback(word)");
+ ppdev->ocr.word_chars = newblock;
+ ppdev->ocr.word_max = newmax;
+ }
+ ppdev->ocr.word_chars[ppdev->ocr.word_len++] = unicode;
+#endif
+
+ return 0;
+}
+
+static int
+ocr_end_page(gx_device_pdf_image *dev)
+{
+ stream_puts(dev->strm, "\nBT 3 Tr\n");
+ dev->ocr.cur_x = 0;
+ dev->ocr.cur_y = 0;
+ dev->ocr.cur_size = -1;
+ dev->ocr.cur_scale = 0;
+ dev->ocr.wordbox[0] = 0;
+ dev->ocr.wordbox[1] = 0;
+ dev->ocr.wordbox[2] = -1;
+ dev->ocr.wordbox[3] = -1;
+ dev->ocr.word_len = 0;
+ dev->ocr.word_max = 0;
+ dev->ocr.word_chars = NULL;
+ ocr_recognise(dev->ocr.state,
+ dev->ocr.w,
+ dev->ocr.h,
+ dev->ocr.data,
+ dev->ocr.xres,
+ dev->ocr.yres,
+ ocr_callback,
+ dev);
+ if (dev->ocr.word_len)
+ flush_word(dev);
+ stream_puts(dev->strm, "\nET");
+
+ gs_free_object(dev->memory, dev->ocr.word_chars,
+ "ocr_callback(word)");
+ gs_free_object(dev->memory, dev->ocr.data, "ocr_end_page");
+ dev->ocr.data = NULL;
+
+ return 0;
+}
+
+int
+pdf_ocr_open(gx_device *pdev)
+{
+ gx_device_pdf_image *ppdev;
+ int code = pdf_image_open(pdev);
+
+ if (code < 0)
+ return code;
+
+ /* If we've been subclassed, find the terminal device */
+ while(pdev->child)
+ pdev = pdev->child;
+ ppdev = (gx_device_pdf_image *)pdev;
+
+ ppdev->ocr.file_init = ocr_file_init;
+ ppdev->ocr.begin_page = ocr_begin_page;
+ ppdev->ocr.end_page = ocr_end_page;
+ ppdev->ocr.xres = (int)pdev->HWResolution[0];
+ ppdev->ocr.yres = (int)pdev->HWResolution[1];
+
+ return 0;
+}
+
+int
+pdf_ocr_close(gx_device *pdev)
+{
+ gx_device_pdf_image *pdf_dev;
+ int code;
+
+ code = pdf_image_close(pdev);
+ if (code < 0)
+ return code;
+
+ /* If we've been subclassed, find the terminal device */
+ while(pdev->child)
+ pdev = pdev->child;
+ pdf_dev = (gx_device_pdf_image *)pdev;
+
+ ocr_fin_api(pdf_dev->memory, pdf_dev->ocr.state);
+ pdf_dev->ocr.state = NULL;
+
+ return code;
+}
diff --git a/psi/msvc.mak b/psi/msvc.mak
index aa1d159f0..90eb39e95 100644
--- a/psi/msvc.mak
+++ b/psi/msvc.mak
@@ -679,6 +679,19 @@ JBIG2_LIB=luratech
!endif
!endif
+!if exist("leptonica")
+LEPTONICADIR=leptonica
+!endif
+!if exist("tesseract")
+TESSERACTDIR=tesseract
+TESSCXXFLAGS=-DHAVE_AVX -DHAVE_AVX2 -DHAVE_SSE4_1 -DHAVE_FMA -D__AVX__ -D__AVX2__ -D__FMA__ -D__SSE4_1__ /EHsc /std:c++17
+!endif
+!if defined(TESSERACTDIR) && defined(LEPTONICADIR)
+OCR_VERSION=1
+!else
+OCR_VERSION=0
+!endif
+
!ifndef JBIG2_LIB
JBIG2_LIB=jbig2dec
!endif
@@ -1645,6 +1658,10 @@ DEVICE_DEVS16=$(DEVICE_DEVS16) $(DD)cups.dev
!if "$(WITH_URF)" == "1"
DEVICE_DEVS16=$(DEVICE_DEVS16) $(DD)urfgray.dev $(DD)urfrgb.dev $(DD)urfcmyk.dev
!endif
+!if "$(OCR_VERSION)" == "0"
+!else
+DEVICE_DEVS16=$(DEVICE_DEVS16) $(DD)ocr.dev $(DD)hocr.dev $(DD)pdfocr8.dev $(DD)pdfocr24.dev $(DD)pdfocr32.dev
+!endif
# Overflow for DEVS3,4,5,6,9
DEVICE_DEVS17=$(DD)ljet3.dev $(DD)ljet3d.dev $(DD)ljet4.dev $(DD)ljet4d.dev
DEVICE_DEVS18=$(DD)pj.dev $(DD)pjxl.dev $(DD)pjxl300.dev $(DD)jetp3852.dev $(DD)r4081.dev
@@ -1713,6 +1730,7 @@ BEGINFILES2=$(BEGINFILES2) $(BSCFILE)
!include $(GLSRCDIR)\msvctail.mak
!include $(PSSRCDIR)\winint.mak
+
# ----------------------------- Main program ------------------------------ #
GSCONSOLE_XE=$(BINDIR)\$(GSCONSOLE).exe
diff --git a/windows/ghostscript.vcxproj b/windows/ghostscript.vcxproj
index f6108b45d..d3897bebf 100644
--- a/windows/ghostscript.vcxproj
+++ b/windows/ghostscript.vcxproj
@@ -1280,6 +1280,7 @@
<ClCompile Include="..\base\szlibc.c" />
<ClCompile Include="..\base\szlibd.c" />
<ClCompile Include="..\base\szlibe.c" />
+ <ClCompile Include="..\base\tessocr.cpp" />
<ClCompile Include="..\base\ttcalc.c" />
<ClCompile Include="..\base\ttfinp.c" />
<ClCompile Include="..\base\ttfmain.c" />
@@ -1465,6 +1466,7 @@
<ClCompile Include="..\devices\gdevmsxf.c" />
<ClCompile Include="..\devices\gdevn533.c" />
<ClCompile Include="..\devices\gdevo182.c" />
+ <ClCompile Include="..\devices\gdevocr.c" />
<ClCompile Include="..\devices\gdevokii.c" />
<ClCompile Include="..\devices\gdevp2up.c" />
<ClCompile Include="..\devices\gdevpbm.c" />
@@ -1472,6 +1474,7 @@
<ClCompile Include="..\devices\gdevpcl.c" />
<ClCompile Include="..\devices\gdevpcx.c" />
<ClCompile Include="..\devices\gdevpdfimg.c" />
+ <ClCompile Include="..\devices\gdevpdfocr.c" />
<ClCompile Include="..\devices\gdevpe.c" />
<ClCompile Include="..\devices\gdevperm.c" />
<ClCompile Include="..\devices\gdevphex.c" />
@@ -1720,6 +1723,182 @@
<ClCompile Include="..\lcms2mt\src\cmsvirt.c" />
<ClCompile Include="..\lcms2mt\src\cmswtpnt.c" />
<ClCompile Include="..\lcms2mt\src\cmsxform.c" />
+ <ClCompile Include="..\leptonica\src\adaptmap.c" />
+ <ClCompile Include="..\leptonica\src\affine.c" />
+ <ClCompile Include="..\leptonica\src\affinecompose.c" />
+ <ClCompile Include="..\leptonica\src\arrayaccess.c" />
+ <ClCompile Include="..\leptonica\src\bardecode.c" />
+ <ClCompile Include="..\leptonica\src\baseline.c" />
+ <ClCompile Include="..\leptonica\src\bbuffer.c" />
+ <ClCompile Include="..\leptonica\src\bilateral.c" />
+ <ClCompile Include="..\leptonica\src\bilinear.c" />
+ <ClCompile Include="..\leptonica\src\binarize.c" />
+ <ClCompile Include="..\leptonica\src\binexpand.c" />
+ <ClCompile Include="..\leptonica\src\binreduce.c" />
+ <ClCompile Include="..\leptonica\src\blend.c" />
+ <ClCompile Include="..\leptonica\src\bmf.c" />
+ <ClCompile Include="..\leptonica\src\bmpio.c" />
+ <ClCompile Include="..\leptonica\src\bmpiostub.c" />
+ <ClCompile Include="..\leptonica\src\bootnumgen1.c" />
+ <ClCompile Include="..\leptonica\src\bootnumgen2.c" />
+ <ClCompile Include="..\leptonica\src\bootnumgen3.c" />
+ <ClCompile Include="..\leptonica\src\bootnumgen4.c" />
+ <ClCompile Include="..\leptonica\src\boxbasic.c" />
+ <ClCompile Include="..\leptonica\src\boxfunc1.c" />
+ <ClCompile Include="..\leptonica\src\boxfunc2.c" />
+ <ClCompile Include="..\leptonica\src\boxfunc3.c" />
+ <ClCompile Include="..\leptonica\src\boxfunc4.c" />
+ <ClCompile Include="..\leptonica\src\boxfunc5.c" />
+ <ClCompile Include="..\leptonica\src\bytearray.c" />
+ <ClCompile Include="..\leptonica\src\ccbord.c" />
+ <ClCompile Include="..\leptonica\src\ccthin.c" />
+ <ClCompile Include="..\leptonica\src\classapp.c" />
+ <ClCompile Include="..\leptonica\src\colorcontent.c" />
+ <ClCompile Include="..\leptonica\src\colorinfo.c" />
+ <ClCompile Include="..\leptonica\src\coloring.c" />
+ <ClCompile Include="..\leptonica\src\colormap.c" />
+ <ClCompile Include="..\leptonica\src\colormorph.c" />
+ <ClCompile Include="..\leptonica\src\colorquant1.c" />
+ <ClCompile Include="..\leptonica\src\colorquant2.c" />
+ <ClCompile Include="..\leptonica\src\colorseg.c" />
+ <ClCompile Include="..\leptonica\src\colorspace.c" />
+ <ClCompile Include="..\leptonica\src\compare.c" />
+ <ClCompile Include="..\leptonica\src\conncomp.c" />
+ <ClCompile Include="..\leptonica\src\convertfiles.c" />
+ <ClCompile Include="..\leptonica\src\convolve.c" />
+ <ClCompile Include="..\leptonica\src\correlscore.c" />
+ <ClCompile Include="..\leptonica\src\dewarp1.c" />
+ <ClCompile Include="..\leptonica\src\dewarp2.c" />
+ <ClCompile Include="..\leptonica\src\dewarp3.c" />
+ <ClCompile Include="..\leptonica\src\dewarp4.c" />
+ <ClCompile Include="..\leptonica\src\dnabasic.c" />
+ <ClCompile Include="..\leptonica\src\dnafunc1.c" />
+ <ClCompile Include="..\leptonica\src\dnahash.c" />
+ <ClCompile Include="..\leptonica\src\dwacomb.2.c" />
+ <ClCompile Include="..\leptonica\src\dwacomblow.2.c" />
+ <ClCompile Include="..\leptonica\src\edge.c" />
+ <ClCompile Include="..\leptonica\src\encoding.c" />
+ <ClCompile Include="..\leptonica\src\enhance.c" />
+ <ClCompile Include="..\leptonica\src\fhmtauto.c" />
+ <ClCompile Include="..\leptonica\src\fhmtgen.1.c" />
+ <ClCompile Include="..\leptonica\src\fhmtgenlow.1.c" />
+ <ClCompile Include="..\leptonica\src\finditalic.c" />
+ <ClCompile Include="..\leptonica\src\flipdetect.c" />
+ <ClCompile Include="..\leptonica\src\fliphmtgen.c" />
+ <ClCompile Include="..\leptonica\src\fmorphauto.c" />
+ <ClCompile Include="..\leptonica\src\fmorphgen.1.c" />
+ <ClCompile Include="..\leptonica\src\fmorphgenlow.1.c" />
+ <ClCompile Include="..\leptonica\src\fpix1.c" />
+ <ClCompile Include="..\leptonica\src\fpix2.c" />
+ <ClCompile Include="..\leptonica\src\gifio.c" />
+ <ClCompile Include="..\leptonica\src\gifiostub.c" />
+ <ClCompile Include="..\leptonica\src\gplot.c" />
+ <ClCompile Include="..\leptonica\src\graphics.c" />
+ <ClCompile Include="..\leptonica\src\graymorph.c" />
+ <ClCompile Include="..\leptonica\src\grayquant.c" />
+ <ClCompile Include="..\leptonica\src\heap.c" />
+ <ClCompile Include="..\leptonica\src\jbclass.c" />
+ <ClCompile Include="..\leptonica\src\jp2kheader.c" />
+ <ClCompile Include="..\leptonica\src\jp2kheaderstub.c" />
+ <ClCompile Include="..\leptonica\src\jp2kio.c" />
+ <ClCompile Include="..\leptonica\src\jp2kiostub.c" />
+ <ClCompile Include="..\leptonica\src\jpegio.c" />
+ <ClCompile Include="..\leptonica\src\jpegiostub.c" />
+ <ClCompile Include="..\leptonica\src\kernel.c" />
+ <ClCompile Include="..\leptonica\src\leptwin.c" />
+ <ClCompile Include="..\leptonica\src\libversions.c" />
+ <ClCompile Include="..\leptonica\src\list.c" />
+ <ClCompile Include="..\leptonica\src\map.c" />
+ <ClCompile Include="..\leptonica\src\morph.c" />
+ <ClCompile Include="..\leptonica\src\morphapp.c" />
+ <ClCompile Include="..\leptonica\src\morphdwa.c" />
+ <ClCompile Include="..\leptonica\src\morphseq.c" />
+ <ClCompile Include="..\leptonica\src\numabasic.c" />
+ <ClCompile Include="..\leptonica\src\numafunc1.c" />
+ <ClCompile Include="..\leptonica\src\numafunc2.c" />
+ <ClCompile Include="..\leptonica\src\pageseg.c" />
+ <ClCompile Include="..\leptonica\src\paintcmap.c" />
+ <ClCompile Include="..\leptonica\src\parseprotos.c" />
+ <ClCompile Include="..\leptonica\src\partify.c" />
+ <ClCompile Include="..\leptonica\src\partition.c" />
+ <ClCompile Include="..\leptonica\src\pdfio1.c" />
+ <ClCompile Include="..\leptonica\src\pdfio1stub.c" />
+ <ClCompile Include="..\leptonica\src\pdfio2.c" />
+ <ClCompile Include="..\leptonica\src\pdfio2stub.c" />
+ <ClCompile Include="..\leptonica\src\pix1.c" />
+ <ClCompile Include="..\leptonica\src\pix2.c" />
+ <ClCompile Include="..\leptonica\src\pix3.c" />
+ <ClCompile Include="..\leptonica\src\pix4.c" />
+ <ClCompile Include="..\leptonica\src\pix5.c" />
+ <ClCompile Include="..\leptonica\src\pixabasic.c" />
+ <ClCompile Include="..\leptonica\src\pixacc.c" />
+ <ClCompile Include="..\leptonica\src\pixafunc1.c" />
+ <ClCompile Include="..\leptonica\src\pixafunc2.c" />
+ <ClCompile Include="..\leptonica\src\pixalloc.c" />
+ <ClCompile Include="..\leptonica\src\pixarith.c" />
+ <ClCompile Include="..\leptonica\src\pixcomp.c" />
+ <ClCompile Include="..\leptonica\src\pixconv.c" />
+ <ClCompile Include="..\leptonica\src\pixlabel.c" />
+ <ClCompile Include="..\leptonica\src\pixtiling.c" />
+ <ClCompile Include="..\leptonica\src\pngio.c" />
+ <ClCompile Include="..\leptonica\src\pngiostub.c" />
+ <ClCompile Include="..\leptonica\src\pnmio.c" />
+ <ClCompile Include="..\leptonica\src\pnmiostub.c" />
+ <ClCompile Include="..\leptonica\src\projective.c" />
+ <ClCompile Include="..\leptonica\src\psio1.c" />
+ <ClCompile Include="..\leptonica\src\psio1stub.c" />
+ <ClCompile Include="..\leptonica\src\psio2.c" />
+ <ClCompile Include="..\leptonica\src\psio2stub.c" />
+ <ClCompile Include="..\leptonica\src\ptabasic.c" />
+ <ClCompile Include="..\leptonica\src\ptafunc1.c" />
+ <ClCompile Include="..\leptonica\src\ptafunc2.c" />
+ <ClCompile Include="..\leptonica\src\ptra.c" />
+ <ClCompile Include="..\leptonica\src\quadtree.c" />
+ <ClCompile Include="..\leptonica\src\queue.c" />
+ <ClCompile Include="..\leptonica\src\rank.c" />
+ <ClCompile Include="..\leptonica\src\rbtree.c" />
+ <ClCompile Include="..\leptonica\src\readbarcode.c" />
+ <ClCompile Include="..\leptonica\src\readfile.c" />
+ <ClCompile Include="..\leptonica\src\recogbasic.c" />
+ <ClCompile Include="..\leptonica\src\recogdid.c" />
+ <ClCompile Include="..\leptonica\src\recogident.c" />
+ <ClCompile Include="..\leptonica\src\recogtrain.c" />
+ <ClCompile Include="..\leptonica\src\regutils.c" />
+ <ClCompile Include="..\leptonica\src\rop.c" />
+ <ClCompile Include="..\leptonica\src\roplow.c" />
+ <ClCompile Include="..\leptonica\src\rotate.c" />
+ <ClCompile Include="..\leptonica\src\rotateam.c" />
+ <ClCompile Include="..\leptonica\src\rotateorth.c" />
+ <ClCompile Include="..\leptonica\src\rotateshear.c" />
+ <ClCompile Include="..\leptonica\src\runlength.c" />
+ <ClCompile Include="..\leptonica\src\sarray1.c" />
+ <ClCompile Include="..\leptonica\src\sarray2.c" />
+ <ClCompile Include="..\leptonica\src\scale1.c" />
+ <ClCompile Include="..\leptonica\src\scale2.c" />
+ <ClCompile Include="..\leptonica\src\seedfill.c" />
+ <ClCompile Include="..\leptonica\src\sel1.c" />
+ <ClCompile Include="..\leptonica\src\sel2.c" />
+ <ClCompile Include="..\leptonica\src\selgen.c" />
+ <ClCompile Include="..\leptonica\src\shear.c" />
+ <ClCompile Include="..\leptonica\src\skew.c" />
+ <ClCompile Include="..\leptonica\src\spixio.c" />
+ <ClCompile Include="..\leptonica\src\stack.c" />
+ <ClCompile Include="..\leptonica\src\stringcode.c" />
+ <ClCompile Include="..\leptonica\src\strokes.c" />
+ <ClCompile Include="..\leptonica\src\textops.c" />
+ <ClCompile Include="..\leptonica\src\tiffio.c" />
+ <ClCompile Include="..\leptonica\src\tiffiostub.c" />
+ <ClCompile Include="..\leptonica\src\utils1.c" />
+ <ClCompile Include="..\leptonica\src\utils2.c" />
+ <ClCompile Include="..\leptonica\src\warper.c" />
+ <ClCompile Include="..\leptonica\src\watershed.c" />
+ <ClCompile Include="..\leptonica\src\webpanimio.c" />
+ <ClCompile Include="..\leptonica\src\webpanimiostub.c" />
+ <ClCompile Include="..\leptonica\src\webpio.c" />
+ <ClCompile Include="..\leptonica\src\webpiostub.c" />
+ <ClCompile Include="..\leptonica\src\writefile.c" />
+ <ClCompile Include="..\leptonica\src\zlibmem.c" />
+ <ClCompile Include="..\leptonica\src\zlibmemstub.c" />
<ClCompile Include="..\libpng\example.c" />
<ClCompile Include="..\libpng\png.c" />
<ClCompile Include="..\libpng\pngerror.c" />
@@ -1925,6 +2104,233 @@
<ClCompile Include="..\psi\zusparam.c" />
<ClCompile Include="..\psi\zvmem.c" />
<ClCompile Include="..\psi\zvmem2.c" />
+ <ClCompile Include="..\tesseract\src\api\altorenderer.cpp" />
+ <ClCompile Include="..\tesseract\src\api\baseapi.cpp" />
+ <ClCompile Include="..\tesseract\src\api\capi.cpp" />
+ <ClCompile Include="..\tesseract\src\api\hocrrenderer.cpp" />
+ <ClCompile Include="..\tesseract\src\api\lstmboxrenderer.cpp" />
+ <ClCompile Include="..\tesseract\src\api\pdfrenderer.cpp" />
+ <ClCompile Include="..\tesseract\src\api\renderer.cpp" />
+ <ClCompile Include="..\tesseract\src\api\tesseractmain.cpp" />
+ <ClCompile Include="..\tesseract\src\api\wordstrboxrenderer.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\dotproduct.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\dotproductavx.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\dotproductfma.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\dotproductsse.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrix.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrixavx2.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrixneon.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrixsse.cpp" />
+ <ClCompile Include="..\tesseract\src\arch\simddetect.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\adaptions.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\applybox.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\control.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\docqual.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\equationdetect.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\fixspace.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\fixxht.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\linerec.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\ltrresultiterator.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\mutableiterator.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\osdetect.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\output.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\pageiterator.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\pagesegmain.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\pagewalk.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\paragraphs.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\paramsd.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\par_control.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\pgedit.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\recogtraining.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\reject.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\resultiterator.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\superscript.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\tessbox.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\tessedit.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\tesseractclass.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\tessvars.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\tfacepp.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\thresholder.cpp" />
+ <ClCompile Include="..\tesseract\src\ccmain\werdit.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\blamer.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\blobbox.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\blobs.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\blread.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\boxread.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\boxword.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\ccstruct.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\coutln.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\detlinefit.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\dppoint.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\fontinfo.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\imagedata.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\linlsq.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\matrix.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\mod128.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\normalis.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\ocrblock.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\ocrpara.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\ocrrow.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\otsuthr.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\pageres.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\params_training_featdef.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\pdblock.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\points.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\polyaprx.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\polyblk.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\quadlsq.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\quspline.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\ratngs.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\rect.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\rejctmap.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\seam.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\split.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\statistc.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\stepblob.cpp" />
+ <ClCompile Include="..\tesseract\src\ccstruct\werd.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\ambigs.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\bitvector.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\ccutil.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\clst.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\elst.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\elst2.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\errcode.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\globaloc.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\indexmapbidi.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\mainblk.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\params.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\scanutils.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\serialis.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\strngs.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\tessdatamanager.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\tprintf.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\unichar.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\unicharcompress.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\unicharmap.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\unicharset.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\unicodes.cpp" />
+ <ClCompile Include="..\tesseract\src\ccutil\universalambigs.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\adaptive.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\adaptmatch.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\blobclass.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\classify.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\cluster.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\clusttool.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\cutoffs.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\featdefs.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\float2int.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\fpoint.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\intfeaturespace.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\intfx.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\intmatcher.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\intproto.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\kdtree.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\mf.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\mfdefs.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\mfoutline.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\mfx.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\normfeat.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\normmatch.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\ocrfeatures.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\outfeat.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\picofeat.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\protos.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\shapeclassifier.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\shapetable.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\tessclassifier.cpp" />
+ <ClCompile Include="..\tesseract\src\classify\trainingsample.cpp" />
+ <ClCompile Include="..\tesseract\src\cutil\callcpp.cpp" />
+ <ClCompile Include="..\tesseract\src\cutil\emalloc.cpp" />
+ <ClCompile Include="..\tesseract\src\cutil\oldlist.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\context.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\dawg.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\dawg_cache.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\dict.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\hyphen.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\permdawg.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\stopper.cpp" />
+ <ClCompile Include="..\tesseract\src\dict\trie.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\convolve.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\fullyconnected.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\functions.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\input.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\lstm.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\lstmrecognizer.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\maxpool.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\network.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\networkio.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\parallel.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\plumbing.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\recodebeam.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\reconfig.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\reversed.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\series.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\stridemap.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\tfnetwork.cpp" />
+ <ClCompile Include="..\tesseract\src\lstm\weightmatrix.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\alignedblob.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\baselinedetect.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\bbgrid.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\blkocc.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\blobgrid.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\ccnontextdetect.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\cjkpitch.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\colfind.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\colpartition.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\colpartitiongrid.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\colpartitionset.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\devanagari_processing.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\drawtord.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\edgblob.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\edgloop.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\equationdetectbase.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\fpchop.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\gap_map.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\imagefind.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\linefind.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\makerow.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\oldbasel.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\pithsync.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\pitsync1.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\scanedg.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\sortflts.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\strokewidth.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tabfind.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tablefind.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tablerecog.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tabvector.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\textlineprojection.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\textord.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\topitch.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tordmain.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tospace.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\tovars.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\underlin.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\wordseg.cpp" />
+ <ClCompile Include="..\tesseract\src\textord\workingpartset.cpp" />
+ <ClCompile Include="..\tesseract\src\viewer\scrollview.cpp" />
+ <ClCompile Include="..\tesseract\src\viewer\svmnode.cpp" />
+ <ClCompile Include="..\tesseract\src\viewer\svpaint.cpp" />
+ <ClCompile Include="..\tesseract\src\viewer\svutil.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\associate.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\chop.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\chopper.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\drawfx.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\findseam.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\gradechop.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\language_model.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\lm_consistency.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\lm_pain_points.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\lm_state.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\outlines.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\params_model.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\pieces.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\plotedges.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\render.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\segsearch.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\tface.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\wordclass.cpp" />
+ <ClCompile Include="..\tesseract\src\wordrec\wordrec.cpp" />
<ClCompile Include="..\tiff\libtiff\mkg3states.c" />
<ClCompile Include="..\tiff\libtiff\tif_acorn.c" />
<ClCompile Include="..\tiff\libtiff\tif_apple.c" />
@@ -2386,6 +2792,7 @@
<ClInclude Include="..\base\strmio.h" />
<ClInclude Include="..\base\szlibx.h" />
<ClInclude Include="..\base\szlibxx.h" />
+ <ClInclude Include="..\base\tessocr.h" />
<ClInclude Include="..\base\time_.h" />
<ClInclude Include="..\base\ttcalc.h" />
<ClInclude Include="..\base\ttcommon.h" />
@@ -2472,6 +2879,7 @@
<ClInclude Include="..\devices\gdevmeds.h" />
<ClInclude Include="..\devices\gdevmgr.h" />
<ClInclude Include="..\devices\gdevpcl.h" />
+ <ClInclude Include="..\devices\gdevpdfimg.h" />
<ClInclude Include="..\devices\gdevplib.h" />
<ClInclude Include="..\devices\gdevpm.h" />
<ClInclude Include="..\devices\gdevprna.h" />
@@ -2575,6 +2983,37 @@
<ClInclude Include="..\lcms2mt\include\lcms2mt_plugin.h" />
<ClInclude Include="..\lcms2mt\src\extra_xform.h" />
<ClInclude Include="..\lcms2mt\src\lcms2_internal.h" />
+ <ClInclude Include="..\leptonica\src\allheaders.h" />
+ <ClInclude Include="..\leptonica\src\alltypes.h" />
+ <ClInclude Include="..\leptonica\src\array.h" />
+ <ClInclude Include="..\leptonica\src\arrayaccess.h" />
+ <ClInclude Include="..\leptonica\src\bbuffer.h" />
+ <ClInclude Include="..\leptonica\src\bilateral.h" />
+ <ClInclude Include="..\leptonica\src\bmf.h" />
+ <ClInclude Include="..\leptonica\src\bmfdata.h" />
+ <ClInclude Include="..\leptonica\src\bmp.h" />
+ <ClInclude Include="..\leptonica\src\ccbord.h" />
+ <ClInclude Include="..\leptonica\src\colorinfo.h" />
+ <ClInclude Include="..\leptonica\src\dewarp.h" />
+ <ClInclude Include="..\leptonica\src\endianness.h" />
+ <ClInclude Include="..\leptonica\src\environ.h" />
+ <ClInclude Include="..\leptonica\src\gplot.h" />
+ <ClInclude Include="..\leptonica\src\heap.h" />
+ <ClInclude Include="..\leptonica\src\imageio.h" />
+ <ClInclude Include="..\leptonica\src\jbclass.h" />
+ <ClInclude Include="..\leptonica\src\leptwin.h" />
+ <ClInclude Include="..\leptonica\src\list.h" />
+ <ClInclude Include="..\leptonica\src\morph.h" />
+ <ClInclude Include="..\leptonica\src\pix.h" />
+ <ClInclude Include="..\leptonica\src\ptra.h" />
+ <ClInclude Include="..\leptonica\src\queue.h" />
+ <ClInclude Include="..\leptonica\src\rbtree.h" />
+ <ClInclude Include="..\leptonica\src\readbarcode.h" />
+ <ClInclude Include="..\leptonica\src\recog.h" />
+ <ClInclude Include="..\leptonica\src\regutils.h" />
+ <ClInclude Include="..\leptonica\src\stack.h" />
+ <ClInclude Include="..\leptonica\src\stringcode.h" />
+ <ClInclude Include="..\leptonica\src\watershed.h" />
<ClInclude Include="..\libpng\png.h" />
<ClInclude Include="..\libpng\pngconf.h" />
<ClInclude Include="..\openjpeg\src\lib\openjp2\bio.h" />
@@ -2728,6 +3167,223 @@
<ClInclude Include="..\psi\zfunc.h" />
<ClInclude Include="..\psi\zht2.h" />
<ClInclude Include="..\psi\zicc.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\apitypes.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\baseapi.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\capi.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\genericvector.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\helpers.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\ltrresultiterator.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\ocrclass.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\osdetect.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\pageiterator.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\platform.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\publictypes.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\renderer.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\resultiterator.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\serialis.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\strngs.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\thresholder.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\unichar.h" />
+ <ClInclude Include="..\tesseract\include\tesseract\version.h" />
+ <ClInclude Include="..\tesseract\src\arch\dotproduct.h" />
+ <ClInclude Include="..\tesseract\src\arch\intsimdmatrix.h" />
+ <ClInclude Include="..\tesseract\src\arch\simddetect.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\control.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\docqual.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\equationdetect.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\fixspace.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\mutableiterator.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\output.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\paragraphs.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\paragraphs_internal.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\paramsd.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\pgedit.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\reject.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\tesseractclass.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\tessvars.h" />
+ <ClInclude Include="..\tesseract\src\ccmain\werdit.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\blamer.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\blobbox.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\blobs.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\blread.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\boxread.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\boxword.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\ccstruct.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\coutln.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\crakedge.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\debugpixa.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\detlinefit.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\dppoint.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\fontinfo.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\imagedata.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\linlsq.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\matrix.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\mod128.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\normalis.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\ocrblock.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\ocrpara.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\ocrrow.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\otsuthr.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\pageres.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\params_training_featdef.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\pdblock.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\points.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\polyaprx.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\polyblk.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\quadlsq.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\quadratc.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\quspline.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\ratngs.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\rect.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\rejctmap.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\seam.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\split.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\statistc.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\stepblob.h" />
+ <ClInclude Include="..\tesseract\src\ccstruct\werd.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\ambigs.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\bits16.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\bitvector.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\ccutil.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\clst.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\doubleptr.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\elst.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\elst2.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\errcode.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\fileerr.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\genericheap.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\globaloc.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\host.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\indexmapbidi.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\kdpair.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\lsterr.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\object_cache.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\params.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\qrsequence.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\scanutils.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\sorthelper.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\tessdatamanager.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\tprintf.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\unicharcompress.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\unicharmap.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\unicharset.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\unicity_table.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\unicodes.h" />
+ <ClInclude Include="..\tesseract\src\ccutil\universalambigs.h" />
+ <ClInclude Include="..\tesseract\src\classify\adaptive.h" />
+ <ClInclude Include="..\tesseract\src\classify\blobclass.h" />
+ <ClInclude Include="..\tesseract\src\classify\classify.h" />
+ <ClInclude Include="..\tesseract\src\classify\cluster.h" />
+ <ClInclude Include="..\tesseract\src\classify\clusttool.h" />
+ <ClInclude Include="..\tesseract\src\classify\featdefs.h" />
+ <ClInclude Include="..\tesseract\src\classify\float2int.h" />
+ <ClInclude Include="..\tesseract\src\classify\fpoint.h" />
+ <ClInclude Include="..\tesseract\src\classify\intfeaturespace.h" />
+ <ClInclude Include="..\tesseract\src\classify\intfx.h" />
+ <ClInclude Include="..\tesseract\src\classify\intmatcher.h" />
+ <ClInclude Include="..\tesseract\src\classify\intproto.h" />
+ <ClInclude Include="..\tesseract\src\classify\kdtree.h" />
+ <ClInclude Include="..\tesseract\src\classify\mf.h" />
+ <ClInclude Include="..\tesseract\src\classify\mfdefs.h" />
+ <ClInclude Include="..\tesseract\src\classify\mfoutline.h" />
+ <ClInclude Include="..\tesseract\src\classify\mfx.h" />
+ <ClInclude Include="..\tesseract\src\classify\normfeat.h" />
+ <ClInclude Include="..\tesseract\src\classify\normmatch.h" />
+ <ClInclude Include="..\tesseract\src\classify\ocrfeatures.h" />
+ <ClInclude Include="..\tesseract\src\classify\outfeat.h" />
+ <ClInclude Include="..\tesseract\src\classify\picofeat.h" />
+ <ClInclude Include="..\tesseract\src\classify\protos.h" />
+ <ClInclude Include="..\tesseract\src\classify\shapeclassifier.h" />
+ <ClInclude Include="..\tesseract\src\classify\shapetable.h" />
+ <ClInclude Include="..\tesseract\src\classify\tessclassifier.h" />
+ <ClInclude Include="..\tesseract\src\classify\trainingsample.h" />
+ <ClInclude Include="..\tesseract\src\cutil\bitvec.h" />
+ <ClInclude Include="..\tesseract\src\cutil\callcpp.h" />
+ <ClInclude Include="..\tesseract\src\cutil\emalloc.h" />
+ <ClInclude Include="..\tesseract\src\cutil\oldlist.h" />
+ <ClInclude Include="..\tesseract\src\dict\dawg.h" />
+ <ClInclude Include="..\tesseract\src\dict\dawg_cache.h" />
+ <ClInclude Include="..\tesseract\src\dict\dict.h" />
+ <ClInclude Include="..\tesseract\src\dict\matchdefs.h" />
+ <ClInclude Include="..\tesseract\src\dict\stopper.h" />
+ <ClInclude Include="..\tesseract\src\dict\trie.h" />
+ <ClInclude Include="..\tesseract\src\lstm\convolve.h" />
+ <ClInclude Include="..\tesseract\src\lstm\fullyconnected.h" />
+ <ClInclude Include="..\tesseract\src\lstm\functions.h" />
+ <ClInclude Include="..\tesseract\src\lstm\input.h" />
+ <ClInclude Include="..\tesseract\src\lstm\lstm.h" />
+ <ClInclude Include="..\tesseract\src\lstm\lstmrecognizer.h" />
+ <ClInclude Include="..\tesseract\src\lstm\maxpool.h" />
+ <ClInclude Include="..\tesseract\src\lstm\network.h" />
+ <ClInclude Include="..\tesseract\src\lstm\networkio.h" />
+ <ClInclude Include="..\tesseract\src\lstm\networkscratch.h" />
+ <ClInclude Include="..\tesseract\src\lstm\parallel.h" />
+ <ClInclude Include="..\tesseract\src\lstm\plumbing.h" />
+ <ClInclude Include="..\tesseract\src\lstm\recodebeam.h" />
+ <ClInclude Include="..\tesseract\src\lstm\reconfig.h" />
+ <ClInclude Include="..\tesseract\src\lstm\reversed.h" />
+ <ClInclude Include="..\tesseract\src\lstm\series.h" />
+ <ClInclude Include="..\tesseract\src\lstm\static_shape.h" />
+ <ClInclude Include="..\tesseract\src\lstm\stridemap.h" />
+ <ClInclude Include="..\tesseract\src\lstm\tfnetwork.h" />
+ <ClInclude Include="..\tesseract\src\lstm\tfnetwork.pb.h" />
+ <ClInclude Include="..\tesseract\src\lstm\weightmatrix.h" />
+ <ClInclude Include="..\tesseract\src\textord\alignedblob.h" />
+ <ClInclude Include="..\tesseract\src\textord\baselinedetect.h" />
+ <ClInclude Include="..\tesseract\src\textord\bbgrid.h" />
+ <ClInclude Include="..\tesseract\src\textord\blkocc.h" />
+ <ClInclude Include="..\tesseract\src\textord\blobgrid.h" />
+ <ClInclude Include="..\tesseract\src\textord\ccnontextdetect.h" />
+ <ClInclude Include="..\tesseract\src\textord\cjkpitch.h" />
+ <ClInclude Include="..\tesseract\src\textord\colfind.h" />
+ <ClInclude Include="..\tesseract\src\textord\colpartition.h" />
+ <ClInclude Include="..\tesseract\src\textord\colpartitiongrid.h" />
+ <ClInclude Include="..\tesseract\src\textord\colpartitionset.h" />
+ <ClInclude Include="..\tesseract\src\textord\devanagari_processing.h" />
+ <ClInclude Include="..\tesseract\src\textord\drawtord.h" />
+ <ClInclude Include="..\tesseract\src\textord\edgblob.h" />
+ <ClInclude Include="..\tesseract\src\textord\edgloop.h" />
+ <ClInclude Include="..\tesseract\src\textord\equationdetectbase.h" />
+ <ClInclude Include="..\tesseract\src\textord\fpchop.h" />
+ <ClInclude Include="..\tesseract\src\textord\gap_map.h" />
+ <ClInclude Include="..\tesseract\src\textord\imagefind.h" />
+ <ClInclude Include="..\tesseract\src\textord\linefind.h" />
+ <ClInclude Include="..\tesseract\src\textord\makerow.h" />
+ <ClInclude Include="..\tesseract\src\textord\oldbasel.h" />
+ <ClInclude Include="..\tesseract\src\textord\pithsync.h" />
+ <ClInclude Include="..\tesseract\src\textord\pitsync1.h" />
+ <ClInclude Include="..\tesseract\src\textord\scanedg.h" />
+ <ClInclude Include="..\tesseract\src\textord\sortflts.h" />
+ <ClInclude Include="..\tesseract\src\textord\strokewidth.h" />
+ <ClInclude Include="..\tesseract\src\textord\tabfind.h" />
+ <ClInclude Include="..\tesseract\src\textord\tablefind.h" />
+ <ClInclude Include="..\tesseract\src\textord\tablerecog.h" />
+ <ClInclude Include="..\tesseract\src\textord\tabvector.h" />
+ <ClInclude Include="..\tesseract\src\textord\textlineprojection.h" />
+ <ClInclude Include="..\tesseract\src\textord\textord.h" />
+ <ClInclude Include="..\tesseract\src\textord\topitch.h" />
+ <ClInclude Include="..\tesseract\src\textord\tordmain.h" />
+ <ClInclude Include="..\tesseract\src\textord\tovars.h" />
+ <ClInclude Include="..\tesseract\src\textord\underlin.h" />
+ <ClInclude Include="..\tesseract\src\textord\wordseg.h" />
+ <ClInclude Include="..\tesseract\src\textord\workingpartset.h" />
+ <ClInclude Include="..\tesseract\src\viewer\scrollview.h" />
+ <ClInclude Include="..\tesseract\src\viewer\svmnode.h" />
+ <ClInclude Include="..\tesseract\src\viewer\svutil.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\associate.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\chop.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\drawfx.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\findseam.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\language_model.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\lm_consistency.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\lm_pain_points.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\lm_state.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\measure.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\outlines.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\params_model.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\plotedges.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\render.h" />
+ <ClInclude Include="..\tesseract\src\wordrec\wordrec.h" />
<ClInclude Include="..\tiff\libtiff\t4.h" />
<ClInclude Include="..\tiff\libtiff\tiff.h" />
<ClInclude Include="..\tiff\libtiff\tiffconf.vc.h" />
diff --git a/windows/ghostscript.vcxproj.filters b/windows/ghostscript.vcxproj.filters
index 79d4b1f74..fd12824cc 100644
--- a/windows/ghostscript.vcxproj.filters
+++ b/windows/ghostscript.vcxproj.filters
@@ -184,6 +184,51 @@
<Filter Include="urf">
<UniqueIdentifier>{a420d4f4-ac35-48c1-b997-8004f7ae79d7}</UniqueIdentifier>
</Filter>
+ <Filter Include="leptonica">
+ <UniqueIdentifier>{cb48cac6-a1af-4257-807b-19085c7cdb1a}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract">
+ <UniqueIdentifier>{7b741378-6c33-497e-ad7f-93dd1ae710fe}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\include">
+ <UniqueIdentifier>{cab6877a-5676-4cc9-8724-2f7e7fade042}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\api">
+ <UniqueIdentifier>{af403905-0517-4269-a9b2-7b10703f495f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\arch">
+ <UniqueIdentifier>{a7b9ce88-2b1b-42b3-9ccd-955aee7b244f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\ccmain">
+ <UniqueIdentifier>{3508c7d6-7646-47e1-b60e-26e3872030d7}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\ccstruct">
+ <UniqueIdentifier>{1123f6ca-e285-4430-8e2d-adb8b4c32f10}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\ccutil">
+ <UniqueIdentifier>{e145daea-cbaf-45d1-924f-23d9f38c78ee}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\classify">
+ <UniqueIdentifier>{c189da2c-6166-47ac-a876-dda8013a7a8b}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\cutil">
+ <UniqueIdentifier>{9e304f3b-e87b-48d5-92f7-5826c71fd926}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\dict">
+ <UniqueIdentifier>{d1276e20-672b-4349-8f71-220c7c37315d}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\lstm">
+ <UniqueIdentifier>{4624f4da-7119-49c1-81a0-21e3746a2cc0}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\textord">
+ <UniqueIdentifier>{4a609d87-7312-47ea-bb63-20f903c54ea5}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\viewer">
+ <UniqueIdentifier>{c5dbae86-9146-4d69-b3ac-f1d086927792}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="tesseract\wordrec">
+ <UniqueIdentifier>{d5ba0dd7-f585-494f-a5a3-eca161773d74}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<None Include="..\Resource\CMap\78-EUC-H">
@@ -4757,6 +4802,1224 @@
<ClCompile Include="..\urf\urffilter.c">
<Filter>urf</Filter>
</ClCompile>
+ <ClCompile Include="..\devices\gdevocr.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\adaptmap.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\affine.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\affinecompose.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\arrayaccess.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bardecode.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\baseline.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bbuffer.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bilateral.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bilinear.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\binarize.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\binexpand.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\binreduce.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\blend.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bmf.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bmpio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bmpiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bootnumgen1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bootnumgen2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bootnumgen3.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bootnumgen4.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\boxbasic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\boxfunc1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\boxfunc2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\boxfunc3.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\boxfunc4.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\boxfunc5.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\bytearray.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\ccbord.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\ccthin.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\classapp.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colorcontent.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colorinfo.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\coloring.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colormap.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colormorph.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colorquant1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colorquant2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colorseg.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\colorspace.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\compare.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\conncomp.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\convertfiles.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\convolve.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\correlscore.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dewarp1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dewarp2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dewarp3.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dewarp4.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dnabasic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dnafunc1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dnahash.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dwacomb.2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\dwacomblow.2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\edge.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\encoding.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\enhance.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fhmtauto.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fhmtgen.1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fhmtgenlow.1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\finditalic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\flipdetect.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fliphmtgen.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fmorphauto.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fmorphgen.1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fmorphgenlow.1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fpix1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\fpix2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\gifio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\gifiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\gplot.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\graphics.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\graymorph.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\grayquant.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\heap.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jbclass.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jp2kheader.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jp2kheaderstub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jp2kio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jp2kiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jpegio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\jpegiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\kernel.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\leptwin.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\libversions.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\list.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\map.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\morph.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\morphapp.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\morphdwa.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\morphseq.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\numabasic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\numafunc1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\numafunc2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pageseg.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\paintcmap.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\parseprotos.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\partify.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\partition.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pdfio1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pdfio1stub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pdfio2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pdfio2stub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pix1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pix2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pix3.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pix4.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pix5.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixabasic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixacc.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixafunc1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixafunc2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixalloc.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixarith.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixcomp.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixconv.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixlabel.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pixtiling.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pngio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pngiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pnmio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\pnmiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\projective.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\psio1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\psio1stub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\psio2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\psio2stub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\ptabasic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\ptafunc1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\ptafunc2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\ptra.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\quadtree.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\queue.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rank.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rbtree.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\readbarcode.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\readfile.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\recogbasic.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\recogdid.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\recogident.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\recogtrain.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\regutils.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rop.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\roplow.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rotate.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rotateam.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rotateorth.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\rotateshear.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\runlength.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\sarray1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\sarray2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\scale1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\scale2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\seedfill.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\sel1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\sel2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\selgen.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\shear.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\skew.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\spixio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\stack.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\stringcode.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\strokes.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\textops.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\tiffio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\tiffiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\utils1.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\utils2.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\warper.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\watershed.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\webpanimio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\webpanimiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\webpio.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\webpiostub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\writefile.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\zlibmem.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\leptonica\src\zlibmemstub.c">
+ <Filter>leptonica</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\altorenderer.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\baseapi.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\capi.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\hocrrenderer.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\lstmboxrenderer.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\pdfrenderer.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\renderer.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\tesseractmain.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\api\wordstrboxrenderer.cpp">
+ <Filter>tesseract\api</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\dotproduct.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\dotproductavx.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\dotproductfma.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\dotproductsse.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrix.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrixavx2.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrixsse.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\simddetect.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\base\tessocr.cpp">
+ <Filter>base</Filter>
+ </ClCompile>
+ <ClCompile Include="..\devices\gdevpdfocr.c">
+ <Filter>devices</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\arch\intsimdmatrixneon.cpp">
+ <Filter>tesseract\arch</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\adaptions.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\applybox.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\control.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\docqual.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\equationdetect.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\fixspace.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\fixxht.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\linerec.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\ltrresultiterator.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\mutableiterator.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\osdetect.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\output.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\pageiterator.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\pagesegmain.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\pagewalk.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\par_control.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\paragraphs.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\paramsd.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\pgedit.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\recogtraining.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\reject.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\resultiterator.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\superscript.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\tessbox.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\tessedit.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\tesseractclass.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\tessvars.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\tfacepp.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\thresholder.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccmain\werdit.cpp">
+ <Filter>tesseract\ccmain</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\blamer.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\blobbox.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\blobs.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\blread.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\boxread.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\boxword.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\ccstruct.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\coutln.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\detlinefit.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\dppoint.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\fontinfo.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\imagedata.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\linlsq.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\matrix.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\mod128.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\normalis.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\ocrblock.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\ocrpara.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\ocrrow.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\otsuthr.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\pageres.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\params_training_featdef.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\pdblock.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\points.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\polyaprx.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\polyblk.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\quadlsq.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\quspline.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\ratngs.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\rect.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\rejctmap.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\seam.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\split.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\statistc.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\stepblob.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccstruct\werd.cpp">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\ambigs.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\bitvector.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\ccutil.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\clst.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\elst.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\elst2.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\errcode.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\globaloc.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\indexmapbidi.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\mainblk.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\params.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\scanutils.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\serialis.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\strngs.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\tessdatamanager.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\tprintf.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\unichar.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\unicharcompress.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\unicharmap.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\unicharset.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\unicodes.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\ccutil\universalambigs.cpp">
+ <Filter>tesseract\ccutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\adaptive.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\adaptmatch.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\blobclass.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\classify.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\cluster.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\clusttool.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\cutoffs.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\featdefs.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\float2int.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\fpoint.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\intfeaturespace.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\intfx.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\intmatcher.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\intproto.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\kdtree.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\mf.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\mfdefs.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\mfoutline.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\mfx.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\normfeat.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\normmatch.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\ocrfeatures.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\outfeat.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\picofeat.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\protos.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\shapeclassifier.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\shapetable.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\tessclassifier.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\classify\trainingsample.cpp">
+ <Filter>tesseract\classify</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\cutil\callcpp.cpp">
+ <Filter>tesseract\cutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\cutil\emalloc.cpp">
+ <Filter>tesseract\cutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\cutil\oldlist.cpp">
+ <Filter>tesseract\cutil</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\context.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\dawg.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\dawg_cache.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\dict.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\hyphen.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\permdawg.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\stopper.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\dict\trie.cpp">
+ <Filter>tesseract\dict</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\convolve.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\fullyconnected.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\functions.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\input.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\lstm.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\lstmrecognizer.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\maxpool.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\network.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\networkio.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\parallel.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\plumbing.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\recodebeam.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\reconfig.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\reversed.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\series.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\stridemap.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\tfnetwork.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\lstm\weightmatrix.cpp">
+ <Filter>tesseract\lstm</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\alignedblob.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\baselinedetect.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\bbgrid.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\blkocc.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\blobgrid.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\ccnontextdetect.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\cjkpitch.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\colfind.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\colpartition.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\colpartitiongrid.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\colpartitionset.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\devanagari_processing.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\drawtord.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\edgblob.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\edgloop.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\equationdetectbase.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\fpchop.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\gap_map.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\imagefind.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\linefind.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\makerow.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\oldbasel.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\pithsync.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\pitsync1.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\scanedg.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\sortflts.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\strokewidth.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tabfind.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tablefind.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tablerecog.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tabvector.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\textlineprojection.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\textord.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\topitch.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tordmain.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tospace.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\tovars.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\underlin.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\wordseg.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\textord\workingpartset.cpp">
+ <Filter>tesseract\textord</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\viewer\scrollview.cpp">
+ <Filter>tesseract\viewer</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\viewer\svmnode.cpp">
+ <Filter>tesseract\viewer</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\viewer\svpaint.cpp">
+ <Filter>tesseract\viewer</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\viewer\svutil.cpp">
+ <Filter>tesseract\viewer</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\associate.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\chop.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\chopper.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\drawfx.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\findseam.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\gradechop.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\language_model.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\lm_consistency.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\lm_pain_points.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\lm_state.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\outlines.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\params_model.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\pieces.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\plotedges.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\render.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\segsearch.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\tface.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\wordclass.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
+ <ClCompile Include="..\tesseract\src\wordrec\wordrec.cpp">
+ <Filter>tesseract\wordrec</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\base\aes.h">
@@ -6943,6 +8206,756 @@
<ClInclude Include="..\urf\surfx.h">
<Filter>urf</Filter>
</ClInclude>
+ <ClInclude Include="..\leptonica\src\allheaders.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\alltypes.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\array.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\arrayaccess.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\bbuffer.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\bilateral.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\bmf.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\bmfdata.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\bmp.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\ccbord.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\colorinfo.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\dewarp.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\endianness.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\environ.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\gplot.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\heap.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\imageio.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\jbclass.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\leptwin.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\list.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\morph.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\pix.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\ptra.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\queue.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\rbtree.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\readbarcode.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\recog.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\regutils.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\stack.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\stringcode.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\leptonica\src\watershed.h">
+ <Filter>leptonica</Filter>
+ </ClInclude>
+ <ClInclude Include="..\base\tessocr.h">
+ <Filter>base %28.h%29</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\version.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\arch\dotproduct.h">
+ <Filter>tesseract\arch</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\arch\intsimdmatrix.h">
+ <Filter>tesseract\arch</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\arch\simddetect.h">
+ <Filter>tesseract\arch</Filter>
+ </ClInclude>
+ <ClInclude Include="..\devices\gdevpdfimg.h">
+ <Filter>devices</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\apitypes.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\baseapi.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\capi.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\genericvector.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\helpers.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\ltrresultiterator.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\ocrclass.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\osdetect.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\pageiterator.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\platform.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\publictypes.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\renderer.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\resultiterator.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\serialis.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\strngs.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\thresholder.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\include\tesseract\unichar.h">
+ <Filter>tesseract\include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\control.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\docqual.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\equationdetect.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\fixspace.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\mutableiterator.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\output.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\paragraphs.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\paragraphs_internal.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\paramsd.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\pgedit.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\reject.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\tesseractclass.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\tessvars.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccmain\werdit.h">
+ <Filter>tesseract\ccmain</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\blamer.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\blobbox.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\blobs.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\blread.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\boxread.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\boxword.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\ccstruct.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\coutln.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\crakedge.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\debugpixa.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\detlinefit.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\dppoint.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\fontinfo.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\imagedata.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\linlsq.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\matrix.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\mod128.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\normalis.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\ocrblock.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\ocrpara.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\ocrrow.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\otsuthr.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\pageres.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\params_training_featdef.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\pdblock.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\points.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\polyaprx.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\polyblk.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\quadlsq.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\quadratc.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\quspline.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\ratngs.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\rect.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\rejctmap.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\seam.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\split.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\statistc.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\stepblob.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccstruct\werd.h">
+ <Filter>tesseract\ccstruct</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\ambigs.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\bits16.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\bitvector.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\ccutil.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\clst.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\doubleptr.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\elst.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\elst2.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\errcode.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\fileerr.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\genericheap.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\globaloc.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\host.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\indexmapbidi.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\kdpair.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\lsterr.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\object_cache.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\params.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\qrsequence.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\scanutils.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\sorthelper.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\tessdatamanager.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\tprintf.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\unicharcompress.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\unicharmap.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\unicharset.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\unicity_table.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\unicodes.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\ccutil\universalambigs.h">
+ <Filter>tesseract\ccutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\adaptive.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\blobclass.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\classify.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\cluster.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\clusttool.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\featdefs.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\float2int.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\fpoint.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\intfeaturespace.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\intfx.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\intmatcher.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\intproto.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\kdtree.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\mf.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\mfdefs.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\mfoutline.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\mfx.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\normfeat.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\normmatch.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\ocrfeatures.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\outfeat.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\picofeat.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\protos.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\shapeclassifier.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\shapetable.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\tessclassifier.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\classify\trainingsample.h">
+ <Filter>tesseract\classify</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\cutil\bitvec.h">
+ <Filter>tesseract\cutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\cutil\callcpp.h">
+ <Filter>tesseract\cutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\cutil\emalloc.h">
+ <Filter>tesseract\cutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\cutil\oldlist.h">
+ <Filter>tesseract\cutil</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\dict\dawg.h">
+ <Filter>tesseract\dict</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\dict\dawg_cache.h">
+ <Filter>tesseract\dict</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\dict\dict.h">
+ <Filter>tesseract\dict</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\dict\matchdefs.h">
+ <Filter>tesseract\dict</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\dict\stopper.h">
+ <Filter>tesseract\dict</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\dict\trie.h">
+ <Filter>tesseract\dict</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\convolve.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\fullyconnected.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\functions.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\input.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\lstm.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\lstmrecognizer.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\maxpool.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\network.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\networkio.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\networkscratch.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\parallel.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\plumbing.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\recodebeam.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\reconfig.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\reversed.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\series.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\static_shape.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\stridemap.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\tfnetwork.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\tfnetwork.pb.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\lstm\weightmatrix.h">
+ <Filter>tesseract\lstm</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\alignedblob.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\baselinedetect.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\bbgrid.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\blkocc.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\blobgrid.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\ccnontextdetect.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\cjkpitch.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\colfind.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\colpartition.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\colpartitiongrid.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\colpartitionset.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\devanagari_processing.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\drawtord.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\edgblob.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\edgloop.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\equationdetectbase.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\fpchop.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\gap_map.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\imagefind.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\linefind.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\makerow.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\oldbasel.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\pithsync.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\pitsync1.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\scanedg.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\sortflts.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\strokewidth.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\tabfind.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\tablefind.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\tablerecog.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\tabvector.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\textlineprojection.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\textord.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\topitch.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\tordmain.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\tovars.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\underlin.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\wordseg.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\textord\workingpartset.h">
+ <Filter>tesseract\textord</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\viewer\scrollview.h">
+ <Filter>tesseract\viewer</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\viewer\svmnode.h">
+ <Filter>tesseract\viewer</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\viewer\svutil.h">
+ <Filter>tesseract\viewer</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\associate.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\chop.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\drawfx.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\findseam.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\language_model.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\lm_consistency.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\lm_pain_points.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\lm_state.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\measure.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\outlines.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\params_model.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\plotedges.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\render.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
+ <ClInclude Include="..\tesseract\src\wordrec\wordrec.h">
+ <Filter>tesseract\wordrec</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\base\gspmdrv.rc">