Index: lib/liquid/translator.rb =================================================================== --- lib/liquid/translator.rb (revision 0) +++ lib/liquid/translator.rb (revision 0) @@ -0,0 +1,19 @@ +module Liquid + + class Translator + attr_accessor :variable + + def initialize(variable) + @variable = variable + end + + def render(context) + result = @variable.render(context) + _(result) rescue result + end + + def method_missing(name, *args, &block) + @variable.__send__(name, *args, &block) + end + end +end Index: lib/liquid/block.rb =================================================================== --- lib/liquid/block.rb (revision 147) +++ lib/liquid/block.rb (working copy) @@ -30,6 +30,9 @@ else raise SyntaxError, "Tag '#{token}' was not properly terminated with regexp: #{TagEnd.inspect} " end + when /^#{TranslatedStart}/ + raise SyntaxError.new("Variable '#{token}' was not properly terminated with regexp: #{TranslatedEnd.inspect} ") unless token[TranslatedEnd] =~ TranslatedEnd + @nodelist << Translator.new(create_variable("{{" + token[2..-3] + "}}")) when /^#{VariableStart}/ @nodelist << create_variable(token) when '' Index: lib/liquid.rb =================================================================== --- lib/liquid.rb (revision 147) +++ lib/liquid.rb (working copy) @@ -32,9 +32,11 @@ VariableSegment = /[\w\-]\??/ VariableStart = /\{\{/ VariableEnd = /\}\}/ + TranslatedStart = /\{\|/ + TranslatedEnd = /\|\}/ QuotedFragment = /"[^"]+"|'[^']+'|[^\s,|]+/ TagAttributes = /(\w+)\s*\:\s*(#{QuotedFragment})/ - TemplateParser = /(#{TagStart}.*?#{TagEnd}|#{VariableStart}.*?#{VariableEnd})/ + TemplateParser = /(#{TagStart}.*?#{TagEnd}|#{VariableStart}.*?#{VariableEnd}|#{TranslatedStart}.*?#{TranslatedEnd})/ VariableParser = /(?=\[)#{VariableSegment}+(?=\])|#{VariableSegment}+/ end