Hallo Ratti, hallo Leute, Am Donnerstag, 20. Juni 2002 23:53 schrieb ratti:
Ratti:
Man kann keinen Designer davon abhalten, seinen Font "~/*" zu nennen.
Da ich gedenke, die Datei wie den Font zu nennen, ergäbe sich bei obigem Beispiel mv ALTER_NAME_DER_DATEI.TTF ~/*.ttf was gut Schaden anrichten kann. Also muß ich die Dateinamen absichern.
Ich will ja keine "/" im Dateinamen unterbringen, die müssen dann eben raus. Ich war auf der Suche nach einer Funktion, die "machbare, aber hässliche" Dateinamen umgänglich macht. Ein "*" beispielsweise ist ja legal.
Ich komme aber aus perl, wo ich die Fontnamen auslese. Deswegen kann es zu einer doppelten Substitution kommen. Erst wertet perl aus, dann übergibt er an die bash, die wertet wieder aus.
#!/usr/bin/perl $font ="ARIALBI.TTF"; $neu_name =&fontname($font); `mv $font $neu_name.ttf`;
Die erste Substitution führt perl durch: `mv $font $neu_name.ttf` wird zu mv ARIALBI.TTF Arial Bold Italic.ttf
Das ist bereits falsch - die Spaces gehören da nicht hin. Gar nicht daran zu denken, es käme "*" oder sowas vor.
Auch ein " rettet mich nicht. Wenn der Font 12"-Nagel heisst, generiere ich bereits in perl aus [...] den Ausdruck mv "NAGEL.TTF" "12"-Nagel.ttf" was ebenfalls syntaktisch falsch ist.
Setze die Dateinamen in einfache Anführungszeichen ' (= Apostroph/Hochkomma) Das beseitigt AFAIK fast alle Probleme mit Sonderzeichen [1] bis auf - einfache Anführungszeichen -> mit ' maskieren - / (ist und bleibt ein Pfadtrenner) - \0 (wobei es mich überraschen würde, wenn das in einem Fontname vorkommt ;-) \0 ist allerdings ungetestet, da ich noch nicht herausbekommen habe, wie ich mit touch eine Datei anlege, die \0 im Namen hat. (sachdienliche Hinweise willkommen) Keine Ahnung, ob Perl die Variablen noch ersetzt, wenn Du ` mv '$font' '$neu_name.ttf' ` machst. Falls nicht, verwende eben [2]: $command = "mv '" . $font . "' '" . $neu_name . ".ttf'" `$command`
Gesucht wird die fiktive funktion "sicherer_dateiname()", die
*g* Die kannst Du haben - lass einfach nur [-.a-zA-Z0-9_] durch und ersetze den Rest durch _ - wer sich daran stört, verwendet eben "falsche" Dateinamen ;-) Im Ernst: Wenn Du mit einfachen Anführungszeichen arbeitest, reduziert sich die Anzahl der problematischen Sonderzeichen sehr (siehe oben).
Aber es geht gut voran. Sieht so aus, als könnte ich bald meine Signatur ändern auf "http://www.gesindel.de | Fontlinge | Die Schriftenverwaltung für LINUX" ;-)))
Wäre schön... (wobei mich das daran erinnert, dass die Windows-Version bei mir schon seit längerem ungetestet auf der Platte liegt ;-) Hast Du eigentlich schon die Generierung der Vorschaubilder fertig? Falls nicht, kannst Du vielleicht bei kfontinstaller ein wenig abschreiben ;-) Gruß Christian Boltz [1] siehe auch die Tabelle von Antje. [2] Da ich immer noch nicht dazu gekommen bin, mich in Perl einzuarbeiten, gehe ich mal davon aus, dass der . (Punkt) ebenso wie z. B. bei PHP dazu dient, Zeichenketten zu verbinden. Falls das nicht stimmt, den . durch den richtigen Operator für "Zeichenfolgen verketten" ersetzen. -- Registrierter Linux-Nutzer #239431 Linux - life is too short for reboots.