summaryrefslogtreecommitdiff
path: root/src/bonus.h
blob: 89cafbeca464db2cb509214bed908b0d5c68599b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#ifndef BONUS_H
#define BONUS_H BONUS_H

#include "../config.h"

#define ASSIGN_LOWER(v) \
	['a'] = (v), \
	['b'] = (v), \
	['c'] = (v), \
	['d'] = (v), \
	['e'] = (v), \
	['f'] = (v), \
	['g'] = (v), \
	['h'] = (v), \
	['i'] = (v), \
	['j'] = (v), \
	['k'] = (v), \
	['l'] = (v), \
	['m'] = (v), \
	['n'] = (v), \
	['o'] = (v), \
	['p'] = (v), \
	['q'] = (v), \
	['r'] = (v), \
	['s'] = (v), \
	['t'] = (v), \
	['u'] = (v), \
	['v'] = (v), \
	['w'] = (v), \
	['x'] = (v), \
	['y'] = (v), \
	['z'] = (v)

#define ASSIGN_UPPER(v) \
	['A'] = (v), \
	['B'] = (v), \
	['C'] = (v), \
	['D'] = (v), \
	['E'] = (v), \
	['F'] = (v), \
	['G'] = (v), \
	['H'] = (v), \
	['I'] = (v), \
	['J'] = (v), \
	['K'] = (v), \
	['L'] = (v), \
	['M'] = (v), \
	['N'] = (v), \
	['O'] = (v), \
	['P'] = (v), \
	['Q'] = (v), \
	['R'] = (v), \
	['S'] = (v), \
	['T'] = (v), \
	['U'] = (v), \
	['V'] = (v), \
	['W'] = (v), \
	['X'] = (v), \
	['Y'] = (v), \
	['Z'] = (v)

#define ASSIGN_DIGIT(v) \
	['0'] = (v), \
	['1'] = (v), \
	['2'] = (v), \
	['3'] = (v), \
	['4'] = (v), \
	['5'] = (v), \
	['6'] = (v), \
	['7'] = (v), \
	['8'] = (v), \
	['9'] = (v)

const score_t bonus_states[3][256] = {
	{ 0 },
	{
		['/'] = SCORE_MATCH_SLASH,
		['-'] = SCORE_MATCH_WORD,
		['_'] = SCORE_MATCH_WORD,
		[' '] = SCORE_MATCH_WORD,
		['.'] = SCORE_MATCH_DOT,
	},
	{
		['/'] = SCORE_MATCH_SLASH,
		['-'] = SCORE_MATCH_WORD,
		['_'] = SCORE_MATCH_WORD,
		[' '] = SCORE_MATCH_WORD,
		['.'] = SCORE_MATCH_DOT,

		/* ['a' ... 'z'] = SCORE_MATCH_CAPITAL, */
		ASSIGN_LOWER(SCORE_MATCH_CAPITAL)
	}
};

const size_t bonus_index[256] = {
	/* ['A' ... 'Z'] = 2 */
	ASSIGN_UPPER(2),

	/* ['a' ... 'z'] = 1 */
	ASSIGN_LOWER(1),

	/* ['0' ... '9'] = 1 */
	ASSIGN_DIGIT(1)
};

#define COMPUTE_BONUS(last_ch, ch) (bonus_states[bonus_index[(unsigned char)(ch)]][(unsigned char)(last_ch)])

#endif