Finished modularizing apple formatter.

This commit is contained in:
Sebastian Ludwig 2015-08-24 09:05:10 +02:00
parent d7150521f8
commit 46d71accbc

View file

@ -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