From 0d310d6b1da44a35e5c8be250796a6cf2fcd0e06 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Sat, 8 Jun 2019 20:27:15 +1000 Subject: [PATCH] scanner: allow a section to be specified. If --section arg is given, only report on that section. Signed-off-by: NeilBrown --- csrc/scanner.mdc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/csrc/scanner.mdc b/csrc/scanner.mdc index 80adb2a..9a040e1 100644 --- a/csrc/scanner.mdc +++ b/csrc/scanner.mdc @@ -2030,12 +2030,15 @@ the tokens one per line. { "ignore-block-comment", 0, NULL, 'C'}, { "ignore-indent", 0, NULL, 'i'}, { "file", 1, NULL, 'f'}, + { "section", 1, NULL, 's'}, { NULL, 0, NULL, 0}, }; - static const char options[] = "W:w:n:NIMSzclCif:"; + static const char options[] = "W:w:n:NIMSzclCif:s:"; struct section *table, *s, *prev; int opt; + char *section_name = NULL; + int section_found = 0; setlocale(LC_ALL,""); while ((opt = getopt_long(argc, argv, options, long_options, NULL)) @@ -2054,6 +2057,7 @@ the tokens one per line. case 'l': conf.ignored |= 1 << TK_newline; break; case 'i': conf.ignored |= 1 << TK_in; break; case 'f': filename = optarg; break; + case 's': section_name = optarg; break; default: fprintf(stderr, "scanner: unknown option '%c'.\n", opt); exit(1); @@ -2090,6 +2094,12 @@ the tokens one per line. for (s = table; s; (code_free(s->code), prev = s, s = s->next, free(prev))) { + if (section_name && + (s->section.len != strlen(section_name) || + strncmp(s->section.txt, section_name, s->section.len) != 0)) + continue; + if (section_name) + section_found = 1; printf("Tokenizing: %.*s\n", s->section.len, s->section.txt); state = token_open(s->code, &conf); @@ -2132,6 +2142,10 @@ the tokens one per line. } if (conf.words_marks != known) free(conf.words_marks); + if (section_name && !section_found) { + fprintf(stderr, "scanner: section %s not found\n", section_name); + errs = 1; + } exit(!!errs); } ###### File: scanner.mk -- 2.43.0