Get back to use Sinatra settings
[coquelicot.git] / lib / haml_gettext.rb
1 # Adapted from sinitra-hat: http://github.com/nanoant/sinatra-hat/
2 #
3 # Copyright (c) 2009 Adam Strzelecki
4
5 # Permission is hereby granted, free of charge, to any person obtaining
6 # a copy of this software and associated documentation files (the
7 # "Software"), to deal in the Software without restriction, including
8 # without limitation the rights to use, copy, modify, merge, publish,
9 # distribute, sublicense, and/or sell copies of the Software, and to
10 # permit persons to whom the Software is furnished to do so, subject to
11 # the following conditions:
12
13 # The above copyright notice and this permission notice shall be
14 # included in all copies or substantial portions of the Software.
15
16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
24 class Haml::Engine
25   include GetText
26
27   # Inject _ gettext into plain text and tag plain text calls
28   def push_plain(text)
29     super(_(text))
30   end
31   def parse_tag(line)
32     tag_name, attributes, attributes_hashes, object_ref, nuke_outer_whitespace,
33       nuke_inner_whitespace, action, value, last_line = super(line)
34     value = _(value) unless action && action != '!' || action == '!' && value[0..0] == '=' || value.empty?
35     # translate inline ruby code too
36     value.gsub!(/_\('([^']+)'\)/) {|m| '\''+_($1)+'\''} unless action != '=' || value.empty?
37     attributes_hashes.each{|h| h.each{|v| v.gsub!(/_\('([^']+)'\)/){|m| '\''+_($1)+'\''} if v.is_a? String} unless h.nil? || h.empty?} unless attributes_hashes.nil? || attributes_hashes.empty?
38     [tag_name, attributes, attributes_hashes, object_ref, nuke_outer_whitespace,
39         nuke_inner_whitespace, action, value, last_line]
40   end
41   def push_flat_markdown(line)
42     text = line.full.dup
43     text = "" unless text.gsub!(/^#{@flat_spaces}/, '')
44     text = _(text) if text != ''
45     @filter_buffer << "#{text}\n"
46   end
47   def push_flat_javascript(line)
48     text = line.full.dup
49     text.gsub!(/_\('(([^']|\\')+)'\)/) {|m| '\''+_($1)+'\''}
50     @filter_buffer << "#{text}\n"
51   end
52   def push_flat(line)
53     return super(line) if @gettext_filters.nil? || !@gettext_filters.last
54     return send("push_flat_#{@gettext_filters.last}".to_sym, line)
55   end
56   def start_filtered(name)
57     @gettext_filters ||= []
58     @gettext_filters.push(name) if ['markdown', 'javascript'].include? name
59     super
60   end
61   def close_filtered(filter)
62     @gettext_filters.pop
63     super
64   end
65 end