Hallo Arnold,
Entschuldige, Harm!
Wie konnte ich an Deinen Künsten zweifeln?
Ließ ich mich zu sehr leiten vom empfohlenen Wahlspruch der Programmierer, der da lautet »man muß alles bezweifeln, aber nie verzweifeln«?
lol
Aber mal im Ernst. Ich bin was scheme/guile angeht ein absoluter Autodidakt. Nach allem was ich von Dir in Wort und Code gelesen habe bist Du da deutlich fundierter gebildet. Insoweit schätze ich mich glücklich, wenn jemand mit Deinen Qualitäten meinen Code begutachtet!!
ad
\char-spaceDeine Erweiterungen finde ich klasse.
Als alter Paranoiker habe ich noch ein paar Sonderfälle zugänglich gemacht, sodaß Argumente wie {}, { "" }, {"A"} etc nicht zu einem Crash führen.
#(define-markup-command (char-space layout props nmbr args)(number? markup-list?)
#:properties ((word-space 0.6) (word-space-left #f) (word-space-right #f))
(let* ((args-rev (remove (lambda (x) (string=? "" x)) args))
(new-args (list-join args-rev " "))
(argls (proc new-args '()))
(pos-nmbr (max nmbr 0.0)) ; 'nmbr' limited to be not below 0.0
(stils (map (lambda (x)(interpret-markup layout props x)) argls))
(first-stil (if (eq? argls '()) point-stencil (car stils))))
(ly:stencil-combine-at-edge
(ly:stencil-combine-at-edge
(ly:make-stencil "" (cons 0 (abs (* pos-nmbr 3 (if (number? word-space-left) word-space-left word-space)))) (cons 0 0))
X RIGHT
(if (<= (length argls) 1)
first-stil
(stack-chars first-stil (cdr stils) nmbr))
0)
X RIGHT
(ly:make-stencil "" (cons 0 (abs (* pos-nmbr 3 (if (number? word-space-right) word-space-right word-space)))) (cons 0 0))
0)))
\markup \column {
"Tests for paranoiacs"
\char-space #0.5 { }
xy
\char-space #0.5 { "" }
xy
\override #'(word-space-left . 0)
\char-space #0.5 { a "" a }
xy
\char-space #0.5 { "" "" }
\override #'(word-space-left . 0)
\char-space #0.5 { "" a "" }
xy
\override #'(word-space-left . 0)
\char-space #0.5 { a }
xy
\override #'(word-space-left . 0)
\char-space #0.8 { "់" }
xy
\override #'(word-space-left . 0)
\char-space #0.8 { "asdäöüព្រះជាម្ចាស់" }
\vspace #3
}Wer mehr wissen möchte wie die string-Manipulationen funktionieren kann folgenden Code benutzen, der fast alles im Terminal anzeigt.
% testing functions
#(define strg "asdäöüព្រះជាម្ចាស់")
#(let* ((l1 (utf-8-string->wide-char-list strg))
(l2 (wide-char-list->utf-8-glyphlist l1))
(new-strg (wide-char-list->utf-8 l1))
(strg? (string? new-strg)))
(newline)
(newline)(display "\"The string\"__")(display strg)
(newline)(display "\"List of integers, \n representing the UNICODE character codes\"__")(display l1)
(newline)(display "\"List of one character UTF-8 strings\"__")(display l2)
(newline)(display "\"Back to string\"__")(display new-strg)
(newline)(display "\"string?\"__")(display strg?))
#(let* ((strg-lst (string->string-list strg))
(new-strg (string-list->string strg-lst))
(strg? (string? new-strg)))
(newline)
(newline)(display "\"The string\"__")(display strg)
(newline)(display "\"The string-list\"__")(display strg-lst)
(newline)(display "\"Back to string\"__")(display new-strg)
(newline)(display "\"string?\"__")(display strg?)
(newline))ad
LSRMittlerweile denke ich, die Routine ist fast LSR-reif. Ich müßte nochmal auf der UNICODE-Seite nachsehen und die »combining diacritical marks« neu auflisten.
Den Code zur utf-8-string-Manipulation halte ich für viel zu wertvoll um ihn "nur" ins LSR zu packen.
Falls Du wirklich davon überzeugt bist, daß er generell funktioniert, sollte er direkt in LilyPond integriert werden. Ich habe von UNICODE/utf-8-Codierungen allerdings keine Ahnung, insofern vertraue ich Deiner Expertise.
Falls ich Dein ok kriege, könnte ich, als ersten Schritt zu Voll-Implementierung, den Code auf der devel-list posten.
Was meinst Du?
Und hilft es bei Deinem st-Ligatur-Problem?
BTW, ich habe noch eine Definition von `string-list->string' hinzugefügt. Wird hier nicht gebraucht und ist eigentlich ja auch nur eine Umbenennung von `wide-char-list->utf-8' aber der Name ist vielleicht etwas eingängiger.
@kilgore
Ihr seid beide unglaublich! Auch wenn ich nur die hälfte verstehe, lese ich trotzdem gern durch euren Code 
freut mich sehr, dieses thema angesprochen zu haben!
Ich habe ein eigenes Interesse an der Materie und wenn ich Arnold richtig verstanden habe, so geht es ihm genauso.
Wenn alles klappt wie erhofft, gewinnen wir alle. Was kann es besseres geben?!
Gruß,
Harm
P.S. Im Anhang nochmal das komplette file. Ich habe zur Demonstration auch ein paar kambodschanische Zeichen verwendet:ព្រះជាម្ចាស់. Ich hoff sie werden auf jedem Rechner auch akkurat angezeigt. Lily hat keine Probleme damit.
