1 /* Copyright (c) 2006-2015 Jonas Fonseca <jonas.fonseca@gmail.com>
3 * This program is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU General Public License as
5 * published by the Free Software Foundation; either version 2 of
6 * the License, or (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
15 #include "tig/types.h"
22 string_enum_compare(const char *str1
, const char *str2
, int len
)
26 /* Diff-Header == DIFF_HEADER */
27 for (i
= 0; i
< len
; i
++) {
28 if (ascii_toupper(str1
[i
]) == ascii_toupper(str2
[i
]))
31 if (string_enum_sep(str1
[i
]) &&
32 string_enum_sep(str2
[i
]))
35 return str1
[i
] - str2
[i
];
42 enum_name_copy(char buf
[], size_t bufsize
, const char *name
)
46 for (bufpos
= 0; name
[bufpos
] && bufpos
< bufsize
- 1; bufpos
++) {
47 buf
[bufpos
] = ascii_tolower(name
[bufpos
]);
48 if (string_enum_sep(buf
[bufpos
]))
53 return bufpos
< bufsize
;
57 enum_name(const char *name
)
59 static char buf
[SIZEOF_STR
];
61 return enum_name_copy(buf
, sizeof(buf
), name
) ? buf
: name
;
65 enum_name_prefixed(char buf
[], size_t bufsize
, const char *prefix
, const char *name
)
67 char prefixed
[SIZEOF_STR
];
70 if (!string_format(prefixed
, "%s-%s", prefix
, name
))
75 return enum_name_copy(buf
, bufsize
, name
);
78 const struct enum_map
*
79 find_enum_map(const char *type
)
83 const struct enum_map
*map
;
85 #define DEFINE_ENUM_MAPPING(name, macro) { #name, name##_map },
86 ENUM_INFO(DEFINE_ENUM_MAPPING
)
90 for (i
= 0; i
< ARRAY_SIZE(mappings
); i
++)
91 if (!strcmp(type
, mappings
[i
].type
))
92 return mappings
[i
].map
;
97 map_enum_do(const struct enum_map_entry
*map
, size_t map_size
, int *value
, const char *name
)
99 size_t namelen
= strlen(name
);
102 for (i
= 0; i
< map_size
; i
++)
103 if (enum_equals(map
[i
], name
, namelen
)) {
104 *value
= map
[i
].value
;
111 #define DEFINE_ENUM_MAPS(name, macro) DEFINE_ENUM_MAP(name, macro);
112 ENUM_INFO(DEFINE_ENUM_MAPS
)
114 /* vim: set ts=8 sw=8 noexpandtab: */