class Twine::TwineFile
Attributes
definitions_by_key[R]
language_codes[R]
sections[R]
Public Class Methods
new()
click to toggle source
# File lib/twine/twine_file.rb, line 111 def initialize @sections = [] @definitions_by_key = {} @language_codes = [] end
Public Instance Methods
add_language_code(code)
click to toggle source
# File lib/twine/twine_file.rb, line 117 def add_language_code(code) if @language_codes.length == 0 @language_codes << code elsif !@language_codes.include?(code) dev_lang = @language_codes[0] @language_codes << code @language_codes.delete(dev_lang) @language_codes.sort! @language_codes.insert(0, dev_lang) end end
read(path)
click to toggle source
# File lib/twine/twine_file.rb, line 134 def read(path) if !File.file?(path) file = File.new(path, 'w:UTF-8') file.close end File.open(path, 'r:UTF-8') do |f| line_num = 0 current_section = nil current_definition = nil while line = f.gets parsed = false line.strip! line_num += 1 if line.length == 0 next end if line.length > 4 && line[0, 2] == '[[' match = /^\[\[(.+)\]\]$/.match(line) if match current_section = TwineSection.new(match[1]) @sections << current_section parsed = true end elsif line.length > 2 && line[0, 1] == '[' key = match_key(line) if key current_definition = TwineDefinition.new(key) @definitions_by_key[current_definition.key] = current_definition if !current_section current_section = TwineSection.new('') @sections << current_section end current_section.definitions << current_definition parsed = true end else match = /^([^=]+)=(.*)$/.match(line) if match key = match[1].strip value = match[2].strip value = value[1..-2] if value[0] == '`' && value[-1] == '`' case key when 'ios' current_definition.ios_comment = value when 'comment' current_definition.comment = value when 'tags' current_definition.tags = value.split(',') when 'ref' current_definition.reference_key = value if value else if !@language_codes.include? key add_language_code(key) end current_definition.translations[key] = value end parsed = true end end if !parsed raise Twine::Error.new("Unable to parse line #{line_num} of #{path}: #{line}") end end end # resolve_references @definitions_by_key.each do |key, definition| next unless definition.reference_key definition.reference = @definitions_by_key[definition.reference_key] end end
set_developer_language_code(code)
click to toggle source
# File lib/twine/twine_file.rb, line 129 def set_developer_language_code(code) @language_codes.delete(code) @language_codes.insert(0, code) end
write(path)
click to toggle source
# File lib/twine/twine_file.rb, line 211 def write(path) dev_lang = @language_codes[0] File.open(path, 'w:UTF-8') do |f| @sections.each do |section| if f.pos > 0 f.puts '' end f.puts "[[#{section.name}]]" section.definitions.each do |definition| f.puts "\t[#{definition.key}]" value = write_value(definition, dev_lang, f) if !value && !definition.reference_key puts "Warning: #{definition.key} does not exist in developer language '#{dev_lang}'" end if definition.reference_key f.puts "\t\tref = #{definition.reference_key}" end if definition.tags && definition.tags.length > 0 tag_str = definition.tags.join(',') f.puts "\t\ttags = #{tag_str}" end if definition.raw_comment and definition.raw_comment.length > 0 f.puts "\t\tcomment = #{definition.raw_comment}" end if definition.raw_ios_comment and definition.raw_ios_comment.length > 0 f.puts "\t\tios = #{definition.raw_ios_comment}" end @language_codes[1..-1].each do |lang| write_value(definition, lang, f) end end end end end
Private Instance Methods
match_key(text)
click to toggle source
# File lib/twine/twine_file.rb, line 104 def match_key(text) match = /^\[(.+)\]$/.match(text) return match[1] if match end
write_value(definition, language, file)
click to toggle source
# File lib/twine/twine_file.rb, line 253 def write_value(definition, language, file) value = definition.translations[language] return nil unless value if value[0] == ' ' || value[-1] == ' ' || (value[0] == '`' && value[-1] == '`') value = '`' + value + '`' end file.puts "\t\t#{language} = #{value}" return value end