- var txt
- if self isa AStringExpr then
- txt = self.n_string.text
- else if self isa AStartStringExpr then
- txt = self.n_string.text
- else if self isa AMidStringExpr then
- txt = self.n_string.text
- else if self isa AEndStringExpr then
- txt = self.n_string.text
- else abort
- self.value = txt.substring(1, txt.length-2).unescape_nit
- end
-end
-
-redef class String
- # Return a string where Nit escape sequences are transformed.
- #
- # Example:
- # var s = "\\n"
- # print s.length # -> 2
- # var u = s.unescape_nit
- # print s.length # -> 1
- # print s[0].ascii # -> 10 (the ASCII value of the "new line" character)
- fun unescape_nit: String
- do
- var res = new Buffer.with_capacity(self.length)
- var was_slash = false
- for c in self do
- if not was_slash then
- if c == '\\' then
- was_slash = true
- else
- res.add(c)
- end
- continue
- end
- was_slash = false
- if c == 'n' then
- res.add('\n')
- else if c == 'r' then
- res.add('\r')
- else if c == 't' then
- res.add('\t')
- else if c == '0' then
- res.add('\0')
- else
- res.add(c)
- end
+ var txt = self.n_string.text
+ var behead = 1
+ var betail = 1
+ if txt.chars[0] == txt.chars[1] and txt.length >= 6 then
+ behead = 3
+ betail = 3
+ if txt.chars[0] == '"' and txt.chars[3] == '\n' then behead = 4 # ignore first \n in """