class TTFunk::EncodedString
Public Class Methods
new() { |self| ... }
click to toggle source
# File lib/ttfunk/encoded_string.rb, line 13 def initialize yield self if block_given? end
Public Instance Methods
<<(obj)
click to toggle source
# File lib/ttfunk/encoded_string.rb, line 17 def <<(obj) case obj when String io << obj when Placeholder add_placeholder(obj) io << "\0" * obj.length when self.class # adjust placeholders to be relative to the entire encoded string obj.placeholders.each_pair do |_, placeholder| add_placeholder(placeholder.dup, placeholder.position + io.length) end self << obj.unresolved_string end self end
align!(width = 4)
click to toggle source
# File lib/ttfunk/encoded_string.rb, line 36 def align!(width = 4) if (length % width).positive? self << "\0" * (width - length % width) end self end
bytes()
click to toggle source
# File lib/ttfunk/encoded_string.rb, line 57 def bytes string.bytes end
length()
click to toggle source
# File lib/ttfunk/encoded_string.rb, line 44 def length io.length end
placeholders()
click to toggle source
# File lib/ttfunk/encoded_string.rb, line 77 def placeholders @placeholders ||= {} end
resolve_placeholder(name, value)
click to toggle source
# File lib/ttfunk/encoded_string.rb, line 65 def resolve_placeholder(name, value) last_pos = io.pos if (placeholder = placeholders[name]) io.seek(placeholder.position) io.write(value[0..placeholder.length]) placeholders.delete(name) end ensure io.seek(last_pos) end
string()
click to toggle source
# File lib/ttfunk/encoded_string.rb, line 48 def string unless placeholders.empty? raise UnresolvedPlaceholderError, "string contains #{placeholders.size} unresolved placeholder(s)" end io.string end
unresolved_string()
click to toggle source
# File lib/ttfunk/encoded_string.rb, line 61 def unresolved_string io.string end
Private Instance Methods
add_placeholder(new_placeholder, pos = io.pos)
click to toggle source
# File lib/ttfunk/encoded_string.rb, line 83 def add_placeholder(new_placeholder, pos = io.pos) if placeholders.include?(new_placeholder.name) raise DuplicatePlaceholderError, "placeholder #{new_placeholder.name} already exists" end new_placeholder.position = pos placeholders[new_placeholder.name] = new_placeholder end
io()
click to toggle source
# File lib/ttfunk/encoded_string.rb, line 93 def io @io ||= StringIO.new(''.b).binmode end