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