Autor Thema: Automatisch \include aus Ordner  (Gelesen 2302 mal)

iugin

  • Member
Automatisch \include aus Ordner
« am: Dienstag, 4. Oktober 2016, 09:46 »
Hallo miteinander

ich bin sicher, die Lösung ist schon irgendwie im Forum, ich finde sie aber nicht :-)
Ich möchte eine Funktion, welche alle ly-Dateien in einem Ordner liest, und in Dokument einfügt.
Ok, ist sicher nicht klar so...
Also: ich habe ein Ordner, nennen wir es Ordner. Drin sind 3 Files: Music.ly, Song.ly, Trallala.ly.
Ich möchte ein Befehl haben wie z.B.:
\version "2.18.2"
\loadFiles "Ordner"
und Lilypond sieht das:
\version "2.18.2"
\include "Ordner/Music.ly"
\include "Ordner/Song.ly"
\include "Ordner/Trallala.ly
In Google habe ich etwas gesucht wie "Scheme list files directory" oder so, aber bin nicht wirklich findig geworden... :(

Einen lieben Gruss und danke

Eugenio

Manuela

  • Member
Re: Automatisch \include aus Ordner
« Antwort #1 am: Dienstag, 4. Oktober 2016, 10:52 »
Lösung habe ich keine, aber zwei Links, die vll. weiterhelfen

Including a file only once
conditional include

Hier habe ich das gefunden

Here is an example showing how to display all the entries in a directory:

(define dir (opendir "/usr/lib"))
(do ((entry (readdir dir) (readdir dir)))
    ((eof-object? entry))
  (display entry)(newline))
(closedir dir)
« Letzte Änderung: Dienstag, 4. Oktober 2016, 11:09 von Manuela »

fugenkomponist

  • Member
Re: Automatisch \include aus Ordner
« Antwort #2 am: Dienstag, 4. Oktober 2016, 12:10 »
Auf Manuelas letzter Idee aufbauend:
loadFiles =
#(define-void-function (dir-name) (string?)
   (let ((dir (opendir dir-name)))
     (do ((entry (readdir dir) (readdir dir)))
       ((eof-object? entry))
       (if (string-suffix? "ly" entry)
           (ly:parser-include-string
            (string-append
             "\\include \"" dir-name "/" entry "\""))))
     (closedir dir)))
Das bindet alles ein, was auf "ly" endet, also .ly- und .ily-Dateien, aber auch Verzeichnisse mit solchen Namen (die sollten also lieber nicht existieren).

iugin

  • Member
Re: Automatisch \include aus Ordner
« Antwort #3 am: Mittwoch, 5. Oktober 2016, 11:13 »
Hallo miteinander

danke für die Antworte :-)
Die Lösung von Fugenkomponist gibt mir folgenden Fehler:
Zitat
Analysieren.../usr/local/lilypond/usr/share/lilypond/current/scm/ly-syntax-constructors.scm:56:23: In expression (apply (ly:music-function-extract fun) parser ...):
/usr/local/lilypond/usr/share/lilypond/current/scm/ly-syntax-constructors.scm:56:23: Wrong number of arguments to #<procedure #f (dir-name)>
Wurde mit dem Return-Code 1 beendet.
Ist die Scheme-Funktion vielleicht für eine andere Version als Lilypond 2.18.2 gedacht?

Lieber Gruss

Eugenio

harm6

  • Member
Re: Automatisch \include aus Ordner
« Antwort #4 am: Mittwoch, 5. Oktober 2016, 11:42 »
Yep, für 2.18.2 verwende:

#(define-void-function (parser location dir-name) (string?)
...


Gruß,
  Harm

fugenkomponist

  • Member
Re: Automatisch \include aus Ordner
« Antwort #5 am: Mittwoch, 5. Oktober 2016, 12:17 »
Oh, sorry, gleich zwei Fehler meinerseits (1. du hast ne Version angegeben und ich hab sie nicht beachtet, 2. ich hab meine Version nicht angegeben).

Es wär wirklich schön, wenn die 2.20 bald käme.

iugin

  • Member
Re: Automatisch \include aus Ordner
« Antwort #6 am: Mittwoch, 5. Oktober 2016, 12:56 »
Hallo miteinander

es läuft immer noch nicht:
Zitat
Analysieren.../Dokumente/Lilypond/Li_Einsingen/Einsingen.ly:15:12: In procedure ly:parser-include-string in expression (ly:parser-include-string (string-append "\\include \"" dir-name ...)):
/Dokumente/Lilypond/Li_Einsingen/Einsingen.ly:15:12: Wrong number of arguments to #<primitive-procedure ly:parser-include-string>
Wurde mit dem Return-Code 1 beendet.

:)

Lieber Gruss und danke

Eugenio

fugenkomponist

  • Member
Re: Automatisch \include aus Ordner
« Antwort #7 am: Mittwoch, 5. Oktober 2016, 12:59 »
Sorry, ly:parser-include-string braucht dann natürlich auch diesen parser als Argument, da hab ich nicht dran gedacht:\version "2.18.2"

loadFiles =
#(define-void-function (parser location dir-name) (string?)
   (let ((dir (opendir dir-name)))
     (do ((entry (readdir dir) (readdir dir)))
       ((eof-object? entry))
       (if (string-suffix? "ly" entry)
           (ly:parser-include-string
            parser
            (string-append
             "\\include \"" dir-name "/" entry "\""))))
     (closedir dir)))
Das sollte jetzt gehen, ist mit 2.18.2 getestet ;)

iugin

  • Member
Re: Automatisch \include aus Ordner
« Antwort #8 am: Mittwoch, 5. Oktober 2016, 19:08 »
Es läuft super, danke vielmals!

Lieber Gruss

Eugenio