feat: refine quick wins workflow and calendar layout
This commit is contained in:
@@ -4,6 +4,11 @@ import json
|
||||
from pathlib import Path
|
||||
|
||||
from flask import Flask
|
||||
from markupsafe import escape
|
||||
try:
|
||||
import pyphen
|
||||
except ModuleNotFoundError: # pragma: no cover - optional dependency in local dev
|
||||
pyphen = None
|
||||
|
||||
from config import Config
|
||||
|
||||
@@ -19,6 +24,12 @@ from .services.bootstrap import ensure_schema_and_admins
|
||||
from .services.dates import MONTH_NAMES, local_now
|
||||
from .services.monthly import archive_months_missing_up_to_previous
|
||||
|
||||
DE_HYPHENATOR = pyphen.Pyphen(lang="de_DE") if pyphen else None
|
||||
|
||||
|
||||
def _fallback_soft_hyphenate(word: str) -> str:
|
||||
return word
|
||||
|
||||
|
||||
def create_app(config_class: type[Config] = Config) -> Flask:
|
||||
app = Flask(__name__, static_folder="static", template_folder="templates")
|
||||
@@ -111,4 +122,36 @@ def create_app(config_class: type[Config] = Config) -> Flask:
|
||||
def month_name(value):
|
||||
return MONTH_NAMES[value]
|
||||
|
||||
@app.template_filter("hyphenate_de")
|
||||
def hyphenate_de(value):
|
||||
if not value:
|
||||
return ""
|
||||
|
||||
text = str(value)
|
||||
parts: list[str] = []
|
||||
current = []
|
||||
|
||||
def flush_word():
|
||||
if not current:
|
||||
return
|
||||
word = "".join(current)
|
||||
if len(word) >= 6:
|
||||
if DE_HYPHENATOR:
|
||||
parts.append(DE_HYPHENATOR.inserted(word, "\u00AD"))
|
||||
else:
|
||||
parts.append(_fallback_soft_hyphenate(word))
|
||||
else:
|
||||
parts.append(word)
|
||||
current.clear()
|
||||
|
||||
for char in text:
|
||||
if char.isalpha() or char in "ÄÖÜäöüß":
|
||||
current.append(char)
|
||||
else:
|
||||
flush_word()
|
||||
parts.append(char)
|
||||
|
||||
flush_word()
|
||||
return escape("".join(parts))
|
||||
|
||||
return app
|
||||
|
||||
Reference in New Issue
Block a user