#ifndef _Xct_h #define _Xct_h /* * $XConsortium: Xct.h,v 1.6 91/07/22 23:46:25 converse Exp $ * Copyright 1989 by the Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. */ #include <X11/Xfuncproto.h> #define XctVersion 1 typedef unsigned char *XctString; typedef enum { XctUnspecified, XctLeftToRight, XctRightToLeft } XctHDirection; typedef unsigned long XctFlags; /* These are bits in XctFlags. */ #define XctSingleSetSegments 0x0001 /* This means that returned segments should contain characters from only * one set (C0, C1, GL, GR). When this is requested, XctSegment is never * returned, instead XctC0Segment, XctC1Segment, XctGlSegment, and * XctGRSegment are returned. C0 and C1 segments are always returned as * singleton characters. */ #define XctProvideExtensions 0x0002 /* This means that if the Compound Text string is from a higher version * than this code is implemented to, then syntactically correct but unknown * control sequences should be returned as XctExtension items. If this * flag is not set, and the Compound Text string version indicates that * extensions cannot be ignored, then each unknown control sequence will be * reported as an XctError. */ #define XctAcceptC0Extensions 0x0004 /* This means that if the Compound Text string is from a higher version * than this code is implemented to, then unknown C0 characters should be * treated as if they were legal, and returned as C0 characters (regardless * of how XctProvideExtensions is set). If this flag is not set, then all * unknown C0 characters are treated according to XctProvideExtensions. */ #define XctAcceptC1Extensions 0x0008 /* This means that if the Compound Text string is from a higher version * than this code is implemented to, then unknown C0 characters should be * treated as if they were legal, and returned as C0 characters (regardless * of how XctProvideExtensions is set). If this flag is not set, then all * unknown C0 characters are treated according to XctProvideExtensions. */ #define XctHideDirection 0x0010 /* This means that horizontal direction changes should be reported as * XctHorizontal items. If this flag is not set, then direction changes are * not returned as items, but the current direction is still maintained and * reported for other items. */ #define XctFreeString 0x0020 /* This means that XctFree should free the Compound Text string (that was * passed to XctCreate. If this flag is not set, the string is not freed. */ #define XctShiftMultiGRToGL 0x0040 /* Translate GR segments on-the-fly into GL segments for the GR sets: * GB2312.1980-1, JISX0208.1983-1, and KSC5601.1987-1. */ /* This is the return type for XctNextItem. */ typedef enum { XctSegment, /* used when XctSingleSetSegments is not requested */ XctC0Segment, /* used when XctSingleSetSegments is requested */ XctGLSegment, /* used when XctSingleSetSegments is requested */ XctC1Segment, /* used when XctSingleSetSegments is requested */ XctGRSegment, /* used when XctSingleSetSegments is requested */ XctExtendedSegment, /* an extended segment */ XctExtension, /* used when XctProvideExtensions is requested */ XctHorizontal, /* horizontal direction or depth change */ XctEndOfText, /* end of text string */ XctError /* syntactic or semantic error */ } XctResult; typedef struct _XctRec { XctString total_string; /* as given to XctCreate */ int total_length; /* as given to XctCreate */ XctFlags flags; /* as given to XctCreate */ int version; /* indicates the version of the CT spec * the string was produced from */ int can_ignore_exts;/* non-zero if ignoring extensions is * acceptable, else zero */ XctString item; /* item returned from XctNextItem */ int item_length; /* length of item in bytes */ int char_size; /* number of bytes per character in * item, with zero meaning variable */ char *encoding; /* Encoding name for item */ XctHDirection horizontal; /* direction of item */ int horz_depth; /* current direction nesting depth */ char *GL; /* "{I} F" string for current GL */ char *GL_encoding; /* Encoding name for current GL */ int GL_set_size; /* 94 or 96 */ int GL_char_size; /* number of bytes per GL character */ char *GR; /* "{I} F" string for current GR */ char *GR_encoding; /* Encoding name for current GR */ int GR_set_size; /* 94 or 96 */ int GR_char_size; /* number of bytes per GR character */ char *GLGR_encoding; /* Encoding name for current GL+GR, * if known */ struct _XctPriv *priv; /* private to parser, don't peek */ } *XctData; /* these are the external routines */ _XFUNCPROTOBEGIN extern XctData XctCreate( #if NeedFunctionPrototypes _Xconst unsigned char * /* string */, int /* length */, XctFlags /* flags */ #endif ); extern XctResult XctNextItem( #if NeedFunctionPrototypes XctData /* data */ #endif ); extern void XctFree( #if NeedFunctionPrototypes XctData /* data */ #endif ); extern void XctReset( #if NeedFunctionPrototypes XctData /* data */ #endif ); _XFUNCPROTOEND #endif /* _Xct_h */