xref: /plan9/sys/src/libscribble/scribbleimpl.h (revision 767832599f05417fe9452317de3fa53a733ada57)
180ee5cbfSDavid du Colombier /*
280ee5cbfSDavid du Colombier  *  scribble.h:			User-Level API for Handwriting Recognition
380ee5cbfSDavid du Colombier  *  Author:				James Kempf
480ee5cbfSDavid du Colombier  *  Created On:			Mon Nov  2 14:01:25 1992
580ee5cbfSDavid du Colombier  *  Last Modified By:	Sape Mullender
680ee5cbfSDavid du Colombier  *  Last Modified On:	Fri Aug 25 10:24:50 EDT 2000
780ee5cbfSDavid du Colombier  *  Copyright (c) 1994 by Sun Microsystems Computer Company
880ee5cbfSDavid du Colombier  *  All rights reserved.
980ee5cbfSDavid du Colombier  *
1080ee5cbfSDavid du Colombier  *  Use and copying of this software and preparation of
1180ee5cbfSDavid du Colombier  *  derivative works based upon this software are permitted.
1280ee5cbfSDavid du Colombier  *  Any distribution of this software or derivative works
1380ee5cbfSDavid du Colombier  *  must comply with all applicable United States export control
1480ee5cbfSDavid du Colombier  *  laws.
1580ee5cbfSDavid du Colombier  *
1680ee5cbfSDavid du Colombier  *  This software is made available as is, and Sun Microsystems
1780ee5cbfSDavid du Colombier  *  Computer Company makes no warranty about the software, its
1880ee5cbfSDavid du Colombier  *  performance, or its conformity to any specification
1980ee5cbfSDavid du Colombier  */
2080ee5cbfSDavid du Colombier 
2180ee5cbfSDavid du Colombier /*
2280ee5cbfSDavid du Colombier  * Opaque type for the recognizer. The toolkit must access through
2380ee5cbfSDavid du Colombier  * appropriate access functions.
2480ee5cbfSDavid du Colombier  */
25*76783259SDavid du Colombier #pragma incomplete struct _Recognizer
2680ee5cbfSDavid du Colombier typedef struct _Recognizer* recognizer;
2780ee5cbfSDavid du Colombier 
2880ee5cbfSDavid du Colombier /*
2980ee5cbfSDavid du Colombier  * Opaque type for recognizers to implement dictionaries.
3080ee5cbfSDavid du Colombier  */
3180ee5cbfSDavid du Colombier 
3280ee5cbfSDavid du Colombier typedef struct _wordset		*wordset;
3380ee5cbfSDavid du Colombier typedef struct rc		rc;
3480ee5cbfSDavid du Colombier typedef struct rec_correlation	rec_correlation;
3580ee5cbfSDavid du Colombier typedef struct rec_alternative	rec_alternative;
3680ee5cbfSDavid du Colombier typedef struct rec_element	rec_element;
3780ee5cbfSDavid du Colombier typedef struct gesture		gesture;
3880ee5cbfSDavid du Colombier typedef uint			wchar_t;
3980ee5cbfSDavid du Colombier 
4080ee5cbfSDavid du Colombier /* Scalar Type Definitions */
4180ee5cbfSDavid du Colombier 
4280ee5cbfSDavid du Colombier /* For better readibility.*/
4380ee5cbfSDavid du Colombier 
4480ee5cbfSDavid du Colombier typedef int bool;
4580ee5cbfSDavid du Colombier 
4680ee5cbfSDavid du Colombier #define true 1
4780ee5cbfSDavid du Colombier #define false 0
4880ee5cbfSDavid du Colombier 
4980ee5cbfSDavid du Colombier /*For pointers to extra functions on recognizer.*/
5080ee5cbfSDavid du Colombier 
5180ee5cbfSDavid du Colombier typedef void (*rec_fn)();
5280ee5cbfSDavid du Colombier 
5380ee5cbfSDavid du Colombier /*
5480ee5cbfSDavid du Colombier  * rec_confidence is an integer between 0-100 giving the confidence of the
5580ee5cbfSDavid du Colombier  * recognizer in a particular result.
5680ee5cbfSDavid du Colombier  */
5780ee5cbfSDavid du Colombier 
5880ee5cbfSDavid du Colombier typedef uchar rec_confidence;
5980ee5cbfSDavid du Colombier 
6080ee5cbfSDavid du Colombier /**************** RECOGNIZER CONFIGURATION INFORMATION *******************/
6180ee5cbfSDavid du Colombier 
6280ee5cbfSDavid du Colombier /*
6380ee5cbfSDavid du Colombier  * Recognizer information. Gives the locale, category of the character
6480ee5cbfSDavid du Colombier  * set returned by the recognizer, and any subsets to which the
6580ee5cbfSDavid du Colombier  * recognition can be limited. The locale and category should be
6680ee5cbfSDavid du Colombier  * suitable for the setlocale(3). Those recognizers which don't do text
6780ee5cbfSDavid du Colombier  * can simply report a blank locale and category, and report the
6880ee5cbfSDavid du Colombier  * graphics types they recognize in the subset.
6980ee5cbfSDavid du Colombier  */
7080ee5cbfSDavid du Colombier 
7180ee5cbfSDavid du Colombier typedef struct {
7280ee5cbfSDavid du Colombier     char* ri_locale;        /*The locale of the character set.*/
7380ee5cbfSDavid du Colombier     char* ri_name;          /*Complete pathname to the recognizer.*/
7480ee5cbfSDavid du Colombier     char** ri_subset;       /*Null terminated list of subsets supported*/
7580ee5cbfSDavid du Colombier } rec_info;
7680ee5cbfSDavid du Colombier 
7780ee5cbfSDavid du Colombier /*These define a set of common character subset names.*/
7880ee5cbfSDavid du Colombier 
7980ee5cbfSDavid du Colombier #define GESTURE		"GESTURE"		/* gestures only */
8080ee5cbfSDavid du Colombier #define MATHSET		"MATHSET"		/* %^*()_+={}<>,/. */
8180ee5cbfSDavid du Colombier #define MONEYSET	"MONEYSET"		/* $, maybe cent, pound, and yen */
8280ee5cbfSDavid du Colombier #define WHITESPACE	"WHITESPACE"	/* gaps are recognized as space */
8380ee5cbfSDavid du Colombier #define KANJI_JIS1	"KANJI_JIS1"	/* the JIS1 kanji only */
8480ee5cbfSDavid du Colombier #define KANJI_JIS1_PLUS	"KANJI_JIS1_PLUS" /* JIS1 plus some JIS2 */
8580ee5cbfSDavid du Colombier #define KANJI_JIS2	"KANJI_JIS2"	/* the JIS1 + JIS2 kanji */
8680ee5cbfSDavid du Colombier #define HIRIGANA	"HIRIGANA"		/* the hirigana */
8780ee5cbfSDavid du Colombier #define KATAKANA	"KATAKANA"		/* the katakana */
8880ee5cbfSDavid du Colombier #define UPPERCASE	"UPPERCASE"		/* upper case alphabetics, no digits */
8980ee5cbfSDavid du Colombier #define LOWERCASE	"LOWERCASE"		/* lower case alphabetics, no digits */
9080ee5cbfSDavid du Colombier #define DIGITS		"DIGITS"		/* digits 0-9 only */
9180ee5cbfSDavid du Colombier #define PUNCTUATION	"PUNCTUATION"	/* \!-;'"?()&., */
9280ee5cbfSDavid du Colombier #define NONALPHABETIC	"NONALPHABETIC" /* all nonalphabetics, no digits */
9380ee5cbfSDavid du Colombier #define ASCII		"ASCII"			/* the ASCII character set */
9480ee5cbfSDavid du Colombier #define ISO_LATIN12	"ISO_LATIN12"	/* The ISO Latin 12 characters */
9580ee5cbfSDavid du Colombier 
9680ee5cbfSDavid du Colombier 
9780ee5cbfSDavid du Colombier /********************  RECOGNITION INPUT STRUCTURES ***********************/
9880ee5cbfSDavid du Colombier 
9980ee5cbfSDavid du Colombier /*
10080ee5cbfSDavid du Colombier  * WINDOW SYSTEM INTERFACE
10180ee5cbfSDavid du Colombier */
10280ee5cbfSDavid du Colombier 
10380ee5cbfSDavid du Colombier /*Bounding box. Structurally identical to Rectangle.*/
10480ee5cbfSDavid du Colombier 
10580ee5cbfSDavid du Colombier typedef Rectangle pen_rect;
10680ee5cbfSDavid du Colombier 
10780ee5cbfSDavid du Colombier 
10880ee5cbfSDavid du Colombier /*
10980ee5cbfSDavid du Colombier  * RECOGNITION CONTEXT
11080ee5cbfSDavid du Colombier  */
11180ee5cbfSDavid du Colombier 
11280ee5cbfSDavid du Colombier /* Structure for reporting writing area geometric constraints. */
11380ee5cbfSDavid du Colombier 
11480ee5cbfSDavid du Colombier typedef struct {
11580ee5cbfSDavid du Colombier 	pen_rect pr_area;
11680ee5cbfSDavid du Colombier 	short pr_row, pr_col;
11780ee5cbfSDavid du Colombier } pen_frame;
11880ee5cbfSDavid du Colombier 
11980ee5cbfSDavid du Colombier /*
12080ee5cbfSDavid du Colombier  * Structure for describing a set of letters to constrain recognition.
12180ee5cbfSDavid du Colombier  * ls_type is the same as the re_type field for rec_element below.
12280ee5cbfSDavid du Colombier */
12380ee5cbfSDavid du Colombier 
12480ee5cbfSDavid du Colombier typedef struct _letterset {
12580ee5cbfSDavid du Colombier         char ls_type;
12680ee5cbfSDavid du Colombier         union _ls_set {
12780ee5cbfSDavid du Colombier                 char* aval;
12880ee5cbfSDavid du Colombier                 wchar_t* wval;
12980ee5cbfSDavid du Colombier         } ls_set;
13080ee5cbfSDavid du Colombier } letterset;
13180ee5cbfSDavid du Colombier 
13280ee5cbfSDavid du Colombier /********************* RECOGNITION RETURN VALUES *************************/
13380ee5cbfSDavid du Colombier 
13480ee5cbfSDavid du Colombier 
13580ee5cbfSDavid du Colombier /*Different types in union. "Other" indicates a cast is needed.*/
13680ee5cbfSDavid du Colombier 
13780ee5cbfSDavid du Colombier #define REC_NONE    0x0             /*No return value*/
13880ee5cbfSDavid du Colombier #define REC_GESTURE 0x1             /*Gesture.*/
13980ee5cbfSDavid du Colombier #define REC_ASCII   0x2             /*Array of 8 bit ASCII*/
14080ee5cbfSDavid du Colombier #define REC_VAR     0x4             /*Array of variable width characters. */
14180ee5cbfSDavid du Colombier #define REC_WCHAR   0x8             /*Array of Unicode (wide) characters. */
14280ee5cbfSDavid du Colombier #define REC_OTHER   0x10            /*Undefined type.*/
14380ee5cbfSDavid du Colombier #define REC_CORR    0x20	    /*rec_correlation struct*/
14480ee5cbfSDavid du Colombier 
14580ee5cbfSDavid du Colombier /*
14680ee5cbfSDavid du Colombier  * Recognition elements. A recognition element is a structure having a
14780ee5cbfSDavid du Colombier  * confidence level member, and a union, along with a flag indicating
14880ee5cbfSDavid du Colombier  * the union type. The union contains a pointer to the result. This
14980ee5cbfSDavid du Colombier  * is the basic recognition return value, corresponding to one
15080ee5cbfSDavid du Colombier  * recognized word, letter, or group of letters.
15180ee5cbfSDavid du Colombier */
15280ee5cbfSDavid du Colombier 
15380ee5cbfSDavid du Colombier struct rec_element {
15480ee5cbfSDavid du Colombier 	char			re_type;		/*Union type flag.*/
15580ee5cbfSDavid du Colombier 	union {
15680ee5cbfSDavid du Colombier 		gesture	*			gval;	/*Gesture.*/
15780ee5cbfSDavid du Colombier 		char*				aval;	/*ASCII and variable width.*/
15880ee5cbfSDavid du Colombier 		wchar_t*			wval;	/*Unicode.*/
15980ee5cbfSDavid du Colombier 		rec_correlation*	rcval;	/*rec_correlation*/
16080ee5cbfSDavid du Colombier 	} re_result;
16180ee5cbfSDavid du Colombier 	rec_confidence	re_conf;        /*Confidence (0-100).*/
16280ee5cbfSDavid du Colombier };
16380ee5cbfSDavid du Colombier 
16480ee5cbfSDavid du Colombier /*
16580ee5cbfSDavid du Colombier  * Recognition alternative. The recognition alternative gives
16680ee5cbfSDavid du Colombier  * a translated element for a particular segmentation, and
16780ee5cbfSDavid du Colombier  * a pointer to an array of alternatives for the next position
16880ee5cbfSDavid du Colombier  * in the segmentation thread.
16980ee5cbfSDavid du Colombier */
17080ee5cbfSDavid du Colombier 
17180ee5cbfSDavid du Colombier struct rec_alternative {
17280ee5cbfSDavid du Colombier 	rec_element			ra_elem; 	/*the translated element*/
17380ee5cbfSDavid du Colombier 	uint				ra_nalter;	/*number of next alternatives*/
17480ee5cbfSDavid du Colombier 	rec_alternative*	ra_next;	/*the array of next alternatives*/
17580ee5cbfSDavid du Colombier };
17680ee5cbfSDavid du Colombier 
17780ee5cbfSDavid du Colombier /**************************  GESTURES  **************************/
17880ee5cbfSDavid du Colombier 
17980ee5cbfSDavid du Colombier /*
18080ee5cbfSDavid du Colombier  * Gestures. The toolkit initializes the recognizer with a
18180ee5cbfSDavid du Colombier  * set of gestures having appropriate callbacks.
18280ee5cbfSDavid du Colombier  * When a gesture is recognized, it is returned as part of a
18380ee5cbfSDavid du Colombier  * recognition element. The recognizer fills in the bounding
18480ee5cbfSDavid du Colombier  * box and hotspots. The toolkit fills in any additional values,
18580ee5cbfSDavid du Colombier  * such as the current window, and calls the callback.
18680ee5cbfSDavid du Colombier */
18780ee5cbfSDavid du Colombier 
18880ee5cbfSDavid du Colombier struct gesture {
18980ee5cbfSDavid du Colombier 	char*		g_name;			/*The gesture's name.*/
19080ee5cbfSDavid du Colombier 	uint			g_nhs;			/*Number of hotspots.*/
19180ee5cbfSDavid du Colombier 	pen_point*	g_hspots;			/*The hotspots.*/
19280ee5cbfSDavid du Colombier 	pen_rect		g_bbox;			/*The bounding box.*/
19380ee5cbfSDavid du Colombier 	void	  		(*g_action)(gesture*);	/*Pointer to execution function.*/
19480ee5cbfSDavid du Colombier 	void*		g_wsinfo;			/*For toolkit to fill in.*/
19580ee5cbfSDavid du Colombier };
19680ee5cbfSDavid du Colombier 
19780ee5cbfSDavid du Colombier typedef void (*xgesture)(gesture*);
19880ee5cbfSDavid du Colombier 
19980ee5cbfSDavid du Colombier /*
20080ee5cbfSDavid du Colombier  * Recognition correlation. A recognition correlation is a recognition
20180ee5cbfSDavid du Colombier  * of the stroke input along with a correlation between the stroke
20280ee5cbfSDavid du Colombier  * input and the recognized text. The rec_correlation struct contains
20380ee5cbfSDavid du Colombier  * a pointer to an arrray of pointers to strokes, and
20480ee5cbfSDavid du Colombier  * two arrays of integers, giving the starting point and
20580ee5cbfSDavid du Colombier  * stopping point of each corresponding recogition element returned
20680ee5cbfSDavid du Colombier  * in the strokes.
20780ee5cbfSDavid du Colombier  */
20880ee5cbfSDavid du Colombier 
20980ee5cbfSDavid du Colombier struct rec_correlation {
21080ee5cbfSDavid du Colombier 	rec_element	ro_elem;			/*The recognized alternative.*/
21180ee5cbfSDavid du Colombier 	uint		ro_nstrokes;		/*Number of strokes.*/
21280ee5cbfSDavid du Colombier 	Stroke*	ro_strokes;			/*Array of strokes.*/
21380ee5cbfSDavid du Colombier 	uint*		ro_start;			/*Starting index of points.*/
21480ee5cbfSDavid du Colombier 	uint*		ro_stop;			/*Stopping index of points.*/
21580ee5cbfSDavid du Colombier };
21680ee5cbfSDavid du Colombier 
21780ee5cbfSDavid du Colombier /*
21880ee5cbfSDavid du Colombier  * ADMINISTRATION
21980ee5cbfSDavid du Colombier  */
22080ee5cbfSDavid du Colombier 
22180ee5cbfSDavid du Colombier /*
22280ee5cbfSDavid du Colombier  * recognizer_load - If directory is not NULL, then use it as a pathname
22380ee5cbfSDavid du Colombier  * to find the recognizer. Otherwise, use the default naming conventions
22480ee5cbfSDavid du Colombier  * to find the recognizer having file name name. The subset argument
22580ee5cbfSDavid du Colombier  * contains a null-terminated array of names for character subsets which
22680ee5cbfSDavid du Colombier  * the recognizer should translate.
22780ee5cbfSDavid du Colombier  */
22880ee5cbfSDavid du Colombier 
22980ee5cbfSDavid du Colombier recognizer	recognizer_load(char*, char*, char**);
23080ee5cbfSDavid du Colombier 
23180ee5cbfSDavid du Colombier /*
23280ee5cbfSDavid du Colombier  * recognizer_unload - Unload the recognizer.
23380ee5cbfSDavid du Colombier  */
23480ee5cbfSDavid du Colombier 
23580ee5cbfSDavid du Colombier int			recognizer_unload(recognizer);
23680ee5cbfSDavid du Colombier 
23780ee5cbfSDavid du Colombier /*
23880ee5cbfSDavid du Colombier  * recognizer_get_info-Get a pointer to a rec_info
23980ee5cbfSDavid du Colombier  * giving the locale and subsets supported by the recognizer, and shared
24080ee5cbfSDavid du Colombier  * library pathname.
24180ee5cbfSDavid du Colombier  */
24280ee5cbfSDavid du Colombier 
24380ee5cbfSDavid du Colombier const rec_info*	recognizer_get_info(recognizer);
24480ee5cbfSDavid du Colombier 
24580ee5cbfSDavid du Colombier /*
24680ee5cbfSDavid du Colombier  * recognizer_manager_version-Return the version number string of the
24780ee5cbfSDavid du Colombier  * recognition manager.
24880ee5cbfSDavid du Colombier  */
24980ee5cbfSDavid du Colombier 
25080ee5cbfSDavid du Colombier const char*	recognizer_manager_version(recognizer);
25180ee5cbfSDavid du Colombier 
25280ee5cbfSDavid du Colombier /*
25380ee5cbfSDavid du Colombier  * recognizer_load_state-Get any recognizer state associated with name
25480ee5cbfSDavid du Colombier  * in dir. Note that name may not be simple file name, since
25580ee5cbfSDavid du Colombier  * there may be more than one file involved. Return 0 if successful,
25680ee5cbfSDavid du Colombier  * -1 if not.
25780ee5cbfSDavid du Colombier  */
25880ee5cbfSDavid du Colombier 
25980ee5cbfSDavid du Colombier int			recognizer_load_state(recognizer, char*, char*);
26080ee5cbfSDavid du Colombier 
26180ee5cbfSDavid du Colombier /*
26280ee5cbfSDavid du Colombier  * recognizer_save_state-Save any recognizer state to name
26380ee5cbfSDavid du Colombier  * in dir. Note that name may not be a simple file name, since
26480ee5cbfSDavid du Colombier  * there may be more than one file involved. Return 0 if successful,
26580ee5cbfSDavid du Colombier  * -1 if not.
26680ee5cbfSDavid du Colombier  */
26780ee5cbfSDavid du Colombier 
26880ee5cbfSDavid du Colombier int			recognizer_save_state(recognizer, char*, char*);
26980ee5cbfSDavid du Colombier 
27080ee5cbfSDavid du Colombier /*
27180ee5cbfSDavid du Colombier  * recognizer_error-Return the last error message, or NULL if none.
27280ee5cbfSDavid du Colombier  */
27380ee5cbfSDavid du Colombier 
27480ee5cbfSDavid du Colombier char*		recognizer_error(recognizer);
27580ee5cbfSDavid du Colombier 
27680ee5cbfSDavid du Colombier /*
27780ee5cbfSDavid du Colombier  * DICTIONARIES
27880ee5cbfSDavid du Colombier  */
27980ee5cbfSDavid du Colombier 
28080ee5cbfSDavid du Colombier /* recognizer_load_dictionary-Load a dictionary from the directory
28180ee5cbfSDavid du Colombier  * dir and file name. Return the dictionary pointer if successful,
28280ee5cbfSDavid du Colombier  * otherwise NULL.
28380ee5cbfSDavid du Colombier  */
28480ee5cbfSDavid du Colombier 
28580ee5cbfSDavid du Colombier wordset		recognizer_load_dictionary(recognizer, char*, char*);
28680ee5cbfSDavid du Colombier 
28780ee5cbfSDavid du Colombier /* recoginzer_save_dictionary-Save the dictionary to the file. Return 0
28880ee5cbfSDavid du Colombier  * successful, -1 if error occurs.
28980ee5cbfSDavid du Colombier  */
29080ee5cbfSDavid du Colombier 
29180ee5cbfSDavid du Colombier int			recognizer_save_dictionary(recognizer, char*, char*, wordset);
29280ee5cbfSDavid du Colombier 
29380ee5cbfSDavid du Colombier /*
29480ee5cbfSDavid du Colombier  * recognizer_free_dictionary-Free the dictionary. Return 0 if successful,
29580ee5cbfSDavid du Colombier  * -1 if error occurs.
29680ee5cbfSDavid du Colombier  */
29780ee5cbfSDavid du Colombier 
29880ee5cbfSDavid du Colombier int			recognizer_free_dictionary(recognizer, wordset);
29980ee5cbfSDavid du Colombier 
30080ee5cbfSDavid du Colombier /*
30180ee5cbfSDavid du Colombier  * recognizer_add_to_dictionary-Add the word to the dictionary. Return 0
30280ee5cbfSDavid du Colombier  * if successful, -1 if error occurs.
30380ee5cbfSDavid du Colombier  */
30480ee5cbfSDavid du Colombier 
30580ee5cbfSDavid du Colombier int			recognizer_add_to_dictionary(recognizer, letterset*, wordset);
30680ee5cbfSDavid du Colombier 
30780ee5cbfSDavid du Colombier /*
30880ee5cbfSDavid du Colombier  * recognizer_delete_from_dictionary-Delete the word from the dictionary.
30980ee5cbfSDavid du Colombier  * Return 0 if successful, -1 if error occurs.
31080ee5cbfSDavid du Colombier  */
31180ee5cbfSDavid du Colombier 
31280ee5cbfSDavid du Colombier int			recognizer_delete_from_dictionary(recognizer, letterset*, wordset);
31380ee5cbfSDavid du Colombier 
31480ee5cbfSDavid du Colombier /*
31580ee5cbfSDavid du Colombier  * TRANSLATION
31680ee5cbfSDavid du Colombier  */
31780ee5cbfSDavid du Colombier 
31880ee5cbfSDavid du Colombier /* recognizer_set/get_context - Set/get the recognition context for
31980ee5cbfSDavid du Colombier  * subsequent buffering and translation. recognizer_set_context()
32080ee5cbfSDavid du Colombier  * returns -1 if an error occurs, otherwise 0. recognizer_get_context()
32180ee5cbfSDavid du Colombier  * returns NULL if no context has been set. The context is copied to avoid
32280ee5cbfSDavid du Colombier  * potential memory deallocation problems.
32380ee5cbfSDavid du Colombier  */
32480ee5cbfSDavid du Colombier 
32580ee5cbfSDavid du Colombier int			recognizer_set_context(recognizer, rc*);
32680ee5cbfSDavid du Colombier rc*			recognizer_get_context(recognizer);
32780ee5cbfSDavid du Colombier 
32880ee5cbfSDavid du Colombier /* recognizer_clear - Set stroke buffer to NULL and clear the context.
32980ee5cbfSDavid du Colombier  * Returns -1 if an error occurred, otherwise 0. Both the context and the
33080ee5cbfSDavid du Colombier  * stroke buffer are deallocated. If delete_points_p is true, delete the
33180ee5cbfSDavid du Colombier  * points also.
33280ee5cbfSDavid du Colombier  */
33380ee5cbfSDavid du Colombier 
33480ee5cbfSDavid du Colombier int			recognizer_clear(recognizer, bool);
33580ee5cbfSDavid du Colombier 
33680ee5cbfSDavid du Colombier /* recognizer_get/set_buffer - Get/set the stroke buffer. The stroke buffer
33780ee5cbfSDavid du Colombier  * is copied to avoid potential memory allocation problems. Returns -1 if
33880ee5cbfSDavid du Colombier  * an error occurs, otherwise 0.
33980ee5cbfSDavid du Colombier  */
34080ee5cbfSDavid du Colombier 
34180ee5cbfSDavid du Colombier int			recognizer_get_buffer(recognizer, uint*, Stroke**);
34280ee5cbfSDavid du Colombier int			recognizer_set_buffer(recognizer, uint, Stroke*);
34380ee5cbfSDavid du Colombier 
34480ee5cbfSDavid du Colombier /* recognizer_translate - Copy the strokes argument into the stroke buffer and
34580ee5cbfSDavid du Colombier  * translate the buffer. If correlate_p is true, then provide stroke
34680ee5cbfSDavid du Colombier  * correlations as well. If either nstrokes is 0 or strokes is NULL, then
34780ee5cbfSDavid du Colombier  * just translate the stroke buffer and return the translation. Return an
34880ee5cbfSDavid du Colombier  * array of alternative translation segmentations in the ret pointer and the
34980ee5cbfSDavid du Colombier  * number of alternatives in nret, or NULL and 0 if there is no translation.
35080ee5cbfSDavid du Colombier  * The direction of segmentation is as specified by the rc_direction field in
35180ee5cbfSDavid du Colombier  * the buffered recognition context. Returns -1 if an error occurred,
35280ee5cbfSDavid du Colombier  * otherwise 0.
35380ee5cbfSDavid du Colombier  */
35480ee5cbfSDavid du Colombier 
35580ee5cbfSDavid du Colombier int			recognizer_translate(recognizer, uint, Stroke*, bool,
35680ee5cbfSDavid du Colombier 				int*, rec_alternative**);
35780ee5cbfSDavid du Colombier 
35880ee5cbfSDavid du Colombier /*
35980ee5cbfSDavid du Colombier  * recognizer_get_extension_functions-Return a null terminated array
36080ee5cbfSDavid du Colombier  * of functions providing extended functionality. Their interfaces
36180ee5cbfSDavid du Colombier  * will change depending on the recognizer.
36280ee5cbfSDavid du Colombier  */
36380ee5cbfSDavid du Colombier 
36480ee5cbfSDavid du Colombier rec_fn*		recognizer_get_extension_functions(recognizer);
36580ee5cbfSDavid du Colombier 
36680ee5cbfSDavid du Colombier /*
36780ee5cbfSDavid du Colombier  * GESTURE SUPPORT
36880ee5cbfSDavid du Colombier */
36980ee5cbfSDavid du Colombier 
37080ee5cbfSDavid du Colombier /*
37180ee5cbfSDavid du Colombier  * recognizer_get_gesture_names - Return a null terminated array of
37280ee5cbfSDavid du Colombier  * character strings containing the gesture names.
37380ee5cbfSDavid du Colombier  */
37480ee5cbfSDavid du Colombier 
37580ee5cbfSDavid du Colombier char**		recognizer_get_gesture_names(recognizer);
37680ee5cbfSDavid du Colombier 
37780ee5cbfSDavid du Colombier /*
37880ee5cbfSDavid du Colombier  * recognizer_set_gesture_action-Set the action function associated with the
37980ee5cbfSDavid du Colombier  *  name.
38080ee5cbfSDavid du Colombier  */
38180ee5cbfSDavid du Colombier 
38280ee5cbfSDavid du Colombier xgesture	recognizer_set_gesture_action(recognizer, char*, xgesture, void*);
38380ee5cbfSDavid du Colombier 
38480ee5cbfSDavid du Colombier /*
38580ee5cbfSDavid du Colombier  * The following functions are for deleting data structures returned
38680ee5cbfSDavid du Colombier  *   by the API functions.
38780ee5cbfSDavid du Colombier  */
38880ee5cbfSDavid du Colombier 
38980ee5cbfSDavid du Colombier void		delete_rec_alternative_array(uint, rec_alternative*, bool);
39080ee5cbfSDavid du Colombier void		delete_rec_correlation(rec_correlation*, bool);
39180ee5cbfSDavid du Colombier 
39280ee5cbfSDavid du Colombier /*
39380ee5cbfSDavid du Colombier  * These are used by clients to create arrays for passing to API
39480ee5cbfSDavid du Colombier  *  functions.
39580ee5cbfSDavid du Colombier  */
39680ee5cbfSDavid du Colombier 
39780ee5cbfSDavid du Colombier Stroke*	make_Stroke_array(uint);
39880ee5cbfSDavid du Colombier void		delete_Stroke_array(uint, Stroke*, bool);
39980ee5cbfSDavid du Colombier 
40080ee5cbfSDavid du Colombier pen_point* 	make_pen_point_array(uint);
40180ee5cbfSDavid du Colombier void 		delete_pen_point_array(pen_point*);
40280ee5cbfSDavid du Colombier 
40380ee5cbfSDavid du Colombier Stroke*	copy_Stroke_array(uint, Stroke*);
40480ee5cbfSDavid du Colombier 
40580ee5cbfSDavid du Colombier /*Extension function interfaces and indices.*/
40680ee5cbfSDavid du Colombier 
40780ee5cbfSDavid du Colombier #define LI_ISA_LI		0	/*Is this a li recognizer?.*/
40880ee5cbfSDavid du Colombier #define LI_TRAIN		1	/*Train recognizer*/
40980ee5cbfSDavid du Colombier #define LI_CLEAR		2	/* ari's clear-state extension fn. */
41080ee5cbfSDavid du Colombier #define LI_GET_CLASSES	3	/* ari's get-classes extension fn. */
41180ee5cbfSDavid du Colombier #define LI_NUM_EX_FNS	4	/*Number of extension functions*/
41280ee5cbfSDavid du Colombier 
41380ee5cbfSDavid du Colombier typedef bool	(*li_isa_li)(recognizer r);
41480ee5cbfSDavid du Colombier typedef int		(*li_recognizer_train)(recognizer, rc*, uint,
41580ee5cbfSDavid du Colombier 					Stroke*, rec_element*, bool);
41680ee5cbfSDavid du Colombier typedef int		(*li_recognizer_clearState)(recognizer);
41780ee5cbfSDavid du Colombier typedef int		(*li_recognizer_getClasses)(recognizer, char ***, int *);
418