From 143a1a39c174f703170aa2540d27a8d397dae70c Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Mon, 10 Nov 2014 16:24:43 -0500 Subject: [PATCH] lib/string: add `Text::escape_to_mk` to escape to Makefiles Signed-off-by: Jean Privat --- lib/standard/string.nit | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lib/standard/string.nit b/lib/standard/string.nit index 28ad7b5..0ffb303 100644 --- a/lib/standard/string.nit +++ b/lib/standard/string.nit @@ -515,6 +515,29 @@ abstract class Text return b.to_s end + # Escape to include in a Makefile + # + # Unfortunately, some characters are not escapable in Makefile. + # These characters are `;`, `|`, `\`, and the non-printable ones. + # They will be rendered as `"?{hex}"`. + fun escape_to_mk: String do + var b = new FlatBuffer + for i in [0..length[ do + var c = chars[i] + if c == '$' then + b.append("$$") + else if c == ':' or c == ' ' or c == '#' then + b.add('\\') + b.add(c) + else if c.ascii < 32 or c == ';' or c == '|' or c == '\\' or c == '=' then + b.append("?{c.ascii.to_base(16, false)}") + else + b.add(c) + end + end + return b.to_s + end + # Return a string where Nit escape sequences are transformed. # # var s = "\\n" -- 1.7.9.5