fzy
terminal fuzzy finder picker
git clone https://9o.is/git/fzy.git
bonus.h
(1911B)
1 #ifndef BONUS_H
2 #define BONUS_H BONUS_H
3
4 #include "../config.h"
5
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
9
10 #define ASSIGN_LOWER(v) \
11 ['a'] = (v), \
12 ['b'] = (v), \
13 ['c'] = (v), \
14 ['d'] = (v), \
15 ['e'] = (v), \
16 ['f'] = (v), \
17 ['g'] = (v), \
18 ['h'] = (v), \
19 ['i'] = (v), \
20 ['j'] = (v), \
21 ['k'] = (v), \
22 ['l'] = (v), \
23 ['m'] = (v), \
24 ['n'] = (v), \
25 ['o'] = (v), \
26 ['p'] = (v), \
27 ['q'] = (v), \
28 ['r'] = (v), \
29 ['s'] = (v), \
30 ['t'] = (v), \
31 ['u'] = (v), \
32 ['v'] = (v), \
33 ['w'] = (v), \
34 ['x'] = (v), \
35 ['y'] = (v), \
36 ['z'] = (v)
37
38 #define ASSIGN_UPPER(v) \
39 ['A'] = (v), \
40 ['B'] = (v), \
41 ['C'] = (v), \
42 ['D'] = (v), \
43 ['E'] = (v), \
44 ['F'] = (v), \
45 ['G'] = (v), \
46 ['H'] = (v), \
47 ['I'] = (v), \
48 ['J'] = (v), \
49 ['K'] = (v), \
50 ['L'] = (v), \
51 ['M'] = (v), \
52 ['N'] = (v), \
53 ['O'] = (v), \
54 ['P'] = (v), \
55 ['Q'] = (v), \
56 ['R'] = (v), \
57 ['S'] = (v), \
58 ['T'] = (v), \
59 ['U'] = (v), \
60 ['V'] = (v), \
61 ['W'] = (v), \
62 ['X'] = (v), \
63 ['Y'] = (v), \
64 ['Z'] = (v)
65
66 #define ASSIGN_DIGIT(v) \
67 ['0'] = (v), \
68 ['1'] = (v), \
69 ['2'] = (v), \
70 ['3'] = (v), \
71 ['4'] = (v), \
72 ['5'] = (v), \
73 ['6'] = (v), \
74 ['7'] = (v), \
75 ['8'] = (v), \
76 ['9'] = (v)
77
78 const score_t bonus_states[3][256] = {
79 { 0 },
80 {
81 ['/'] = SCORE_MATCH_SLASH,
82 ['-'] = SCORE_MATCH_WORD,
83 ['_'] = SCORE_MATCH_WORD,
84 [' '] = SCORE_MATCH_WORD,
85 ['.'] = SCORE_MATCH_DOT,
86 },
87 {
88 ['/'] = SCORE_MATCH_SLASH,
89 ['-'] = SCORE_MATCH_WORD,
90 ['_'] = SCORE_MATCH_WORD,
91 [' '] = SCORE_MATCH_WORD,
92 ['.'] = SCORE_MATCH_DOT,
93
94 /* ['a' ... 'z'] = SCORE_MATCH_CAPITAL, */
95 ASSIGN_LOWER(SCORE_MATCH_CAPITAL)
96 }
97 };
98
99 const size_t bonus_index[256] = {
100 /* ['A' ... 'Z'] = 2 */
101 ASSIGN_UPPER(2),
102
103 /* ['a' ... 'z'] = 1 */
104 ASSIGN_LOWER(1),
105
106 /* ['0' ... '9'] = 1 */
107 ASSIGN_DIGIT(1)
108 };
109
110 #define COMPUTE_BONUS(last_ch, ch) (bonus_states[bonus_index[(unsigned char)(ch)]][(unsigned char)(last_ch)])
111
112 #ifdef __cplusplus
113 }
114 #endif
115
116 #endif