From 46d71accbc09332415c81867d8ec60ee886cd6dd Mon Sep 17 00:00:00 2001 From: Sebastian Ludwig Date: Mon, 24 Aug 2015 09:05:10 +0200 Subject: [PATCH] Finished modularizing apple formatter. --- lib/twine/formatters/apple.rb | 69 +++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/lib/twine/formatters/apple.rb b/lib/twine/formatters/apple.rb index 05f9c48..d2d378d 100644 --- a/lib/twine/formatters/apple.rb +++ b/lib/twine/formatters/apple.rb @@ -86,10 +86,46 @@ module Twine text.gsub('"', '\\\\"') end + def format_file(lang, default_lang) + result = format_header(lang) + "\n" + + sections = @strings.sections.map { |section| format_section(section, lang, default_lang) } + result += sections.join("\n") + end + def format_header(lang) "/**\n * Apple Strings File\n * Generated by Twine #{Twine::VERSION}\n * Language: #{lang}\n */" end + def format_section_header(section) + "/********** #{section.name} **********/" if section.name && section.name.length > 0 + end + + def format_section(section, lang, default_lang) + rows = section.rows.select { |row| row.matches_tags?(@options[:tags], @options[:untagged]) } + + result = "" + unless rows.empty? + section_header = format_section_header(section) + result += "\n#{section_header}\n" if section_header + end + + rows.map! { |row| format_row(row, lang, default_lang) } + rows.compact! # remove nil entries + rows.map! { |row| "\n#{row}\n" } # wrap with newlines + result += rows.join + end + + def format_row(row, lang, default_lang) + value = row.translated_string_for_lang(lang, default_lang) + return nil unless value + + result = "" + result += format_comment(row.comment) + "\n" if row.comment + + result += "\"#{format_key(row.key)}\" = \"#{format_value(value)}\";" + end + def format_comment(comment) "/* #{comment.gsub('*/', '* /')} */" end @@ -102,43 +138,12 @@ module Twine escape_quotes(value) end - def format_row(row, lang, default_lang) - value = row.translated_string_for_lang(lang, default_lang) - return nil unless value - - result = "" - result += format_comment(row.comment) + "\n" if row.comment - - result += "\"#{format_key(row.key)}\" = \"#{format_value(value)}\";\n" - end - def write_file(path, lang) default_lang = @strings.language_codes[0] encoding = @options[:output_encoding] || 'UTF-8' File.open(path, "w:#{encoding}") do |f| - f.puts format_header(lang) - - @strings.sections.each do |section| - rows = section.rows.select { |row| row.matches_tags?(@options[:tags], @options[:untagged]) } - - unless rows.empty? - f.puts '' - if section.name && section.name.length > 0 - f.puts "/********** #{section.name} **********/" - end - end - - rows.each do |row| - f.puts '' - - formatted_row = format_row(row, lang, default_lang) - - f.puts formatted_row if formatted_row - end - - end - + f.puts format_file(lang, default_lang) end end