diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-05-01T14·01+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-05-01T14·01+0000 |
commit | 0064599a27ec44880e4ff6fa19f453e610b5ef07 (patch) | |
tree | 50289edc19dc99d5423ce8f57b99c5b8eb5597c1 /src/libexpr/parser.cc | |
parent | 6cecad2be0f7ced82658ec2a86bcf61583487959 (diff) |
* String interpolation. Expressions like
"--with-freetype2-library=" + freetype + "/lib" can now be written as "--with-freetype2-library=${freetype}/lib" An arbitrary expression can be enclosed within ${...}, not just identifiers. * Escaping in string literals: \n, \r, \t interpreted as in C, any other character following \ is interpreted as-is. * Newlines are now allowed in string literals.
Diffstat (limited to 'src/libexpr/parser.cc')
-rw-r--r-- | src/libexpr/parser.cc | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/libexpr/parser.cc b/src/libexpr/parser.cc index 16b94fa62c8e..2ca1cab4afcb 100644 --- a/src/libexpr/parser.cc +++ b/src/libexpr/parser.cc @@ -71,9 +71,29 @@ const char * getPath(ParseData * data) return data->path.c_str(); } -int yyparse(yyscan_t scanner, ParseData * data); +Expr unescapeStr(const char * s) +{ + string t; + char c; + while (c = *s++) { + if (c == '\\') { + assert(*s); + c = *s++; + if (c == 'n') t += "\n"; + else if (c == 'r') t += "\r"; + else if (c == 't') t += "\t"; + else t += c; + } + else t += c; + } + return makeStr(toATerm(t)); } +int yyparse(yyscan_t scanner, ParseData * data); + + +} /* end of C functions */ + static void checkAttrs(ATermMap & names, ATermList bnds) { |