```python
def clause_order(a: str, b: str) -> int:
    def parse_mark(mark: str) -> list[int]:
        if not mark or mark == '.':
            return []
        parts = mark.split('.')
        return [int(part) for part in parts if part.isdigit()]

    def compare_marks(mark1: str, mark2: str) -> int:
        parts1 = parse_mark(mark1)
        parts2 = parse_mark(mark2)
        for i in range(min(len(parts1), len(parts2))):
            if parts1[i] != parts2[i]:
                return parts1[i] - parts2[i]
        if len(parts1) < len(parts2):
            return -1
        if len(parts1) > len(parts2):
            return 1
        return 0

    if not a or not b:
        return 0

    mark1 = parse_mark(a)
    mark2 = parse_mark(b)

    if not mark1 or not mark2:
        return 0

    return compare_marks(mark1, mark2)
```