2 * hre.h: API for Handwriting Recognition Engine on Unix
4 * Created On: Wed Oct 28 11:30:43 1992
5 * Last Modified By: James Kempf
6 * Last Modified On: Fri Sep 23 13:49:26 1994
8 * Copyright (c) 1994 by Sun Microsystems Computer Company
11 * Use and copying of this software and preparation of
12 * derivative works based upon this software are permitted.
13 * Any distribution of this software or derivative works
14 * must comply with all applicable United States export control
17 * This software is made available as is, and Sun Microsystems
18 * Computer Company makes no warranty about the software, its
19 * performance, or its conformity to any specification
26 #include <sys/types.h>
28 /*#include <libintl.h>*/
31 typedef unsigned int wchar_t;
34 /* Scalar Type Definitions */
36 /*For better readibility.*/
47 /*For pointers to extra functions on recognizer.*/
49 typedef void (*rec_fn)();
52 *rec_confidence is an integer between 0-100 giving the confidence of the
53 * recognizer in a particular result.
56 typedef u_char rec_confidence;
58 /*Time value. This is the same as in X.h, so we conditionally define.*/
59 /* ari -- no it's not. *SIGH* there's an ifdef in X.h specifically */
64 typedef unsigned long Time;
66 typedef unsigned int Time;
68 /* (mips) typedef unsigned long Time; */
69 /* (osf) typedef unsigned int Time; */
73 /**************** RECOGNIZER CONFIGURATION INFORMATION *******************/
76 * Recognizer information. Gives the locale, category of the character
77 * set returned by the recognizer, and any subsets to which the
78 * recognition can be limited. The locale and category should be
79 * suitable for the setlocale(3). Those recognizers which don't do text
80 * can simply report a blank locale and category, and report the
81 * graphics types they recognize in the subset.
85 char* ri_locale; /*The locale of the character set.*/
86 char* ri_name; /*Complete pathname to the recognizer.*/
87 char** ri_subset; /*Null terminated list of subsets supported*/
90 /*These define a set of common character subset names.*/
92 #define GESTURE "GESTURE" /* gestures only */
93 #define MATHSET "MATHSET" /* %^*()_+={}<>,/. */
94 #define MONEYSET "MONEYSET" /* $, maybe cent, pound, and yen */
95 #define WHITESPACE "WHITESPACE" /* gaps are recognized as space */
96 #define KANJI_JIS1 "KANJI_JIS1" /* the JIS1 kanji only */
97 #define KANJI_JIS1_PLUS "KANJI_JIS1_PLUS" /* JIS1 plus some JIS2 */
98 #define KANJI_JIS2 "KANJI_JIS2" /* the JIS1 + JIS2 kanji */
99 #define HIRIGANA "HIRIGANA" /* the hirigana */
100 #define KATAKANA "KATAKANA" /* the katakana */
101 #define UPPERCASE "UPPERCASE" /* upper case alphabetics, no digits */
102 #define LOWERCASE "LOWERCASE" /* lower case alphabetics, no digits */
103 #define DIGITS "DIGITS" /* digits 0-9 only */
104 #define PUNCTUATION "PUNCTUATION" /* \!-;'"?()&., */
105 #define NONALPHABETIC "NONALPHABETIC" /* all nonalphabetics, no digits */
106 #define ASCII "ASCII" /* the ASCII character set */
107 #define ISO_LATIN12 "ISO_LATIN12" /* The ISO Latin 12 characters */
110 /******************** RECOGNITION INPUT STRUCTURES ***********************/
113 * WINDOW SYSTEM INTERFACE
116 /*Basic point. Note that it is identical to XTimeCoord, for easy conversion*/
123 /*Bounding box. Structurally identical to XRectangle.*/
126 short x,y; /*Upper left corner.*/
127 short width,height; /*Width and height.*/
130 /* Button flags - pen's button configuration. */
132 #define TABLET_TIP 0x1 /*tip switch*/
133 #define TABLET_BUTTON1 0x2 /*one barrel switch*/
134 #define TABLET_BUTTON2 0x4 /*two barrel switches*/
135 #define TABLET_BUTTON3 0x8 /*three barrel switches*/
137 /* Pen flags - additional state information that can be reported by the pen.*/
139 #define TABLET_PROXIMITY 0x1 /*can report position when pen not in contact*/
140 #define TABLET_RELATIVE 0x2 /*can report relative coords, like mouse*/
141 #define TABLET_ABSOLUTE 0x4 /*can report absolute co-ordinates*/
142 #define TABLET_RANGE 0x8 /*can report when pen goes out of range*/
143 #define TABLET_INVERT 0x10 /*can report when pen is inverted*/
144 #define TABLET_TOUCH 0x20 /*finger can be used as pen*/
146 /* Angle flags - reporting of information about the pen angle. */
148 #define TABLET_ANGLEX 0x1 /*can report angle with the x axis*/
149 #define TABLET_ANGLEY 0x2 /*can report angle with the y axis*/
150 #define TABLET_ROTATE 0x4 /*can report barrel rotation*/
153 * Sensor flags - configuration and reporting capabilities
154 * of the tablet's sensor panel.
157 #define TABLET_INTEGRATED 0x1 /*sensor panel is integrated with display*/
158 #define TABLET_PRESSURE 0x2 /*sensor panel can report pressure*/
159 #define TABLET_HEIGHT 0x4 /*sensor panel can report height*/
161 /* Units flags - in what units x and y coordinate data reported.*/
163 #define TABLET_DIMENSIONLESS 0x1 /*no units*/
164 #define TABLET_ENGLISH 0x2 /*thousandths of an inch*/
165 #define TABLET_METRIC 0x4 /*tenths of a millimeter*/
167 /* Origin flags - where the tablet's origin is located.*/
169 #define TABLET_ULEFT 0x1 /*upper left corner*/
170 #define TABLET_URIGHT 0x2 /*upper right corner*/
171 #define TABLET_LLEFT 0x4 /*lower left corner*/
172 #define TABLET_LRIGHT 0x8 /*lower right corner*/
173 #define TABLET_CENTER 0x10 /*center of tablet*/
176 * Tablet capabilities structure. Defines basic information about tablet
181 char tc_id[20]; /*tablet identifier, null terminated*/
182 u_short tc_button; /*button capabilities*/
183 u_short tc_pen; /*pen capabilities*/
184 u_short tc_angle; /*pen angle reporting*/
185 u_int tc_sensor : 8; /*sensor capabilities*/
186 u_int tc_units : 8; /*units for xy reporting*/
187 u_int tc_default_units : 8; /*default units*/
188 u_int tc_origin : 8; /*where origin located*/
189 short tc_x[2]; /*minimum/maximum x*/
190 short tc_y[2]; /*minimum/maximum y*/
191 short tc_pressure[2]; /*minimum/maximum pressure/height*/
192 u_int tc_sample_rate; /*rate of event reporting*/
193 u_int tc_sample_distance; /*xy coords per sample*/
202 * Pen state parameters. "Basic" state is pen up/down, barrel buttons
203 * (if any), and in/out of range. Others may be reported by particular pens.
207 u_short pt_button; /*button state - same as tc_button*/
208 u_short pt_pen; /*other state - same as tc_pen*/
209 short pt_pressure; /*Pressure. + against tablet, - above tablet.*/
210 double pt_anglex; /*angle of tilt in the x direction, in radians.*/
211 double pt_angley; /*angle of tilt in the y direction, in radians.*/
212 double pt_barrelrotate; /*angle of barrel rotation, in radians.*/
220 u_int ps_npts; /*Number of pen_point in array.*/
221 pen_point* ps_pts; /*Array of points.*/
222 u_int ps_nstate; /*Number of pen_state in array.*/
223 u_int* ps_trans; /*State transition point indicies.*/
224 pen_state* ps_state; /*Array of state.*/
228 * RECOGNITION CONTEXT
231 /* Structure for reporting writing area geometric constraints. */
235 short pr_row, pr_col;
236 double pr_rowpitch, pr_colpitch;
241 #define REC_RIGHTH 0x0 /*Right-handed writer.*/
242 #define REC_LEFTH 0x1 /*Left-handed writer.*/
245 * Writing direction. There will generally be a preferred and a
246 * secondary direction (example: English is left to right, then
247 * top to bottom). High byte has preferred, low byte secondary.
248 * The recognizer can ignore this and key off of locale.
251 #define REC_DEFAULT 0x0 /*Use default direction.*/
252 #define REC_BOTTOM_TOP 0x1 /*Bottom to top.*/
253 #define REC_LEFT_RIGHT 0x2 /*Left to right.*/
254 #define REC_RIGHT_LEFT 0x3 /*Right to left.*/
255 #define REC_TOP_BOTTOM 0x4 /*Top to bottom.*/
258 * Structure for describing a set of letters to constrain recognition.
259 * ls_type is the same as the re_type field for rec_element below.
262 typedef struct _letterset {
271 * Recognition context. Describes the context in which the pen stroke
272 * data was obtained and in which recognition should proceed.
276 u_short rc_upref; /*User preference. */
277 bool rc_gesture; /*Look for gesture if true.*/
278 u_short rc_direction; /*Primary and secondary writing direction.*/
279 rec_confidence rc_cutoff; /*Cut off recognition below this confidence*/
280 tablet_cap* rc_tinfo; /*Tablet capabilities.*/
281 char** rc_subset; /*Confine recognition to these subsets.*/
282 pen_frame* rc_frame; /*If nonNULL, writing area geometry.*/
283 wordset rc_wordset; /*If nonNULL, dictionary.*/
284 letterset rc_letterset; /*If nonNULL, constrain to these chars.*/
285 void* rc_context; /*For recognizer-specific context.*/
288 /************************** GESTURES **************************/
291 * Gestures. The toolkit initializes the recognizer with a
292 * set of gestures having appropriate callbacks.
293 * When a gesture is recognized, it is returned as part of a
294 * recognition element. The recognizer fills in the bounding
295 * box and hotspots. The toolkit fills in any additional values,
296 * such as the current window, and calls the callback.
299 typedef struct Gesture {
300 char* g_name; /*The gesture's name.*/
301 u_int g_nhs; /*Number of hotspots.*/
302 pen_point* g_hspots; /*The hotspots.*/
303 pen_rect g_bbox; /*The bounding box.*/
304 void (*g_action)(struct Gesture*); /*Pointer to execution function.*/
305 void* g_wsinfo; /*For toolkit to fill in.*/
308 typedef void (*xgesture)(gesture*);
310 /*These provide some common gesture names.*/
312 #define COPY "COPY" /*Copy target to clipboard*/
313 #define CUT "CUT" /*Copy target and delete*/
314 #define PASTE "PASTE" /*Paste clipboard into target*/
315 #define UNDO "UNDO" /*Undo the previous gesture action*/
316 #define CLEAR "CLEAR" /*Clear clipboard*/
317 #define EXTEND "EXTEND" /*Extend selection to target location*/
318 #define RETURN "RETURN" /*Insert newline/carriage return at target*/
319 #define SPACE "SPACE" /*Insert space at target*/
320 #define TAB "TAB" /*Insert tab at target*/
321 #define KKCONVERT "KKCONVERT" /*Perform kana-kanji conversion on target*/
323 /********************* RECOGNITION RETURN VALUES *************************/
326 /*Different types in union. "Other" indicates a cast is needed.*/
328 #define REC_NONE 0x0 /*No return value*/
329 #define REC_GESTURE 0x1 /*Gesture.*/
330 #define REC_ASCII 0x2 /*Array of 8 bit ASCII*/
331 #define REC_VAR 0x4 /*Array of variable width characters. */
332 #define REC_WCHAR 0x8 /*Array of Unicode (wide) characters. */
333 #define REC_OTHER 0x10 /*Undefined type.*/
334 #define REC_CORR 0x20 /*rec_correlation struct*/
337 * Recognition elements. A recognition element is a structure having a
338 * confidence level member, and a union, along with a flag indicating
339 * the union type. The union contains a pointer to the result. This
340 * is the basic recognition return value, corresponding to one
341 * recognized word, letter, or group of letters.
344 /*Ruse to make types woik*/
346 #define rec_correlation void
349 char re_type; /*Union type flag.*/
351 gesture* gval; /*Gesture.*/
352 char* aval; /*ASCII and variable width.*/
353 wchar_t* wval; /*Unicode.*/
354 rec_correlation* rcval; /*rec_correlation*/
356 rec_confidence re_conf; /*Confidence (0-100).*/
360 * Recognition alternative. The recognition alternative gives
361 * a translated element for a particular segmentation, and
362 * a pointer to an array of alternatives for the next position
363 * in the segmentation thread.
366 struct _Rec_alternative {
367 rec_element ra_elem; /*the translated element*/
368 u_int ra_nalter; /*number of next alternatives*/
369 struct _Rec_alternative* ra_next; /*the array of next alternatives*/
372 typedef struct _Rec_alternative rec_alternative;
375 * Recognition correlation. A recognition correlation is a recognition
376 * of the stroke input along with a correlation between the stroke
377 * input and the recognized text. The rec_correlation struct contains
378 * a pointer to an arrray of pointers to strokes, and
379 two arrays of integers, giving the starting point and
380 * stopping point of each corresponding recogition element returned
384 #undef rec_correlation
387 rec_element ro_elem; /*The recognized alternative.*/
388 u_int ro_nstrokes; /*Number of strokes.*/
389 pen_stroke* ro_strokes; /*Array of strokes.*/
390 u_int* ro_start; /*Starting index of points.*/
391 u_int* ro_stop; /*Stopping index of points.*/