Allgemein > Allgemeine Diskussion

ly -> JSON ?

<< < (2/2)

jps:
Sorry, das hatte ich vergessen zu erwähnen: Dein Code läuft auch unter Windows. Das hatte ich sofort probiert. Hab jetzt nur erst mal keine Zeit mehr, die Sachen inhaltlich durchzuarbeiten (was ich aber definitiv machen werde).

harm6:
Bei
#(write-me  "\n(command-line): \n"(command-line))
erhalte ich:
("/home/harm/lilypond-git/build/out/bin/lilypond" "atest-31.ly")
EDIT: zur Zeit des Aufrufs von (command-line) bin ich im selben Ordner wie atest-31.ly

Letztendlich versuchst Du dann daraus einen substring auszulesen von 51 bis 40.
Kann natürlich nicht klappen.

Ich schrieb ja schon über die Verwundbarkeit von substring. Aber warum überhaupt (zumindest so früh) einen string erzeugen und manipulieren.
Tatsächlich mußte ich 'object->string' nachschlagen, hatte es noch nie vorher verwendet.

(command-line) liefert ja eine Liste (von strings), diese Liste kann man ja erst mal bearbeiten.
Wenn man dann den string isoliert hat auf den es ankommt, dann kann man immer noch mit der string-manipulation anfangen.

Gruß,
  Harm

jps:
Dann ist ja klar, woran es liegt. Kann die Sache aktuell wie gesagt nicht wirklich aktiv weiterverfolgen.

In Eile nur:   #(write-me  "\n(command-line): \n"(command-line))
spuckt bei mir den absoluten Pfad komplett als letzten String aus:
"C:\\Program Files (x86)\\LilyPond\\usr\\bin\\lilypond-windows.exe" "-ddelete-intermediate-files" "-dpoint-and-click" "--pdf" "C:/Users/Jost_2/Desktop/ly2json_test.ly"

Daher kam mein Ansatz.

Übrigens habe ich jetzt gesehen, dass event-listener.ly (mit Lilypond mitgeliefert) es im Prinzip genauso macht wie ich (wenn ich das auf die Schnelle richtig sehe).
Das dürfte dann doch wahrscheinlich unter Linux auch nicht laufen?

Herzliche Grüße
Jost

harm6:

--- Zitat ---Übrigens habe ich jetzt gesehen, dass event-listener.ly (mit Lilypond mitgeliefert) es im Prinzip genauso macht wie ich (wenn ich das auf die Schnelle richtig sehe).
Das dürfte dann doch wahrscheinlich unter Linux auch nicht laufen?

--- Ende Zitat ---

Auszug aus event-listener.ly:

--- Zitat ---#(define (filename-from-staffname context)
   "Constructs a filename in the form
@file{@var{original_filename}-@var{staff_instrument_name}.notes} if the
staff has an instrument name.  If the staff has no instrument
name, it uses "unnamed-staff" for that part of the filename."
   (let* ((inst-name (ly:context-property context 'instrumentName)))
     (string-concatenate (list
                          (substring (object->string (command-line))
                           ;; filename without .ly part
                           (+ (string-rindex (object->string (command-line)) #\sp) 2)
                           (- (string-length (object->string (command-line))) 5))
                          "-"
                          (if (string? inst-name)
                              inst-name
                            "unnamed-staff")
                          ".notes"))))
--- Ende Zitat ---

Wenn Du die markierte Zeile betrachtest, so unterscheidet sie sich doch wesentlich von Deinem Code:

--- Zitat ---(substring kommandozeile
  (+ (string-rindex kommandozeile #\sp) 2)
  (+ (string-rindex kommandozeile #\/) 1))
--- Ende Zitat ---

In Deinem Code wird nach #\/ gesucht.
Das geht nun mal baden falls im letzten Listeneintrag kein #\/ vorhanden ist.

Nichtsdestotrotz hätte ich es in event-listener.ly anders codiert.

Gruß,
  Harm

fugenkomponist:
Wenn ich das richtig verstehe, ist event-listener.ly eigentlich nur für ein spezielles Projekt namens „vivi“ (welches eigentlich mit LilyPond gar nichts zu tun hat, sondern nur vom gleichen Autor ist) in LilyPond enthalten, oder? Merkwürdig eigentlich, aber das könnte erklären, warum das vielleicht nicht optimal geschrieben ist – es musste vielleicht nur mit einem bestimmten System klarkommen ;)

Edit: es gibt aber einen regression test und LilyPond wird ja i. d. R. unter Linux entwickelt, also müsste es mit Linux definitiv klarkommen … Falls ich hier gerade in ne vollkommen falsche Richtung gehe: Ich hab den Thread ehrlich gesagt nur überflogen.

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln