Extract Krea POV action helpers
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from typing import Any
|
||||
|
||||
try:
|
||||
from .krea_action_context import normalize_hardcore_detail_density
|
||||
except ImportError: # Allows local smoke tests with `python -c`.
|
||||
from krea_action_context import normalize_hardcore_detail_density
|
||||
|
||||
|
||||
def _clean(value: Any) -> str:
|
||||
text = "" if value is None else str(value)
|
||||
text = text.replace("\n", " ")
|
||||
text = re.sub(r"\s+", " ", text).strip()
|
||||
text = re.sub(r"\s+([,.;:])", r"\1", text)
|
||||
return text
|
||||
|
||||
|
||||
def detail_clauses(detail: str) -> list[str]:
|
||||
return [part.strip(" ,;") for part in re.split(r",\s*(?:and\s+)?", _clean(detail)) if part.strip(" ,;")]
|
||||
|
||||
|
||||
def join_detail_clauses(clauses: list[str]) -> str:
|
||||
cleaned: list[str] = []
|
||||
seen: set[str] = set()
|
||||
for clause in clauses:
|
||||
clause = _clean(clause).strip(" ,;")
|
||||
key = clause.lower()
|
||||
if clause and key not in seen:
|
||||
cleaned.append(clause)
|
||||
seen.add(key)
|
||||
return ", ".join(cleaned)
|
||||
|
||||
|
||||
def limit_detail_for_density(detail: str, density: str, is_climax: bool) -> str:
|
||||
density = normalize_hardcore_detail_density(density)
|
||||
if density == "compact":
|
||||
return ""
|
||||
clauses = detail_clauses(detail)
|
||||
if not clauses:
|
||||
return ""
|
||||
if density == "balanced":
|
||||
limit = 1 if is_climax else 2
|
||||
else:
|
||||
limit = 3 if is_climax else 4
|
||||
return join_detail_clauses(clauses[:limit])
|
||||
Reference in New Issue
Block a user