/******************************************************************************
 **	Filename:    fxdefs.c
 **	Purpose:     Utility functions to be used by feature extractors.
 **	Author:      Dan Johnson
 **	History:     Sun Jan 21 15:29:02 1990, DSJ, Created.
 **
 **	(c) Copyright Hewlett-Packard Company, 1988.
 ** Licensed under the Apache License, Version 2.0 (the "License");
 ** you may not use this file except in compliance with the License.
 ** You may obtain a copy of the License at
 ** http://www.apache.org/licenses/LICENSE-2.0
 ** Unless required by applicable law or agreed to in writing, software
 ** distributed under the License is distributed on an "AS IS" BASIS,
 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 ** See the License for the specific language governing permissions and
 ** limitations under the License.
 ******************************************************************************/
#include "fxdefs.h"
#include "featdefs.h"
#include "mf.h"
#include "outfeat.h"
#include "picofeat.h"
#include "normfeat.h"

/**----------------------------------------------------------------------------
        Global Data Definitions and Declarations
----------------------------------------------------------------------------**/
/* flag to control learn mode vs. classify mode */
int ExtractMode;

// Definitions of extractors separated from feature definitions.
DefineFeatureExt (MicroFeatureExt, ExtractMicros, InitMicroFXVars)
DefineFeatureExt (PicoFeatExt, NULL, DefaultInitFXVars)
DefineFeatureExt (CharNormExt, ExtractCharNormFeatures, DefaultInitFXVars)
DefineFeatureExt (OutlineFeatExt, NULL, DefaultInitFXVars)

FEATURE_EXT_STRUCT* ExtractorDefs[NUM_FEATURE_TYPES] = {
  &MicroFeatureExt,
  &PicoFeatExt,
  &OutlineFeatExt,
  &CharNormExt
};


/**----------------------------------------------------------------------------
              Public Code
----------------------------------------------------------------------------**/
/*---------------------------------------------------------------------------*/
void SetupExtractors() {
  for (int i = 0; i < NUM_FEATURE_TYPES; ++i)
	  FeatureDefs.FeatureExtractors[i] = ExtractorDefs[i];
}

void GetLineStatsFromRow(TEXTROW *Row, LINE_STATS *LineStats) {
/*
 **	Parameters:
 **		Row		text row to get line statistics from
 **		LineStats	place to put line statistics
 **	Globals: none
 **	Operation: This routine copies the relavent fields from the
 **		Row struct to the LineStats struct.
 **	Return: none (results are returned in LineStats)
 **	Exceptions: none
 **	History: Mon Mar 11 10:38:43 1991, DSJ, Created.
 */
  LineStats->Baseline = &(Row->baseline);
  LineStats->XHeightLine = &(Row->xheight);
  LineStats->xheight = Row->lineheight;
  LineStats->AscRise = Row->ascrise;
  LineStats->DescDrop = Row->descdrop;
  LineStats->TextRow = Row;      /* kludge - only needed by fx for */
  /* fast matcher - remove later */

}                                /* GetLineStatsFromRow */
