231 lines
6.4 KiB
C++
231 lines
6.4 KiB
C++
/* C code produced by gperf version 2.3 (GNU C++ version) */
|
|
/* Command-line: gperf -p -a -t -k 1,3,4 -c -C -N lookup_keyword -T pic.gperf */
|
|
/* Copyright (C) 1989, 1990 Free Software Foundation, Inc.
|
|
Written by James Clark (jjc@jclark.uucp)
|
|
|
|
This file is part of groff.
|
|
|
|
groff 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 1, or (at your option) any later
|
|
version.
|
|
|
|
groff is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
with groff; see the file LICENSE. If not, write to the Free Software
|
|
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|
#include "key.h"
|
|
#include "pic.h"
|
|
#include "ptable.h"
|
|
#include "object.h"
|
|
#include "pic.tab.h"
|
|
|
|
#define TOTAL_KEYWORDS 81
|
|
#define MIN_WORD_LENGTH 2
|
|
#define MAX_WORD_LENGTH 9
|
|
#define MIN_HASH_VALUE 2
|
|
#define MAX_HASH_VALUE 276
|
|
/* maximum key range = 275, duplicates = 0 */
|
|
|
|
static unsigned int
|
|
hash (register const char *str, register int len)
|
|
{
|
|
static const unsigned short asso_values[] =
|
|
{
|
|
277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
|
|
277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
|
|
277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
|
|
277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
|
|
277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
|
|
277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
|
|
277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
|
|
277, 277, 5, 277, 277, 277, 277, 277, 277, 277,
|
|
277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
|
|
277, 277, 277, 277, 277, 277, 277, 25, 20, 40,
|
|
55, 35, 105, 35, 15, 110, 277, 277, 40, 95,
|
|
25, 70, 7, 277, 30, 100, 0, 85, 20, 17,
|
|
5, 5, 277, 277, 277, 277, 277, 277,
|
|
};
|
|
register int hval = len;
|
|
|
|
switch (hval)
|
|
{
|
|
default:
|
|
case 4:
|
|
hval += asso_values[str[3]];
|
|
case 3:
|
|
hval += asso_values[str[2]];
|
|
case 2:
|
|
case 1:
|
|
hval += asso_values[str[0]];
|
|
}
|
|
return hval;
|
|
}
|
|
|
|
const struct keyword *
|
|
lookup_keyword (register const char *str, register int len)
|
|
{
|
|
|
|
static const struct keyword wordlist[] =
|
|
{
|
|
{"to", TO},
|
|
{"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"top", TOP},
|
|
{"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"ht", HEIGHT},
|
|
{"",}, {"",}, {"",}, {"",},
|
|
{"by", BY},
|
|
{"",}, {"",},
|
|
{"way", WAY},
|
|
{"bottom", BOTTOM},
|
|
{"at", AT},
|
|
{"box", BOX},
|
|
{"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"with", WITH},
|
|
{"",},
|
|
{"the", THE},
|
|
{"",}, {"",}, {"",},
|
|
{"cw", CW},
|
|
{"",},
|
|
{"between", BETWEEN},
|
|
{"exp", EXP},
|
|
{"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"",},
|
|
{"copy", COPY},
|
|
{"do", DO},
|
|
{"",}, {"",},
|
|
{"ccw", CCW},
|
|
{"dotted", DOTTED},
|
|
{"",}, {"",},
|
|
{"then", THEN},
|
|
{"",}, {"",}, {"",},
|
|
{"arc", ARC},
|
|
{"",}, {"",},
|
|
{"center", CENTER},
|
|
{"of", OF},
|
|
{"",},
|
|
{"Here", HERE},
|
|
{"wid", WIDTH},
|
|
{"",},
|
|
{"width", WIDTH},
|
|
{"log", LOG},
|
|
{"",},
|
|
{"atan2", ATAN2},
|
|
{"plot", PLOT},
|
|
{"",},
|
|
{"and", AND},
|
|
{"",},
|
|
{"right", RIGHT},
|
|
{"",},
|
|
{"up", UP},
|
|
{"rad", RADIUS},
|
|
{"",}, {"",}, {"",}, {"",},
|
|
{"end", END},
|
|
{"",}, {"",}, {"",},
|
|
{"lower", LOWER},
|
|
{"",}, {"",}, {"",},
|
|
{"down", DOWN},
|
|
{"sh", SH},
|
|
{"max", MAX},
|
|
{"line", LINE},
|
|
{"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"if", IF},
|
|
{"int", INT},
|
|
{"rand", RAND},
|
|
{"",},
|
|
{"circle", CIRCLE},
|
|
{"",}, {"",},
|
|
{"thru", THRU},
|
|
{"above", ABOVE},
|
|
{"chop", CHOP},
|
|
{"",},
|
|
{"min", MIN},
|
|
{"",}, {"",}, {"",}, {"",},
|
|
{"sin", SIN},
|
|
{"",},
|
|
{"arrow", ARROW},
|
|
{"",},
|
|
{"upper", UPPER},
|
|
{"",},
|
|
{"sqrt", SQRT},
|
|
{"below", BELOW},
|
|
{"",}, {"",},
|
|
{"for", FOR},
|
|
{"",}, {"",}, {"",}, {"",},
|
|
{"cos", COS},
|
|
{"last", LAST},
|
|
{"",}, {"",},
|
|
{"print", PRINT},
|
|
{"",},
|
|
{"left", LEFT},
|
|
{"",}, {"",}, {"",}, {"",},
|
|
{"move", MOVE},
|
|
{"thick", THICKNESS},
|
|
{"",}, {"",}, {"",},
|
|
{"thickness", THICKNESS},
|
|
{"start", START},
|
|
{"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"height", HEIGHT},
|
|
{"",}, {"",}, {"",},
|
|
{"reset", RESET},
|
|
{"",}, {"",}, {"",},
|
|
{"else", ELSE},
|
|
{"",},
|
|
{"dashed", DASHED},
|
|
{"aligned", ALIGNED},
|
|
{"",},
|
|
{"diam", DIAMETER},
|
|
{"undef", UNDEF},
|
|
{"",}, {"",},
|
|
{"diameter", DIAMETER},
|
|
{"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"fill", FILL},
|
|
{"",},
|
|
{"filled", FILL},
|
|
{"ellipse", ELLIPSE},
|
|
{"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"until", UNTIL},
|
|
{"radius", RADIUS},
|
|
{"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
|
|
|
{"rjust", RJUST},
|
|
{"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"ljust", LJUST},
|
|
{"",}, {"",}, {"",},
|
|
{"same", SAME},
|
|
{"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"",},
|
|
{"invis", INVISIBLE},
|
|
{"",},
|
|
{"sprintf", SPRINTF},
|
|
{"",},
|
|
{"invisible", INVISIBLE},
|
|
{"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"spline", SPLINE},
|
|
{"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
|
{"from", FROM},
|
|
{"",},
|
|
{"define", DEFINE},
|
|
};
|
|
|
|
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
|
|
{
|
|
register int key = hash (str, len) - MIN_HASH_VALUE;
|
|
|
|
if (key <= (MAX_HASH_VALUE - MIN_HASH_VALUE) && key >= 0)
|
|
{
|
|
register const char *s = wordlist[key].name;
|
|
|
|
if (*s == *str && !strncmp (str + 1, s + 1, len - 1))
|
|
return &wordlist[key];
|
|
}
|
|
}
|
|
return 0;
|
|
}
|