bin/fretboards_render in fretboards-0.0.5 vs bin/fretboards_render in fretboards-0.1.0

- old
+ new

@@ -1,13 +1,88 @@ #!/usr/bin/env ruby require "fretboards" require "fretboards/renderer/svg" +require "docopt" -# TODO make something useful -terse = ARGV -# puts terse.inspect +doc = <<DOCOPT +Output a SVG fretboard. -fb = Fretboards::Fretboard.new(:tuning => %w{g' c' e' a'}) -fb.terse(ARGV) -renderer = Fretboards::Renderer::Svg.new() -puts renderer.render(fb) \ No newline at end of file +Usage: + #{__FILE__} [options] [<dots>...] + #{__FILE__} (--tuning=<tuning> | --guitar | --ukulele) [options] [<dots>...] + #{__FILE__} -h | --help + #{__FILE__} --version + +Options: + --tuning=<tuning> Tuning of the instrument [default: g' c' e' a']. + --width=<width> Width of the fretboard [default: 108]. + --height=<height> Height of the fretboard [default: 180]. + --fret-count=<fret-count> Number of frets [default: 4]. + --title=<title> Title of the fretboard [default: ]. + -h --help Show this screen. + --version Show version. + +Arguments: + <dots> Dots to be drawn on the fretboard. Defaults to 4 strings and ukulele tuning. Actual tuning pitches are only considered when passing the dot marks as pitches. + +Dots are specified as a sequence of numbers, one per string, starting from 0. Use x for a muted string. + + #{__FILE__} 0 2 1 2 + +You can also specify dots as pitches, a to g. + +- Use `is` suffix for sharp, `es` for flat. +- Use `'` or `,` for octaves up or down. `c'` is middle C. + + #{__FILE__} aes\\' d\\' f\\' b\\' + +Draw guitar fretboard passing `--guitar` or `--guitar-7`: + + #{__FILE__} --guitar x 3 2 0 1 0 + +Use `[` and `]` to indicate barres: + + #{__FILE__} --guitar 1\\[ 3 3 2 1 1\\] + +Mark a dot as root with `!`: + + #{__FILE__} --guitar 3! 2 0 0 3 3 + +Annotate fingerings with `-`: + + #{__FILE__} --guitar 3-2 2-1 0 0 3-3 3-4 + +To place multiple dots on the same string, use `/`: + + #{__FILE__} --guitar 5/6 8/6 5/5 7/5 5/4 7/4 5/3 7/3 5/2 8/2 5/1 8/1 + +Report bugs at https://github.com/choan/fretboards/issues +DOCOPT + +begin + arguments = Docopt::docopt(doc, version: ::Fretboards::VERSION) +rescue Docopt::Exit => e + puts e.message + exit +end + +if arguments['--guitar'] + arguments['--tuning'] = "e, a, d g b e'" +elsif arguments['--guitar-7'] + arguments['--tuning'] = "b,, e, a, d g b e'" +elsif arguments['--ukulele'] + arguments['--tuning'] = "g' c' e' a'" +end + +terse = arguments['<dots>'] +tuning = arguments['--tuning'].split(' ') +title = arguments['--title'] +width = arguments['--width'].to_i +height = arguments['--height'].to_i +fret_count = arguments['--fret-count'].to_i + +fb = Fretboards::Fretboard.new(:tuning => tuning) +fb.title = title unless title.empty? +fb.terse(terse) +renderer = Fretboards::Renderer::Svg.new(width: width, height: height, fret_count: fret_count) +puts renderer.render(fb)