fix: PDF-Highlight strippt führende Seitenzahl + Topbar noch kompakter
- render_highlighted_page: führende Seitenzahl-Tokens ('44 Gute Bildung …')
vor search_for entfernen — LLMs ziehen den Header oft ins Zitat mit, was
PyMuPDFs Volltext-Match scheitern lässt
- v2-Topbar: padding 4px -> 2px, line-height 1.2, min-height entfernt
(auto-size, nur so hoch wie noetig)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
50c026e3a0
commit
489a1915f8
@ -777,9 +777,14 @@ def render_highlighted_page(programm_id: str, seite: int, query: str) -> Optiona
|
|||||||
rects = []
|
rects = []
|
||||||
if needle:
|
if needle:
|
||||||
clean = needle.replace("\u00ad", "")
|
clean = needle.replace("\u00ad", "")
|
||||||
|
# LLMs ziehen h\u00e4ufig die Seitenzahl-Header (\u201e44 Gute Bildung \u2026")
|
||||||
|
# mit ins Zitat. Wenn die ersten Tokens reine Ziffern sind,
|
||||||
|
# strippen wir sie f\u00fcr die Suche \u2014 sonst matched search_for nicht.
|
||||||
|
import re as _re
|
||||||
|
clean = _re.sub(r"^\s*\d+\s+", "", clean).strip()
|
||||||
words = clean.split()
|
words = clean.split()
|
||||||
anchor = " ".join(words[:5]) if len(words) >= 5 else clean
|
anchor = " ".join(words[:5]) if len(words) >= 5 else clean
|
||||||
# Versuch 1: angegebene Seite, Volltext
|
# Versuch 1: angegebene Seite, Volltext (gestrippt)
|
||||||
rects = src[target_page_idx].search_for(clean)
|
rects = src[target_page_idx].search_for(clean)
|
||||||
# Versuch 2: angegebene Seite, 5-Wort-Anker
|
# Versuch 2: angegebene Seite, 5-Wort-Anker
|
||||||
if not rects:
|
if not rects:
|
||||||
|
|||||||
@ -66,15 +66,21 @@ body.v2 :focus-visible {
|
|||||||
grid-area: topbar;
|
grid-area: topbar;
|
||||||
background: var(--paper);
|
background: var(--paper);
|
||||||
border-bottom: 1px solid var(--hairline);
|
border-bottom: 1px solid var(--hairline);
|
||||||
padding: 4px 24px;
|
padding: 2px 24px;
|
||||||
min-height: 32px;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: var(--space-4);
|
gap: var(--space-4);
|
||||||
font-family: var(--font-mono);
|
font-family: var(--font-mono);
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
|
line-height: 1.2;
|
||||||
color: var(--ecg-dark);
|
color: var(--ecg-dark);
|
||||||
}
|
}
|
||||||
|
.v2-topbar > *,
|
||||||
|
.v2-topbar button,
|
||||||
|
.v2-topbar select {
|
||||||
|
padding-top: 2px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
.v2-topbar-spacer {
|
.v2-topbar-spacer {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user