def _maketag(d, encode_option): tag = '\x3f\x03' tag += _h32(_calctaglen(d, encode_option)) for k in d: value = unicode(d[k]).encode(encode_option, 'ignore') tag += '\x96' + _h16(len(k)+2) + '\x00' + k + '\x00' tag += '\x96' + _h16(len(value)+2) + '\x00' + value + '\x00' tag += '\x1d' tag += '\x00' return tag
def set_framecount(self, num): "Framecount を置き換える" self.value = \ self.value[:self.framecount_offset] + \ _h16(num) + \ self.value[(self.framecount_offset + 2):] self.framecount = num
def set_character_id(self, num): "CharacterId を置き換える" assert isinstance(num, int) self.value = \ self.value[:self.character_id_offset] + _h16(num) + \ self.value[(self.character_id_offset + 2):] self.character_id = num
def set_target_character_id(self, num): assert isinstance(num, int) assert hasattr(self, 'target_character_id_offset') self.value = \ self.value[:self.target_character_id_offset] + _h16(num) + \ self.value[(self.target_character_id_offset + 2):] self.target_character_id = num
def set_length(self, num): """ タグ(block)の length を変える. length の長さによって形式が変わる See swf_file_format_spec_v10.pdf (p.27) """ old_tag_code_and_length = le2byte(self.value[:2]) length = old_tag_code_and_length & 0x3f if length != 63: """ short. TagCodeAndLength は 2 byte のみ """ tag_code_and_length = (self.tag << 6) + num self.value = _h16(tag_code_and_length) + self.value[2:] else: """ large. TagCodeAndLength は 2 byte + 4 byte 後ろの 4 byte の length を変えれば良い """ self.value = self.value[:(self.content_offset - 4)] + _h32(num) + \ self.value[self.content_offset:] self.length = num
def set_depth(self, num): assert isinstance(num, int) self.value = \ self.value[:self.depth_offset] + _h16(num) + \ self.value[(self.depth_offset + 2):] self.depth = num