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