lilypond-user
[Top][All Lists]
Advanced

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

Re: \smallCaps and special characteres


From: Zenith
Subject: Re: \smallCaps and special characteres
Date: Wed, 26 Mar 2008 19:26:20 -0700 (PDT)

Well,

thanks for the answer. :clap:
 I thought it would be an easy way, :confused:at this moment, this solution
is too advanced to me. %-|

But, I promiss that I'll try to change this on the right place... (rs)
:thinking:

Thx,:handshake:

Zenith




Nicolas Sceaux wrote:
> 
> 
> Le 25 mars 08 à 19:54, Zenith a écrit :
>>
>> Please,
>>
>> is it possible to use \smallCaps with some special characteres like  
>> "ç",
>> "ã", "è", etc.
>>
>> Thx,
>>
>> Zenith
> 
> It is possible, by redefining \smallCaps in order to force it dealing
> with accented characters (which guile does not).
> 
> I use the following code, you may want to add some characters to the  
> lists
> at the beginning.
> 
> 
> %%% Guile does not deal with accented letters
> #(use-modules (ice-9 regex))
> %%;; actually defined below, in a closure
> #(define-public string-upper-case #f)
> #(define accented-char-upper-case? #f)
> #(define accented-char-lower-case? #f)
> 
> %%;; an accented character is seen as two characters by guile
> #(let ((lower-case-accented-string "éèêëáàâäíìîïóòôöúùûüçœæ")
>         (upper-case-accented-string "ÉÈÊËÁÀÂÄÍÌÎÏÓÒÔÖÚÙÛÜÇŒÆ"))
>     (define (group-by-2 chars result)
>        (if (or (null? chars) (null? (cdr chars)))
>            (reverse! result)
>            (group-by-2 (cddr chars)
>                        (cons (string (car chars) (cadr chars))
>                              result))))
>     (let ((lower-case-accented-chars
>            (group-by-2 (string->list lower-case-accented-string)  
> (list)))
>           (upper-case-accented-chars
>            (group-by-2 (string->list upper-case-accented-string)  
> (list))))
>       (set! string-upper-case
>             (lambda (str)
>               (define (replace-chars str froms tos)
>                 (if (null? froms)
>                     str
>                     (replace-chars (regexp-substitute/global #f (car  
> froms) str
>                                                              'pre (car  
> tos) 'post)
>                                    (cdr froms)
>                                    (cdr tos))))
>               (string-upcase (replace-chars str
>                                             lower-case-accented-chars
>                                             upper-case-accented- 
> chars))))
>       (set! accented-char-upper-case?
>             (lambda (char1 char2)
>               (member (string char1 char2) upper-case-accented-chars  
> string=?)))
>       (set! accented-char-lower-case?
>             (lambda (char1 char2)
>               (member (string char1 char2) lower-case-accented-chars  
> string=?)))))
> 
> #(define-markup-command (smallCaps layout props text) (markup?)
>    "Turn @code{text}, which should be a string, to small caps.
> @example
> \\markup \\small-caps \"Text between double quotes\"
> @end example"
>    (define (string-list->markup strings lower)
>      (let ((final-string (string-upper-case
>                           (apply string-append (reverse strings)))))
>        (if lower
>            (markup #:fontsize -2 final-string)
>            final-string)))
>    (define (make-small-caps rest-chars currents current-is-lower prev- 
> result)
>      (if (null? rest-chars)
>          (make-concat-markup (reverse! (cons (string-list->markup
>                                                currents current-is- 
> lower)
>                                              prev-result)))
>          (let* ((ch1 (car rest-chars))
>                 (ch2 (and (not (null? (cdr rest-chars))) (cadr rest- 
> chars)))
>                 (this-char-string (string ch1))
>                 (is-lower (char-lower-case? ch1))
>                 (next-rest-chars (cdr rest-chars)))
>            (cond ((and ch2 (accented-char-lower-case? ch1 ch2))
>                   (set! this-char-string (string ch1 ch2))
>                   (set! is-lower #t)
>                   (set! next-rest-chars (cddr rest-chars)))
>                  ((and ch2 (accented-char-upper-case? ch1 ch2))
>                   (set! this-char-string (string ch1 ch2))
>                   (set! is-lower #f)
>                   (set! next-rest-chars (cddr rest-chars))))
>            (if (or (and current-is-lower is-lower)
>                    (and (not current-is-lower) (not is-lower)))
>                (make-small-caps next-rest-chars
>                                 (cons this-char-string currents)
>                                 is-lower
>                                 prev-result)
>                (make-small-caps next-rest-chars
>                                 (list this-char-string)
>                                 is-lower
>                                 (if (null? currents)
>                                     prev-result
>                                     (cons (string-list->markup
>                                              currents current-is-lower)
>                                           prev-result)))))))
>    (interpret-markup layout props
>      (if (string? text)
>          (make-small-caps (string->list text) (list) #f (list))
>          text)))
> 
> 
> 
> _______________________________________________
> lilypond-user mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/lilypond-user
> 
> 

-- 
View this message in context: 
http://www.nabble.com/%5CsmallCaps-and-special-characteres-tp16285133p16320272.html
Sent from the Gnu - Lilypond - User mailing list archive at Nabble.com.





reply via email to

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