chiark / gitweb /
@q expansion
authorRichard Kettlewell <rjk@greenend.org.uk>
Sun, 11 May 2008 13:53:29 +0000 (14:53 +0100)
committerRichard Kettlewell <rjk@greenend.org.uk>
Sun, 11 May 2008 13:53:29 +0000 (14:53 +0100)
lib/macros-builtin.c
lib/t-macros.c

index c96506f..6675dec 100644 (file)
@@ -418,6 +418,17 @@ static int exp_dirname(int attribute((unused)) nargs,
   return sink_writes(output, d_dirname(args[0])) < 0 ? -1 : 0;
 }
 
+/* @q{STRING}
+ *
+ * Expands to STRING.
+ */
+static int exp_q(int attribute((unused)) nargs,
+                 char **args,
+                 struct sink attribute((unused)) *output,
+                 void attribute((unused)) *u) {
+  return sink_writes(output, args[0]) < 0 ? -1 : 0;
+}
+
 /** @brief Register built-in expansions */
 void mx_register_builtin(void) {
   mx_register("basename", 1, 1, exp_basename);
@@ -429,6 +440,7 @@ void mx_register_builtin(void) {
   mx_register("not", 1, 1, exp_not);
   mx_register("shell", 1, 1, exp_shell);
   mx_register("urlquote", 1, 1, exp_urlquote);
+  mx_register("q", 1, 1, exp_q);
   mx_register_magic("#", 0, INT_MAX, exp_comment);
   mx_register_magic("and", 0, INT_MAX, exp_and);
   mx_register_magic("define", 3, 3, exp_define);
index 2bf747f..a1dc0e0 100644 (file)
@@ -219,6 +219,9 @@ static void test_macros(void) {
               "foo & something", 0);
   check_macro("basename1", "@basename{xyzzy/plugh}", "plugh", 0);
   check_macro("basename2", "@basename{xyzzy/a<b}", "a<b", 0);
+
+  check_macro("q1", "@q{wibble}", "wibble", 0);
+  check_macro("q2", "@q{wibble}wobble", "wibblewobble", 0);
   
   /* Macro definitions ------------------------------------------------------ */