summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser
diff options
context:
space:
mode:
authorMarkus Roberts <Markus@reality.com>2010-08-05 22:00:54 -0700
committerMarkus Roberts <Markus@reality.com>2010-08-05 22:23:04 -0700
commita23d80aebabf981a34fcca5c8bd2aa5f44ea832d (patch)
tree0b033e3875a1517f0ddd6aa6ccea2bc9dd9063cd /lib/puppet/parser
parent8e31b528e139a2940d6932ab80375bb5eebfbe29 (diff)
downloadpuppet-a23d80aebabf981a34fcca5c8bd2aa5f44ea832d.tar.gz
puppet-a23d80aebabf981a34fcca5c8bd2aa5f44ea832d.tar.xz
puppet-a23d80aebabf981a34fcca5c8bd2aa5f44ea832d.zip
Fixes #4485 -- single quoted strings should not treat \n as new line
This is the rest of the change for #4303; James and I discussed various ways the solution to that ticket needed to be extended but, as neither of us committed code, nothing changed. This is the least implact extension, which mimics the behaviour of prior versions. It leaves open the question: should '\\x' start with a single or double backslash? If, as now, '\\x' starts with a double backslash (i.e. single quote is the only escapable characterin single quoted strings) a string ending in a backslash can not be represented in a single quoted string.
Diffstat (limited to 'lib/puppet/parser')
-rw-r--r--lib/puppet/parser/lexer.rb22
1 files changed, 11 insertions, 11 deletions
diff --git a/lib/puppet/parser/lexer.rb b/lib/puppet/parser/lexer.rb
index 24999bf4e..a25a17e3f 100644
--- a/lib/puppet/parser/lexer.rb
+++ b/lib/puppet/parser/lexer.rb
@@ -221,7 +221,7 @@ class Puppet::Parser::Lexer
TOKENS.add_token :RETURN, "\n", :skip => true, :incr_line => true, :skip_text => true
TOKENS.add_token :SQUOTE, "'" do |lexer, value|
- [TOKENS[:STRING], lexer.slurpstring(value,["'"],:ignore_invalid_esapes).first ]
+ [TOKENS[:STRING], lexer.slurpstring(value,["'"],:ignore_invalid_escapes).first ]
end
DQ_initial_token_types = {'$' => :DQPRE,'"' => :STRING}
@@ -523,17 +523,17 @@ class Puppet::Parser::Lexer
str = @scanner.scan_until(/([^\\]|^)[#{terminators}]/) or lex_error "Unclosed quote after '#{last}' in '#{rest}'"
@line += str.count("\n") # literal carriage returns add to the line count.
str.gsub!(/\\(.)/) {
- case ch=$1
- when 'n'; "\n"
- when 't'; "\t"
- when 's'; " "
- else
- if escapes.include? ch
- ch
- else
- Puppet.warning "Unrecognised escape sequence '\\#{ch}'#{file && " in file #{file}"}#{line && " at line #{line}"}" unless ignore_invalid_escapes
- "\\#{ch}"
+ ch = $1
+ if escapes.include? ch
+ case ch
+ when 'n'; "\n"
+ when 't'; "\t"
+ when 's'; " "
+ else ch
end
+ else
+ Puppet.warning "Unrecognised escape sequence '\\#{ch}'#{file && " in file #{file}"}#{line && " at line #{line}"}" unless ignore_invalid_escapes
+ "\\#{ch}"
end
}
[ str[0..-2],str[-1,1] ]