feat: Größe ist das letzte alleinstehende (L)-Token der Zeile (D68)
Erkannt nur alleinstehend angesetzt (wie #id und :#…) — damit greifen die Zitier-Konventionen "(L)" und ((L)) von selbst, und Backend(L) bleibt Label. Das letzte Token gewinnt statt des ersten: Die Größe steht hinter dem Titel, frühere Vorkommen sind Text. SPEC §1/§5 und llms.md nachgezogen; mitgelieferte Beispiele unverändert (Parse-Vergleich alt/neu). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
9999c7973e
commit
59da485af6
+15
-1
@@ -286,7 +286,21 @@ export function parse(text){
|
||||
let rest = m[6], url = null, size = null;
|
||||
const tags = [];
|
||||
rest = rest.replace(/https?:\/\/\S+/i, s => { url = s; return ''; });
|
||||
rest = rest.replace(/\((XXL|XS|XL|S|M|L)\)/i, (s, g) => { size = g.toUpperCase(); return ''; });
|
||||
/* Größe (SPEC §1 Schritt 4, D68): das LETZTE alleinstehend angesetzte
|
||||
`(L)`-Token der Zeile — die Größe steht nach der üblichen Schreibweise
|
||||
hinter dem Titel, frühere Vorkommen sind Text und bleiben im Label.
|
||||
Alleinstehend wie bei `#id` und `:#…`: `Backend(L)` bleibt Label, und
|
||||
die Zitier-Konventionen `"(L)"` und `((L))` gelten damit von selbst. */
|
||||
{
|
||||
const reSize = /(^|\s)\((XXL|XS|XL|S|M|L)\)/gi;
|
||||
let sm, lastSize = null;
|
||||
while((sm = reSize.exec(rest))) lastSize = sm;
|
||||
if(lastSize){
|
||||
size = lastSize[2].toUpperCase();
|
||||
rest = rest.slice(0, lastSize.index) + lastSize[1]
|
||||
+ rest.slice(lastSize.index + lastSize[0].length);
|
||||
}
|
||||
}
|
||||
rest = rest.replace(/@([\p{L}\p{N}._-]+)/gu, (s, g) => { tags.push(g); return ''; });
|
||||
/* Knoten-ID `#name` (SPEC §1, D36): nur ALLEINSTEHEND ANGESETZT — „C#"
|
||||
bleibt Label, und das reservierte `:#a,#b` (§11) wird nicht gefressen.
|
||||
|
||||
Reference in New Issue
Block a user