diff --git a/30_sources/CHANGES.md b/30_sources/CHANGES.md index 5735b3d3..e9b1f814 100644 --- a/30_sources/CHANGES.md +++ b/30_sources/CHANGES.md @@ -18,6 +18,7 @@ * now handle multi measure rests (#166) * fix predefined annotations vt and vr * BWC: move Tuplet configuration to notebounds (#168) +* Multiple notebound annotations can now be dragged individually (#170) ## enhancement @@ -34,6 +35,7 @@ * now menu supports extract 0 to extract 5 (#153) * now menu also shows title of extracts (#153) * ctrl-alt 'F' now toggles harp preview +* rearranged "Edit Configuration" Menu to improve configuration workflow (#171) ## internal stuff @@ -43,6 +45,8 @@ * implemented a collision based packer (#89) * implemented validation of config parameters (#85) with result form +* Shape of Flowlines can be configured (#167) + ## backwards compatibility issues @@ -103,7 +107,7 @@ Dragging of jumpline does not work properly on Saitenspiel #158 * in case of multiple `[P:]` respecitvly `[R:]` the now the last one is relevant - best to remove the other ones * now get message if F: is missing * now get messaage Filename or path contains whitespace and special characters -* you have to redo configuration for tuplets (#167 ) +* you have to redo configuration for tuplets (#167) ## known issues diff --git a/30_sources/SRC_Zupfnoter/public/UD_Zupfnoter-Handbuch-de_review.pdf b/30_sources/SRC_Zupfnoter/public/UD_Zupfnoter-Handbuch-de_review.pdf index 2bf8edff..9161c396 100644 Binary files a/30_sources/SRC_Zupfnoter/public/UD_Zupfnoter-Handbuch-de_review.pdf and b/30_sources/SRC_Zupfnoter/public/UD_Zupfnoter-Handbuch-de_review.pdf differ diff --git a/30_sources/SRC_Zupfnoter/public/locale/conf-help_de-de.json b/30_sources/SRC_Zupfnoter/public/locale/conf-help_de-de.json index 2167592c..9f9e5865 100644 --- a/30_sources/SRC_Zupfnoter/public/locale/conf-help_de-de.json +++ b/30_sources/SRC_Zupfnoter/public/locale/conf-help_de-de.json @@ -35,7 +35,6 @@ "layout.color.color_variant2":"

Hier wählst du die Farbe in der variante Abschnitte 2,4,6 etc.\ndargestellt werden.

\n\n
\n

Hinweis Die Farbe von varianten Abnschnitten alterniert zwischen\nvariant1 und variant2. Wenn du beide gleich einstellst, dann werden\ndie varianten Abschnitte gleichermassen eingefärbt.

\n\n

Wenn du beide auf den gleichen wert wie "default" stellst, dann werden\nvariante Abschnitte nicht mehr durch Farbe abgesetzt.

\n
\n", "layout.jumpline_anchor":"

Hier stellst du ein, wie die Sprunglinien an den entsprechenden Noten\nverankert werden. Bitte gib zwei Werte (X, Y) getrennt durch ein Komma\nan. Die Angabe erfolgt in mm und bezieht sich auf den Rand (genauer\ngesagt, das umhüllende Rechteck) der entsprechende Note.

\n", "layout.limit_a3":"

Diese Funktion verschiebt Noten am A3-Blattrand nach innen. Da das\nUnterlegnotenblatt etwas größer ist als A3 würde sonst die Note\nangeshnitten.

\n", - "layout.minc":"

Hier kannst du manuelle Korrekturen im vertikalen Layout vornehmen:

\n\n
\n

Hinweis: Diese Funktion ist nun wirklich für die ganzen Experten.\nBitte verwende sie also nur, wenn du weißt, was du tust.\nAnwendungsfälle für diese Funktion:

\n\n\n
\n\n

Dieser Parameter enthält eine Liste von manuellen Korrekturen. Jeder\nEintrag ändert den Vorschub für einen durch seinen Schlüssel bestimmten\nZeitpunkt.

\n", "layout.packer":"

Hier kannst du weitere Einzelheiten für die vertikale Anordnung der\nNoten konfigurieren. Es sind subtile Feinheiten, welche den Unterschied\nausmachen. Daher sind diese Funktionen noch experimentell.

\n", "layout.packer.pack_max_spreadfactor":"

Nach der Berechnung des maximal komprimierten Layouts versucht\nZufpnoter, dieses so weit zu spreizen, dass die Zeichenfläche voll\nausgefüllt wird.

\n\n

Dieser Faktor bestimmt, wie weit das maximal komprimierte Layout in der\nVertikalen gespreizt werden soll. Das wirkt sich bei kurzen Stücken aus,\nwelche das Blatt nicht vollständig ausfüllen.

\n\n

Bei sehr kurzen Stücken ist es sinnvoll, die Spreizung zu begrenzen,\nweil sonst die Noten sehr weit auseinander liegen.

\n", "layout.packer.pack_method":"

Hier kannst du die pack-Methode auswählen

\n\n\n", @@ -48,6 +47,7 @@ "lyrics.verses":"

Dies ist die Vorgabe für die Liste der Strophen die im Liedtext-Block\nausgegeben werden.

\n", "minc_f":"

Hier gibst du den Korrekturfaktor für den vertikalen Voreschub an.

\n\n

Die Angabe bestimmt, welcher Anteil am errechneten vertikalen Abstand\nals extra Abstand hinzugefügt wird. (a = (a + minc_f * a))

\n\n

Im Beispiel

\n\n
    "minc" : {\n       "2304": {"minc_f": 1}, \n       "4224": {"minc_f": -0.25}\n       }\n
\n\n\n\n

Beispiele:

\n\n\n", "nonflowrest":"

Hier kannst du einstellen, ob in den Begleitstimmen ebenfalls die Pausen\ndargestellt werden sollen. Eine Stimme wird dann Begleitstimme\nbetrachtet, wenn sie keine Flußlinie hat.

\n\n

Normalerweise ist es nicht sinnvoll, in den Begleitstimmen Pausen\ndarzustellen, da der Spieler sich ja an den Pausen in der Flußlinie\norientiert.

\n", + "notebound.minc":"

Hier kannst du manuelle Korrekturen im vertikalen Layout vornehmen:

\n\n
\n

Hinweis: Diese Funktion ist nun wirklich für die ganzen Experten.\nBitte verwende sie also nur, wenn du weißt, was du tust.\nAnwendungsfälle für diese Funktion:

\n\n\n
\n\n

Dieser Parameter enthält eine Liste von manuellen Korrekturen. Jeder\nEintrag ändert den Vorschub für einen durch seinen Schlüssel bestimmten\nZeitpunkt.

\n", "notes":"

Hier kannst du eine Seitenbeschriftungen hinzufügen. Beim Einfügen einer\nSeitenbeschriftung vergibt Zupfnoter eine Nummer anstelle der .0.

\n\n
\n

Hinweis: Es kann aber auch sinnvoll sein eine sprechende\nBezeichnung für die Beschriftung manuell vorzugeben um ihrer\nspezifische Verwendung hervorzuheben z.B. notes.T_Copyright. Das ist\nallerdings nur in der Textansicht möglich.

\n
\n", "notes.0.T01_number":"

Dieses Template fügt eine Nummer im Notenblatt ein. Damit kannst du\ndeine eigenen Ordnungskriterien realiseren.

\n\n

Das vorgesehene Numernschema setzt sich aus zwei Blöcken zusammen

\n\n\n\n

Beispiel: BWL-001 - Bernhard Weichel - Blatt 001

\n", "notes.0.pos":"

Hier gibst du die Position der Seitenbeschriftung an, an welcher der\nLiedtext-Block ausgegeben werden soll. Angabe erfolgt in mm als\nkommagetrennte Liste von horizontaler / vertikaler Position.

\n", @@ -87,7 +87,7 @@ "style":"

Hier kannst du den Stil für den Text einstellen. Du hast eine Auswahl\naus vordefinierten Stilen.

\n", "templates":"

Dieser Parameter kann nicht vom Benutzer gesetzt werden sondern liefert\ndie Vorlagen beim Einfügugen neuer Liedtext-Blöcke bzw.\nSeitenbeschriftungen etc.

\n\n

Er ist hier aufgeführt, um die Vorlagen selbst zu dokumentieren.

\n", "text":"

Hier gibst du den Text, der ausgegeben werden soll. Dieser Text kann\nauch mehrzeilig sein

\n", - "tuplet":"

Hier kannst du die Darstellung von Triolen (genauer gesagt, von Tuplets)\nsteuern.

\n\n
\n

Hinweis: diese Einstellungen wirken immer auf alle Tuplets aller\nStimmen, die zum gleichen Zeitpunkt gespielt werden.

\n\n

Wenn du die Tuplets individuell konfigurieren möchtest, ist es\nnotwendig, eine "Verschiebemarke" vor das tuplet zu setzen. Dabei ist\nes möglich, mehrere Tuplets gemeinsam zu konfigurieren wenn man die\nVerschiebemarken gleich benennt.

\n\n

Z.B. kann man eine Verschiebemarke tpl_links an alle tuplets\nschreiben, deren Bogen links von der FLußlineie liegen soll. Diese\nkönnen dann über den parameter extract.0.tuplet.tpl_links gemeinsam\nkonfiguriert werden

\n
\n", + "tuplet":"

Hier kannst du die Darstellung von Triolen (genauer gesagt, von Tuplets)\nsteuern.

\n\n
\n

Hinweis:

\n\n

Wenn du mehrere Tuplets gemeinsam konfigurieren möchtest, ist es\nnotwendig, eine "Verschiebemarke" vor die betroffene tuplet zu setzen.\nDabei ist es möglich, mehrere Tuplets gemeinsam zu konfigurieren wenn\nman die Verschiebemarken gleich benennt.

\n\n

Z.B. kann man eine Verschiebemarke tpl_links an alle tuplets\nschreiben, deren Bogen links von der FLußlineie liegen soll. Diese\nkönnen dann über den parameter extract.0.tuplet.tpl_links gemeinsam\nkonfiguriert werden

\n
\n", "tuplet.0":"

Hier kannst du die Darstellung einer Triole (genauer gesagt, eines\nTuplets) steuern.

\n", "tuplet.show":"

Hier gibst du an, ob das Tuplet ausgegeben werden soll.

\n", "voices":"

Hier gibst du eine Liste von Sstimmen als (durch Komma getrennte) Liste\nvon Nummern an. Die Nummer ergibt sich aus der Reihnfolge in der\n%%score - Anweisung in der ABC-Notation.

\n", diff --git a/30_sources/SRC_Zupfnoter/public/locale/de-de.json b/30_sources/SRC_Zupfnoter/public/locale/de-de.json index 29d18749..3a708046 100644 --- a/30_sources/SRC_Zupfnoter/public/locale/de-de.json +++ b/30_sources/SRC_Zupfnoter/public/locale/de-de.json @@ -165,6 +165,7 @@ "before_colon_n": "**--before_colon_n", "beforeColonN": "beforeColonN", "bold": "fettdruck", + "c_jumplines": "Sprunglinien", "Choose extract": "Auszug wählen", "color": "Farbeinstellung", "color_default": "Sonstiges", @@ -179,6 +180,7 @@ "could not find extract with number": "Es gibt keinen Auszug mit nummer", "could not open file": "konnte Datei nicht öffnen", "countnotes": "Zählmarken", + "countnote": "Zählmarke", "cp1": "cp1", "cp2": "cp2", "Create new sheet": "Neues Blatt erstellen", @@ -198,6 +200,7 @@ "d64": "**--d64", "d8": "**--d8", "decimals": "Dezimalstellen", + "decoration": "Dekoration", "default": "Vorgabewert", "defaults": "Vorgabewerte", "Demo": "Demonstration", @@ -228,10 +231,12 @@ "Edit printer correction paerameters": "Druckeranpassungen bearbeiten", "edit settings for lyrics\nin current extract": "Einstellungen für Liedtexte bearbeiten\nim aktuellen Auszug", "edit settings for sheet annotations\nin current extract": "Einstellungen für Seitenbeschriftung bearbeiten", + "edit shape of repeat signs": "Darstellung der Wiederholungszeichen bearbeiten", "editor and harpnotes\napplicaple to tweak the notes for harp": "Zeige ABC und Harfennoten\ngeeignet zur Feinkorektur\nim Unterlegnotenblatt", "editor and notes\napplicable to enter notes": "Zeige ABC und Notendarstellung\ngeeignet zur Eingabe von Noten", "Effective value": "aktuell wirksamer Wert", "ELLIPSE_SIZE": "Notengröße", + "Empty voice": "Stimme ist leer", "end-of-translagion": "end-of-translation", "enter a page bound annotation": "Seitengebundene Beschriftung\nanlegen/bearbeiten", "Enter Harp": "Harfeneingabe", @@ -280,7 +285,7 @@ "insert a title for the \ncurrent extract": "Titel für den aktuellen\n Auszug einfügen", "Insert addon at cursor position": "Zusatzinformation an der Cursor-Position einfügen", "Insert Addon": "Zusatz einfügen", - "instrument specific": "Intrument spez.", + "instrument specific": "Intrumentspezifika", "instrument": "Instrument", "Interact with dropbox": "Arbeiten mit Dropbox", "italic": "kursiv", @@ -394,6 +399,7 @@ "regular": "normal", "Render previews": "Vorschauen neu errechnen", "Render": "Rendern", + "repeat signs": "Wiederholungszeichen", "repeatend": "Wiederholungsende", "repeatsigns": "Wiederholungszeichen", "repeatsigns.full": "Wiederholugnszeichen.detail", @@ -461,6 +467,7 @@ "T02_copyright_music": "T02 Copyright Musik", "T03_copyright_harpnotes": "T03 Copyright Unterlegnoten", "T04_to_order": "T04 zu beziehen bei", + "T05_printed_extracts": "T05 verfügbare Auszüge", "T99_do_not_copy": "T99 bitte nicht kopieren", "target to jump to": "Sprungziel", "templates": "Vorlagen", @@ -500,6 +507,7 @@ "Y-position": "Y-position", "Y_SCALE": "Vertikale Skalierung", "you are not logged in to dropbox": "Du bist nicht bei Dropbox angemeldet", + "you have multiple %%score statements": "Du hast mehr als eine %%score Zeile", "you need to logout if you want to change the application scope": "Du musst dich abmelden um den Zugriffstyp zu ändern", "Zombie Accesstoken revoked; do not use Browser back after login to dropbox": "Zombie Zugriffstoken gelöscht. Bitte drücke nicht die ZURÜCK-Taste des Borwsers nach dem Einloggen in Dropbox.", "Zombie token or zombie login occured. Maybe you hit the back button in the browser.": "Zombie Zugriffstoken oder login aufgetreten. Bitte drücke nicht die ZURÜCK-Taste des Borwsers nach dem Einloggen in Dropbox.", diff --git a/30_sources/SRC_Zupfnoter/src/abc2svg_to_harpnotes.rb b/30_sources/SRC_Zupfnoter/src/abc2svg_to_harpnotes.rb index 1b33fbf4..9dbb164a 100644 --- a/30_sources/SRC_Zupfnoter/src/abc2svg_to_harpnotes.rb +++ b/30_sources/SRC_Zupfnoter/src/abc2svg_to_harpnotes.rb @@ -716,7 +716,7 @@ def _make_notebound_annotations(entity, voice_id) result = [] if entity.is_a? Harpnotes::Music::Playable chords =_extract_chord_lines(entity.origin[:raw]) - chords.each do |name| + chords.each_with_index do |name, index| match = name.match(/^([!#\<\>])([^\@]+)?(\@(\-?[0-9\.]+),(\-?[0-9\.]+))?$/) if match @@ -744,7 +744,8 @@ def _make_notebound_annotations(entity, voice_id) if annotation notepos = [pos_x, pos_y].map {|p| p.to_f} if pos_x position = notepos || annotation[:pos] || $conf['defaults.notebound.annotation.pos'] - conf_key = "notebound.annotation.#{voice_id}.#{entity.znid}.pos" if entity.znid + conf_key = "notebound.annotation.#{voice_id}.#{entity.znid}.pos" if entity.znid # todo: not sure if we really nedd this if; maybe it was before we compute znid by time + conf_key = "notebound.annotation.#{voice_id}.#{entity.znid}.#{index}.pos" if index > 0 result << Harpnotes::Music::NoteBoundAnnotation.new(entity, {style: annotation[:style], pos: position, text: annotation[:text]}, conf_key) end else diff --git a/30_sources/SRC_Zupfnoter/src/conf_doc_source.rb b/30_sources/SRC_Zupfnoter/src/conf_doc_source.rb index a4004c05..15cd5dfd 100644 --- a/30_sources/SRC_Zupfnoter/src/conf_doc_source.rb +++ b/30_sources/SRC_Zupfnoter/src/conf_doc_source.rb @@ -77,7 +77,7 @@ def get_example(conf, key) /^layout.*/, /^extract\.0$/, /^presets\.layout\..*$/ ] produce_patterns = [/annotations\.vl/, /^templates\.tuplets/, /^extract$/, /^templates/, /^annotations/] - +extra_keys = ['extract.0.notebound.minc', 'extract.0.notebound.minc.x.minc_f', "extract.0.notebound.tuplet"] locale = JSON.parse(File.read('../public/locale/de-de.json')) @@ -88,7 +88,7 @@ def get_example(conf, key) ignore_keys = $conf.keys.select { |k| ignore_patterns.select { |ik| k.match(ik) }.count > 0 } produce_keys = $conf.keys.select { |k| produce_patterns.select { |ik| k.match(ik) }.count > 0 } -show_keys = ($conf.keys - ignore_keys + produce_keys).uniq.sort_by { |k| k.gsub('templates', 'extract.0') } +show_keys = ($conf.keys - ignore_keys + produce_keys + extra_keys).uniq.sort_by { |k| k.gsub('templates', 'extract.0') } mdhelp = [] show_keys.sort.each do |key| @@ -109,7 +109,7 @@ def get_example(conf, key) #{helptext} - #{get_example($conf, key)} + #{get_example($conf, key) rescue ""} } mdhelp.push result end diff --git a/30_sources/SRC_Zupfnoter/src/config-form.rb b/30_sources/SRC_Zupfnoter/src/config-form.rb index d4c530a5..cc78471e 100644 --- a/30_sources/SRC_Zupfnoter/src/config-form.rb +++ b/30_sources/SRC_Zupfnoter/src/config-form.rb @@ -43,13 +43,14 @@ def self.to_template(key) template = key.split('.')[-2] # templates are for "extract....