diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index d1654fe024..4da6a078ff 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -1198,9 +1198,33 @@ int CDECL main(int argc, char *argv[]) } if (strcmp(argv[1], "-export-commands") == 0) { - printf("args\tcommand\treplacement\n"); + printf("args\tflags\tcommand\treplacement\n"); for (const CmdStruct *cs = _cmd_structs; cs < endof(_cmd_structs); cs++) { - printf("%i\t\"%s\"\t\"%s\"\n", cs->consumes, cs->cmd, strstr(cs->cmd, "STRING") ? "STRING" : cs->cmd); + char flags; + switch (cs->value) { + case 0x200E: case 0x200F: // Implicit BIDI controls + case 0x202A: case 0x202B: case 0x202C: case 0x202D: case 0x202E: // Explicit BIDI controls + case 0xA0: // Non breaking space + case '\n': // Newlines may be added too + case '{': // This special + /* This command may be in the translation when it is not in base */ + flags = 'i'; + break; + + default: + if (cs->proc == EmitSetX) { + flags = '1'; // Command needs one parameter + } else if (cs->proc == EmitSetXY) { + flags = '2'; // Command needs two parameters + } else if (cs->proc == EmitGender) { + flags = 'g'; // Command needs number of parameters defined by plural value + } else if (cs->proc == EmitPlural) { + flags = 'p'; // Command needs number of parameters defined by number of cases + } else { + flags = '0'; // Command needs no parameters + } + } + printf("%i\t%c\t\"%s\"\t\"%s\"\n", cs->consumes, flags, cs->cmd, strstr(cs->cmd, "STRING") ? "STRING" : cs->cmd); } return 0; }