def _read_patterns_from_file(self, path, encoding): """Read all patterns from file at `path`.""" if not os.path.isfile(path): return basename = os.path.basename(path) extension = ".{}".format(self.pattern_type) if basename.endswith(".in"): extension = ".{}.in".format(self.pattern_type) code = basename.replace(extension, "") local = path.startswith(aeidon.DATA_HOME_DIR) patterns = self._patterns.setdefault(code, []) lines = aeidon.util.readlines(path, encoding) lines = [self._re_comment.sub("", x) for x in lines] lines = [x.strip() for x in lines] for line in (x for x in lines if x): if line.startswith("["): # [HEADER] patterns.append(aeidon.Pattern()) patterns[-1].local = local else: # [_]KEY=VALUE name, value = line.split("=", 1) # Translatable fields used to be marked with a leading # underscore prior to version 1.3. We continue to support that # syntax in case users have local pattern files. name = name[1:] if name.startswith("_") else name # Regular expression patterns and replacements use null # character to avoid syntax issues that go against the GKeyFile # spec and would be "fixed" by msgfmt when merging translations. # https://github.com/otsaloma/gaupol/issues/70 value = re.sub(r"\\0(?!\d)", "", value) patterns[-1].set_field(name, value)
def _read_patterns_from_file(self, path, encoding): """Read all patterns from file at `path`.""" if not os.path.isfile(path): return basename = os.path.basename(path) extension = ".{}".format(self.pattern_type) if basename.endswith(".in"): extension = ".{}.in".format(self.pattern_type) code = basename.replace(extension, "") local = path.startswith(aeidon.DATA_HOME_DIR) patterns = self._patterns.setdefault(code, []) lines = aeidon.util.readlines(path, encoding) lines = [self._re_comment.sub("", x) for x in lines] lines = [x.strip() for x in lines] for line in (x for x in lines if x): if line.startswith("["): # [HEADER] patterns.append(aeidon.Pattern()) patterns[-1].local = local else: # [_]KEY=VALUE name, value = line.split("=", 1) name = (name[1:] if name.startswith("_") else name) patterns[-1].set_field(name, value)
def setup_method(self, method): self.pattern = aeidon.Pattern()