lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: utf-8-strings


From: David Kastrup
Subject: Re: utf-8-strings
Date: Sun, 08 Jul 2012 20:34:40 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1.50 (gnu/linux)

Thomas Morley <address@hidden> writes:

> 2012/7/8 David Kastrup <address@hidden>:
>> Thomas Morley <address@hidden> writes:
>>
>>> Seems I have to extend my scheme-vocabulary.
>>> I didn't know/remember `append-map' and `string-concatenate'.
>>
>> Picked them from the Guile manuals.
>
> I know.
> I tend to define my own helpers if I don't find sth useful in the
> guile-manual in a short amount of time.
> Should invest more time in looking through the manual.
> Defining my own helpers is a nice exercise, but ...
>
>>
>>> I really have to learn more of the predefined guile-procedures.
>>>
>>>>>          (new-args (list-join args-rev " "))
>>>>
>>>> list-join?
>>>
>>> I wanted to insert " " between every element of new-args. Otherwise
>>> there will be no space between the words of  p.e. \markup \char-space
>>> #1 { This little text }
>>> list-join seems to be a nice function to do so. Anything problematic
>>> with it?
>>
>> I did not find it in the Guile documentation and did not think of
>> looking in scm/lily-library.scm instead.  Looks suboptimal: an
>> unnecessary test inside of the loop.
>>
>> Better is likely
>>
>> (define-public (list-join lst intermediate)
>>   (if (null? lst) lst
>>       (cons (car lst)
>>             (append-map!
>>                (lambda (elem) (list intermediate elem))
>>                (cdr lst)))))
>>
>> Or even
>>
>> (define-public (list-join lst intermediate)
>>   (if (null? lst) lst
>>       (cons (car lst)
>>             (concatenate!
>>               (zip (circular-list intermediate) (cdr lst))))))
>>
>> The last version is probably fastest since it avoids any user-defined
>> function in the loop.
>
> Could be integrated in the intended patch.
>
>>
>>>>>  (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))))
>>>>
>>>> word-space-left has been given a default in the function definition.  So
>>>> if it is not a number, this is an error case I would not try to catch.
>>>
>>> Do you mean writing
>>>
>>>  (ly:stencil-combine-at-edge
>>>    (ly:stencil-combine-at-edge
>>>       (ly:make-stencil ""
>>>              (cons 0 (abs (* pos-nmbr 3 (if word-space-left
>>> word-space-left word-space))))
>>>
>>> instead?
>>
>> No.
>>
>> (ly:stencil-combine-at-edge
>>   (ly:stencil-combine-at-edge
>>      (ly:make-stencil ""
>>             (cons 0 (abs (* pos-nmbr 3 word-space-left))))))
>>
>> word-space-left has no business being anything but a number.
>
> Well, then I don't understand what you want me to do.
>
> Intended is the behaviour that the space to the left and to the right of
> \char-space #<nmbr> {<args> } is increased if nmbr is positive.
>
> Additional I want to offer the possibility to add more space in three
> different ways (if the user wants):
> only to the left
> only to the right
> on both sides
> using \override #'(word-space-left . 2) etc.
>
> I don't see how this could be achieved with your proposal.

[Checking]

Duh.  I see you wrote

>   #:properties ((word-space 0.6) (word-space-left #f) (word-space-right #f))

and I remembered seeing (word-space-left 0.6).

Sorry for the confusion.  In this case I would use

(ly:stencil-combine-at-edge
  (ly:stencil-combine-at-edge
     (ly:make-stencil ""
            (cons 0 (abs (* pos-nmbr 3 (or word-space-left word-space)))))))

-- 
David Kastrup



reply via email to

[Prev in Thread] Current Thread [Next in Thread]