Skip to content

Commit

Permalink
* see #38 refined documentation of Configuration
Browse files Browse the repository at this point in the history
* now the lamdas are properly resolved.

* Updated changes in manual
* updated hints for vertical layout in manual (#167)
  • Loading branch information
bwl21 committed Sep 8, 2017
1 parent 71e9ef7 commit b7e8a7b
Show file tree
Hide file tree
Showing 9 changed files with 752 additions and 4,256 deletions.
5 changes: 3 additions & 2 deletions 30_sources/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* tuplet lines are now correct in pdf (#139)
* no longer have unexpected subflowlines to unisons (#140)
* fixed size of smaall notes (#143)
* player also plays until tied notes edn (#147)
* player also plays until end of tied notes (#147)
* decorations now also work on rests (#127)
* shift now also works on unisons (#107)
* abc2svg settings no longer necessary in tunes (removed from Template) (#71)
Expand Down Expand Up @@ -38,6 +38,7 @@
* rearranged "Edit Configuration" Menu to improve configuration workflow (#171)
* now suppoert tilde as non braeking space in lyrics, stringnames, annotations #113
* now suppoert quoted tilde as non braeking space in lyrics, stringnames, annotations #113
* layoutlines is now the combination of voices and layoutlines (#175).

## internal stuff

Expand All @@ -53,7 +54,7 @@
## backwards compatibility issues

* layoutlines is now the combination of voices and layoutlines.
It is no longer possible to show voices without considering them in the layout.
It is no longer possible to show voices without considering them in the layout (#175)
* Default for "filenamepart" is now as it was in 1.5 (#155)
* tuplet configuration is now under 'notebound': meed to rework in the sheets - sorry! (#168)
* transposititions are no longer exposed in legend (#174)
Expand Down
Binary file not shown.
59 changes: 42 additions & 17 deletions 30_sources/SRC_Zupfnoter/src/conf_doc_source.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,34 @@
require 'init_conf'
require 'confstack'

HELP_DE_INPUT = "localization/help_de-de.md"
HELP_DE_INPUT = "localization/help_de-de.md"
HELP_DE_OUTPUT_MD = "../../UD_Zupfnoter-Handbuch/090_UD_Zupfnoter-Konfiguration.md"


# init_conf uses symbols. This does not matter in Opal
# but ruby it is a difference. So we have to stringify the keys.
class Hash
# Returns a deep copy of hash.
#
# hash = { a: { b: 'b' } }
# dup = hash.deep_dup
# dup[:a][:c] = 'c'
#
# hash[:a][:c] # => nil
# dup[:a][:c] # => "c"
def stringify_keys
hash = {}
each_pair do |key, value|
if value.is_a? Hash
hash[key.to_s] = value.stringify_keys
else
hash[key.to_s] = value
end
end
hash
end
end

class ConfDocProvider

attr_reader :entries_html, :entries_md
Expand Down Expand Up @@ -47,18 +72,19 @@ def get_example(conf, key)
:limit_a3, :LINE_THIN, :LINE_MEDIUM, :LINE_THICK, :ELLIPSE_SIZE, :REST_SIZE, # sort within laoyut
"0", "1", "2", "3", "4", "5", "6", :verses, # extracts
:cp1, :cp2, :shape, :pos, :hpos, :vpos, :spos, :text, :style, :marks # tuplets annotations
],
].map{|i| i.to_s},
[]],
}
k = key.split(".").last

%Q{
"#{k}": #{JSON.neat_generate(conf[key], neatjson_options)}
}.split("\n").map { |l| " #{l}" }.join("\n")
}.split("\n").map {|l| " #{l}"}.join("\n")
end

a=ConfDocProvider.new

File.open(HELP_DE_INPUT).read.scan(/## ([^\n]*)([^#]*)/).sort_by{|i|i[0]}.each do |match|
File.open(HELP_DE_INPUT).read.scan(/## ([^\n]*)([^#]*)/).sort_by {|i| i[0]}.each do |match|
a.insert(match[0], match[1])
end

Expand All @@ -74,42 +100,41 @@ def get_example(conf, key)
$conf_helptext = a.entries_html

ignore_patterns = [/^neatjson.*/, /abc_parser.*/, /^extract\.[235].*/, /^defaults.*/, /^templates.*/, /^annotations.*/, /^extract\.[1234]/,
/^layout.*/, /^extract\.0$/, /^presets\.layout\..*$/
/^layout.*/, /^extract\.0$/, /^presets$/, /^presets\..*$/
]
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"]
produce_patterns = [/annotations\.vl/, /^templates\.tuplets/, /^extract$/, /^templates/, /^annotations/, /^presets\.notes/]
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'))

$conf = Confstack.new(false)
$conf.push(JSON.parse(InitConf.init_conf.to_json))
$conf['presets.layout.layout_regular'] = nil # This is a lambda which needs to be suppressed for documentation
$conf['presets.layout.packer_regular'] = nil # This is a lambda which needs to be suppressed for documentation
$conf = Confstack.new(false)
$conf.push(InitConf.init_conf.stringify_keys)

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 + extra_keys).uniq.sort_by { |k| k.gsub('templates', 'extract.0') }
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 + extra_keys).uniq.sort_by {|k| k.gsub('templates', 'extract.0')}

mdhelp = []
show_keys.sort.each do |key|
show_key = key #.gsub(/^templates\.([a-z]+)(\.)/){|m| "extract.0.#{$1}.0."}

candidate_keys = I18n.get_candidate_keys(key)
candidates = candidate_keys.map { |c| a.entries_md[c.join('.')] }
candidates = candidate_keys.map {|c| a.entries_md[c.join('.')]}

helptext = candidates.compact.first || %Q{TODO: Helptext für #{key} einfügen }
keyparts = key.split(".")

#\\index{#{keyparts.last.gsub("_", "-")}}\\index{#{keyparts.join(",").gsub("_", "-")}}

require 'pry'

result = %Q{
## `#{show_key}` - #{locale['phrases'][key.split(".").last]} {##{show_key}}
#{helptext}
#{get_example($conf, key) rescue ""}
#{get_example($conf, key) rescue "... kein Beispiel verfügbar ..."}
}
mdhelp.push result
end
Expand Down Expand Up @@ -178,5 +203,5 @@ def get_example(conf, key)
end

File.open("x.locales.template", "w") do |f|
f.puts keys.sort.to_a.map { |v| %Q{"#{v}": "**--#{v}"} }.uniq.sort_by { |i| i.upcase }.join(",\n")
f.puts keys.sort.to_a.map {|v| %Q{"#{v}": "**--#{v}"}}.uniq.sort_by {|i| i.upcase}.join(",\n")
end
53 changes: 46 additions & 7 deletions 30_sources/UD_Zupfnoter-Handbuch/040_UD-Zupfnoter-Referenz.md
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,10 @@ und das Einelgen in das Instrument zu vereinfachen:
> \ref{extract.0.stringnames}
> [extract.0.stringnames](#extract.0.stringnames)).
> **Hinweis**: Wenn einzelne Saiten nicht beschriftet werden sollen,
> kann als Saitenname eine Tilde ('\~) angegeben werden. Diese
> erscheint dann als festes Leerzeichen.
- **(38) marks - Saitenmarke** Die Saitenmarken sind eine Hilfe zum
korrekten Einlegen der Unterlegnoten in die Tischharfe. Das Blatt
muss so in die Tischharfe eingelegt werden, dass die Marken unter
Expand Down Expand Up @@ -1481,7 +1485,7 @@ zu bieten hat :-). Aber mit der Maus geht es ganz einfach:
> aufrufen und den Kontrollpunkt so ändern, dass er wireder sichtbar
> wird.
## Flußlinien gestalten
## Flußlinien gestalten {#flowconf}

Bei manchen Stücken kommt es vor, dass die Flußlinie einer Stimme durch
die Begleintnoten verläuft. In diemesm Fall muss man ggf. die Flußlinie
Expand Down Expand Up @@ -1810,13 +1814,48 @@ relevante Beispiele
> Bitte vermeide das, weil Zupfnoter dafür nicht ausgelegt ist und das
> Verhalten noch nicht ausgetestet ist.
### Wenn die vertikale Anodrnung optimiert werden soll
### Wenn die vertikale Anordnung optimiert werden soll

Zupfnoter errechnet die vertikale Anordnung der Noten selbständig und
erreicht auch gute Ergebnisse. In Grenzsituationen (z.B. bei langen
Stücken) ist eine manuelle Korrektur sinnvoll. Diese Optimierungen
sollten in folgender Reihenfolge ausgeführt werden.

1. in `extract.0.layoutlines` über die Grundeinstellungen eine `0`
eintragen. Diese führt dazu, dass nur noch die Stimmen, die auf dem
Blatt dargestellt werden, auch für die Berechnung vertikalen
Anordnung berücksichtigt werden. Damit entstehen keine scheinbar
unmotivierten Vorschübe.

2. Synchronisationslinien abschalten (das Feld im Edior löschen oder
'0-1' eintragen). Bei shr vollen Blättern verwirren die
Synchronisationslinene mehr als sie helfen.

3. im Konfigurationsmenü `Layout` mit den Schnelleinstellungen
`layout` `kompakt` bzw. `Packer` `kompakt` die beste Einstellung
suchen

4. ggf. gebundene Noten zu einer Note zusammenfassen

5. Den vertikalen Vorschub manuell steuern. Die Möglichkeiten dazu sind
in
Kapitel \ref{extract.0.notebound.minc} [`minc`](#extract.0.notebound.minc)
beschrieben.

6. Die Flußlinie gestalten (siehe Kapitel \ref{flowconf} [Flußlinien
gestalten](#flowconf))

### feste Leerzeichen in Texten

Zupfnoter wandelt eine Tilde ('\~') in Texten in feste Leerzeichen um.
Anwendungsfälle hierfür sind:

- Einrückungen in Liedtexten, so dass Noten ggf. in den Text ragen
können
- Besondere Saitenbeschriftungen, welche Leerzeichen enthalten sollen

Es kann vorkommen, dass man in das vertikale Layout eingreifen muss,
z.B. wennd ie Flussline einer Stimme durch eine Noten einer anderen
Stimme läüft. Die Möglichkeiten dazu sind in
Kapitel \ref{extract.0.notebound.minc} [`minc`](#extract.0.notebound.minc)
beschrieben.
> **Hinweis**: Sollte je doch eine Tilde benötigt werden kann diese mit
> maskiert werden, z.B. '`das\~ist`' ergibt '`das~ist`'.
### Extra Einstellungen für die Notenvorschau

Expand Down
Loading

0 comments on commit b7e8a7b

Please sign in to comment.