Skip to content

Commit 98bdb2c

Browse files
committed
Add section ID generation for logical sections in Markdown formatting
1 parent 47d23b6 commit 98bdb2c

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

format_sfs_text.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,12 @@ def process_current_section():
550550

551551
# Bygg section-tagg med attribut
552552
attributes = []
553+
554+
# Lägg till id-attribut baserat på rubriken
555+
if header_match:
556+
section_id = generate_section_id(header_text)
557+
attributes.append(f'id="{section_id}"')
558+
553559
if css_classes:
554560
attributes.append(f'class="{" ".join(css_classes)}"')
555561

@@ -583,6 +589,7 @@ def process_current_section():
583589

584590
# Rensa nuvarande sektion
585591
current_section = []
592+
current_section = []
586593

587594
for line in lines:
588595
# Kontrollera om raden är en markdown-rubrik
@@ -853,3 +860,44 @@ def clean_section_tags(text: str) -> str:
853860
cleaned_result.pop()
854861

855862
return '\n'.join(cleaned_result)
863+
864+
865+
def generate_section_id(header_text: str) -> str:
866+
"""
867+
Genererar ett id-attribut för section-taggar baserat på rubrik eller paragrafnummer.
868+
869+
Regler:
870+
- Om rubriken innehåller paragrafnummer (t.ex. "5 §", "13 a §"), använd bara paragrafnumret
871+
- Annars skapa en slug från rubriken (max 15 tecken)
872+
- Ta bort markeringar (text inom //) innan slug-generering
873+
874+
Args:
875+
header_text (str): Rubriktext (utan # tecken)
876+
877+
Returns:
878+
str: ID som kan användas som HTML id-attribut
879+
"""
880+
# Ta bort markeringar (text inom //) från rubriken
881+
clean_text = re.sub(r'/[^/]+/', '', header_text).strip()
882+
883+
# Kontrollera om det finns paragrafnummer i rubriken
884+
paragraph_match = re.search(r'(\d+(?:\s*[a-z])?)\s*§', clean_text)
885+
if paragraph_match:
886+
# Extrahera paragrafnumret utan mellanslag
887+
paragraph_num = paragraph_match.group(1).replace(' ', '')
888+
return f"{paragraph_num}§"
889+
890+
# Om inget paragrafnummer, skapa slug från rubriken
891+
# Ta bort alla icke-alfanumeriska tecken och ersätt med bindestreck
892+
slug = re.sub(r'[^\w\s-]', '', clean_text)
893+
slug = re.sub(r'\s+', '-', slug)
894+
slug = slug.lower().strip('-')
895+
896+
# Begränsa till max 15 tecken
897+
if len(slug) > 15:
898+
slug = slug[:15].rstrip('-')
899+
900+
if not slug:
901+
raise ValueError(f"Kan inte generera giltigt ID från rubriktext: '{header_text}'")
902+
903+
return slug

0 commit comments

Comments
 (0)