tesseract/training/name2char.cpp
2007-03-07 20:03:40 +00:00

167 lines
4.2 KiB
C++

/******************************************************************************
** Filename: name2char.c
** Purpose: Routines to convert between classes and class names.
** Author: Dan Johnson
** History: Fri Feb 23 08:03:09 1990, DSJ, Created.
**
** 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 Files and Type Defines
----------------------------------------------------------------------------**/
#include "name2char.h"
#include "matchdefs.h"
#include "danerror.h"
#include <string.h>
#define ILLEGALCHARNAME 6001
/**----------------------------------------------------------------------------
Global Data Definitions and Declarations
----------------------------------------------------------------------------**/
/* character ID (ascii code) to character name mapping */
static const char *NameList[]={
"!bang",
"\"doubleq",
"#hash",
"$dollar",
"%percent",
"&and",
"'quote",
"(lround",
")rround",
"*asterisk",
"+plus",
",comma",
"-minus",
".dot",
"/slash",
":colon",
";semic",
"<less",
"=equal",
">greater",
"?question",
"@at",
"[lsquare",
"\\backsl",
"]rsquare",
"^uparr",
"_unders",
"`grave",
"{lbrace",
"|bar",
"}rbrace",
"~tilde",
"AcA",
"BcB",
"CcC",
"DcD",
"EcE",
"FcF",
"GcG",
"HcH",
"IcI",
"JcJ",
"KcK",
"LcL",
"McM",
"NcN",
"OcO",
"PcP",
"QcQ",
"RcR",
"ScS",
"TcT",
"UcU",
"VcV",
"WcW",
"XcX",
"YcY",
"ZcZ",
NULL
};
/**----------------------------------------------------------------------------
Public Code
----------------------------------------------------------------------------**/
/*---------------------------------------------------------------------------*/
CLASS_ID NameToChar (
char CharName[])
/*
** Parameters:
** CharName character name to convert to a character
** Globals:
** NameList lookup table for name to char mapping
** Operation:
** This routine converts the specified character name to
** an ascii character.
** Return: Ascii character that corresponds to the character name.
** Exceptions: ILLEGALCHARNAME
** History: Sat Aug 26 12:26:54 1989, DSJ, Created.
*/
{
int i;
// look for name in table and return character if found
for ( i = 0; NameList[i] != NULL; i++ )
if ( strcmp (CharName, &NameList[i][1]) == 0)
return (NameList[i][0]);
if ( strlen (CharName) == 1 )
return (CharName[0]); //name is not in table but is a single character
else //illegal character
{
DoError (ILLEGALCHARNAME, "Illegal character name");
return 0;
}
} /* NameToChar */
/*---------------------------------------------------------------------------*/
void CharToName (
CLASS_ID Char,
char CharName[])
/*
** Parameters:
** Char character to map to a character name
** CharName string to copy character name into
** Globals:
** NameList lookup table for char to name mapping
** Operation:
** This routine converts the specified ascii character to a
** character name. This is convenient for representing
** characters which might have special meaning to operating
** system shells or other programs (e.g. "*?&><" etc.).
** Return: none
** Exceptions: none
** History: Sat Aug 26 12:51:02 1989, DSJ, Created.
*/
{
int i;
/* look for character in table and return a copy of its name if found */
for ( i = 0; NameList[i] != NULL; i++ )
if ( Char == NameList[i][0] )
{
strcpy ( CharName, &NameList[i][1] );
return;
}
/* if the character is not in the table, then use it as the name */
CharName[0] = Char;
CharName[1] = 0;
} /* CharToName */