use haml-magic-translations instead of ad-hoc and outdated solution
authorLunar <lunar@anargeek.net>
Fri, 24 Feb 2012 15:37:31 +0000 (16:37 +0100)
committerLunar <lunar@anargeek.net>
Fri, 24 Feb 2012 18:43:41 +0000 (19:43 +0100)
Gemfile
Gemfile.lock
Rakefile
lib/coquelicot/app.rb
lib/haml_gettext.rb [deleted file]
lib/haml_parser.rb [deleted file]

diff --git a/Gemfile b/Gemfile
index 031fd00..55a23b0 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -2,7 +2,10 @@ source "http://rubygems.org"
 gem "sinatra", "~>1.3"
 gem "sinatra-contrib", "~>1.3"
 gem "rack", "~>1.1"
-gem "haml", "~>3.0.15"
+gem "haml", "~>3.1"
+gem "haml-magic-translations",
+  :git    => 'https://dl.poivron.org/new/haml-magic-translations.git',
+  :branch => 'coquelicot'
 gem "lockfile", "~>1.4.3"
 gem "gettext", "~>2.1.0"
 gem "json"
index 2f66fb0..75f4631 100644 (file)
@@ -1,3 +1,11 @@
+GIT
+  remote: https://dl.poivron.org/new/haml-magic-translations.git
+  revision: 39f58121b624b63afdce91c10b9b26f4f44cfeee
+  branch: coquelicot
+  specs:
+    haml-magic-translations (0.3.coquelicot1)
+      haml (>= 3.1.0)
+
 GEM
   remote: http://rubygems.org/
   specs:
@@ -7,7 +15,7 @@ GEM
     eventmachine (0.12.10)
     gettext (2.1.0)
       locale (>= 2.0.5)
-    haml (3.0.25)
+    haml (3.1.4)
     hpricot (0.8.6)
     json (1.6.5)
     locale (2.0.5)
@@ -48,7 +56,8 @@ PLATFORMS
 
 DEPENDENCIES
   gettext (~> 2.1.0)
-  haml (~> 3.0.15)
+  haml (~> 3.1)
+  haml-magic-translations!
   hpricot (~> 0.8.2)
   json
   lockfile (~> 1.4.3)
index 0ec1c1b..ddb7435 100644 (file)
--- a/Rakefile
+++ b/Rakefile
@@ -1,13 +1,15 @@
+require 'rubygems'
+require 'bundler'
+Bundler.setup
+
+require 'haml/magic_translations/tasks'
+
 $:.unshift File.join(File.dirname(__FILE__), 'lib')
 
-desc "Update pot/po files."
-task :updatepo do
-  require 'gettext/tools'
-  require 'haml_parser'
-  GetText.update_pofiles(
-    "coquelicot",
-    Dir.glob("views/**/*.{rb,haml}") << "lib/coquelicot/app.rb",
-    "coquelicot 1.0.0")
+Haml::MagicTranslations::Tasks::UpdatePoFiles.new(:updatepo) do |t|
+ t.text_domain = 'coquelicot'
+ t.files = Dir.glob("views/**/*.{rb,haml}") << "lib/coquelicot/app.rb"
+ t.app_version = 'coquelicot 1.0.0'
 end
 
 desc "Create mo-files"
index 8a9312d..0fc250d 100644 (file)
@@ -2,10 +2,10 @@ require 'lockfile'
 require 'sinatra/base'
 require 'sinatra/config_file'
 require 'haml'
+require 'haml/magic_translations'
 require 'sass'
 require 'digest/sha1'
 require 'gettext'
-require 'haml_gettext'
 
 module Coquelicot
   class << self
@@ -37,6 +37,7 @@ module Coquelicot
     config_file File.expand_path('../../../conf/settings.yml', __FILE__)
 
     GetText::bindtextdomain('coquelicot')
+    Haml::MagicTranslations.enable(:gettext)
     before do
       GetText::set_current_locale(params[:lang] || request.env['HTTP_ACCEPT_LANGUAGE'] || 'en')
     end
diff --git a/lib/haml_gettext.rb b/lib/haml_gettext.rb
deleted file mode 100644 (file)
index 373127a..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-# Adapted from sinitra-hat: http://github.com/nanoant/sinatra-hat/
-#
-# Copyright (c) 2009 Adam Strzelecki
-# 
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-# 
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-require 'json'
-
-class Haml::Engine
-  include GetText
-
-  # Inject _ gettext into plain text and tag plain text calls
-  def push_plain(text)
-    super(_(text))
-  end
-  def parse_tag(line)
-    tag_name, attributes, attributes_hashes, object_ref, nuke_outer_whitespace,
-      nuke_inner_whitespace, action, value, last_line = super(line)
-    value = _(value) unless action && action != '!' || action == '!' && value[0..0] == '=' || value.empty?
-    # translate inline ruby code too
-    value.gsub!(/_\('([^']+)'\)/) {|m| '\''+_($1)+'\''} unless action != '=' || value.empty?
-    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?
-    [tag_name, attributes, attributes_hashes, object_ref, nuke_outer_whitespace,
-        nuke_inner_whitespace, action, value, last_line]
-  end
-  def push_flat_markdown(line)
-    text = line.full.dup
-    text = "" unless text.gsub!(/^#{@flat_spaces}/, '')
-    text = _(text) if text != ''
-    @filter_buffer << "#{text}\n"
-  end
-  def push_flat_javascript(line)
-    text = line.full.dup
-    text.gsub!(/_\('(([^']|\\')+)'\)/) {|m| _($1).to_json }
-    @filter_buffer << "#{text}\n"
-  end
-  def push_flat(line)
-    return super(line) if @gettext_filters.nil? || !@gettext_filters.last
-    return send("push_flat_#{@gettext_filters.last}".to_sym, line)
-  end
-  def start_filtered(name)
-    @gettext_filters ||= []
-    @gettext_filters.push(name) if ['markdown', 'javascript'].include? name
-    super
-  end
-  def close_filtered(filter)
-    @gettext_filters.pop
-    super
-  end
-end
diff --git a/lib/haml_parser.rb b/lib/haml_parser.rb
deleted file mode 100644 (file)
index 2dfdd4d..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-# Adapted from sinitra-hat: http://github.com/nanoant/sinatra-hat/
-#
-# Copyright (c) 2009 Adam Strzelecki
-# 
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-# 
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-require 'gettext/tools/parser/ruby'
-require 'haml'
-
-class String
-  def escape_single_quotes
-    self.gsub(/'/, "\\\\'")
-  end
-end
-
-class Haml::Engine
-  # Overriden function that parses Haml tags
-  # Injects gettext call for plain text action.
-  def parse_tag(line)
-    tag_name, attributes, attributes_hashes, object_ref, nuke_outer_whitespace,
-      nuke_inner_whitespace, action, value, last_line = super(line)
-    @precompiled << "_('#{value.escape_single_quotes}')\n" unless action && action != '!' || action == '!' && value[0..0] == '=' || value.empty?
-    [tag_name, attributes, attributes_hashes, object_ref, nuke_outer_whitespace,
-        nuke_inner_whitespace, action, value, last_line]
-  end
-  # Overriden function that producted Haml plain text
-  # Injects gettext call for plain text action.
-  def push_plain(text)
-    @precompiled << "_('#{text.escape_single_quotes}')\n"
-  end
-  def push_flat_markdown(line)
-    text = line.unstripped
-    return if text == ''
-    @precompiled << "_('#{text.escape_single_quotes}')\n"
-  end
-  def push_flat_javascript(line)
-    text = line.unstripped
-    return if text == ''
-    text.gsub(/_\('(([^']|\\')+)'\)/) do |m|
-      @precompiled << "_('#{$1}')"
-    end
-  end
-  def push_flat(line)
-    return super(line) if @gettext_filters.nil? || !@gettext_filters.last
-    return send("push_flat_#{@gettext_filters.last}".to_sym, line)
-  end
-  def start_filtered(name)
-    @gettext_filters ||= []
-    @gettext_filters.push(name) if ['markdown', 'javascript'].include? name
-    super
-  end
-  def close_filtered(filter)
-    @gettext_filters.pop
-    super
-  end
-end
-
-# Haml gettext parser
-module HamlParser
-  module_function
-  def target?(file)
-    File.extname(file) == ".haml"
-  end
-  def parse(file, ary = [])
-    haml = Haml::Engine.new(IO.readlines(file).join)
-    code = haml.precompiled.split(/$/)
-    GetText::RubyParser.parse_lines(file, code, ary)
-  end
-end
-GetText::RGetText.add_parser(HamlParser)