xref: /Universal-ctags/misc/enumstr.sh (revision daefdc4a4e7a7b7be8f3cf2a2832f14faee7a08b)
1de1699abSMasatake YAMATO#!/bin/sh
2de1699abSMasatake YAMATO#
3de1699abSMasatake YAMATO# enumstr.sh - a tool generating a function mapping enumerator to its
4de1699abSMasatake YAMATO# string representation
5de1699abSMasatake YAMATO#
6de1699abSMasatake YAMATO# Copyright (C) 2019 Masatake YAMATO
7de1699abSMasatake YAMATO#
8de1699abSMasatake YAMATO# This program is free software; you can redistribute it and/or modify
9de1699abSMasatake YAMATO# it under the terms of the GNU General Public License as published by
10de1699abSMasatake YAMATO# the Free Software Foundation; either version 2 of the License, or
11de1699abSMasatake YAMATO# (at your option) any later version.
12de1699abSMasatake YAMATO#
13de1699abSMasatake YAMATO# This program is distributed in the hope that it will be useful,
14de1699abSMasatake YAMATO# but WITHOUT ANY WARRANTY; without even the implied warranty of
15de1699abSMasatake YAMATO# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16de1699abSMasatake YAMATO# GNU General Public License for more details.
17de1699abSMasatake YAMATO#
18de1699abSMasatake YAMATO# You should have received a copy of the GNU General Public License
19de1699abSMasatake YAMATO# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20de1699abSMasatake YAMATO#
21de1699abSMasatake YAMATO# Usage:
22de1699abSMasatake YAMATO#
239f826d15SMasatake YAMATO#  ./enumstr.sh <input-file> <enum-name> <funname> [PREFIX_FOR_TRIMMING] [--use-lower-bits-as-is]
24de1699abSMasatake YAMATO#
25de1699abSMasatake YAMATO# Example:
26de1699abSMasatake YAMATO#
27de1699abSMasatake YAMATO#   bash ./misc/enumstr.sh parsers/jscript.c eTokenType tokenTypeName
28de1699abSMasatake YAMATO#
29a24b2f33SMasatake YAMATOcolumn_width=20
30a24b2f33SMasatake YAMATO
31de1699abSMasatake YAMATOecho 'static const char *'"$3"'(enum '$2' e)'
32a24b2f33SMasatake YAMATOprintf '{ /* Generated by misc/enumstr.sh with cmdline:\n'
33a24b2f33SMasatake YAMATOprintf '     %s */\n' "$*"
34de1699abSMasatake YAMATOecho '	switch (e)'
35de1699abSMasatake YAMATOecho '	{'
36*daefdc4aSMasatake YAMATO./ctags --quiet --options=NONE --sort=no -o - --languages=C --kinds-C=e --map-C=.h -x --_xformat="%N enum:%s" $1 | grep $2 | while read N S; do
37de1699abSMasatake YAMATO	n=$N
38de1699abSMasatake YAMATO	if [ -n "$4" ]; then
39de1699abSMasatake YAMATO		n=${N#$4}
40de1699abSMasatake YAMATO	fi
41a24b2f33SMasatake YAMATO	printf "		case %${column_width}s: return %s;\n" "$N" "\"$n\""
42de1699abSMasatake YAMATOdone
43a24b2f33SMasatake YAMATOshift 4
44a24b2f33SMasatake YAMATOif [[ $1 == "--use-lower-bits-as-is" ]]; then
45a24b2f33SMasatake YAMATO	printf '		default: %'"$((${column_width} + 3))s;\n" "break"
46a24b2f33SMasatake YAMATOelse
47a24b2f33SMasatake YAMATO	printf '		default: %'"$((${column_width} - 3))s return %s;\n" ' ' "\"UNKNOWN\""
48a24b2f33SMasatake YAMATOfi
49de1699abSMasatake YAMATOecho '	}'
50a24b2f33SMasatake YAMATOif [[ $1 == "--use-lower-bits-as-is" ]]; then
51a24b2f33SMasatake YAMATOecho '	static char buf[3];'
52a24b2f33SMasatake YAMATOecho '	if (isprint (e))'
53a24b2f33SMasatake YAMATOecho '	{'
54a24b2f33SMasatake YAMATOecho '		buf[0] = e;'
55a24b2f33SMasatake YAMATOecho "		buf[1] = '\0';"
56a24b2f33SMasatake YAMATOecho '	}'
57a24b2f33SMasatake YAMATOecho "	else if (e == '\\n')"
58a24b2f33SMasatake YAMATOecho '	{'
59a24b2f33SMasatake YAMATOecho "		buf[0] = '\\\';"
60a24b2f33SMasatake YAMATOecho "		buf[1] = 'n';"
61a24b2f33SMasatake YAMATOecho "		buf[2] = '\0';"
62a24b2f33SMasatake YAMATOecho '	}'
63a24b2f33SMasatake YAMATOecho '	else'
64a24b2f33SMasatake YAMATOecho '	{'
65a24b2f33SMasatake YAMATOecho "		buf[0] = '\0';"
66a24b2f33SMasatake YAMATOecho '	}'
67a24b2f33SMasatake YAMATOecho '	return buf;'
68a24b2f33SMasatake YAMATOfi
69de1699abSMasatake YAMATOecho '}'
70