diff options
author | Robin Watts <Robin.Watts@artifex.com> | 2020-04-24 14:13:39 +0100 |
---|---|---|
committer | Robin Watts <Robin.Watts@artifex.com> | 2020-06-02 19:27:16 +0100 |
commit | f7b7e4107163a0efe9861069449e3d037b1eba61 (patch) | |
tree | c2053d6a55ca9f16f0ff52293da94132075e2df7 | |
parent | 13e814d6159d96a7305603dcfc95aa09fd1bb67a (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.in | 17 | ||||
-rw-r--r-- | base/endianness.h | 17 | ||||
-rw-r--r-- | base/gsiorom.c | 37 | ||||
-rw-r--r-- | base/gxiodev.h | 7 | ||||
-rw-r--r-- | base/leptonica.mak | 644 | ||||
-rw-r--r-- | base/lib.mak | 22 | ||||
-rw-r--r-- | base/msvccmd.mak | 1 | ||||
-rw-r--r-- | base/ocr.mak | 46 | ||||
-rw-r--r-- | base/tess_version.h | 30 | ||||
-rw-r--r-- | base/tesseract.mak | 1178 | ||||
-rw-r--r-- | base/tessocr.cpp | 443 | ||||
-rw-r--r-- | base/tessocr.h | 45 | ||||
-rw-r--r-- | base/unix-gcc.mak | 1 | ||||
-rw-r--r-- | base/winlib.mak | 7 | ||||
-rw-r--r-- | configure.ac | 157 | ||||
-rw-r--r-- | devices/devs.mak | 49 | ||||
-rw-r--r-- | devices/gdevocr.c | 266 | ||||
-rw-r--r-- | devices/gdevpdfimg.c | 150 | ||||
-rw-r--r-- | devices/gdevpdfimg.h | 104 | ||||
-rw-r--r-- | devices/gdevpdfocr.c | 727 | ||||
-rw-r--r-- | psi/msvc.mak | 18 | ||||
-rw-r--r-- | windows/ghostscript.vcxproj | 656 | ||||
-rw-r--r-- | windows/ghostscript.vcxproj.filters | 2013 |
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"> |