KADMOS.h
/****************************************************************************
*
* kadmos.h
*
* $Date: ##-###-#### 03:46 $
*
* Copyright 1993-2019 re Recognition GmbH
* Hafenstrasse 50b, 8280 Kreuzlingen, Switzerland
* +41 (0)71 6725100
* info@reRecognition.com * www.reRecognition.com
*
****************************************************************************/
#ifndef INC_KADMOS
#define INC_KADMOS "6.0a"
#define KADMOS_MAJOR 0x##
#define KADMOS_MINOR 'a'
#define KADMOS_MKVER(major, minor) (((major)<8) | (minor))
#define KADMOS_VERSION KADMOS_MKVER(KADMOS_MAJOR, KADMOS_MINOR)
/* sample usage: #if KADMOS_VERSION >= KADMOS_MKVER(0x60,'b') */
#ifdef __cplusplus
extern "C" {
#endif
#if !defined(_MSC_VER) || (_MSC_VER<1400)
#if !defined(INT_PTR)
#define INT_PTR long
#endif
#endif
/****************************************************************************
*
* Definition von KADMOS_API
*
****************************************************************************/
#ifndef KADMOS_API
#if defined(_WIN32) || defined(_WIN64)
#define KADMOS_API __stdcall
#else
#define KADMOS_API
#endif
#endif
extern int licfile_authorised(const char *file_title); // DLL version only; int==BOOL
/****************************************************************************
*
* Funktionen zur Abbruch- und Fehlerkontrolle
*
****************************************************************************/
#if !defined RE_ERRORHANDLING
#define RE_ERRORHANDLING
/* *** Beim Multithreading sind die folgenden Einstellungen und Funktionen Thread-spezifisch */
/* *** Sie haben nur Auswirkungen auf den verwandten Thread */
Konfiguration der KADMOS-Fehlerbehandlung festlegen / abrufen */
extern long KADMOS_API re_SetErrorConfig(long config);
extern long KADMOS_API re_GetErrorConfig(void);
/*** Makros zur Konfiguration der Fehlerbehandlung ('config' values) */
/* Standard-Programmbeendigung aktivieren / deaktivieren */
/* Strg + Pause, ESC, ALT + F4 (Konsolenanwendung und Windows) oder Strg + C (nur Konsolenanwendung): */
#define RE_QUITENABLED 0x80000000 /* Standard */
/* Konsolenausgabe von Fehlertexten und Warnungen aktivieren / deaktivieren: */
#define RE_ERRORDISPLAY 0x20000000 /* Standard */
/* Wenn RE_ERRORDISPLAY deaktiviert ist, sollte ein privater Fehlerbehandler installiert werden, */
/* um alle Fehlernachrichten abzurufen */
/* Programmabbruch nach Fehlern aktivieren / deaktivieren: */
#define RE_ERROREXIT 0x10000000
/* Aktivieren / Deaktivieren der Behandlung von Warnungen wie Fehlern (außer der Anzeige): */
#define RE_ENABLEWARNINGS 0x08000000
/* Um eine der vorherigen Einstellungen RE_XXXXXXXX zu deaktivieren, rufen Sie Folgendes auf: */
/* re_SetErrorConfig(re_GetErrorConfig()&~RE_XXXXXXXX); */
/* Deaktivieren Sie die Fehlerbehandlung, außer bei Fehler: */
#define RE_NOERRORHANDLING 0x00000000
#define KADMOS_ERROR long
/* set/get private_data des KADMOS-Fehlertextes */
extern KADMOS_ERROR KADMOS_API re_SetPrivateData(long private_data);
extern long KADMOS_API re_GetPrivateData(void);
#define RE_ERROR_PROGRAM_LEN 64
#define RE_ERROR_TEXT_LEN 512
typedef struct re_ErrorText_tag {
KADMOS_ERROR ident;
char program[RE_ERROR_PROGRAM_LEN];
char text[RE_ERROR_TEXT_LEN];
char systext[RE_ERROR_TEXT_LEN];
long private_data;
} re_ErrorText;
typedef struct re_wErrorText_tag {
KADMOS_ERROR ident;
wchar_t program[RE_ERROR_PROGRAM_LEN];
wchar_t text[RE_ERROR_TEXT_LEN];
wchar_t systext[RE_ERROR_TEXT_LEN];
long private_data;
} re_wErrorText;
/* Fehlertypen (Werte von ident) */
#define RE_SUCCESS 0x00000000
#define RE_ERROR 0x80000000
#define RE_QUIT 0x40000000
#define RE_WARNING 0x20000000
#define RE_INFO 0x10000000
#define RE_PARAMETERERROR 0x88000000
#define RE_MEMORYERROR 0x84000000
#define RE_FILEERROR 0x82000000
#define RE_PROTECTERROR 0x81000000
#define RE_SEGMENTATIONERROR 0x80080000
/* Fehlertext abrufen, Aufruf mit NULL nur für den Fehlerstatus (ident) */
extern KADMOS_ERROR KADMOS_API re_GetErrorText(re_ErrorText*);
extern KADMOS_ERROR KADMOS_API re_wGetErrorText(re_wErrorText*);
/* Fehlertext und den Fehlerstatus setzen (ident) */
extern void KADMOS_API re_SetErrorText(const re_ErrorText*);
extern void KADMOS_API re_wSetErrorText(const re_wErrorText*);
/* Aufruf mit NULL, um den KADMOS-Fehlertext anzuzeigen */
extern void KADMOS_API re_DisplayErrorText(const re_ErrorText*);
extern void KADMOS_API re_wDisplayErrorText(const re_wErrorText*);
/* Fehlerstatus löschen (ident) */
extern void KADMOS_API re_ClearError(void);
/* *** Bei Multithreading die folgenden Einstellungen für die Fehlerbehandlung */
/* *** hat Auswirkungen auf alle Threads */
/* Deklaration zur privaten Fehlerbehandlung */
typedef void (KADMOS_API *re_ErrorHandler)(const re_ErrorText*);
typedef void (KADMOS_API *re_wErrorHandler)(const re_wErrorText*);
/* Aufruf zum Installieren eines privaten Fehlerbehandlers, zum Deinstallieren mit NULL aufrufen */
extern re_ErrorHandler KADMOS_API re_SetErrorHandler(re_ErrorHandler);
extern re_wErrorHandler KADMOS_API re_wSetErrorHandler(re_wErrorHandler);
/* Aufruf zum Abrufen des installierten Fehlerhandlers (NULL == KADMOS-Fehlerhandler) */
extern re_ErrorHandler KADMOS_API re_GetErrorHandler(void);
extern re_wErrorHandler KADMOS_API re_wGetErrorHandler(void);
#endif /* RE_ERRORHANDLING */
/****************************************************************************
*
* Struktur für die Initialisierung
*
****************************************************************************/
typedef struct ReInit_tag {
char version[8]; /* korrekte KADMOS-Version überprüfen */
/*** vor dem Aufruf von rel_init () oder rep_init () setzen */
int rel_grid_maxlen; /* max. Anzahl der Elemente in rel_grid */
int rel_graph_maxlen; /* max. Anzahl der Elemente in rel_graph */
int rel_result_maxlen; /* max. Anzahl der Elemente in rel_result */
int options; /* OPTIONS_RESTRICT_LABELS - Wenn gesetzt, werden nur die unter */
/* ReParm.labels und ReParm..rejects angegebenen Labels geladen. */
/* ReParm.code muss entsprechend eingestellt werden. Chopper.exe verwenden, */
/* um die Labels und Rückweisungen eines Klassifizierers abzurufen */
/*** ausreichend Speicherplatz bereitstellen vor dem ersten Aufruf von rep_do() */
void *rep_memory; /* Speicher, um rep_result (s) zu erhalten */
long rep_memory_size; /* Größe des bereitgestellten Speichers */
/* kann auf gzopen, gzread und gzclose gesetzt werden, um g-gezippte Dateien (zlib) zu lesen */
/* Es kann aber auch jeder andere gleichwertige Satz von Dekompressionsfunktionen eingestellt werden */
void * (*zip_open) (const char *file_title, const char *mode);
void * (*zip_wopen) (const wchar_t *file_title, const char *mode);
int (*zip_compressed) (const char *file_title);
int (*zip_wcompressed) (const wchar_t *file_title);
/* Wenn zip_ (w) komprimiert nicht angegeben ist, signalisiert die Erweiterung ".gz" Kompression */
int (*zip_read) (void *file, void *buf, unsigned long len);
int (*zip_close)(void *file);
/*** intern verwendet von re? _init (), re? _info (), re? _do () und re? _end () */
INT_PTR interna1[4]; /* nicht ändern */
INT_PTR interna2[4]; /* nicht ändern */
} ReInit;
#define OPTIONS_RESTRICT_LABELS 1
/****************************************************************************
*
* Strukturen und Makros zur Bildbeschreibung
*
****************************************************************************/
typedef struct ReRect_tag {
long left, top;
long width, height;
} ReRect;
typedef struct ReStroke_tag {
long color;
long thickness;
long timestamp;
void *user_data;
long x0,y0;
long x1,y1;
} ReStroke;
typedef struct ReImage_tag {
void *data; /* pointer auf image/data vom Typ 'imgtype' */
unsigned long imgtype; /* see IMGTYPE_* (pixel, pointer, stroke, ...) */
unsigned long width; /* nur für IMGTYPE_PIXELARRAY, -_POINTERARRAY, -_FEATURE */
unsigned long height; /* nur für IMGTYPE_PIXELARRAY, -_POINTERARRAY, -_FEATURE */
unsigned long strokecount; /* nur für IMGTYPE_STROKE */
unsigned long max_strokecount; /* nur für IMGTYPE_STROKE */
ReRect subimage; /* für alle IMGTYPEs ausser IMGTYPE_FEATURE */
unsigned short bitsperpixel; /* Grösse der Datenelemente 'data' (0(=1), 1, 8, 24) */
unsigned short color; /* siehe COLOR_* (binary, gray, rgb) */
unsigned short photometric; /* siehe PHOTOMETRIC_* (min is white, ...) */
unsigned short alignment; /* Ausrichtung von Pixeldaten, 0, 1, 2, 4 */
unsigned short orientation; /* siehe ORIENTATION_* (topleft, ...) */
unsigned short fillorder; /* siehe FILLORDER_* (MSB2LSB, LSB2MSB) */
unsigned short filler; /* 8 byte Ausrichtung */
unsigned short resunit; /* siehe RESUNIT_* (inch, cm, ...) */
unsigned long xresolution;
unsigned long yresolution;
} ReImage;
/*** Für jede folgende Gruppe ist der erste Eintrag Standard */
#define IMGTYPE_PIXELARRAY 0
#define IMGTYPE_POINTERARRAY 1
#define IMGTYPE_STROKE 2
#define IMGTYPE_FEATURE 4
#define IMGTYPE_FEATURE_INT 5
#define IMGTYPE_FEATURE_UINT 6
#define IMGTYPE_FEATURE_FLOAT 7
/* *** Für IMGTYPE_FEATURE_ * gelten die folgenden Ausnahmen:
* - Der Merkmalsvektor wird unter 'data' angegeben.
* - height*width ist die Dimension des Merkmalsvektors.
* - bitsperpixel (Größe der Feature-Datenelemente) kann 8, 16, 32, 64 sein
* - Subimage und alle anderen Elemente von ReImage werden nicht verwendet
* Nach dem Laden eines Merkmals werden rec file (rec_init()), imgtype, width, height,
* und bitsperpixel auf die zugehörigen Standardwerte der Klassifizierer gesetzt */
#define COLOR_BINARY 0
#define COLOR_GRAY 1
#define COLOR_RGB 2
#ifndef TIFFMACROS_INCLUDED /* zuerst definieren, wenn bereits enthalten */
/*** macros gemäss tiff.h von Sam Leffler (Silicon Graphics Inc.) */
#define PHOTOMETRIC_MINISWHITE 0
#define PHOTOMETRIC_MINISBLACK 1
/* nicht für IMGTYPE_STROKE */
#define ORIENTATION_TOPLEFT 1
#define ORIENTATION_BOTLEFT 4
/*Nur für COLOR_BINARY, nicht für IMGTYPE_STROKE*/
#define FILLORDER_MSB2LSB 1 /* from most to least significant bit */
#define FILLORDER_LSB2MSB 2 /* from least to most significant bit */
#define RESUNIT_NONE 1
#define RESUNIT_INCH 2
#define RESUNIT_CENTIMETER 3
#endif /* TIFFMACROS_INCLUDED */
#define RESUNIT_METER 4
typedef void *ReImageHandle;
/****************************************************************************
*
* Parameter für REC, REL, and REP
*
****************************************************************************/
/*** Parameter zur Kontrolle der Erkennung von Linien und Boxen in REL, REP */
typedef struct RelGridParm_tag {
long grid; /* Typ der Box, siehe GRID_ * -Makros */
long min_width; /* minimale Breite einer Box, Linie oder eines Kamms */
long max_width; /* maximale Breite einer Box, Linie oder eines Kamms */
long min_height; /* minimale Höhe einer Box, Linie oder eines Kamms */
long max_height; /* maximale Höhe einer Box, Linie oder eines Kamms */
long subgrid_count; /* Anzahl der Subboxen oder Kammfelder */
ReRect search_area; /* Rechteck, um nach dem Gitterelement zu suchen */
} RelGridParm;
#define REPARM_LABELS_SIZE_MAX 8192 /* Maximalwert des Elements labels_size unten */
/****************************************************************************
* Im Rahmen von RecData, RelData oder RepData werden alle Elemente der
* Struktur ReParm durch einen Aufruf von rec_init (), rel_init () oder
* rep_init () gelöscht und auf Standardwerte gesetzt. Setzen Sie neue
* Werte nach rec_init (), rel_init () oder rep_init ().
****************************************************************************/
#ifdef _MSC_VER
#pragma warning(disable:4201)
#endif
typedef struct ReParm_tag {
long general; /* siehe GENERAL_ * -Makros */
/*** Vorverarbeitung */
long prep; /* siehe PREP_* Makros */
short deskew_min; /* minimaler Zeilenversatz, */
/* um de-skewing auszufüren*/
/* Null bedeutet kein de-skewing (Standard) */
short filler1; /* 8 byte alignment */
short noise_diameter_percent; /* Schmutzentfernung in REC, REL, und REP */
short noise_diameter_pixel; /* Schmutzentfernung in REC, REL, und REP */
short noise_width_percent; /* Schmutzentfernung in REC, REL, und REP */
short noise_length_percent; /* Schmutzentfernung in REC, REL, und REP */
short noise_width_pixel; /* Schmutzentfernung in REC, REL, und REP */
short noise_length_pixel; /* Schmutzentfernung in REC, REL, und REP */
short rem_back_gray_delta; /* entfernt Hintergrund aus einem Farbbild -
max Untrschied R-G-B um ein Graupixel zu sein */
short rem_back_gray_level; /* entfernt Hintergrund aus einem Farbbild -
das hellste Vordergrund-Graupixel 'lightest' */
RelGridParm *gridparm; /* Bereich der RelGridParm-Strukturen */
long gridparm_maxlen; /* Anzahl der vorgesehenen Strukturen */
/*** Segmentierung */
long typograph; /* siehe TYPO_ * -Makros */
long filler2; /* 8-Byte-Ausrichtung */
short line_space, base_line; /* Linienmetriken, falls bekannt */
short char_space_min; /* Zeichenmetrik (min, max) für die Breite */
short char_space_max; /* Zeichen + Zwischenraum (falls bekan */
/*** Klassifikation */
long code; /* CODE_PAGE_1252, CODE_ISO_8859_1, ... */
long options; /* exclude, use basic labels, ... */
long labels_size; /* Grösse der Allokation der Kennunge und Rückweisungen in Byte */
#if defined(__STDC__)
char *labels; /* aktive Labels; Speicher allokiert von re? _init() */
char *rejects; /* aktive RÜckweisungen; memory allokiert von re?_init() */
/* wird nur verwendet von OPTIONS_RESTRICT_LABELS */
#else
union {
char *labels; /* aktive Labels, CP 437 - ISO_8859_15, CODE_ASCII */
short *labels2; /* aktive Labels, CODE_UTF_16 */
};
union {
char *rejects; /* aktive RÜckweisungen, CP 437 - ISO_8859_15, CODE_ASCII */
short *rejects2; /* aktive RÜckweisungen, CODE_UTF_16 */
/* wird nur verwendet von OPTIONS_RESTRICT_LABELS */
};
#endif
long alc; /* (zusätzlich) aktive Kennungen, siehe ALC_* Makros */
long font; /* Einschränkung für Alc-Spezifikation, siehe FONT_* Makros */
short reject_limit; /* steuert die Anzahl der Alternativen; Standardeinstellung 128 */
short filler3[3]; /* 8-Byte-Ausrichtung */
/*** Kontext */
long pos; /* siehe POS_* macros */
/*** hook - für den privaten Gebrauch */
INT_PTR hookparm; /* kopiert von REP nach REL, von REL nach REC */
} ReParm;
#ifdef _MSC_VER
#pragma warning(default:4201)
#endif
/****************************************************************************
*
* Makros zur Prozesskontrolle
*
****************************************************************************/
/*** zeigt die Aufrufsequenz - intern gesetzt und verwendet - nicht ändern */
#define GENERAL_RECCALL 0x00010000 /* gesetzt von rec_init(), rec_do(),.. */
#define GENERAL_RECACCENTCALL 0x00020000 /* gesetzt von rec_accent() */
#define GENERAL_RELCALL 0x00040000 /* gesetzt von rel_init(), rel_do(),.. */
#define GENERAL_RELFINDCALL 0x00080000 /* gesetzt von rel_find() */
#define GENERAL_REPCALL 0x00100000 /* gesetzt von rep_init(), rep_do(),.. */
#define GENERAL_RESPELLCALL 0x00400000 /* gesetzt von respell_init(), respell_do(),.. */
#define GENERAL_RECALL 0x00ff0000
#define GENERAL_REPMULTITHREADING 0x00001000 /* Standardeinstellung für rep_do() */
/* Im Allgemeinen werden 2 Threads verwendet, */
/* wenn sie gesetzt sind */
/* in der Server-Version wird */
/* so viel wie möglich verwendet */
#define GENERAL_MULTITHREADING 0x0000ff00 /* Maske für Multithreading-Parameter */
#define GENERAL_PREP_ONLY 0x00000001 /* Rückkehr nach Vorverarbeitung */
#define GENERAL_LINESHADOW_ONLY 0x00000002 /* Rückkehr vor der Erkennung */
/*** nur für Aufrufe von rep_do () */
#define GENERAL_LINEPOSITION_ONLY 0x00000004 /* Rückkehr ohne Erkennung */
/*** nur für Aufrufe von rec_do () */
#define GENERAL_FEATURES_ONLY 0x00000008 /* Rückkehr nach der Merkmalsextraktion */
#define GENERAL_HOOKENGINE_LOADED 0x10000000 /* Status (Rückgabewert) */
#define GENERAL_HOOKENGINE_ON 0x20000000 /* benutze die Hook Engine */
/****************************************************************************
*
* Makros zum Auswählen von code pages
*
*
****************************************************************************/
#define CODE_PAGE_437 437
#define CODE_PAGE_720 720
#define CODE_PAGE_737 737
#define CODE_PAGE_850 850
#define CODE_PAGE_852 852
#define CODE_PAGE_855 855
#define CODE_PAGE_857 857
#define CODE_PAGE_858 858
#define CODE_PAGE_864 864
#define CODE_PAGE_866 866
#define CODE_PAGE_874 874
#define CODE_PAGE_1250 1250
#define CODE_PAGE_1251 1251
#define CODE_PAGE_1252 1252
#define CODE_PAGE_1253 1253
#define CODE_PAGE_1254 1254
#define CODE_PAGE_1255 1255
#define CODE_PAGE_1256 1256
#define CODE_PAGE_1257 1257
#define CODE_PAGE_1258 1258
#define CODE_ISO_8859_1 885901
#define CODE_ISO_8859_2 885902
#define CODE_ISO_8859_4 885904
#define CODE_ISO_8859_5 885905
#define CODE_ISO_8859_6 885906
#define CODE_ISO_8859_7 885907
#define CODE_ISO_8859_8 885908
#define CODE_ISO_8859_9 885909
#define CODE_ISO_8859_10 885910
#define CODE_ISO_8859_11 885911
#define CODE_ISO_8859_13 885913
#define CODE_ISO_8859_15 885915
#define CODE_ASCII 1000000 /* Ersatzdarstellung */
#define CODE_UTF_8 2000008
#define CODE_UTF_16 2000016
#define CODE_UTF_32 2000032
/*** sspezielle Klassifizierungscodes */
#define CODE_ASCII_7BIT 1000001
#define CODE_UTF_16_7BIT 2000017
/****************************************************************************
*
* Makros zur Vorverarbeitungssteuerung und zur grid-Erelementerkennung
*
****************************************************************************/
/*** beeinflusst REC */
#define PREP_NOSPACEREMOVAL 0x00000001 /* entfern keinen Raum um Zeichen */
/*** influences REL */
#define PREP_NOSPOTREMOVAL 0x00000002 /* entfern keinen Sprenkel */
/*** influences REC + REL + REP */
#define PREP_AUTO_NOISEREDUCTION 0x00000004 /* kontrolliert Schmutzentfernung */
/* (default) */
#define PREP_SCALING 0x00000008 /* Zeichengröße normalisieren */
#define PREP_RGBTOGRAY_COLORGRAY 0x00000000 /* rgb nach gray normal (Standard) */
#define PREP_RGBTOGRAY_COLORMIN 0x00000010 /* rgb nach gray Farbe entfernen */
#define PREP_RGBTOGRAY_COLORMAX 0x00000020 /* rgb nach gray Farbe verbessern */
#define PREP_GRAYTOBIN_VERY_THIN 0x00000100 /* gray nach bin Sehr schwache Schwärzung */
#define PREP_GRAYTOBIN_THIN 0x00000200 /* gray nach bin Schwache Schwärzung */
#define PREP_GRAYTOBIN_MEDIUM 0x00000300 /* gray nach bin Mittlere Schwärzung (Standard) */
#define PREP_GRAYTOBIN_THICK 0x00000400 /* gray nach bin Starke Schwärzung */
#define PREP_GRAYTOBIN_VERY_THICK 0x00000500 /* gray nach bin Sehr starke Schwärzung */
#define PREP_GRAYTOBIN_UNIFORM 0x00000800 /* gray to bin mit nur einer Schwelle */
#define PREP_BINFILTER_VERY_THIN 0x00001000 /* Zeichenglättung mit starker Ausdünnung */
#define PREP_BINFILTER_THIN 0x00002000 /* Zeichenglättung mit Ausdünnung */
#define PREP_BINFILTER_MEDIUM 0x00003000 /* Zeichenglättung ohne Ausdünnung */
#define PREP_BINFILTER_THICK 0x00004000 /* Zeichenglättung mit Verdickung */
#define PREP_BINFILTER_VERY_THICK 0x00005000 /* Zeichenglättung mit starker Verdickung */
#define PREP_BINFILTER 0x0000f000
#define PREP_REMOVE_BACKGROUND_AUTO 0x00010000 /* Bildhintergrund mit Histogramm entfernen (nur für Farbbilder) */
#define PREP_REMOVE_BACKGROUND 0x00020000 /* Bildhintergrund entfernen - (nur für Farbbilder) */
#define PREP_INPLACE 0x80000000 /* Bild in der Vorverarbeitung überschreiben */
#define GRID_LINE_H 0x00000001 /* horizontale Linie */
#define GRID_LINE_V 0x00000002 /* vertikale Linie */
#define GRID_BOX 0x00000004 /* Box um den Zeichen */
#define GRID_COMB 0x00000008 /* Kamm unter Zeichen */
#define GRID_ALL 0x000000FF /* alle Gitterelemente */
#define GRID_END 0x00000000 /* für das letzte Element von reparm.gridparm */
/****************************************************************************
*
* Makros zur Segmentierungssteuerung
*
****************************************************************************/
/*** beeinflusst REL */
#define TYPO_PROPORTIONAL 0x00000100 /* Proportionalabstand annehmen */
#define TYPO_EQUIDISTANT 0x00000200 /* äquidistanten Abstand annehmen */
#define TYPO_NOLIGATURES 0x00000400 /* keine Ligaturen annehmen */
#define TYPO_NOTOUCHINGCHARS 0x00000800 /* keine berührende Zeichen annehmen */
#define TYPO_NOSEGALTERNATIV 0x00010000 /* Keine Segmentierungsalternativen */
#define TYPO_4_SEGALTERNATIV 0x00040000 /* bis zu 4 Segmentierungsalternativen */
#define TYPO_8_SEGALTERNATIV 0x00080000 /* bis zu 8 Segmentierungsalternativen (Standard) */
#define TYPO_KEEPIMG 0x00100000 /* REC-Bilder nach rel_do () und / oder rec_accent () beibehalten */
#define TYPO_EXTENDED_SEGMENTATION 0x01000000 /* weniger Fehler, mehr CPU-Zeit */
#define TYPO_PROPORTIONAL 0x00000100 /* Proportionalabstand annehmen */
#define TYPO_EQUIDISTANT 0x00000200 /* äquidistanten Abstand annehmen */
#define TYPO_NOLIGATURES 0x00000400 /* keine Ligaturen annehmen */
#define TYPO_NOTOUCHINGCHARS 0x00000800 /* keine berührende Zeichen annehmen */
#define TYPO_NOSEGALTERNATIV 0x00010000 /* Keine Segmentierungsalternativen */
#define TYPO_4_SEGALTERNATIV 0x00040000 /* bis zu 4 Segmentierungsalternativen */
#define TYPO_8_SEGALTERNATIV 0x00080000 /* bis zu 8 Segmentierungsalternativen (Standard) */
#define TYPO_KEEPIMG 0x00100000 /* REC-Bilder nach rel_do () und / oder rec_accent () beibehalten */
#define TYPO_EXTENDED_SEGMENTATION 0x01000000 /* weniger Fehler, mehr CPU-Zeit */
/****************************************************************************
*
* Makros zur Kontrolle der Klassifizierung
*
****************************************************************************/
/*** Basis-Kennungen anstelle Gruppen-Kennungen verwenden */
#define OPTIONS_BASICLABELS_PARM 0x00000001 /* verwenden/erhalten diese in ReParm */
#define OPTIONS_BASICLABELS_RESULT 0x00000002 /* erhalten diese in Re?Result */
#define OPTIONS_BASICLABELS 0x00000003 /* verwenden/erhalten diese always */
/*** Alternativen der Einstufung ausschließen, wenn möglich */
#define OPTIONS_EXCLUDE 0x00000010
/*** Nur Klassifikatoren für die ausgewählten Etiketten verwenden (Standard) */
#define OPTIONS_STRICTSELECT 0x00000020
/*** schnelle Gittererkennung mit geringerer Genauigkeit */
#define OPTIONS_FAST_GRID 0x00000040
#define OPTIONS_FAST_REC 0x00000080
#define OPTIONS_FAST 0x000000c0
/*** Wiederholt rec_do () mit zeichenabhängiger Binärisierung */
#define OPTIONS_REL_REC_REPEAT 0x00000100
/*** erkennen (klassifizieren) und löschen von unsinnigen Objekten in rel_do() */
/* Wenn Boxen erkannt werden, wird alles außerhalb der Boxen gelöscht */
#define OPTIONS_REL_CLEAN 0x00001000
#ifndef _INC_PENWIN
#define _INC_PENWIN
#define ALC_DEFAULT 0x00000000
#define ALC_LCALPHA 0x00000001
#define ALC_UCALPHA 0x00000002
#define ALC_ALPHA (ALC_LCALPHA|ALC_UCALPHA)
#define ALC_NUMERIC 0x00000004
#define ALC_ALPHANUMERIC (ALC_ALPHA|ALC_NUMERIC)
/* #define ALC_PUNC 0x00000008 - ersetzt durch ALC_SPECIAL */
/* #define ALC_MATH 0x00000010 - ersetzt durch ALC_SPECIAL */
/* #define ALC_MONETARY 0x00000020 - ersetzt durch ALC_SPECIAL */
/* #define ALC_OTHER 0x00000040 - ersetzt durch ALC_SPECIAL */
#define ALC_GESTURE 0x00004000
#endif
/* #define ALC_SPECIAL (ALC_PUNC|ALC_MATH|ALC_MONETARY|ALC_OTHER) */
#define ALC_SPECIAL 0x00000078
#define ALC_ACCENT 0x00000080
#define ALC_ALL (ALC_ALPHANUMERIC|ALC_SPECIAL|ALC_ACCENT|ALC_GESTURE)
/*** Fontspezifikation */
#define FONT_HAND 0x00000001
#define FONT_MACHINE 0x00000002
#define FONT_HM (FONT_HAND|FONT_MACHINE)
#define FONT_LATIN 0x00000010
#define FONT_FRAKTUR 0x00000020
#define FONT_GREEK 0x00000040
#define FONT_CYRILLIC 0x00000080
#define FONT_ARABIC 0x00000100
#define FONT_FARSI 0x00000200
#define FONT_HEBREW 0x00000400
#define FONT_THAI 0x00000800
#define FONT_LANGUAGE (FONT_LATIN|FONT_FRAKTUR|FONT_GREEK|FONT_CYRILLIC|FONT_ARABIC|FONT_FARSI|FONT_HEBREW|FONT_THAI)
#define FONT_OCRA 0x00020000
#define FONT_OCRB 0x00040000
#define FONT_CMC7 0x00080000
#define FONT_E13B 0x00100000
#define FONT_F7B 0x00200000
#define FONT_SEMI 0x00400000
#define FONT_LCD 0x00800000
#define FONT_BRAILLE 0x01000000
#define FONT_NORM (FONT_OCRA|FONT_OCRB|FONT_CMC7|FONT_E13B|FONT_F7B|FONT_SEMI|FONT_LCD|FONT_BRAILLE)
#define FONT_LN (FONT_LANGUAGE|FONT_NORM)
#define FONT_ALL (FONT_HM|FONT_LN)
/****************************************************************************
*
* Makros für den Zeilenpositionskontext Auswertung
*
****************************************************************************/
#define POS_NOLINECONTEXT 0x00000001 /* kein Linienkontext für die Erkennung */
#define POS_SOFTLINECONTEXT 0x00000002 /* leichter Linienkontext für die Erkennung */
#define POS_HARDLINECONTEXT 0x00000004 /* starker Linienkontext für die Erkennung */
#define POS_NOWORDCONTEXT 0x00000100 /* kein Wortzusammenhang (Großbuchstaben,
Kleinbuchstaben, Zahlen) */
/****************************************************************************
*
* wParam für WM_USER messages von RE?_* ( nur Windows )
*
****************************************************************************/
#define REC_MESSAGE 0x0100 /* lParam = &recdata */
#define RECACCENT_MESSAGE 0x0200 /* lParam = &recdata, wParam = &accents */
#define REL_MESSAGE 0x0400 /* lParam = &reldata */
#define RELFIND_MESSAGE 0x0800 /* lParam = &reldata */
#define REP_MESSAGE 0x1000 /* lParam = &repdata */
#define REX_IMGREADY 0x0020 /* Vorverarbeitung des Bildes durchgeführt */
#define REX_ERROR 0x0040 /* Fehlerrückgabe */
#define REX_FINISHED 0x0080 /* Modul ist beendet */
#define REP_LINE_CNT 0x1001 /* lParam = rep_result_len */
#define REP_RESULT 0x1002 /* lParam = &rep_result[.] */
/****************************************************************************
*
* Ergebnisstrukturen für rec_accent(), rel_do() and rep_do()
*
****************************************************************************/
#define REC_CHAR_SIZE 16 /* Größe von rec_char in Byte */
#define REC_ALT 8 /* maximale Anzahl von Erkennungsalternativen */
#define SEG_ALT 8 /* maximale Anzahl von Segmentierungsalternativen */
typedef struct RecGraph_tag {
short result_number[SEG_ALT]; /* Index der Ergebnisalternative in rec_result */
short next[SEG_ALT]; /* Index des nächsten Elements in RecGraph; -1:end */
} RecGraph;
typedef struct RelGrid_tag {
long grid; /* erkanntes Gitterelement (siehe GRID_ * -Makros) */
long subgrid_count; /* Anzahl der Subboxen der angegebenen Box oder Kamm */
long left, top; /* Position des Gitterelements */
long width, height;
} RelGrid;
typedef struct RelGraph_tag {
short leading_blanks; /* Anzahl der Leerzeichen vor dem Zeichen */
short filler[3]; /* 8-Byte-Ausrichtung */
short result_number[SEG_ALT]; /* Index der Ergebnisalternative in rel_result */
short next[SEG_ALT]; /* Index des nächsten Elements in RelGraph; -1:end */
short seg_value[SEG_ALT][SEG_ALT]; /* Sicherheit alternativer Segmentierungen */
} RelGraph;
#ifdef _MSC_VER
#pragma warning(disable:4201)
#endif
typedef struct RelResult_tag {
long left, top; /* Position des Zeichens im Linienbild */
long width, height;
long result_flags; /* RESULT_FLAG_RESPELL_CONFIRMED, ... */
void *result_image; /* segmentiertes Zeichenbild (falls nicht NULL) */
long result_width; /* Breite von result_image (kann komprimiert sein) */
long result_height; /* Höhe von result_image (kann komprimiert werden) */
long projection[2]; /* schräge Projektion auf der Grundlinie */
short italic, bold; /* stylus (Neigung, Dicke) */
short strokelen, black; /* Strichlänge, schwarze Pixel (%) */
#if defined(__STDC__)
char rec_char[REC_ALT][REC_CHAR_SIZE]; /* Erkennungsergebnis */
#else
union {
char rec_char[REC_ALT][REC_CHAR_SIZE]; /* Erkennungsergebnis, CP437-ISO_8859_15, ASCII,... */
short rec_char2[REC_ALT][REC_CHAR_SIZE/2]; /* Erkennungsergebnis, CODE_UTF_16 only */
};
#endif
unsigned char rec_value[REC_ALT]; /* Ungewissheit der Erkennung 0...255 */
long rec_top[REC_ALT]; /* Soll-Positionen im Linienbild */
long rec_bottom[REC_ALT]; /* Soll-Positionen im Linienbild */
} RelResult;
#define RecResult RelResult /* Wir verwenden dieselbe Datenstruktur in rec_accent () */
#define RESULT_FLAG_RESPELL_CONFIRMED 0x10000000 /* einstellen, wenn von RESPELL bestätigt */
#define RESULT_FLAG_RESPELL_GENERATED 0x20000000 /* gesetzt, wenn von RESPELL generiert */
#define RESULT_FLAG_RESPELL 0x30000000
#define RESULT_FLAG_UNDERLINED 0x40000000 /* nicht verwechseln mit RESULT_FLAG_UNDERLINE von re_layout Definiert */
#define RESULT_FLAG_ACCENT_TOP 0x01000000 /* Wird gesetzt, wenn das verwandte Zeichen der höchsten Akzent ist */
#define RESULT_FLAG_ACCENT_BOTTOM 0x02000000 /* Wird gesetzt, wenn das verwandte Zeichen der unterste Akzent ist */
#define RESULT_FLAG_ACCENT 0x03000000 /* RESULT_FLAG_ACCENT_TOP | RESULT_FLAG_ACCENT_BOTTOM */
#define RESULT_FLAG_ACCENT_START 0x00100000 /* erste Komponente eines Akzentzeichens */
#define RESULT_FLAG_ACCENT_MEMBER 0x00200000 /* Komponente eines Akzentzeichens */
#define RESULT_FLAG_ACCENT_END 0x00400000 /* letzte Komponente eines Zeichens mit Akzent */
#define RESULT_FLAG_REC_REPEAT 0x00010000 /* gesetzt, wenn das Zeichen zweimal erkannt wurde, mit bestimmter Vorverarbeitung */
#define RESULT_FLAG_REC_COMBINED 0x00020000 /* gesetzt, wenn das Ergebnis aus Basis und Akzenten kombiniert wurde */
/* Ergebnisflags für die BIDI-gesteuerte Ausgabe. Siehe BIDI-Übereinkommen des UNICODE-Konsortiums */
#define RESULT_FLAG_BIDI_LTR_EMBEDDING 0x00001000
#define RESULT_FLAG_BIDI_RTL_EMBEDDING 0x00002000
#define RESULT_FLAG_BIDI_POP_DIR_FORMAT 0x00004000
#define RESULT_FLAG_BIDI_LTR_MARK 0x00000100
#define RESULT_FLAG_BIDI_RTL_MARK 0x00000200
#define RESULT_FLAG_BIDI_SPACES_LTR 0x00000400 // Leerzeichen vor dem Zeichen ausgeben
#define RESULT_FLAG_BIDI_SPACES_RTL 0x00000800 // Leerzeichen nach Zeichen ausgeben
#define RESULT_FLAG_BIDI 0x0000FF00
#ifdef _MSC_VER
#pragma warning(default:4201)
#endif
typedef struct RepResult_tag {
long left, top; /* Position des Linienbildes im bereitgestellten Bild */
long width, height;
short rel_deskew; /* korrigierte Neigung des Linienbildes */
short rel_char_space; /* mittlere Zeichenbreite + Zwischenraum */
short rel_blank_width; /* Breite von blank (signalisiert proportionale Schrift) */
short rel_blank_min; /* Mindestbreite von blank (proportionale Schrift) */
short rel_grid_len; /* Anzahl der Elemente in rel_grid */
short rel_graph_len; /* Anzahl der Elemente in rel_graph */
short rel_result_len; /* Anzahl der Elemente in in rel_result */
short filler1; /* 8-Byte-Ausrichtung */
RelGrid *rel_grid; /* erkannte grid Elemente */
RelGraph *rel_graph; /* Knoten in der Segmentierung */
RelResult *rel_result; /* Ergebnis der Einzelzeichenerkennung */
void *filler2; /* 8-Byte-Ausrichtung */
} RepResult;
/****************************************************************************
*
* Modul REC
*
****************************************************************************/
#ifdef _MSC_VER
#pragma warning(disable:4201)
#endif
typedef struct RecData_tag {
ReInit init; /* setzen for rec_init() */
/*** Parametes für rec_do() - setzen nach rec_init() */
ReParm parm; /* Standardeinstellungen werden festgelegt mit rec_init() */
/*** Darstellung von Bilddaten */
ReImage image; /* zu erkennende Bilder */
long image_top; /* Bildposition in Zeile (falls bekannt) */
long image_bottom;
/*** Erkennungskontrolle */
long busy; /* !=0: Erkennung läuft */
INT_PTR hWND_rec_finished; /* Fenster zum Senden der WM_USER-Nachricht mit */
/* wParam == REC_MESSAGE */
/* wParam |= REX_ERROR im Fehlerfall */
/* wParam |= REX_IMGREADY nach der Vorverarbeitung */
/* wParam |= REX_FINISHED nach der Erkennung */
/* lParam == &recdata */
/* nach der Ausführung (nur Windows) */
/*** Ergebnisse von rec_do() */
long left, top; /* Position des Zeichens nach Schmutzentferung */
long width, height;
long result_flags; /* RESULT_FLAG_RESPELL_CONFIRMED, ... */
void *result_image; /* segmentiertes Zeichenbild (falls nicht NULL) */
long result_width; /* Breite von result_image (kann komprimiert sein) */
long result_height; /* Höhe von result_image (kann komprimiert werden) */
long projection[2]; /* schräge Projektion auf der Grundlinie */
short italic, bold; /* stylus (Schräge, Dicke) */
short strokelen, black; /* Strichlänge, schwarze Pixel (%) */
#if defined(__STDC__)
char rec_char[REC_ALT][REC_CHAR_SIZE]; /* Erkennungsergebnis */
#else
union {
char rec_char[REC_ALT][REC_CHAR_SIZE]; /* Erkennungsergebnis, CP437-ISO_8859_15 */
short rec_char2[REC_ALT][REC_CHAR_SIZE/2]; /* Erkennungsergebnis, CODE_UTF_16 */
};
#endif
unsigned char rec_value[REC_ALT]; /* Ungewissheit der Erkennung 0...255 */
long rec_top[REC_ALT]; /* Soll-Positionen im Linienbild */
long rec_bottom[REC_ALT]; /* Soll-Positionen im Linienbild */
} RecData;
#ifdef _MSC_VER
#pragma warning(default:4201)
#endif
extern KADMOS_ERROR KADMOS_API rec_init (RecData *, const char *file_title);
extern KADMOS_ERROR KADMOS_API rec_winit (RecData *, const wchar_t *file_title);
extern KADMOS_ERROR KADMOS_API rec_info (RecData *);
extern KADMOS_ERROR KADMOS_API rec_filetitle (const RecData *, char *file_title); /* char, wchar_t */
extern KADMOS_ERROR KADMOS_API rec_do (RecData *);
extern KADMOS_ERROR KADMOS_API rec_accent (RecData *, KADMOS_ERROR (KADMOS_API *rec_hook)(RecData *),
RecGraph *recg, int rec_graph_maxlen, int *rec_graph_len,
RecResult *accents, int rec_result_maxlen, int *rec_result_len);
/* recg entsprechend vor dem rec_accent()-Aufruf zuordnen */
extern KADMOS_ERROR KADMOS_API rec_group_labels (RecData *);
extern KADMOS_ERROR KADMOS_API rec_end (RecData *);
extern KADMOS_ERROR KADMOS_API rec_freeimages (RecData *); /* siehe TYPO_KEEPIMG */
extern KADMOS_ERROR KADMOS_API rec_get_features (const RecData *,
void **features,
char *type, /* in8, un16, ... */
int *dimension);
/****************************************************************************
*
* Modul REL
*
****************************************************************************/
typedef struct RelData_tag {
ReInit init; /* setzen vor rel_init() */
/*** parameters for rel_do() - setzen nach rel_init() */
ReParm parm; /* defaults will be set by rel_init() */
/*** representation of image data */
ReImage image; /* das zu erkennende Bild */
long image_top; /* horizontale Bildposition in Linie (falls bekannt) */
long image_bottom;
/*** recognition control */
long busy; /* !=0: Die Erkennung arbeitet */
INT_PTR hWND_rel_finished; /* Fenster zum Senden der WM_USER-Nachricht mit */
/* wParam == REL_MESSAGE */
/* wParam |= REX_ERROR im Fehlerfall */
/* wParam |= REX_IMGREADY nach der Vorverarbeitung */
/* wParam |= REX_FINISHED nach der Erkennung */
/* lParam == &reldata */
/* nach der Ausführung (nur Windows) */
/*** Wird verwendet, um Ergebnisse von jedem internen Anruf von rec_do() zu erhalten*/
KADMOS_ERROR (KADMOS_API *rec_hook)(RecData *); /* ausgeführt nach rec_do() */
void *filler1; /* 8-Byte-Ausrichtung */
/*** Ergebnisse von rel_do() */
long left, top; /* Position des Zeilenbildes im Vollbild */
long width, height;
short rel_deskew; /* korrigierte Neigung des Zeilenbildes */
short rel_char_space; /* mittlere Zeichenbreite + Zwischenraum */
short rel_blank_width; /* Breite von blank (signalisiert proportionale Schrift) */
short rel_blank_min; Mindestbreite von blank (proportionale Schrift) */
/*** Anzahl der Ergebnisse von rel_do () */
short rel_grid_len; /* Anzahl der Elemente in rel_grid */
short rel_graph_len; /* Anzahl der Elemente in in rel_graph */
short rel_result_len; /* Anzahl der Elemente in in rel_result */
short filler2; /* 8-Byte-Ausrichtung */
/*** Ergebnis von rel_do(), allokieren vor dem ersten Aufruf von rel_do() */
RelGrid *rel_grid; /* Erkante grid-Elemente */
RelGraph *rel_graph; /* Knoten der Segmentierung */
RelResult *rel_result; /* Ergebnisse der Einzelzeichenerkennung */
void *filler3; /* 8-Byte-Ausrichtung */
} RelData;
extern KADMOS_ERROR KADMOS_API rel_init (RelData *, const char *file_title);
extern KADMOS_ERROR KADMOS_API rel_winit (RelData *, const wchar_t *file_title);
extern KADMOS_ERROR KADMOS_API rel_info (RelData *);
extern KADMOS_ERROR KADMOS_API rel_filetitle (const RelData *, char *file_title); /* char, wchar_t */
extern KADMOS_ERROR KADMOS_API rel_do (RelData *);
extern KADMOS_ERROR KADMOS_API rel_group_labels (RelData *);
extern KADMOS_ERROR KADMOS_API rel_find (RelData *, int char_count);
extern KADMOS_ERROR KADMOS_API rel_findg (RelData *, int char_count, int area_width, int char_height, int char_width);
/* negativer Wert von char_count: up to ... */
extern KADMOS_ERROR KADMOS_API rel_end (RelData *);
#define SHADOW_FONT_HAND 0x01
#define SHADOW_FONT_MACHINE 0x02
extern KADMOS_ERROR KADMOS_API rel_lineshadow(RelData *, unsigned char **vertical_shadow);
extern KADMOS_ERROR KADMOS_API rel_freeimages(RelData *); /* siehe TYPO_KEEPIMG */
/*** APIs zur Unterstützung von Pen-Computing und Formularverarbeitung */
extern KADMOS_ERROR KADMOS_API rel_clear(RelData *);
extern KADMOS_ERROR KADMOS_API rel_recset(RelData *, const RecData *, const ReRect *);
extern KADMOS_ERROR KADMOS_API rel_rec_accent_set(RelData *, RecGraph *recg, int rec_graph_len,
RecResult *accents, int rec_result_len, const ReRect *);
extern KADMOS_ERROR KADMOS_API rel_corr(RelData *);
/*** APIs zur Unterstützung von Wörterbüchern und Rechtschreibprüfungen */
typedef struct RelBranch_tag {
short seg_alt_number;
short rec_alt_number;
} RelBranch;
extern unsigned char KADMOS_API rel_word_value(const RelGraph *relg, const RelResult *relr,
int rel_graph_len, int rel_result_len, int rel_graph_start,
const RelBranch *rel_branch, int rel_branch_len);
/****************************************************************************
*
* Modul REP
*
****************************************************************************/
typedef struct RepData_tag {
ReInit init; /* setzen vor rep_init() */
/*** Parameter for rep_do() - setzen nach rep_init() */
ReParm parm; /* Standardeinstellungen werden festgelegt durch rep_init() */
/*** Darstellung von Bilddaten */
ReImage image; /* zu erkennendes Bild */
/*** Erkennungskontrolle */
long busy; /* !=0: Erkennung arbeitet */
INT_PTR hWND_rep_finished; /* Fenster zum Senden der WM_USER-Nachricht mit */
/* wParam == REP_MESSAGE */
/* wParam |= REX_ERROR im Fehlerfall */
/* wParam |= REX_IMGREADY nach der Vorverarbeitung */
/* wParam |= REX_FINISHED nach der Erkennung */
/* lParam == &repdata */
/* nach der Ausführung (nur Windows) */
INT_PTR hWND_line_message; /* Fenster zum Senden von WM_USER-Nachrichten mit Ergebnissen */
/* nach der Erkennung jeder Zeile*/
/* wParam == REP_LINE_CNT oder */
/* wParam == REP_RESULT */
/* (nur Windows) */
long filler1; /* 8-Byte-Ausrichtung */
/*** Wird verwendet, um Ergebnisse zu erhalten von jedem internen Aufruf von rec_do() oder rel_do()*/
KADMOS_ERROR (KADMOS_API *rec_hook)(RecData *); /* ausgeführt nach rec_do() */
KADMOS_ERROR (KADMOS_API *rel_hook)(RelData *); /* ausgeführt nach rel_do() */
/*** Ergebnis von rep_do() */
short rep_deskew; /* korrigierte Neigung des Bildes */
short rep_result_len; /* Anzahl der Elemente in rep_result */
RepResult *rep_result; /* Ergebnisse der Zeilenerkennung */
} RepData;
extern KADMOS_ERROR KADMOS_API rep_init (RepData *, const char *file_title);
extern KADMOS_ERROR KADMOS_API rep_winit (RepData *, const wchar_t *file_title);
extern KADMOS_ERROR KADMOS_API rep_info (RepData *);
extern KADMOS_ERROR KADMOS_API rep_filetitle (const RepData *, char *file_title); /* char, wchar_t */
extern KADMOS_ERROR KADMOS_API rep_do (RepData *);
extern KADMOS_ERROR KADMOS_API rep_idcard (RepData *);
extern KADMOS_ERROR KADMOS_API rep_group_labels (RepData *);
extern KADMOS_ERROR KADMOS_API repr_group_labels(RepData *, RepResult *);
extern KADMOS_ERROR KADMOS_API rep_end (RepData *);
/****************************************************************************
*
* module RESPELL
*
* Erstellt mit Unterstützung von Milind Joshi, CK Pradeep
* IDEA TECHNOSOFT INC. info@ideatechnosoft.com, http://www.ideatechnosoft.com
*
* Für Wörterbuchunterstützung, diese Software (KADMOS.DLL, RESPELL.LIB) basiert
* zum Teil auf der Open-Source-Software Ispell.
* http://www.gnu.org/software/ispell/ispell.html
*
* Für Hunspell Wörterbuchunterstützung, die Datei HUNSPELL.DLL von der
* Open-Source-Software Hunspell software. Sie erhalten eine Kopie der Lizenz unter
* http://www.mozilla.org/MPL/.
*
****************************************************************************/
typedef struct ReSpellInit_tag {
/*** setzen vor respell_init() */
/* Initialisierung der Suche nach Ispell-Wörterbüchern */
long ispell_config; /* ispell Konfiguration - noch nicht verwendet */
/* initialization of respell */
short respell_maxlen; /* Maximale Länge legaler Wörter */
short rel_graph_out_maxlen; /* maximale Anzahl der Elemente in rel_graph_out */
short rel_result_out_maxlen; /* maximale Anzahl der Elemente in rel_result_out */
short result_text_maxlen; /* Maximale Anzahl von Zeichen in result_text */
short filler[2]; /* 8-Byte-Ausrichtung */
/*** interner Gebrcuh durch respell_init(), respell_do(), respell_end(), und respell_filetitle() */
INT_PTR interna1[4]; /* nicht ändern */
INT_PTR interna2[4]; /* nicht ändern */
INT_PTR interna3[4]; /* nicht ändern */
} ReSpellInit;
#define RESPELL_ALLOW_COMPOUND_WORDS 0x00000001
#define RESPELL_DICTIONARY_COMPLETE 0x00000002 /* Klassifikator-Kennungen einschränken auf Wörterbuch-Kennungen */
#define RESPELL_DICTIONARY_CONFIRM 0x00000004 /* Alle Ergebnisse werden im Wörterbuch nachgeschlagen,
nicht nur die schlechten */
typedef struct ReSpellParm_tag {
long respell_config; /* RESPELL_ALLOW_COMPOUND_WORDS ispell nur, Standard */
long respell_font; /* Einschränkung für die Verwendung des Wörterbuchs, siehe FONT_* makros */
short rel_alternative_maximum; /* Maximum von Wortalternativen (1...SEG_ALT); Standard 1 */
short filler1; /* 8 byte alignment */
/* Parameter wie in re*_textline() um den Ergebnistext zur Verfügung zu stellen */
unsigned char reject_level;
unsigned char filler2; /* 8-Byte-Ausrichtung */
short reject_char;
long text_format;
} ReSpellParm;
typedef struct ReSpellData_tag {
ReSpellInit init; /* setzen vor respell_init() */
/*** parameters for respell_do() - setzen nach respell_init() */
ReSpellParm parm; /* Standardwerte werden gesetzt durch respell_init() */
/* input data */
short rel_graph_in_len; /* Anzahl der Elemente in rel_graph_in */
short rel_result_in_len; /* Anzahl der Elemente in rel_result_in */
const RelGraph *rel_graph_in;
const RelResult *rel_result_in;
long rel_codepage;
/*** Verwenden einer privaten/oem-Rechtschreibprüfung für respell_do() */
KADMOS_ERROR (KADMOS_API *oem_spell_lookup)(const char *word, char *results, int results_size);
long oem_codepage; /* Codepage der privaten/oem-Rechtschreibprüfung */
char oem_wordchars[512]; /* alle Zeichen aller Wörter der privaten/oem-Rechtschreibprüfung */
short oem_reject_char; /* Rückweisunges-Zeichen der der privaten/oem-Rechtschreibprüfung */
short filler1[3]; /* 8-Byte-Ausrichtung */
/*** erneuter Aufruf von rel_do() für jedes einzelne Wort das nicht im Wörterbuch gefunden wurde */
const RelData *rel_repeat; /* nur eines (rel_repeat oder rep_repeat) st zui setzen wenn erforderlich */
/* rel_repeat hat die Erkennungsergebnisse zu enthalten
für rel_graph_in, rel_result_in */
const RepData *rep_repeat; /* mit rel_repeat oder rep_repeat, PREP_INPLACE darf nicht gesetzt werden
für das zugehörige .parm.prep */
RepResult *repr; /* Erkennungsergebnisse für erkannte Textzeile im Fall von rep_repeat */
/*** Anzahl der Ergebnisse von respell_do () */
short rel_graph_out_len;
short rel_result_out_len;
short result_text_len;
short filler2; /* 8-Byte-Ausrichtung */
/*** results of respell_do(), allokieren vor dem ersten Aufruf von respell_do() */
RelGraph *rel_graph_out;
RelResult *rel_result_out;
void *result_text;
void *filler3; /* 8-Byte-Ausrichtung */
} ReSpellData;
extern KADMOS_ERROR KADMOS_API respell_init (ReSpellData *, const char *file_title);
extern KADMOS_ERROR KADMOS_API respell_winit (ReSpellData *, const wchar_t *file_title);
extern KADMOS_ERROR KADMOS_API respell_do (ReSpellData *);
/* wenn rel_graph_in, rel_result_in erzeugt ist mit OPTIONS_BASICLABELS_RESULT, */
/* der Aufruf re*_group_labels() vor respell_do() */
extern KADMOS_ERROR KADMOS_API respell_lookup (ReSpellData *, long code, const char *word,
char *results, int results_size,
long text_format);
/* text_format für word und results kann 0 oder TEXT_FORMAT_KADMOS_MULTIBYTE sein */
extern KADMOS_ERROR KADMOS_API respell_end (ReSpellData *);
extern KADMOS_ERROR KADMOS_API respell_filetitle (ReSpellData *, char *file_title); /* char, wchar_t */
extern long KADMOS_API respell_codepage (ReSpellData *);
extern KADMOS_ERROR KADMOS_API respell_wordchars (ReSpellData *, char *wordchars, int wordchars_size);
extern short KADMOS_API respell_reject_char(ReSpellData *);
extern KADMOS_ERROR KADMOS_API respell_freeimages (ReSpellData *); /* siehe TYPO_KEEPIMG */
/****************************************************************************
*
* Modul RE_CDO
*
* Color-drop-out
* Erzeugt graue Bilder und Binärbilder aus Farbbildern sowie eine
* Liste von Rechtecken der Bildzeilen
*
****************************************************************************/
typedef struct ReCdoLine_tag {
ReRect rect;
short aoi_number;
short order_number;
unsigned char mask;
unsigned char gray;
unsigned char filler[2]; /* 8-Byte-Ausrichtung */
} ReCdoLine;
typedef struct ReCdoInit_tag {
short result_maxlen; /* maximale Anzahl der Elemente in result_line */
short filler[3]; /* 8-Byte-Ausrichtung */
/*** used internally by re_cdo_init(), re_cdo_do(), and re_cdo_end() */
INT_PTR interna[4]; /* nicht ändern */
} ReCdoInit;
typedef struct ReCdoData_tag {
ReCdoInit init;
/*** Parameter für re_cdo_do() - setzen nach re_cdo_init() */
ReParm parm; /* Die Standardwerte werdengesetzt durch re_cdo_init() */
/*** Bereiche von Interesse - setzen vor re_cdo_do() */
ReRect *aoi_rect; /* NULL bedeutet ganzes Bild */
short aoi_len; /* Anzahl der Elemente in aoi_rect */
/* Eingabedaten */
ReImage color_image_in;
/* Ausgabedaten */
ReImage gray_image_out;
ReImageHandle h_gray_image_out; /* Allokations-Handle von gray_image_out */
ReImage result_image_out;
ReImageHandle h_result_image_out; /* Allokations-Handle von result_image_out */
short result_len; /*** Anzahl der Ergebnisse von re_cdo_do() */
ReCdoLine *result_line; /*** Ergebnisse von re_cdo_do(),
zu allokieren vor dem erstan Aufruf von re_cdo_do() */
} ReCdoData;
extern KADMOS_ERROR KADMOS_API re_cdo_init (ReCdoData *, const char *rec_file_title);
extern KADMOS_ERROR KADMOS_API re_cdo_winit (ReCdoData *, const wchar_t *rec_file_title);
extern KADMOS_ERROR KADMOS_API re_cdo_do (ReCdoData *);
extern KADMOS_ERROR KADMOS_API re_cdo_end (ReCdoData *);
/****************************************************************************
*
* Modul RE_LAYOUT
*
* Layoutanalyse Findet den Textbereich in einem bestimmten Bild,
* nachdem deskewing eine Liste von Teilbildern mit Textabsätzen,
* Bildern oder Rastern zurückgibt
*
****************************************************************************/
#define RESULT_FLAG_NOTEXT 0
#define RESULT_FLAG_GRID 1
#define RESULT_FLAG_UNDERLINE 2 /* nicht verwechseln mit RESULT_FLAG_UNDERLINED rel REL definiert */
#define RESULT_FLAG_TEXT 4
typedef struct ReLayoutResult_tag {
ReRect subimage; /* Position von Teilbildern in image_in oder
im deskewed Eingabe-Bild */
long result_flag; /* RESULT_FLAG_NOTEXT, RESULT_FLAG_GRID, RESULT_FLAG_TEXT, ... */
long filler; /* 8-Byte-Ausrichtung */
ReImageHandle h_result_image_bw; /* Bid-Handle voneinem schwarzweissem Teilbild */
/* Aufruf von re_imagehandle2image() um result_image zu erhalten*/
/* Speicherfreigaben durch re_free_layout() */
} ReLayoutResult;
#define LAYOUT_CONTENT_ONLY 0x00000001 /* kein layout_results wird zurückgegeben,
nur Schrägstellung und Inhalt */
#define LAYOUT_OPTIONS_FAST_GRID OPTIONS_FAST_GRID /* schnelle grid-Erkennung */
typedef struct ReLayoutData_tag {
ReImage image_in; /* zu analysierendes Bild */
ReRect *expected_areas;
short expected_areas_len; /* Anzahl von expected_areas */
short filler1; /* 8-Byte-Ausrichtung */
long parameter; /* LAYOUT_CONTENT_ONLY, LAYOUT_OPTIONS_FAST_GRID */
/*** Ergebnisse von re_layout () */
ReImage image_deskewed; /* schrägstehendes Bild */
ReImageHandle h_image_deskewed; /* Bild-Handle des schrägstehendes Bildes wenn re_layout_deskew!=0;
Aufruf von re_freeimage(*.h_image_deskewed) zur Speicherfreigabe */
ReRect content; /* gefundenes Bereich von Interesse */
short re_layout_deskew; /* korrigierte Schräglage von image_in */
short re_layout_result_len; /* Anzahl der Elemente in re_layout_result */
short filler2[2]; /* 8-Byte-Ausrichtung */
ReLayoutResult *re_layout_result; /* Ergebnisse der Layoutanalyse -
Speicher wird freigegeben durch re_free_layout() */
} ReLayoutData;
extern KADMOS_ERROR KADMOS_API re_layout(ReLayoutData *);
extern KADMOS_ERROR KADMOS_API re_free_layout(ReLayoutData *);
/****************************************************************************
*
* Modul RE_PAGE
*
* Vollständige Seitenerkennung
* Führt eine Layoutanalyse durch und erkennt den Textbereich
*
****************************************************************************/
typedef struct RePageParm_tag {
RepData rep; /* initialisierter Klassifikator und Parameter zur Erkennung */
/* rep.init.rep_memory oder rep.init.rep_memory_size nicht setzen,
re_page() macht das intern */
/* aber rep.init.rel_grid_maxlen, .rel_graph_maxlen,
und .rel_result_maxlen setzen*/
ReSpellData respell1; /* initialisierte Rechtschreibprüfung Nummer eins oder nullter Speicher */
ReSpellData respell2; /* initialisierte Rechtschreibprüfung Nummer zwei oder nullter Speicher */
ReRect application_area; /* Anwendungsbereich für diesen Klassifikator und die Rechtschreibprüfung,
bezogen auf das Deskewed-Inhaltsbild */
} RePageParm;
typedef struct RePageResult_tag {
ReRect subimage; /* Position des Teilbildes in image_in oder im Deskewed-Inhaltsbild */
long result_flag; /* RESULT_FLAG_NOTEXT, RESULT_FLAG_GRID, RESULT_FLAG_TEXT, ... */
long filler1; /* 8-Byte-Ausrichtung */
ReImageHandle h_result_image_bw; /* Bild-Handle eines segmentierten Shwarz-Weiss-Teilbildes */
/* Aufruf von re_imagehandle2image() um result_image zu bekommen*/
/* Aufruf von re_freeimage(*.h_result_image_bw) zur Speicherfreigabe */
short block_number; /* Die Absätze einer Seite werden in Blöcken zusammengefasst */
/* block_number==0 means the paragraph is a block of its own */
short rep_result_len; /* Anzahl der Elemente in rep_result wenn result_flag==RESULT_FLAG_TEXT */
short filler2[2]; /* 8-Byte-Ausrichtung */
RepResult *rep_result; /* Ergebnisse der zeilenerkennung wenn result_flag==RESULT_FLAG_TEXT */
} RePageResult;
typedef struct RePageData_tag {
ReImage image_in; /* Bild, das erkannt werden soll */
long parameter; /* LAYOUT_OPTIONS_FAST_GRID */
long filler1; /* 8-Byte-Ausrichtung */
/*** results of re_page() */
ReImage image_deskewed; /* schrägstehendes Bild */
ReImageHandle h_image_deskewed; /* Bild-Handle des schrägstehenden Bildes wenn re_page_deskew!=0;
call re_freeimage(*.h_image_deskewed) to free memory */
ReRect content; /* gefundener Bereich von Interesse */
short re_page_deskew; /* korrigierte Schräglage von image_in */
short re_page_parm_len; /*Anzahl der Elemente in re_page_parm, zu setzen vor re_page() */
short filler2[2]; /* 8-Byte-Ausrichtung */
RePageParm *re_page_parm; /* Parameter für die Seitenerkennung, zu setzen vor re_page() */
short block_count; /* Die Absätze einer Seite werden in Blöcken zusammengefasst;
Anzahl der gefundenen realen Blöcke +1 */
short re_page_result_len; /* Anzahl der Elemente in re_page_result */
short filler3[2]; /* 8-Byte-Ausrichtung */
RePageResult *re_page_result; /* Ergebnisse der Seitenerkennung -
Aufruf von re_free(*.re_page_result) zur Speicherfreigabe */
} RePageData;
extern KADMOS_ERROR KADMOS_API re_page(RePageData *);
extern KADMOS_ERROR KADMOS_API re_free_page(RePageData *);
/****************************************************************************
*
* API zum Freigeben von Speicher, der von einer KADMOS-Funktion zugewiesen
* wurde, mit Ausnahme von ReImageHandle:
* re_free()
* APIs zur Unterstützung von Multithreading:
* re_ClearThreadData()
* APIs zum Kopieren, Speichern oder Wiederherstellen von Erkennungsparametern:
* re_copyparm(), re_readparm(), re_readparm2(), re_readparm3(),
* re_writeparm(), re_writeparm2(), re_writeparm3()
* re_wreadparm(), re_wreadparm2(), re_wreadparm3(),
* re_wwriteparm(), re_wwriteparm2(), re_wwriteparm3()
* APIs für die Konfigurationserkennung
* (nur Windows, reconfig.dll ist erforderlich):
* rec_config(), rel_config(), rel_config2(), rel_config3()
* rep_config(), rep_config2(), rep_config3(), re_config_close()
* APIs zum Lesen und Schreiben von Bilddateien
* (KADMOS.dll oder reimageio.lib ist erforderlich):
* re_openimagefile(), re_wopenimagefile() - öffnen einer Bilddatei
* re_readimagefile() - Aus einer geöffneten Bilddatei in ReImage-Daten lesen
* re_writeimagefile() - schreibe ein ReImage in eine geöffnete Bilddatei
* re_endofimagefile() - Ende der Datei prüfen
* re_closeimagefile() - Schliessen der Bilddatei
* re_readimage(), re_wreadimage() - Lesen Einzelbildes in die ReImage-Daten
* re_writeimage(), re_wwriteimage() - Schreibt ein ReImage in eine Bilddatei
* APIs zum Konvertieren von Bildern aus und in Bitmap-Daten:
* re_image2bmp() - ReImage-Daten in Bitmaps konvertieren
* re_bmp2image() - ReImage-Daten in Bitmaps konvertieren
* APIs zum Lesen / Schreiben von Bildern aus / in die Zwischenablage:
* re_clipboard2image() - Holt den Inhalt der Zwischenablage in ReImage-Daten
* re_image2clipboard() - kopiert ein ReImage in die Zwischenablage
* APIs zum Konvertieren von Bildern von und zu HBITMAP-Daten:
* re_image2hbitmap() - um ReImage-Daten in HBITMAP-Daten umzuwandeln
* re_hbitmap2image() - HBITMAP-Daten in ReImage-Daten konvertieren
* API zum Abrufen des Bildes von einem Bild-Handle:
* re_imagehandle2image() - Extrahiert den Inhalt eines Bild-Handles
* API, um zugewiesenen Speicher von allen Bildfunktionen oben freizugeben:
* re_freeimage() - Freigabe eines allokierten Speichers von einem Bild
* APIs zur Bearbeitung eines ReImage:
* re_createimage()
* re_cloneimage()
* re_subimage()
* re_rotateimage()
* re_getpixel()
* re_setpixel()
* re_fillimage()
* API zur Handhabung / Erweiterung von Ligaturen:
* code_wexpand_lig()
* APIs, um erkannte Textzeichenfolgen zu erhalten:
* rel_(w)textline(), repr_(w)textline(), rep_(w)textline()
*
****************************************************************************/
/****************************************************************************
*
* Für die PNG-Unterstützung verwendet diese Software (KADMOS.dll, reimageio.lib)
* Teile von libpng. Copyright 2000-2002, Glenn-Randers
*
* Für die JPEG-Unterstützung basiert diese Software (KADMOS.dll, reimageio.lib)
* zum Teil auf der Arbeit der Independent JPEG Group.
*
* Für die TIFF-Unterstützung basiert diese Software (KADMOS.dll, reimageio.lib)
* teilweise auf Arbeiten von Sam Leffler, Silicon Graphics Inc. und der
* University of California.
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
* Copyright (c) 1985, 1986 The Regents of the University of California
*
****************************************************************************/
/* freier Speicher, der von einer KADMOS-Funktion wie page_text
zugewiesen wurde, mit Ausnahme von ReImageHandle */
extern void KADMOS_API re_free(void *);
/* Unterstützung für Multithreading - Aufruf direkt vor dem Beenden eines Threads */
extern KADMOS_ERROR KADMOS_API re_ClearThreadData(void);
/* Erkennungsparameter kopieren */
extern KADMOS_ERROR KADMOS_API re_copyparm(const ReParm *source, ReParm *destination);
/* speichern, Erkennungsparameter wiederherstellen */
extern KADMOS_ERROR KADMOS_API re_readparm(ReParm *,
unsigned char *reject_level, const char *file_title, const char *section);
extern KADMOS_ERROR KADMOS_API re_wreadparm(ReParm *,
unsigned char *reject_level, const wchar_t *file_title, const char *section);
extern KADMOS_ERROR KADMOS_API re_readparm2(ReParm *, ReSpellParm *,
unsigned char *reject_level, const char *file_title, const char *section);
extern KADMOS_ERROR KADMOS_API re_wreadparm2(ReParm *, ReSpellParm *,
unsigned char *reject_level, const wchar_t *file_title, const char *section);
extern KADMOS_ERROR KADMOS_API re_readparm3(ReParm *, ReSpellParm *, ReSpellParm *,
unsigned char *reject_level, const char *file_title, const char *section);
extern KADMOS_ERROR KADMOS_API re_wreadparm3(ReParm *, ReSpellParm *, ReSpellParm *,
unsigned char *reject_level, const wchar_t *file_title, const char *section);
extern KADMOS_ERROR KADMOS_API re_writeparm(const ReParm *,
unsigned char reject_level, const char *file_title, const char *section);
extern KADMOS_ERROR KADMOS_API re_wwriteparm(const ReParm *,
unsigned char reject_level, const wchar_t *file_title, const char *section);
extern KADMOS_ERROR KADMOS_API re_writeparm2(const ReParm *, const ReSpellParm *,
unsigned char reject_level, const char *file_title, const char *section);
extern KADMOS_ERROR KADMOS_API re_wwriteparm2(const ReParm *, const ReSpellParm *,
unsigned char reject_level, const wchar_t *file_title, const char *section);
extern KADMOS_ERROR KADMOS_API re_writeparm3(const ReParm *, const ReSpellParm *, const ReSpellParm *,
unsigned char reject_level, const char *file_title, const char *section);
extern KADMOS_ERROR KADMOS_API re_wwriteparm3(const ReParm *, const ReSpellParm *, const ReSpellParm *,
unsigned char reject_level, const wchar_t *file_title, const char *section);
#if (defined(_WIN32) || defined(_WIN64)) && !defined(_WIN32_WCE)
/* Dialog zum Einstellen der Erkennungsparameter (Klassifikator konfigurieren) */
extern KADMOS_ERROR KADMOS_API rec_config(RecData *, unsigned char *reject_level);
extern KADMOS_ERROR KADMOS_API rel_config(RelData *, unsigned char *reject_level);
extern KADMOS_ERROR KADMOS_API rep_config(RepData *, unsigned char *reject_level);
extern KADMOS_ERROR KADMOS_API rel_config2(RelData *, ReSpellData *, unsigned char *reject_level);
extern KADMOS_ERROR KADMOS_API rep_config2(RepData *, ReSpellData *, unsigned char *reject_level);
extern KADMOS_ERROR KADMOS_API rel_config3(RelData *, ReSpellData *, ReSpellData *, unsigned char *reject_level);
extern KADMOS_ERROR KADMOS_API rep_config3(RepData *, ReSpellData *, ReSpellData *, unsigned char *reject_level);
extern void KADMOS_API re_config_close(void);
extern KADMOS_ERROR KADMOS_API about_kadmos(void);
/* Die oben genannten Funktionen sind in einer separaten DLL implementiert, */
Es wird keine Fehlerbehandlung unterstützt (außer dem Rückgabewert) */
#endif
/* Bilder von / in Dateien lesen / schreiben */
typedef void *ReFileHandle;
#if ((defined(_WIN32) || defined(_WIN64)) && !defined(_WIN32_WCE)) || defined(_CONSOLE)
extern KADMOS_ERROR KADMOS_API GetPrivateFileName(char *file_title,
const char *filter, unsigned int mode, const char *boxtext,
const char *inifile, const char *section, const char *entry);
/* filter, mode, boxtext=Title siehe Windows-Funktion GetOpenFileName () */
/* inifile, section, entry siehe Windows-Funktion GetPrivateProfileString () */
#if !defined(_WIN32) && !defined(_WIN64) && !defined(OF_READ)
/* Wert von mode */
#define OF_READ 0x00000000
#define OF_CREATE 0x00001000 /* muss gesetzt werden, wenn die Datei nicht existiert! */
#define OF_PROMPT 0x00002000
#define OF_EXIST 0x00004000
#endif
#endif
extern ReFileHandle KADMOS_API re_openimagefile(const char *file_title, const char *mode);
extern ReFileHandle KADMOS_API re_wopenimagefile(const wchar_t *file_title, const char *mode);
/* mode: "r" für lesen, "w" für schreiben, "a" zum Anhängen */
extern ReImageHandle KADMOS_API re_readimagefile(ReFileHandle, long image_number, ReImage *image);
/* image_number=0 für das erste Bild in der Datei */
extern KADMOS_ERROR KADMOS_API re_writeimagefile(ReFileHandle, const ReImage *image);
/* Bilder werden immer am Ende der Datei geschrieben */
extern int KADMOS_API re_endofimagefile(ReFileHandle);
/* gibt 1 im Fall von eof zurück, sonst 0 */
extern KADMOS_ERROR KADMOS_API re_closeimagefile(ReFileHandle);
/* ein oder erstes Bild aus einer Datei lesen */
extern ReImageHandle KADMOS_API re_readimage(const char *file_title, ReImage *image);
extern ReImageHandle KADMOS_API re_wreadimage(const wchar_t *file_title, ReImage *image);
/* Bilder aus ReImage-Daten in Bilddateien schreiben */
extern KADMOS_ERROR KADMOS_API re_writeimage(const ReImage *image, const char *file_title);
extern KADMOS_ERROR KADMOS_API re_wwriteimage(const ReImage *image, const wchar_t *file_title);
/* Bilder von ReImage-Daten in Bitmap-Daten konvertieren */
/* Bmp_buffer zeigt auf eine BITMAPINFOHEADER-Struktur */
/* Die Bitmap-Bits werden an Position zurückgegeben: */
/* (char *)bmp_buffer + (BITMAPINFOHEADER*)bmp_buffer->biSize + */
/* (BITMAPINFOHEADER*)bmp_buffer->biClrUsed * sizeof(RGBQUAD) */
extern ReImageHandle KADMOS_API re_image2bmp(const ReImage *image, void **bmp_buffer);
/* Bilder aus Bitmap-Daten in ReImage-Daten konvertieren */
/* Es wird erwartet, dass bmp_buffer auf eine BITMAPINFOHEADER-Struktur verweist */
/* Für bmp_bits == NULL werden die Bits an Position erwartet: */
/* (char *)bmp_buffer + ((BITMAPINFOHEADER*)bmp_buffer)->biSize + */
/* ((BITMAPINFOHEADER*)bmp_buffer)->biClrUsed * sizeof(RGBQUAD) */
extern ReImageHandle KADMOS_API re_bmp2image(const void *bmp_buffer, const void *bmp_bits, ReImage *image);
#if (defined(_WIN32) || defined(_WIN64)) && !defined(_WIN32_WCE)
/* Inhalt der Zwischenablage abrufen */
extern ReImageHandle KADMOS_API re_clipboard2image(ReImage *image);
/* platziert ein Bild in der Zwischenablage */
extern KADMOS_ERROR KADMOS_API re_image2clipboard(const ReImage *image);
/* Bilder von HBITMAP-Handles in ReImage-Daten konvertieren */
extern ReImageHandle KADMOS_API re_hbitmap2image(HBITMAP hbmp, ReImage *image);
/* Konvertieren von Bildern aus ReImage-Daten in HBITMAP-Handles */
extern KADMOS_ERROR KADMOS_API re_image2hbitmap(const ReImage *image, HBITMAP *hbmp);
/* Zur Freigabe des HBITMAP-Handles hbmp nach der Verwendung, DeleteObject (hbmp) aufrufen. */
#endif
/* holt das Bild von einem Bild-Handle */
extern KADMOS_ERROR KADMOS_API re_imagehandle2image(ReImageHandle, ReImage *image);
/* Giebt den von den oben genannten Funktionen zugewiesenen Speicher frei */
extern KADMOS_ERROR KADMOS_API re_freeimage(ReImageHandle);
/* Erstellen / Zuordnen eines leeren Bildes basierend auf der Angabe im Parameter 'image' */
extern ReImageHandle KADMOS_API re_createimage(ReImage *image);
/* ein vorhandenes Bild duplizieren */
extern ReImageHandle KADMOS_API re_cloneimage(const ReImage *image, ReImage *cloneimage);
/* Erzeugen eines Teilbildes eines vorhandenen Bildes */
extern ReImageHandle KADMOS_API re_subimage(const ReImage *image, const ReRect *rect, ReImage *subimage);
/* ein Bild drehen */
extern ReImageHandle KADMOS_API re_rotateimage(const ReImage *image, ReImage *rotateimage, int angle);
/* Festlegen oder Abrufen der Pixelfarbe in Pixelbildern */
extern KADMOS_ERROR KADMOS_API re_setpixel(ReImage *image, long x, long y, long color);
extern KADMOS_ERROR KADMOS_API re_getpixel(const ReImage *image, long x, long y, long *color);
/* Füllen Sie ein Pixelbild (oder ein Bild-> Teilbild, falls angegeben) mit Farbe */
extern KADMOS_ERROR KADMOS_API re_fillimage(ReImage *image, long color);
/* erweitert die Ligaturen, falls vorhanden, andernfalls kopiert das Label von src nach dst */
/* Gibt die Anzahl der (w) Zeichen zurück, die in dst geschrieben wurden */
extern int KADMOS_API code_expand_lig(const char *src, char *dst, long code);
#define TEXT_FORMAT_ANSI 0x00000001 /* default, gilt auch für CODE_UTF_16 oder CODE_UTF_8 */
#define TEXT_FORMAT_POSTSCRIPT 0x00000002 /* noch nicht implementiert */
#define TEXT_FORMAT_XML 0x00000004 /* Codepage UTF8 */
#define TEXT_FORMAT_PDF 0x00000008 /* gilt für jede von KADMOS unterstützte Codepage */
#define TEXT_FORMAT_LEFT_TO_RIGHT 0x00100000 /* für Latin, Cyrillic,... gemischt mit Hebrew, Arabic,... */
#define TEXT_FORMAT_RIGHT_TO_LEFT 0x00200000 /* für Hebrew, Arabic,... gemischt mit Latin, Cyrillic,... */
#define TEXT_FORMAT_ACCENTS_BOTTOM_UP 0x01000000 /* Reihenfolge der oberen Akzente von unten nach oben - Standard */
#define TEXT_FORMAT_ACCENTS_TOP_DOWN 0x02000000 /* obere Akzente von oben nach unten */
#define TEXT_FORMAT_KADMOS_MULTIBYTE 0x10000000 /* Multi-Byte-Labels zurückgeben */
#define TEXT_FORMAT_OMIT_BIDI_CONTROL 0x20000000 /* für BIDI-Text ohne Ausgabe von 0x202D or 0x202E */
#define TEXT_FORMAT_RELGRAPH_INDICES 0x40000000 /* Rückgabewerte als kurzes Array, beendet durch -1 */
#define TEXT_FORMAT_RELRESULT_INDICES 0x80000000 /* Rückgabewerte als kurzes Array, beendet durch -1 */
extern KADMOS_ERROR KADMOS_API rel_textline(const RelData *, void *buffer,
int buffsize, unsigned char reject_level,
int reject_char, long text_format);
extern KADMOS_ERROR KADMOS_API repr_textline(const RepResult *, long code,
void *buffer, int buffsize,
unsigned char reject_level,
int reject_char, long text_format);
extern KADMOS_ERROR KADMOS_API rep_textline(const RepData *, int line_number,
void *buffer, int buffsize,
unsigned char reject_level,
int reject_char, long text_format);
/* den vollständigen Ergebnistext eines Absatzes erhalten; rep.init.rep_memory muss zugewiesen werden */
/* Aufruf von free(return_value), um Speicher freizugeben */
extern void * KADMOS_API rep_text(const RepData *, unsigned char reject_level, int reject_char,
char *indent, int indent_count, long text_format);
/* vollen Text einer Seite erhalten */
/* Aufruf von free(return_value), um Speicher freizugeben */
extern void * KADMOS_API page_text(const RePageData *, int page_number, unsigned char reject_level, int reject_char,
char *indent, int indent_count, long text_format);
/****************************************************************************
*
* APIs zum Sammeln von Bildern
*
****************************************************************************/
/* Aufruf vor dem ersten Aufruf von rec_do (), rel_do () oder rep_do () */
extern KADMOS_ERROR KADMOS_API re_collect_init(const char *image_file_title,
unsigned char save_value_min,
unsigned char save_value_max);
extern KADMOS_ERROR KADMOS_API re_collect_winit(const wchar_t *image_file_title,
unsigned char save_value_min,
unsigned char save_value_max);
/* Aufruf nach rec_do () oder als rec_hook vor dem Aufruf von rel_do (), rep_do () gesetzt */
extern KADMOS_ERROR KADMOS_API rec_collect_kernel(const RecData *rec);
/* Aufruf nach rel_do () oder als rel_hook vor dem Aufruf von rep_do () */
/* Geben Sie jedoch TYPO_KEEPIMG an, um korrekte Bilder zu erhalten */
extern KADMOS_ERROR KADMOS_API rel_collect_kernel(const RelData *rel);
/* Aufruf, um die Sammlung zu stoppen und die Bilddatei korrekt zu schliessen */
extern KADMOS_ERROR KADMOS_API re_collect_end(void);
#if (defined(_WIN32) || defined(_WIN64)) && !defined(_WIN32_WCE)
/****************************************************************************
*
* hook engine interface
*
* Wenn KADMOSHookEngine leer ist, wird unter Windows bei jedem Aufruf
* von rec_init (), rel_init () oder rep_init () nach einem Hook-Modul
* gesucht, es wird geladen, falls es gefunden wird, und das Flag
* GENERAL_HOOKENGINE_LOADED wird gesetzt.
*
* Eine Hook Engine muss durch Setzen von GENERAL_HOOKENGINE_ON aktiviert
* werden, bevor rec_do (), rel_do () oder rep_do () aufgerufen wird.
*
****************************************************************************/
typedef struct HookEngineData_tag {
KADMOS_ERROR (KADMOS_API *HookRecDoStart)(RecData *);
KADMOS_ERROR (KADMOS_API *HookRecDoEnd)(RecData *);
KADMOS_ERROR (KADMOS_API *HookRelDoStart)(RelData *);
KADMOS_ERROR (KADMOS_API *HookRelDoEnd)(RelData *);
KADMOS_ERROR (KADMOS_API *HookRepDoStart)(RepData *);
KADMOS_ERROR (KADMOS_API *HookRepDoEnd)(RepData *);
} HookEngineData;
extern HookEngineData KadmosHookEngine;
#endif /* (defined(_WIN32) || defined(_WIN64)) && !defined(_WIN32_WCE) */
/****************************************************************************
*
* APIs zur Unterstützung von Visual Basic. To use, include <wtypes.h>
* re_ArrayToString(): convert arrays into Visual Basic 'String'
* re_StringToArray(): convert Visual Basic 'String' into arrays
* re_ErrorText_bas: Visual Basic version of structure re_ErrorText
* re_GetErrorText_bas(): Visual Basic version of re_GetErrorText()
* re_SetErrorText_bas(): Visual Basic version of re_SetErrorText()
* re_DisplayErrorText_bas(): VB version of re_DisplayErrorText()
* Zeiger auf KADMOS-Funktionen übergeben:
* GetPointer(): Gib einen Pointer zurück als 'INT_PTR'
* FunctionAddress(): Rückgabe einer Funktionsadresse als 'INT_PTR'
* GetRe*(): Daten aus einem Array-Element in eine Struktur kopieren
* SetRe*(): Daten aus einer Struktur in ein Array-Element kopieren
*
****************************************************************************/
#if defined(_WIN32) && defined(__wtypes_h__)
/* Konvertiert Arrays in Visual Basic-Zeichenfolgen und umgekehrt */
KADMOS_ERROR KADMOS_API re_ArrayToString(void *array, BSTR *bstr, long maxlen, long array_type);
KADMOS_ERROR KADMOS_API re_StringToArray(BSTR *bstr, void *array, long maxlen, long array_type);
#define ARRAY_TYPE_BYTE 0
#define ARRAY_TYPE_WCHAR 1
#pragma pack(push)
#pragma pack(4)
typedef struct re_ErrorText_bas_tag {
int ident;
BSTR program;
BSTR text;
BSTR systext;
int private_data;
} re_ErrorText_bas;
#pragma pack(pop)
KADMOS_ERROR KADMOS_API re_GetErrorText_bas(re_ErrorText_bas *errtext);
void KADMOS_API re_SetErrorText_bas(re_ErrorText_bas *errtext);
void KADMOS_API re_DisplayErrorText_bas(re_ErrorText_bas *errtext);
#endif /* defined(_WIN32) && defined(__wtypes_h__) */
/* Zeiger auf KADMOS-Funktionen übergeben */
INT_PTR KADMOS_API GetPointer(void *p);
INT_PTR KADMOS_API FunctionAddress(INT_PTR p);
/* Get*(): copy data from an array element into a structure */
/* Set*(): Daten aus einer Struktur in ein Array-Element kopieren */
extern KADMOS_ERROR KADMOS_API GetRelGridParm(const RelGridParm*, int n, RelGridParm*);
extern KADMOS_ERROR KADMOS_API SetRelGridParm(const RelGridParm*, RelGridParm*, int n);
extern KADMOS_ERROR KADMOS_API GetRelGrid(const RelGrid*, int n, RelGrid*);
extern KADMOS_ERROR KADMOS_API SetRelGrid(const RelGrid*, RelGrid*, int n);
extern KADMOS_ERROR KADMOS_API GetRelGraph(const RelGraph*, int n, RelGraph*);
extern KADMOS_ERROR KADMOS_API SetRelGraph(const RelGraph*, RelGraph*, int n);
extern KADMOS_ERROR KADMOS_API GetRelResult(const RelResult*, int n, RelResult*);
extern KADMOS_ERROR KADMOS_API SetRelResult(const RelResult*, RelResult*, int n);
extern KADMOS_ERROR KADMOS_API GetRepResult(const RepResult*, int n, RepResult*);
extern KADMOS_ERROR KADMOS_API SetRepResult(const RepResult*, RepResult*, int n);
/****************************************************************************
*
* APIs to support Delphi
*
* re_CharArrayToPointer(): copy the Char Array content to memory
* re_PointerToCharArray(): copy the memory content to Char Array
*
****************************************************************************/
extern void KADMOS_API re_CharArrayToPointer(const char *array, void *pointer, long len);
extern void KADMOS_API re_PointerToCharArray(void *pointer, char *array, long len);
#ifdef __cplusplus
}
#endif
#endif /* INC_KADMOS */