lilypond-user-fr
[Top][All Lists]
Advanced

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

Re: Cafe Lily confine


From: Valentin Villenave
Subject: Re: Cafe Lily confine
Date: Sun, 3 May 2020 18:22:41 +0200

On 5/3/20, Pierre Perol-Schneider <address@hidden> wrote:
> Je vous joins la fonte -- non aboutie -- "LilyFont" (le nom n'est pas
> judicieux, mais bon...)

Et du coup ça me permet de démontrer le mécanisme dont je parlais dans
l’autre fil de discussion (je l’aurais bien mis sur le LSR mais il n’y
a _aucun_ moyen de faire tourner ça en mode -dsafe, et pour cause) :

%%%%

%% OpenType font encoded in Base64:

lilyfont = "
T1RUTwAKAIAAAwAgQ0ZGIE0H1wMAAAUYAAAKUUZGVE2NPGqvAAAPbAAAABxPUy8yfn52wwAAARAA
AABgY21hcAxxFVMAAAOkAAABUmhlYWQeEVshAAAArAAAADZoaGVhHYb+qQAAAOQAAAAkaG10eEZJ
BHkAAA+IAAAANG1heHAADVAAAAABCAAAAAZuYW1lfvUtIQAAAXAAAAI0cG9zdP9qAGYAAAT4AAAA
IAABAAAAAQYk1ZEHS18PPPUACwgAAAAAANnpl/QAAAAA2epwhQAH9dILFxG1AAAACAACAAAAAAAA
AAEAABG19dIAuAsSAAD9twsXAAEAAAAAAAAAAAAAAAAAAAANAABQAAANAAAABAWGAZAABQAABTMF
mQAAAR4FMwWZAAAD1wBmAhIAAAIABQMAAAAAAAAAAAABAAAAAAAAAAAAAAAAUGZFZACAACkARwZm
/mYAuBG1Ci4AAAABAAAAAAAAEbUAIAAgAAEAAAAOAK4AAQAAAAAAAAAqAFYAAQAAAAAAAQAIAJMA
AQAAAAAAAgAHAKwAAQAAAAAAAwAkAP4AAQAAAAAABAAIATUAAQAAAAAABQAOAVwAAQAAAAAABgAI
AX0AAwABBAkAAABUAAAAAwABBAkAAQAQAIEAAwABBAkAAgAOAJwAAwABBAkAAwBIALQAAwABBAkA
BAAQASMAAwABBAkABQAcAT4AAwABBAkABgAQAWsAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAg
ADIAMAAxADkALAAgAFAAaQBlAHIAcgBlACAAUABlAHIAbwBsAC0AUwBjAGgAbgBlAGkAZABlAHIA
AENvcHlyaWdodCAoYykgMjAxOSwgUGllcnJlIFBlcm9sLVNjaG5laWRlcgAATABpAGwAeQBGAG8A
bgB0AABMaWx5Rm9udAAAUgBlAGcAdQBsAGEAcgAAUmVndWxhcgAARgBvAG4AdABGAG8AcgBnAGUA
IAAyAC4AMAAgADoAIABMAGkAbAB5AEYAbwBuAHQAIAA6ACAAOAAtADEAMQAtADIAMAAxADkAAEZv
bnRGb3JnZSAyLjAgOiBMaWx5Rm9udCA6IDgtMTEtMjAxOQAATABpAGwAeQBGAG8AbgB0AABMaWx5
Rm9udAAAVgBlAHIAcwBpAG8AbgAgADEALgAwADIANAAgAABWZXJzaW9uIDEuMDI0IAAATABpAGwA
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
"

% TODO: this should be rewritten (e.g. using rnrs bytevectors, see base64
% implementations in guile-gnome and guile-gcrypt) as soon as
% compatibility with Guile v1.8 is no longer needed. -vv

#(define (base64-decode out-port input)
   (let ((base64-decode-table (make-hash-table 64))
         (alphabet
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
         (in-port (if (string? input)
                      (open-input-string input)
                      input))
         (current-state 1)
         (current-char '())
         (byte #f)
         (top-bits '())
         (bottom-bits '()))
     (map (lambda (item)
            (hash-set! base64-decode-table item
                       (string-index alphabet item)))
          (string->list alphabet))
     ;; inspired by https://sourceware.org/legacy-ml/guile/2000-01/msg00622.html
     ;; looks clunky but gets the job done.
     (while
      (not (eof-object? current-char))
      (set! current-char (read-char in-port))
      (case current-state
        ((1) (begin
              (set! byte
                    (hashv-ref base64-decode-table current-char))
              (if byte
                  (begin
                   (set! top-bits
                         (* (logand byte #b00111111) 4))))))
        ((2) (if (eof-object? current-char)
                 (begin
                  (set! bottom-bits #b00000000)
                  (write-char (integer->char
                               (logior top-bits bottom-bits))
                              out-port))
                 (begin
                  (set! byte
                        (hashv-ref base64-decode-table current-char))
                  (if byte
                      (begin
                       (set! bottom-bits
                             (/ (logand byte #b00110000) 16))
                       (write-char (integer->char
                                    (logior top-bits bottom-bits))
                                   out-port)
                       (set! top-bits
                             (* (logand byte #b00001111) 16)))))))
        ((3) (if (eof-object? current-char)
                 (begin
                  (set! bottom-bits #b00000000)
                  (write-char (integer->char
                               (logior top-bits bottom-bits))
                              out-port))
                 (begin
                  (set! byte
                        (hashv-ref base64-decode-table current-char))
                  (if byte
                      (begin
                       (set! bottom-bits
                             (/ (logand byte #b00111100) 4))
                       (write-char (integer->char
                                    (logior top-bits bottom-bits))
                                   out-port)
                       (set! top-bits
                             (* (logand byte #b00000011) 64)))))))
        ((4) (if (eof-object? current-char)
                 (begin
                  (set! bottom-bits #b00000000)
                  (write-char (integer->char
                               (logior top-bits bottom-bits))
                              out-port))
                 (begin
                  (set! byte
                        (hashv-ref base64-decode-table current-char))
                  (if byte
                      (begin
                       (set! bottom-bits
                             (logand byte #b00111111))
                       (write-char (integer->char
                                    (logior top-bits bottom-bits))
                                   out-port)))))))
      (if byte
          (begin
           (if (eqv? current-state 4)
               (set! current-state 1)
               (set! current-state (1+ current-state)))
           (set! byte #f))))
     #t))

tmpdir = #(or (getenv "TMPDIR") "/tmp")

fontfile =
#(string-append
  (port-filename (mkstemp! (string-append tmpdir "/" "lilyfont-XXXXXX")))
  ".otf")

\book {
  #(let* ((port (open-output-file fontfile)))
     (if (guile-v2) (set-port-encoding! port "ISO-8859-1"))
     (base64-decode port lilyfont)
     (close port))

  #(ly:font-config-add-font fontfile)

  \markuplist {
    \number "0123456789" \vspace #.5
    \override #'(font-name . "LilyFont") "0123456789"
  }

  {
    \override Staff.TimeSignature.font-name = "LilyFont"
    \time 3/4
    \tuplet 3/2 { c''8 b' a' }
    \override TupletNumber.font-name = "LilyFont"
    \override TupletNumber.font-size = #-4
    \tuplet 3/2 { c''8 b' a' }
  }
}

\book {
  #(delete-file fontfile)
  \markup { This files should have been removed: #fontfile }
}

%%%%

V.



reply via email to

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