[Trennmuster] Parser fuer Wortliste

Werner LEMBERG wl at gnu.org
Mo Feb 13 10:03:14 CET 2012


> Ja, eben, /eine/ wäre nicht schlecht.  Und ich hoffte, das könnte
> Lua sein ...

Hmm.  Klingt ein bißchen selbstsüchtig :-) Aber Du hast schon recht:
Wo TeX ist, ist luatex und texlua auch nicht weit heutzutage.

>> Sowohl Python als auch Perl gibt's genauso unter Windows.
>
> Ja, zum reinen Ausführen von Skripten reicht das.  Ich habe in
> beiden Sprachen jedoch keine Kenntnisse.

Tsk, tsk, tsk.

> Ich kenne und nutze sicher nur wenige Möglichkeiten regulärer
> Ausdrücke (mit grep und sed).  Aber bereits nach kurzer
> Beschäftigung mit PEG möchte ich mich in reguläre Ausdrücke für
> kompliziertere Sachen als kurze Einzeiler auf der Kommandozeile
> nicht mehr tiefer hineinknien müssen.  PEG gibt es für verschiedene
> Sprachen.

Hmm.  Für Perl anscheinend nicht, zumindest finde ich nichts auf

  http://bford.info/packrat/

In Perl kann man übrigens reguläre Ausdrücke mithilfe des
»x«-Modifizierers sehr übersichtlich darstellen, weil dann Whitespace
fast gänzlich ignoriert wird, z.B.

  /^(?| ([0-9]+) c \1
        | ([0-9]+,[0-9]+) c \1)/x

[»(?| ... )« ist »branch-reset«-Muster, damit ich in jedem Ausdruck,
der durch »|« separiert ist, immer wieder »\1« benutzen kann.]

> Die Interoperabilität ließe sich vermutlich dadurch sicherstellen,
> dass wir lokale- und kodierungsabhängige Aufgaben nicht auf
> Shell-Ebene, sondern innerhalb von "richtigen" Skriptsprachen
> erledigen.

Entschuldige, aber das ist nur ein Verschieben des Problems.  Wenn wir
uns auf eine Shell einigen, z.B. bash, die ja genauso unter Windows
verfügbar ist, egalisiert sich dieses Argument.

> Ich gehe davon aus, dass in Perl, Python, Lua, Java etc. das
> Sortieren plattformübergreifend robust funktioniert, mit allen
> möglichen Kodierungen und unabhängig von den Lokaleeinstellungen des
> jeweiligen Benutzers.

Das ist korrekt, wenn man die Lokale am Anfang des Skripts setzt (so
wie ich das auch in meinen Bash-Skripten tue).

> Dein UTF-8-kodierter Zweigname
> 'Keine-Haupttrennstellen-in-zweisilbigen-Wörtern' ist da schon
> auffällig geworden.

:-)

> Die Sortierung der Liste geschieht meines Wissens mit einem Skript,
> welches nur bei dir auf dem Rechner schlummert.  Dafür suche ich zum
> Beispiel eine portable Lösung.

Wie ich schon erwähnt habe: Die Sortierung ist vorgegeben durch

  LC_COLLATE=de_DE.ISO8859-1
  LC_CTYPE=de_DE.ISO8859-1

wobei ich noch den Parameter »-d« an »sort« übergebe, damit alles
außer Buchstaben (und Ziffern und Leerzeichen) bei der Sortierung
ignoriert wird (»Telephonbuchsortierung«).

Die Sortierreihenfolge wird durch LC_COLLATE gesetzt, also Deutsch in
Deutschland mit der Kodierung latin-1; die Definition von Buchstaben,
Ziffern, usw. spezifiziert LC_CTYPE, und das ist natürlich der gleiche
Wert.

Hier ist übrigens eine Definition von de_DE:

  http://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/de_DE

welche wiederum auf ISO 14651 verweist:

  http://sourceware.org/git/?p=glibc.git;a=blob_plain;f=localedata/locales/iso14651_t1_common

Hier etwas zu ISO 14651:

  http://en.wikipedia.org/wiki/ISO_14651

und ein bißchen mehr Erklärungen gibt's hier:

  http://en.wikipedia.org/wiki/European_ordering_rules

Wer will, kann sich auch noch

  http://cldr.unicode.org/

reinziehen.

Das gibt's *alles* unter Windows genauso.


    Werner



Mehr Informationen über die Mailingliste Trennmuster