diff --git a/src/scgenerator/io.py b/src/scgenerator/io.py index 6bc790d..bdb2f86 100644 --- a/src/scgenerator/io.py +++ b/src/scgenerator/io.py @@ -4,6 +4,7 @@ import datetime import importlib import json import os +import re from dataclasses import dataclass from pathlib import Path from typing import BinaryIO, Protocol, Sequence @@ -327,3 +328,19 @@ def get_symb(right: bool, rel_i, abs_j, line_pos, max_ind): return "╮╭"[right] else: raise ValueError("top of left columns cannot be below line") + + +def _to_num(s: str) -> str | float | int: + for f in int, float: + try: + return f(s) + except ValueError: + pass + return s + + +NUM_REGEX = r"[+-]?[\d]+(?:\.?[\d]+)?(?:[eE][+-]?\d+)?" + + +def logical_sort_key(s: os.PathLike | str) -> tuple: + return tuple(_to_num(el) for el in re.split(f"({NUM_REGEX})", str(s)) if el)