From 9f6cba5c0370aee2f9803abbc35ab7e67f57ee84 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Tue, 1 Nov 2016 06:58:18 +0100 Subject: globbing supports character classes now and ^EN string building construct to escape glob patterns * globbing is fnmatch(3) compatible, now on every supported platform. * which means that escaping of glob patterns is possible now. ^ENq has been introduced to ease this task. * This finally allows you to pass unmodified filenames to EB. Previously it was impossible to open file names containing glob wildcards. * this was achieved by moving from GPattern to GRegex as the underlying implementation. * The glob pattern is converted to a regular expression before being compiled to a GRegex. This turned out to be trickier than anticipated (~140 lines of code) and has a runtime penalty of course (complexity is O(2*n) over the pattern length). It is IMHO still better than the alternatives, like importing external code from libiberty, which is potentially non-cross-platform. * Using GRegex also opens the potential of supporting brace "expansions" later in the form of glob pattern constructs (they won't actually expand but match alternatives). * is_glob_pattern() has been simplified and moved to Globber::is_pattern(). It makes sense to reuse the Globber class namespace instead of using plain functions for functions working on glob patterns. * The documentation has a new subsection on glob patterns now. * Testsuite extended with glob pattern test cases --- tests/testsuite.at | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/testsuite.at b/tests/testsuite.at index 81a770c..2e613ee 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -1,12 +1,30 @@ AT_INIT AT_COLOR_TESTS +# NOTE: There is currently no way to influence the return +# code of SciTECO, except to provoke an error. +# Since errors cannot be yielded explicitly, we use the +# idiom "(0/0)" to enforce a "Division by zero" error +# whenever we want to fail. + AT_SETUP([Closing loops at the correct macro level]) AT_CHECK([$SCITECO -e '@^Ua{>} is necessary here since it is the current M4 +# quotation character and must be balanced: +AT_CHECK([$SCITECO -e "91U< 93U> :@EN/*.^EU<^EU>ch^EU>/foo.h/\"F(0/0)'"], 0, ignore, ignore) +AT_CLEANUP + +AT_SETUP([Glob patterns with unclosed trailing brackets]) +AT_CHECK([$SCITECO -e "91U< :@EN/*.^EU