```python
import re

def parse_option(segment: str) -> list:
    """Parse a single segment into [key, value]."""
    match = re.match(r'^([a-zA-Z_][a-zA-Z0-9_]*)=(.*)$', segment)
    if not match:
        raise ValueError("Invalid option format")
    
    key, value = match.groups()
    if value.startswith('"') and value.endswith('"'):
        value = value[1:-1]
    elif '"' in value:
        raise ValueError("Unterminated quote")
    
    return [key, value]

def scan_pairs(text: str) -> list:
    """Split the options string into key-value pairs."""
    if not isinstance(text, str):
        raise ValueError("Input must be a string")
    if not text:
        raise ValueError("Empty input")
    
    result = {}
    in_quotes = False
    current_segment = ""
    
    for char in text:
        if char == '"':
            in_quotes = not in_quotes
        elif char == ';' and not in_quotes:
            segment = parse_option(current_segment.strip())
            if segment[0] in result:
                raise ValueError("Repeated key")
            result[segment[0]] = segment[1]
            current_segment = ""
        else:
            current_segment += char
    
    if current_segment:  # Handle the last segment
        segment = parse_option(current_segment.strip())
        if segment[0] in result:
            raise ValueError("Repeated key")
        result[segment[0]] = segment[1]
    
    return list(result.items())
```