From 1c8ef914df7f201992fff6295cbe488e435cee4b Mon Sep 17 00:00:00 2001 From: Cameron Dutro Date: Mon, 5 Dec 2011 12:47:28 -0800 Subject: [PATCH] Adding a bunch of new languages - also, spanish and french calendars changed -- need to investigate why {{date}} has turned into {1} --- lib/ext/date.rb | 4 ++++ lib/ext/datetime.rb | 4 ++++ lib/tokenizers/base.rb | 28 +++++++++++++++++++--------- lib/tokenizers/date_tokenizer.rb | 4 ++-- lib/tokenizers/datetime_tokenizer.rb | 7 +++---- lib/tokenizers/time_tokenizer.rb | 2 +- lib/twitter_cldr.rb | 3 ++- resources/es/calendars.yml | 8 ++++---- resources/fr/calendars.yml | 8 ++++---- 9 files changed, 43 insertions(+), 25 deletions(-) diff --git a/lib/ext/date.rb b/lib/ext/date.rb index f23fa7116..610b505a2 100644 --- a/lib/ext/date.rb +++ b/lib/ext/date.rb @@ -20,5 +20,9 @@ def method_missing(method, *args, &block) raise "Method not supported" end end + + def to_s + self.to_default_s + end end end \ No newline at end of file diff --git a/lib/ext/datetime.rb b/lib/ext/datetime.rb index 51f2a4f56..a00f8fd6d 100644 --- a/lib/ext/datetime.rb +++ b/lib/ext/datetime.rb @@ -20,5 +20,9 @@ def method_missing(method, *args, &block) raise "Method not supported" end end + + def to_s + self.to_default_s + end end end \ No newline at end of file diff --git a/lib/tokenizers/base.rb b/lib/tokenizers/base.rb index 01d78196d..8e29e83b1 100644 --- a/lib/tokenizers/base.rb +++ b/lib/tokenizers/base.rb @@ -6,16 +6,15 @@ class Base def initialize(options = {}) @locale = options[:locale] || TwitterCldr::DEFAULT_LOCALE - @type = options[:type] || :default self.init_resources self.init_placeholders end protected - def tokens_for(key) + def tokens_for(key, type) final = [] - tokens = self.expand_pattern(self.pattern_for(self.traverse(key))) + tokens = self.expand_pattern(self.pattern_for(self.traverse(key)), type) tokens.each do |token| if token.is_a?(Token) @@ -39,10 +38,10 @@ def traverse(needle, haystack = @resource) final end - def expand_pattern(format_str) + def expand_pattern(format_str, type) if format_str.is_a?(Symbol) # symbols mean another path was given - self.expand_pattern(self.pattern_for(self.traverse(format_str))) + self.expand_pattern(self.pattern_for(self.traverse(format_str)), type) else parts = tokenize_pattern(format_str) final = [] @@ -50,8 +49,8 @@ def expand_pattern(format_str) parts.each do |part| case part[:type] when :placeholder then - placeholder = @placeholders[part[:value].to_sym] - final += placeholder ? placeholder.tokens : [] + placeholder = self.choose_placeholder(part[:value], @placeholders) + final += placeholder ? placeholder.tokens(:type => type) : [] else final << part end @@ -63,11 +62,11 @@ def expand_pattern(format_str) def tokenize_pattern(pattern_str) results = [] - pattern_str.split(/(\{\{\w*\}\}|\'\w+\')/).each do |piece| + pattern_str.split(/(\{\{?\w*\}?\}|\'\w+\')/).each do |piece| unless piece.empty? case piece[0].chr when "{" - results << { :value => piece[2..-3], :type => :placeholder } + results << { :value => piece, :type => :placeholder } else results << { :value => piece, :type => :plaintext } end @@ -75,6 +74,17 @@ def tokenize_pattern(pattern_str) end results end + + def choose_placeholder(token, placeholders) + if token[0..1] == "{{" + token_value = token[2..-3] + found = placeholders.find { |placeholder| placeholder[:name].to_s == token_value } + else + found = placeholders[token[1..-2].to_i] + end + + found ? found[:object] : nil + end end end end \ No newline at end of file diff --git a/lib/tokenizers/date_tokenizer.rb b/lib/tokenizers/date_tokenizer.rb index 538826893..a097c5ef9 100644 --- a/lib/tokenizers/date_tokenizer.rb +++ b/lib/tokenizers/date_tokenizer.rb @@ -2,7 +2,7 @@ module TwitterCldr module Tokenizers class DateTokenizer < TwitterCldr::Tokenizers::DateTimeTokenizer TOKEN_SPLITTER_REGEX = /(\'[\w\s-]+\'|G{1,5}|y+|Y+|Q{1,4}|q{1,5}|M{1,5}|L{1,5}|d{1,2}|F{1}|E{1,5}|e{1,5}|c{1,5})/ - TOKEN_TYPE_REGEXES = [{ :type => :pattern, :regex => /^[G{1,5}|y+|Y+|Q{1,4}|q{1,5}|M{1,5}|L{1,5}|d{1,2}|F{1}|E{1,5}|e{1,5}|c{1,5}]/ }, + TOKEN_TYPE_REGEXES = [{ :type => :pattern, :regex => /^(?:G{1,5}|y+|Y+|Q{1,4}|q{1,5}|M{1,5}|L{1,5}|d{1,2}|F{1}|E{1,5}|e{1,5}|c{1,5})/ }, { :type => :plaintext, :regex => // }] PATHS = { :default => "calendars.gregorian.formats.date.default", :full => "calendars.gregorian.formats.date.full", @@ -12,7 +12,7 @@ class DateTokenizer < TwitterCldr::Tokenizers::DateTimeTokenizer def tokens(options = {}) type = options[:type] || :default - self.tokens_for(PATHS[type]) + self.tokens_for(PATHS[type], type) end protected diff --git a/lib/tokenizers/datetime_tokenizer.rb b/lib/tokenizers/datetime_tokenizer.rb index aa3635bad..243358298 100644 --- a/lib/tokenizers/datetime_tokenizer.rb +++ b/lib/tokenizers/datetime_tokenizer.rb @@ -17,8 +17,7 @@ def initialize(options = {}) def tokens(options = {}) type = options[:type] || :default - @placeholders.each_pair { |name, placeholder| placeholder.type = type } - self.tokens_for(PATHS[type]) + self.tokens_for(PATHS[type], type) end def calendar @@ -36,8 +35,8 @@ def init_resources end def init_placeholders - @placeholders = { :date => TwitterCldr::Tokenizers::DateTokenizer.new(:locale => @locale), - :time => TwitterCldr::Tokenizers::TimeTokenizer.new(:locale => @locale) } + @placeholders = [{ :name => :date, :object => TwitterCldr::Tokenizers::DateTokenizer.new(:locale => @locale) }, + { :name => :time, :object => TwitterCldr::Tokenizers::TimeTokenizer.new(:locale => @locale) }] end def pattern_for(resource) diff --git a/lib/tokenizers/time_tokenizer.rb b/lib/tokenizers/time_tokenizer.rb index 55041741a..18b7425d5 100644 --- a/lib/tokenizers/time_tokenizer.rb +++ b/lib/tokenizers/time_tokenizer.rb @@ -12,7 +12,7 @@ class TimeTokenizer < TwitterCldr::Tokenizers::DateTimeTokenizer def tokens(options = {}) type = options[:type] || :default - self.tokens_for(PATHS[type]) + self.tokens_for(PATHS[type], type) end protected diff --git a/lib/twitter_cldr.rb b/lib/twitter_cldr.rb index 3cf0b51b7..df5f0717d 100644 --- a/lib/twitter_cldr.rb +++ b/lib/twitter_cldr.rb @@ -4,8 +4,9 @@ require 'active_support' # require patches for extending Ruby functionality -require 'ext/date' require 'ext/datetime' +require 'ext/date' +require 'ext/time' require 'ext/fixnum' require 'ext/float' require 'ext/hash' diff --git a/resources/es/calendars.yml b/resources/es/calendars.yml index 360b9d0e0..c858ce2f5 100644 --- a/resources/es/calendars.yml +++ b/resources/es/calendars.yml @@ -57,13 +57,13 @@ es: datetime: default: :"calendars.gregorian.formats.datetime.medium" full: - pattern: "{{date}} {{time}}" + pattern: "{1} {0}" long: - pattern: "{{date}} {{time}}" + pattern: "{1} {0}" medium: - pattern: "{{date}} {{time}}" + pattern: "{1} {0}" short: - pattern: "{{date}} {{time}}" + pattern: "{1} {0}" time: default: :"calendars.gregorian.formats.time.medium" full: diff --git a/resources/fr/calendars.yml b/resources/fr/calendars.yml index b4cf4a27c..84d078d6d 100644 --- a/resources/fr/calendars.yml +++ b/resources/fr/calendars.yml @@ -57,13 +57,13 @@ fr: datetime: default: :"calendars.gregorian.formats.datetime.medium" full: - pattern: "{{date}} {{time}}" + pattern: "{1} {0}" long: - pattern: "{{date}} {{time}}" + pattern: "{1} {0}" medium: - pattern: "{{date}} {{time}}" + pattern: "{1} {0}" short: - pattern: "{{date}} {{time}}" + pattern: "{1} {0}" time: default: :"calendars.gregorian.formats.time.medium" full: