Ejemplo n.º 1
0
    def tokenize(cls, locator: str) -> List[TokenPair]:
        """Convert locator string to list of token pairs."""
        scanner = cls.PATTERN.scanner(locator)

        tokens = []
        for match in iter(scanner.match, None):
            name = match.lastgroup
            value = match.group()

            if name == "MISMATCH":
                raise InvalidSyntax(f"Unknown token: '{value}'")

            if name == "SKIP":
                continue

            if name == "LOCATOR":
                value = literal.parse(value)

            pair = TokenPair(Token[name], value)
            tokens.append(pair)

        if not tokens:
            raise InvalidSyntax("Empty expression")

        return tokens
Ejemplo n.º 2
0
 def test_parse_size(self):
     locator = literal.parse("region:50,75,100,200")
     assert isinstance(locator, RegionLocator)
     assert locator.left == 50
     assert locator.top == 75
     assert locator.right == 100
     assert locator.bottom == 200
Ejemplo n.º 3
0
    def _part(cls, text: str) -> List[TokenPair]:
        # Exact lexeme match
        for key, values in cls.LEXEME.items():
            if text in values:
                return [TokenPair(key, text)]

        # Prefixed with token
        for key, values in cls.PREFIX.items():
            if text.startswith(values):
                prefix = [TokenPair(key, text[0])]
                return prefix + cls._part(text[1:])

        # Suffixed with token
        for key, values in cls.SUFFIX.items():
            if text.endswith(values):
                suffix = [TokenPair(key, text[-1])]
                return cls._part(text[:-1]) + suffix

        # No matches -> must be valid locator literal
        locator = literal.parse(text)
        return [TokenPair(Token.LOCATOR, locator)]
Ejemplo n.º 4
0
 def test_parse_size(self):
     locator = literal.parse("size:100,200")
     assert isinstance(locator, SizeLocator)
     assert locator.width == 100
     assert locator.height == 200
Ejemplo n.º 5
0
 def test_parse_offset(self):
     locator = literal.parse("offset:100,200")
     assert isinstance(locator, OffsetLocator)
     assert locator.x == 100
     assert locator.y == 200
Ejemplo n.º 6
0
 def test_parse_coordinates(self):
     # Kept for backwards compatibility
     locator = literal.parse("coordinates:100,200")
     assert isinstance(locator, PointLocator)
     assert locator.x == 100
     assert locator.y == 200
Ejemplo n.º 7
0
 def test_parse_point(self):
     locator = literal.parse("point:100,200")
     assert isinstance(locator, PointLocator)
     assert locator.x == 100
     assert locator.y == 200
Ejemplo n.º 8
0
 def test_parse_image_args(self):
     locator = literal.parse("image:path/to/file.png,80.0")
     assert isinstance(locator, ImageLocator)
     assert locator.path == "path/to/file.png"
     assert locator.confidence == 80.0