From 4bfe4cfc5821a779e8ad1393765ffd0d269c5120 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Fri, 24 Jul 2015 23:07:41 +0200 Subject: [PATCH 01/44] initial commit --- vexflow/vexflow.d.ts | 1325 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1325 insertions(+) create mode 100644 vexflow/vexflow.d.ts diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts new file mode 100644 index 0000000000..7316987c98 --- /dev/null +++ b/vexflow/vexflow.d.ts @@ -0,0 +1,1325 @@ +// Type definitions for VexFlow v1.2.27 +// Project: http://vexflow.com +// Definitions by: Roman Quiring +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +//inconsistent namespace: this is a helper funtion from tables.js and should not pollute the global namespace! +declare function sanitizeDuration(duration : string) : string; + +declare module Vex { + + function L(block : string, args : any[]) : void; + function Merge(destination : T, source : Object) : T; + function Min(a : number, b : number) : number; + function Max(a : number, b : number) : number; + function RoundN(x : number, n : number) : number; + function MidLine(a : number, b : number) : number; + function SortAndUnique(arr : T, cmp : Function, eq : Function) : T; + function Contains(a : any[], obj : any) : boolean; + function getCanvasContext(canvas_sel : string) : CanvasRenderingContext2D; + function drawDot(ctx : IRenderContext, x : number, y : number, color? : string) : void; + function BM(s : number, f : Function) : void; + function Inherit(child : T, parent : Object, object : Object) : T; + + class RuntimeError { + constructor(code : string, message : string); + } + + class RERR { + constructor(code : string, message : string); + } + + /** + * Helper interface for handling the different rendering contexts (i.e. CanvasContext, RaphaelContext, SVGContext). Not part of VexFlow! + */ + interface IRenderContext { + clear() : void; + setFont(family : string, size : number, weight? : number) : IRenderContext; + setRawFont(font : string) : IRenderContext; + setFillStyle(style : string) : IRenderContext; + setBackgroundFillStyle(style : string) : IRenderContext; + setStrokeStyle(style : string) : IRenderContext; + setShadowColor(color : string) : IRenderContext; + setShadowBlur(blur : string) : IRenderContext; + setLineWidth(width : number) : IRenderContext; + setLineCap(cap_type : string) : IRenderContext; + setLineDash(dash : string) : IRenderContext; + scale(x : number, y : number) : IRenderContext; + resize(width : number, height : number) : IRenderContext; + fillRect(x : number, y : number, width : number, height : number) : IRenderContext; + clearRect(x : number, y : number, width : number, height : number) : IRenderContext; + beginPath() : IRenderContext; + moveTo(x : number, y : number) : IRenderContext; + lineTo(x : number, y : number) : IRenderContext; + bezierCurveToTo(x1 : number, y1 : number, x2 : number, y2 : number, x : number, y : number) : IRenderContext; + quadraticCurveToTo(x1 : number, y1 : number, x2 : number, y2 : number) : void; + arc(x : number, y : number, radius : number, startAngle : number, endAngle : number, antiClockwise : boolean) : IRenderContext; + glow() : IRenderContext; + fill() : IRenderContext; + stroke() : IRenderContext; + closePath() : IRenderContext; + fillText(text : string, x : number, y : number) : IRenderContext; + save() : IRenderContext; + restore() : IRenderContext; + + /** + * canvas returns TextMetrics, SVG returns SVGRect, Raphael returns {width : number, height : number}. Only width is used throughout VexFlow. + */ + measureText(text : string) : {width : number}; + } + + /** + * Helper interface for handling the Vex.Flow.Font object in Vex.Flow.Glyph. Not part of VexFlow! + */ + interface IFont { + glyphs : {x_min : number, x_max : number, ha : number, o : string[]}[]; + cssFontWeight : string; + ascender : number; + underlinePosition : number; + cssFontStyle : string; + boundingBox : {yMin : number, xMin : number, yMax : number, xMax : number}; + resolution : number; + descender : number; + familyName : string; + lineHeight : number; + underlineThickness : number; + + /** + * This property is missing in vexflow_font.js, but present in gonville_original.js and gonville_all.js. + */ + original_font_information? : {postscript_name : string, version_string : string, vendor_url : string, full_font_name : string, font_family_name : string, copyright : string, description : string, trademark : string, designer : string, designer_url : string, unique_font_identifier : string, license_url : string, license_description : string, manufacturer_name : string, font_sub_family_name : string}; + } + + module Flow { + + var RESOLUTION : number; + + // from tables.js: + var STEM_WIDTH : number; + var STEM_HEIGHT : number; + var STAVE_LINE_THICKNESS : number; + var TIME4_4 : {num_beats : number, beat_value : number, resolution : number}; + var unicode : {[name : string] : string}; //inconsistent API: this should be private and have a wrapper function like the other tables + function clefProperties(clef : string) : {line_shift : number}; + function keyProperties(key : string, clef : string, params : {octave_shift? : number}) : {key : string, octave : number, line : number, int_value : number, accidental : string, code : number, stroke : number, shift_right : number, displaced : boolean}; + function integerToNote(integer : number) : string; + function tabToGlyph(fret : string) : {text : string, code : number, width : number, shift_y : number}; + function textWidth(text : string) : number; + function articulationCodes(artic : string) : {code : string, width : number, shift_right : number, shift_up : number, shift_down : number, between_lines : boolean}; + function accidentalCodes(acc : string) : {code : string, width : number, gracenote_width : number, shift_right : number, shift_down : number}; + function ornamentCodes(acc : string) : {code : string, shift_right : number, shift_up : number, shift_down : number, width : number}; + function keySignature(spec : string) : {type: string, line: number}[]; + function parseNoteDurationString(durationString : string) : {duration : string, dots : number, type : string}; + function parseNoteData(noteData : {duration : string, dots : number, type : string}) : {duration : string, type : string, dots : number, ticks : number}; + function durationToFraction(duration : string) : Fraction; + function durationToNumber(duration : string) : number; + function durationToTicks(duration : string) : number; + function durationToGlyph(duration : string, type : string) : {head_width : number, stem : boolean, stem_offset : number, flag : boolean, stem_up_extension : number, stem_down_extension : number, gracenote_stem_up_extension : number, gracenote_stem_down_extension : number, tabnote_stem_up_extension : number, tabnote_stem_down_extension : number, dot_shiftY : number, line_above : number, line_below : number, code_head? : string, rest? : boolean, position? : string}; + + // from glyph.js: + function renderGlyph(ctx : IRenderContext, x_pos : number, y_pos : number, point : number, val : string, nocache : boolean) : void; + + class Accidental extends Modifier { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes + setNote(note : Note) : Modifier; + + constructor(type : string); + static CATEGORY : string; + static DEBUG : boolean; + static format(accidentals : Accidental[], state : {left_shift : number, right_shift : number, text_line : number}) : void; + setNote(note : StaveNote) : void; + setAsCautionary() : Accidental; + draw() : void; + static applyAccidentals(voices : Voice[], keySignature? : string) : void; + } + + export module Annotation { + enum Justify {LEFT, CENTER, RIGHT, CENTER_STEM} + enum VerticalJustify {TOP, CENTER, BOTTOM, CENTER_STEM} + } + + class Annotation extends Modifier { + constructor(text : string); + static CATEGORY : string; + static DEBUG : boolean; + static format(annotations : Annotation[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; + setTextLine(line : number) : Annotation; + setFont(family : string, size : number, weight : string) : Annotation; + setVerticalJustification(just : Annotation.VerticalJustify) : Annotation; + getJustification() : Annotation.Justify; + setJustification(justification : Annotation.Justify) : Annotation; + draw() : void; + } + + class Articulation extends Modifier { + constructor(type : string); + static CATEGORY : string; + static DEBUG : boolean; + static format(articulations : Articulation[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; + draw() : void; + } + + class BarNote extends Note { + static DEBUG : boolean; + getType() : Barline.type; + setType(type : Barline.type) : BarNote; + getBoundingBox() : BoundingBox; + addToModifierContext() : BarNote; + preFormat() : BarNote; + draw() : void; + } + + export module Barline { + enum type {SINGLE, DOUBLE, END, REPEAT_BEGIN, REPEAT_END, REPEAT_BOTH, NONE} + } + + class Barline extends StaveModifier { + constructor(type : Barline.type, x : number); + getCategory() : string; + setX(x : number) : Barline; + draw(stave : Stave, x_shift? : number) : void; + drawVerticalBar(stave : Stave, x : number, double_bar? : boolean) : void; + drawVerticalEndBar(stave : Stave, x : number) : void; + drawRepeatBar(stave : Stave, x : number, begin : boolean) : void; + } + + class Beam { + constructor(notes : StemmableNote[], auto_stem? : boolean); + setContext(context : IRenderContext) : Beam; + getNotes() : StemmableNote[]; + getBeamCount() : number; + breakSecondaryAt(indices : number[]) : Beam; + getSlopeY() : number; + calculateSlope() : void; + applyStemExtensions() : void; + getBeamLines(duration : string) : {start : number, end : number}[]; + drawStems() : void; + drawBeamLines() : void; + preFormat() : Beam; + postFormat() : Beam; + draw() : boolean; + calculateStemDirection(notes : Note) : number; + static getDefaultBeamGroups(time_sig : string) : Fraction[]; + static applyAndGetBeams(voice : Voice, stem_direction : number, groups : Fraction[]) : Beam[]; + static generateBeams(notes : StemmableNote[], config? : {groups? : Fraction[], stem_direction? : number, beam_rests? : boolean, beam_middle_only? : boolean, show_stemlets? : boolean, maintain_stem_directions? : boolean}) : Beam[]; + } + + class Bend { + constructor(text : string, release? : boolean, phrase? : {type : number, text : string, width : number}[]); + static CATEGORY : string; + static UP : number; + static DOWN : number; + static format(bends : Bend[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; + setXShift(value : number) : void; + setFont(font : string) : Bend; + getText() : string; + updateWidth() : Bend; + draw() : void; + } + + class BoundingBox { + constructor(x : number, y : number, w : number, h : number); + static copy(that : BoundingBox) : BoundingBox; + getX() : number; + getY() : number; + getW() : number; + getH() : number; + setX(x : number) : BoundingBox; + setY(y : number) : BoundingBox; + setW(w : number) : BoundingBox; + setH(h : number) : BoundingBox; + move(x : number, y : number) : void; + clone() : BoundingBox; + mergeWith(boundingBox : BoundingBox, ctx? : IRenderContext) : BoundingBox; + draw(ctx : IRenderContext, x : number, y : number) : void; + } + + class CanvasContext implements IRenderContext { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes or type inconsistencies mentioned below are fixed + setLineDash(dash : string) : CanvasContext; + scale(x : number, y : number) : CanvasContext; + resize(width : number, height : number) : CanvasContext; + fillRect(x : number, y : number, width : number, height : number) : CanvasContext; + clearRect(x : number, y : number, width : number, height : number) : CanvasContext; + beginPath() : CanvasContext; + moveTo(x : number, y : number) : CanvasContext; + lineTo(x : number, y : number) : CanvasContext; + bezierCurveToTo(x1 : number, y1 : number, x2 : number, y2 : number, x : number, y : number) : CanvasContext; + quadraticCurveToTo(x1 : number, y1 : number, x2 : number, y2 : number) : CanvasContext; + arc(x : number, y : number, radius : number, startAngle : number, endAngle : number, antiClockwise : boolean) : CanvasContext; + glow() : CanvasContext; + fill() : CanvasContext; + stroke() : CanvasContext; + closePath() : CanvasContext; + fillText(text : string, x : number, y : number) : CanvasContext; + save() : CanvasContext; + restore() : CanvasContext; + + constructor(context : CanvasRenderingContext2D); + static WIDTH : number; + static HEIGHT : number; + clear() : void; + setFont(family : string, size : number, weight? : number) : CanvasContext; + setRawFont(font : string) : CanvasContext; + setFillStyle(style : string) : CanvasContext; + setBackgroundFillStyle(style : string) : CanvasContext; + setStrokeStyle(style : string) : CanvasContext; + setShadowColor(style : string) : CanvasContext; //inconsistent name: style -> color + setShadowBlur(blur : string) : CanvasContext; + setLineWidth(width : number) : CanvasContext; + setLineCap(cap_type : string) : CanvasContext; + + //inconsistent type: void -> CanvasContext + setLineDash(dash : string) : void; + scale(x : number, y : number) : void; + resize(width : number, height : number) : void; + fillRect(x : number, y : number, width : number, height : number) : void; + clearRect(x : number, y : number, width : number, height : number) : void; + beginPath() : void; + moveTo(x : number, y : number) : void; + lineTo(x : number, y : number) : void; + bezierCurveToTo(x1 : number, y1 : number, x2 : number, y2 : number, x : number, y : number) : void; + quadraticCurveToTo(x1 : number, y1 : number, x : number, y : number) : void; //inconsistent name: x -> x2, y -> y2 + arc(x : number, y : number, radius : number, startAngle : number, endAngle : number, antiClockwise : boolean) : void; + glow() : void; + fill() : void; + stroke() : void; + closePath() : void; + measureText(text : string) : TextMetrics; + fillText(text : string, x : number, y : number) : void; + save() : void; + restore() : void; + } + + class Clef extends StaveModifier { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes + addModifier() : void; + addEndModifier() : void; + + constructor(clef : string, size? : string, annotation? : string); + static DEBUG : boolean; + addModifier(stave : Stave) : void; + addEndModifier(stave : Stave) : void; + } + + class ClefNote extends Note { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes + setStave(stave : Stave) : Note; + + constructor(clef : string, size? : string, annotation? : string); + setClef(clef : string, size? : string, annotation? : string) : ClefNote; + getClef() : string; + setStave(stave : Stave) : void; + getBoundingBox() : BoundingBox; + addToModifierContext() : ClefNote; + getCategory() : string; + preFormat() : ClefNote; + draw() : void; + } + + class Crescendo extends Note { + constructor(note_struct : {duration : number, line? : number}); + static DEBUG : boolean; + setLine(line : number) : Crescendo; + setHeight(height : number) : Crescendo; + setDecrescendo(decresc : boolean) : Crescendo; + preFormat() : Crescendo; + draw() : void; + } + + export module Curve { + enum Position {NEAR_HEAD, NEAR_TOP} + } + + class Curve { + constructor(from : Note, to : Note, options? : {spacing? : number, thickness? : number, x_shift? : number, y_shift : number, position : Curve.Position, invert : boolean, cps? : {x : number, y : number}[]}); + static DEBUG : boolean; + setContext(context : IRenderContext) : Curve; + setNotes(from : Note, to : Note) : Curve; + isPartial() : boolean; + renderCurve(params : {first_x : number, first_y : number, last_x : number, last_y : number, direction : number}) : void; + draw() : boolean; + } + + class Dot extends Modifier { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes or type inconsistencies mentioned below are fixed + setNote(note : Note) : Dot; + + static CATEGORY : string; + static format(dots : number, state : {left_shift : number, right_shift : number, text_line : number}) : void; + setNote(note : Note) : void; //inconsistent type: void -> Dot + setDotShiftY(y : number) : Dot; + draw() : void; + } + + var Font : { + glyphs : {x_min : number, x_max : number, ha : number, o : string[]}[]; + cssFontWeight : string; + ascender : number; + underlinePosition : number; + cssFontStyle : string; + boundingBox : {yMin : number, xMin : number, yMax : number, xMax : number}; + resolution : number; + descender : number; + familyName : string; + lineHeight : number; + underlineThickness : number; + + //inconsistent member : this is missing in vexflow_font.js, but present in gonville_original.js and gonville_all.js + original_font_information : {postscript_name : string, version_string : string, vendor_url : string, full_font_name : string, font_family_name : string, copyright : string, description : string, trademark : string, designer : string, designer_url : string, unique_font_identifier : string, license_url : string, license_description : string, manufacturer_name : string, font_sub_family_name : string}; + } + + class Formatter { + static DEBUG : boolean; + static FormatAndDraw(ctx : IRenderContext, stave : Stave, notes : StaveNote[], params : {auto_beam : boolean, align_rests : boolean}) : BoundingBox; + static FormatAndDraw(ctx : IRenderContext, stave : Stave, notes : StaveNote[], params : boolean) : BoundingBox; + static FormatAndDrawTab(ctx : IRenderContext, tabstave : TabStave, stave : Stave, tabnotes : TabNote[], notes : StaveNote[], autobeam : boolean, params : {auto_beam : boolean, align_rests : boolean}) : void; + static FormatAndDrawTab(ctx : IRenderContext, tabstave : TabStave, stave : Stave, tabnotes : TabNote[], notes : StaveNote[], autobeam : boolean, params : boolean) : void; + static AlignRestsToNotes(notes : Note[], align_all_notes? : boolean, align_tuplets? : boolean) : Formatter; + alignRests(voices : Voice[], align_all_notes : boolean) : void; + preCalculateMinTotalWidth(voices : Voice[]) : number; + getMinTotalWidth() : number; + createModifierContexts(voices : Voice[]) : ModifierContext[]; + createTickContexts(voices : Voice[]) : TickContext[]; + preFormat(justifyWidth? : number, rendering_context? : IRenderContext, voices? : Voice[], stave? : Stave) : void; + postFormat() : Formatter; + joinVoices(voices : Voice[]) : Formatter; + format(voices : Voice[], justifyWidth : number, options? : {align_rests? : boolean, context : IRenderContext}) : Formatter; + formatToStave(voices : Voice[], stave : Stave, options? : {align_rests? : boolean, context : IRenderContext}) : Formatter; + } + + class Fraction { + constructor(numerator : number, denominator : number); + static GCD(a : number, b : number) : number; + static LCM(a : number, b : number) : number; + static LCMM(a : number, b : number) : number; + set(numerator : number, denominator : number) : Fraction; + value() : number; + simplify() : Fraction; + add(param1 : Fraction, param2 : Fraction) : Fraction; + add(param1 : number, param2 : number) : Fraction; + subtract(param1 : Fraction, param2 : Fraction) : Fraction; + subtract(param1 : number, param2 : number) : Fraction; + multiply(param1 : Fraction, param2 : Fraction) : Fraction; + multiply(param1 : number, param2 : number) : Fraction; + divide(param1 : Fraction, param2 : Fraction) : Fraction; + divide(param1 : number, param2 : number) : Fraction; + equals(compare : Fraction) : boolean; + greaterThan(compare : Fraction) : boolean; + greaterThanEquals(compare : Fraction) : boolean; + lessThan(compare : Fraction) : boolean; + lessThanEquals(compare : Fraction) : boolean; + clone() : Fraction; + copy(copy : Fraction) : Fraction; + quotient() : number; + fraction() : number; + abs() : Fraction; + toString() : string; + toSimplifiedString() : string; + toMixedString() : string; + parse(str : string) : Fraction; + } + + class FretHandFinger extends Modifier { + constructor(number : number); + static CATEGORY : string; + static format(nums : FretHandFinger[], state : {left_shift : number, right_shift : number, text_line : number}) : void; + getNote() : Note; + setNote(note : Note) : FretHandFinger; + getIndex() : number; + setIndex(index : number) : FretHandFinger; + getPosition() : Modifier.Position; + setPosition(position : Modifier.Position) : FretHandFinger; + setFretHandFinger(number : number) : FretHandFinger; + setOffsetX(x : number) : FretHandFinger; + setOffsetY(y : number) : FretHandFinger; + draw() : void; + } + + class GhostNote extends StemmableNote { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes or type inconsistencies mentioned below are fixed + setStave(stave : Stave) : Note; + + constructor(duration : string); + constructor(note_struct : {type? : string, dots? : number, duration : string}); //inconsistent name : init struct is called 'duration', should be 'params'/'options' (may be string or Object) + isRest() : boolean; + setStave(stave : Stave) : void; //inconsistent type: void -> GhostNote + addToModifierContext() : GhostNote; + preFormat() : GhostNote; + draw() : void; + } + + class Glyph { + constructor(code : string, point : number, options? : {cache? : boolean, font? : IFont}); + setOptions(options? : {cache? : boolean, font? : IFont}) : void; + setStave(stave : Stave) : Glyph; + setXShift(x_shift : number) : Glyph; + setYShift(y_shift : number) : Glyph; + setContext(context : IRenderContext) : Glyph; + getContext() : IRenderContext; + reset() : void; + setWidth(width : number) : Glyph; + getMetrics() : {x_min : number, x_max : number, width : number, height : number}; + render(ctx : IRenderContext, x_pos : number, y_pos : number) : void; + renderToStave(x : number) : void; + static loadMetrics(font : IFont, code : string, cache : boolean) : {x_min : number, x_max : number, ha : number, outline : number[]}; + static renderOutline(ctx : IRenderContext, outline : number[], scale : number, x_pos : number, y_pos : number) : void; + } + + class GraceNote extends StaveNote { + getStemExtension() : number; + getCategory() : string; + draw() : void; + } + + class GraceNoteGroup { + constructor(grace_notes : GraceNote[], show_slur? : boolean); //inconsistent name: 'show_slur' is called 'config', suggesting object (is boolean) + static CATEGORY : string; + static DEBUG : boolean; + static format(gracenote_groups : GraceNoteGroup[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; + preFormat() : void; + beamNotes() : GraceNoteGroup; + setNote(note : Note) : void; + setWidth(width : number) : void; + getWidth() : number; + setXShift(x_shift : number) : void; + draw() : void; + } + + class KeyManager { + constructor(key : string); + setKey(key : string) : KeyManager; + getKey() : string; + reset() : KeyManager; + getAccidental(key : string) : {note : string, accidental : string}; + selectNote(note : string) : {note : string, accidental : string, change : boolean}; + } + + class KeySignature extends StaveModifier { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes + addModifier() : void; + + constructor(key_spec : string); + addAccToStave(stave : Stave, acc : {type : string, line : number}, next? : {type : string, line : number}) : void; + cancelKey(spec : string) : KeySignature; + addModifier(stave : Stave) : KeySignature; + addToStave(stave : Stave, firstGlyph? : boolean) : KeySignature; + convertAccLines(clef : string, type : string) : void; + } + + export module Modifier { + enum Position {LEFT, RIGHT, ABOVE, BELOW} + } + + class Modifier { + static CATEGORY : string; + static DEBUG : boolean; + getCategory() : string; + getWidth() : number; + setWidth(width : number) : Modifier; + getNote() : Note; + setNote(note : Note) : Modifier; + getIndex() : number; + setIndex(index : number) : Modifier; + getContext() : IRenderContext; + setContext(context : IRenderContext) : Modifier; + getModifierContext() : ModifierContext; + setModifierContext(c : ModifierContext) : Modifier; + getPosition() : Modifier.Position; + setPosition(position : Modifier.Position) : Modifier; + setTextLine(line : number) : Modifier; + setYShift(y : number) : Modifier; + setXShift(x : number) : void; //inconsistent type: void -> Modifier + draw() : void; + } + + class ModifierContext { + static DEBUG : boolean; + addModifier(modifier : Modifier) : ModifierContext; + getModifiers(type : string) : Modifier[]; + getWidth() : number; + getExtraLeftPx() : number; + getExtraRightPx() : number; + getState() : {left_shift : number, right_shift : number, text_line : number}; + getMetrics() : {width : number, spacing : number, extra_left_px : number, extra_right_px : number}; + preFormat() : void; + postFormat() : void; + } + + class Music { + static NUM_TONES : number; + isValidNoteValue(note : number) : boolean; + isValidIntervalValue(interval : number) : boolean; + getNoteParts(noteString : string) : {root : string, accidental : string}; + getKeyParts(noteString : string) : {root : string, accidental : string, type : string}; + getNoteValue(noteString : string) : number; + getIntervalValue(intervalString : string) : number; + getCanonicalNoteName(noteValue : number) : string; + getCanonicalIntervalName(intervalValue : number) : string; + getRelativeNoteValue(noteValue : number, intervalValue : number, direction? : number) : number; + getRelativeNoteName(root : string, noteValue : number) : string; + getScaleTones(key : string, intervals : number[]) : number; + getIntervalBetween(note1 : number, note2 : number, direction? : number) : number; + createScaleMap(keySignature : string) : {[rootName : string] : string}; + } + + class Note extends Tickable { + constructor(note_struct : {type? : string, dots? : number, duration : string}); + static CATEGORY : string; + getPlayNote() : any; + setPlayNote(note : any) : Note; + isRest() : boolean; + addStroke(index : number, stroke : Stroke) : Note; + getStave() : Stave; + setStave(stave : Stave) : Note; + getCategory() : string; + setContext(context : IRenderContext) : Note; + getExtraLeftPx() : number; + getExtraRightPx() : number; + setExtraLeftPx(x : number) : Note; + setExtraRightPx(x : number) : Note; + shouldIgnoreTicks() : boolean; + getLineNumber() : number; + getLineForRest() : number; + getGlyph() : Glyph; + setYs(ys : number[]) : Note; + getYs() : number[]; + getYForTopText(text_line : number) : number; + getBoundingBox() : BoundingBox; + getVoice() : Voice; + setVoice(voice : Voice) : Note; + getTickContext() : TickContext; + setTickContext(tc : TickContext) : Note; + getDuration() : string; + isDotted() : boolean; + hasStem() : boolean; + getDots() : number; + getNoteType() : string; + setBeam() : Note; + setModifierContext(mc : ModifierContext) : Note; + addModifier(modifier : Modifier, index? : number) : Note; + getModifierStartXY() : {x : number, y : number}; + getMetrics() : {width : number, noteWidth : number, left_shift : number, modLeftPx : number, modRightPx : number, extraLeftPx : number, extraRightPx : number}; + setWidth(width : number) : void; + getWidth() : number; + setXShift(x : number) : Note; + getX() : number; + getAbsoluteX() : number; + setPreFormatted(value : boolean) : void; + } + + class NoteHead extends Note { + constructor(head_options : {x? : number, y? : number, note_type? : string, duration : string, displaced? : boolean, stem_direction? : number, x_shift : number, style : string, slashed : boolean, glyph_font_scale? : number}); + static DEBUG : boolean; + getCategory() : string; + setContext(context : IRenderContext) : NoteHead; + getWidth() : number; + isDisplaced() : boolean; + getStyle() : {shadowColor? : string, shadowBlur? : string, fillStyle? : string, strokeStyle? : string}; + setStyle(style : {shadowColor? : string, shadowBlur? : string, fillStyle? : string, strokeStyle? : string}) : NoteHead; + getGlyph() : Glyph; + setX(x : number) : NoteHead; + getY() : number; + setY(y : number) : NoteHead; + getLine() : number; + setLine(line : number) : NoteHead; + getAbsoluteX() : number; + getBoundingBox() : BoundingBox; + applyStyle(context : IRenderContext) : NoteHead; + setStave(stave : Stave) : NoteHead; + preFormat() : NoteHead; + draw() : void; + } + + class Ornament extends Modifier { + constructor(type : string); + static CATEGORY : string; + static DEBUG : boolean; + static format(ornaments : Ornament[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; + setDelayed(delayed : boolean) : Ornament; + setUpperAccidental(acc : string) : Ornament; + setLowerAccidental(acc : string) : Ornament; + draw() : void; + } + + export module PedalMarking { + enum Styles {TEXT, BRACKET, MIXED} + } + + class PedalMarking { + constructor(notes : Note[]); //inconsistent name: 'notes' is called 'type', suggesting string (is Note[]) + static DEBUG : boolean; + static createSustain(notes : Note[]) : PedalMarking; + static createSostenuto(notes : Note[]) : PedalMarking; + static createUnaCorda(notes : Note[]) : PedalMarking; + setCustomText(depress? : string, release? : string) : PedalMarking; + setStyle(style : PedalMarking.Styles) : PedalMarking; + setLine(line : number) : PedalMarking; + setContext(context : IRenderContext) : PedalMarking; + drawBracketed() : void; + drawText() : void; + draw() : void; + } + + class RaphaelContext implements IRenderContext { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes or type inconsistencies mentioned below are fixed + setLineWidth(width : number) : RaphaelContext; + glow() : RaphaelContext; + + constructor(element : HTMLElement); + setFont(family : string, size : number, weight? : number) : RaphaelContext; + setRawFont(font : string) : RaphaelContext; + setFillStyle(style : string) : RaphaelContext; + setBackgroundFillStyle(style : string) : RaphaelContext; + setStrokeStyle(style : string) : RaphaelContext; + setShadowColor(style : string) : RaphaelContext; //inconsistent name: style -> color + setShadowBlur(blur : string) : RaphaelContext; + setLineWidth(width : number) : void; //inconsistent type: void -> RaphaelContext + setLineDash(dash : string) : RaphaelContext; + setLineCap(cap_type : string) : RaphaelContext; + scale(x : number, y : number) : RaphaelContext; + clear() : void; + resize(width : number, height : number) : RaphaelContext; + setViewBox(viewBox : string) : void; + rect(x : number, y : number, width : number, height : number) : void; + fillRect(x : number, y : number, width : number, height : number) : RaphaelContext; + clearRect(x : number, y : number, width : number, height : number) : RaphaelContext; + beginPath() : RaphaelContext; + moveTo(x : number, y : number) : RaphaelContext; + lineTo(x : number, y : number) : RaphaelContext; + bezierCurveToTo(x1 : number, y1 : number, x2 : number, y2 : number, x : number, y : number) : RaphaelContext; + quadraticCurveToTo(x1 : number, y1 : number, x : number, y : number) : RaphaelContext; //inconsistent name: x, y -> x2, y2 + arc(x : number, y : number, radius : number, startAngle : number, endAngle : number, antiClockwise : boolean) : RaphaelContext; + glow() : {width : number, fill : boolean, opacity : number, offsetx : number, offsety : number, color : string}; //inconsistent type : Object -> RaphaelContext + fill() : RaphaelContext; + stroke() : RaphaelContext; + closePath() : RaphaelContext; + measureText(text : string) : {width : number, height : number}; + fillText(text : string, x : number, y : number) : RaphaelContext; + save() : RaphaelContext; + restore() : RaphaelContext; + } + + export module Renderer { + enum Backends {CANVAS, RAPHAEL, SVG, VML} + enum LineEndType {NONE, UP, DOWN} + } + + class Renderer { + constructor(sel : HTMLElement, backend : Renderer.Backends) + static USE_CANVAS_PROXY : boolean; + static buildContext(sel : HTMLElement, backend : Renderer.Backends, width? : number, height? : number, background? : string) : IRenderContext; + static getCanvasContext(sel : HTMLElement, backend : Renderer.Backends, width? : number, height? : number, background? : string) : CanvasContext; + static getRaphaelContext(sel : HTMLElement, backend : Renderer.Backends, width? : number, height? : number, background? : string) : RaphaelContext; + static getSVGContext(sel : HTMLElement, backend : Renderer.Backends, width? : number, height? : number, background? : string) : SVGContext; + static bolsterCanvasContext(ctx : CanvasRenderingContext2D) : CanvasContext; + static drawDashedLine(context : IRenderContext, fromX : number, fromY : number, toX : number, toY : number, dashPattern : number[]) : void; + resize(width : number, height : number) : Renderer; + getContext() : IRenderContext; + } + + export module Repetition { + enum type {NONE, CODA_LEFT, CODA_RIGHT, SEGNO_LEFT, SEGNO_RIGHT, DC, DC_AL_CODA, DC_AL_FINE, DS, DS_AL_CODA, DS_AL_FINE, FINE} + } + + class Repetition extends StaveModifier { + constructor(type : Repetition.type, x : number, y_shift : number); + getCategory() : string; + setShiftX(x : number) : Repetition; + setShiftY(y : number) : Repetition; + draw(stave : Stave, x : number) : Repetition; + drawCodaFixed(stave : Stave, x : number) : Repetition; + drawSignoFixed(stave : Stave, x : number) : Repetition; //inconsistent name: drawSignoFixed -> drawSegnoFixed + drawSymbolText(stave : Stave, x : number, text : string, draw_coda : boolean) : Repetition; + } + + class Stave { + constructor(x : number, y : number, width : number, options? : {vertical_bar_width? : number, glyph_spacing_px? : number, num_lines? : number, fill_style? : string, spacing_between_lines_px? : number, space_above_staff_ln? : number, space_below_staff_ln? : number, top_text_position? : number}); + static THICKNESS : number; + resetLines() : void; + setNoteStartX(x : number) : Stave; + getNoteStartX() : number; + getNoteEndX() : number; + getTieStartX() : number; + getTieEndX() : number; + setContext(context : IRenderContext) : Stave; + getContext() : IRenderContext; + getX() : number; + getNumLines() : number; + setY(y : number) : Stave; + setWidth(width : number) : Stave; + getWidth() : number; + setMeasure(measure : number) : Stave; + setBegBarType(type : Barline.type) : Stave; + setEndBarType(type : Barline.type) : Stave; + getModifierXShift(index : number) : number; + setRepetitionTypeLeft(type : Repetition.type, y : number) : Stave; + setRepetitionTypeRight(type : Repetition.type, y : number) : Stave; + setVoltaType(type : Volta.type, number_t : number, y : number) : Stave; + setSection(section : string, y : number) : Stave; + setTempo(tempo : {name? : string, duration : string, dots : number, bpm : number}, y : number) : Stave; + setText(text : string, position : Modifier.Position, options? : {shift_x? : number, shift_y? : number, justification? : TextNote.Justification}) : Stave; + getHeight() : number; + getSpacingBetweenLines() : number; + getBoundingBix() : BoundingBox; + getBottomY() : number; + getBottomLineY() : number; + getYForLine(line : number) : number; + getYForTopText(line? : number) : number; + getYForBottomText(line? : number) : number; + getYForNote(line? : number) : number; + getYForGlyphs() : number; + addGlyph(glypg : Glyph) : Stave; + addEndGlyph(glypg : Glyph) : Stave; + addModifier(modifier : StaveModifier) : Stave; + addEndModifier(modifier : StaveModifier) : Stave; + addKeySignature(keySpec : string) : Stave; + addClef(clef : string, size? : string, annotation? : string) : Stave; + addEndClef(clef : string, size? : string, annotation? : string) : Stave; + addTimeSignature(timeSpec : string, customPadding? : number) : void; //inconsistent type: void -> Stave + addTrebleGlyph() : Stave; + draw() : void; + drawVertical(x : number, isDouble : boolean) : void; + drawVerticalFixed(x : number, isDouble : boolean) : void; + drawVerticalBar(x : number) : void; + drawVerticalBarFixed(x : number) : void; + getConfigForLines() : {visible : boolean}[]; + setConfigForLine(line_number : number, line_config : {visible : boolean}) : Stave; + setConfigForLines(lines_configuration : {visible : boolean}[]) : Stave; + } + + export module StaveConnector { + enum type {SINGLE_RIGHT, SINGLE_LEFT, SINGLE, DOUBLE, BRACE, BRACKET, BOLD_DOUBLE_LEFT, BOLD_DOUBLE_RIGHT, THIN_DOUBLE} + } + + class StaveConnector { + constructor(top_stave : Stave, bottom_stave : Stave); + setContext(ctx : IRenderContext) : StaveConnector; + setType(type : StaveConnector.type) : StaveConnector; + setText(text : string, text_options? : {shift_x? : number, shift_y? : number}) : StaveConnector; + setFont(font : {family? : string, size? : number, weight? : string}) : StaveConnector; + setXShift(x_shift : number) : StaveConnector; + draw() : void; + drawBoldDoubleLine(ctx : Object, type : StaveConnector.type, topX : number, topY : number, botY : number) : void; + } + + export module StaveHairpin { + enum type {CRESC, DECRESC} + } + + class StaveHairpin { + constructor(notes : {first_note : Note, last_note : Note}, type : StaveHairpin.type); + static FormatByTicksAndDraw(ctx : IRenderContext, formatter : Formatter, notes : Note[], type : StaveHairpin.type, position : Modifier.Position, options? : {height? : number, y_shift : number, left_shift_px : number, right_shift_px : number}) : void; + setContext(context : IRenderContext) : StaveHairpin; + setPosition(position : Modifier.Position) : StaveHairpin; + setRenderOptions(options : {height? : number, y_shift : number, left_shift_px : number, right_shift_px : number}) : StaveHairpin; + setNotes(notes : {first_note : Note, last_note : Note}) : StaveHairpin; + draw() : boolean; + } + + export module StaveLine { + enum TextVerticalPosition {TOP, BOTTOM} + enum TextJustification {LEFT, CENTER, RIGHT} + } + + class StaveLine { + constructor(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}); + setContext(context : Object) : StaveLine; + setFont(font : {family : string, size : number, weight : string}) : StaveLine; + setText(text : string) : StaveLine; + setNotes(notes : {first_note: Note, last_note: Note, first_indices? : number[], last_indices? : number[]}) : StaveLine; + applyLineStyle() : void; + applyFontStyle() : void; + draw() : StaveLine; + + //inconsistent API: this should be set via an options object in the constructor + render_options : {padding_left : number, padding_right : number, line_width : number, line_dash : number[], rounded_end : boolean, color : string, draw_start_arrow : boolean, draw_end_arrow : boolean, arrowhead_length : number, arrowhead_angle : number, text_position_vertical : StaveLine.TextVerticalPosition, text_justification : StaveLine.TextJustification}; + } + + class StaveModifier { + getCategory() : string; + makeSpacer(padding : number) : {getContext: Function, setStave: Function, renderToStave: Function, getMetrics: Function}; + placeGlyphOnLine(glyph : Glyph, stave : Stave, line : number) : void; + setPadding(padding : number) : void; + addToStave(stave : Stave, firstGlyph : boolean) : StaveModifier; + addToStaveEnd(stave : Stave, firstGlyph : boolean) : StaveModifier; + addModifier() : void; + addEndModifier() : void; + } + + class StaveNote extends StemmableNote { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes and/or inconsistencies mentioned below are fixed + buildStem() : StemmableNote; + setStave(stave : Stave) : Note; + addModifier(modifier : Modifier, index? : number) : Note; + getModifierStartXY() : {x : number, y : number}; + getDots() : number; + + constructor(note_struct : {type : string, dots? : number, duration : string, clef : string, keys : string[], octave_shift? : number}); + static CATEGORY : string; + static DEBUG : boolean; + static STEM_UP : number; + static STEM_DOWN : number; + static format(notes : StaveNote[] , state : {left_shift : number, right_shift : number, text_line : number}) : boolean; + static formatByY(notes : StaveNote[] , state : {left_shift : number, right_shift : number, text_line : number}) : void; + static postFormat(notes : StaveNote[]) : boolean; + buildStem() : void; //inconsistent type: void -> StaveNote + buildNoteHeads() : void; + autoStem() : void; + calculateKeyProps() : void; + getBoundingBox() : BoundingBox; + getLineNumber() : number; + isRest() : boolean; + isChord() : boolean; + hasStem() : boolean; + getYForTopText(text_line : number) : number; + getYForBottomText(text_line : number) : number; + setStave(stave : Stave) : StaveNote; + getKeys() : string[]; + getKeyProps() : {key : string, octave : number, line : number, int_value : number, accidental : string, code : number, stroke : number, shift_right : number, displaced : boolean}[]; + isDisplaced() : boolean; + setNoteDisplaced(displaced : boolean) : StaveNote; + getTieRightX() : number; + getTieLeftX() : number; + getLineForRest() : number; + getModifierStartXY(position : Modifier.Position, index : number) : {x : number, y : number}; + setStyle(style : {shadowColor? : string, shadowBlur? : string, fillStyle? : string, strokeStyle? : string}) : void; // inconsistent type: void -> StaveNote + setKeyStyle(index : number, style : string) : StaveNote; + setKeyLine(index : number, line : number) : StaveNote; + getKeyLine(index : number) : number; + addToModifierContext(mContext : ModifierContext) : StaveNote; + addModifier(index : number, modifier : Modifier) : StaveNote; + addAccidental(index : number, accidental : Accidental) : StaveNote; + addArticulation(index : number, articulation : Articulation) : StaveNote; + addAnnotation(index : number, annotation : Annotation) : StaveNote; + addDot(index : number) : StaveNote; + addDotToAll() : StaveNote; + getAccidentals() : Accidental[]; + getDots() : Dot[]; + getVoiceShiftWidth() : number; + calcExtraPx() : void; + preFormat() : void; + getNoteHeadBounds() : {y_top: number, y_bottom: number, highest_line: number, lowest_line: number}; + getNoteHeadBeginX() : number; + getNoteHeadEndX() : number; + drawLedgerLines() : void; + drawModifiers() : void; + drawFlag() : void; + drawNoteHeads() : void; + drawStem(struct : {x_begin? : number, x_end? : number, y_top? : number, y_bottom? : number, y_extend? : number, stem_extension? : number, stem_direction? : number}) : void; + draw() : void; + } + + class StaveSection extends Modifier { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes + draw() : void; + + constructor(section : string, x : number, shift_y : number); + getCategory() : string; + setStaveSection(section : string) : StaveSection; + setShiftX(x : number) : StaveSection; + setShiftY(y : number) : StaveSection; + draw(stave : Stave, shift_x : number) : StaveSection; + } + + class StaveTempo extends StaveModifier { + constructor(tempo : {name? : string, duration : string, dots : number, bpm : number}, x : number, shift_y : number); + getCategory() : string; + setTempo(tempo : {name : string, duration : string, dots : number, bpm : number}) : StaveTempo; + setShiftX(x : number) : StaveTempo; + setShiftY(y : number) : StaveTempo; + draw(stave : Stave, shift_x : number) : StaveTempo; + } + + class StaveText extends Modifier { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes + draw() : void; + + constructor(text : string, position : Modifier.Position, options? : {shift_x? : number, shift_y? : number, justification? : TextNote.Justification}); + getCategory() : string; + setStaveText(text : string) : StaveText; + setShiftX(x : number) : StaveText; + setShiftY(y : number) : StaveText; + setFont(font : {family? : string, size? : number, weight? : number}) : void; + setText(text : string) : void; + draw(stave : Stave) : StaveText; + } + + class StaveTie { + constructor(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}, text : string); + setContext(context : IRenderContext) : StaveTie; + setFont(font : {family : string, size : number, weight : string}) : StaveTie; + setNotes(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}) : StaveTie; + isPartial() : boolean; + renderTie(params : {first_ys : number[], last_ys : number[], last_x_px : number, first_x_px : number, direction : number}) : void; + renderText(first_x_px : number, last_x_px : number) : void; + draw() : boolean; + } + + class Stem { + constructor(options : {x_begin? : number, x_end? : number, y_top? : number, y_bottom? : number, y_extend? : number, stem_extension? : number, stem_direction? : number}); + static DEBUG : boolean; + static UP : number; + static DOWN : number; + static WIDTH : number; + static HEIGHT : number; + setNoteHeadXBounds(x_begin : number, x_end : number) : Stem; + setDirection(direction : number) : void; + setExtension(extension : number) : void; + setYBounds(y_top : number, y_bottom : number) : void; + getCategory() : string; + setContext(context : IRenderContext) : Stem; + getHeight() : number; + getBoundingBox() : BoundingBox; + getExtents() : {topY : number, baseY : number}; + setStyle(style : {shadowColor? : string, shadowBlur? : string, fillStyle? : string, strokeStyle? : string}) : void; + getStyle() : {shadowColor? : string, shadowBlur? : string, fillStyle? : string, strokeStyle? : string}; + applyStyle(context : IRenderContext) : Stem; + draw() : void; + } + + class StemmableNote extends Note { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes + setBeam() : Note; + + constructor(note_struct : {type? : string, dots? : number, duration : string}); + static DEBUG : boolean; + getStem() : Stem; + setStem(stem : Stem) : StemmableNote; + buildStem() : StemmableNote; + getStemLength() : number; + getBeamCount() : number; + getStemMinumumLength() : number; //inconsistent name: getStemMinumumLength -> getStemMinimumLength + getStemDirection() : number; + setStemDirection(direction : number) : StemmableNote; + getStemX() : number; + getCenterGlyphX() : number; + getStemExtension() : number; + setStemLength() : number; + getStemExtents() : {topY : number, baseY : number}; + setBeam(beam : Beam) : StemmableNote; + getYForTopText(text_line : number) : number; + getYForBottomText(text_line : number) : number; + postFormat() : StemmableNote; + drawStem(stem_struct : {x_begin? : number, x_end? : number, y_top? : number, y_bottom? : number, y_extend? : number, stem_extension? : number, stem_direction? : number}) : void; + } + + class StringNumber extends Modifier { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes + setNote(note : Note) : StringNumber; + + constructor(number : number); + static CATEGORY : string; + static format(nums : StringNumber[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; + getNote() : Note; + setNote(note : StaveNote) : StringNumber; + getIndex() : number; + setIndex(index : number) : StringNumber; + setLineEndType(leg : Renderer.LineEndType) : StringNumber; + getPosition() : Modifier.Position; + setPosition(position : Modifier.Position) : StringNumber; + setStringNumber(number : number) : StringNumber; + setOffsetX(x : number) : StringNumber; + setOffsetY(y : number) : StringNumber; + setLastNote(note : StaveNote) : StringNumber; + setDashed(dashed : boolean) : StringNumber; + draw() : void; + } + + export module Stroke { + enum Type {BRUSH_DOWN, BRUSH_UP, ROLL_DOWN, ROLL_UP, RASQUEDO_DOWN, RASQUEDO_UP} + } + + class Stroke extends Modifier { + constructor(type : Stroke.Type, options : {all_voices? : boolean}); + static CATEGORY : string; + static format(strokes : Stroke[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; + getPosition() : Modifier.Position; + addEndNote(note : Note) : Stroke; + draw() : void; + } + + class SVGContext implements IRenderContext { + constructor(element : HTMLElement); + iePolyfill() : boolean; + setFont(family : string, size : number, weight? : number) : SVGContext; + setRawFont(font : string) : SVGContext; + setFillStyle(style : string) : SVGContext; + setBackgroundFillStyle(style : string) : SVGContext; + setStrokeStyle(style : string) : SVGContext; + setShadowColor(style : string) : SVGContext; //inconsistent name: style -> color + setShadowBlur(blur : string) : SVGContext; + setLineWidth(width : number) : SVGContext; + setLineDash(dash : string) : SVGContext; + setLineCap(cap_type : string) : SVGContext; + resize(width : number, height : number) : SVGContext; + scale(x : number, y : number) : SVGContext; + setViewBox(xMin : number, yMin : number, width : number, height : number) : void; + clear() : void; + rect(x : number, y : number, width : number, height : number) : SVGContext; + fillRect(x : number, y : number, width : number, height : number) : SVGContext; + clearRect(x : number, y : number, width : number, height : number) : SVGContext; + beginPath() : SVGContext; + moveTo(x : number, y : number) : SVGContext; + lineTo(x : number, y : number) : SVGContext; + bezierCurveToTo(x1 : number, y1 : number, x2 : number, y2 : number, x : number, y : number) : SVGContext; + quadraticCurveToTo(x1 : number, y1 : number, x : number, y : number) : SVGContext; //inconsistent: x, y -> x2, y2 + arc(x : number, y : number, radius : number, startAngle : number, endAngle : number, antiClockwise : boolean) : SVGContext; + closePath() : SVGContext; + glow() : SVGContext; + fill() : SVGContext; + stroke() : SVGContext; + measureText(text : string) : SVGRect; + ieMeasureTextFix(bbox : SVGRect, text : string) : {x : number, y : number, width : number, height : number}; + fillText(text : string, x : number, y : number) : SVGContext; + save() : SVGContext; + restore() : SVGContext; + } + + class TabNote extends StemmableNote { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes + setStave(stave : Stave) : Note; + getModifierStartXY() : {x : number, y : number}; + + constructor(tab_struct : {positions : {str : number, fret : number}[], type : string, dots? : number, duration : string}, draw_stem : boolean); + getCategory() : string; + setGhost(ghost : boolean) : TabNote; + hasStem() : boolean; + getStemExtension() : number; + addDot() : TabNote; + updateWidth() : void; + setStave(stave : Stave) : TabNote; + getPositions() : {str : number, fret : number}[]; + addToModifierContext(mc : ModifierContext) : TabNote; + getTieRightX() : number; + getTieLeftX() : number; + getModifierStartXY(position : Modifier.Position, index : number) : {x : number, y : number}; + getLineForRest() : number; + preFormat() : void; + getStemX() : number; + getStemY() : number; + getStemExtents() : {topY : number, baseY : number}; + drawFlag() : void; + drawModifiers() : void; + drawStemThrough() : void; + draw() : void; + } + + class TabSlide extends TabTie { + constructor(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}, direction : number); + static SLIDE_UP : number; + static SLIDE_DOWN : number; + static createSlideUp(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}) : TabSlide; + static createSlideDown(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}) : TabSlide; + renderTie(params : {first_ys : number[], last_ys : number[], last_x_px : number, first_x_px : number, direction : number}) : void; + } + + class TabStave extends Stave { + constructor(x : number, y : number, width : number, options : {vertical_bar_width? : number, glyph_spacing_px? : number, num_lines? : number, fill_style? : string, spacing_between_lines_px? : number, space_above_staff_ln? : number, space_below_staff_ln? : number, top_text_position? : number}); + getYForGlyphs() : number; + addTabGlyph() : TabStave; + } + + class TabTie extends StaveTie { + constructor(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}, text : string); + createHammeron(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}) : TabTie; + createPulloff(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}) : TabTie; + draw() : boolean; + } + + export module TextBracket { + enum Position {TOP, BOTTOM} + } + + class TextBracket { + constructor(bracket_data : {start : Note, stop : Note, text? : string, superscript? : string, position : TextBracket.Position}); + static DEBUG : boolean; + applyStyle(context : IRenderContext) : TextBracket; + setDashed(dashed : boolean, dash? : number[]) : TextBracket; + setFont(family : string, size : number, weight? : number) : TextBracket; + setContext(context : IRenderContext) : TextBracket; + setLine(line : number) : TextBracket; + draw() : void; + } + + class TextDynamics extends Note { + constructor(text_struct : {duration : string, text : string, line? : number}); + static DEBUG : boolean; + setLine(line : number) : TextDynamics; + preFormat() : TextDynamics; + draw() : void; + } + + export module TextNote { + enum Justification {LEFT, CENTER, RIGHT} + } + + class TextNote extends Note { + constructor(text_struct : {duration : string, text : string, superscript : boolean, subscript : boolean, glyph : string, font? : {family : string, size : number, weight : string}, line? : number, smooth? : boolean, ignore_ticks? : boolean}); + setJustification(just : TextNote.Justification) : TextNote; + setLine(line : number) : TextNote; + preFormat() : void; + draw() : void; + } + + class Tickable { + setContext(context : IRenderContext) : void; + getBoundingBox() : BoundingBox; + getTicks() : Fraction; + shouldIgnoreTicks() : boolean; + getWidth() : number; + setXShift(x : number) : Tickable; + getCenterXShift() : number; + isCenterAligned() : boolean; + setCenterAlignment(align_center : boolean) : Tickable; + getVoice() : Voice; + setVoice(voice : Voice) : void; + getTuplet() : Tuplet; + setTuplet(tuplet : Tuplet) : Tickable; + addToModifierContext(mc : ModifierContext) : void; + addModifier(mod : Modifier) : Tickable; + setTickContext(tc : TickContext) : void; + preFormat() : void; + postFormat() : Tickable; + getIntrinsicTicks() : Fraction; + setIntrinsicTicks(intrinsicTicks : Fraction) : void; + getTickMultiplier() : Fraction; + applyTickMultiplier(numerator : number, denominator : number) : void; + setDuration(duration : Fraction) : void; + } + + class TickContext { + setContext(context : IRenderContext) : void; + getContext() : IRenderContext; + shouldIgnoreTicks() : boolean; + getWidth() : number; + getX() : number; + setX(x : number) : TickContext; + getPixelsUsed() : number; + setPixelsUsed(pixelsUsed : number) : TickContext; + setPadding(padding : number) : TickContext; + getMaxTicks() : number; + getMinTicks() : number; + getTickables() : Tickable[]; + getCenterAlignedTickables() : Tickable[]; + getMetrics() : {width : number, notePx : number, extraLeftPx : number, extraRightPx : number}; + getCurrentTick() : Fraction; + setCurrentTick(tick : Fraction) : void; + getExtraPx() : {left: number, right: number, extraLeft : number, extraRight : number}; + addTickable(tickable : Tickable) : TickContext; + preFormat() : TickContext; + postFormat() : TickContext; + static getNextContext(tContext : TickContext) : TickContext; + } + + class TimeSignature extends StaveModifier { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes + addModifier() : void; + addEndModifier() : void; + + constructor(timeSpec : string, customPadding? : number); + parseTimeSpec(timeSpec : string) : {num : number, glyph : Glyph}; + makeTimeSignatureGlyph(topNums : number[], botNums : number[]) : Glyph; + getTimeSig() : {num : number, glyph : Glyph}; + addModifier(stave : Stave) : void; + addEndModifier(stave : Stave) : void; + } + + class TimeSigNote extends Note { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes or type inconsistencies mentioned below are fixed + setStave(stave : Stave) : Note; + + constructor(timeSpec : string, customPadding : number); + setStave(stave : Stave) : void; //inconsistent type: void -> TimeSignote + getBoundingBox() : BoundingBox; + addToModifierContext() : TimeSigNote; + preFormat() : TimeSigNote; + draw() : void; + } + + class Tremolo extends Modifier { + constructor(num : number); + getCategory() : string; + draw() : void; + } + + class Tuning { + constructor(tuningString? : string); + noteToInteger(noteString : string) : number; + setTuning(tuningString : string) : void; + getValueForString(stringNum : string) : number; + getValueForFret(fretNum : string, stringNum : string) : number; + getNoteForFret(fretNum : string, stringNum : string) : string; + } + + class Tuplet { + constructor(notes : StaveNote[], options : {num_notes? : number, beats_occupied? : number}); + static LOCATION_TOP : number; + static LOCATION_BOTTOM : number; + attach() : void; + detach() : void; + setContext(context : IRenderContext) : Tuplet; + setBracketed(bracketed : boolean) : Tuplet; + setRatioed(ratioed : boolean) : Tuplet; + setTupletLocation(location : number) : Tuplet; + getNotes() : StaveNote[]; + getNoteCount() : number; + getBeatsOccupied() : number; + setBeatsOccupied(beats : number) : void; + resolveGlyphs() : void; + draw() : void; + } + + class Vibrato extends Modifier { + static CATEGORY : string; + static format(vibratos : Vibrato[], state : {left_shift : number, right_shift : number, text_line : number}, context : ModifierContext) : boolean; + setHarsh(harsh : boolean) : Vibrato; + setVibratoWidth(width : number) : Vibrato; + draw() : void; + } + + export module Voice { + enum Mode {STRICT, SOFT, FULL} + } + + class Voice { + constructor(time : {num_beats : number, beat_value : number, resolution : number}); + getTotalTicks() : Fraction; + getTicksUsed() : Fraction; + getLargestTickWidth() : number; + getSmallestTickCount() : Fraction; + getTickables() : Tickable[]; + getMode() : number; + setMode(mode : number) : Voice; + getResolutionMultiplier() : number; + getActualResolution() : number; + setStave(stave : Stave) : Voice; + getBoundingBox() : BoundingBox; + getVoiceGroup() : VoiceGroup; + setVoiceGroup(g : VoiceGroup) : Voice; + setStrict(strict : boolean) : Voice; + isComplete() : boolean; + addTickable(tickable : Tickable) : Voice; + addTickables(tickables : Tickable[]) : Voice; + preFormat() : Voice; + draw(context : IRenderContext, stave? : Stave) : void; + } + + class VoiceGroup { + getVoices() : Voice[]; + getModifierContexts() : ModifierContext[]; + addVoice(voice : Voice) : void; + } + + export module Volta { + enum type {NONE, BEGIN, MID, END, BEGIN_END} + } + + class Volta extends StaveModifier { + constructor(type : Volta.type, number : number, x : number, y_shift : number); + getCategory() : string; + setShiftY(y : number) : Volta; + draw(stave : Stave, x : number) : Volta; + } + } +} \ No newline at end of file From b1dc72bc6e2e247ee96589d433535f6c9cf4efdf Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Sat, 25 Jul 2015 14:15:54 +0200 Subject: [PATCH 02/44] corrected definition for Vex.Flow.StaveNote --- vexflow/vexflow.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 7316987c98..259babf3f9 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -855,7 +855,7 @@ declare module Vex { getModifierStartXY() : {x : number, y : number}; getDots() : number; - constructor(note_struct : {type : string, dots? : number, duration : string, clef : string, keys : string[], octave_shift? : number}); + constructor(note_struct : {type? : string, dots? : number, duration : string, clef : string, keys : string[], octave_shift? : number}); static CATEGORY : string; static DEBUG : boolean; static STEM_UP : number; @@ -884,7 +884,7 @@ declare module Vex { getLineForRest() : number; getModifierStartXY(position : Modifier.Position, index : number) : {x : number, y : number}; setStyle(style : {shadowColor? : string, shadowBlur? : string, fillStyle? : string, strokeStyle? : string}) : void; // inconsistent type: void -> StaveNote - setKeyStyle(index : number, style : string) : StaveNote; + setKeyStyle(index : number, style : {shadowColor? : string, shadowBlur? : string, fillStyle? : string, strokeStyle? : string}) : StaveNote; setKeyLine(index : number, line : number) : StaveNote; getKeyLine(index : number) : number; addToModifierContext(mContext : ModifierContext) : StaveNote; From d2e5432873c2b59db55903430bd2cbe45d41875c Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Sat, 25 Jul 2015 14:28:46 +0200 Subject: [PATCH 03/44] changed constants in Vex.Flow from var to const --- vexflow/vexflow.d.ts | 47 ++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 259babf3f9..afdc5f25a7 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -92,14 +92,14 @@ declare module Vex { module Flow { - var RESOLUTION : number; + const RESOLUTION : number; // from tables.js: - var STEM_WIDTH : number; - var STEM_HEIGHT : number; - var STAVE_LINE_THICKNESS : number; - var TIME4_4 : {num_beats : number, beat_value : number, resolution : number}; - var unicode : {[name : string] : string}; //inconsistent API: this should be private and have a wrapper function like the other tables + const STEM_WIDTH : number; + const STEM_HEIGHT : number; + const STAVE_LINE_THICKNESS : number; + const TIME4_4 : {num_beats : number, beat_value : number, resolution : number}; + const unicode : {[name : string] : string}; //inconsistent API: this should be private and have a wrapper function like the other tables function clefProperties(clef : string) : {line_shift : number}; function keyProperties(key : string, clef : string, params : {octave_shift? : number}) : {key : string, octave : number, line : number, int_value : number, accidental : string, code : number, stroke : number, shift_right : number, displaced : boolean}; function integerToNote(integer : number) : string; @@ -119,6 +119,24 @@ declare module Vex { // from glyph.js: function renderGlyph(ctx : IRenderContext, x_pos : number, y_pos : number, point : number, val : string, nocache : boolean) : void; + // from vexflow_font.js / gonville_original.js / gonville_all.js + var Font : { + glyphs : {x_min : number, x_max : number, ha : number, o : string[]}[]; + cssFontWeight : string; + ascender : number; + underlinePosition : number; + cssFontStyle : string; + boundingBox : {yMin : number, xMin : number, yMax : number, xMax : number}; + resolution : number; + descender : number; + familyName : string; + lineHeight : number; + underlineThickness : number; + + //inconsistent member : this is missing in vexflow_font.js, but present in gonville_original.js and gonville_all.js + original_font_information : {postscript_name : string, version_string : string, vendor_url : string, full_font_name : string, font_family_name : string, copyright : string, description : string, trademark : string, designer : string, designer_url : string, unique_font_identifier : string, license_url : string, license_description : string, manufacturer_name : string, font_sub_family_name : string}; + } + class Accidental extends Modifier { //TODO remove the following lines once TypeScript allows subclass overrides with type changes setNote(note : Note) : Modifier; @@ -352,23 +370,6 @@ declare module Vex { draw() : void; } - var Font : { - glyphs : {x_min : number, x_max : number, ha : number, o : string[]}[]; - cssFontWeight : string; - ascender : number; - underlinePosition : number; - cssFontStyle : string; - boundingBox : {yMin : number, xMin : number, yMax : number, xMax : number}; - resolution : number; - descender : number; - familyName : string; - lineHeight : number; - underlineThickness : number; - - //inconsistent member : this is missing in vexflow_font.js, but present in gonville_original.js and gonville_all.js - original_font_information : {postscript_name : string, version_string : string, vendor_url : string, full_font_name : string, font_family_name : string, copyright : string, description : string, trademark : string, designer : string, designer_url : string, unique_font_identifier : string, license_url : string, license_description : string, manufacturer_name : string, font_sub_family_name : string}; - } - class Formatter { static DEBUG : boolean; static FormatAndDraw(ctx : IRenderContext, stave : Stave, notes : StaveNote[], params : {auto_beam : boolean, align_rests : boolean}) : BoundingBox; From a8643986acbfff0e6b37728ee023546a09205964 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Tue, 4 Aug 2015 03:12:43 +0200 Subject: [PATCH 04/44] fixed definition of Vex.Flow.Bend --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index afdc5f25a7..2d3cae9660 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -222,7 +222,7 @@ declare module Vex { static generateBeams(notes : StemmableNote[], config? : {groups? : Fraction[], stem_direction? : number, beam_rests? : boolean, beam_middle_only? : boolean, show_stemlets? : boolean, maintain_stem_directions? : boolean}) : Beam[]; } - class Bend { + class Bend extends Modifier { constructor(text : string, release? : boolean, phrase? : {type : number, text : string, width : number}[]); static CATEGORY : string; static UP : number; From d64b972ee9095b53fc8f6078680068b72c00ddae Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Tue, 4 Aug 2015 03:21:29 +0200 Subject: [PATCH 05/44] fixed definition of Vex.Flow.GraceNote --- vexflow/vexflow.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 2d3cae9660..ab995f3f1a 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -468,6 +468,7 @@ declare module Vex { } class GraceNote extends StaveNote { + constructor(note_struct : {slash? : boolean, type? : string, dots? : number, duration : string, clef? : string, keys : string[], octave_shift? : number, auto_stem? : boolean, stem_direction? : number}); getStemExtension() : number; getCategory() : string; draw() : void; From b2d719a615fe0766ef0f21db4c3e8897114ee593 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Tue, 4 Aug 2015 03:36:32 +0200 Subject: [PATCH 06/44] fixed definition of Vex.Flow.GraceNoteGroup --- vexflow/vexflow.d.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index ab995f3f1a..2ffc1e6482 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -474,15 +474,19 @@ declare module Vex { draw() : void; } - class GraceNoteGroup { + class GraceNoteGroup extends Modifier { + //TODO remove the following lines once TypeScript allows subclass overrides with type changes or type inconsistencies mentioned below are fixed + setWidth(width : number) : Modifier; + setNote(note : StaveNote) : Modifier; + constructor(grace_notes : GraceNote[], show_slur? : boolean); //inconsistent name: 'show_slur' is called 'config', suggesting object (is boolean) static CATEGORY : string; static DEBUG : boolean; static format(gracenote_groups : GraceNoteGroup[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; preFormat() : void; beamNotes() : GraceNoteGroup; - setNote(note : Note) : void; - setWidth(width : number) : void; + setNote(note : Note) : void; //inconsistent type: void -> GraceNoteGroup + setWidth(width : number) : void; //inconsistent type: void -> GraceNoteGroup getWidth() : number; setXShift(x_shift : number) : void; draw() : void; From 25288cd386bf1168eb621a00be3665e7ef073cf3 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Tue, 4 Aug 2015 04:10:16 +0200 Subject: [PATCH 07/44] changed difinition of Vex.Flow.Music - changed NUM_TONES from static to const - added definitions of helper tables --- vexflow/vexflow.d.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 2ffc1e6482..75908add3a 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -552,8 +552,21 @@ declare module Vex { postFormat() : void; } + module Music { + const NUM_TONES : number; + const roots : string[]; + const root_values : number[]; + const root_indices : {[root : string] : number}; + const canonical_notes : string[]; + const diatonic_intervals : string[]; + const diatonic_accidentals : {[diatonic_interval : string] : {note : number, accidental : number}}; + const intervals : {[interval : string] : number}; + const scales : {[scale : string] : number[]}; + const accidentals : string[]; + const noteValues : {[value : string] : {root_index : number, int_val : number}}; + } + class Music { - static NUM_TONES : number; isValidNoteValue(note : number) : boolean; isValidIntervalValue(interval : number) : boolean; getNoteParts(noteString : string) : {root : string, accidental : string}; From 52dbf6cb6f6875b2ce9355ecaf6e74f334abd962 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Tue, 4 Aug 2015 11:41:33 +0200 Subject: [PATCH 08/44] fixed definition of Vex.Flow.NoteHead --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 75908add3a..a69baaba89 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -628,7 +628,7 @@ declare module Vex { } class NoteHead extends Note { - constructor(head_options : {x? : number, y? : number, note_type? : string, duration : string, displaced? : boolean, stem_direction? : number, x_shift : number, style : string, slashed : boolean, glyph_font_scale? : number}); + constructor(head_options : {x? : number, y? : number, note_type? : string, duration : string, displaced? : boolean, stem_direction? : number, line : number, x_shift : number, custom_glyph_code? : string, style? : string, slashed? : boolean, glyph_font_scale? : number}); static DEBUG : boolean; getCategory() : string; setContext(context : IRenderContext) : NoteHead; From 09154f4618f532f7290d43f30db56df4b8cd2ec4 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Tue, 4 Aug 2015 11:47:58 +0200 Subject: [PATCH 09/44] changed definition of Vex.Flow.Pedalmarking - added GLYPHS const - changed Styles enum from static to const --- vexflow/vexflow.d.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index a69baaba89..5786f1dbe8 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -662,7 +662,8 @@ declare module Vex { } export module PedalMarking { - enum Styles {TEXT, BRACKET, MIXED} + const enum Styles {TEXT, BRACKET, MIXED} + const GLYPHS : {[name : string] : {code : string, x_shift : number, y_shift : number}}; } class PedalMarking { From a4a2aaf62a8b148ec3f73d3b6978dd2802a820c8 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 16:18:30 +0200 Subject: [PATCH 10/44] changed definition of Vex.Flow.Renderer - changed type of enums to const --- vexflow/vexflow.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 5786f1dbe8..7c795c4d0c 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -721,8 +721,8 @@ declare module Vex { } export module Renderer { - enum Backends {CANVAS, RAPHAEL, SVG, VML} - enum LineEndType {NONE, UP, DOWN} + const enum Backends {CANVAS, RAPHAEL, SVG, VML} + const enum LineEndType {NONE, UP, DOWN} } class Renderer { From b37a49c0049761f9ee242215119f7a998a8b459a Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 16:20:20 +0200 Subject: [PATCH 11/44] changed definition of Vex.Flow.Repetition - changed type enum to const --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 7c795c4d0c..5c5a597a03 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -739,7 +739,7 @@ declare module Vex { } export module Repetition { - enum type {NONE, CODA_LEFT, CODA_RIGHT, SEGNO_LEFT, SEGNO_RIGHT, DC, DC_AL_CODA, DC_AL_FINE, DS, DS_AL_CODA, DS_AL_FINE, FINE} + const enum type {NONE, CODA_LEFT, CODA_RIGHT, SEGNO_LEFT, SEGNO_RIGHT, DC, DC_AL_CODA, DC_AL_FINE, DS, DS_AL_CODA, DS_AL_FINE, FINE} } class Repetition extends StaveModifier { From 531a057c380bbcbd6c21e1817594097333b6e3df Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 16:28:44 +0200 Subject: [PATCH 12/44] changed definition of Vex.Flow.Stave - removed static THICKNESS as it is set by Vex.Flow.STAVE_LINE_THICKNESS --- vexflow/vexflow.d.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 5c5a597a03..e25ff70ea0 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -755,7 +755,6 @@ declare module Vex { class Stave { constructor(x : number, y : number, width : number, options? : {vertical_bar_width? : number, glyph_spacing_px? : number, num_lines? : number, fill_style? : string, spacing_between_lines_px? : number, space_above_staff_ln? : number, space_below_staff_ln? : number, top_text_position? : number}); - static THICKNESS : number; resetLines() : void; setNoteStartX(x : number) : Stave; getNoteStartX() : number; From dbb9d1cbde8c2461ec6e679a991ba9ed16279f8b Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 16:32:38 +0200 Subject: [PATCH 13/44] fixed definition of Vex.Flow.StaveConnector - changed type enum to const - fixed type of setFont() --- vexflow/vexflow.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index e25ff70ea0..8176980860 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -808,7 +808,7 @@ declare module Vex { } export module StaveConnector { - enum type {SINGLE_RIGHT, SINGLE_LEFT, SINGLE, DOUBLE, BRACE, BRACKET, BOLD_DOUBLE_LEFT, BOLD_DOUBLE_RIGHT, THIN_DOUBLE} + const enum type {SINGLE_RIGHT, SINGLE_LEFT, SINGLE, DOUBLE, BRACE, BRACKET, BOLD_DOUBLE_LEFT, BOLD_DOUBLE_RIGHT, THIN_DOUBLE} } class StaveConnector { @@ -816,7 +816,7 @@ declare module Vex { setContext(ctx : IRenderContext) : StaveConnector; setType(type : StaveConnector.type) : StaveConnector; setText(text : string, text_options? : {shift_x? : number, shift_y? : number}) : StaveConnector; - setFont(font : {family? : string, size? : number, weight? : string}) : StaveConnector; + setFont(font : {family? : string, size? : number, weight? : string}) : void; //inconsistent type: void -> StaveConnector setXShift(x_shift : number) : StaveConnector; draw() : void; drawBoldDoubleLine(ctx : Object, type : StaveConnector.type, topX : number, topY : number, botY : number) : void; From b067174872ea5188affd2a2bbf7c478276dd5e45 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 16:39:50 +0200 Subject: [PATCH 14/44] fixed definition of Vex.Flow.StaveHairpin - changed type enum to const - fixed arguments of FormatByTicksAndDraw() - added missing declaration of renderHairpin() --- vexflow/vexflow.d.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 8176980860..c9269a635a 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -823,16 +823,17 @@ declare module Vex { } export module StaveHairpin { - enum type {CRESC, DECRESC} + const enum type {CRESC, DECRESC} } class StaveHairpin { constructor(notes : {first_note : Note, last_note : Note}, type : StaveHairpin.type); - static FormatByTicksAndDraw(ctx : IRenderContext, formatter : Formatter, notes : Note[], type : StaveHairpin.type, position : Modifier.Position, options? : {height? : number, y_shift : number, left_shift_px : number, right_shift_px : number}) : void; + static FormatByTicksAndDraw(ctx : IRenderContext, formatter : Formatter, notes : {first_note : Note, last_note : Note}, type : StaveHairpin.type, position : Modifier.Position, options? : {height : number, y_shift : number, left_shift_ticks : number, right_shift_ticks : number}) : void; setContext(context : IRenderContext) : StaveHairpin; setPosition(position : Modifier.Position) : StaveHairpin; setRenderOptions(options : {height? : number, y_shift : number, left_shift_px : number, right_shift_px : number}) : StaveHairpin; setNotes(notes : {first_note : Note, last_note : Note}) : StaveHairpin; + renderHairpin(params : {first_x : number, last_x : number, first_y : number, last_y : number, staff_height : number}) : void; draw() : boolean; } From 0936292468ff3aef9b52e63bce45ac5941e6b6c8 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 16:45:22 +0200 Subject: [PATCH 15/44] changed definition of Vex.Flow.StaveLine - changed enums to const --- vexflow/vexflow.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index c9269a635a..3d0b5c67ad 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -838,8 +838,8 @@ declare module Vex { } export module StaveLine { - enum TextVerticalPosition {TOP, BOTTOM} - enum TextJustification {LEFT, CENTER, RIGHT} + const enum TextVerticalPosition {TOP, BOTTOM} + const enum TextJustification {LEFT, CENTER, RIGHT} } class StaveLine { From 6add88934ffee7a1c2b336434fec5d0c986593a4 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 16:51:39 +0200 Subject: [PATCH 16/44] fixed definition of Vex.Flow.StaveTempo - fixed arguments of setTempo() --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 3d0b5c67ad..8d2e7193fe 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -945,7 +945,7 @@ declare module Vex { class StaveTempo extends StaveModifier { constructor(tempo : {name? : string, duration : string, dots : number, bpm : number}, x : number, shift_y : number); getCategory() : string; - setTempo(tempo : {name : string, duration : string, dots : number, bpm : number}) : StaveTempo; + setTempo(tempo : {name? : string, duration : string, dots : number, bpm : number}) : StaveTempo; setShiftX(x : number) : StaveTempo; setShiftY(y : number) : StaveTempo; draw(stave : Stave, shift_x : number) : StaveTempo; From 41a8267383f2f381f5926e088ac52b3778d74fab Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 16:56:26 +0200 Subject: [PATCH 17/44] fixed definition of Vex.Flow.StaveTie --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 8d2e7193fe..92fc436549 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -966,7 +966,7 @@ declare module Vex { } class StaveTie { - constructor(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}, text : string); + constructor(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}, text? : string); setContext(context : IRenderContext) : StaveTie; setFont(font : {family : string, size : number, weight : string}) : StaveTie; setNotes(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}) : StaveTie; From 8c097669b0c71b7abb81df264a895e808305cd66 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:03:31 +0200 Subject: [PATCH 18/44] changed definition of Vex.Flow.Stem - changed constants UP and DOWN from static to const - removed constants WIDTH and HEIGHT as they are set by Vex.Flow.STEM_WIDTH and Vex.Flow.STEM_HEIGHT - added hide property --- vexflow/vexflow.d.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 92fc436549..e48416250f 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -976,13 +976,14 @@ declare module Vex { draw() : boolean; } + module Stem { + const UP : number; + const DOWN : number; + } + class Stem { constructor(options : {x_begin? : number, x_end? : number, y_top? : number, y_bottom? : number, y_extend? : number, stem_extension? : number, stem_direction? : number}); static DEBUG : boolean; - static UP : number; - static DOWN : number; - static WIDTH : number; - static HEIGHT : number; setNoteHeadXBounds(x_begin : number, x_end : number) : Stem; setDirection(direction : number) : void; setExtension(extension : number) : void; @@ -996,6 +997,9 @@ declare module Vex { getStyle() : {shadowColor? : string, shadowBlur? : string, fillStyle? : string, strokeStyle? : string}; applyStyle(context : IRenderContext) : Stem; draw() : void; + + //inconsistent API: this should be set via the options object in the constructor + hide : boolean; } class StemmableNote extends Note { From 57bd0ee3d5f77aa5582d24ff3f71bd35320c18f3 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:10:00 +0200 Subject: [PATCH 19/44] fixed definition of Vex.Flow.StringNumber - fixed arguments of setNote() and setLastNote() --- vexflow/vexflow.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index e48416250f..4c792d77c5 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1036,7 +1036,7 @@ declare module Vex { static CATEGORY : string; static format(nums : StringNumber[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; getNote() : Note; - setNote(note : StaveNote) : StringNumber; + setNote(note : StemmableNote) : StringNumber; getIndex() : number; setIndex(index : number) : StringNumber; setLineEndType(leg : Renderer.LineEndType) : StringNumber; @@ -1045,7 +1045,7 @@ declare module Vex { setStringNumber(number : number) : StringNumber; setOffsetX(x : number) : StringNumber; setOffsetY(y : number) : StringNumber; - setLastNote(note : StaveNote) : StringNumber; + setLastNote(note : StemmableNote) : StringNumber; setDashed(dashed : boolean) : StringNumber; draw() : void; } From 41f25f3c763296a867cd484942c2d122b9c1e913 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:12:31 +0200 Subject: [PATCH 20/44] changed definition of Vex.Flow.Stroke - changed Type enum to const --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 4c792d77c5..3a66c318ac 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1051,7 +1051,7 @@ declare module Vex { } export module Stroke { - enum Type {BRUSH_DOWN, BRUSH_UP, ROLL_DOWN, ROLL_UP, RASQUEDO_DOWN, RASQUEDO_UP} + const enum Type {BRUSH_DOWN, BRUSH_UP, ROLL_DOWN, ROLL_UP, RASQUEDO_DOWN, RASQUEDO_UP} } class Stroke extends Modifier { From 45599bb3cfd07e86e7fe778a2a906b1843f45771 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:18:08 +0200 Subject: [PATCH 21/44] fixed definition of Vex.Flow.TabNote --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 3a66c318ac..10f25f3698 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1105,7 +1105,7 @@ declare module Vex { setStave(stave : Stave) : Note; getModifierStartXY() : {x : number, y : number}; - constructor(tab_struct : {positions : {str : number, fret : number}[], type : string, dots? : number, duration : string}, draw_stem : boolean); + constructor(tab_struct : {positions : {str : number, fret : number}[], type? : string, dots? : number, duration : string, stem_direction? : boolean}, draw_stem : boolean); getCategory() : string; setGhost(ghost : boolean) : TabNote; hasStem() : boolean; From 8eb312c09afc94d219873b8e26ba39be45f7483d Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:20:53 +0200 Subject: [PATCH 22/44] fixed definition of Vex.Flow.TabSlide - changed constants SLIDE_UP and SLIDE_DOWN from static to const - fixed constructor arguments --- vexflow/vexflow.d.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 10f25f3698..e2b63cda5b 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1129,10 +1129,13 @@ declare module Vex { draw() : void; } + module TabSlide { + const SLIDE_UP : number; + const SLIDE_DOWN : number; + } + class TabSlide extends TabTie { - constructor(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}, direction : number); - static SLIDE_UP : number; - static SLIDE_DOWN : number; + constructor(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}, direction? : number); static createSlideUp(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}) : TabSlide; static createSlideDown(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}) : TabSlide; renderTie(params : {first_ys : number[], last_ys : number[], last_x_px : number, first_x_px : number, direction : number}) : void; From 0cf5c332311197eba7086e319ea6fb5fd829fc29 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:23:04 +0200 Subject: [PATCH 23/44] fixed definition of Vex.Flow.TabTie --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index e2b63cda5b..5280eb5d5d 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1148,7 +1148,7 @@ declare module Vex { } class TabTie extends StaveTie { - constructor(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}, text : string); + constructor(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}, text? : string); createHammeron(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}) : TabTie; createPulloff(notes : {first_note: Note, last_note: Note, first_indices : number[], last_indices : number[]}) : TabTie; draw() : boolean; From c377f8452fc31a691c8fd19d10c22624412e8cc8 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:25:51 +0200 Subject: [PATCH 24/44] fixed definition of Vex.Flow.TextBracket - changed Positions enum to const - fixed setFont() - fixed constructor argument --- vexflow/vexflow.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 5280eb5d5d..01e3e7fdf5 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1155,15 +1155,15 @@ declare module Vex { } export module TextBracket { - enum Position {TOP, BOTTOM} + const enum Positions {TOP, BOTTOM} } class TextBracket { - constructor(bracket_data : {start : Note, stop : Note, text? : string, superscript? : string, position : TextBracket.Position}); + constructor(bracket_data : {start : Note, stop : Note, text? : string, superscript? : string, position? : TextBracket.Positions}); static DEBUG : boolean; applyStyle(context : IRenderContext) : TextBracket; setDashed(dashed : boolean, dash? : number[]) : TextBracket; - setFont(family : string, size : number, weight? : number) : TextBracket; + setFont({family : string, size : number, weight : string}) : TextBracket; setContext(context : IRenderContext) : TextBracket; setLine(line : number) : TextBracket; draw() : void; From b3f154c5c33d4c5f5da3abbb3b8dc764e4437a4d Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:36:22 +0200 Subject: [PATCH 25/44] fixed definition of Vex.Flow.TextNote - changed Justification enum to const - added GLYPHS const - fixed constructor arguments --- vexflow/vexflow.d.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 01e3e7fdf5..46d1d63226 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1178,11 +1178,12 @@ declare module Vex { } export module TextNote { - enum Justification {LEFT, CENTER, RIGHT} + const enum Justification {LEFT, CENTER, RIGHT} + const GLYPHS : {[name : string] : {code : string, point : number, x_shift : number, y_shift : number}} } class TextNote extends Note { - constructor(text_struct : {duration : string, text : string, superscript : boolean, subscript : boolean, glyph : string, font? : {family : string, size : number, weight : string}, line? : number, smooth? : boolean, ignore_ticks? : boolean}); + constructor(text_struct : {duration : string, text? : string, superscript? : boolean, subscript? : boolean, glyph? : string, font? : {family : string, size : number, weight : string}, line? : number, smooth? : boolean, ignore_ticks? : boolean}); setJustification(just : TextNote.Justification) : TextNote; setLine(line : number) : TextNote; preFormat() : void; From 13650983044cd260606b05d9e59363e57dc772f3 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:40:50 +0200 Subject: [PATCH 26/44] changed definition of Vex.Flow.TimeSignature - added constant glyphs --- vexflow/vexflow.d.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 46d1d63226..113e108e36 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1240,6 +1240,10 @@ declare module Vex { static getNextContext(tContext : TickContext) : TickContext; } + module TimeSignature { + const glyphs : {[name : string] : {code : string, point : number, line : number}}; + } + class TimeSignature extends StaveModifier { //TODO remove the following lines once TypeScript allows subclass overrides with type changes addModifier() : void; From 6970bb6f7889d63bf1df26914bbf787904b44db0 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:44:46 +0200 Subject: [PATCH 27/44] changed definition of Vex.Flow.Tuning - added names constant --- vexflow/vexflow.d.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 113e108e36..7640d4a90f 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1275,6 +1275,10 @@ declare module Vex { draw() : void; } + module Tuning { + const names : {[name : string] : string}; + } + class Tuning { constructor(tuningString? : string); noteToInteger(noteString : string) : number; From dcef9183ea4304eb23bbc924ba64665cecd19fc3 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:47:21 +0200 Subject: [PATCH 28/44] changed definition of Vex.Flow.Tuplet - changed LOCATION_TOP and LOCATION_BOTTOM from static to const --- vexflow/vexflow.d.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 7640d4a90f..bb920c7581 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1288,10 +1288,13 @@ declare module Vex { getNoteForFret(fretNum : string, stringNum : string) : string; } + module Tuplet { + const LOCATION_TOP : number; + const LOCATION_BOTTOM : number; + } + class Tuplet { constructor(notes : StaveNote[], options : {num_notes? : number, beats_occupied? : number}); - static LOCATION_TOP : number; - static LOCATION_BOTTOM : number; attach() : void; detach() : void; setContext(context : IRenderContext) : Tuplet; From 25f06dbb005bcc755789c6e465e1f2010cf21e41 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:50:22 +0200 Subject: [PATCH 29/44] fixed definition of Vex.Flow.Voice - changed enum Mode to const - fixed constructor arguments --- vexflow/vexflow.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index bb920c7581..1cc54fa8a8 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1318,11 +1318,11 @@ declare module Vex { } export module Voice { - enum Mode {STRICT, SOFT, FULL} + const enum Mode {STRICT, SOFT, FULL} } class Voice { - constructor(time : {num_beats : number, beat_value : number, resolution : number}); + constructor(time : {num_beats? : number, beat_value? : number, resolution? : number}); getTotalTicks() : Fraction; getTicksUsed() : Fraction; getLargestTickWidth() : number; From f6c8562355d2c89f09a70e68d2d6ba37b8630594 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:53:41 +0200 Subject: [PATCH 30/44] changed definition of Vex.Flow.Volta - changed type enum to const --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 1cc54fa8a8..c17c4f710d 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1351,7 +1351,7 @@ declare module Vex { } export module Volta { - enum type {NONE, BEGIN, MID, END, BEGIN_END} + const enum type {NONE, BEGIN, MID, END, BEGIN_END} } class Volta extends StaveModifier { From bc8e29fcd034903a9fc80d73942915fea2b48f70 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 17:57:07 +0200 Subject: [PATCH 31/44] fixed definition of Vex.Flow.Glyph - fixed argument of setOptions() --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index c17c4f710d..0707282127 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -452,7 +452,7 @@ declare module Vex { class Glyph { constructor(code : string, point : number, options? : {cache? : boolean, font? : IFont}); - setOptions(options? : {cache? : boolean, font? : IFont}) : void; + setOptions(options : {cache? : boolean, font? : IFont}) : void; setStave(stave : Stave) : Glyph; setXShift(x_shift : number) : Glyph; setYShift(y_shift : number) : Glyph; From 66440e6fb3738bea65937863148483360988ba0e Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 18:00:10 +0200 Subject: [PATCH 32/44] fixed definition of Vex.Flow.TabStave --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 0707282127..815c8c9313 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1142,7 +1142,7 @@ declare module Vex { } class TabStave extends Stave { - constructor(x : number, y : number, width : number, options : {vertical_bar_width? : number, glyph_spacing_px? : number, num_lines? : number, fill_style? : string, spacing_between_lines_px? : number, space_above_staff_ln? : number, space_below_staff_ln? : number, top_text_position? : number}); + constructor(x : number, y : number, width : number, options? : {vertical_bar_width? : number, glyph_spacing_px? : number, num_lines? : number, fill_style? : string, spacing_between_lines_px? : number, space_above_staff_ln? : number, space_below_staff_ln? : number, top_text_position? : number}); getYForGlyphs() : number; addTabGlyph() : TabStave; } From 59dd256bf26ee9c8718848c44b01ce6ee47f4d7b Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 18:02:33 +0200 Subject: [PATCH 33/44] fixed definition of Vex.Flow.Formatter - fixed arguments of FormatAndDraw - fixed arguments of FormatAndDrawTab --- vexflow/vexflow.d.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 815c8c9313..9a2e87a57a 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -372,10 +372,10 @@ declare module Vex { class Formatter { static DEBUG : boolean; - static FormatAndDraw(ctx : IRenderContext, stave : Stave, notes : StaveNote[], params : {auto_beam : boolean, align_rests : boolean}) : BoundingBox; - static FormatAndDraw(ctx : IRenderContext, stave : Stave, notes : StaveNote[], params : boolean) : BoundingBox; - static FormatAndDrawTab(ctx : IRenderContext, tabstave : TabStave, stave : Stave, tabnotes : TabNote[], notes : StaveNote[], autobeam : boolean, params : {auto_beam : boolean, align_rests : boolean}) : void; - static FormatAndDrawTab(ctx : IRenderContext, tabstave : TabStave, stave : Stave, tabnotes : TabNote[], notes : StaveNote[], autobeam : boolean, params : boolean) : void; + static FormatAndDraw(ctx : IRenderContext, stave : Stave, notes : Note[], params : {auto_beam : boolean, align_rests : boolean}) : BoundingBox; + static FormatAndDraw(ctx : IRenderContext, stave : Stave, notes : Note[], params : boolean) : BoundingBox; + static FormatAndDrawTab(ctx : IRenderContext, tabstave : TabStave, stave : Stave, tabnotes : TabNote[], notes : Note[], autobeam : boolean, params : {auto_beam : boolean, align_rests : boolean}) : void; + static FormatAndDrawTab(ctx : IRenderContext, tabstave : TabStave, stave : Stave, tabnotes : TabNote[], notes : Note[], autobeam : boolean, params : boolean) : void; static AlignRestsToNotes(notes : Note[], align_all_notes? : boolean, align_tuplets? : boolean) : Formatter; alignRests(voices : Voice[], align_all_notes : boolean) : void; preCalculateMinTotalWidth(voices : Voice[]) : number; From 15ccac22d6d9550bfd2a0751d10eb7b89a9397bb Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 18:07:13 +0200 Subject: [PATCH 34/44] changed Vex.Flow.Tickable from class to interface - added respective methods to Vex.Flow.Note --- vexflow/vexflow.d.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 9a2e87a57a..dd33c133ed 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -582,7 +582,23 @@ declare module Vex { createScaleMap(keySignature : string) : {[rootName : string] : string}; } - class Note extends Tickable { + class Note implements Tickable { + //from tickable interface: + getTicks() : Fraction; + getCenterXShift() : number; + isCenterAligned() : boolean; + setCenterAlignment(align_center : boolean) : Note; + getTuplet() : Tuplet; + setTuplet(tuplet : Tuplet) : Note; + addToModifierContext(mc : ModifierContext) : void; + preFormat() : void; + postFormat() : Note; + getIntrinsicTicks() : Fraction; + setIntrinsicTicks(intrinsicTicks : Fraction) : void; + getTickMultiplier() : Fraction; + applyTickMultiplier(numerator : number, denominator : number) : void; + setDuration(duration : Fraction) : void; + constructor(note_struct : {type? : string, dots? : number, duration : string}); static CATEGORY : string; getPlayNote() : any; @@ -1190,7 +1206,7 @@ declare module Vex { draw() : void; } - class Tickable { + interface Tickable { setContext(context : IRenderContext) : void; getBoundingBox() : BoundingBox; getTicks() : Fraction; From 727502c429e50b3ee994541d270c588458c1398d Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 18:10:46 +0200 Subject: [PATCH 35/44] fixed definition of Vex.Flow.StaveNote - changed STEM_UP and STEM_DOWN from static to const - fixed constructor arguments --- vexflow/vexflow.d.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index dd33c133ed..19e0c68a31 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -883,6 +883,11 @@ declare module Vex { addEndModifier() : void; } + module StaveNote { + const STEM_UP : number; + const STEM_DOWN : number; + } + class StaveNote extends StemmableNote { //TODO remove the following lines once TypeScript allows subclass overrides with type changes and/or inconsistencies mentioned below are fixed buildStem() : StemmableNote; @@ -891,11 +896,9 @@ declare module Vex { getModifierStartXY() : {x : number, y : number}; getDots() : number; - constructor(note_struct : {type? : string, dots? : number, duration : string, clef : string, keys : string[], octave_shift? : number}); + constructor(note_struct : {type? : string, dots? : number, duration : string, clef? : string, keys : string[], octave_shift? : number, auto_stem? : boolean, stem_direction? : number}); static CATEGORY : string; static DEBUG : boolean; - static STEM_UP : number; - static STEM_DOWN : number; static format(notes : StaveNote[] , state : {left_shift : number, right_shift : number, text_line : number}) : boolean; static formatByY(notes : StaveNote[] , state : {left_shift : number, right_shift : number, text_line : number}) : void; static postFormat(notes : StaveNote[]) : boolean; From f5ec5ac8f0248e112ce4a27aee4cb8ae9005bac8 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 18:13:33 +0200 Subject: [PATCH 36/44] changed Vex.Flow.Annotation - changed enums to const --- vexflow/vexflow.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 19e0c68a31..b1911eb6d1 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -152,8 +152,8 @@ declare module Vex { } export module Annotation { - enum Justify {LEFT, CENTER, RIGHT, CENTER_STEM} - enum VerticalJustify {TOP, CENTER, BOTTOM, CENTER_STEM} + const enum Justify {LEFT, CENTER, RIGHT, CENTER_STEM} + const enum VerticalJustify {TOP, CENTER, BOTTOM, CENTER_STEM} } class Annotation extends Modifier { From 73c743248960acbbb8b1bf834031738f7624ea31 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 18:14:24 +0200 Subject: [PATCH 37/44] changed Vex.Flow.Barline - changed type enum to const --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index b1911eb6d1..5f450190a3 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -188,7 +188,7 @@ declare module Vex { } export module Barline { - enum type {SINGLE, DOUBLE, END, REPEAT_BEGIN, REPEAT_END, REPEAT_BOTH, NONE} + const enum type {SINGLE, DOUBLE, END, REPEAT_BEGIN, REPEAT_END, REPEAT_BOTH, NONE} } class Barline extends StaveModifier { From af4b4626fa2d6123c486c7f2216340efd8728e3d Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 18:15:08 +0200 Subject: [PATCH 38/44] changed definition of Vex.Flow.Curve - changed Position enum to const --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 5f450190a3..f44fb7868a 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -346,7 +346,7 @@ declare module Vex { } export module Curve { - enum Position {NEAR_HEAD, NEAR_TOP} + const enum Position {NEAR_HEAD, NEAR_TOP} } class Curve { From f8fb63d8cc58cf310f04eac958a515158bed9532 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 18:15:50 +0200 Subject: [PATCH 39/44] changed definition of Vex.Flow.Modifier - changed Position enum to const --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index f44fb7868a..2f9b94ac0d 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -514,7 +514,7 @@ declare module Vex { } export module Modifier { - enum Position {LEFT, RIGHT, ABOVE, BELOW} + const enum Position {LEFT, RIGHT, ABOVE, BELOW} } class Modifier { From 77445160adfcdcc1b1ebf20fa27fdedf17b17bc1 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 18:19:54 +0200 Subject: [PATCH 40/44] changed CATEGORY property of several classes from static to const --- vexflow/vexflow.d.ts | 58 +++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 14 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index 2f9b94ac0d..a2666bae94 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -137,12 +137,15 @@ declare module Vex { original_font_information : {postscript_name : string, version_string : string, vendor_url : string, full_font_name : string, font_family_name : string, copyright : string, description : string, trademark : string, designer : string, designer_url : string, unique_font_identifier : string, license_url : string, license_description : string, manufacturer_name : string, font_sub_family_name : string}; } + module Accidental { + const CATEGORY : string; + } + class Accidental extends Modifier { //TODO remove the following lines once TypeScript allows subclass overrides with type changes setNote(note : Note) : Modifier; constructor(type : string); - static CATEGORY : string; static DEBUG : boolean; static format(accidentals : Accidental[], state : {left_shift : number, right_shift : number, text_line : number}) : void; setNote(note : StaveNote) : void; @@ -154,11 +157,11 @@ declare module Vex { export module Annotation { const enum Justify {LEFT, CENTER, RIGHT, CENTER_STEM} const enum VerticalJustify {TOP, CENTER, BOTTOM, CENTER_STEM} + const CATEGORY : string; } class Annotation extends Modifier { constructor(text : string); - static CATEGORY : string; static DEBUG : boolean; static format(annotations : Annotation[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; setTextLine(line : number) : Annotation; @@ -169,9 +172,12 @@ declare module Vex { draw() : void; } + module Articulation { + const CATEGORY : string; + } + class Articulation extends Modifier { constructor(type : string); - static CATEGORY : string; static DEBUG : boolean; static format(articulations : Articulation[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; draw() : void; @@ -222,9 +228,12 @@ declare module Vex { static generateBeams(notes : StemmableNote[], config? : {groups? : Fraction[], stem_direction? : number, beam_rests? : boolean, beam_middle_only? : boolean, show_stemlets? : boolean, maintain_stem_directions? : boolean}) : Beam[]; } + module Bend { + const CATEGORY : string; + } + class Bend extends Modifier { constructor(text : string, release? : boolean, phrase? : {type : number, text : string, width : number}[]); - static CATEGORY : string; static UP : number; static DOWN : number; static format(bends : Bend[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; @@ -359,11 +368,14 @@ declare module Vex { draw() : boolean; } + module Dot { + const CATEGORY : string; + } + class Dot extends Modifier { //TODO remove the following lines once TypeScript allows subclass overrides with type changes or type inconsistencies mentioned below are fixed setNote(note : Note) : Dot; - static CATEGORY : string; static format(dots : number, state : {left_shift : number, right_shift : number, text_line : number}) : void; setNote(note : Note) : void; //inconsistent type: void -> Dot setDotShiftY(y : number) : Dot; @@ -421,9 +433,12 @@ declare module Vex { parse(str : string) : Fraction; } + module FretHandFinger { + const CATEGORY : string; + } + class FretHandFinger extends Modifier { constructor(number : number); - static CATEGORY : string; static format(nums : FretHandFinger[], state : {left_shift : number, right_shift : number, text_line : number}) : void; getNote() : Note; setNote(note : Note) : FretHandFinger; @@ -474,13 +489,16 @@ declare module Vex { draw() : void; } + module GraceNoteGroup { + const CATEGORY : string; + } + class GraceNoteGroup extends Modifier { //TODO remove the following lines once TypeScript allows subclass overrides with type changes or type inconsistencies mentioned below are fixed setWidth(width : number) : Modifier; setNote(note : StaveNote) : Modifier; constructor(grace_notes : GraceNote[], show_slur? : boolean); //inconsistent name: 'show_slur' is called 'config', suggesting object (is boolean) - static CATEGORY : string; static DEBUG : boolean; static format(gracenote_groups : GraceNoteGroup[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; preFormat() : void; @@ -515,10 +533,10 @@ declare module Vex { export module Modifier { const enum Position {LEFT, RIGHT, ABOVE, BELOW} + const CATEGORY : string } class Modifier { - static CATEGORY : string; static DEBUG : boolean; getCategory() : string; getWidth() : number; @@ -582,6 +600,10 @@ declare module Vex { createScaleMap(keySignature : string) : {[rootName : string] : string}; } + module Note { + const CATEGORY : string; + } + class Note implements Tickable { //from tickable interface: getTicks() : Fraction; @@ -600,7 +622,6 @@ declare module Vex { setDuration(duration : Fraction) : void; constructor(note_struct : {type? : string, dots? : number, duration : string}); - static CATEGORY : string; getPlayNote() : any; setPlayNote(note : any) : Note; isRest() : boolean; @@ -666,9 +687,12 @@ declare module Vex { draw() : void; } + module Ornament { + const CATEGORY : string; + } + class Ornament extends Modifier { constructor(type : string); - static CATEGORY : string; static DEBUG : boolean; static format(ornaments : Ornament[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; setDelayed(delayed : boolean) : Ornament; @@ -886,6 +910,7 @@ declare module Vex { module StaveNote { const STEM_UP : number; const STEM_DOWN : number; + const CATEGORY : string; } class StaveNote extends StemmableNote { @@ -897,7 +922,6 @@ declare module Vex { getDots() : number; constructor(note_struct : {type? : string, dots? : number, duration : string, clef? : string, keys : string[], octave_shift? : number, auto_stem? : boolean, stem_direction? : number}); - static CATEGORY : string; static DEBUG : boolean; static format(notes : StaveNote[] , state : {left_shift : number, right_shift : number, text_line : number}) : boolean; static formatByY(notes : StaveNote[] , state : {left_shift : number, right_shift : number, text_line : number}) : void; @@ -1047,12 +1071,15 @@ declare module Vex { drawStem(stem_struct : {x_begin? : number, x_end? : number, y_top? : number, y_bottom? : number, y_extend? : number, stem_extension? : number, stem_direction? : number}) : void; } + module StringNumber { + const CATEGORY : string; + } + class StringNumber extends Modifier { //TODO remove the following lines once TypeScript allows subclass overrides with type changes setNote(note : Note) : StringNumber; constructor(number : number); - static CATEGORY : string; static format(nums : StringNumber[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; getNote() : Note; setNote(note : StemmableNote) : StringNumber; @@ -1071,11 +1098,11 @@ declare module Vex { export module Stroke { const enum Type {BRUSH_DOWN, BRUSH_UP, ROLL_DOWN, ROLL_UP, RASQUEDO_DOWN, RASQUEDO_UP} + const CATEGORY : string; } class Stroke extends Modifier { constructor(type : Stroke.Type, options : {all_voices? : boolean}); - static CATEGORY : string; static format(strokes : Stroke[], state : {left_shift : number, right_shift : number, text_line : number}) : boolean; getPosition() : Modifier.Position; addEndNote(note : Note) : Stroke; @@ -1328,8 +1355,11 @@ declare module Vex { draw() : void; } + module Vibrato { + const CATEGORY : string; + } + class Vibrato extends Modifier { - static CATEGORY : string; static format(vibratos : Vibrato[], state : {left_shift : number, right_shift : number, text_line : number}, context : ModifierContext) : boolean; setHarsh(harsh : boolean) : Vibrato; setVibratoWidth(width : number) : Vibrato; From b330fede59a3c57cd42a931517f5403300bc6fac Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 18:47:42 +0200 Subject: [PATCH 41/44] fixed definition of Vex.Flow.TextBracket - fixed argument of setFont() --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index a2666bae94..ca0c901054 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1209,7 +1209,7 @@ declare module Vex { static DEBUG : boolean; applyStyle(context : IRenderContext) : TextBracket; setDashed(dashed : boolean, dash? : number[]) : TextBracket; - setFont({family : string, size : number, weight : string}) : TextBracket; + setFont(font : {family : string, size : number, weight : string}) : TextBracket; setContext(context : IRenderContext) : TextBracket; setLine(line : number) : TextBracket; draw() : void; From fea6bb785ab5c26b66704df5aa76eb55080d25e3 Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 18:49:37 +0200 Subject: [PATCH 42/44] fixed definition of Vex.Flow.TabNote --- vexflow/vexflow.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index ca0c901054..ca7cc41717 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -1151,7 +1151,7 @@ declare module Vex { setStave(stave : Stave) : Note; getModifierStartXY() : {x : number, y : number}; - constructor(tab_struct : {positions : {str : number, fret : number}[], type? : string, dots? : number, duration : string, stem_direction? : boolean}, draw_stem : boolean); + constructor(tab_struct : {positions : {str : number, fret : number}[], type? : string, dots? : number, duration : string, stem_direction? : boolean}, draw_stem? : boolean); getCategory() : string; setGhost(ghost : boolean) : TabNote; hasStem() : boolean; From b4b5855f86b6bbff66bf691ed4a48ee8755128aa Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 18:55:31 +0200 Subject: [PATCH 43/44] added vexflow-tests.ts --- vexflow/vexflow-tests.ts | 88 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 vexflow/vexflow-tests.ts diff --git a/vexflow/vexflow-tests.ts b/vexflow/vexflow-tests.ts new file mode 100644 index 0000000000..351ad2ee88 --- /dev/null +++ b/vexflow/vexflow-tests.ts @@ -0,0 +1,88 @@ +/// + +var canvas = document.getElementById("canvas"); +var renderer = new Vex.Flow.Renderer(canvas, Vex.Flow.Renderer.Backends.CANVAS); +var ctx = renderer.getContext(); + +// Add a treble clef and time signature +var stave = new Vex.Flow.Stave(10, 0, 550); +stave.setContext(ctx). + addClef("treble"). + addKeySignature("A"). + addTimeSignature("4/4"); + +// Dotted eighth E##, sixteenth Eb, half D, quarter Cm#5 +var notes1 = [ + new Vex.Flow.StaveNote({keys: ["e##/5"], duration: "8d"}). + addAccidental(0, new Vex.Flow.Accidental("##")). + addDotToAll(), + new Vex.Flow.StaveNote({keys: ["eb/5"], duration: "16"}). + addAccidental(0, new Vex.Flow.Accidental("b")), + new Vex.Flow.StaveNote({keys: ["d/5"], duration: "h"}), + new Vex.Flow.StaveNote({keys: ["c/5", "eb/5", "g#/5"], duration: "q"}). + addAccidental(1, new Vex.Flow.Accidental("b")). + addAccidental(2, new Vex.Flow.Accidental("#")) +]; + +// Create a beam for the first two notes +var beam = new Vex.Flow.Beam(notes1.slice(0, 2)); + +// Add a grace note to the half D +var gracenote = new Vex.Flow.GraceNote({keys: ["e/5"], duration: "16", slash: true}); +notes1[2].addModifier(0, new Vex.Flow.GraceNoteGroup([gracenote], true).beamNotes()); + +// Color the chord +notes1[3].setStyle({fillStyle: "blue", strokeStyle: "blue", stemStyle: "blue"}); + +// Create a voice in 4/4 and add notes +var voice1 = new Vex.Flow.Voice({ + num_beats: 4, + beat_value: 4, + resolution: Vex.Flow.RESOLUTION +}).addTickables(notes1); + +// Create a second voice with just one whole note +var voice2 = new Vex.Flow.Voice(Vex.Flow.TIME4_4). + addTickables([new Vex.Flow.StaveNote({keys: ["c/4"], duration: "w"})]); + +// Format and justify the notes to 550 pixels +var formatter = new Vex.Flow.Formatter(). + joinVoices([voice1, voice2]).format([voice1, voice2], 550); + +// Render stave +stave.draw(); + +// Render voices +voice1.draw(ctx, stave); +voice2.draw(ctx, stave); + +// Render beam +beam.setContext(ctx).draw(); + +// Create and draw a tablature stave +var tabstave = new Vex.Flow.TabStave(10, 200, 550); +tabstave.addTabGlyph(); +tabstave.setContext(ctx).draw(); + +// Create some TabNotes +var notes = [ + // A single note + new Vex.Flow.TabNote({ + positions: [{str: 3, fret: 7}], + duration: "q"}), + + // A chord with the note on the 3rd string bent + new Vex.Flow.TabNote({ + positions: [{str: 2, fret: 10}, {str: 3, fret: 9}], + duration: "q"}). + addModifier(new Vex.Flow.Bend("Full"), 1), + + // A single note with a harsh vibrato + new Vex.Flow.TabNote({ + positions: [{str: 2, fret: 5}], + duration: "h"}). + addModifier(new Vex.Flow.Vibrato().setHarsh(true).setVibratoWidth(70), 0) +]; + +// Format ad draw the notes +Vex.Flow.Formatter.FormatAndDraw(ctx, tabstave, notes); \ No newline at end of file From ab17e168530eef2166e42db66f9fa42e1615d74a Mon Sep 17 00:00:00 2001 From: Roman Quiring Date: Thu, 6 Aug 2015 19:04:38 +0200 Subject: [PATCH 44/44] fixed definition of Vex.Flow.Formatter - fixed arguments of FormatAndDraw() - fixed arguments of FormatAndDrawTab() --- vexflow/vexflow.d.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vexflow/vexflow.d.ts b/vexflow/vexflow.d.ts index ca7cc41717..1822c0c67e 100644 --- a/vexflow/vexflow.d.ts +++ b/vexflow/vexflow.d.ts @@ -384,10 +384,10 @@ declare module Vex { class Formatter { static DEBUG : boolean; - static FormatAndDraw(ctx : IRenderContext, stave : Stave, notes : Note[], params : {auto_beam : boolean, align_rests : boolean}) : BoundingBox; - static FormatAndDraw(ctx : IRenderContext, stave : Stave, notes : Note[], params : boolean) : BoundingBox; - static FormatAndDrawTab(ctx : IRenderContext, tabstave : TabStave, stave : Stave, tabnotes : TabNote[], notes : Note[], autobeam : boolean, params : {auto_beam : boolean, align_rests : boolean}) : void; - static FormatAndDrawTab(ctx : IRenderContext, tabstave : TabStave, stave : Stave, tabnotes : TabNote[], notes : Note[], autobeam : boolean, params : boolean) : void; + static FormatAndDraw(ctx : IRenderContext, stave : Stave, notes : Note[], params? : {auto_beam : boolean, align_rests : boolean}) : BoundingBox; + static FormatAndDraw(ctx : IRenderContext, stave : Stave, notes : Note[], params? : boolean) : BoundingBox; + static FormatAndDrawTab(ctx : IRenderContext, tabstave : TabStave, stave : Stave, tabnotes : TabNote[], notes : Note[], autobeam? : boolean, params? : {auto_beam : boolean, align_rests : boolean}) : void; + static FormatAndDrawTab(ctx : IRenderContext, tabstave : TabStave, stave : Stave, tabnotes : TabNote[], notes : Note[], autobeam? : boolean, params? : boolean) : void; static AlignRestsToNotes(notes : Note[], align_all_notes? : boolean, align_tuplets? : boolean) : Formatter; alignRests(voices : Voice[], align_all_notes : boolean) : void; preCalculateMinTotalWidth(voices : Voice[]) : number;