diff --git a/middleman-core/lib/middleman-core/sitemap/store.rb b/middleman-core/lib/middleman-core/sitemap/store.rb index 220b285d..d785e289 100644 --- a/middleman-core/lib/middleman-core/sitemap/store.rb +++ b/middleman-core/lib/middleman-core/sitemap/store.rb @@ -229,15 +229,8 @@ module Middleman # @param [String] path # @return [String] def remove_templating_extensions(path) - end_of_the_line = false - while !end_of_the_line - if !::Tilt[path].nil? - path = path.sub(File.extname(path), "") - else - end_of_the_line = true - end - end - + # Strip templating extensions as long as Tilt knows them + path = path.sub(File.extname(path), "") while ::Tilt[path] path end @@ -246,10 +239,10 @@ module Middleman # @return [String] def strip_away_locale(path) if app.respond_to? :langs - path.match(/([^.\/]+)\.([^.]+)$/) do |m| - if app.langs.include?(m[2].to_sym) - return m[1] - end + path_bits = path.split('.') + lang = path_bits.last + if app.langs.include?(lang.to_sym) + return path_bits[0..-1].join('.') end end diff --git a/middleman-more/lib/middleman-more/core_extensions/i18n.rb b/middleman-more/lib/middleman-more/core_extensions/i18n.rb index adacfee4..755a3836 100644 --- a/middleman-more/lib/middleman-more/core_extensions/i18n.rb +++ b/middleman-more/lib/middleman-more/core_extensions/i18n.rb @@ -118,7 +118,7 @@ class Middleman::CoreExtensions::Internationalization < ::Middleman::Extension path = resource.path.sub(options[:templates_dir], "") new_resources << build_resource(path, resource.path, page_id, lang) end - elsif m = result = parse_locale_extension(resource.path) + elsif result = parse_locale_extension(resource.path) lang, path, page_id = result new_resources << build_resource(path, resource.path, page_id, lang) end @@ -130,15 +130,19 @@ class Middleman::CoreExtensions::Internationalization < ::Middleman::Extension private # Parse locale extension filename - # @return [locale, path, basename] + # @return [lang, path, basename] # will return +nil+ if no locale extension def parse_locale_extension(path) - path.match(/([^.\/]+)\.([^.]+)$/) do |m| - locale = m[2].to_sym - path = m[1] - basename = File.basename(path) - langs.include?(locale) ? [locale, path, basename] : nil - end + path_bits = path.split('.') + return nil if path_bits.size < 3 + + lang = path_bits.delete_at(-2).to_sym + return nil unless langs.include?(lang) + + path = path_bits.join('.') + basename = File.basename(path_bits[0..-2].join('.')) + + [lang, path, basename] end def build_resource(path, source_path, page_id, lang)