/***************************************************************************************
 *
 *  WRITEPAD(r): Handwriting Recognition Engine (HWRE) and components.
 *  Copyright (c) 2001-2016 PhatWare (r) Corp. All rights reserved.
 *
 *  Licensing and other inquires: <developer@phatware.com>
 *  Developer: Stan Miasnikov, et al. (c) PhatWare Corp. <http://www.phatware.com>
 *
 *  WRITEPAD HWRE is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
 *  AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
 *  INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
 *  FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL PHATWARE CORP.
 *  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL,
 *  INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
 *  INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE, SAVINGS
 *  OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR NOT PHATWARE CORP.
 *  HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
 *  ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
 *  POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
 *  See the GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with WritePad.  If not, see <http://www.gnu.org/licenses/>.
 *
 **************************************************************************************/

#ifndef XR_ATTR_H_INCLUDED
#define XR_ATTR_H_INCLUDED

/* ************************************************************************* */
/* *   XR features definition table **************************************** */
/* ************************************************************************* */

#define FHR_JUNK  0x00
#define FHR_UPPER 0x01
#define FHR_LOWER 0x02
#define FHR_WILD  0x04
#define FHR_LEFT  0x08
#define FHR_RIGHT 0x10


#define XRM_LOWER 0x01
#define XRM_UPPER 0x02
#define XRM_LEFT  0x04
#define XRM_RIGHT 0x08
#define XRM_WILD  0x10
#define XRM_MVBLE 0x20
#define XRM_LINK  0x40
#define XRM_ENARC 0x80
#define XRM_GAMMA 0x0100

#define XRM_UW  (XRM_UPPER | XRM_WILD)
#define XRM_LW  (XRM_LOWER | XRM_WILD)
#define XRM_ANY (XRM_LW | XRM_UW)

#define XR_MERITS {                                                  \
                               XRM_LINK, /* X_NOCODE 0x00 No code - must be NULL. */ \
                               XRM_LINK, /* X_FF       1 Large space letter break */ \
                               XRM_LINK, /* X_ZZZ      2 Normal break             */ \
                               XRM_LINK, /* X_ZZ       3 Break covered by crossing*/ \
                               XRM_LINK, /* X_Z        4 Break g with left move   */ \
                               XRM_LINK, /* X_ZN       5 Artificialy made pseudo  */ \
                                                                                     \
                              XRM_UPPER, /* X_IU_F     6 Forward maximum          */ \
                              XRM_UPPER, /* X_UU_F     7 Forward upper arc        */ \
                              XRM_UPPER, /* X_UUC_F    8 Forward upper circle arc */ \
                              XRM_UPPER, /* X_UUL_F    9 Forward upper arc with le*/ \
                  XRM_ENARC | XRM_UPPER, /* X_UUR_F   10 Forward upper arc with ri*/ \
                              XRM_UPPER, /* X_IU_BEG  11 Single max (in the beginn*/ \
                              XRM_UPPER, /* X_IU_STK  12 Stick up (up-down move in*/ \
                                                                                     \
                              XRM_UPPER, /* X_IU_B    13 Backward maximum         */ \
                              XRM_UPPER, /* X_UU_B    14 Backward upper arc       */ \
                              XRM_UPPER, /* X_UUC_B   15 Backward upper circle arc*/ \
                  XRM_ENARC | XRM_UPPER, /* X_UUL_B   16 Backward upper arc with l*/ \
                              XRM_UPPER, /* X_UUR_B   17 Backward upper arc with r*/ \
                              XRM_UPPER, /* X_IU_END  18 Single max (in the end)  */ \
                                                                                     \
                              XRM_LOWER, /* X_ID_F    19 Forward minimum          */ \
                              XRM_LOWER, /* X_UD_F    20 Forward lower arc        */ \
                              XRM_LOWER, /* X_UDC_F   21 Forward lower circle arc */ \
                              XRM_LOWER, /* X_UDL_F   22 Forward lower arc with le*/ \
                  XRM_ENARC | XRM_LOWER, /* X_UDR_F   23 Forward lower arc with ri*/ \
                              XRM_LOWER, /* X_ID_END  24 Single min (in the end)  */ \
                              XRM_LOWER, /* X_ID_STK  25 Stick down (down-up move */ \
                                                                                     \
                              XRM_LOWER, /* X_ID_B    26 Backward minimum         */ \
                              XRM_LOWER, /* X_UD_B    27 Backward upper arc       */ \
                              XRM_LOWER, /* X_UDC_B   28 Backward upper circle arc*/ \
                  XRM_ENARC | XRM_LOWER, /* X_UDL_B   29 Backward upper arc with l*/ \
                              XRM_LOWER, /* X_UDR_B   30 Backward upper arc with r*/ \
                              XRM_LOWER, /* X_ID_BEG  31 Single min (in the beginn*/ \
                                                                                     \
                  XRM_RIGHT | XRM_UPPER, /* X_DU_R    32 Double move upper with ri*/ \
                  XRM_RIGHT | XRM_UPPER, /* X_CU_R    33 Circle upper with right e*/ \
                  XRM_LEFT  | XRM_UPPER, /* X_CU_L    34 Circle upper with left en*/ \
                  XRM_LEFT  | XRM_UPPER, /* X_DU_L    35 Double move down with lef*/ \
                  XRM_RIGHT | XRM_LOWER, /* X_DD_R    36 Double move down  with ri*/ \
                  XRM_RIGHT | XRM_LOWER, /* X_CD_R    37 Circle down  with right e*/ \
                  XRM_LEFT  | XRM_LOWER, /* X_CD_L    38 Circle down  with left en*/ \
                  XRM_LEFT  | XRM_LOWER, /* X_DD_L    39 Double move down with lef*/ \
                                                                                     \
                  XRM_GAMMA | XRM_UPPER, /* X_BGU     40 Big gamma up             */ \
                  XRM_GAMMA | XRM_UPPER, /* X_SGU     41 Small gamma up           */ \
                  XRM_GAMMA | XRM_LOWER, /* SX_SGD    42 mall gamma down          */ \
                  XRM_GAMMA | XRM_LOWER, /* X_BGD     43 Big   gamma down         */ \
                                                                                     \
                  XRM_LEFT  | XRM_WILD,  /* X_GL      44 Gamma left               */ \
                              XRM_LEFT,  /* X_AL      45 Angle left               */ \
                  XRM_WILD  | XRM_LEFT,  /* X_BL      46 Braket left              */ \
                  XRM_WILD  | XRM_RIGHT, /* X_BR      47 Braket right             */ \
                              XRM_RIGHT, /* X_AR      48 Angle right              */ \
                  XRM_RIGHT | XRM_WILD,  /* X_GR      49 Gamma right              */ \
                                    0,   /* X_TS      50 Type 'S' X extrema       */ \
                                    0,   /* X_TZ      51 Type 'Z' X extrema       */ \
                                                                                     \
                              XRM_MVBLE, /* X_ST      52 Separate point           */ \
                                    0,   /* X_DF      53 Defis                    */ \
                              XRM_MVBLE, /* X_XT      54 Crossing defis           */ \
                                                                                     \
                                                                                     \
                                    0,   /* X_VS      55 Vertical Stroke          */ \
                                    0,   /* X_SS      56 Slash stroke             */ \
                                    0,   /* X_BSS     57 Back Slash Stroke        */ \
                              XRM_MVBLE, /* X_XT_ST   58 Non-crossing defis       */ \
                              XRM_MVBLE, /* X_UMLAUT  59 Umlaut                   */ \
                              XRM_UPPER, /* X_AN_UR   60 Angle-like upper-right co*/ \
                                    0,   /* X_AN_UL   61 Angle-like upper-left cor*/ \
                                    0,   /* X_CEDILLA 62 Cedilla                  */ \
                                    0                                                \
                                    }

/* ---------------- STRUCTURES ----------------------------------------------- */

typedef struct
{
	_INT stp;
	_INT enp;
	_INT blp;
	_INT stx;
	_INT sty;
	_INT enx;
	_INT eny;
} vect_type, _PTR p_vect_type;

/* ---------------- PROTO ---------------------------------------------------- */

_INT FillXrFeatures(p_xrdata_type xrdata, low_type _PTR low_data);

_INT GetCurSlope(_INT num_points, p_PS_point_type trace);

_INT FillSHR(_INT slope, p_xrdata_type xrdata, low_type _PTR low_data);
_INT FillAH(p_xrdata_type xrdata, low_type _PTR low_data);
_INT FillOrients(_INT slope, p_xrdata_type xrdata, low_type _PTR low_data);

_INT GetAngle(_INT dx, _INT dy);
_INT GetVect(_INT dir, p_vect_type vect, _TRACE trace, _INT trace_len, _INT base);
_INT GetBlp(_INT dir, p_vect_type vect, _INT xrn, p_xrdata_type xrdata);

#endif //XR_ATTR_H_INCLUDED
/************************************************************************** */
/*       End of all                                                         */
/************************************************************************** */


