Nächste: Verarbeitung von Zeichenketten, Vorige: Ein- und Ausgabe, Nach oben: stringproc [Inhalt][Index]
In Maxima sind Schriftzeichen Zeichenketten der Länge 1.
Gibt Informationen zum aktuellen externen Format des Lisp Lesers aus
und in dem Fall, dass die Kodierung des externen Formats nicht mit der
Kodierung der Anwendung, in der Maxima läuft, übereinstimmt,
versucht adjust_external_format
, die Kodierung anzupassen
oder gibt entsprechende Hilfen oder Anleitungen aus.
adjust_external_format
gibt true
zurück, wenn das externe
Format geändert wurde und false
, wenn nicht.
Funktionen wie cint, unicode, octets_to_string und string_to_octets benötigen UTF-8 als das externe Format des Lisp Lesers, um über dem vollständigen Bereich der Unicode-Zeichen korrekt arbeiten zu können.
Beispiele (Maxima in Windows, März 2016):
Die Verwendung von adjust_external_format
in dem Fall, dass das
externe Format nicht mit der Kodierung der Anwendung, in der Maxima läuft,
übereinstimmt.
1. Maxima in der Kommandozeile
Für die Sitzung in einem Terminal wird empfohlen, ein mit SBCL kompiliertes
Maxima zu verwenden. Unicode wird hier standardmäßig unterstützt
und ein Aufruf von adjust_external_format
ist nicht notwendig.
Falls Maxima mit CLISP oder GCL kompiliert wurde, wird empfohlen,
die Kodierung des Terminals von CP850 in CP1252 abzuändern.
adjust_external_format
gibt eine entsprechende Hilfe aus.
CCL liest UTF-8, obwohl der Input vom Terminal standardmäßig in CP850
kodiert ist. CP1252 wird jedoch von CCL nicht unterstützt.
adjust_external_format
gibt deshalb eine Anleitung aus,
wie die Kodierung des Terminals und die des externen Formats beide
auf ISO-8859-1 abgeändert werden können.
2. wxMaxima
In wxMaxima liest SBCL standardmäßig CP1252. Der Input von der Anwendung (wxMaxima) ist jedoch UTF-8-kodiert. Hier ist eine Anpassung erforderlich.
Ein Aufruf von adjust_external_format
und ein Neustart von Maxima
ändern das standardmäßige externe Format auf UTF-8.
(%i1)adjust_external_format(); The line (setf sb-impl::*default-external-format* :utf-8) has been appended to the init file C:/Users/Username/.sbclrc Please restart Maxima to set the external format to UTF-8. (%i1) false
Maxima wird neu gestartet.
(%i1) adjust_external_format(); The external format is currently UTF-8 and has not been changed. (%i1) false
Gibt true
zurück, falls char ein Buchstabe eines Alphabets ist.
Um ein Nicht-US-ASCII-Zeichen als Buchstaben eines Alphabets erkennen zu können, muss das unter Maxima liegende Lisp Unicode voll unterstützen. So wird z.B. ein Umlaut mit SBCL in GNU/Linux als Buchstabe erkannt, mit GCL jedoch nicht. (In Windows muss ein mit SBCL kompiliertes Maxima auf UTF-8 umgestellt worden sein. Siehe hierzu adjust_external_format.)
Beispiele:
Das unter Maxima liegende Lisp (SBCL, GNU/Linux) kann das eingegebene Zeichen in ein Lisp-Schriftzeichen umwandeln und untersuchen.
(%i1) alphacharp("ü"); (%o1) true
Mit GCL ist dies nicht möglich. Es kommt zu einem Fehlerabbruch.
(%i1) alphacharp("u"); (%o1) true (%i2) alphacharp("ü"); package stringproc: ü cannot be converted into a Lisp character. -- an error.
Gibt true
zurück, falls char ein Buchstabe eines Alphabets
oder ein Zahlzeichen ist
(als Zahlzeichen werden hier nur entprechende US-ASCII-Zeichen betrachtet).
Hinweis: Siehe Bemerkungen zu alphacharp.
Gibt das US-ASCII-Zeichen zurück, das der Ganzzahl int entspricht.
int muss dabei kleiner als 128
sein.
Siehe unicode für die Umwandlung von Codepunkten größer 127
.
Beispiele:
(%i1) for n from 0 thru 127 do ( ch: ascii(n), if alphacharp(ch) then sprint(ch), if n = 96 then newline() )$ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z
Gibt true
zurück, falls char_1 und char_2 ein
und das selbe Schriftzeichen sind.
Arbeitet wie cequal, ignoriert jedoch die Groß- und Kleinschreibung, was für Nicht-US-ASCII-Zeichen nur möglich ist, wenn das unter Maxima liegende Lisp einen Buchstaben auch als Buchstaben eines Alphabets erkennen kann. Siehe hierzu die Bemerkungen zu alphacharp.
Gibt true
zurück, wenn der Codepunkt des Zeichens char_1
größer ist als der des Zeichens char_2.
Arbeitet wie cgreaterp, ignoriert jedoch die Groß- und Kleinschreibung, was für Nicht-US-ASCII-Zeichen nur möglich ist, wenn das unter Maxima liegende Lisp einen Buchstaben auch als Buchstaben eines Alphabets erkennen kann. Siehe hierzu die Bemerkungen zu alphacharp.
Gibt true
zurück, wenn obj ein Schriftzeichen ist.
Beispiel: Siehe Einführung.
Gibt den Unicode Codepunkt des Arguments char zurück, das ein
Schriftzeichen sein muss, d.h. eine Zeichenkette der Länge 1
.
Beispiele: Der hexadedimale Codepunkt von Schriftzeichen (Maxima kompiliert mit SBCL in GNU/Linux).
(%i1) obase: 16.$ (%i2) map(cint, ["$","£","€"]); (%o2) [24, 0A3, 20AC]
Warnung: In Windows ist es nicht möglich, Schriftzeichen, die Codepunkten größer 16 Bit entsprechen, in wxMaxima einzugeben, wenn Maxima mit SBCL kompiliert wurde und das aktuelle externe Format nicht UTF-8 ist. Siehe adjust_external_format für weitere Informationen.
CMUCL verarbeitet solche Zeichen nicht als ein einziges Zeichen und cint
gibt dann false
zurück.
Als Ausweg kann hier die Umwandlung von Schriftzeichen in Codepunkte über
UTF-8-Oktette dienen:
utf8_to_unicode(string_to_octets(character));
Siehe utf8_to_unicode, string_to_octets.
Gibt true
zurück, wenn der Codepunkt des Zeichens char_1
kleiner ist als der des Zeichens char_2.
Arbeitet wie clessp, ignoriert jedoch die Groß- und Kleinschreibung, was für Nicht-US-ASCII-Zeichen nur möglich ist, wenn das unter Maxima liegende Lisp einen Buchstaben auch als Buchstaben eines Alphabets erkennen kann. Siehe hierzu die Bemerkungen zu alphacharp.
Gibt true
zurück, wenn char ein graphisches Schriftzeichen,
aber kein Leerzeichen ist.
Ein graphisches Schriftzeichen ist ein Leerzeichen oder ein Zeichen, das man sehen kann.
(constituent
wurde definiert von Paul Graham.
Siehe Paul Graham, ANSI Common Lisp, 1996, Seite 67.)
Beispiel:
(%i1) for n from 0 thru 255 do ( tmp: ascii(n), if constituent(tmp) then sprint(tmp) )$ ! " # % ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
Hinweis: Siehe Bemerkungen zu alphacharp.
Gibt true
zurück, wenn char ein Zahlzeichen ist,
wobei als Zahlzeichen hier nur entsprechende US-ASCII-Zeichen betrachtet werden.
Gibt true
zurück, wenn char ein Kleinbuchstabe ist.
Hinweis: Siehe Bemerkungen zu alphacharp.
Das Steuerzeichen für den Zeilenvorschub (ASCII-Zeichen 10).
Das Leerzeichen.
Das Tabulatorzeichen.
Gibt das durch arg definierte Schriftzeichen zurück. arg kann ein Unicode Codepunkt oder auch eine Zeichenkette mit einem Namen sein, falls das unter Maxima liegende Lisp Unicode vollständig unterstützt.
Beispiel: Durch hexadezimale Codepunkte definierte Schriftzeichen (Maxima kompiliert mit SBCL in GNU/Linux).
(%i1) ibase: 16.$ (%i2) map(unicode, [24, 0A3, 20AC]); (%o2) [$, £, €]
Warnung: In wxMaxima in Windows ist es nicht möglich, Codepunkte größer 16 Bit in Schriftzeichen umzuwandeln, wenn Maxima mit SBCL kompiliert wurde und das aktuelle externe Format nicht UTF-8 ist. Siehe adjust_external_format für weitere Informationen.
CMUCL verarbeitet keine Codepunkte größer 16 Bit.
unicode
gibt dann false
zurück.
Als Ausweg kann hier die Umwandlung der Codepunkte in Schriftzeichen über
UTF-8-Oktette dienen:
octets_to_string(unicode_to_utf8(code_point));
Siehe octets_to_string, unicode_to_utf8.
Falls das unter Maxima liegende Lisp Unicode vollständig unterstützt, kann ein Schriftzeichen durch seinen Namen angegeben werden.
Das folgende Beispiel ist mit ECL, CLISP und SBCL möglich, wobei mit SBCL in
wxMaxima in Windows das externe Format auf UTF-8 gesetzt werden muss.
unicode(name)
wird auch von CMUCL unterstützt, jedoch wieder beschränkt
auf 16-Bit-Zeichen.
Die Zeichenkette als Argument für unicode
muss prinzipiell die sein,
die printf
mit der Spezifikation "~@c" zurück gibt,
jedoch, wie unten gezeigt, ohne den Präfix "#\".
Unterstriche können durch Leerzeichen und Groß- durch Kleinbuchstaben
ersetzt werden.
Beispiel (fortgesetzt): Ein Schriftzeichen ist durch seinen Namen gegeben (Maxima kompiliert mit SBCL in GNU/Linux).
(%i3) printf(false, "~@c", unicode(0DF)); (%o3) #\LATIN_SMALL_LETTER_SHARP_S (%i4) unicode("LATIN_SMALL_LETTER_SHARP_S"); (%o4) ß (%i5) unicode("Latin small letter sharp S"); (%o5) ß
Gibt eine Liste mit UTF-8-Code zurück, der dem Unicode code_point entspricht.
Beispiel: Umwandlung von Unicode Codepunkten in UTF-8 und umgekehrt.
(%i1) ibase: obase: 16.$ (%i2) map(cint, ["$","£","€"]); (%o2) [24, 0A3, 20AC] (%i3) map(unicode_to_utf8, %); (%o3) [[24], [0C2, 0A3], [0E2, 82, 0AC]] (%i4) map(utf8_to_unicode, %); (%o4) [24, 0A3, 20AC]
Gibt true
zurück, wenn char ein Großbuchstabe ist.
Hinweis: Siehe Bemerkungen zu alphacharp.
Diese Optionsvariable beeinflusst Maxima, wenn die Zeichenkodierung der Anwendung, in der Maxima läuft, UTF-8 ist, das externe Format des Lisp Readers jedoch nicht.
In GNU/Linux trifft dies zu, wenn Maxima mit GCL kompiliert wurde und
in Windows in wxMaxima in GCL- und SBCL-Versionen.
Es wird empfohlen, in der SBCL-Version das externe Format in UTF-8 abzuändern.
Eine Festlegung von us_ascii_only
wird damit unnötig.
Siehe adjust_external_format für Details.
us_ascii_only
ist standardmäßig false
.
Maxima analysiert dann (d.h. in der oben beschriebenen Situation) selbst die UTF-8-Kodierung.
Wurde us_ascii_only
auf true
gesetzt, wird angenommen, dass alle
Zeichenketten, die als Argumente für Funktionen des Pakets stringproc
verwendet werden, nur ausschließlich US-ASCII-Zeichen enthalten.
Durch diese Vereinbarung wird die UTF-8-Analyse des Inputs überflüssig
und Zeichenketten können effizienter verarbeitet werden.
Gibt den Unicode Codepunkt zurück, der der Liste list entspricht, die die UTF-8-Kodierung eines einzelnen Schriftzeichens enthalten muss.
Beispiel: Siehe unicode_to_utf8.
Nächste: Verarbeitung von Zeichenketten, Vorige: Ein- und Ausgabe, Nach oben: stringproc [Inhalt][Index]