def parse_header(self): self.magic = self.data[:4] self.version = int.from_bytes(self.data[4:8], 'little') self.rule_count = int.from_bytes(self.data[8:12], 'little') # ... parse rules When shaping Arabic text, after mandatory shaping, apply optional rules:
body.append(len(outputs)) for out in outputs: body.extend(struct.pack('<I', out)) fg-optional-arabic.bin
# Prepare header magic = b'FGOA' version = data['version'] rules = data['optional_features'] rule_count = len(rules) def parse_header(self): self
def parse_header(self): self.magic = self.data[:4] self.version = int.from_bytes(self.data[4:8], 'little') self.rule_count = int.from_bytes(self.data[8:12], 'little') # ... parse rules When shaping Arabic text, after mandatory shaping, apply optional rules:
body.append(len(outputs)) for out in outputs: body.extend(struct.pack('<I', out))
# Prepare header magic = b'FGOA' version = data['version'] rules = data['optional_features'] rule_count = len(rules)